Add code and set up Code Manager
Set up your control repo, create a Puppetfile, and configure Code Manager so you can start adding content to your PE environments.
The control repo is where you store your code. Code in your control repo is usually bundled in modules.
The Puppetfile specifies detailed information about each environment's Puppet code and data, including where to get that code and data from, where to install it, and whether to update it.
Code Manager automates the management and deployment of your Puppet code. It isn't required to use PE, but it is helpful for ensuring Puppet syncs code to your masters and all your server run new code at the same time.
Create a control repo from the Puppet template
To create a control repo that includes a standard recommended structure, code examples, and configuration scripts, base your control repo on the Puppet control repo template. This template covers most customer situations.
To base your control repo on the Puppet control repository template, you copy the control repo template to your development workstation, set your own remote Git repository as the default source, and then push the template contents to that source.
environment.conffile to implement a
site-modules/directory for roles, profiles, and custom modules.
config_versionscripts to notify you which control repo version was applied to the agents.
Basic code examples for setting up roles and profiles.
hieradatadirectory that matches the default hierarchy .
- A Puppetfile to manage content maintained in your environment.
Generate a private SSH key to allow access to the
This SSH key cannot require a password.
Generate the key pair:
ssh-keygen -t rsa -b 2048 -P '' -f /etc/puppetlabs/puppetserver/ssh/id-control_repo.rsa
Set appropriate permissions so that the
pe-puppetuser can access the key:
puppet infrastructure configure
Your keys are now located in
Configure your Git host to use the SSH public key you generated. The process to do this is different for every Git host. Usually, you create a user or service account, and then assign the SSH public key to it.
Code management needs read access to your control repository, as well as any module repositories referenced in the Puppetfile.
See the your Git host docs for detailed instructions on adding SSH keys to your Git server. Commonly used Git hosts include:
- Generate the key pair:
Create a repository in your Git account, with the name you want your control repo
Steps for creating a repository vary, depending on what Git host you are using ( GitHub, GitLab, Bitbucket, or another provider). See your Git host's documentation for complete instructions.
For example, on GitHub:
- Click + at the top of the page, and choose New repository.
- Select the account Owner for the repository.
Name the repository (for example,
- Note the repository's SSH URL for later use.
From the command line, clone the Puppet
git clone https://github.com/puppetlabs/control-repo.git
Remove the template repository as your default
git remote remove origin
Add the control repository you created as the
git remote add origin <URL OF YOUR GIT REPOSITORY>
You now have a control repository based on the Puppet
control-repo template. When you make changes
to this repo on your workstation and push those changes to the remote copy of the
control repo on your Git server, Code Manager deploys your infrastructure changes.
You also now have a Puppetfile available for you to start adding and managing content, like module code.
Configure Code Manager
Code Manager stages, commits, and synchronizes your code, automatically managing your environments and modules when you make changes.
Enable Code Manager
To enable Code Manager set parameters in the console.
In the console, set the following parameters in the
puppet_enterprise::profile::masterclass in the PE Master node group.
r10k_remote: This is the location of your control repository. Enter a string that is a valid URL for your Git control repository. For example: "git@<YOUR.GIT.SERVER.COM>:puppet/control.git".
r10k_private_key: Enter a string specifying the path to the SSH private key that permits the
pe-puppetuser to access your Git repositories. This file must be located on the master, owned by the
pe-puppetuser, and located in a directory that the
pe-puppetuser has permission to view. We recommend
On the command line, run
puppet job run --nodes <NODE NAME>where
<NODE NAME>is the name of your master.
Set up authentication for Code Manager
To securely deploy environments, Code Manager needs an authentication token for both authentication and authorization.
If needed, configure the Puppet access command line tool. This comes pre-installed on your master. See Installing PE client tools for more information.
To generate a token for Code Manager, first assign a user to the deployment role, and then request an authentication token.
Assign a user to the deployment role
To request an authentication token, you must first assign a user the correct permissions with role-based access control (RBAC).
- In the console, create a deployment user. We recommend that you create a dedicated deployment user for Code Manager use.
- Add the deployment user to the Code Deployers role. This role is automatically created on install, with default permissions for code deployment and token lifetime management.
Request an authentication token for deployments
Request an authentication token for the deployment user to enable secure deployment of your code.
authentication tokens have a five-minute lifetime. With the
Override default expiry permission set, you can
change the lifetime of the token to a duration better suited for a long-running,
Generate the authentication token using
From the command line on the master, run
puppet-access login --lifetime 180d. This command both requests the token and sets the token lifetime to 180 days.
- Enter the username and password of the deployment user when prompted.
The generated token is stored in a file for later use. The default location for storing the token
~/.puppetlabs/token. To view the token, run
Deploy your code
Use the command line to trigger Code Manager after making changes to your Puppetfile.
puppet-code deploy --all --wait.
--waitflag returns results after the deployment is finished. Use the command
puppet-code deploy <ENVIRONMENT>to deploy code to only a specific environment. You can also deploy code using a webhook or custom scripts.