Filter 从Puppet中的贴图筛选关键帧

Filter 从Puppet中的贴图筛选关键帧,filter,puppet,mount-point,facter,Filter,Puppet,Mount Point,Facter,我需要puppet中引用/datadisks的挂载点。我使用mountpointscorefacts获取装载点。在这些挂载点中,我只想筛选并获取名称在数组中包含/datadisks的挂载点,即我只需要与/datadisks模式匹配的密钥 下面的方法很有效,但我觉得有一种更好更有效的方法。有人能解释一下吗 $foo = flatten( map($::mountpoints) |$key,$value| { $key }) $filtered_data = $foo.filter |$items|

我需要puppet中引用/datadisks的挂载点。我使用
mountpoints
core
facts
获取装载点。在这些挂载点中,我只想筛选并获取名称在数组中包含/datadisks的挂载点,即我只需要与/datadisks模式匹配的密钥

下面的方法很有效,但我觉得有一种更好更有效的方法。有人能解释一下吗

$foo = flatten( map($::mountpoints) |$key,$value| { $key })
$filtered_data = $foo.filter |$items| { $items =~ /datadisks/ }
如果我尝试以下操作,那么它也会输出键和值。我只需要
挂载点
地图上的钥匙

$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 \-字节=>1080982728704,容量=>0.01%,设备=>/dev/sdc1,文件系统=>ext4,选项=>[rw,seclabel,nosuid,nodev,noexec,noatime,nodiratime,data=ordered],大小=>1006.82 GiB,大小\-字节=>1081062445056,已用=>76.02 MiB,已用\-字节=>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}

我不能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 = $mountpoints.keys.filter |$items| { $items =~ /datadisks/ }
要获取密钥及其数据,请执行以下操作:

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

有一些关于如何在中使用筛选器的非常好的示例。

您可以提供$::mountpoints的原始输出吗?当然可以。编辑问题并更新$::mountpointsCellent的输出。工作非常完美。我只是想得到与模式匹配的
键。难道
不需要
stdlib