From 6b78aa90f6c162039736fd88b29dbef4311d6d54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sun, 2 Jan 2022 03:02:30 +0100 Subject: Improve node classifier. --- modules/profiles/files/node-classifier.py | 25 +++++++++++++++++++++++-- modules/profiles/manifests/puppetserver.pp | 11 +++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) (limited to 'modules/profiles') 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 ') 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', -- cgit v1.2.3