我有以下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
一旦你加载了YAML文件,你的pod
就是一个带有单个密钥spec
的字典。您可以检查该密钥的值(print(pod['spec']
),您将看到这是dict,只需一个密钥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
的现有字典/映射。