天天看点

运维自动化-Ansible ( 三 )ansible-galaxyAnsible-vaultAnsible-consoleAnsible-playbookPlaybook工作流程YAML语法简介Playbook核心元素

ansible-galaxy 语法:

进入网站后找到这时标记的地方

运维自动化-Ansible ( 三 )ansible-galaxyAnsible-vaultAnsible-consoleAnsible-playbookPlaybook工作流程YAML语法简介Playbook核心元素

把名字复制下来

运维自动化-Ansible ( 三 )ansible-galaxyAnsible-vaultAnsible-consoleAnsible-playbookPlaybook工作流程YAML语法简介Playbook核心元素

就可以在你的ansible主机上进行安装剧本了。

安装的剧本默认是存放在家目录的隐藏文件中。

/root/.ansible

当然,本机的galaxy命令也提供在线搜索剧本。

功能:管理加密解密yml文件

可交互执行命令,支持tab补全。

语法:

语法检查

运维自动化-Ansible ( 三 )ansible-galaxyAnsible-vaultAnsible-consoleAnsible-playbookPlaybook工作流程YAML语法简介Playbook核心元素

真正执行

运维自动化-Ansible ( 三 )ansible-galaxyAnsible-vaultAnsible-consoleAnsible-playbookPlaybook工作流程YAML语法简介Playbook核心元素

Playbook采用YAML语言编写

运维自动化-Ansible ( 三 )ansible-galaxyAnsible-vaultAnsible-consoleAnsible-playbookPlaybook工作流程YAML语法简介Playbook核心元素

这里只涉及到playbook相关的语法,更多请参考官网http://www.yaml.org

语法非常严格,请仔细仔细再仔细。

其所有元素均使用"-"打头

通常由多个key与value构成

Ansible 使用 "{{ var }}" 来引用变量. 如果一个值以 "{"开头, YAML 将认为它是一个字典, 所以我们必须引用它, 像这样:

使用引号来包裹任何包含冒号:的value值, 像这样:

hosts 行的内容是一个或多个组或主机的 patterns,以逗号为分隔符。通常是/etc/ansible/hosts定义的主机列表

remote_user 就是远程执行任务的账户名:

任务集

执行过程

运维自动化-Ansible ( 三 )ansible-galaxyAnsible-vaultAnsible-consoleAnsible-playbookPlaybook工作流程YAML语法简介Playbook核心元素

一个yml文件里可以设计多个playbook,不过呢,为了更清晰的管理,建议应该独立存放不同任务需求,方便以后调用。

由特定条件触发的操作,满足条件方才执行,否则不执行。

Handlers也是task列表,这些task与前述的tasks并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作

还是拿上个例子的playbook修改下。

指定某条任务执行,用于选择运行playbook中的部分代码。 ansible具有幂等性,因此会自动跳过没有变化的部分,

即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过

tags跳过此些代码片断。可以为每个tasks设置tags,这样方便调用。

可以使用多个tags

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

与shell编程中的条件判断类似

在task后添加when子句即可使用条件测试;when语句支持Jinja2表达式语法

前面的案例使用了正则来判断主机的系统版本号,这里直接使用when调用系统变量来判断

判断变量是否定义

当有需要重复性执行的任务时,可以使用迭代机制。类似于循环

例子:

等价的写法:

批量循环创建文件夹

这次来了个综合一点的例子,本着为了以后更好的维护变量的设计,这次把变量独立到到个文件中

playbook

结果:

运维自动化-Ansible ( 三 )ansible-galaxyAnsible-vaultAnsible-consoleAnsible-playbookPlaybook工作流程YAML语法简介Playbook核心元素