【Ansible】ansible Playbook

news2024/12/23 14:00:14



在这里插入图片描述


一、Ad-Hoc 的问题

通过对 Ad-Hoc 的学习,我们发现 Ad-Hoc 每次只能在管理节点上执行简单的命令,而日常工作中,我们往往面临的是一系列的复杂操作。

例如,我们有可能需要安装软件、更新配置、启动服务等等一系列操作的结合。此时,在通过 Ad-Hoc 去完成任务就有些力不从心了。在这种情况下,ansible 引进了 Playbook 来帮忙我们解决这样复杂的问题。

二、PlayBook 是什么

Playbook 也通常被大家翻译成剧本。可以认为它是 ansible 自定义的一门语言(可以将 Playbook 比作linux 中的 shell,而 ansible 中的module 可以比作为 linux 中的各种命令)。

三、YAML 学习

Playbook 遵循 YAML的语法格式。因此,在学习palybook 之前,我们必须要弄明白 YAML 相关知识点。

1.yaml 特点

  • yaml 文件以 # 为注释
  • yaml 文件以 .yml 或者 .yaml 结尾
  • yaml 文件以 --- 开始,以 ... 结束,但开始和结束标志都是可选的

2.基本语法

  • 大小写敏感
  • 使用缩进时表示层级关系
  • 缩进时使用 Tab 键,还是使用空格一定要达到统一,建议使用空格。
  • 相同层级的元素必须左侧对齐即可

YAML 支持的数据结构有三种

  • 字符串
  • 列表
  • 字典

2.1 字符串

---
# yaml 中的字符串可以不使用引号,即使里面存在空格的时候,使用单引号和双引号也没有错
this is a string
'this is a string'
#yaml 中若一行写不下你要表达的内容,可以进行拆行。写法如下:
long_line:
    Example 1
    Example 2
    Example 3
#或者
long_line: >
    Example 1
    Example 2
    Example 3

...

2.2列表

---
#如果熟悉 Python 的话,可以认为它就是 Python中的 list,也可以认为是 C 语言中的数组
#如何定义:以短横线开头 + 空格 + 具体的值
- red
- green
- blue

#以上的值假如转成 python 的list 会是这样:
#['red','green','blue']
...

2.3 字典

#如果熟悉 Python 的话,可以认为它就是 Python中的 dict
#如何定义:key + 冒号(:)+ 空格 + 值(value),即key:value
name: Using Ansible
code: abc

#转换成 python 的 字典
#{'name': 'Using Ansible','code': 'abc'}

2.4 混合结构

在日常生活中,往往需要的数据结构会特别复杂,有可能会是字符串、列表、字典的组合形式。

栗子

学校是以班级为单位的,我们使用列表和字典的形式去描述一个班级的组成。

---
class:
    - name: stu1
      num: 001
    - name: stu2
      num: 002
    - name: stu3
      num: 003


# {'class': [{'name': 'stu1','num': 1},{'name': 'stu1','num': 2},{'name': 'stu1','num': 3}]}

...

2.4 验证 yaml 语法

// 将yaml 文件,通过 python 的yaml 模块验证,若不正确则报错,若正确则会输出 yaml 里的内容。
// 注意使用时,一定确保安装了 yaml 软件包
python -c 'import yaml,sys;print yaml.load(sys.stdin)' < my_yaml.yml
python3 -c 'import yaml,sys;print yaml.load(sys.stdin)' < my_yaml.yml

栗子

[root@master1 ~]# python -c 'import yaml,sys; print yaml.safe_load(sys.stdin)' < my_yaml.yml
['red', 'green', 'blue']


四、 Playbook 的编写

1.play 的定义

由于palybook 是一个或者多个 play 组成,那么如果我们熟悉 play 的写法,就自然掌握了playbook。

如何定义一个 Play

  • 每个play 都是以短横杠开始的
  • 每个play 都是一个 yaml 字典格式

