Ansible 如何将具有键值对的字符串转换为字典列表?

Ansible 如何将具有键值对的字符串转换为字典列表?,ansible,Ansible,我正在尝试将我的剧本移植到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

我正在尝试将我的剧本移植到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。

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

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

如果管道中的
select
设计用于去除任何空行(因为这些行不会为真)

假设textarea的内容位于名为
textarea
的变量中,则可以利用yaml非常自由的事实:

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

管道中的
select
设计用于去除任何空行(因为这些行不是真的)

这有效!我用单引号代替了双引号这很有效!我用单引号代替了双引号