在 Ansible Tower textare 调查中使用字典变量列表

Use list of dictionaries variable on Ansible Tower textare survey

如果我有以下变量,我正在尝试开发剧本。

disk_vars:
 - { Unit: C, Size: 50 }
 - { Unit: D, Size: 50 }

使用 playbook 上定义的变量没有问题,但是当我尝试在 Ansible Tower 上使用 texarea 调查时,我无法将它们解析为字典列表。

我尝试将以下两行添加到调查中,它们已经采用 yaml 格式。

 - { Unit: C, Size: 50 }
 - { Unit: D, Size: 50 }

在我的 vars 部分,我使用 test_var: "{{ test_var1.split('\n') }} 将输出转换为两行字符串。没有拆分只是一个单行字符串。

我可以让我的剧本与像

这样的简单字典一起工作
dict1: {{ Unit: C, Size: 50 }} 

但我在解析它时也遇到了问题。

编辑

根据 mdaniels 的建议将其更改为以下内容。

- set_fact:
   test_var: "{{ test_var1 | from_yaml }}"
- name: test
 debug: msg=" hostname is {{ item.Unit }} and {{ item.Size }}"
 with_items:
  - "{{ test_var }}"   

我正在想办法清除数据输入,因为要求用户遵守格式并不是一个好主意。

尝试将输入日期更改为以下内容,但我不知道如何将其格式化为字典列表。

disk_vars:
 Unit: C, Size: 50
 Unit: D, Size: 50

我尝试了以下代码

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

但是是将所有内容都放在一行中。

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

我试过玩它,但没能成功。

我相信你们非常亲密;而不是 "{{ test_var1.split('\n') }}" 我相信你可以把它喂给 from_yaml filter:

- set_fact:
     test_var1: '{{ test_var1 | from_yaml }}'
  # this is just to simulate the **str** that you will receive from the textarea
  vars:
     test_var1: "- { Unit: C, Size: 50 }\n- { Unit: D, Size: 50 }\n"
- debug:
     msg: and now test_var1[0].Unit is {{ test_var1[0].Unit }}

我遇到了类似的困境,即我被可用的调查格式所束缚,我被迫使用 mdaniels 上面建议的解决方案,将数据作为文本发送,然后从 YAML 解析它。然而,问题是控制输入的格式(即文本中的 YAML 字符串)可能会导致很多 headache/errors,就像您描述的那样。
也许您真的需要使用调查,但就我而言,我更感兴趣的是使用 Tower REST API 调用作业模板。出于某种原因,我认为我必须进行一项定义了所有参数的调查。但事实证明我错了,在进行调查时我无法提供字典作为输入数据(在 extra_vars 中)。然而,当删除调查,并且(不确定是否需要)启用 "Extra Variables -> prompt on launch" 时,事情开始起作用了!!现在我可以在使用 REST API POST 调用时提供列表/字典作为我的模板的输入,请参见下面的示例:

{
    "extra_vars": {
        "p_db_name": "MYSUPERDB",
        "p_appl_id": "MYD32",
        "p_admin_user": "myadmin",
        "p_admin_pass": "mysuperpwd",
        "p_db_state": "present",
        "p_tablespaces": [
        { 
            "name": "tomahawk",
            "size": "10M",
            "bigfile": true,
            "autoextend": true,
            "next": "1M",
            "maxsize": "20M",
            "content": "permanent",
            "state": "present"
        }
        ],
        "p_users": [
        {                        
            "schema": "myschema",
            "password": "Mypass123456#",
            "default_tablespace": "tomahawk",
            "state": "present",
            "grants": "'create session', 'create any table'"
        }
        ]
    }
}