Puppet Environments

In een Puppet omgeving kunnen meerdere ‘Environments‘ actief zijn.Door gebruik te maken van environments kunnen bv. classes gebruikt worden die binnen een environment een unieke naam moeten hebben maar in verschillende environments mag dat dezelfde naam zijn.

Een uitleg hieronder is een class voor de /etc/motd en een class voor de .ssh/authorized_keys voor zowel de kodi als de musicplayer environment.

Voorbeeld voor environments:

  • kodi
  • musicplayer
  • production (standaard al aanwezig)

Via het filesystem

Deze environments zijn in feite directories met een bepaalde inhoud en bevinden zich in:

/etc/puppetlabs/code/environments

Voor de inhoud van elke environment-directory geldt:

  • De directory-naam is de environment-naam
  • Er moet een ‘modules’ directory in staan
  • Er moet een ‘manifests’ directory in staan
  • Er mag een environments.conf bestand in staan met uitzonderingen op de default settings.

De tree kan er dan b.v. zo uit zien: (een uitleg van de modules vind je hier)

.
├── kodi
│   ├── environment.conf
│   ├── manifests
│   │   └── site.pp
│   └── modules
│       └── osmc
│           ├── files
│           │   ├── authorized_keys
│           │   └── motd
│           └── manifests
│               ├── auth_keys.pp
│               └── motd.pp
├── musicplayer
│   ├── environment.conf
│   ├── manifests
│   │   └── site.pp
│   └── modules
│       └── musicplayer
│           ├── files
│           │   ├── authorized_keys
│           │   └── motd
│           └── manifests
│               ├── auth_keys.pp
│               └── motd.pp
└── production
    ├── environment.conf
    ├── hieradata
    ├── manifests
    │   └── site.pp
    └── modules

Je ziet hier dat er per environment een eigen manifests met een site.pp bestand aanwezig is! Hierin worden de classes weer gedefinieerd maar dan per environment.

De modulepath van een environment kan getest worden met:

puppet config print modulepath --section master --environment environmentname

bijvoorbeeld:

# puppet config print modulepath --section master --environment musicplayer
/etc/puppetlabs/code/environments/musicplayer/modules:/etc/puppetlabs/code/modules:/opt/puppetlabs/puppet/modules

# puppet config print modulepath --section master --environment kodi
/etc/puppetlabs/code/environments/kodi/modules:/etc/puppetlabs/code/modules:/opt/puppetlabs/puppet/modules

Om de node gebruik te laten maken van een bepaalde environment dient dit aangegeven te worden in de Agent-sectie van /etc/puppet/puppet.conf op de node:

[agent]
environment=musicplayer

Via de webinterface (PE)

Bij gebruik van Puppet Enterprise is het noodzakelijk om via de web-interface de environments aan te maken. Ga daarvoor naar ‘Classifications‘ en kies op deze pagina voor de optie ‘Add group…

Voor ‘Parent name‘ gebruik ‘Production environment‘, type een ‘Group name‘ en kies tenslotte bij ‘Environment‘ voor musicplayer (die we eerder gemaakt hebben in het filesystem)

Hierna kunnen de nodes toegevoegd worden door de groep te wijzigen. Nodes kunnen via rules toegevoegd worden, bv aan de hand van de hostname of alle hosts die beginnen met ‘PRD’ of ‘DEV’.

Onderaan de pagina is de optie om simpelweg nodes te pinnen:

Op dezelfde manier maken we een groep voor de Kodi mediacenter node en hier kan dan via de modules/manifests een eigen motd bestand gemaakt worden.

.