Files
iac-opentofu-public/merge_yaml.py

56 lines
1.4 KiB
Python

#!/usr/bin/env python3
import yaml
import sys
import json
from collections.abc import Mapping
def deep_merge_yaml(dict1, dict2):
result = dict1.copy()
for key, value in dict2.items():
if key in result:
if isinstance(result[key], list) and isinstance(value, list):
result[key] = result[key] + value
elif isinstance(result[key], Mapping) and isinstance(value, Mapping):
result[key] = deep_merge_yaml(result[key], value)
else:
result[key] = value
else:
result[key] = value
return result
def main():
input_data = json.load(sys.stdin)
file1 = input_data["file1"]
file2 = input_data["file2"]
with open(file1, "r") as f1, open(file2, "r") as f2:
try:
yaml1 = yaml.safe_load(f1)
except yaml.YAMLError as e:
print("Erro ao carregar YAML do primeiro ficheiro:")
print(f1.read())
raise e
try:
yaml2 = yaml.safe_load(f2)
except yaml.YAMLError as e:
print("Erro ao carregar YAML do segundo ficheiro:")
print(f2.read())
raise e
merged = deep_merge_yaml(yaml1, yaml2)
print(json.dumps({
"merged_yaml": yaml.dump(
merged,
sort_keys=False,
default_flow_style=False,
indent=2
)
}))
if __name__ == "__main__":
main()