aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralex <alex@pdp7.net>2024-02-18 12:00:53 +0100
committeralex <alex@pdp7.net>2024-02-18 12:00:53 +0100
commit3501200c8c2fc425ba83bbebe7b69fd25cc97163 (patch)
treeef16b31dfe866bc0436fc3274b13977a63615201
parentafd6125b952b184c7ad0d9556a2d1ebb203acdd6 (diff)
Add ansible_facts Python lib
-rw-r--r--personal_infra/ansible_facts.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/personal_infra/ansible_facts.py b/personal_infra/ansible_facts.py
new file mode 100644
index 00000000..02a744ab
--- /dev/null
+++ b/personal_infra/ansible_facts.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python3
+import collections
+import json
+import subprocess
+
+
+def setup(pattern, setup_options):
+ res = dict()
+ out = subprocess.run(["ansible", "-m", "setup", pattern, "-a", setup_options], env={"ANSIBLE_LOAD_CALLBACK_PLUGINS": "true", "ANSIBLE_STDOUT_CALLBACK": "ansible.posix.jsonl"}, check=True, stdout=subprocess.PIPE).stdout
+ out = out.decode("utf8").split("\n")[0:-4]
+ out = [json.loads(l) for l in out if l.startswith("{")]
+ out = [j for j in out if "hosts" in j and j["hosts"]]
+ for j in out:
+ assert len(j["hosts"]) == 1
+ k, v = list(j["hosts"].items())[0]
+ res[k] = v["ansible_facts"]
+ return res
+
+
+def distros():
+ res = collections.defaultdict(list)
+ for k, v in setup("!k8s", "gather_subset=all").items():
+ res[f'{v["ansible_distribution_file_variety"]} {v["ansible_distribution_major_version"]}'].append(k)
+ return res