Как изменить ansible_facts с помощью переменной? - PullRequest
0 голосов
/ 15 октября 2019

У нас есть несколько программных пакетов, предоставленных вендором, которые запускаются с использованием скриптов 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...