hashpuppetfacter

Puppet : get mountpoint using facter filter


I am trying to get a root partition (mountpoint => "/") name using Puppet facter. When I run "facter mountpoints", it shows multiple partitions. I would like to get the variable "/dev/md3" from the result.

{
  / => {
    available => "893.71 GiB",
    available_bytes => 959608590336,
    capacity => "1.86%",
    device => "/dev/md3",
    filesystem => "ext4",
    options => [
      "rw",
      "errors=remount-ro"
    ],
    size => "910.69 GiB",
    size_bytes => 977843884032,
    used => "16.98 GiB",
    used_bytes => 18235293696
  },
  /run => {
    available => "794.91 MiB",
    available_bytes => 833527808,
    capacity => "0.07%",
    device => "tmpfs",
    filesystem => "tmpfs",
    options => [
      "rw",
      "noexec",
      "nosuid",
      "size=10%",
      "mode=0755"
    ],
    size => "795.48 MiB",
    size_bytes => 834125824,
    used => "584.00 KiB",
    used_bytes => 598016
  },
  /tmp => {
    available => "1.78 GiB",
    available_bytes => 1909157888,
    capacity => "1.21%",
    device => "/dev/md1",
    filesystem => "ext4",
    options => [
      "rw"
    ],
    size => "1.80 GiB",
    size_bytes => 1932533760,
    used => "22.29 MiB",
    used_bytes => 23375872
  }
}

I tried to use filter, but I was not able to filter "/" device. $root_mount = $facts['mountpoints'].filter |$mountpoint| { $mountpoint == '/' } Do you guys have any idea?


Solution

  • You can access this fact directly via hash notation. Since your question heavily implies you are using Facter 3/Puppet 4, I will work with that syntax.

    You just directly traverse the keys in the Facter hash to arrive at the /dev/md3 value. If we minimize the hash to the relevant portion from facter mountpoints:

    {
      / => {
        device => "/dev/md3"
      }
    }
    

    then we see that the keys are mountpoints (you accessed that key directly when you did facter mountpoints from the CLI), /, and device. Therefore, using standard hash notation in Puppet with the $facts hash, we can access that value with:

    $facts['mountpoints']['/']['device'] # /dev/md3
    

    Check here for more info: https://docs.puppet.com/puppet/4.9/lang_facts_and_builtin_vars.html#the-factsfactname-hash