【发布时间】:2020-06-10 21:12:51
【问题描述】:
我是 ansible 的新手,但我正在努力进步和学习。
我正在运行一些 API 调用来配置网络代理工具。
流程本质上是,发出一个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') }}"
非常感谢您的帮助。
【问题讨论】:
-
感谢您抽出宝贵的时间回来,我对此进行了测试,但最后,我了解到使用 with_items 可以得到更好的结果并且更可重复。
标签: ansible ansible-facts