Puppet Function: simplib::assert_metadata

Defined in:
functions/assert_metadata.pp
Function type:
Puppet Language

Overview

simplib::assert_metadata(String[1] $module_name, Optional[Struct[{ os => Optional[Struct[{ validate => Optional[Boolean], options => Struct[{ release_match => Enum['none','full','major'] }] }]] }]] $options = simplib::lookup('simplib::assert_metadata::options', { 'default_value' => undef }))Any

Fails a compile if the client system is not compatible with the module's metadata.json

Parameters:

  • module_name (String[1])

    The name of the module that should be checked

  • options (Optional[Struct[{ os => Optional[Struct[{ validate => Optional[Boolean], options => Struct[{ release_match => Enum['none','full','major'] }] }]] }]]) (defaults to: simplib::lookup('simplib::assert_metadata::options', { 'default_value' => undef }))

    Behavior modifiers for the function * Can be set using simplib::assert_metadata::options in the lookup stack

    Options

    • enable => If set to false disable all validation

    • os

      • validate => Whether or not to validate the OS settings

      • options

        • release_match

        • none -> No match on minor release (default)

        • full -> Full release must match

        • major -> Only the major release must match

Returns:

  • (Any)


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'functions/assert_metadata.pp', line 23

function simplib::assert_metadata (
  String[1] $module_name,
  Optional[Struct[{
    os => Optional[Struct[{
      validate => Optional[Boolean],
      options  => Struct[{
        release_match => Enum['none','full','major']
      }]
    }]]
  }]]       $options = simplib::lookup('simplib::assert_metadata::options', { 'default_value' => undef }),
) {

  $_default_options = {
    'enable' => true,
    'os'     => {
      'validate' => true,
      'options' => {
        'release_match' => 'none'
      }
    }
  }

  if $options {
    $_options = deep_merge($_default_options, $options)
  }
  else {
    $_options = $_default_options
  }

  if $_options['enable'] {

    $metadata = load_module_metadata($module_name)

    if empty($metadata) {
      fail("Could not find metadata for '${module_name}'")
    }

    if $_options['os']['validate'] {
      if !$metadata['operatingsystem_support'] or empty($metadata['operatingsystem_support']) {
        debug("'operatingsystem_support' was not found in '${module_name}'")
      }
      elsif !($facts['os']['name'] in $metadata['operatingsystem_support'].map |Simplib::Puppet::Metadata::OS_support $os_info| { $os_info['operatingsystem'] }) {
        fail("OS '${facts['os']['name']}' is not supported by '${module_name}'")
      }
      else {
        $metadata['operatingsystem_support'].each |Simplib::Puppet::Metadata::OS_support $os_info| {
          if $os_info['operatingsystem'] == $facts['os']['name'] {
            case $_options['os']['options']['release_match'] {
              'none': {
                $result = true
              }

              'full': {
                if !($facts['os']['release']['full'] in $os_info['operatingsystemrelease']) {
                  fail("OS '${facts['os']['name']}' version '${facts['os']['release']['full']}' is not supported by '${module_name}'")
                }
              }
              'major': {
                $_os_major_releases = $os_info['operatingsystemrelease'].map |$os_release| {
                  split($os_release, '\.')[0]
                }

                if !($facts['os']['release']['major'] in $_os_major_releases) {
                  fail("OS '${facts['os']['name']}' version '${facts['os']['release']['major']}' is not supported by '${module_name}'")
                }
              }
            }
          }
        }
      }
    }
  }
}