根据上面两条 play 的规则,一个理想的 play 应该是如下的样子

---
- key1: vaule1
  key2: vaule2
  key3: value3
...

由于一个 playbook 是由一个或者多个 play 构成,那么一个含有多个play的playbook 结构上应该是如下的样子

---
- key1: vaule1
  key2: vaule2
  key3: value3
- key4: vaule4
  key5: vaule5
  key6: value6
- key7: vaule7
  key8: vaule8
  key9: value9
...

2.Play 属性

以上面的 paly 为基础,play 中的每一个key,比如key1,key2等;这些key在playbook中被定义为 play 的属性。这些属性都具有特殊的意义,我们不能随意的自定义 play 的属性。

常用属性

  • name 属性,每个play的名字
  • hosts 属性,每个play涉及的被管理服务器,同 ad-hoc 中的资产选择器
  • tasks 属性,每个play中具体要完成的任务,一列表的形式表达
  • become 属性,如果需要提权,则加上 become 相关属性
  • become_user 属性,指定连接到远程节点的用户,就是在远程服务器上执行具体操作的用户,若不指定,则默认使用当前执行 ansible playbook用户

3.一个完整的剧本

栗子

---
- name: the first play example
  hosts: all
  remote_user: root
  tasks:
    - name: install nginx package
      yum: name=nginx state=present
    - name: copy nginx.conf to remote server
      copy: src=nginx.conf dest=/etc/nginx/nginx.conf
    - name: start nginx server
      service:
        name: nginx
        enabled:true
        state: started
...

4. tasks 属性中任务的多种写法

---
#启动 Nginx 服务,增加开机启动为例
#一行的形式:
service: name=nginx enabled=true state=started

#多行的形式:
service: name=nginx
		 enabled=true
		 state=started
#多行写成字典的形式:
service:
  name: nginx
  enabled: true
  state: started
...

5.具有多个 play 的 playbook

---
  name: manage web server
  hosts: web_servers
  remote_user: root
  tasks:
    - name: install nginx package
      yum: name=nginx state=present
    - name: copy nginx.conf to remote server
      copy: src=nginx.conf dest=/etc/nginx/nginx.conf
    - name: start nginx server
      service:
        name: nginx
        enabled: true
        state: started
- name: manager master servers
  hosts: master_servers
  tasks:
    - name: update databases config
      copy: src=my.conf dest=/etc/my.conf


...

6. 如何对 playbook 进行语法校验下面校验的方法,只能校验 playbook 是否正确,而不能校验 yaml 文件是否正确

[root@master1 ~]# ansible-playbook my_playbook.yml -i hosts  --syntax-check

playbook: my_playbook.yml
[root@master1 ~]# 


因为playbook 属于 yaml 格式,我们同样可以使用检查 yaml 的语法格式的方法进行检查 playbook 的语法正确性。

7. 运行 playbook

[root@master1 ~]#ansible-playbook -i hosts  my_playbook.yml

8.如何单步跟从调试 playbook

[root@master1 ~]#ansible-playbook -i hosts  my_playbook.yml --step

9. 如何测试运行 playbook

//会执行完整个 playbook,但是所有 task 中的行为都不会在远程服务器上执行,所有执行都是模拟行为
[root@master1 ~]#ansible-playbook -i hosts  my_playbook.yml --C  //-C 为大写字母C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想要申请双软认证 这九大标准你满足吗

申请双软认证的优势有很多&#xff0c;最主要的就是能够节省企业的税收支出&#xff0c;减少成本&#xff0c;企业的利润就会增加&#xff0c;企业也能够发展得更好了。 要申请双软认证&#xff0c;企业就需要及时的了解双软认证的要求&#xff0c;不光是要有软件著作权&#…

编写jinjia2模板和角色部分 ansible(6)

