From 7806dbb7ef2a200bc0dab5430d364e74a8652fab Mon Sep 17 00:00:00 2001 From: Alex Frantz Date: Sat, 22 Nov 2025 17:39:26 -0500 Subject: [PATCH] update extraction script --- scripts/extract_to_template.py | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/scripts/extract_to_template.py b/scripts/extract_to_template.py index 48d9036..7551255 100644 --- a/scripts/extract_to_template.py +++ b/scripts/extract_to_template.py @@ -10,21 +10,39 @@ if os.path.exists(host_vars_path): vaults = os.listdir(host_vars_path) + # 1st run - extract ungrouped, global variables for vault in vaults: vault_path = os.path.join(host_vars_path, vault) vault_contents = subprocess.run(f'ansible-vault decrypt "{vault_path}" --vault-password-file ~/.vault_pass.txt --output -', shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) stdout = vault_contents.stdout.strip().splitlines() for line in stdout: - if line.startswith("#") and line not in file_contents: - file_contents += f"\n{line}\n" + if line.startswith("#"): + break + elif line.split(":")[0] not in file_contents: + file_contents += f"{line.split(":")[0]}:\n" + + # 2nd run - extract service-specific variables + for vault in vaults: + vault_path = os.path.join(host_vars_path, vault) + vault_contents = subprocess.run(f'ansible-vault decrypt "{vault_path}" --vault-password-file ~/.vault_pass.txt --output -', shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + stdout = vault_contents.stdout.strip().splitlines() - if ":" in line: - if line.split(":")[0] not in file_contents: - file_contents += f'{line.split(":")[0]}:\n' + has_found_start = False + for line in stdout: + if has_found_start or line.startswith("#"): + if not has_found_start: + has_found_start = True + + if line.startswith("#") and line not in file_contents: + file_contents += f"\n{line}\n" - with open(os.path.join(host_vars_path, 'all.template.yml'), 'w', encoding="utf8") as template_file: - template_file.write(file_contents) - template_file.close() + if ":" in line: + if line.split(":")[0] not in file_contents: + file_contents += f'{line.split(":")[0]}:\n' + + with open(os.path.join(host_vars_path, 'all.template.yml'), 'w', encoding="utf8") as template_file: + template_file.write(file_contents) + template_file.close() print("Written to disk!") \ No newline at end of file