如何在Ansible json_query中使用变量?

时间:2019-08-14 11:32:19

标签: ansible json-query

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

执行剧本:

ansible-playbook debug.yml -e "project_environment=live"
- debug:
    msg: "{{ project_environment }}"

- debug:
    msg: "{{ check_objects | json_query('`{{project_environment}}`.current') }}"

这是我的字典:

check_objects:
  live:
    current:
    - example.com
    next:
    - next.example.com

这就是我得到的:

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

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

当我使用期望值替换变量时,其输出运行正常:

- debug:
    msg: "{{ check_objects | json_query('live.current') }}"
TASK [typo3-deployment/check : debug] 
ok: [sbk-test-ntly01] => {
    "msg": [
        "example.com"
    ]
}

我认为插入变量时会遇到麻烦。

我已经尝试过此解决方案,但它也无法正常工作:Ansible : pass a variable in a json_query filter

2 个答案:

答案 0 :(得分:1)

下面带有json_query的任务

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

给予

"msg": [
    "example.com"
]

通过任务也可以达到相同的结果

- debug:
    var: check_objects[project_environment].current

答案 1 :(得分:0)

对于两个变量,这对我来说很好。

- debug:
    msg: "{{ check_objects | json_query(query) }}"
  vars:
    query: "{{ project_environment }}.{{ project_status}}"