Playbook的高级语法

  • Post author:
  • Post category:Ansible
  • Page Views 521 阅读

1.serial线性更新服务器

在更新线上服务器时正确的做法应该是循序渐进的方式进行更新,降低因更新问题对线上服务造成的影响。

Ansible提供的serial参数来实现线性更新。取值可以是一个数字,或者百分比。

#一次只更新一台
---
- hosts: dbservers
  serial: 1
#一次更新百分之二十
---
- hosts: dbservers
  serial: "20%"
#第一次更新一台,第二次更新2台,第三次更新5台
---
- hosts: dbservers
  serial: 1
  serial: 3
  serial: 5

2.delegate_to实现任务委派

在某些情况下,对服务器进行批量操作的过程中需要对某一台服务器进行特殊处理,此时可以使用ansible的任务委派功能。

---
- hosts: dbservers
  tasks:
    - name: install nginx
      yum: name=nginx state=present
      delegate_to: 192.168.1.2

3.local_action在控制服务器上执行操作

4.run_once使任务仅执行一次

5.通过tags控制Play的执行

---
- hosts: dbservers
  tasks:
    - name: install nginx
      yum: name=nginx state=present
      tags: nginx
   
     - name: test
       tags: test
#执行tag为nginx的任务
ansible-playbook test.yaml --tags "nginx"
#不执行tag为nginx的任务
ansible-playbook test.yaml --skip-tags "nginx"

6.使用changed_when控制对changed字段的定义

Ansible中 changed_when关键字的作用是在条件成立时,将对应任务的执行状态设置为changed。

7.使用failed_when控制对failed字段的定义

  - shell: "echo 'This is a string for testing error'"
    register: return_value
    failed_when: " 'error' in return_value.stdout"

failed_when对应的条件是 ” ‘error’ in return_value.stdout”,表示”error”字符串如果存在于shell模块执行后的标准输出中,则条件成立,当条件成立后,shell模块的执行状态将会被设置为失败,由于shell模块的执行状态被设置为失败,所以playbook会终止运行。


「 文章如果对你有帮助,请点个赞哦^^ 」 

1+