使用作业标识符将可划分的任务分组为逻辑任务组

问题描述 投票:1回答:1

我是不熟悉ansible的新人,但是正在尝试进步和学习。

我正在运行许多API调用来配置Web代理工具。

该流程本质上是发出GET请求以查看对象是否存在,如果不存在,则继续执行POST请求以创建对象。非常标准。

此过程会重复多次,因为产品可以具有许多相同类型的配置实例。因此,我想通过关联一个ID使GET / POST例程尽可能通用。

剧本是:

    set_fact:
      'vh_task_id': 01

  - name: check virtual host exists
    uri:
      method: GET
      url: "{{ admin_api_url }}/hosts?vHost={{ public_virtual_host|urlencode() }}"
      return_content: yes
      headers:
        X-XSRF-Header: "Access"
      user: "{{ admin_user }}"
      password: "{{ admin_password }}"
      status_code: 200
      validate_certs: no
    register: response

  - name: set fact virtual host task id response '{{ public_virtual_host }}'
    set_fact:
      'response_{{ vh_task_id }}': "{{ response }}"

到目前为止,一切正常,并且response_{{ vh_task_id }}正确包含上述set_fact的响应正文,如果我将其输出,则可以看到。

现在,当我想查询response_{{ vh_task_id }}中的JSON作为要获取ID值的查询变量时,问题就变得了。

set_fact,正在将文字值设置为response_01,而不是将串联视为已注册变量。

以下是我尝试执行此操作的示例:

set_fact:
'vh_id': "{{ hostvars[inventory_hostname].response_{{ vh_task_id }} | json_query('json.items[0].id') }}"

非常感谢您的帮助。

ansible ansible-facts
1个回答
0
投票

尝试一下:

set_fact:
  'vh_id': "{{ hostvars[inventory_hostname].hostvar | json_query('json.items[0].id') }}"
vars:
  hostvar: response_{{ vh_task_id }}

此外,对于纯字符串作为变量名,您不需要显式引号'。就像,如果没有其他原因将名称保留在引号中,则可以将'vh_id':更改为vh_id:

© www.soinside.com 2019 - 2024. All rights reserved.