ansible-playbook(一)

一、playbook中使用handlers和notify

  Handlers本质是task list,类似MYSQL中的触发器触发的行为,主要用于当关注的资源发生变化的时候,才会采取一定的操作。而notify对应的action对应的action可用于每个play的最后被触发,这样可以多次有改变发生时,每次都执行指定的操作,仅在所有的变化完成后,一次性的执行指定的操作。在notify中列出的操作称作hander,也即notify中调用handler中定义的操作。

---
- hosts: webs
  remote_user: root
  gather_facts: no

  tasks:
    - name: copy docker_packages
      copy: src=docker_packages dest=/tmp
    - name: install docker
      shell: rpm -ivh /tmp/docker_packages/*.rpm --nodeps --force
    - name: copy daemon.json
      copy: src=daemon.json dest=/etc/docker/daemon.json
      tags: conf
      notify: 
          - restart docker
    - name: start docker
      service: name=docker state=started enabled=yes


  handlers:
    - name: restart docker
      service: name=docker state=restarted

二、playbook中的tags组件

  使用tags组件,指定为标签,在执行playbook时,可以选择特定的tags的task执行。

   ansible-playbook --list-tags install_docker.yml

   ansible-playbook -t conf install_docker.yml

三、playbook中的变量使用

  变量名:仅能由字符、数字和下划线组成,且只能由字母开头

  variable=value

  变量调用方式:通过{{ variable_name }}调用变量,且变量名前后建议加空格,有时候需加“{{ variable_name }}”才生效 

  • 使用setup模块中的变量

  例:var1.yml,因为此变量需要搜集主机的信息,所以只能在playbook中实现

---
   - hosts: webs
     remote_user: root

     tasks: 
     - name: use_variable 
       file: path=/tmp/{{ ansible_hostname }}.log state=touch
  •  在playbook命令中定义变量

  例:var2.yml

---
   - hosts: webs
     remote_user: root

     tasks:
     - name: install pkg
       yum: name={{ pkgname }} state=present
     - name: start service
       service: name={{ pkgname }} state=started

  ansible-playbook var2.yml -e ‘pkgname=httpd‘

  •  在playbook文件中使用变量

  例:var3.yml

---
   - hosts: webs
     remote_user: root
     vars: 
         - username: user1
         - groupname: group1
     tasks: 
         - name: create group
           group: name={{ groupname }} state=present
         - name: create user
           user: name={{ username }} state=present
  •  使用变量文件

  例:vars.yml和install_app.yml

---
#variables file
package_name: vsftpd
service_name: vsftpd
---
#install app and configure
- hosts: webs
  remote_user: root
  vars_files: 
     - vars.yml
  
  tasks: 
     - name: install package
       yum: name={{ package_name }} state=installed
       tags: install
     - name: start service
       service: name={{ service_name }} state=started enabled=yes

  ansible-playbook install_app.yml

  •    主机清单文件中定义变量

  修改主机清单/etc/ansible/hosts  

[webs]
192.168.100.100 hostname=master
192.168.100.110 hostname=node1
192.168.100.130 hostname=node2
[webs:vars]
domain=zhangsan

   ansible webs -m file -a ‘path=/tmp/{{ hostname }}.{{ domain }}.txt state=touch‘

  注意每个主机各自定义的变量优先级要高于分组变量,当主机变量与分组变量相同时,取主机变量

 

ansible-playbook(一)

上一篇:系统实施与评价


下一篇:[AaronYang]C#人爱知不知[1]