无需额外步骤即可注册Ansible变量

时间:2019-02-19 15:56:05

标签: ansible

有人知道是否有一种无需添加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。请告诉我那里。

先谢谢了。

1 个答案:

答案 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'] }}"