summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-01-02 03:02:30 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2022-01-02 03:02:30 +0100
commit6b78aa90f6c162039736fd88b29dbef4311d6d54 (patch)
treea842cc49043cfd7cb367c5f05ef4ec25478ad319
parentOnly run nspawn stuff if machine not running. (diff)
downloadwebdav_server-6b78aa90f6c162039736fd88b29dbef4311d6d54.tar.gz
webdav_server-6b78aa90f6c162039736fd88b29dbef4311d6d54.tar.xz
Improve node classifier.
-rw-r--r--modules/profiles/files/node-classifier.py25
-rw-r--r--modules/profiles/manifests/puppetserver.pp11
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',