有没有更好的方法从角色 Ansible 调用一项特定任务?
尝试安装一些自定义软件包,其先决条件是停止某些服务并稍后启动它们。因此创建了一个具有两个任务停止/启动服务的角色。
[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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在剧本中,您可以指定前置任务和后置任务。
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.