文章目录
- 一、基本了解
- 二、编写playbook
- 2.1 单剧本
- 2.2 多剧本
- 2.3 特权升级
- 2.4 语法优化
- 三、模块查找
一、基本了解
为什么要写playbook?
- 前面我们可以使用临时命令对受控机进行操作,但当有重复性的工作时就不能这么玩了,因为你要一遍遍的去执行命令,这时playbook就可以有效解决这个问题,它轻松重复的对一组目标主机执行多项复杂的任务。
playbook是是什么?
- playbook是一个文本文件,包含由一个或多个按特定顺序运行的play组成的列表,所以我们在编写playbook时需要理清思路,先执行什么,再执行什么。
注意事项:
- Playbook使用空格字符缩进来表示其数据结构。
- 同一级别的数据元素缩进量必须相同。
- 若项目属于其他项目的子项,其缩进量(空格数)必须大于父项。
- 使用空格键进行缩进,不支持tab键,一般2个空格表示一个级别。
- Playbook开头一行由三个破折号组成,代表开始。在文档结尾可能会使用三个圆点表示结束,实践中进场忽略结尾符号。
- 两个标记之间,会以一个play列表的形式来定义playbook。YAML列表中的项目以一个破折号加空格开头。
- 在执行playbook时,会有一个特殊的任务自动执行——Gathering Facts任务,它是通过setup模块启动的,通常在play启动时自动运行这项任务,用于获取受控机的信息。
提高输出的详细程度:
- ansible-playbook命令提供的默认输出不提供详细的任务执行信息。ansible-playbook -v命令提供了额外的信息,总共有四个级别。
- -v :显示任务结果。
- -vv :任务结果和任务配置都会显示。
- -vvv :包含关于与受管主机连接的信息。
- -vvvv :增加了连接插件相关的额外详细程序选项,包括受管主机上用于执行脚本的用户以及所执行的脚本。
二、编写playbook
编写思路:
- 确定目标。比如我想在受控机上安装一个服务,是需要先系统初始化配置yum源,再开始安装,然后修改一些配置参数,最后启动。
- 确定要使用什么模块。执行不通的动作需要用不同的模块来完成。
- 验证playbook语法。
- 空执行,用于测试playbook输出的结果是否是我们想要的,但实际不会在受控机上执行。
2.1 单剧本
- 示例:在192.168.130.161受控机上启动防火墙。
1.确定清单文件。
2.确定能与受控机通信。
3.创建一个ploybook目录,用于专门存放ploybook文件,编写playbook,名为qingjun.yml。
[root@localhost ansible]# mkdir playbook
[root@localhost ansible]# cd playbook/
[root@localhost playbook]# vim qingjun.yml
[root@localhost playbook]# cat qingjun.yml
---
- name: 系统初始化 ##任务名称,自定义。
hosts: 192.168.130.161 ##对哪个受控机进行操作。
tasks: ## 任务。
- name: 关闭防火墙 ##任务里可以有很多个小任务,比如这里就只有一个任务,关闭防火墙,名称自定义。
service: ##关闭防火墙要用哪个模块。
name: firewalld ##service模块参数,作用对象。
state: stopped ##service模块参数,操作动作。
4.语法验证。验证没问题之后才能往后面操作。
[root@localhost playbook]# ansible-playbook --syntax-check qingjun.yml
5.执行空运行,测试结果是否是我们想要的,但不实际在受控机上执行。
6.执行ploybook,查看结果。
2.2 多剧本
- 示例:关闭所有受控机的防火墙,在192.168.130.162上安装zsh服务。
1.配置清单文件。
2.编写剧本。
[root@localhost playbook]# cat baimu.yml
---
- name: 系统初始化
hosts: all
tasks:
- name: 关闭防火墙
service:
name: firewalld
state: stopped
- name: 安装服务
hosts: 192.168.130.162
tasks:
- name: 安装zsh服务
yum:
name: zsh
state: present
3.检查语法。
4.空执行测试。
5.正式执行,查看结果。
2.3 特权升级
- 官网连接
参数 | 释义 |
---|---|
remote_user | 使用受控机上的哪个用户执行任务,默认为root用户。 |
become | true和false,是否开启特权升级。 |
become_method | 切换受控机用户的方式。 |
become_user | 切换到受控机上的哪个用户。 |
–ask-become-pass | 切换用户时,是否需要输入密码。 |
1.编写剧本。
[root@localhost playbook]# cat baimu.yml
---
- name: 系统初始化
hosts: all
remote_user: qingjun ##使用受控机上的qingjun用户执行任务。
become: true ##开启特权升级。
become_user: root ##升级成哪个用户。
become_method: su ##使用su方式切换成root用户。
tasks:
- name: 查看文件内容
lineinfile: ##查看文件里是否有某行内容。
name: /etc/hosts
line: 'qingjun hahahah'
state: present
2.测试语法。
3.正式执行。
2.4 语法优化
1.若有字符串型内容,需要用单引号或双引号。
2.若有多行字符串时,可以使用管道符。
3.列表方式和内联方式表示。
三、模块查找
1.官网查找,模块连接
2.命令查找指定模块,可以查看到playbook编写格式及所有参数。
3.命令查找所有模块。