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,

Другие вопросы по тегам