aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralex <alex@pdp7.net>2023-02-01 21:16:20 +0100
committeralex <alex@pdp7.net>2023-02-01 21:16:20 +0100
commitbc7cba745cd10c4a23ad89d49e0c0e66d05086b9 (patch)
tree80adea862be2e8defcf085a5663f855328edfaea
parentc9bbbd297a23b8f2a02a69e3e6eec084372600bb (diff)
Initial add
-rw-r--r--personal_infra/playbooks/roles/apply_puppet/tasks/main.yml7
-rwxr-xr-xpersonal_infra/pseudo_resource_exporter.py69
-rw-r--r--personal_infra/puppet/modules/automatic_updates/manifests/init.pp2
m---------personal_infra/puppet/modules/nagios_core0
-rw-r--r--personal_infra/puppet/site/00-common.pp16
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",
+}