Eag*_*eak 35 centos ansible ansible-playbook
我有一个Ansible手册,用于将Java应用程序部署为init.d守护程序.
作为Ansible和Linux的初学者,我很难根据主机的状态有条件地在主机上执行任务.
也就是说,我有一些主机已经提供服务,并且在我做任何其他事情之前我想要停止它.然后可能会有新主机,但尚未提供服务.所以我不能简单地使用service: name={{service_name}} state=stopped
,因为这将在新主机上失败.
我怎么能做到这一点?这是我到目前为止所拥有的:
- name: Check if Service Exists
shell: "if chkconfig --list | grep -q my_service; then echo true; else echo false; fi;"
register: service_exists
# This should only execute on hosts where the service is present
- name: Stop Service
service: name={{service_name}} state=stopped
when: service_exists
register: service_stopped
# This too
- name: Remove Old App Folder
command: rm -rf {{app_target_folder}}
when: service_exists
# This should be executed on all hosts, but only after the service has stopped, if it was present
- name: Unpack App Archive
unarchive: src=../target/{{app_tar_name}} dest=/opt
Run Code Online (Sandbox Code Playgroud)
Eag*_*eak 34
当然我也可以检查/etc/init.d中是否存在包装脚本.所以这就是我最终的结果:
- name: Check if Service Exists
stat: path=/etc/init.d/{{service_name}}
register: service_status
- name: Stop Service
service: name={{service_name}} state=stopped
when: service_status.stat.exists
register: service_stopped
Run Code Online (Sandbox Code Playgroud)
Aid*_*man 21
请参阅service_facts
Ansible 2.5中的新模块.
- name: Populate service facts
service_facts:
- debug:
msg: Docker installed!
when: "'docker' in services"
Run Code Online (Sandbox Code Playgroud)
如果"服务"模块可以处理"无法识别的服务"错误,那将是很好的.
这是我的方法,使用service
命令而不是检查init脚本:
- name: check for apache
shell: "service apache2 status"
register: _svc_apache
failed_when: >
_svc_apache.rc != 0 and ("unrecognized service" not in _svc_apache.stderr)
- name: disable apache
service: name=apache2 state=stopped enabled=no
when: "_svc_apache.rc == 0"
Run Code Online (Sandbox Code Playgroud)
我修改了Florian的答案,使其仅使用service
命令的返回码(这在Mint 18.2上有效)
- name: Check if Logstash service exist
shell: service logstash status
register: logstash_status
failed_when: not(logstash_status.rc == 3 or logstash_status.rc == 0)
- name: Check if Logstash service exist
service:
name: logstash
state: stopped
when: logstash_status.rc == 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45161 次 |
最近记录: |