有没有更好的方法从角色 Ansible 调用一项特定任务?

发布于 2025-01-12 05:10:50 字数 1405 浏览 3 评论 0原文

尝试安装一些自定义软件包,其先决条件是停止某些服务并稍后启动它们。因此创建了一个具有两个任务停止/启动服务的角色。

[ansibleadm@node1 ~]$ cat mypackageConfig.yaml
---
- name: custom package installation
  hosts: remote
  become: yes
  roles:
   - role: manageServices
     serviceStop:
         - osquery
   - role: editFile
     updateStatement:
       - fileName: "/etc/audisp/plugins.d/syslog.conf"
         searchWord: "active"
         replaceWord: "active = yes"
   - role: manageServices
     serviceStart
         - auditd
[ansibleadm@node1 ~]$ cat roles/manageServices/tasks/main.yml
---
# tasks file for manageServices
- name: start service
  systemd:
    name: '{{ item }}'
    enabled: yes
    state: started
  loop: '{{ myStartService }}'

- name: stop service
  systemd:
    name: '{{ item }}'
    state: stopped
  loop: '{{ myStopService }}'

在执行角色时,它会显示“未定义”,因为未调用任务之一。

[ansibleadm@node1 ~]$
----------------------While executing playbook------------

TASK [manageServices: start service] **************************************************************************************
fatal: [10.20.20.12]: FAILED! => {"msg": "'manageServices' is undefined"}

是否有更好的方法从角色调用特定任务,或者在这种情况下我们需要为启动/停止服务创建不同的角色?

Trying to install some custom packages for which prereq is to stop some service and start them later part. So created a role with two tasks stop/start service.

[ansibleadm@node1 ~]$ cat mypackageConfig.yaml
---
- name: custom package installation
  hosts: remote
  become: yes
  roles:
   - role: manageServices
     serviceStop:
         - osquery
   - role: editFile
     updateStatement:
       - fileName: "/etc/audisp/plugins.d/syslog.conf"
         searchWord: "active"
         replaceWord: "active = yes"
   - role: manageServices
     serviceStart
         - auditd
[ansibleadm@node1 ~]$ cat roles/manageServices/tasks/main.yml
---
# tasks file for manageServices
- name: start service
  systemd:
    name: '{{ item }}'
    enabled: yes
    state: started
  loop: '{{ myStartService }}'

- name: stop service
  systemd:
    name: '{{ item }}'
    state: stopped
  loop: '{{ myStopService }}'

While executing the role it states "undefined" as one of the task isn't called.

[ansibleadm@node1 ~]$
----------------------While executing playbook------------

TASK [manageServices: start service] **************************************************************************************
fatal: [10.20.20.12]: FAILED! => {"msg": "'manageServices' is undefined"}

Are there any better way of calling particular tasks from role or we need to create different roles for start/stop services in this situation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

長街聽風 2025-01-19 05:10:50

在剧本中,您可以指定前置任务和后置任务。

https://www.redhat.com/sysadmin/ansible-pretasks-posttasks

不要编写整个角色来停止或启动服务,而是在 pre 中指定停止任务,在 post 中指定启动任务。

In a playbook you can specify pre and post tasks.

https://www.redhat.com/sysadmin/ansible-pretasks-posttasks

Rather than writing a whole role just to stop or start a service, specify the stop stask in pre, and the start task in post.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文