I'm learning to use Puppet and have successfully setup and connected a master server with 2 nodes.

I've created files for the default production environment which is working. I also have a second set of configs called beta in my environments folder.

I'd like to assign 1 of my 2 nodes to the beta group via the master server. How would I go about doing this?

Puppet version 4

1 Answer 1


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.

  1. Run puppet agent -t --environment beta to run the agent with a non-default environment.

  2. 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:

  1. Create a script such as /etc/puppetlabs/puppet/node.sh in any language you like, e.g.

    if [ "$1" = beta.example.com ]; then
      echo "environment: beta"
      echo "environment: production"
  2. Ensure the script is executable (chmod +x /etc/puppetlabs/puppet/node.sh)

  3. 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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .