首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ansible_facts.services中访问状态?

如何在ansible_facts.services中访问状态?
EN

Stack Overflow用户
提问于 2020-11-27 01:47:01
回答 1查看 1.5K关注 0票数 0

如果远程主机上正在运行和/或启用systemd服务,我正在尝试停止和/或禁用该服务。

tasks/main.yml的内容:

代码语言:javascript
复制
---
- name: Populate service facts
  service_facts:

- name: Display selected service
  debug:
    var: ansible_facts.services[serviceToDisplay]
  loop: "{{ disable_services }}"
  loop_control:
    loop_var: serviceToDisplay
  vars:
    disable_services:
      - cups.service
      - cups

- name: Stop and Disable service if it is running or enabled
  systemd:
    name: cups.service
    enabled: false
    state: stopped
  when:
    - "serviceToDisable is defined"
    - "serviceToDisable.status == 'enabled'"
  loop: "{{ disable_services }}"
  loop_control:
    loop_var: serviceToDisable
  vars:
    disable_services:
      - cups.service
      - cups
  become: true
...

结果:

代码语言:javascript
复制
PLAY [configServerGroup] *************************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************************************
ok: [radicale.jlhimpel.net]

TASK [example : Populate service facts] **********************************************************************************************************************
ok: [radicale.jlhimpel.net]

TASK [example : Display selected service] ********************************************************************************************************************
ok: [radicale.jlhimpel.net] => (item=cups.service) => {
    "ansible_facts.services[serviceToDisplay]": {
        "name": "cups.service",
        "source": "systemd",
        "state": "running",
        "status": "enabled"
    },
    "ansible_loop_var": "serviceToDisplay",
    "serviceToDisplay": "cups.service"
}
ok: [radicale.jlhimpel.net] => (item=cups) => {
    "ansible_facts.services[serviceToDisplay]": {
        "name": "cups",
        "source": "sysv",
        "state": "running"
    },
    "ansible_loop_var": "serviceToDisplay",
    "serviceToDisplay": "cups"
}

TASK [example : Stop and Disable service if it is running or enabled] ****************************************************************************************
fatal: [radicale.jlhimpel.net]: FAILED! => {"msg": "The conditional check 'serviceToDisable.status == 'enabled'' failed. The error was: error while evaluating conditional (serviceToDisable.status == 'enabled'): 'str object' has no attribute 'status'\n\nThe error appears to be in '/home/jwhimpel/ansible/roles/example/tasks/main.yml': line 16, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Stop and Disable service if it is running or enabled\n  ^ here\n"}

PLAY RECAP ***************************************************************************************************************************************************
radicale.jlhimpel.net      : ok=3    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0  

可选版本: 2.9.14-1.fc32 on Fedora

我应该如何开始检查状态==是否已启用或状态==是否正在运行?

注意:该服务可能不存在于ansible_facts.service中。它也可以选择性地未运行和/或未启用。我正在尝试使任务幂等。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 02:09:04

您的第二个任务应该如下所示,请注意name子句和when部分:

代码语言:javascript
复制
  - name: Stop and Disable service if it is running or enabled
    systemd:
      name: "{{ ansible_facts.services[serviceToDisable]['name'] }}"
      enabled: false
      state: stopped
    when:
      - serviceToDisable is defined
      - ansible_facts.services[serviceToDisable]['status'] == 'enabled'
    loop: "{{ disable_services }}"
    loop_control:
      loop_var: serviceToDisable
    vars:
      disable_services:
        - cups.service
        - cups
    become: true

我不确定为什么要定义两次相同的服务(cups.servicecups),但我想您有充分的理由。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65026996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档