当 运行 一个 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\"]"
    ]
}