Ansible中Playbook的光速教程

什么是Playbook?

playbook是由一个或者多个模块组成的, 使用多个不同的模块, 完成一件事。

playbook通过yaml语法来识别描述的状态文件, 扩展名为yaml

Playbook的三个语法特点

缩进

YAML使用一个固定的缩进风格表示层级结构, 每个缩进由两个空格组成, 不能使用Tab

冒号

除了以冒号为结尾的以外, 其他所有的冒号后面必须要有空格。

短横线

  • 表示列表项, 使用一个短横线加一个空格。
  • 多个项使用同样的缩进级别作为同一列表。

一个安装Httpd的简单实例:

Playbook 常用到的关键字

hosts

hosts这一块的内容一个或者多个组或主机, 以逗号为分隔符, 或者也可换行写。

例子如下:

如果你需要在使用sudo时指定密码, 可在运行ansible-playbook命令时加上选项--ask-sudo-pass(-K)

如果使用sudo时, playbook疑似被挂起, 可能是在sudo提示处被卡住, 这时可执行Control-C杀死卡住的任务, 再重新运行一次。

tasks

每一个play包含了一个任务列表。

一个task在其所对应的所有主机上通过hosts匹配的所有主机执行完毕之后, 下一个task才会执行。

有一点需要明白的是(很重要), 在一个play之中, 所有hosts会获取相同的任务指令,这是play的一个目的所在, 也就是将一组选出的hosts映射到task

每一个task必须有一个名称name, 这样在运行playbook时, 从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。

如果没有定义nameaction的值将会用作输出信息中标记特定的task

例子如下:

比较特别的两个ansible模块, command和shell是无法使用key=value的形式来书写的。

只能写成以下方式:

当你不需要关心command或者shell的命令执行成功与否的时候, 但是仍需执行后续的动作, 可忽略错误。

例子如下:

action行中, 可以使用变量, 假设在vars哪里定义了一个变量vhost, 则可这样使用:

handlers

在发生改变时执行的操作。

action发送改动的时候, notify actions会在playbook的指定task 结束时被触发,而且即使有多个不同的task通知改动的发生, notify actions只会被触发一次.

以下例子, 当推送配置文件与远程主机上的不相同, 要修改远程主机上的配置文件的时候, 则触发handlers重启两个服务:

如果你想立即执行所有的handlers命令, 在1.2及以后的版本, 可以这样做:

任何在排队等候的handlers会在执行到meta部分时, 优先执行。

这个技巧在有些时候也能派上用场。

handlers最佳的应用场景是用来重启服务, 或者触发系统重启操作, 除此以外很少用到了。

本文为原创文章,未经授权禁止转载本站文章。
原文出处:兰玉磊的个人博客
原文链接:https://www.fdevops.com/2020/03/08/ansible-quick-tutorial
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注