ansible playbook 是一门自动化运维的编程语言,顺序、条件、循环等操作,使用yaml格式实现,playbook配置文件类似于shell脚本。
1. yaml语法
YAML语法结构通过缩进来展示,通过“-”来代表项;“:”用来分隔键和值;整个文件以“---”开头,并以“...”结尾,如下所示:
所有的“-”和“:”后面均有空格,而且注意缩进和对齐。
playbook的核心元素包含:
-
hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts中的分组信息;
-
remote_user:远程主机上,运行此任务的默认身份为root;
-
tasks:任务,即定义的具体任务,由模块定义的操作列表;
-
handlers:触发器,类似tasks,只是在特定的条件下才会触发的任务。某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers进行触发执行;
- roles:角色,将hosts剥离出去,由tasks、handlers等所组成的一种特定的结构集合。
playbook文件定义的任务需要通过ansible-playbook命令进行调用并执行。语法结构如下:
ansible-playbook [options] /PATH/TO/PLAYBOOK.yaml
[option]部分的功能包括:
--syntax-check:检测yaml文件的语法;
-C(--check):预测试,不会改变目标主机的任何设置
--list-hosts:列出yaml文件影响的主机列表
--list-tasks:列出yaml文件的任务列表
--list-tags:列出yaml文件中的标签
-t TAGS(--tags=TAGS):表示只执行指定标签的任务
--skip-tags=SKIP_TAGS:表示除了指定标签的任务,执行其他任务
--start-at-task=START_AT:从指定的任务开始往下运行;
通常情况下先执行ansible-playbook -C /PATH/TO/PLAYBOOK.yaml命令进行测试,测试没问题后再执行ansible-playbook /PATH/TO/PLAYBOOK.yml命令
测试执行playbook.yaml结果:
ansible-playbook /etc/ansible/test.yaml
远程连接192.162.146.128主机查看是否成功执行了任务:
ssh root@192.168.146.128 tail -1 /etc/passwd
ssh root@192.168.146.128 ls -rlt /home
2. 触发器
需要触发才能执行的任务,当之前定义在tasks中的任务执行成功后,若希望在此基础上触发其他任务,这时就需要定义handlers。例如:例如,当通过ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以使配置文件生效。
handlers触发器具有以下特点:
1). handlers是Ansible提供的条件机制之一。handlers和task很类似,但是它只在被task通知的时候才会触发执行.
2). handlers只会在所有任务执行完成后执行。而且即使被通知了很多次,它也只会执行一次。handlers按照定义的顺序依次执行。
handlers触发器的使用示例如下:
cat /etc/ansible/httpd.yaml
执行任务:
ansible-playbook -C /etc/ansible/httpd.yaml
ansible-playbook /etc/ansible/httpd.yaml
远程连接主机查看结果:
3. 角色
将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色。角色一般存放在/etc/ansible/roles/目录,可通过ansible的配置文件来调整默认的角色目录,/etc/ansible/roles/目录下有很多子目录,其中每一个子目录对应一个角色,每个角色也有自己的目录结构。
tree /etc/ansible/roles/
web:web角色
mariadb:mariadb角色
每个角色的定义,以特定的层级目录结构进行组织,角色的文件结构如下:
files/:此角色中用到的所有文件均放置于此目录中
templates/: 模板文件存放位置
tasks/:任务列表文件;可以有多个,但至少有一个叫做main.yml的文件
handlers/:处理器列表文件;可以有多个,但至少有一个叫做main.yml的文件
vars/:变量字典文件;可以有多个,但至少有一个叫做main.yml的文件
meta/:此角色的特殊设定及依赖关系
有了角色后,可以直接在yaml文件(playbook配置文件)中调用角色,例如:
可以只调用一个角色,也可以调用多个角色,当定义了角色后,用ansible-playbook PALYBOOK文件执行即可。此时ansible会到角色集合的目录(/etc/ansible/roles)去找web和mariadb目录,然后依次运行web和mariadb目录下的所有代码
4. 实战:安装及配置mariadb数据库的实例
需求分析:
-
要求被管理主机上自动安装mariadb,安装完成后上传提前准备好的配置文件至远端主机,重启服务,然后新建testdb数据库,并允许test用户对其拥有所有权限。
- 被管理主机配置yum仓库,自行配置,若被管理端可以连接互联网,那么直接将yum仓库指向互联网即可。
在ansible服务器上实施:
创建任务文件:
触发器文件:
files文件:
创建PLAYBOOK.yml文件
执行mariadb.yml
安装完成后,在远端主机上测试: