《Puppet实战手册》——2.7 数组中多个元素的遍历

    xiaoxiao2024-04-18  10

    本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.7节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

    2.7 数组中多个元素的遍历

    数组是Puppet中的一个强大的功能,无认想对一组元素做何种相同的操作,数组都能够有所帮助。用户可以通过把数组的内容放在方括号中来创建一个数组。

    $lunch = [ 'franks', 'beans', 'mustard' ]操作步骤下面是一个常见的如何使用数组的例子。

    1. 把下面的代码添加到配置清单中。

    $packages = [ 'ruby1.8-dev',          'ruby1.8',          'ri1.8',          'rdoc1.8',          'irb1.8',          'libreadline-ruby1.8',          'libruby1.8',          'libopenssl-ruby' ] package { $packages: ensure => installed }

    2. 执行Puppet命令,然后可以发现每个软件包都应该安装好了。

    工作原理当Puppet遇到数组作为一个资源的名称时,它会为数组中每个元素的创建一个资源。在这个例子中,$packages数组中的每一个软件包都会被Puppet创建一个新的package资源,并且使用相同的参数(ensure => installed)。这是一种简化相似资源书写的方式。

    更多参考虽然使用Puppet的过程中会大量地使用数组,但是了解一个更加灵活的数据结构也是很有用的:散列(hash)。

    使用散列散列就像是一个数组,但每个元素都可以通过名字(称为键)存储和搜索,如下:

    $interface = {  'name' => 'eth0',           'address' => '192.168.0.1'} notify { "Interface ${interface['name']} has address   ${interface['address']}": } Interface eth0 has address 192.168.0.1

    任何能赋给变量的内容都能够作为散列的值:字符串、函数调用、表达式,甚至其他散列或数组也可以。

    使用split函数创建数组用户可以使用方括号来声明数组,如下所示。

    define lunchprint() {  notify { "Lunch included ${name}": } } $lunch = ['egg', 'beans', 'chips'] lunchprint { $lunch: } Lunch included egg Lunch included beans Lunch included chips

    但是,Puppet也可以使用split函数将字符串拆分为数组,如下所示:

    $menu = 'egg beans chips' $items = split($menu, ' ') lunchprint { $items: } Lunch included egg Lunch included beans Lunch included chips

    需要注意的是,split有两个参数:第一个是要进行拆分的字符串,第二个是分割字符(在这个例子中,分割字符是一个空格)。当Puppet遍历字符串的时候,一旦遇到空格,就会将其理解为一个元素的结束和下一个元素的开始。因此,Puppet处理给定的字符串egg beans chips,会将其分割成三个元素。

    要拆分的可以是任何字符或一个字符串。

    $menu = 'egg and beans and chips' $items = split($menu, ' and ')

    分割字符也可以是一个正则表达式。例如,可以使用“|”(管道符)分隔的一组可选字符作为分割字符。

    $lunch = 'egg:beans,chips' $items = split($lunch, ':|,') 相关资源:puppet最经典中文手册资料
    最新回复(0)