Puppet assign nodes to environments from master

puppetpuppetmaster

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

Best Answer

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.

    #!/bin/bash
    if [ "$1" = beta.example.com ]; then
      echo "environment: beta"
    else
      echo "environment: production"
    fi
    
  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.

Related Topic