2017-05-03 102 views
3

我需要木偶中指向/ datadisks的裝入點。我使用mountpoints核心facts來獲取掛載點。在這些掛載點中,我想篩選並獲取名稱中包含/ datadisks的掛載點,即我只想匹配/ datadisk模式的鍵從Puppet中的地圖過濾密鑰

以下工作,但我覺得有更好,更多高效的方式。有人可以闡明它嗎?

$foo = flatten(map($::mountpoints) |$key,$value| { $key }) 
$filtered_data = $foo.filter |$items| { $items =~ /datadisks/ } 

如果我嘗試以下操作,那麼它也會輸出鍵和值。我只是想從mountpoint地圖鍵

$f_data = $::mountpoints.filter |$indexes, $values| { $indexes =~ /datadisks/ } 

我在Openlogic的CentOS 7.2和$::mountpoints輸出是圖如下:

{/ => {available => 21.93 GiB, available_bytes => 23542669312, capacity => 26.88%, device => /dev/sda1, filesystem => xfs, options => [rw, seclabel, relatime, attr2, inode64, noquota], size => 29.98 GiB, size_bytes => 32195481600, used => 8.06 GiB, used_bytes => 8652812288}, /datadisks/disk2 => {available => 1006.74 GiB, available_bytes => 1080982728704, capacity => 0.01%, device => /dev/sdc1, filesystem => ext4, options => [rw, seclabel, nosuid, nodev, noexec, noatime, nodiratime, data=ordered], size => 1006.82 GiB, size_bytes => 1081062445056, used => 76.02 MiB, used_bytes => 79716352}, /mnt/resource => {available => 110.06 GiB, available_bytes => 118173499392, capacity => 0.05%, device => /dev/sdb1, filesystem => ext4, options => [rw, seclabel, relatime, data=ordered], size => 110.12 GiB, size_bytes => 118236442624, used => 60.03 MiB, used_bytes => 62943232}}

+0

你能提供$ :: mountpoints的原始輸出嗎? –

+0

當然。編輯問題並更新了$ :: mountpoints的輸出 –

回答

2

我不知道是否100%你的意思是你只想要鑰匙或鑰匙和數據(你說的代碼工作似乎只是提取鑰匙)。所以我會做兩個。

假設:

$mountpoints = { 
    '/' => { 
     available => '21.93 GiB', 
     available_bytes => '23542669312', 
     capacity => '26.88%', 
     device => '/dev/sda1', 
     filesystem => 'xfs', 
     options => ['rw', 'seclabel', 'relatime', 'attr2', 'inode64', 'noquota'], 
     size => '29.98 GiB', 
     size_bytes => '32195481600', 
     used => '8.06 GiB', 
     used_bytes => '8652812288', 
    }, 
    '/datadisks/disk2' => { 
     available => '1006.74 GiB', 
     available_bytes => '1080982728704', 
     capacity => '0.01%', 
     device => '/dev/sdc1', 
     filesystem => 'ext4', 
     options => ['rw', 'seclabel', 'nosuid', 'nodev', 'noexec', 'noatime', 'nodiratime', 'data=ordered'], 
     size => '1006.82 GiB', 
     size_bytes => '1081062445056', 
     used => '76.02 MiB', 
     used_bytes => '79716352', 
    }, 
    '/mnt/resource' => { 
     available => '110.06 GiB', 
     available_bytes => '118173499392', 
     capacity => '0.05%', 
     device => '/dev/sdb1', 
     filesystem => 'ext4', 
     options => ['rw', 'seclabel', 'relatime', 'data=ordered'], 
     size => '110.12 GiB', 
     size_bytes => '118236442624', 
     used => '60.03 MiB', 
     used_bytes => '62943232', 
    }, 
    } 

得到公正匹配模式/datadisks/的鍵:

$datadisks = $mountpoints.keys.filter |$items| { $items =~ /datadisks/ } 

領取鑰匙和他們的數據:

$datadisks = $mountpoints.filter |$items| { $items[0] =~ /datadisks/ } 

有一些漂亮如何在docs中使用過濾器的好例子。

+0

非常好。完美的作品。我只是想找到符合模式的'keys'。 –

+0

'keys'是否需要'stdlib'? –