2017-01-11 13 views
2

Я создаю манифест, чтобы получить имя раздела агента.Access Faster hash key in Puppet

Факт: $partitions - подробная информация о разделе.

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

Но, я просто хочу, чтобы получить имя часть (xvda1) и использовать его в качестве переменной для файла конфигурации.

Есть ли способ фильтровать выход в Puppet?

ответ

4

Самый быстрый способ решить эту проблему - использовать функцию keys от puppetlabs/stdlib: https://forge.puppet.com/puppetlabs/stdlib/readme.

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

С этой функцией, мы можем преобразовать выходной хэш из Facter в массив ключей и доступ к его элементам обычно. Предполагая, что xvda1 является 0th элемента,

Facter 2:

переменного $ = ключи ($ :: перегородки) [0]

Facter 3:

переменных $ = ключи ($ факты ['partitionitions']) [0]

+0

Я попробовал, но получил ошибку Facter 2: «Ошибка при вычислении вызова функции, ключи(): требуется, чтобы хэш работал с« Facter 3: »Error: Operator '[ ] 'не применимо к значению Undef " – Mike

+0

@Mike Эти подразумевают факт не был правильно поднят. Является ли '$ partitions' именем того, что вы хотели? Вы сделали опечатку по имени? –

+0

Да, $ partitions - это то, что я хочу $ hddname = keys ($ :: partitions) [0] file {'puppet_facts_example': path => '/tmp/test.txt', content => "HDDname is $ hddname ",} Я получил хэш-ошибку. – Mike