我正在尝试在 python 中加载 YAML 文件,修改它并将其转储回来。
YAML 看起来像这样:
data:
mapRoles: |
- username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
我想修改它以便输出文件包含一个新行rolearn: awsarn
在地图角色中:
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": |
有没有办法可以应用 style='|'只是字符串并确保键没有被引号引起来?