当 运行 一个 Ansible 命令时如何转换为有效的 JSON?
How to convert to valid JSON when running an Ansible command?
所以,我有这个列表:
ip_range:
- "1.x.x.x/24"
- "2.x.x.x/24"
我正在尝试将其作为有效的 JSON:
传递给 AWS cli 命令
- name: list of IPs
set_fact:
allowed_cidrs: "{{ ip_range | ipaddr('network/prefix') }}"
- debug:
msg: "{{ allowed_qualys_cidrs | to_json }}"
- name: send command
command: >
aws wafv2 update-ip-set
--addresses "{{ allowed_cidrs | to_json }}"
调试打印:
["1.x.x.x/24", "2.x.x.x/24"]
但是命令试图发送的是:
"cmd": [
"aws",
"wafv2",
"update-ip-set",
"--addresses",
"[1.x.x.x/24, 2.x.x.x/24]",
]
因为双引号不见了,所以不是有效的 JSON。
我已经用 Ansible 和 Jinja2 尝试了所有可能的方法,但我想不出一种方法来发送带有有效 JSON.
的命令
在命令中使用单引号而不是双引号:
- name: list of IPs
set_fact:
allowed_cidrs: "{{ ip_range | ipaddr('network/prefix') }}"
vars:
ip_range:
- "1.1.1.1/24"
- "2.2.2.2/24"
- name: send command
command: >-
aws wafv2 update-ip-set
--addresses '{{ allowed_cidrs | to_json }}'
register: _cmd
- debug:
var: _cmd.cmd
产量:
TASK [list of IPs] **********************************************************
ok: [localhost]
TASK [send command] *********************************************************
changed: [localhost]
TASK [debug] ****************************************************************
ok: [localhost] => {
"_cmd.cmd": [
"aws",
"wafv2",
"update-ip-set",
"--addresses",
"[\"1.1.1.0/24\", \"2.2.2.0/24\"]"
]
}
所以,我有这个列表:
ip_range:
- "1.x.x.x/24"
- "2.x.x.x/24"
我正在尝试将其作为有效的 JSON:
传递给 AWS cli 命令- name: list of IPs
set_fact:
allowed_cidrs: "{{ ip_range | ipaddr('network/prefix') }}"
- debug:
msg: "{{ allowed_qualys_cidrs | to_json }}"
- name: send command
command: >
aws wafv2 update-ip-set
--addresses "{{ allowed_cidrs | to_json }}"
调试打印:
["1.x.x.x/24", "2.x.x.x/24"]
但是命令试图发送的是:
"cmd": [
"aws",
"wafv2",
"update-ip-set",
"--addresses",
"[1.x.x.x/24, 2.x.x.x/24]",
]
因为双引号不见了,所以不是有效的 JSON。 我已经用 Ansible 和 Jinja2 尝试了所有可能的方法,但我想不出一种方法来发送带有有效 JSON.
的命令在命令中使用单引号而不是双引号:
- name: list of IPs
set_fact:
allowed_cidrs: "{{ ip_range | ipaddr('network/prefix') }}"
vars:
ip_range:
- "1.1.1.1/24"
- "2.2.2.2/24"
- name: send command
command: >-
aws wafv2 update-ip-set
--addresses '{{ allowed_cidrs | to_json }}'
register: _cmd
- debug:
var: _cmd.cmd
产量:
TASK [list of IPs] **********************************************************
ok: [localhost]
TASK [send command] *********************************************************
changed: [localhost]
TASK [debug] ****************************************************************
ok: [localhost] => {
"_cmd.cmd": [
"aws",
"wafv2",
"update-ip-set",
"--addresses",
"[\"1.1.1.0/24\", \"2.2.2.0/24\"]"
]
}