我有以下YAML文件。我需要使用python更新YAML文件和新的键值对。
我正在做以下但是,它给了我错误:
pod = mylib.load_yaml("net/pod.yaml")
pod['spec']['nodeSelector']['key']='val'
它出错KeyError:'nodeSelector'
spec:
containers:
- image: ceridwen/networking:v1
imagePullPolicy: Always
name: networking
readinessProbe:
tcpSocket:
port: 5000
initialDelaySeconds: 5
periodSeconds: 1
restartPolicy: Always
我需要使用新的键值
更新它spec:
containers:
- image: ceridwen/networking:v1
imagePullPolicy: Always
name: networking
readinessProbe:
tcpSocket:
port: 5000
initialDelaySeconds: 5
periodSeconds: 1
restartPolicy: Always
nodeSelector:
key: value
答案 0 :(得分:2)
加载该YAML文件后,pod
是一个带有单个密钥spec
的字典。您可以检查该密钥的值(print(pod['spec']
),并且您只需使用一个密钥containers
即可看到该密钥。由于您希望在该字典中添加额外的密钥nodeSelector
,因此您应该添加到pod['spec']
:
pod['spec']['nodeSelector'] = dict(key='value')
请注意,您输出中的key:value
(:
后没有空格且key
和value
附近没有引号)不是映射,而是单个标量字符串。
"解决方案"由@zwer在评论中提供:
pod["spec"] = {"nodeSelector": {"key": "val"}}
是不正确的,因为它将转储为:
spec:
nodeSelector:
key: val
即。替换spec
的值,从而使用键containers
删除现有的字典/映射。