如何将 yaml 字符串插入到 yaml 值中,就好像它是 yaml

     2023-02-26     178

关键词:

【中文标题】如何将 yaml 字符串插入到 yaml 值中,就好像它是 yaml【英文标题】:How to insert a yaml string into a yaml value as if it is yaml 【发布时间】: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 中键的示例。

【问题讨论】:

【参考方案1】:

您在输出中得到一个字符串,因为您将值作为单个字符串放在那里。您要做的是将值解析为 YAML 并将结果值放在那里:

    doc["start"]["inputs"]["run_data"][key] = yaml.safe_load(decodedstring)

【讨论】:

很想你!这太简单了,也许我需要多睡觉! :D

将多行字符串添加到 Yaml-cpp 节点

】将多行字符串添加到Yaml-cpp节点【英文标题】:AddingmultilinestringtoaYaml-cppnode【发布时间】:2014-03-0617:16:18【问题描述】:如何使用节点将多行字符串作为值添加到键?我不想使用发射器。我想要下面的代码苹果手机:废话...废... 查看详情

如何将 YAML 文件解析/读取到 Python 对象中?

】如何将YAML文件解析/读取到Python对象中?【英文标题】:Howtoparse/readaYAMLfileintoaPythonobject?【发布时间】:2011-10-1513:07:48【问题描述】:例如,这个YAML:Person:name:XYZ到这个Python类:classPerson(yaml.YAMLObject):yaml_tag=\'Person\'def__init__(sel... 查看详情

如何将值保存到 YAML 文件中? [复制]

】如何将值保存到YAML文件中?[复制]【英文标题】:HowdoyousavevaluesintoaYAMLfile?[duplicate]【发布时间】:2013-01-1001:48:19【问题描述】:在我的persist.yml文件中。我有以下键值对...session=0如何更新YAML文件:session=2【问题讨论】:加载... 查看详情

如何将带有前导零的数字字符串转储为 yaml-cpp 中的有效 yaml 字符串?

】如何将带有前导零的数字字符串转储为yaml-cpp中的有效yaml字符串?【英文标题】:Howtodumpadigitstringwithleadingzeros,asavalidyamlstringinyaml-cpp?【发布时间】:2019-02-2205:28:28【问题描述】:创建带有前导零的yaml字符串不会在yaml-cpp中使... 查看详情

如何将数据附加到 YAML 文件

】如何将数据附加到YAML文件【英文标题】:HowtoappenddatatoYAMLfile【发布时间】:2018-07-1615:45:02【问题描述】:我有一个文件*.yaml,内容如下:bugs_tree:bug_1:html_arch:filepathmoved_by:user1moved_date:\'2018-01-30\'sfx_id:\'1\'我想在节点[bugs_tree]下... 查看详情

如何将我的 app.yaml 迁移到 2.7?

】如何将我的app.yaml迁移到2.7?【英文标题】:Howtomigratemyapp.yamlto2.7?【发布时间】:2011-12-1806:07:22【问题描述】:我正在将我的gae应用程序迁移到python2.7。这是我的新app.yaml:application:webfazeversion:mainruntime:python27api_version:1threadsafe... 查看详情

如何将 groovy 表示转储到 YAML 并避免使用未标记的节点?

】如何将groovy表示转储到YAML并避免使用未标记的节点?【英文标题】:HowdoIdumpagroovyrepresentationtoYAMLandavoidhavinguntaggednodes?【发布时间】:2012-05-1020:59:50【问题描述】:我想将以下结构转储到YAML文件中:publicclassTestSuiteStringnameListt... 查看详情

如何将yaml添加到php服务器docker安装

】如何将yaml添加到php服务器docker安装【英文标题】:Howtoaddyamltophpserverdockerinstallation【发布时间】:2020-03-2610:33:39【问题描述】:我在我的phpdockerconfiguraiton上安装yaml支持时遇到问题。这是我的dockerbuild文件:FROMphp:7.2.2-apacheRUNdoc... 查看详情

Jekyll/Liquid - 如何将大块文本添加到 YAML 前端?

】Jekyll/Liquid-如何将大块文本添加到YAML前端?【英文标题】:Jekyll/Liquid-howtoaddlargeblocksoftexttoYAMLfrontmatter?【发布时间】:2011-10-0718:37:58【问题描述】:我正在尝试在Jekyll中实现一个服务目录,其中20或30个页面中的每一个都将包... 查看详情

如何:在 Azure DevOps YAML 中有条件地插入模板?

】如何:在AzureDevOpsYAML中有条件地插入模板?【英文标题】:Howto:InsertatemplateconditionallyinAzureDevOpsYAML?【发布时间】:2020-02-2303:46:43【问题描述】:这是我尝试有条件地插入模板的方法。根据要求,我想根据运行时提供的管道变... 查看详情

如何使用 Java 库将标记的 YAML 对象转换为 JSON 对象?

...中每个JavaMap包含来自相应YAML映射的所有条目,以及键为字符串“objectType”的条目”并且值 查看详情

将数组转换为yaml,将yaml加载到数组中

https://www.chrisjmendez.com/2007/10/21/converting-an-array-into-yaml-loading-yaml-into-an-array/https://www.chrisjmendez.com/2007/10/21/converting-an-array-into-yaml-loading-yaml-into-an-array/ 查看详情

如何将自定义属性添加到 Symfony Doctrine YAML 映射文件

】如何将自定义属性添加到SymfonyDoctrineYAML映射文件【英文标题】:HowtoaddcustompropertytoSymfonyDoctrineYAMLmappingfile【发布时间】:2016-06-2721:09:21【问题描述】:谁能告诉我如何将自定义属性添加到学说ORMyml文件中?我的想法是添加这... 查看详情

使用 YAML-CPP 将 YAML 值添加到标准映射

】使用YAML-CPP将YAML值添加到标准映射【英文标题】:AddYAMLvaluestostdmapusingYAML-CPP【发布时间】:2018-11-0722:07:47【问题描述】:我有一个yaml文件,其中包含嵌套地图:SOLAR-SYSTEM:my/planet:earth:bluemy/satellite:moon:white我正在使用yaml-cpp来解... 查看详情

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

】如何将yaml文件解析为ruby​​哈希和/或数组?【英文标题】:Howtoparseayamlfileintorubyhashsand/orarrays?【发布时间】:2011-03-2917:47:13【问题描述】:我需要将yaml文件加载到哈希中,我该怎么办?【问题讨论】:请更新您选择的答案... 查看详情

如何将 YAML 数据放入字典并打印某些值?蟒蛇[重复]

】如何将YAML数据放入字典并打印某些值?蟒蛇[重复]【英文标题】:HowtogetYAMLdataintodictionaryandprintcertainvalues?PYTHON[duplicate]【发布时间】:2019-08-2020:27:36【问题描述】:我正在尝试从Yaml文档中获取数据并将其放入字典中,然后达... 查看详情

python之ruamel.yaml模块详解(代码片段)

...个转储,生成一个包含三个文档的流11将YAML输出作为字符串接上文:Python之ruamel.yaml模块详解(一);以下为官网的几个案例:4将YAML解析为Python对象并修改importsysfromruamel.yamlimportYAMLinp="""\\#examp... 查看详情

如何转义 YAML 字符串中的冒号和其他特殊字符?

】如何转义YAML字符串中的冒号和其他特殊字符?【英文标题】:HowtoescapecolonsandotherspecialcharactersinaYAMLstring?【发布时间】:2016-01-0415:25:45【问题描述】:我有以下YAML片段:description:|"APIforbeanconsumingapplications.Examples:paintedpony,limabea... 查看详情