2017-05-03 3 views
3

J'ai besoin des points de montage de la marionnette qui se réfèrent aux/datadisks. J'utilise mountpoints core facts pour obtenir les points de montage. Dans ces points de montage, je veux filtrer et obtenir uniquement les points de montage dont les noms contiennent/datadisks dans un tableau, je veux juste les clés qui correspondent au modèle/datadisksTouches de filtre d'une carte dans Puppet

Les travaux suivants, mais je pense qu'il y a un meilleur et plus façon efficace. Quelqu'un peut-il nous éclairer?

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

Si j'essaie ce qui suit, alors il sort aussi les clés ainsi que les valeurs. Je veux juste les clés de la carte mountpoint

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

Je suis sur OpenLogic CentOS 7.2 et la sortie de $::mountpoints est une carte comme ci-dessous:

{/ => {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

Pouvez-vous fournir la sortie brute de $ :: points de montage? –

+0

Bien sûr. Question éditée et mise à jour de la sortie de $ :: points de montage –

Répondre

2

Je ne suis pas 100% sûr que vous voulez dire que vous voulez juste les touches ou les touches et les données (le code que vous dites fonctionne ne semble être que l'extraction des clés). Donc je vais faire les deux.

En supposant:

$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', 
    }, 
    } 

Pour obtenir seulement les touches qui correspondent au modèle /datadisks/:

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

Pour obtenir les clés et leurs données:

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

Il y a quelques jolies bons exemples de la façon d'utiliser le filtre dans le docs.

+0

Excellent. Fonctionne parfaitement. Je cherchais juste à obtenir les «clés» qui correspondent au motif. –

+0

Est-ce que 'keys' n'a pas besoin de' stdlib'? –