@ user541 Я обновил ответ базовым примером добавления сложных значений.

я разные файлы yaml, которые могут иметь разную вложенную структуру

file1.yaml:

test3:
  service1: 
      name1: |
        "somedata"
      name2: |
          "somedata"

file2.yaml:

test1: 
  app1: 
     app2:|
       "somedata"
  app7:
     key2: | 
       "testapp"

Итак, как вы можете видеть, структура файлов yaml может отличаться.

Вопрос в том, могу ли я как-то гибко добавить некоторые данные в определенные блоки этих файлов?

Например, в file1 я хочу написать ключ vaue на уровне name1 и name 2 keys или service1:

test3:
  service1: 
      name1: |
        "somedata"
      name2: |
          "somedata"
      my-appended-key:| 
              "my appended value"
  my_second_appended_key: | 
          "my second appended valye"

и так далее.

Так что идея состоит в том, чтобы иметь возможность указать, под каким вложенным блоком в yaml я хочу добавить данные.

У меня разные файлы yaml, которые могут иметь разную вложенную структуру

file1.yaml:

test3:
  service1: 
      name1: |
        "somedata"
      name2: |
          "somedata"

file2.yaml:

test1: 
  app1: 
     app2:|
       "somedata"
  app7:
     key2: | 
       "testapp"

Итак, как вы можете видеть, структура файлов yaml может отличаться.

Вопрос в том, могу ли я как-то гибко добавить некоторые данные в определенные блоки этих файлов?

Например, в file1 я хочу написать ключ vaue на уровне name1 и name 2 keys или service1:

test3:
  service1: 
      name1: |
        "somedata"
      name2: |
          "somedata"
      my-appended-key:| 
              "my appended value"
  my_second_appended_key: | 
          "my second appended valye"

и так далее.

Сейчас я делаю это для конкретного случая относительно структуры файла yaml. Вот часть моего кода:

import gnupg
import re
import argparse

def NewPillarFile():
    with open(args.sensitive) as sensitive_data:
        with open(args.encrypted, "w") as encrypted_result:
            encrypted_result.write('#!yaml|gpg\n\nsecrets:\n    '+args.service+':\n')
            for line in sensitive_data:
                encrypted_value = gpg.encrypt(re.sub(r'^( +?|[A-Za-z0-9]|[A-Za]|[0-9])+( +)?'+args.separator+'( +)?','',line,1), recipients=args.resident, always_trust=True)
                if not encrypted_value.ok:
                    print(encrypted_value.status, '\n', encrypted_value.stderr)
                    break
                line = re.sub(r'^( +)?','',line)
                encrypted_result.write('        '+re.sub(r'( +)?'+args.separator+'.*',': |',line))
                encrypted_result.write(re.sub(re.compile(r'^', re.MULTILINE), '            ', encrypted_value.data.decode())+'\n')

def ExistingPillarFile():
    with open(args.sensitive) as sensitive_data:
        with open(args.encrypted, "a") as encrypted_result:
            encrypted_result.write('    '+args.service+':\n')
            for line in sensitive_data:
                encrypted_value = gpg.encrypt(
                    re.sub(r'^( +?|[A-Za-z0-9]|[A-Za]|[0-9])+( +)?' + args.separator + '( +)?', '', line, 1),
                    recipients=args.resident, always_trust=True)
                if not encrypted_value.ok:
                    print(encrypted_value.status, '\n', encrypted_value.stderr)
                    break
                line = re.sub(r'^( +)?', '', line)
                encrypted_result.write('        ' + re.sub(r'( +)?' + args.separator + '.*', ': |', line))
                encrypted_result.write(re.sub(re.compile(r'^', re.MULTILINE), '            ', encrypted_value.data.decode())+'\n')

Так что идея состоит в том, чтобы указать, под каким вложенным блоком в yaml я хочу добавить данные, чтобы сделать скрипт более гибким.

Ответы на вопрос(1)

Ваш ответ на вопрос