Report abuse

# If the assertion fails, an error is printed on the server
# 
# To fail individual resources on a missing lsbdistcodename, require
# Exec[assert_lsbdistcodename] on the specific resource
#
# This is just one example of how you could avoid evaluation of parts of the
# manifest, before a bootstrapping class has enabled all the necessary goodies.
class assert_lsbdistcodename {

  case $lsbdistcodename {
    '': {
      err("Please install lsb_release or set facter_lsbdistcodename in the environment of $fqdn")
      exec { "false # assert_lsbdistcodename": alias => assert_lsbdistcodename, loglevel => err }
    }
    'n/a': {
      case $operatingsystem {
        "Debian": {
          err("lsb_release was unable to report your distcodename; This seems to indicate a broken apt/sources.list on $fqdn")
        }
        default: {
          err("lsb_release was unable to report your distcodename; please set facter_lsbdistcodename in the environment of $fqdn")
        }
      }
      exec { "false # assert_lsbdistcodename": alias => assert_lsbdistcodename, loglevel => err }
    }
    default: {
      exec { "true # assert_lsbdistcodename": alias => assert_lsbdistcodename, loglevel => debug }
      exec { "true # require_lsbdistcodename": alias => require_lsbdistcodename, loglevel => debug }
    }
  }

}

# To fail the complete compilation, include this class
class require_lsbdistcodename inherits assert_lsbdistcodename {
  exec { "false # require_lsbdistcodename": require => Exec[require_lsbdistcodename], loglevel => err }
}