У меня есть несколько файлов, которые содержат мой файл формирования облаков template.yaml
. Например,
base.yaml
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Conditions:
conFunctionInVPC: !And
- !Not [!Equals [!Join ["", !Ref parFunctionSubnets], ""]]
- !Not [!Equals [!Join ["", !Ref parFunctionSecurityGroups], ""]]
conFunctionNotInVPC: !Not [!Condition conFunctionInVPC]
conAwsXRaySdkLayer: !Not [!Equals [!Ref parAwsXRaySdkLayerArn, ""]]
application.yaml
Description: >
test
A short description of the function purpose
Я хочу создать окончательный файл yaml. Я попробовал простую функцию объединения
with open('base.yaml') as f:
base = yaml.load(f)
with open('application.yaml') as f:
application = yaml.load(fp)
template = merge(base, template) # my own function not important here
yaml.dump(template, open('template.yaml', 'w'))
Однако я получаю сообщение об ошибке:
yaml.constructor.ConstructorError: не удалось определить конструктор для тега '! And'
Как я могу сказать yaml просто сохранить узел таким простым, каким он есть? И сможете ли вывести его снова при выгрузке?
Я пытался с
yaml.add_multi_constructor('!', lambda loader, suffix, node: node)
, но затем, когда я выгружаю файл, я получаю объект SequenceNode
в моем yaml за каждый !ref
например:
conFunctionInVPC: !!python/object:yaml.nodes.SequenceNode
end_mark: !!python/object:yaml.error.Mark
buffer: null
column: 2
index: 721
line: 24
name: template/template.yaml
pointer: null
flow_style: false
start_mark: !!python/object:yaml.error.Mark
buffer: null
column: 20
index: 581
line: 21
name: template/template.yaml
pointer: null
tag: '!And'
value: