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.