The environment can either be set by the agent's puppet.conf
config file, the agent's --environment
command line option, or the master using an external node classifier (ENC), in order of increasing precedence.
Run puppet agent -t --environment beta
to run the agent with a non-default environment.
Set environment = beta
under [agent]
in /etc/puppetlabs/puppet/puppet.conf
to set the default environment.
Or to configure an ENC to define the environment on the master:
Create a script such as /etc/puppetlabs/puppet/node.sh
in any language you like, e.g.
#!/bin/bash
if [ "$1" = beta.example.com ]; then
echo "environment: beta"
else
echo "environment: production"
fi
Ensure the script is executable (chmod +x /etc/puppetlabs/puppet/node.sh
)
In the master's /etc/puppetlabs/puppet/puppet.conf
under [master]
, set:
node_terminus = exec
external_nodes = /etc/puppetlabs/puppet/node.sh
When the agent runs, it will retrieve the node information from the master, which runs the node script. The script returns a YAML document (one line in this case) with the environment name. If the environment name is given, then the agent will be forced to use that environment.
The script can be implemented however you see fit - it can perform some sort of query (e.g. against a database), perform some logic against the hostname (the first argument, $1
), or just be hardcoded.