Have a question? Want to report an issue? Contact JFrog support

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Overview

Artifactory provides full support for managing Puppet modules, ensuring optimal and reliable access to Puppet Forge. By aggregating multiple Puppet repositories under a single virtual repository Artifactoryenables upload and download access to all your Puppet modules through a single URL.

As a fully-fledged Puppet repository, on top of its capabilities for advanced artifact management, Artifactory's support for Puppet provides:

  1. The ability to provision Puppet modules from Artifactory to the Puppet command line tool for all repository types.
  2. Calculation of Metadata for Puppet modules hosted in Artifactory's local repositories.
  3. Access to remote Puppet repositories, such as https://forgeapi.puppetlabs.com/, using Remote Repositories which provides proxy and caching functionalities.
  4. Access to multiple Puppet repositories from a single URL by aggregating them under a Virtual Repository. This overcomes the limitation of the Puppet client which can only access a single registry at a time.

  5. Support for flexible puppet repository layouts that allow you to organize your Puppet modules, and assign access privileges according to projects or development teams.
Tip
titlePuppet version support

Artifactory supports Puppet version 4.9.2 and above.

Panel
titlePage Contents

Table of Contents
maxLevel4
minLevel2


Configuration

Local Puppet Repository

To enable calculation of Puppet module metadata in local repositories, set the Package Type to Puppet when you create the repository:

Puppet Local Repository

Repository Layout

Artifactory allows you to define any layout for your Puppet repositories. To upload a module according to your custom layout, you need to package your Puppet files using puppet module build.

This creates a .tar.gz file for your module which you can then upload to any path within your local Puppet repository.

Remote Puppet Repository

Remote Repository defined in Artifactory serves as a caching proxy for a repository managed at a remote URL such as https://forgeapi.puppetlabs.com/.

Artifacts (such as tar.gz files) requested from a remote repository are cached on demand. You can remove downloaded artifacts from the remote repository cache, however, you can not manually deploy artifacts to a remote Puppet repository. 

To define a remote repository to proxy a remote Puppet resource follow the steps below:

  1. In the Admin module, under Repositories | Remote, click "New". 
  2. In the New Repository dialog, set the Package Type to Puppet, set the Repository Key value, and specify the URL to the remote repository in the URL field as displayed below.
  3. Click "Save & Finish".
     
    Puppet Remote Repository

Virtual Puppet Repository

A virtual repository, in Artifactory, aggregates modules from both local and remote repositories.

This allows you to access both locally hosted Puppet modules and those from remote proxied Puppet repositories from a single URL defined for the virtual repository.
To define a virtual Puppet repository, create a virtual repository, set the Package Type to Puppet, and select the underlying local and remote Puppet repositories to include in the Basic settings tab.

Click "Save & Finish" to create the repository.


Using the Puppet Command Line

When accessing a Puppet repository through Artifactory, the repository URL path must be prefixed with api/puppet.

This applies to all Puppet commands including puppet module install and puppet module search.

For example, if you are using Artifactory standalone or as a local service, you would access your Puppet repositories using the following URL:

Code Block
http://localhost:8081/artifactory/api/puppet/<repository key>

Or, if you are using Artifactory SaaS the URL would be:

 

Code Block
https://<server name>.jfrog.io/<server name>/api/puppet/<repository key>

To use the Puppet command line you need to make sure Puppet is installed on your client.

Once you have created your Puppet repository, you can select it in the Tree Browser and click the Set Me Up button to get useful code snippets. These allow you to change your Puppet repository URL in the puppet.conf file, and resolve modules using the Puppet command line tool.

Replacing the default repository

To replace the default repository with a URL pointing to a Puppet repository in Artifactory, add following in your puppet.conf file:

Note: This example uses a repository with the key puppet

Code Block
[main]
module_repository=http://localhost:8080/artifactory/api/puppet/puppet

TipWe recommend referencing a Virtual Repository URL as a repository. This gives you the flexibility to reconfigure and aggregate other external sources and local repositories of Puppet modules you deploy. 
Note that if you do this, you can also use the --module_repository parameter to specify the local repository from which you want to resolve your module when using the Puppet module install command.

Once the Puppet command line tool is configured, every puppet module install command will fetch packages from the Puppet repository specified above. For example:

 

Code Block
$ puppet module install --module_repository=http://localhost:8080/artifactory/api/puppet/puppet puppetlabs-mysql
Notice: Preparing to install into /Users/jainishs/.puppetlabs/etc/code/modules ...
Notice: Downloading from http://localhost:8080/artifactory/api/puppet/puppet ...
Notice: Installing -- do not interrupt ...
/Users/jainishs/.puppetlabs/etc/code/modules
└── puppetlabs-mysql (v3.10.0)

 


Puppet Publish (Deploying Modules)

Setting Your Credentials

To support authentication, you need to add your Artifactory credentials to your puppet.conf file:
Note: your credentials should be formatted as username:password as a Base64 encoded strings

Your Artifactory credentials, formatted username:password as Base64 encoded strings.
For example:

Code Block
[main]
module_repository=http://admin:AP7eCk6M6JokQpjXbkGytt7r4sf@localhost:8080/artifactory/api/puppet/puppet-local
Info

Make sure you have an Artifactory user in order to publish modules.

Deploying Your Modules

There are two ways to deploy packages to a local repository:

  1. Using the Artifactory UI 
    Once you have created your Puppet repository, you can select it in the Tree Browser and click Deploy to upload Puppet module.
    Select your module(s), and click Deploy. 



  2. Using Artifactory REST API
    For Example:
    curl -uadmin:AP7eCk6M6JokQpjXbkGytt7r4sf -XPUT http://localhost:8080/artifactory/puppet-local/<TARGET_FILE_PATH> -T <PATH_TO_FILE>

Working with Artifactory without Anonymous Access

By default, Artifactory allows anonymous access to Puppet repositories. This is defined in the Admin module under Security | General. For details please refer to Allow Anonymous Access.

To be able to trace how users interact with your repositories, you need to uncheck the Allow Anonymous Access setting. This means that users will be required to enter their username and password as described in Setting Your Credentials above.


Puppet Search

Artifactory supports a variety of ways to search for artifacts. For details, please refer to Searching Artifacts.

Artifactory also supports, the puppet module search [search terms ...] command. However, a module may not be available immediately after being published, for the following reasons:

  • When publishing modules to a local repository, Artifactory calculates the search index asynchronously and will wait for indexing the newly published module.
  • Since a virtual repository may contain local repositories, a newly published package may not be available immediately for the same reason.
  • In the case of remote repositories,  a new package will only be found once Artifactory checks for it according to the Retrieval Cache Period setting.
 

Artifactory annotates each deployed or cached Puppet module with two properties: puppet.name and puppet.version

You can use Property Search to search for Puppet packages according to their name or version. 


Cleaning Up the Local Puppet Cache

The Puppet client saves caches of modules that were downloaded, as well as their JSON metadata responses (called .cache.json).

The JSON metadata cache files contain the Puppet modules metadata.

We recommend removing the Puppet caches, both modules and metadata, before using Artifactory for the first time. This is to ensure that your caches only contain elements that are due to requests from Artifactory and not directly from https://forge.puppet.com.


Viewing Individual Puppet Module Information

Artifactory lets you view selected Puppet module metadata directly from the UI.

Drill down in the Tree Browser and select the tar.gz file you want to inspect, and view the metadata in the Puppet Info tab.