diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/profiles/files/node-classifier.py | 25 | ||||
-rw-r--r-- | modules/profiles/manifests/puppetserver.pp | 11 |
2 files changed, 34 insertions, 2 deletions
diff --git a/modules/profiles/files/node-classifier.py b/modules/profiles/files/node-classifier.py index 8c28ddb..7fc096f 100644 --- a/modules/profiles/files/node-classifier.py +++ b/modules/profiles/files/node-classifier.py @@ -2,17 +2,38 @@ import yaml import sys +import configparser # https://puppet.com/docs/puppet/7/nodes_external.html -with open('/nodes.yaml') as f: - data = yaml.load(f) def main(args): if len(args) == 1: print('usage ./node-classifier <node-name>') return + parser = configparser.ConfigParser() + conf_file = '/etc/node-classifier.ini' + if parser.read(conf_file) != [conf_file]: + print(f'Configuration file missing, expected {conf_file}') + return 1 + + try: + fmt = parser.get('common', 'node_fmt') + if fmt != 'yaml': + print(f'Unknown format {fmt}') + return 1 + filename = parser.get('common', 'nodes') + except configparser.NoSectionError as e: + print(e) + return 1 + except NoOptionError as e: + print(e) + return 1 + + with open(filename) as f: + data = yaml.load(f) + nodename = sys.argv[1] instance = data.get(nodename) if not instance: diff --git a/modules/profiles/manifests/puppetserver.pp b/modules/profiles/manifests/puppetserver.pp index 0ba244d..f8fc47c 100644 --- a/modules/profiles/manifests/puppetserver.pp +++ b/modules/profiles/manifests/puppetserver.pp @@ -8,6 +8,17 @@ class profiles::puppetserver { ensure_packages(['python3-yaml']) + inifile::create_ini_settings( + { common => { + node_fmt => yaml, + nodes => '/nodes.yaml', + }, + }, + { + path => '/etc/node-classifier.ini', + } + ) + file { '/usr/libexec/external-node-classifier': mode => '0555', source => 'puppet:///modules/profiles/node-classifier.py', |