- Puppet 3 Cookbook
- John Arundel
- 466字
- 2021-04-09 23:52:28
Iterating over multiple items
Arrays are a powerful feature in Puppet; wherever you want to perform the same operation on a list of things, an array may be able to help. You can create an array just by putting its contents in square brackets:
$lunch = [ 'franks', 'beans', 'mustard' ]
How to do it…
Here's a common example of how arrays are used:
- Add the following code to your manifest:
$packages = [ 'ruby1.8-dev', 'ruby1.8', 'ri1.8', 'rdoc1.8', 'irb1.8', 'libreadline-ruby1.8', 'libruby1.8', 'libopenssl-ruby' ] package { $packages: ensure => installed }
- Run Puppet and note that each package should now be installed.
How it works…
Where Puppet encounters an array as the name of a resource, it creates a resource for each element in the array. In the example, a new package
resource is created for each of the packages in the $packages
array, with the same parameters (ensure => installed
). This is a very compact way of instantiating lots of similar resources.
There's more…
Although arrays will take you a long way with Puppet, it's also useful to know about an even more flexible data structure: the hash.
A hash is like an array, but each of the elements can be stored and looked up by name (referred to as the key), for example:
$interface = {'name' => 'eth0', 'address' => '192.168.0.1'} notify { "Interface ${interface['name']} has address ${interface['address']}": } Interface eth0 has address 192.168.0.1
Hash values can be anything that you can assign to a variable: strings, function calls, expressions, even other hashes or arrays.
You can declare literal arrays using square brackets, as follows:
define lunchprint() { notify { "Lunch included ${name}": } } $lunch = ['egg', 'beans', 'chips'] lunchprint { $lunch: } Lunch included egg Lunch included beans Lunch included chips
But Puppet can also create arrays for you from strings, using the split
function, as follows:
$menu = 'egg beans chips' $items = split($menu, ' ') lunchprint { $items: } Lunch included egg Lunch included beans Lunch included chips
Note that split
takes two arguments: the first is the string to be split. The second is the character to split on; in this example, a single space. As Puppet works its way through the string, when it encounters a space, it will interpret it as the end of one item and the beginning of the next. So, given the string egg beans chips
, this will be split into three items.
The character to split on can be any character, or a string:
$menu = 'egg and beans and chips' $items = split($menu, ' and ')
It can also be a regular expression, for example, a set of alternatives separated by a |
(pipe) character:
$lunch = 'egg:beans,chips' $items = split($lunch, ':|,')
- 爸媽微信e時代
- Photoshop數碼攝影后期處理專業技法(第2版)
- Django 1.2 E/commerce
- ADempiere 3.6 Cookbook
- 下一代空間計算:AR與VR創新理論與實踐
- Magento 1.4 Themes Design
- 中文版Photoshop CS6全能一本通·全彩版
- AutoCAD 2020從入門到精通
- Photoshop CC完全自學教程:從入門到實踐(全新版)
- ICEfaces 1.8: Next Generation Enterprise Web Development
- 深入淺出WebAssembly
- Inkscape Starter (Microcontent)
- 從零開始:Photoshop CC 2019設計基礎+商業設計實戰
- UG NX 12.0中文版自學視頻教程
- IBM Lotus Domino: Classic Web Application Development Techniques