尝试使用Ansible,在一个playbook中同时启动/停止多个服务器上的服务(包括tomcat和postgresql)
因为很少见到这种例子。
准备一个主机文件的清单。
[tomcat]
198.168.2.11:122
198.168.2.21:222
198.168.2.41:422 ansible_ssh_user=root ansible_ssh_pass=R00TP455W0RD
198.168.2.51:522 ansible_ssh_user=root ansible_ssh_pass=R00TP455W0RD
198.168.2.71:722
198.168.2.81:822
[postgresql]
198.168.2.31:322
198.168.2.61:622
198.168.2.91:922
[all:vars]
ansible_ssh_user=user
ansible_ssh_pass=P455W0RD
ansible_sudo_pass=P455W0RD
当SSH端口已经更改时,使用ip:port。
当使用与其他实例不同的用户/密码时,分别指定ansible_ssh_user和ansible_ssh_pass。
当需要sudo时,也写入ansible_sudo_pass。
此次使用的tomcat组和postgresql组都使用相同的用户进入,所以可以使用all:vars来指定相关设置。
参考资料:
- http://docs.ansible.com/intro_inventory.html
准备一份Playbook。
- hosts: tomcat
tasks:
- name: start tomcat
service: name=tomcat state=started
sudo: yes
- hosts: tomcat
tasks:
- name: stop tomcat
service: name=tomcat state=stopped
sudo: yes
如果使用service,那就很简单了。sudo: yes这样设置,然后就能使用ansible_sudo_pass来以sudo身份启动tomcat服务。重要的是hosts和service部分。在hosts中指定清单组,在service中指定已注册的服务名称name和状态state。服务名称根据自己的环境进行调整,比如tomcat8或者postgresql-9.4等等。
请参考以下内容:
-
- http://docs.ansible.com/service_module.html
- http://docs.ansible.com/playbooks_intro.html
敲打时
$ ansible-playbook tomcat-start.yml -i env1.hosts
$ ansible-playbook tomcat-stop.yml -i env1.hosts
即使在PostgreSQL中,方法也是相同的。
- hosts: postgresql
tasks:
- name: start postgresql
service: name=postgresql state=started
sudo: yes
- hosts: postgresql
tasks:
- name: stop postgresql
service: name=postgresql state=stopped
sudo: yes
$ ansible-playbook postgresql-start.yml -i env1.hosts
$ ansible-playbook postgresql-stop.yml -i env1.hosts
要让不太了解的人暂时使用的话,不如用一个例子来解释冪等性!冪等性!这样更容易让他们理解。
在使用另一个环境的时候,请准备另一个清单文件。
请参考以下内容:
-
- Ansibleのインベントリファイルでステージを切り替える
- Ansible オレオレベストプラクティス