当前位置: 首页 > news >正文

从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook

目录

一.故事剧情

二.Playbook简介

三.Playbook核心元素(重要)

四.Playbook语法

五.Playbook的运行方式

六.Playbooks中tasks语法使用

1、file

2、lineinfile

3、replace

4、shell

5、debug

6、template/copy

7、fetch

8、unarchive

9、wait_for

10、yum

11、when

12、register

​编辑

13、pause

14、ignore_errors

15、cron

七.总结


一.故事剧情

在了解ansible命令本身之后,她最常用的一部分,便是playbook,使用playbook可以很大程度上减少我们的操作,批量的对很多主机进行更改。

二.Playbook简介

       playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中一系列tasks,可以让远程主机达到预期状态,也可以说,playbook字面意思是剧本,现实中由演员按剧本表演,在ansible中由计算机进行安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

       ansible使用playbook来管理自动化task,playbook是yaml格式的文件,其基本内容可以认为是多条ansible的ad-hoc的语句组成。我们完成一个任务,例如安装部署一个httpd服务,我们需要多个模块(一个模块也可以称之为task)提供功能来完成。而playbook就是组织多个task的容器,他的实质就是一个文件,是用yaml(Yet Another Markup Language)语言编写的文件,有着特定的组织格式。YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便,YAML语法能够简单的表示散列表,字典等数据结构。

       playbook命令根据自上而下的顺序依次执行。同时,playbook开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的。

三.Playbook核心元素(重要)

  • Hosts 执行的远程主机列表

  • Tasks 任务集

  • Varniables 内置变量或自定义变量在playbook中调用

  • Templates 模板,即使用模板语法的文件,后缀.j2,比如配置文件等

  • Handlers 和notify结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行

  • tags 标签,指定某条任务执行,用于选择运行playbook中的部分代码

四.Playbook语法

playbook使用yaml语法格式,后缀可以是yaml,也可以是yml

  • 一般情况下,一个playbook需要使用"---"开始。

  • 在单一一个playbook文件中,可以连续三个连子号(---)区分多个play。还有选择性的连续三个点号(...)用来表示play的结尾,也可省略。

  • 次行开始正常写playbook的内容,一般都会写上描述该playbook的功能

  • 使用#号注释代码

  • 缩进必须统一,不能空格和tab混用

  • 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行实现的

  • YAML文件内容和Linux系统大小写判断方式保持一致,是区分大小写的,k/v的值均需大小写敏感

  • k/v的值可同行写也可以换行写。同行使用: 分隔

  • v可以是个字符串,也可以是一个列表[]

五.Playbook的运行方式

通过ansible-playbook命令运行

ansible-playbook <filename.yml> ... [options]

常用命令:

ansible-playbook filename.yml [options]
 
# ssh 连接的用户名
-u REMOTE_USER, --user=REMOTE_USER
 
# ssh登录认证密码
-k, --ask-pass    
 
# sudo 到root用户,相当于Linux系统下的sudo命令
-s, --sudo       
    
# sudo 到对应的用户
-U SUDO_USER, --sudo-user=SUDO_USER   
 
# 用户的密码(—sudo时使用)
-K, --ask-sudo-pass     
 
# ssh 连接超时,默认 10 秒
-T TIMEOUT, --timeout=TIMEOUT
 
# 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-C, --check      
 
# 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e
-e EXTRA_VARS, --extra-vars=EXTRA_VARS    
 
# 进程并发处理,默认 5
-f FORKS, --forks=FORKS    
 
# 指定 hosts 文件路径,默认 default=/etc/ansible/hosts
-i INVENTORY, --inventory-file=INVENTORY   
 
# 指定一个 pattern,对- hosts:匹配到的主机再过滤一次
-l SUBSET, --limit=SUBSET    
 
# 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
--list-hosts  
 
# 列出该 playbook 中会被执行的 task
--list-tasks   
 
# 私钥路径
--private-key=PRIVATE_KEY_FILE   
 
# 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍
--step    
 
# 只检测 playbook 文件语法是否有问题,不会执行该 playbook
--syntax-check  
 
# 当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔
-t TAGS, --tags=TAGS   
 
# 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
--skip-tags=SKIP_TAGS   
 
# 输出更详细的执行过程信息,-vvv可得到所有执行过程信息。
-v, --verbose 

六.Playbooks中tasks语法使用

先创建一个目录用来存放yml文件

可以使用-C来验证文件内容是否出错

1、file

操作文件,比如创建文件或目录、删除文件或目录、修改文件权限等

常用参数:

  • path:指定要操作的文件或目录

  • state:参数非常灵活,可以包含的值及含义如下

    • directory - 与path结合说明我们要操作的是一个目录

    • touch - 与path结合说明我们要操作的是一个文件

    • link - 创建软连接

    • hard - 创建硬链接

    • absent - 删除目标

  • src:当state设置为link或hard创建链接时,用于说明链接哪个文件,指定链接源

  • force:值为yes表示强制创建

  • owner:指定被操作文件的属主

  • group:指定被操作文件的属组

  • mode:指定被操作文件的权限

测试成功,直接删除-C来执行,然后去查看是否创建成功 

2、lineinfile

修改文件某一行文本

常用参数:

  • path:操作的文件路径

  • regexp:正则表达式,要替换的内容

  • line:指定修改后的文本内容

  • state:当设置为absent代表删除匹配的行

  • backrefs:默认为no,当未匹配到时line对应的内容会被插入到文本的末尾,为yes表示不插入

  • insertafter:借助insertafter参数可以将文本插入到“指定的行”之后

  • insertbefore:借助insertbefore参数可以将文本插入到“指定的行”之前

  • backup:是否进行备份

  • create:操作的文件不存在时是否创建

