This policy is inventory related to debian hosts.

common bodies

inventory_debian

Prototype: inventory_debian

Description: Debian inventory

This common bundle is for Debian inventory work.

Implementation:

bundle common inventory_debian
{
  vars:
    has_lsb_release::
      "lsb_release_info"
        string => readfile("/etc/lsb-release", "256"),
        comment => "Read more OS info";

    has_etc_linuxmint_info::
      "linuxmint_info"
        string => readfile("/etc/linuxmint/info", "1024"),
        comment => "Read Linux Mint specific info";

      "lm_info_count"
        int => parsestringarray(
          "mint_info",
          # array to populate
          "$(linuxmint_info)",
          # data to parse
          "\s*#[^\n]*",
          # comments
          "=",
          # split
          100,
          # maxentries
          2048
          # maxbytes
        );

      "mint_release" string => "$(mint_info[RELEASE][1])";
      "mint_codename" string => "$(mint_info[CODENAME][1])";

  classes:
    any::
      "debian_derived_evaluated"
        scope => "bundle",
        or => {
          isvariable("sys.os_release"),
          "has_lsb_release",
          "has_etc_linuxmint_info",
        };

      "linuxmint"
        expression => "has_etc_linuxmint_info",
        comment => "this is a Linux Mint system, of some sort",
        meta => { "inventory", "attribute_name=none" };

    has_lsb_release::
      "linuxmint"
        expression => regcmp(
          "(?ms).*^DISTRIB_ID=LinuxMint$.*", "$(lsb_release_info)"
        ),
        comment => "this is a Linux Mint system, of some sort",
        meta => { "inventory", "attribute_name=none" };

    linuxmint::
      "lmde"
        expression => regcmp('.*LMDE.*', "$(sys.os_release[NAME])"),
        comment => "this is a Linux Mint Debian Edition",
        meta => {
          "inventory",
          "attribute_name=none",
          "derived-from=sys.os_release[NAME]",
        };

    linuxmint.has_lsb_release::
      "lmde"
        expression => regcmp(
          '(?ms).*^DISTRIB_DESCRIPTION="LMDE.*', "$(lsb_release_info)"
        ),
        comment => "this is a Linux Mint Debian Edition",
        meta => {
          "inventory",
          "attribute_name=none",
          "derived-from=inventory_debian.lsb_release_info",
        };

    has_etc_linuxmint_info::
      "lmde"
        expression => regcmp(
          '(?ms).*^DESCRIPTION="LMDE.*', "$(linuxmint_info)"
        ),
        comment => "this is a Linux Mint Debian Edition",
        meta => {
          "inventory",
          "attribute_name=none",
          "derived-from=inventory_debian.linuxmint_info",
        };

    debian_derived_evaluated.has_etc_linuxmint_info.!lmde::
      # These need to be evaluated only after debian_derived_evaluated is defined
      # to ensure that the mint_info array has been evaluated as well.
      # Failing to do that will create meaningless classes
      # On non-LMDE Mint systems, this will create classes like, e.g.:
      # linuxmint_14, nadia, linuxmint_nadia
      "linuxmint_$(mint_release)"
        expression => "any",
        meta => { "inventory", "attribute_name=none" };

      "$(mint_codename)"
        expression => "any",
        meta => { "inventory", "attribute_name=none" };

      "linuxmint_$(mint_codename)"
        expression => "any",
        meta => { "inventory", "attribute_name=none" };

    debian_derived_evaluated::
      "debian_pure"
        expression => "debian.!(ubuntu|linuxmint)",
        comment => "pure Debian",
        meta => { "inventory", "attribute_name=none" };

      "debian_derived"
        expression => "debian.!debian_pure",
        comment => "derived from Debian",
        meta => { "inventory", "attribute_name=none" };

    any::
      "has_lsb_release"
        expression => fileexists("/etc/lsb-release"),
        comment => "Check if we can get more info from /etc/lsb-release";

      "has_etc_linuxmint_info"
        expression => fileexists("/etc/linuxmint/info"),
        comment => "If this is a Linux Mint system, this *could* be available";
}