目录 题目&#xff1a; 1、jinjia2模板&#xff1a; 编写hosts.j2&#xff0c;内容如下(主机名和ip地址使用变量)&#xff1a; &#xff08;1&#xff09;Welcome to 主机名 &#xff01;&#xff08;比如servera.lab.example.com&#xff09; My ip is ip地址. &#xff…

虹科新品 | 什么是光纤微动开关?(上)

01 什么是光纤微动开关 # 光纤微动开关结合了机械开关和光中断器的优点以及光纤波导的非金属性 光纤微动开关有一个确定的机械开关点&#xff0c;提供触觉反馈 光中断器没有电子机械部件&#xff0c;因此具有高可靠性 光纤是非金属的&#xff0c;它的信号损失几乎为零&#x…

苹果中国官网上线智能家居板块,蓝牙BLE在智能家居的应用

近期苹果中国区官网已上线单独的家居板块&#xff08;Apple Home&#xff09;。页面显示&#xff0c;家居板块主要分为三个品类&#xff1a;HomePod、Home App&#xff08;家庭 App&#xff09;以及智能家居配件。 据了解&#xff0c;智能家居单品均为第三方出品&#xff0c;虽…

OpenWrt 在没有80\443端口、不能dns验证的情况下为自己的域名申请免费ssl证书

适用范围 本方法适用于使用OpenWrt 在没有80\443端口、不能dns验证的情况下为自己的域名申请免费ssl证书。 提示&#xff1a; 1、如果你的网络的80或者443端口是开放状态&#xff0c;可直接使用https://letsencrypt.org/进行ssl申请&#xff0c;使用acme.sh脚本可快速完成。 2…

枚举类与注解

文章目录一、枚举类的使用枚举类的理解枚举类的定义Enum类的常用方法Enum类的实现接口二、注解&#xff08;Annotation&#xff09;说明如何自定义注解JDK提供的4种元注解通过反射获取注解信息&#xff08;到反射再讲&#xff09;JDK8注解的新特性每日一考一、枚举类的使用 枚…

Node.js教程笔记(二)模块化

学习目标 1、能够说出模块化的好处 2、能够知道CommonJS规定了哪些内容 3、能够说出NodeJS中模块的三大分类各是什么 4、能够使用npm管理包 5、能够了解什么是规范的包结构 6、能够了解模块的加载机制 目录 1、模块化的基本概念 2、NodeJS中模块的分类 3、npm与包 4…

Django项目使用wangeditor方法

一、环境&#xff1a; python&#xff1a; 3.8 Django &#xff1a;3.2.16 wangeditor&#xff1a; v4 &#xff08;官方文档地址&#xff1a;wangEditor&#xff09; JS文件下载&#xff1a;https://download.csdn.net/download/weixin_47401101/87379142 编译器&#xff1…

日志分析工具--花两天时间为自己开发个小工具值得吗?

这两天忙里偷闲整理开发了个小的日志分析工具&#xff0c;没错&#xff0c;是给自己使用的&#xff0c;工欲善其事必先利其器。 先说一下痛点&#xff0c; 1、经常会遇到需要在外网服务器上调试的情况&#xff0c;此时只能通过日志来调试信息。 2、当使用记事本打开日志文件后&…

windows驱动开发-WDF编程

文章目录前言WDF编程前的准备工作WDF编程创建驱动对象创建设备对象设备对象的回调函数链表操作驱动的测试代码前言 注&#xff1a;本文的完整代码见仓库 18-WDF-reflect 代码参考自&#xff1a;junjiexing/libredirect 我不是从事驱动开发的专业人员&#xff0c;打酱油需要用…

区块链Fabric-从入门到实战(二) Fabric环境搭建

Fabric ubuntu16虚拟机环境搭建Ubuntu16镜像ubuntu-16.04.3-server-amd64.iso &#xff08;如有需要&#xff0c;私信我&#xff09;修改软件源cd /etc/apt/sudo cp sources.list sources.list.baksudo gedit sources.listdeb-src http://mirror.neu.edu.cn/ubuntu/ xenial mai…

