Ansible:停止和禁用服务(如果存在)

Ansible: Stop and Disable services if they are present

我正在尝试停止和禁用已安装的服务列表。我正在调用 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\") 列出

有没有其他方法可以停止和禁用已安装的服务列表。

错误消息准确描述了您的问题:stop_services 是一个列表,services 是一个字典。你不能把两者压在一起。您将需要构建一个服务名称列表并比较您的服务列表以停止该列表。

例如:

- 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 }}"