一、结构控制

        循环(loop):该关键字会使所在的task循环,该task中的item变量在每次循环都会迭代loop中的每个值或变量。
例:

name: 打印列表
    debug:
    msg: "当前输出是 {{ item }}"
    loop:
        - data1
        - data2
        - data3
输出:
当前输出是data1
当前输出是data2
当前输出是data3

        条件(when):该关键字使得task仅在when内条件成立时才执行。
例:

name: 仅打印列表中的偶数
debug:
msg: "{{ item }} 是偶数"
loop: [1, 2, 3, 4, 5]
when: item % 2 == 0

        当一个task中同时有loop和when时,when会检查每一个循环,决定该循环是否执行。

二、处理程序(handler)

        是一种特殊的任务,但是不会被动的运行,而是通过其他任务中的通知(notify)关键字条件调用。它被多次触发时,只会在该play中其他任务(task)运行完毕后运行一次。如果本应触发它的任务执行失败,则它会被跳过,可以通过force_handless强制调用。
例:

    name: 修改配置文件

    src: config.j2

    dest: /etc/app.conf

    notify: 重启服务

handlers:
    name: 重启服务
    service:
        name:app
        state: restarted

三、修改返回值

        如果任务执行失败或更改了受控节点内容,默认会返回change和failure值。可以通过change_when和failed_when修改任务的返回值。
例:

name: 检查文件是否存在
stat:
path: /tmp/test.txt
register: file_info
failed_when: file_info.stat.exists == false
changed_when: file_info.stat.size > 0

四、块(block)


可以在任务中划分块,块有三种类型:

普通块(block):其下是任务的目标过程。

救援块(rescue):在block中命令失败时,改为运行rescue块的内容。

始终运行块(always):这个块中的命令总是执行。

例:

block:
    name: 尝试安装软件包
    apt:
        name: nginx
        state: present
rescue:
    name: 安装失败时执行
    debug:
        msg: "安装失败,执行备用操作"
always:
    name: 无论结果如何都执行
    debug:
        msg: "块执行完毕"

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