Ansible之playbook剧本

1、YAML概述

■ YAML是一种非标记语言,是用来写配置文件的语言,非常简洁和强大

■ YAML语法和其他语言类似,也可以表达散列表、标量等数据结构

■ 结构通过空格来展示,序列里配置项通过-来代表,Map里键值用:来分隔,YAML的扩展名为yaml

1.1、基本语法规则

■ 大小写敏感

■ 使用缩进表示层级关系

■ 缩进时不允许使用Tab键, 只允许使用空格

■ 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

1.2、YAML支持的数据结构

1.2.1、对象

对象:键值对的集合,又称为映射(mapping) /哈希(hashes) /字典(dictionary)
例如: name:Example Developer

1.2.2、数组

数组: 一组按次序排列的值,又称为序列(sequence) /列表(list)
例如:

- Apple
- Orange

1.2.3、纯量

纯量:单个的、不可再分的值
例如:

number: 12.30
sure: true

2、Ansible的脚本—playbook剧本

■ 通过task调用ansible的模板将多个play组织在一个playbook中运行

2.1、playbooks组成

■ Tasks: 任务,即调用模块完成的某操作

■ Variables: 变量

■ Templates: 模板

■ Handlers: 处理器,当某条件满足时,触发执行的操作

■ Roles: 角色

2.2、补充命令

ansible-playbook nginx.yaml -- syntax-check      #检查yaml文件的语法是否正确
ansible-playbook nginx.yaml --list-hosts         #检查生效的主机
ansible-playbook nginx.yaml --list-task          #检查tasks任务
ansible-playbook nginx.yaml --start-at-task='Copy Nginx.conf' #指定从某 个task开始运行

3、实操解析

3.1、为每个用户定义远程执行用户(普通用户与root用户对比)

3.1.1、在节点服务器创建用户设置密码

[root@webserver ~]# useradd lisi
[root@webserver ~]# passwd lisi
[root@webserver ~]# id lisi

在这里插入图片描述

3.1.2、创建playbook

[root@ansible ~]# vim demo1.yuml

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo.yaml --syntax-check #检查语法

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo.yaml     #执行剧本

在这里插入图片描述

3.1.3、修改为root用户

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo.yaml     #执行剧本

在这里插入图片描述
小结:在剧本执行时还要考虑权限问题,执行任务的用户

3.2、指定远程主机sudo切换用户

[root@ansible ~]# vim demo.yaml

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo.yaml --syntax-check

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo.yaml 

在这里插入图片描述

[root@webserver ~]# cd /home/lisi
[root@webserver lisi]# ll /

在这里插入图片描述

[root@ansible ~]# vim demo.yaml    

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo.yaml 

在这里插入图片描述

[root@webserver lisi]# ll

在这里插入图片描述

3.3、创建安装apache,关闭防火墙,访问主页的案例

[root@ansible ~]# vim demo1.yaml

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo1.yaml --syntax-check

在这里插入图片描述

[root@webserver ~]# rpm -q httpd
[root@webserver ~]# systemctl status httpd

在这里插入图片描述

3.3.1、浏览器访问

在这里插入图片描述

3.4、tasks列表和action

■ Play的主体部分是task列表, task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook中的错误,然后重新执行即可。Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致

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

■ 定义一个task, 常见的格式:”module: options” 例如: yum: name=httpd

■ ansible的自带模块中, command模块和shell模块无需使用key=value格式

3.4.1、回滚示例

[root@ansible ~]# vim demo1.yaml

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo1.yaml --syntax-check

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo1.yaml 

在这里插入图片描述

[root@webserver ~]# yum -y remove httpd   #先删除httpd,再进行剧本测试
[root@webserver ~]# rpm -q httpd

在这里插入图片描述
总结:虽然出现报错,无法继续执行命令,但是上一条命令执行成功,apache成功安装,不用返回,说明tasks进行回滚,必须修正错误才可执行下去

3.4.2、忽略错误,强制成功测试

