- 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, ':|,')
- 設計模式之禪(第2版)
- Scratch 1.4: Beginner’s Guide
- Procreate繪畫創(chuàng)作從入門到精通
- Talend Open Studio Cookbook
- 中文版AutoCAD 2022基礎教程
- 新媒體美工一冊通(全彩)
- After Effects影視特效立體化教程:After Effects 2021(微課版)
- iPhone User Interface Cookbook
- PowerPoint 2013從新手到高手(超值版)
- Blender 2.5 Materials and Textures Cookbook
- 中文版Photoshop CS5實用教程(第2版)
- 跨境電商:速賣通搜索排名規(guī)則解析與SEO技術
- Deep Inside osCommerce: The Cookbook
- 中文版3ds Max 2016基礎培訓教程
- Maya Paint Effect 特效應用手冊