2017-05-03 1 views
3

/datadisksを参照する人形のマウントポイントが必要です。私はmountpointsコアfactsを使用してマウントポイントを取得します。これらのマウントポイントの中で、私はフィルタリングして、名前に/ datadisksが含まれているマウントポイントのみを取得したい、つまり、/ datadisksパターンに一致するキーが必要な場合パペットのマップからのキーのフィルタ

次のような動作がありますが、効率的な方法。誰かがそれに光を当てることができますか?

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

次のように試してみると、キーと値も出力されます。

{/ => {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のraw出力を供給できますか? –

+0

編集した質問と$ :: mountpointsの出力を更新しました –

答えて

2

私はどうか100%を確認していない:私はちょうど私がOpenlogicのCentOS 7.2上だと$::mountpointsの出力は以下のようにマップされmountpointマップ

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

からキーが欲しいですあなたはあなたがキーまたはキーとデータだけを必要としていることを意味します(あなたが言うコードはちょうどキーを抽出しているようです)。だから両方をやる。

と仮定:

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

がキーとそのデータを取得するには:

$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.filter |$items| { $items[0] =~ /datadisks/ } 

あり、かなりdocsでフィルタを使用する方法の良い例。

+0

優秀です。完璧に動作します。私はちょうど模様にマッチする 'キー'を得るために探していました。 –

+0

'keys'は' stdlib'を必要としませんか? –

関連する問題