[root@ansible ~]# vim demo1.yaml

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo1.yaml --syntax-check
[root@ansible ~]# ansible-playbook demo1.yaml 

在这里插入图片描述

3.5、对于两个不同节点,分别做不同任务

[root@ansible ~]# vim demo2.yaml

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo2.yaml --syntax-check
[root@ansible ~]# ansible-playbook demo2.yaml 

在这里插入图片描述

[root@mysql ~]# cd /opt
[root@mysql opt]# ll

在这里插入图片描述

3.6、Handlers介绍

Handlers也是一 些task的列表,和一-般的task并没有什么区别
是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行不管有多少个通知者进行了notify, 等到play中的所有task执行完成之后,handlers也只会被执行一次

3.6.1、引入变量

[root@ansible ~]# vim demo1.yaml

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo1.yaml --syntax-check
[root@ansible ~]# ansible-playbook demo1.yaml 

在这里插入图片描述

3.6.2、通过ansible命令传递变量

[root@ansible ~]# vim demo1.yaml

在这里插入图片描述

[root@ansible ~]# ansible-playbook demo1.yaml -e "aaa=httpd"

在这里插入图片描述

3.6.3、引用ansible的固定变量

[root@ansible ~]# vim test.yaml
[root@ansible ~]# ansible-playbook test.yaml --syntax-check

在这里插入图片描述

[root@ansible ~]# ansible-playbook test.yaml

在这里插入图片描述

[root@mysql opt]# ll
[root@mysql opt]# cat addr.txt

在这里插入图片描述

3.6.4、引用主机变量

在MySQL组的主机后面添加
在这里插入图片描述

[root@ansible ~]# vim test.yaml

在这里插入图片描述

[root@ansible ~]# ansible-playbook test.yaml 

在这里插入图片描述

[root@mysql opt]# cat addr.txt

在这里插入图片描述
总结:变量使用场景
1:剧本使用的 服务名称,数据
2:命令 IP地址测试
3:节点hosts 系统的参数值

3.7、条件测试

如果需要根据变量、facts (setup) 或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,在Playbook中条件测试使用when子语句在task后添加when子句即可使用条件测试: when子句支持jinjia2表达式或语法
例如:

[root@ansible ~]# vim when.yml

在这里插入图片描述

[root@ansible ~]# ansible-playbook when.yml --syntax-check
[root@ansible ~]# ansible-playbook when.yml

在这里插入图片描述

3.8、多条件判断

[root@ansible ~]# vim when.yml

在这里插入图片描述

[root@ansible ~]# ansible-playbook when.yml --syntax-check
[root@ansible ~]# ansible-playbook when.yml

在这里插入图片描述

3.9、组条件判断

[root@ansible ~]# vim when2.yml

在这里插入图片描述

[root@ansible ~]# ansible-playbook when2.yml --syntax-check
[root@ansible ~]# ansible-playbook when2.yml

在这里插入图片描述

4、迭代

当有需要重复性执行的任务时(循坏),可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with items语句指明迭代的元素

[root@ansible ~]# vim b.yml 

在这里插入图片描述

[root@ansible ~]# ansible-playbook b.yml --syntax-check
[root@ansible ~]# ansible-playbook b.yml

在这里插入图片描述

[root@webserver ~]# rpm -q httpd
[root@webserver ~]# rpm -q tomcat

在这里插入图片描述

4.1、迭代(自定义)

[root@ansible ~]# vim c.yml

在这里插入图片描述

[root@ansible ~]# ansible-playbook c.yml --syntax-check
[root@ansible ~]# ansible-playbook c.yml

在这里插入图片描述

[root@mysql ~]# id test1
[root@mysql ~]# id test2

在这里插入图片描述

4.2、总结

playbooks是一个非常简单的配置管理和多机器部署系统的基础,以及非常适合部署复杂应用程序的系统

猜你喜欢

转载自blog.csdn.net/weixin_50344814/article/details/112601659
今日推荐