在 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'"
}
]
}
}
如果我有以下变量,我正在尝试开发剧本。
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'"
}
]
}
}