有人知道是否有一种无需添加set_facts任务即可将Ansible变量注册为目标的方法吗?
例如,如果我知道我的API调用将返回一大堆垃圾,而我只需要来自
的标签“ API.Response [0] .session_id”await Task.Delay(-1)
当前,我看到的唯一选择是注册所有输出,然后创建另一个任务到set_fact以进行正则表达式搜索,或者在XML的情况下创建两个以上的任务来xml解析,然后set_fact来注册xml解析的输出。
API: {
Response: [
{ session_id: "yolo" }
]
}
这似乎浪费资源(存储不必要的垃圾)和时间(添加任务)。
必须有一种方法可以直接从响应中将特定的对象属性注册到变量。那或者至少让我指定我自己的正则表达式进行注册。
tl; dr:如果将有针对性的响应注册表,则无需set_facts。请告诉我那里。
先谢谢了。
答案 0 :(得分:0)
这是Ansible的一个令人烦恼的烦恼:无法在register
级别上转换值。
但是您可以在这里使用jinja magic。 Jinja变量要等到它们使用的最后一刻才进行评估。这意味着您可以定义一个变量,该变量等于稍后将定义的变量。
---
- hosts: localhost
gather_facts: false
tasks:
- name: Get IP address from xmldata.
xml:
path: "data.xml"
content: "text"
xpath: "/entry/ip-address"
register: test_result
- debug: var=ip
vars:
ip: "{{ test_result['matches'][0]['ip-address'] }}"