我们有几个供应商提供的软件包,这些软件包使用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}