Installing agents
You can install Puppet Enterprise agents on *nix, Windows, and macOS.
To install FIPS-enabled PE agents, install the appropriate FIPS-enabled agent on a third party supported platform with FIPS mode enabled. You can use FIPS-enabled agents with a non-FIPS enabled primary server.
Agents are typically installed from a package repository hosted on your primary server. The PE package management repository is created during installation of the primary server and serves packages over HTTPS using the same port as the primary server (8140). This means agents don't require any new ports to be open other than the one they already need to communicate with the primary server.
Agent packages can be found on the primary server in
/opt/puppetlabs/server/data/packages/public/<PE
VERSION>/
. This directory contains the platform
specific repository file structure for agent packages. For example, if
your primary server is running on CentOS
7, in /opt/puppetlabs/server/data/packages/public/<PE
VERSION>/
, there's a directory
el-7-x86_64
, which contains the directories
with all the packages needed to install an agent.
After installing agents, you must sign their certificates.
Using the install script
The install script installs and configures the agent on target nodes using installation packages from the PE package management repo.
-
Detects the operating system on which it's running, sets up an APT, YUM, or zipper repo that refers back to the primary server, and then pulls down and installs the
puppet-agent
packages. If the install script can't find agent packages corresponding to the agent's platform, it fails with an error telling you whichpe_repo
class you need to add to the primary server. -
Downloads a tarball of plugins from the primary server. This feature is controlled by the settings
pe_repo::enable_bulk_pluginsync
andpe_repo::enable_windows_bulk_pluginsync
, which is set totrue
(enabled) by default. Depending on how many modules you have installed, bulk plug-in sync can speed agent installation significantly.Note: If your primary server runs in a different environment from your agent nodes, you might see some reduced benefit from bulk plug-in sync. The plug-in tarball is created based on the plug-ins running on the primary server agent, which might not match the plug-ins required for agents in a different environment. -
Creates a basic
puppet.conf
file. -
Kicks off a Puppet run.
pe_repo
class requires an internet connection. pe_repo::http_proxy_host
and
pe_repo::http_proxy_port
in pe.conf
, Hiera, or in the console, in the pe_repo
class of the PE
Master node group.
You can customize agent installation by providing as flags to the script any number of these options, in any order:
Option | Example | Result |
---|---|---|
puppet.conf
settings |
|
The puppet.conf file looks like this:
|
CSR attribute settings |
|
The installer creates a csr_attributes.yaml
file before installing with this content:
|
MSI properties (Windows only) |
|
The Puppet service runs as pup_adm with a password of secret. |
Puppet service status |
*nix:
Windows
|
The Puppet service is stopped and doesn't boot after installation. An initial Puppet run doesn't occur after installation. |
puppet.conf
settings
You can specify any agent configuration option using the install script.
Configuration settings are added to puppet.conf
.
-
server
-
certname
-
environment
-
splay
-
splaylimit
-
noop
http_proxy_host
, for example -s
agent:http_proxy_host=<PROXY_FQDN>
.See the Configuration Reference for details.
CSR attribute settings
These settings are added to puppet.conf
and included in the
custom_attributes
and extension_requests
sections of csr_attributes.yaml
.
You can pass as many parameters as needed. Follow the
section:key=value
pattern and leave one space between
parameters.
See the csr_attributes.yaml reference for details.
uri='https://primary.example.com:8140/packages/current/install.bash'
curl --insecure "$uri" | sudo bash -s main:certname=<CERTNAME OTHER THAN FQDN> custom_attributes:challengePassword=<PASSWORD_FOR_AUTOSIGNER_SCRIPT> extension_requests:pp_role=<PUPPET NODE ROLE>
msiexec
, you can set CSR attributes by creating a
csr_attributes.yaml
file in the Puppet confdir
(default C:\ProgramData\PuppetLabs\puppet\etc\csr_attributes.yaml
)
prior to installing the Puppet agent package.See Usage notes for curl examples for information about forming curl commands.
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; $webClient = New-Object System.Net.WebClient; $webClient.DownloadFile('https://<PRIMARY_FQDN>:8140/packages/current/install.ps1', 'install.ps1'); .\install.ps1 main:certname=<certnameOtherThanFQDN> custom_attributes:challengePassword=<passwordForAutosignerScript> extension_requests:pp_role=<puppetNodeRole>
MSI properties (Windows)
For Windows, you can set these MSI properties, with or without additional agent configuration settings.
MSI Property | PowerShell flag |
---|---|
INSTALLDIR
|
-InstallDir
|
PUPPET_AGENT_ACCOUNT_USER
|
-PuppetAgentAccountUser
|
PUPPET_AGENT_ACCOUNT_PASSWORD
|
-PuppetAgentAccountPassword
|
PUPPET_AGENT_ACCOUNT_DOMAIN
|
-PuppetAgentAccountDomain
|
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; $webClient = New-Object System.Net.WebClient; $webClient.DownloadFile('https://<PRIMARY_HOSTNAME>:8140/packages/current/install.ps1', 'install.ps1'); .\install.ps1 -PuppetAgentAccountUser "svcPuppet" -PuppetAgentAccountPassword "s3kr3t_P@ssword" agent:splay=true agent:environment=development
Puppet service status
By default, the install script starts the Puppet agent service and kicks off a Puppet run. If you want to manually trigger a Puppet run, or you're using a provisioning system that requires non-default behavior, you can control whether the service is running and enabled.
Option | *nix | Windows | Values |
---|---|---|---|
ensure
|
--puppet-service-ensure
<VALUE>
|
-PuppetServiceEnsure
<VALUE>
|
|
enable
|
--puppet-service-enable
<VALUE>
|
-PuppetServiceEnable
<VALUE>
|
|
uri='https://<PRIMARY_FQDN>:8140/packages/current/install.bash'
curl --insecure "$uri" | sudo bash -s -- --puppet-service-ensure stopped
Windows
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; $webClient = New-Object System.Net.WebClient; $webClient.DownloadFile('https://<PRIMARY_FQDN>:8140/packages/current/install.ps1', 'install.ps1'); .\install.ps1 -PuppetServiceEnsure stopped
Install *nix agents
You have multiple options for installing *nix agents: from the console, from the command line using PE package management or your own package management, with or without internet access, and more. Chose the installation method that best suits your needs.
-
AIX
-
CentOS 5
-
RHEL 5
-
SLES 11
-
Solaris 10, 11
-
Windows Server 2008 R2
Install agents from the console
You can use the console to leverage tasks that install *nix or Windows agents on target nodes.
Add classes to the PE
Master node group for each agent platform used in your environment. For
example, pe_repo::platform::el_7_x86_64
.
Make sure you have permission to run the appropriate task to install agents on all nodes:
-
*nix targets use the task pe_bootstrap::linux
-
Windows targets use the task pe_bootstrap::windows
- Windows 2008 SP2 or newer
- PowerShell version 3 or higher
- Microsoft .NET Framework 4.5 or higher
Install *nix agents with PE package management
PE provides its own package management to help you install agents in your infrastructure.
<PRIMARY_HOSTNAME>
portion of the installer script—as provided in the following example—refers to the
FQDN of the primary server. The FQDN must be fully resolvable by the machine on
which you're installing or upgrading the agent.-
If you're installing an agent with a different OS than the primary server, add
the appropriate class for the repo that contains the agent packages.
-
SSH into the node where you want to install the
agent, and run the installation command appropriate to your environment.
- Curl
uri='https://<PRIMARY_HOSTNAME>:8140/packages/current/install.bash' curl --insecure "$uri" | sudo bash
See Usage notes for curl examples for information about forming curl commands.
Tip: On AIX versions 7.10 and earlier, which don't support the-k
option, use--tlsv1
instead. If neither-k
or--tlsv1
is supported, you must install using a manually transferred certificate. -
RHEL 5 and CentOS 5
uri='https://<PRIMARY_HOSTNAME>:8140/packages/current/install.bash' curl --insecure --tlsv1 "$uri" | sudo bash
- wget
wget -O - -q --no-check-certificate https://<PRIMARY_HOSTNAME>:8140/packages/current/install.bash | sudo bash
-
Solaris 10
sudo export PATH=$PATH:/opt/sfw/bin wget -O - -q --no-check-certificate --secure-protocol=TLSv1 https://<PRIMARY_HOSTNAME>:8140/packages/current/install.bash | bash
- Curl
Install *nix agents with your own package management
If you choose not to use PE package management to install agents, you can use your own package management tools.
Download the appropriate agent tarball.
- Add the agent package to your own package management and distribution system.
- Configure the package manager on your agent node (YUM, APT) to point to that repo.
-
Install the agent using the command appropriate to
your environment.
-
YUM
sudo yum install puppet-agent
-
APT
sudo apt-get install puppet-agent
-
YUM
Install *nix agents using a manually transferred certificate
If you choose not to or can't use curl --insecure
to trust the
primary server during agent installation, you can manually transfer the primary server CA
certificate to any machines you want to install agents on, and then run the installation
script against that cert.
Install *nix agents without internet access
If you don't have access to the internet beyond your infrastructure, you can download the appropriate agent tarball from an internet-connected system and then install using the package management solution of your choice.
Install *nix agents with PE package management without internet access
Use PE package management to install agents when you don't have internet access beyond your infrastructure.
Download the appropriate agent tarball.
-
On your primary server, copy the agent tarball to
/opt/puppetlabs/server/data/staging/pe_repo-puppet-agent-<AGENT_VERSION>
, for exampleopt/puppetlabs/server/data/staging/pe_repo-puppet-agent-5.5.17/
-
If you're installing an agent with a different OS than the primary server, add
the appropriate class for the repo that contains the agent packages.
-
Run Puppet:
puppet agent -t
- Follow the steps for Install *nix agents with PE package management.
Install *nix agents with your own package management without internet access
Use your own package management to install agents when you don't have internet access beyond your infrastructure.
Download the appropriate agent tarball.
- Add the agent package to your own package management and distribution system.
-
Disable the PE-hosted repo.
- In the console, click Node groups, and in the PE Infrastructure group, select the PE Master group.
-
On the Classes tab, find
pe_repo
class (as well as any class that beginspe_repo::
), and click Remove this class. - Commit changes.
Install *nix agents from compilers using your own package management without internet access
If your infrastructure relies on compilers to install agents, you don’t have to copy the agent package to each compiler. Instead, use the console to specify a path to the agent package on your package management server.
Download the appropriate agent tarball.
- Add the agent package to your own package management and distribution system.
-
Set the
base_path
parameter of thepe_repo
class to your package management server.
Install Windows agents
You have multiple options for installing Windows agents: from the console, from a PowerShell window using PE package management, from the command line using an .msi package, and more. Chose the installation method that best suits your needs.
-
AIX
-
CentOS 5
-
RHEL 5
-
SLES 11
-
Solaris 10, 11
-
Windows Server 2008 R2
Install agents from the console
You can use the console to leverage tasks that install *nix or Windows agents on target nodes.
Add classes to the PE
Master node group for each agent platform used in your environment. For
example, pe_repo::platform::el_7_x86_64
.
Make sure you have permission to run the appropriate task to install agents on all nodes:
-
*nix targets use the task pe_bootstrap::linux
-
Windows targets use the task pe_bootstrap::windows
- Windows 2008 SP2 or newer
- PowerShell version 3 or higher
- Microsoft .NET Framework 4.5 or higher
Install Windows agents with PE package management
To install a Windows agent
with PE package management, you use the pe_repo
class to distribute an installation package to
agents. You can use this method with or without internet access.
-
32-bit systems —
/opt/puppetlabs/server/data/packages/public/<PE_VERSION>/windows-i386-<AGENT_VERSION>/
-
64-bit systems —
/opt/puppetlabs/server/data/packages/public/<PE_VERSION>/windows-x86_64-<AGENT_VERSION>/
You must use PowerShell 2.0 or later to install Windows agents with PE package management.
<PRIMARY_HOSTNAME>
portion of the installer script—as provided in the following example—refers to the
FQDN of the primary server. The FQDN must be fully resolvable by the machine on
which you're installing or upgrading the agent.After running the installer, you see the following output, which indicates the agent was successfully installed.
Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running'
service { 'puppet':
ensure => 'running',
enable => 'true',
}
Install Windows agents using a manually transferred certificate
If you need to perform a secure installation on Windows nodes, you can manually transfer the primary server CA certificate to target nodes, and run a specialized installation script against that cert.
Install Windows agents with the .msi package
Use the Windows .msi package if you need to specify agent configuration details during installation, or if you need to install Windows agents locally without internet access.
Download the .msi package.
-
32-bit systems —
/opt/puppetlabs/server/data/packages/public/<PE_VERSION>/windows-i386-<AGENT_VERSION>/
-
64-bit systems —
/opt/puppetlabs/server/data/packages/public/<PE_VERSION>/windows-x86_64-<AGENT_VERSION>/
Install Windows agents with the installer
Use the MSI installer for a more automated installation process. The installer can
configure puppet.conf
, create CSR attributes, and configure the agent
to talk to your primary server.
- Run the installer as administrator.
- When prompted, provide the hostname of your primary server, for example puppet.
Install Windows agents using msiexec
from
the command line
Install the MSI manually from the command line if you need to customize
puppet.conf
, CSR attributes, or certain agent properties.
msiexec /qn /norestart /i <PACKAGE_NAME>.msi
- You can specify
/l*v install.txt
to log the progress of the installation to a file. - You can set CSR attributes by creating a
csr_attributes.yaml
file in the Puppetconfdir
(defaultC:\ProgramData\PuppetLabs\puppet\etc\csr_attributes.yaml
) prior to installing the Puppet agent package.
MSI properties
If you install Windows agents from the command line using the .msi package, you can optionally specify these properties.
PUPPET_SERVER
,
PUPPET_CA_SERVER
, PUPPET_AGENT_CERTNAME
, or
PUPPET_AGENT_ENVIRONMENT
, the installer replaces the existing
value in puppet.conf
and re-uses the value at upgrade unless you
specify a new value. Therefore, if you've customized these properties, don't change
the setting directly in puppet.conf
; instead, re-run the installer
and set a new value at installation.Property | Definition | Setting in pe.conf
|
Default |
---|---|---|---|
INSTALLDIR
|
Location to install Puppet and its dependencies. | n/a |
|
PUPPET_SERVER
|
Hostname where the primary server can be reached. |
server
|
puppet
|
PUPPET_CA_SERVER
|
Hostname where the CA primary server can be reached, if you're using multiple primary servers and only one of them is acting as the CA. |
ca_server
|
Value of PUPPET_SERVER
|
PUPPET_AGENT_CERTNAME
|
Node's certificate name, and the name it uses when requesting catalogs. For best compatibility, limit the value of
|
certname
|
Value of facter fdqn
|
PUPPET_AGENT_ENVIRONMENT
|
Node's environment.
Note: If a value
for the
environment variable already exists in
puppet.conf , specifying it during
installation does not override that value. |
environment
|
production
|
PUPPET_AGENT_STARTUP_MODE
|
Whether and how the agent service is allowed to
run. Allowed values are:
|
n/a |
Automatic
|
PUPPET_AGENT_ACCOUNT_USER
|
Windows user account the agent
service uses. This property is useful if the agent needs to
access files on UNC shares, because the default
The user account must already exist, and can be either a
local or domain user. The installer allows domain users even if
they have not accessed the machine before. The installer grants
This property must be combined with
|
n/a |
LocalSystem
|
PUPPET_AGENT_ACCOUNT_PASSWORD
|
Password for the agent's user account. | n/a | No Value |
PUPPET_AGENT_ACCOUNT_DOMAIN
|
Domain of the agent's user account. | n/a |
.
|
REINSTALLMODE
|
A default MSI property used to control the
behavior of file copies during installation.
Important: If you need to downgrade agents, use
REINSTALLMODE=amus when calling
msiexec.exe at the command line to prevent
removing files that the application needs. |
n/a |
amus as of puppet-agent 1.10.10 and puppet-agent 5.3.4 omus in prior releases |
puppet.acme.com
:msiexec /qn /norestart /i puppet.msi PUPPET_SERVER=puppet.acme.com
ExampleCorp\bob
:msiexec /qn /norestart /i puppet-<VERSION>.msi PUPPET_AGENT_ACCOUNT_DOMAIN=ExampleCorp PUPPET_AGENT_ACCOUNT_USER=bob PUPPET_AGENT_ACCOUNT_PASSWORD=password
Windows agent installation details
Windows nodes can fetch configurations from a primary server and apply manifests locally, and respond to orchestration commands.
The agent runs as a Windows service. By
default, the agent fetches and applies configurations every 30 minutes. The agent
service can be started and stopped independently using either the service control
manager UI or the command line sc.exe
utility.
Puppet is automatically added to the
machine's PATH
environment variable, so
you can open any command line and run puppet
, facter
and the
other batch files that are in the bin
directory of the Puppet installation. Items necessary for
the Puppet environment are also added to the shell, but
only for the duration of execution of each of the particular commands.
The installer includes Ruby, gems, and Facter. If you have existing copies of these applications, such as Ruby, they aren't affected by the re-distributed version included with Puppet.
Program directory
Unless overridden during installation, PE and its
dependencies are installed in Program Files
at \Puppet
Labs\Puppet
.
You can locate the Program Files
directory using the
PROGRAMFILES
variable or the PROGRAMFILES(X86)
variable.
The program directory contains these subdirectories.
Subdirectory | Contents |
---|---|
bin
|
scripts for running Puppet and Facter |
facter
|
Facter source |
hiera
|
Hiera source |
misc
|
resources |
puppet
|
Puppet source |
service
|
code to run the agent as a service |
sys
|
Ruby and other tools |
Data directory
PE stores settings, manifests, and generated data — such as logs and catalogs — in the data directory. The data directory contains two subdirectories for the various components:
-
etc
(the$confdir
): Contains configuration files, manifests, certificates, and other important files. -
var
(the$vardir
): Contains generated data and logs.
When you run Puppet with elevated privileges as
intended, the data directory is located in the COMMON_APPDATA.aspx
folder. This folder is typically located at
C:\ProgramData\PuppetLabs\
. Because the common app data
directory is a system folder, it is hidden by default.
If you run Puppet without elevated privileges, it uses
a .puppet
directory in the current user's home folder as its data
directory, which can result in unexpected settings.
Install macOS agents
You can install macOS agents with PE package management, from Finder, or from the command line.
To install macOS agents with PE package management, follow the steps to Install *nix agents with PE package management.
Install macOS agents from Finder
You can use Finder to install the agent on your macOS machine.
Install macOS agents from the command line
You can use the command line to install the agent on a macOS machine.
macOS agent installation details
macOS agents include core Puppet functionality, plus platform-specific capabilities like package installation, service management with LaunchD, facts inventory with the System Profiler, and directory services integration.
Install non-root agents
Running agents without root privileges can assist teams using PE to work autonomously.
For example, your infrastructure’s platform might be maintained by one team with root privileges while your infrastructure’s applications are managed by a separate team (or teams) with diminished privileges. If the application team wants to be able to manage its part of the infrastructure independently, they can run Puppet without root privileges.
PE is installed with root privileges, so you need a root user to install and configure non-root access to a primary server. The root user who performs this installation can then set up non-root users on the primary server and any nodes running an agent.
Non-root users can perform a reduced set of management tasks,
including configuring settings, configuring Facter
external facts, running puppet agent
--test
, and running Puppet with
non-privileged cron jobs or a similar scheduling service. Non-root users can also
classify nodes by writing or editing manifests in the directories where they have write
privileges.
Install non-root *nix agents
-
The agent can request certificates and apply the catalog from the primary server when a non-root user runs Puppet:
puppet agent -t
-
The agent service is not running:
service puppet status
-
Non-root users can collect existing facts by running
facter
on the agent, and they can define new, external facts.
Install non-root Windows agents
Non-root user functionality
Non-root users can use a subset of functionality. Any operation that requires root privileges, such as installing system packages, can't be managed by a non-root agent.
*nix non-root functionality
On *nix systems, as non-root agent you can enforce these resource types:
-
cron
(only non-root cron jobs can be viewed or set) -
exec
(cannot run as another user or group) -
file
(only if the non-root user has read/write privileges) -
notify
-
schedule
-
ssh_key
-
ssh_authorized_key
-
service
-
augeas
-u
flag to set a user with root privileges causes the job to
fail, resulting in this error message:
Notice: /Stage[main]/Main/Node[nonrootuser]/Cron[illegal_action]/ensure: created must be privileged to use -u
puppet resource <resource
type>
):-
host
-
mount
-
package
Windows non-root functionality
On Windows systems as non-admin user, you can enforce these types :
-
exec
-
file
C:\Windows
unless your user has permission to do
so.You can also inspect these resource types (use puppet resource <resource
type>
):
-
host
-
package
-
user
-
group
-
service
Managing certificate signing requests
When you install a Puppet agent on a node, the agent automatically submits a certificate signing request (CSR) to the primary server. You must accept this request to bring before the node under PE management can be added your deployment. This allows Puppet to run on the node and enforce your configuration, which in turn adds node information to PuppetDB and makes the node available throughout the console.
You can approve certificate requests from the PE console or the command line. If DNS altnames are set up for agent nodes, you must approve the CSRs on use the command line interface .
- To accept or reject CSRs in the console or on the command line, you need the permission Certificate requests: Accept and reject.
- To manage certificate requests in the console, you also need the permission Console: View.
Managing certificate signing requests in the console
A certificate signing request appears in the console on the Certificates page in the Unsigned certificates tab after you add an agent node to inventory. Accept or reject submitted requests individually or in a batch.
- To manage requests individually, click Accept or Reject.
- To manage the entire list of requests, click Accept All or Reject All. Nodes are processed in batches. If you close the browser window or navigate to another website while processing is in progress, only the current batch is processed.
After you accept the certificate signing request, the node appears in the console after the next Puppet run. To make a node available immediately after you approve the request, run Puppet on demand.
Managing certificate signing requests on the command line
You can view, approve, and reject node requests using the command line.
$ sudo puppetserver ca list
$ sudo puppetserver ca sign --certname <NAME>
Configuring agents
You can add additional configuration to agents by editing
/etc/puppetlabs/puppet/puppet.conf
directly, or by using the
puppet config set
sub-command, which edits puppet.conf
automatically.
For example, to point the agent at a primary server called
primary.example.com
, run puppet config set server
primary.example.com
. This command adds the setting server =
primary.example.com
to the [main]
section of
puppet.conf
.
To set the certname for the agent, run /opt/puppetlabs/bin/puppet config set
certname agent.example.com
.