У нас есть несколько программных пакетов, предоставленных вендором, которые запускаются с использованием скриптов init.d на платформах RHEL 7.X. Поскольку сценарии 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}