如何在 Ansible json_query 中使用变量?

bsw*_*swe 8 ansible json-query

我想在 json 查询过滤器中使用 ansible 变量。这是我的代码:

剧本执行:

ansible-playbook debug.yml -e "project_environment=live"
Run Code Online (Sandbox Code Playgroud)
ansible-playbook debug.yml -e "project_environment=live"
Run Code Online (Sandbox Code Playgroud)

这是我的字典:

- debug:
    msg: "{{ project_environment }}"

- debug:
    msg: "{{ check_objects | json_query('`{{project_environment}}`.current') }}"
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

TASK [debug : debug] 
ok: [sample-hostname] => {
    "msg": "live"
}

TASK [debug  : debug]
ok: [sample-hostname] => {
    "msg": ""
}
Run Code Online (Sandbox Code Playgroud)

当我使用预期值替换变量时,输出工作正常:

check_objects:
  live:
    current:
    - example.com
    next:
    - next.example.com
Run Code Online (Sandbox Code Playgroud)
TASK [typo3-deployment/check : debug] 
ok: [sample-hostname] => {
    "msg": [
        "example.com"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我认为它在插入变量时遇到了麻烦。

我已经尝试过这个解决方案,但它也不起作用:Ansible:在 json_query 过滤器中传递一个变量

Vla*_*tka 5

下面的 json_query 任务

  vars:
    project_environment: live
  tasks:
    - debug:
        msg: "{{ check_objects|
                 dict2items|
                 json_query(query)|
                 flatten }}"
      vars:
        query: "[?key=='{{ project_environment }}'].value.current"
Run Code Online (Sandbox Code Playgroud)

给出

"msg": [
    "example.com"
]
Run Code Online (Sandbox Code Playgroud)

通过任务也可以获得相同的结果

- debug:
    var: check_objects[project_environment].current
Run Code Online (Sandbox Code Playgroud)