Python: как добавить новый ключ и значение в файле yaml
У меня есть следующий файл YAML. Мне нужно обновить файл YAML с новой парой ключ-значение, используя python.
Я делаю следующее, но это дает мне ошибку:
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
1 ответ
Как только вы загрузите этот файл 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
и тем самым удаляя существующий dict/mapping с ключом containers
,