如何使用变量修改ansible_facts?

时间:2019-10-14 21:20:16

标签: ansible-facts

我们有几个供应商提供的软件包,这些软件包使用RHEL 7.X平台上的init.d脚本启动。由于init.d脚本不提供状态,因此当ansible脚本实际运行时,它们会返回“已停止”状态。我正在尝试手动修改该事实。如何在名称中使用变量?

为相关服务定义了变量Target_Service。 以下调试语句显示“已停止”

- debug:
    var: ansible_facts.services.{{ Target_Service }}.state

我尝试使用set_fact来更改此设置,但我不知道如何使用变量。如果将服务名称放入代码中,但需要使用变量,则可以使用此方法:

使用实际的服务名称,它可以工作:

- set_fact:
    ansible_facts:
      services:
        MyService:
          name: "{{ ansible_facts.services.MyService.name }}"
          source: "{{ ansible_facts.services.MyService.source }}"
          state: "running"
          status: "{{ ansible_facts.services.MyService.status }}"

理想情况下,它可以将服务的实际名称与变量交换,但我无法进行以下修改:

- set_fact:
    ansible_facts:
      services:
        '{{ Target_Service }}':
          name: ansible_facts.services.{{ Target_Service }}.name
          source: ansible_facts.services.{{ Target_Service }}.source
          state: "running"
          status: ansible_facts.services.{{ Target_Service }}.status

问题1:   第一个“ {{Target_Service}}”未被识别为有效的服务名称。如果将其替换为服务的实际名称,仍然会遇到问题2。

问题2:   传递给名称,来源和状态的值不进行评估,而是使用字符串填充:

ansible_facts.services.MyService.{name|source|status}

0 个答案:

没有答案