diff options
| author | alex <alex@pdp7.net> | 2024-02-18 12:00:53 +0100 |
|---|---|---|
| committer | alex <alex@pdp7.net> | 2024-02-18 12:00:53 +0100 |
| commit | 3501200c8c2fc425ba83bbebe7b69fd25cc97163 (patch) | |
| tree | ef16b31dfe866bc0436fc3274b13977a63615201 /personal_infra | |
| parent | afd6125b952b184c7ad0d9556a2d1ebb203acdd6 (diff) | |
Add ansible_facts Python lib
Diffstat (limited to 'personal_infra')
| -rw-r--r-- | personal_infra/ansible_facts.py | 24 |
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 |
