Я пытаюсь загрузить YAML-файл в python, изменить его и вернуть обратно.YAML выглядит следующим образом:
data:
mapRoles: |
- username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
Я хотел бы изменить его так, чтобы выходной файл включал новую строку rolearn: awsarn
в mapRoles:
data:
mapRoles: |
- username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
rolearn: awsarn
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
Но я получаювыведите это, где значение mapRoles будет заключено в кавычки как строка и содержит литерал \n
:
apiVersion: v1
data:
mapRoles: "- username: system:node:{{EC2PrivateDNSName}}\n groups:\n - system:bootstrappers\n\
\ - system:nodes\n rolearn: arnaws"
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
Код, который я использую:
with open ('/tmp/aws-auth-cm.yaml') as f:
content = yaml.safe_load(f)
content['data']['mapRoles'] = content['data']['mapRoles'] + ' rolearn: awsarn'
with open("/tmp/aws-auth-cm.yaml", "w") as f:
yaml.safe_dump(content, f, default_flow_style=False)
Я также пытался использовать yaml.safe_dump(content, f, default_flow_style=False, default_style='|')
тогда все значения имеют | - и ключи заключаются в двойные кавычки:
"apiVersion": |-
v1
"data":
"mapRoles": |-
- username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
rolearn: arnaws
"kind": |-
ConfigMap
"metadata":
"name": |
Есть ли способ, которым я мог бы применить стиль = '|'только для строк, а также убедитесь, что ключи не в кавычках?