首页 > 解决方案 > 如何将带有键值对的字符串转换为字典列表?

问题描述

我正在尝试将我的剧本迁移到 ansible tower 环境中。在我的剧本中,我定义了 db_list 之类的变量:

db_list:
   - { dbid: 1, dbname: abc}
   - { dbid: 2, dbname: xyz}

在塔调查中,我可以将与 textarea 类似的信息放入调查中:

dbid: 1, dbname: abc
dbid: 2, dbname: xyz

如何将我的 textarea 数据转换为字典列表?我找不到任何合适的 jinj2 过滤器进行转换。

我的ansible版本是2.4。

标签: ansible

解决方案


假设 textarea 的内容在一个名为 的变量中textarea,您可以利用 yaml 非常自由的事实:

- set_fact:
    db_list: >-
      {{ textarea.split("\n") | select | 
         map("regex_replace", "^", "- {") | 
         map("regex_replace", "$", "}") | 
         join("\n") | from_yaml }}

管道中select的设计旨在剥离任何空行(因为这些行不会是 True-thy)


推荐阅读