尝试使用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 オレオレベストプラクティス
广告
将在 10 秒后关闭
bannerAds