@ 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 я хочу добавить данные, чтобы сделать скрипт более гибким.