ansible自动化运维详解ansible中playbook的编写使用执行命令及实例演示
Posted 是大姚呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible自动化运维详解ansible中playbook的编写使用执行命令及实例演示相关的知识,希望对你有一定的参考价值。
文章目录
ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示
一、playbook的功能简介
如之前博客中所述,ansible有以下两种管理方式:
1)Ad-Hoc命令:利用ansible命令直接完成管理,主要用于临时命令这一使用场景。
2)playbook脚本:ansible脚本,主要用于大型项目场景,需要前期的规划。
Ad-Hoc命令在之前的实验中详细介绍并大量使用过,具体可参考ansible自动化运维详解(二)等,这里我们将对playbook脚本这第二种管理方式进行详细介绍。
playbook是ansible的配置、部署、编排语言,不同于使用Ansible命令行执行方式,其功能更加强大灵活,它可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合。当对一台机器做环境初始化、服务部署的时候,往往需要做多个动作,这时使用playbook会更加合适,通过playbook我们可以一次在多台机器执行多个指令。这种预先设计的配置保持了机器的配置统一,同时也可以很简单的执行日常任务。简而言之,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为部署复杂应用程序的基础。
二、YAML语言
2.1、YAML简介
playbook可以理解为组织多个任务指令(task)的容器,它的实质就是一个文件,有着特定的组织格式,其采用的语法格式是YAML语言。YAML是一种可读性高,用来表达数据序列化的格式,专门用来写配置文件,比 XML 或 JSON 等其他常见数据格式更易于人类读写。
2.2、YAML特点
YAML标记语言具有:可读性好、和脚本语言交互性好、易于实现、适用于程序执行流梳理方式、可扩展性强等特点。
2.3、YAML语法
(1)所有 YAML 文件用 [---]
表示文件内容开始,次行开始书写文件内容;
(2)所有 YAML 文件用 [...]
表示文件内容结尾;
(3)YAML 文件大小写敏感,其使用缩进表示层级关系,缩进严格,缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
(4)YAML 支持的数据结构有三种:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的不可再分的值,如字符串、布尔值、整数、浮点数、Null、时间、日期
YAML 文件中的 key / value 键值对可以多行书写,也可以一行书写,在一行书写用,
隔开,其中 value值可以是个字符串,也可以是一个list列表。
YAML列表/字典书写方式示例:
1、单行书写列表:
[Linux,C++,Java,Python]
多行书写列表:
- Linux
- C++
- Java
- Python
2、单行书写字典(存放键值对):
- file: path: /mnt/yaofile, state: touch
多行书写字典:
- file:
path: /mnt/yaofile
state: touch
(5)一个play需要包括name和tasks,name是命名描述,tasks是动作;
(6)同一任务命名name里,只能引用一个模块即只能有一个任务task,想要执行多个task可以添加多个任务列表(破折号-
代表为一个任务列表);
(7)YAML 文件的扩展名称为yml
或yaml
。
三、playbook的核心组件
playbook脚本文件中的三个核心组件为:
组件 | 含义 |
---|---|
name | 命名描述,选择性书写,建议使用,多用于进行任务说明 |
hosts | 受控主机列表 |
tasks | 任务,用于选择执行部分代码 |
四、playbook执行命令
playbook脚本文件的执行命令为:ansible-playbook xxx.yml (可以后跟参数)
,执行命令时一些常用参数如下:
常用参数 | 含义 |
---|---|
- - check 或 - C | 进行预执行检测 |
- - syntax-check | check language,检查文件中语法有没有问题 |
- - list-hosts | 列出受控主机列表hosts |
- - list-tags | 列出任务标签tag 当playbook有很多任务,而我们只想执行其中的一部分任务或一类任务时,我们可以借助 tags 对任务进行“”打标签”,在执行 playbook 时借助标签指定执行某些任务 |
- - list-tasks | 列出任务列表task |
- - limit | 指定执行主机 |
- v、- vv | 显示任务执行过程的详细信息(v的个数越多越详细) |
实验步骤:
1、这里仍然是利用我们之前一直使用的两台rhel8.2版本的虚拟机进行演示,westos_ansible(172.25.33.100)为控制主机,westos_node1(172.25.33.200)为受控主机。在控制主机切换到用户lee,进入其用户家目录下的ansible目录,在该用户级ansible操作环境下进行实验配置,编写playbook脚本文件test.yml
test.yml文件内容如下:在所有受控主机中调试输出hello westos
执行该playbook脚本文件,引用 - - syntax-check参数检查文件中语法有没有问题,可以看到语法检查不通过,错误处被标注出来,该处缩进不正确
编辑test.yml文件,将debug模块处的缩进与其相同层级name的左侧对齐
再次执行上述命令,可以看到语法检查成功通过
2、执行该playbook脚本文件,引用 - - check参数对该yml文件进行预执行检测,文件可以成功执行并输出显示指定调试信息
3、执行该playbook脚本文件,引用 - - list-hosts 参数列出该yml文件中的受控主机列表,可以看到命令执行成功,所显示的受控主机列表与清单中一致
4、执行该playbook脚本文件,引用 - - list-tasks 参数列出该yml文件中的任务列表,可以看到命令执行成功,所显示的任务列表与文件中书写的一致
5、编辑清单,将控制主机也作为一台受控主机加入到原来受控主机所在的同一westos组里,接着编辑test.yml文件,将文件中受控主机列表hosts的值修改为westos,同时添加一个任务列表查看所有受控主机的域名
执行该playbook脚本文件,引用 - v 参数显示任务执行过程的详细信息,可以看到命令执行成功,任务执行过程的详细信息中显示了westos组所有主机的域名
6、执行该playbook脚本文件,引用 - - limit 参数指定只在172.25.33.100主机上执行,可以看到命令执行成功
实例:安装部署FTP/vsftpd服务
实验步骤:
1、vim设定技巧:考虑到YAML对缩进的严格要求,为了便于编写playbook文件避免手动敲空格,我们可以编辑用户级vim配置文件~/.vimrc(只针对脚本编写者自己生效)进行如下设定:
autocmd FileType yaml setlocal ai ts=2 sw=2 et
setlocal ##设定当前文件
ai ##自动退格对齐 auto indent
ts ##tab键长度为2空格 tabstop=2
sw ##缩进长度为2 shiftwidth=2
et ##把tab键变成空格 expandtab
2、在控制主机lee用户家目录下的ansible目录中编写vsftpd安装部署脚本文件install_vsftpd.yml:在westos组内的所有受控主机(172.25.33.200)中,首先调用dnf
模块指定安装FTP/vsftpd服务的最新软件包;接着调用lineinfile
模块修改vsftpd服务的配置文件来配置vsftpd服务,使用regexp参数匹配配置文件/etc/vsftpd/vsftpd.conf中的"anonymous_enable=NO",将该行替换为"anonymous_enable=YES",启动匿名用户的访问功能,当内容无匹配规则时不对文件做任何更改;修改完配置文件后调用service
模块重启vsftpd服务并设置其为开机自启动;最后调用firewalld
模块在受控主机防火墙策略中设置永久允许ftp服务,并令设置立即生效
##install_vsftpd.yml
---
- name: install vsftpd
hosts: westos
tasks:
- name: install vsftpd
dnf:
name: vsftpd
state: latest
- name: configure vsftpd
lineinfile:
path: /etc/vsftpd/vsftpd.conf
regexp: "anonymous_enable=NO"
line: "anonymous_enable=YES"
backrefs: yes
- name: start vsftpd
service:
name: vsftpd
state: restarted
enabled: yes
- name: configure firewalld
firewalld:
service: ftp
permanent: yes
state: enabled
immediate: yes
3、执行该vsftpd安装部署脚本文件install_vsftpd.yml,可以看到命令执行成功
4、由于真实主机中安装有lftp(ftp协议文本浏览器),此时我们可以通过lftp ip
成功访问受控主机ftp服务的默认共享目录/var/ftp,至此使用playbook脚本在受控主机安装部署FTP/vsftpd服务成功
以上是关于ansible自动化运维详解ansible中playbook的编写使用执行命令及实例演示的主要内容,如果未能解决你的问题,请参考以下文章
ansible自动化运维详解ansible中playbook的编写使用执行命令及实例演示
ansible自动化运维详解ansible中playbook的编写使用执行命令及实例演示
ansible自动化运维详解ansible中playbook的编写使用执行命令及实例演示
大型企业中如何批量管理千万台服务器之ansible自动化运维工具详解 [⭐建议收藏⭐]