diff options
5 files changed, 93 insertions, 1 deletions
diff --git a/personal_infra/playbooks/roles/apply_puppet/tasks/main.yml b/personal_infra/playbooks/roles/apply_puppet/tasks/main.yml index 3512717e..831d5b94 100644 --- a/personal_infra/playbooks/roles/apply_puppet/tasks/main.yml +++ b/personal_infra/playbooks/roles/apply_puppet/tasks/main.yml @@ -53,6 +53,13 @@ cmd: "{{ inventory_dir }}/up.py {{ inventory_dir }}/build/puppet {{ inventory_dir }}/puppet/modules {{ inventory_dir }}/puppet/site {% for host in ansible_play_batch %}{{ host }} {% endfor %}" tags: puppet_fast run_once: True +- name: simulate exported resources + local_action: + module: command + cmd: "./pseudo_resource_exporter.py" + chdir: "{{ inventory_dir }}" + tags: puppet_fast + run_once: True - name: package catalog archive: path: "{{ inventory_dir }}/build/puppet/build/output/{{ inventory_hostname }}" diff --git a/personal_infra/pseudo_resource_exporter.py b/personal_infra/pseudo_resource_exporter.py new file mode 100755 index 00000000..0753a0d7 --- /dev/null +++ b/personal_infra/pseudo_resource_exporter.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 + +import json +import pathlib + + +def load_json(path): + with open(path) as f: + return json.load(f) + +def save_json(r, path): + with open(path, "w") as f: + json.dump(r, f) + +nagios_catalog_file = pathlib.Path("build/puppet/build/output/nagios.h1.int.pdp7.net/catalog.json") + +if nagios_catalog_file.exists(): + nagios_catalog = load_json(nagios_catalog_file) + + nagios_contacts = [r for r in nagios_catalog["resources"] if r["type"] == "Nagios_contact"] + assert len(nagios_contacts) == 1, f"found multiple nagios contacts {nagios_contacts}" + nagios_contact = nagios_contacts[0] + +total_hosts_in_inventory = len(list(pathlib.Path("host_vars").glob("*"))) + +catalog_files = list(pathlib.Path("build/puppet/build/output/").glob("*/catalog.json")) + +if nagios_catalog_file.exists(): + assert len(catalog_files) == total_hosts_in_inventory, f"catalogs {catalog_files} quantity different from total hosts in inventory {total_hosts_in_inventory}" + + +nagios_resources = [] +nagios_edge_targets = [] + +def is_nagios_resource(r): + return r["type"].startswith("Nagios") + + +def is_nagios_edge(e): + return e["target"].startswith("Nagios") + +for catalog_file in catalog_files: + if catalog_file == nagios_catalog_file: + continue + catalog = load_json(catalog_file) + nagios_resources += [r for r in catalog["resources"] if is_nagios_resource(r)] + catalog["resources"] = [r for r in catalog["resources"] if not is_nagios_resource(r)] + nagios_edge_targets += [e["target"] for e in catalog["edges"] if is_nagios_edge(e)] + catalog["edges"] = [e for e in catalog["edges"] if not is_nagios_edge(e)] + save_json(catalog, catalog_file) + + +if nagios_catalog_file.exists(): + nagios_contact_position = nagios_catalog["resources"].index(nagios_contact) + + def copy_parameters(r): + for p in ["require", "notify", "owner"]: + r["parameters"][p] = nagios_contact["parameters"][p] + return r + + nagios_catalog["resources"] = ( + nagios_catalog["resources"][0:nagios_contact_position] + + list(map(copy_parameters, nagios_resources)) + + nagios_catalog["resources"][nagios_contact_position:] + ) + + nagios_catalog["edges"] += [{"source": "Class[Nagios]", "target": t} for t in nagios_edge_targets] + + save_json(nagios_catalog, nagios_catalog_file) diff --git a/personal_infra/puppet/modules/automatic_updates/manifests/init.pp b/personal_infra/puppet/modules/automatic_updates/manifests/init.pp index eed91aa0..8585b0ae 100644 --- a/personal_infra/puppet/modules/automatic_updates/manifests/init.pp +++ b/personal_infra/puppet/modules/automatic_updates/manifests/init.pp @@ -15,7 +15,7 @@ class automatic_updates { enable => true, } } - elsif ($facts['os']['release']['major'] == '8') { + elsif ($facts['os']['release']['major'] == '8' or $facts['os']['release']['major'] == '9') { package {'dnf-automatic':} -> service {'dnf-automatic-install.timer': diff --git a/personal_infra/puppet/modules/nagios_core b/personal_infra/puppet/modules/nagios_core -Subproject 5d0a6c2bbc82ea3dd84b3a09680ec01461ff637 +Subproject 8dbf9f12383bd29973963a52968b2850d98292f diff --git a/personal_infra/puppet/site/00-common.pp b/personal_infra/puppet/site/00-common.pp index f60988dc..3fa0dc15 100644 --- a/personal_infra/puppet/site/00-common.pp +++ b/personal_infra/puppet/site/00-common.pp @@ -5,3 +5,19 @@ include root_mail if $facts['os']['family'] == "Debian" { class {'debian':} } + +$nagios_host = $facts['networking']['fqdn'] + +nagios_host {$nagios_host: + use => 'generic-host', + address => $facts['networking']['fqdn'], + max_check_attempts => 5, + contact_groups => "admins", +} + +nagios_service {"${nagios_host}-ssh": + use => 'generic-service', + host_name => $facts['networking']['fqdn'], + service_description => "ssh", + check_command => "check_ssh", +} |
