2017-05-03 7 views
3

/datadisks를 참조하는 꼭두각시에 마운트 포인트가 필요합니다. 마운트 지점을 얻으려면 mountpoints 코어 facts을 사용합니다. 이 마운트 포인트 내에서 필자는/datadisks 패턴과 일치하는 키를 원한다면 (즉,/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의 원시 출력을 제공 할 수 있습니까? –

+0

예. 수정 된 질문 및 $ :: mountpoints의 출력을 업데이트했습니다. –

답변

2

내가 여부를 100 % 확실하지 않다 : 난 그냥 Openlogic에 CentOS 7.2 $::mountpoints의 출력에있어

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

아래와 같은지도가 mountpoint지도에서 키입니다 싶어 당신은 당신이 단지 키 또는 키와 데이터를 원한다는 것을 의미합니다 (당신이 말하는 코드는 단지 키를 추출하는 것처럼 보입니다). 그래서 나는 둘 다 할 것입니다.

가정 :

$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

우수. 완벽하게 작동합니다. 나는 패턴과 일치하는'keys '를 얻으려고했다. –

+0

'keys'는'stdlib'을 요구합니까? –