示例:

先在文本中加入内容

在文本中加入tags来进行单个步骤

将所有line开头的行替换 

3、replace

根据正则表达式替换文件内容

常用参数:

  • path:操作文件的路径

  • regexp:正则表达式

  • replace:指定最终要替换的字符串

  • backup:是否在修改文件之前对文件进行备份,yes是进行备份

简单示例:

4、shell

执行脚本命令

5、debug

用于在调试中输出信息

6、template/copy

模板作用类似于copy,可将文件分发到不同节点上,可以在模板文件中引入变量

常用参数:

  • src: 源文件路径

  • dest:目标文件路径

  • group:目标文件属组

  • mode:目标文件权限

  • backup:如果目标文件存在,则先备份目标文件

  • force:是否强制覆盖,默认为yes

  • validate:在复制之前通过命令验证目标文件,如果验证通过则复制

7、fetch

功能与copy类似,但是是用于从远程主机中拷贝文件到管理主机,不能拷贝目录

常用参数:

  • src:从远程主机上获取的文件路径

  • dest:保存文件的目录

  • flat:是否校准源文件与获取文件是否一致,默认false

8、unarchive

解压缩,将压缩文件解压分发到不同节点上,对zip压缩不友好,尽量使用tar归档压缩(必须是压缩文件目标)

常用参数:

  • src: 源文件路径

  • dest: 目标文件路径

  • mode:目标文件权限

9、wait_for

等待某些操作完成以后再进行后续操作

常用参数:

  • connect_timeout:在下一个任务执行之前等待连接的超时时间

  • delay:指在等待过程中轮询的时间间隔

  • host:等待的主机地址,默认是127.0.0.1

  • port:等待的主机端口

  • path:文件路径,只有当这个文件存在时才开始执行下一个任务

  • state:等待的状态,值可以为started/stoped/absent/present

  • timeout:等待的超时时间,默认300秒

 

当8080端口未开启时,检测将一直进行,此时将nginx端口改为8080并重启,打开8080端口

监测发现8080端口开启,此时进行下一个命令

10、yum

软件包管理

常用参数:

    name:指定需要管理的软件包名

    state:参数非常灵活,可以包含的值及含义如下

           present:确保软件包已经安装了

           installed:安装

           latest:安装最新的软件包

           removed/absent:删除对应的软件包

    disable_gpg_check:用于禁用对rpm包公钥验证,默认值no表示不禁用验证,yes表示禁用验证

11、when

条件判断,满足后再执行任务

12、register

用于注册一个变量,保存命令的结果,常与when结合使用

13、pause

暂停一定时间

常用参数:

  • minutes:暂停多少分钟

  • seconds:暂停多少秒

  • prompt:打印一串信息提示用户操作

14、ignore_errors

忽略错误的命令,通常情况下当出现执行失败时ansible会停止运行,有时候你会想要继续执行下去就需要添加这个

15、cron

定时任务,功能相当于crontab

常用参数:

    name:任务名称

    minute:分, hour:时,day:天,month:月,weekday:周

    job:指定要执行的命令或者脚本

    state:当设置为absent代表删除任务

七.总结

本节内容补充了ansbile中有关playbook的内容,方便之后使用这些命令对多台主机进行操作。

http://www.lryc.cn/news/602250.html

相关文章:

  • 【Blender小技巧】Blender使用多边形建形工具创建多边形模型,挤出面,模型创建修改编辑UV贴图
  • 【第四章:大模型(LLM)】01.神经网络中的 NLP-(2)Seq2Seq 原理及代码解析
  • 从0到500账号管理:亚矩阵云手机多开组队与虚拟定位实战指南
  • 【归并排序】排序数组(medium)
  • Rust/Tauri 优秀开源项目推荐
  • C/C++ 调用lua脚本,lua脚本调用另一个lua脚本
  • 最新的前端技术和趋势(2025)
  • Maven中的bom和父依赖
  • Nginx HTTP 反向代理负载均衡实验
  • YOLO11 改进、魔改|低分辨率自注意力机制LRSA ,提取全局上下文建模与局部细节,提升小目标、密集小目标的检测能力
  • 免费 SSL 证书申请简明教程,让网站实现 HTTPS 访问
  • ADAS测试:如何用自动化手段提升VV效率
  • 【CDA干货】金融超市电商App经营数据分析案例
  • unbuntn 22.04 coreutils文件系统故障
  • GaussDB as的用法
  • 亚马逊广告关键词优化:如何精准定位目标客户
  • MyBatis中#{}与${}的实战避坑指南
  • 性能测试-技术指标的含义和计算
  • Leetcode_242.有效的字母异位词
  • Apache Commons VFS:Java内存虚拟文件系统,屏蔽不同IO细节
  • python入门篇12-虚拟环境conda的安装与使用
  • 深入Go并发编程:Channel、Goroutine与Select的协同艺术
  • 博士申请 | 荷兰阿姆斯特丹大学 招收计算机视觉(CV)方向 全奖博士生
  • 达梦有多少个模式
  • 亚马逊地址关联暴雷:新算法下的账号安全保卫战
  • 四、计算机组成原理——第6章:总线
  • 基于Hadoop3.3.4+Flink1.17.0+FlinkCDC3.0.0+Iceberg1.5.0整合,实现数仓实时同步mysql数据
  • [VLDB 2025]面向Flink集群巡检的交叉对比学习异常检测
  • SVN与GIT的区别,分别使用与哪些管理场景?
  • Go-Elasticsearch Typed Client查询请求的两种写法强类型 Request 与 Raw JSON