В вашем файле YAML ваша корневая коллекция является отображением, а значение ключа spec
в этом отображении само является отображением.Оба этих отображения загружаются как dict
-подобные объекты, используя ruamel.yaml
с именем CommentedMap
.
Как и в случае обычных dict
s, вы можете добавлять пары ключ-значение, удаленные ключи (и их значения)и обновите значения для ключа, но метода .append()
нет, как в случае со списком (т. е. добавляется дополнительный элемент в список).
Ваш вывод немного краткий, но, конечно,Вы не можете просто добавить nodeSelector
к чему-либо (список / последовательность, ни dict / mapping) и ожидать, что оно автоматически добавит kubernetes.io/hostname: kubew1
(отображение само по себе).
Ваша попытка:
result['spec']['nodeSelector']['kubernetes.io/hostname'] = 'kubew1'
не может работать, потому что нет слова result['spec']['nodeSelector']
, в которое можно добавить ключ kubernetes.io/hostname
.
Сначала вам нужно будет создать ключ со значением emtpy в качестве значения:
result['spec']['nodeSelector'] = {}
result['spec']['nodeSelector']['kubernetes.io/hostname'] = 'kubew1'
или сделайте
result['spec']['nodeSelector'] = {'kubernetes.io/hostname']: 'kubew1'}
Обратите внимание, что вышеприведенное не имеет ничего общего с ruamel.yaml
, это просто базовые манипуляции со структурой данных Python.Также обратите внимание, что в пространстве имен ruamel имеется более 100 библиотек, из которых ruamel.yaml
является лишь одной из нескольких, опубликованных как открытый исходный код, поэтому использование ruamel
не очень ясное утверждение, хотя, конечно, контекст часто предоставляет достаточно информации окакую библиотеку вы на самом деле используете.