2017-01-11 47 views
2

我正在创建一个清单以获取代理的分区名称。Puppet中的访问Facter散列键

事实$partitions显示分区信息的细节。

{"xvda1"=>{"uuid"=>"d1697425-49d0-4c9f-9901-5f9260be8196", "size"=>"83859300", "mount"=>"/", "label"=>"cloudimg-rootfs", "filesystem"=>"ext4"}} 

但是,我只是想获得的名称部分(xvda1),并把它作为一个配置文件的变量。

有什么办法来筛选木偶输出?

回答

4

解决此问题的最快方法是使用puppetlabs/stdlibkeys函数:https://forge.puppet.com/puppetlabs/stdlib/readme

keys() Returns the keys of a hash as an array. Type: rvalue.

使用该函数,我们可以将来自Facter的输出哈希转换为键的数组并正常访问它的元素。假设xvda10th元件,

Facter 2:

$变量=键($ ::分区)[0]

Facter 3:

$变量=键($事实[“分区”])[0]

+0

我尝试过,但得到了一个错误Facter 2:“在评价函数调用,键()错误:要求哈希在一起工作” Facter 3:“错误:操作员“[ ]'不适用于Undef值“ – Mike

+0

@Mike那些暗示事实没有正确查找。 '$ partitions'是你想要的事实的名字吗?你对事实名称有错误吗? –

+0

是的$分区是我想$ hddname = keys($ :: partitions)[0] file {'puppet_facts_example': path =>'/tmp/test.txt', content =>“HDDname is is $ hddname“,}我有一个哈希错误。 – Mike