from ansible.parsing.yaml.loader import AnsibleLoader from ansible.parsing.vault import get_file_vault_secret from ansible.parsing.dataloader import DataLoader class Config(object): def __init__(self, environment_path): self.environment_path = environment_path self._load_ansible_vault_secrets() self._load_configuration_files() def _load_ansible_vault_secrets(self): secret = get_file_vault_secret( filename="~/.ansible-vault-password", loader=DataLoader()) secret.load() self.vault_secrets = [("default", secret)] def _load_configuration_files(self): self.lxd = self._read("lxd.yml")["lxd"] self.credentials = self._read("credentials.yml")["credentials"] self.networks = self._read("networks.yml")["networks"] self.software = self._read("software.yml")["software"] self.nodes = self._read("nodes.yml")["nodes"] self.node_types = self._read("node_types.yml")["node_types"] def _read(self, filename): with open("%s/%s" % (self.environment_path, filename)) as fh: loader = AnsibleLoader(fh, filename, self.vault_secrets) data = loader.get_single_data() return data