Объединить облако yaml AWS шаблон формирования облака - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть несколько файлов, которые содержат мой файл формирования облаков 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:

1 Ответ

0 голосов
/ 10 апреля 2020

Просмотр Ошибка YAML: не удалось определить конструктор для тега

, похоже, он работает с использованием RoundTrip и ruamel

template = load(f, Loader=RoundTripLoader)
yaml.dump(template, f, Dumper=RoundTripDumper)
...