【发布时间】:2021-06-15 04:57:41
【问题描述】:
我需要一些关于 python 的帮助。
我有两个数组:param_keys 和 param_values。第一个包含字符串键,第二个包含 base64 编码的字符串。
我还有一个从文件中读取的现有 yaml 结构:
start:
implementation: ansible.cloudify_ansible.tasks.run
inputs:
playbook_path: ansible/main-routers.yaml
run_data:
hostname: r1
我想将这些键值对添加到“run_data”键下的现有 yaml 中。问题是我的值不是简单的字符串,而是 base64 字符串形式的 yaml:
原始yaml
- index: 1
address: { get_input: host_ip_int_nic_r1_1 }
netmask: 30
- index: 2
address: { get_input: host_ip_int_nic_r1_2 }
netmask: 30
Base 64 编码字符串:
LSBpbmRleDogMQogIGFkZHJlc3M6IHsgZ2V0X2lucHV0OiBob3N0X2lwX2ludF9uaWNfcjFfMSB9CiAgbmV0bWFzazogMzAKLSBpbmRleDogMgogIGFkZHJlc3M6IHsgZ2V0X2lucHV0OiBob3N0X2lwX2ludF9uaWNfcjFfMiB9CiAgbmV0bWFzazogMzA=
这是我的代码:
with open(blueprintPath + "ansible_" + str(ansible_id) + ".yaml") as f:
doc = yaml.safe_load(f)
for key,value in zip(param_keys,param_values):
decodedstring = base64.b64decode(value).decode('utf-8')
doc["start"]["inputs"]["run_data"][key] = decodedstring
with open(blueprintPath + "ansible_" + str(ansible_id) + ".yaml",'w') as f:
yaml.dump(doc, f)
这是我得到的:
start:
implementation: ansible.cloudify_ansible.tasks.run
inputs:
playbook_path: ansible/main-routers.yaml
run_data:
hostname: r1
ip_config: "- index: 1\n address: { get_input: host_ip_int_nic_r1_1\
\ }\n netmask: 30\n- index: 2\n address: { get_input: host_ip_int_nic_r1_2\
\ }\n netmask: 30"
我的愿望是得到这个:
start:
implementation: ansible.cloudify_ansible.tasks.run
inputs:
playbook_path: ansible/main-routers.yaml
run_data:
hostname: r1
ip_config:
- index: 1
address: { get_input: host_ip_int_nic_r1_1 }
netmask: 30
- index: 2
address: { get_input: host_ip_int_nic_r1_2 }
netmask: 30
其中“ip_config”是 param_keys 中键的示例。
【问题讨论】: