Python: как добавить новый ключ и значение в файл yaml - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть следующий файл 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 Ответ

0 голосов
/ 26 апреля 2018

Как только вы загрузите этот файл 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 и, таким образом, удаляет существующий файл dict / mapping с ключом containers.

...