Instantiate Puppet resources » History » Version 1
Dominic Cleal, 09/24/2014 09:15 AM
1 | 1 | Dominic Cleal | h1. Instantiate Puppet resources |
---|---|---|---|
2 | |||
3 | Foreman acts as an external node classifier (ENC) for Puppet, which allows it to pass a list of classes, global and class parameters. It isn't able to instantiate individual resources (such as a file or package), or a defined type through this interface. |
||
4 | |||
5 | Instead, you have a few possible approaches. |
||
6 | |||
7 | h2. Creating a simple class or module |
||
8 | |||
9 | Resources should generally be kept in a class which can then be included where needed. For static resources, this is the best way. |
||
10 | |||
11 | * "Learning Puppet — Modules and Classes":https://docs.puppetlabs.com/learning/modules1.html |
||
12 | |||
13 | h2. Basic dynamic resources with arrays |
||
14 | |||
15 | If the resources you're managing are simple and all have the same properties and parameters, you can use Puppet's array resource declaration syntax ("array of title docs":https://docs.puppetlabs.com/puppet/3/reference/lang_resources.html#array-of-titles) to create many resources at once. |
||
16 | |||
17 | In this example to install a list of packages, we create /etc/puppet/environments/production/modules/packages/manifests/init.pp with: |
||
18 | |||
19 | <pre> |
||
20 | class packages($list = []) { |
||
21 | package { $list: |
||
22 | ensure => installed, |
||
23 | } |
||
24 | } |
||
25 | </pre> |
||
26 | |||
27 | When you import this "packages" class, it will have a "list" parameter. In Foreman's UI, go to _Configure_, _Puppet classes_, "packages", _Smart class parameters_ and tick the _Override_ checkbox on the "list" parameter. Set the _Parameter type_ to _json_ and use "JSON syntax":http://www.w3schools.com/json/json_syntax.asp to set the list parameter to an array of values, e.g. |
||
28 | |||
29 | ["httpd","vim"] |
||
30 | |||
31 | You can then override this per host or host group and supply a new array. |