"""Infrastructure module. All functionality that requires interacting with the infrastructure repository should live in here. This module relies on the file structure and conventions of the infrastructure repository directory layout. That can change without the code knowing, so the code must act more defensively than normal. This is an experiment. """ from os import environ from autonomic.config import INFRA_DIR, MEMBERS_YAML, PASS_STORE_DIR from autonomic.utils import run, yaml_load def members(flatten=None): """The list of Autonomic members.""" members = yaml_load(MEMBERS_YAML) if members is None: return if flatten: return [info[flatten] for info in members["autonomic_members"]] return members def run_play(play, env=None): """Run an Ansible playbook.""" cmd = [".venv/bin/ansible-playbook", play] run(cmd, cwd=INFRA_DIR, interactive=True, env=env) def get_passwd(path): """Lookup a password from the password store.""" env = environ.copy() env.update({"PASSWORD_STORE_DIR": PASS_STORE_DIR}) cmd = ["pass", "show", path] output = run(cmd, cwd=INFRA_DIR, env=env) return output.strip()