Ansible: остановка и отключение служб, если они присутствуют - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь остановить и отключить список служб, только если они установлены. Я вызываю модуль service_facts для создания списка запущенных служб и использую фильтр "union"

- name: Include variables for Amazon Linux.
  include_vars: ../vars/test.yml

- name: populate service facts
  service_facts:

- name: start the service if it's enabled
  service:
    name: "{{ item }}"
    enabled: no
    state: stopped
  loop: "{{ stop_services |union(services) }}"
  when: stop_services is defined

Я получаю сообщение об ошибке Произошла непредвиденная ошибка типа шаблона ({{stop_services | union (services)}}): можно только объединить список (не \ "dict \") в список "

. Есть ли другой способ остановить и отключить список служб, только если они установлены.

1 Ответ

1 голос
/ 02 мая 2020

Ваша проблема точно описана в сообщении об ошибке: stop_services - это список, а services - это словарь. Вы не можете просто сква sh два вместе. Вам нужно будет составить список имен сервисов и сравнить ваш список сервисов, чтобы остановиться на этом.

Например:

- hosts: localhost
  gather_facts: false
  vars:
    stop_services:
      - sshd.service
      - avahi-daemon.service
  tasks:
    - service_facts:

    - name: stop and disable a service
      service:
        name: "{{ item }}"
        state: stopped
        enabled: false
      when: "item in service_names"
      loop: "{{ stop_services }}"
      vars:
        service_names: "{{ services|dict2items|map(attribute='value.name')|list }}"
...