回望在CSDN的2022和展望全新的2023

前言时光如白驹过隙&#xff0c;这条消息提醒着我加入CSDN有一些日子了。4286天&#xff0c;只是一个普通的数字&#xff0c;却记录着与CSDN的每一天。过去太长&#xff0c;回望过去的2022&#xff0c;有很多的收获和成长。在C站结实了一些朋友&#xff0c;分享了自己在工作中的…

校园跑腿、校园脱单、代理、帮忙拿快递的微信小程序 基于SpringBoot、Mybatis-plus、mysql实现

一、文件夹说明 代码下载 地址:校园跑腿、校园脱单、代理、帮忙拿快递的微信小程序 server 后端项目 project&#xff1a; 项目 CBD&#xff1a; 校园跑腿服务&#xff08;校园CBD中心&#xff09; server-app: 小程序apiserver-pc: 小程序后台管理service-cgs-base-service:…

RK3399平台开发系列讲解(CPU篇)CPUFreq 中央处理器频率调节技术

🚀返回专栏总目录 文章目录 一、CPUFreq组成二、设备树配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢中央处理器频率调节(Central Processing Unit frequency,CPUFreq)技术可以降低ARM芯片的功耗,例如在系统对任务压力较小时,通过调整处理器工作频率与输入…

Javascript判断点是否在多边型内

射线法Ray-casting Algorithm算法检查点point是否在多边形里面。用法&#xff1a;insidePolygon([[x1,y1],[x2,y2],[x3,y3]...], [x , y])参数说明&#xff1a;polygon多边形坐标集合&#xff0c;格式为[[x1,y1],[x2,y2],[x3,y3]...]。point 测试点坐标, 格式为[x , y]。返回tr…

技术分享| 视频监控融合方案

视频监控系统在各行业应用广泛&#xff0c;从早期的只是简单的实现通过视频记录监控区域的情况&#xff0c;到现在的监控侦测、智能报警、融合通信等功能&#xff0c;视频监控的作用已经不是简单的记录&#xff0c;分布在各地的视频监控摄像头可以通过复杂的软件算法实现更多智…

数据分析的尽头不是可视化,而是行动!行动!行动!

Kyligence Zen 联动飞书&#xff0c;支持一键推送指标&#xff0c;在飞书就能追踪关键指标的最新动态&#xff1b;指标对齐目标&#xff0c;目标拆解为飞书任务&#xff0c;实现从指标洞察到行动的丝滑闭环&#xff01; 指标是衡量目标的量化参数&#xff0c;也是企业将战略目标…

PC端网页特效:轮播图

轮播图 功能需求&#xff1a; 鼠标经过轮播图模块&#xff0c;左右按钮显示&#xff0c;离开隐藏左右按钮。点击右侧按钮一次&#xff0c;图片往左播放一张&#xff0c; 左侧按钮同理。图片播放的同时&#xff0c;下面小圆圈模块跟随一起变化。点击小圆圈&#xff0c;可以播放…

2023年系统集成项目管理工程师报考条件及时间安排

一、报考条件 二、考试时间安排 集成考试一年会考2次&#xff0c;上半年一次、下半年一次 考试内容&#xff1a; 三、考试知识点分布&#xff1a; 给出一点点中项备考攻略 中级我敢说是好考的&#xff0c;题目也不难&#xff0c;主要弄清楚47个过程的输入输出&#xff0c;还有…

Github每日精选(第87期):轻量级图表lightweight-charts

lightweight-charts TradingView 轻量级图表是最小和最快的金融 HTML5 图表之一。 如果您想在网页上将财务数据显示为交互式图表而不影响网页加载速度和性能&#xff0c;轻量级图表库是您的最佳选择。 如果您想用交互式图表替换静态图像图表&#xff0c;它是您的最佳选择。该…