您需要更改 yaml 文件中的值:
singleuser:
image:
name: hub/k8s-network-tools
tag: "1.2.0"
写了这个脚本:
#!/usr/bin/env python
import yaml
import argparse
parser = argparse.ArgumentParser(description='Скрипт')
parser.add_argument('key', type=str, help='key')
parser.add_argument('value', type=str, help='value')
args = parser.parse_args()
with open("values.yaml") as f:
try:
list_doc = yaml.load(f)
for arr in list_doc:
arr[args.key] = args.value
with open("values.yaml", "w") as f:
yaml.dump(list_doc, f)
except yaml.YAMLError as exc:
print(exc)
我收到一个错误:
user@myPC test % python change_values.py "singleuser.image.tag" "1.2.1"
change_values.py:13: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
list_doc = yaml.load(f)
Traceback (most recent call last):
File "change_values.py", line 16, in <module>
arr[args.key] = args.value
TypeError: 'str' object does not support item assignment
user@myPC test %
告诉我这里出了什么问题,或者如何正确地做
list_doc
是一个常规字典:因此,您需要通过相应的键更改字典的值。您可以像这样遍历密钥树。我将在这里修复参数,我不想处理命令行解析,但这个解决方案应该很容易适应真实的解决方案
args
: