Я создал 2 файла yaml, которые выглядят следующим образом: < /p>
file1.yaml:
variables:
host1: &host1 'https://example.com'
< /code>
file2.yaml:
app:
host: *host1
< /code>
As you can see I want to use the YAML anchor &host1 в другом файле YAML. Теперь я знаю, что YAML не поддерживает это, но это возможно использовать сценарий Python и ruamel.yaml .
import ruamel.yaml
def load_and_merge_yaml(base_file, target_file):
yaml = ruamel.yaml.YAML()
# Load the base YAML file (contains anchors)
with open(base_file, 'r') as base_file_obj:
base_data = yaml.load(base_file_obj)
# Load the target YAML file (we want to reuse anchors here)
with open(target_file, 'r') as target_file_obj:
target_data = yaml.load(target_file_obj)
# Manually merge the base data into the target data
# We will handle this by iterating through the base data and adding/replacing it in the target.
# If a key exists in the base data, we will add it to the target if it's missing
def merge_dicts(base, target):
for key, value in base.items():
if isinstance(value, dict):
# If the value is a dictionary, we recursively merge
if key not in target:
target[key] = {} # Create the key if it's missing
merge_dicts(value, target[key]) # Recursively merge nested dictionaries
else:
# If the value is not a dictionary, just assign it to the target
if key not in target:
target[key] = value # Add if missing
# Perform the merge
merge_dicts(base_data, target_data)
# Save the merged result to a new file
with open('merged_output.yaml', 'w') as output_file:
yaml.dump(target_data, output_file)
return target_data
# Example usage
base_file = 'file1.yaml' # The file containing the anchors
target_file = 'file2.yaml' # The file where we want to apply anchors
merged_data = load_and_merge_yaml(base_file, target_file)
# Print the merged data for inspection
print(ruamel.yaml.dump(merged_data, default_flow_style=False))
< /code>
And people tell me this should work but unfortunately I keep getting this error:
ruamel.yaml.composer.ComposerError: found undefined alias 'host1'
in "file2.yaml", line 2, column 9
< /code>
Does anyone know what I'm doing wrong? Below is the output I would like.
app:
host: 'https://example.com'
Подробнее здесь: https://stackoverflow.com/questions/794 ... uamel-yaml
Использование якорей YAML в разных файлах с использованием python / ruamel.yaml ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Использование якорей YAML в разных файлах с использованием python / ruamel.yaml
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проблема с отступами Yaml от ruamel.yaml для автоматизации, выполненной на Python
Anonymous » » в форуме Python - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-