Ansible高级语法应用

Ansible高级语法应用

    • error错误处理
    • handlers 触发任务
    • when条件判断
        • 1.内存不足关闭服务
        • 2.判断系统创建文件
        • 3.只给node1安装软件包
    • block任务块
    • loop循环
        • **创建目录**
        • **使用循环创建密码**
        • 装包
    • for循环
        • 模板嵌套for循环
        • 模板嵌套for循环2

error错误处理

默认ansible在遇到error会立刻停止playbook,使用ignore_errors可以忽略错误,继续后续的任务。

[root@control ansible]# cat test01.yml #忽略单个任务

---
- hosts: node1
  tasks: 
    - ignore_errors: yes   #这个任务失败自动忽略,不影响下个任务的执行
      service: 
        name: hehe         #不存在的服务
        state: started
    - file: 
        path: /tmp/123.txt
        state: touch

[root@control ansible]# cat test01.yml #忽略所有任务

---
- hosts: node1
  ignore_errors: yes           #放在这里忽略所有任务的错误
  tasks: 
    - service: 
        name: hehe
        state: started
    - service :
        name: xixi
        state: started
    - file: 
        path: /tmp/123.txt
        state: touch

handlers 触发任务

在剧本中tasks用来定义任务(一定会执行),handlers也可以定义任务(不一定执行),handlers任务要想执行必须要被别人触发才能执行。

可以通过handlers定义一组任务,仅当某个任务触发(notify)handlers时才执行相应的任务,如果有多个notify触发执行handlers任务,也仅执行一次。

仅当任务的执行状态为changed时handlers任务才执行,handlers任务在所有其他任务都执行后才执行。

[root@control ansible]# cat handlers.yml

---
- hosts: node1
  tasks: 
    - file:                       #调用file模块创建目录
        path: /beijing/tiantan    #需要创建的具体目录名称
        state: directory          #state等于directory代表创建目录
      notify: touch file          #notify后面名称必须和handlers中的任务名称一致  
  handlers:                       #通过handlers再定义一组任务
    - name: touch file            #给任务写描述信息(任务的名字,名字可以任意)
      file:                       #调用file模块创建文件
        path: /beijing/tiantan/nsd2008.txt   #需要创建的文件名
        state: touch                         #state等于touch代表创建文
#备注:仅当file模块执行成功,
#并且状态为changed时才会通过notify触发执行handlers下面的任务,
#所以多次执行该剧本时,handlers任务不会被重复执行,
#notity后面的名称必须和handlers下面name定义的任务名称一致(名称可以任意)

when条件判断

when可以定义判断条件,条件为真时才执行某个任务。

常见条件操作符有:==、!=、>、>=、<、<=。

多个条件可以使用and(并且)或or(或者)分割,when表达式中调用变量不要使用{ { }}。

1.内存不足关闭服务
[root@control ansible]

你可能感兴趣的:(ansible,ansible)