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

Ansible的Playbook

Playbook 特点

  • playbook 剧本是由一个或多个"play"组成的列表
  • play的主要功能在于将预定义的一组主机,装扮成事先通过ansible中的task定义好的任务角色。Task实际是调用ansible的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作
  • Playbook 文件是采用YAML语言编写的

二、 YAML 语言介绍

YAML:YAML Ain't Markup Language,即YAML不是标记语言。主要用来配置,大小写敏感,不支持tab, 是一个可读性高的用来表达资料序列的格式。

YAML 语言特性

  • YAML的可读性好
  • YAML和脚本语言的交互性好
  • YAML使用实现语言的数据类型
  • YAML有一个一致的信息模型
  • YAML易于实现
  • YAML可以基于流来处理
  • YAML表达能力强,扩展性好

YAML 语法简介

  • 在单一文件第一行,用连续三个连字号"-" 开始,还有选择性的连续三个点号( ... )用来表示文件的结尾
  • 次行开始正常写Playbook的内容,一般建议写明该Playbook的功能
  • 使用#号注释代码
  • 缩进必须是统一的,不能空格和tab混用
  • 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的
  • YAML文件内容是区别大小写的,key/value的值均需大小写敏感
  • 多个key/value可同行写也可换行写,同行使用,分隔
  • key后面冒号要加一个空格 比如: key: value
  • value可是个字符串,也可是另一个列表
  • YAML文件扩展名通常为yml或yaml

支持的数据类型

  • 标量:单个的、不可再分的值
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

三、 Playbook 核心组件

一个playbook 中由多个组件组成,其中所用到的常见组件类型如下:

  • Hosts 执行的远程主机列表
  • Tasks 任务集,由多个task的元素组成的列表实现,每个task是一个字典,一个完整的代码块功能需最少元素需包括 name 和 task,一个name只能包括一个task
  • Variables 内置变量或自定义变量在playbook中调用
  • Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件
  • Handlers 和 notify 结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
  • tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片段

1. host 组件

Hosts: playbook 中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。 hosts用于指定要执行指定任务的主机,须事先定义在主机清单中。

2. remote_user 组件

remote_user: 可用于Host和task中。也可以指定其通过sudo的方式在远程主机上执行任务,可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户。

3. task列表和action组件

play的主体部分是task list,task list中有一个或多个task,各个task 按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个task后,再开始第二个task。

task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致每个task都应该有其name,用于playbook的执行结果输出,建议其内容能清晰地描述任务执行步骤。 如果未提供name,则action的结果将用于输出。

4. Handlers notify 组件

Handlers本质是task list ,类似于MySQL中的触发器触发的行为,其中的task与前述的task并没有本质上的不同,主要用于当关注的资源发生变化时,才会采取一定的操作。而Notify对应的action可用于在每个play的最后被触发,这样可避免多次有改变发生时每次都执行指定的操作,仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作

注意:

  • 如果多个task通知了相同的handlers, 此handlers仅会在所有tasks结束后运行一次。
  • 只有notify对应的task发生改变了才会通知handlers, 没有改变则不会触发handlers
  • handlers 是在所有前面的tasks都成功执行才会执行,如果前面任何一个task失败,会导致handler跳过执行,可以使用force_handlers: yes 强制执行handler

5. tags 标签

在playbook文件中,可以利用tags组件,为特定task指定标签,当在执行playbook时,可以只执行特定tags的task,而非整个playbook文件。

6. ignore_errors 组件

如果一个task出错,默认将不会继续执行后续的其它task

利用 ignore_errors: yes 可以忽略此task的错误,继续向下执行playbook其它task

7. yml 文件 实操

建议修改vim配置

vim   ~/.vimrc
set ai    //自动对齐
set ts=2  //一个tab键等于2个空格
//每次按下Enter键换行时,新的行会自动缩进,并且缩进将会用2个空格来表示

示例1:新建用户

[root@node1 data]#  vim add_user.yml   //编写yml文件`写法1:`
---
- hosts: lkkgather_facts: notasks:- name: creat useruser: name=cxk uid=6666 system=yes

写法2:

---
- hosts: lkkgather_facts: notasks:- name: creat useruser:name: wyfuid: 666system: yes[root@node1 data]#  ansible-playbook  --syntax-check add_user.yml  //检查语法格式
[root@node1 data]#  ansible-playbook add_user.yml  //执行

示例2:yum安装httpd并启动

[root@node1 data]#  vim httpd.yml  //编写yml文件---
- hosts: lkkgather_facts: notasks:- name: yum httpdyum:name: httpdstate: present- name: stop firewalldservice:name: firewalldstate: stoppedenabled: no- name: start httpdservice:name: httpdstate: started- name: web pagecopy: src=/data/index.html dest=/var/www/html/[root@node1 data]#  ansible-playbook  --syntax-check httpd.yml  //检查语法错误
[root@node1 data]#  ansible-playbook  httpd.yml   //执行[root@node1 data]#  curl 172.16.88.8
7-1
[root@node1 data]#  curl 172.16.88.9
7-1

示例3:yum安装nginx并启动

[root@node1 data]#  vim nginx.yml   //编写yml文件---
- hosts: lkkgather_facts: notasks:- name: install epelyum: name=epel-release.noarch state=present- name: install nginxyum: name=nginx state=present- name: stop httpdservice: name=httpd state=stopped- name: start nginxservice: name=nginx state=started enabled=yes- name: web pagecopy: src=/data/index.html dest=/usr/share/nginx/html[root@node1 data]#  ansible-playbook --syntax-check nginx.yml  //检查语法错误
[root@node1 data]#  ansible-playbook nginx.yml  //执行[root@node1 data]#  curl 172.16.88.8
7-1
[root@node1 data]#  curl 172.16.88.9
7-1

示例4:编译安装nginx并启动

---
- hosts:  lkkgather_facts:  notasks:- name:  install  packagesyum:name: - gcc- pcre-devel- openssl-devel- zlib-devel- openssl - openssl-develstate:  present  - name:  unarchiveunarchive: src=/opt/nginx-1.18.0.tar.gz  dest=/opt- name:  bianyicommand: ./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_moduleargs:chdir: /opt/nginx-1.18.0- name:   makecommand: makeargs:chdir: /opt/nginx-1.18.0- name:   make  installcommand: make  installargs:chdir: /opt/nginx-1.18.0- name: cpoy  servicecopy:  src=/usr/lib/systemd/system/nginx.service    dest=/usr/lib/systemd/system/nginx.service- name:   reloadcommand: systemctl  daemon-reload- name: linkshell:  ln -s  /apps/nginx/sbin/nginx   /usr/bin            - name:  start  nginxservice:  name=nginx  state=started  enabled=yes- name:  web pagetags:  pagecopy:  src=/data/index.html    dest=/apps/nginx/html

示例5:使用tags标签

[root@node1 data]#  vim nginx.yml   //添加tags
---
- hosts: lkkgather_facts: notasks:- name: web pagetags: pagecopy: src=/data/index.html dest=/apps/nginx/html
[root@node1 data]#  ansible-playbook -t page nginx.yml  //仅执行特定tags的task,而非整个playbook文件

四、 Playbook 命令

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

选项

作用

--syntax-check

语法检查,可缩写成--syntax,相当于bash -n

-C  --check

模拟执行,只检测可能会发生的改变,但不真正执行操作,dry run

--list-hosts

列出运行任务的主机

--list-tags

列出tag标签

--list-tasks

列出task任务列表

--limit 主机列表

只针对主机列表中的特定主机执行(例:ansible-playbook  test.yml  --limit 192.168.204.20)

-i INVENTORY

指定主机清单文件,通常一个项对应一个主机清单文件(例:ansible-playbook  test.yml  -i  /opt/hosts)

--start-at-task START_AT_TASK

从指定task开始执行,而非从头开始,START_AT_TASK为任务的name 

-v -vv  -vvv

显示过程

相关文章:

Ansible的Playbook

Playbook 特点 playbook 剧本是由一个或多个"play"组成的列表play的主要功能在于将预定义的一组主机&#xff0c;装扮成事先通过ansible中的task定义好的任务角色。Task实际是调用ansible的一个module&#xff0c;将多个play组织在一个playbook中&#xff0c;即可以让…...

多平台自动养号【开心版】偷偷使用就行了!

大家好&#xff0c;今天我无意间发现了一款【多平台自动养号工具】&#xff0c;看了一下里面的功能还是挺全面的&#xff0c;包含了【抖音&#xff0c;快手&#xff0c;小红薯】还有一些截流功能 虽然这款工具功能强大&#xff0c;但美中不足的是需要付费的。但别担心&#xf…...

Android与JavaScript的交互,以实现从WebView中打开原生页面并传递参数

在Android应用中&#xff0c;实现Android与JavaScript的交互&#xff0c;以实现从WebView中打开原生页面并传递参数&#xff0c;可以通过以下详细步骤完成&#xff1a; 1. 准备工作 添加WebView至布局&#xff1a;在你的Activity或Fragment的XML布局文件中加入WebView控件。 …...

信息(文字、图像、音频、视频等)在计算机中是如何存储及显示的

信息&#xff08;文字、图像、音频、视频等&#xff09;在计算机中是如何存储及显示的 图片的存储图片的文件格式像素数据的二进制表示存储和处理显示总结 图片的显示4. 像素点控制具体的像素控制过程示例总结 如题&#xff0c;这里以图片为例。 图片的存储 计算机桌面上的一…...

【考研408计算机组成原理】微程序设计重要考点指令流水线考研真题+考点分析

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 微指令的形成方式 微指令的地址形成方式 对应考题 题目&#xff1a;微指令的地址形成方式 - 断定方式 解题思路&#xff1a; 答题&#xff1a; 分析考点&…...

查看哪个docker环境在占用gpu

前言 有时候发现某些docker占用gpu资源却没有训练&#xff0c;需要查清楚是哪个并且把它stop掉。 方法 在docker里面用nvidia-smi命令&#xff0c;没有pid显示&#xff0c;需要在外面使用。得到pid信息后&#xff0c;使用命令 docker top 15766f6eeaf7(容器ID) | grep 551…...

JVM相关总结

JVM的些许问题 1.JVM内存区域划分 2.JVM类加载过程 3.JVM的垃圾回收机制 1.JVM的内存区域划分 一个运行起来的Java进程就是一个JVM虚拟机,需要从操作系统申请一大片内存,就会把内存划分成几个区域,每个区域都有不同的作用 常见的面试题 2.JVM类加载过程 熟练背诵 ! ! !…...

Python 面试【初级】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

机器学习SVR 随机森林 RBF神经网络做回归预测的MATLAB代码

SVR 参考这篇文章 Libsvm使用笔记【matlab】 close all; clc clear %% 下载数据 load(p_train.mat); load(p_test.mat); load(t_train.mat); load(t_test.mat); %% 数据归一化 %输入样本归一化 [pn_train,ps1] mapminmax(p_train); pn_train pn_train; pn_test mapminma…...

Spring Boot中配置Swagger用于API文档

Spring Boot中配置Swagger用于API文档 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中配置Swagger&#xff0c;以便于快…...

学习java第一百一十六天

Spring Framework有哪些不同的功能&#xff1f; 答&#xff1a; 轻量级-Spring 在代码量和透明度方面都很轻便。 IOC-控制反转AOP-面向切面编程可以将应用业务逻辑和系统服务分离&#xff0c;以实现高内聚。容器-Spring 负责创建和管理对象&#xff08;Bean&#xff09;的生命周…...

SQL Server的隐私盾牌:动态数据屏蔽(DMS)全面解析

&#x1f6e1;️ SQL Server的隐私盾牌&#xff1a;动态数据屏蔽(DMS)全面解析 在数据驱动的商业世界中&#xff0c;保护敏感信息至关重要。SQL Server提供了一种强大的安全特性——动态数据屏蔽&#xff08;Dynamic Data Masking&#xff0c;简称DMS&#xff09;&#xff0c;…...

Android中常见的线程池

日常开发中我们常常使用到线程池&#xff0c;其能有效管理线程资源&#xff0c;避免过多线程导致系统资源浪费、又能复用线程资源&#xff0c;避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类&#xff0c;本文主要记录该类相关的知识点。 线程池的六…...

C# YoloV8 模型效果验证工具(OnnxRuntime+ByteTrack推理)

C# YoloV8 模型效果验证工具(OnnxRuntimeByteTrack推理) 目录 效果 项目 代码 下载 效果 模型效果验证工具 项目 代码 using ByteTrack; using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using Sys…...

什么是Cookie?有什么用?如何清除浏览器中的Cookie?

互联网上的每一次点击和每一个选择都可能被一种名为Cookie的技术记录下来。但Cookie是什么&#xff1f;我们在网站上登录时&#xff0c;为什么经常会被问及是否接受Cookie&#xff1f;接受Cookie登录会不会影响我们的在线隐私&#xff1f; Cookie是什么&#xff1f; Cookie是一…...

数据库基本管理

数据完整性&#xff1a; 实体完整性&#xff1a;每一行必须是唯一的实体域完整性&#xff1a;检查每一列是否有效引用完整性&#xff1a;确保所有表中数据的一致性&#xff0c;不允许引用不存在的值用户定义的完整性&#xff1a;制定特定的业务规则 主键&#xff1a; 用于唯…...

43.三倍游戏

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/390 题目描述 三倍游戏是一种单人游戏。玩…...

LoadBalance 负载均衡

什么是负载均衡 负载均衡(Load Balance&#xff0c;简称 LB),是⾼并发,⾼可⽤系统必不可少的关键组件. 当服务流量增⼤时,通常会采⽤增加机器的⽅式进⾏扩容,负载均衡就是⽤来在多个机器或者其他资源中,按照⼀定的规则合理分配负载. 负载均衡的⼀些实现 服务多机部署时,开发⼈…...

Wails 安装初体验

文章目录 Wails 安装说明1. 系统要求2. 安装步骤3. 构建应用 结论 Wails 安装说明 Wails 是一个用于构建桌面应用的 Go 框架&#xff0c;结合了现代前端技术。以下是安装步骤&#xff1a; 1. 系统要求 Go 1.16 或更高版本Node.js 和 npm可选&#xff1a;适用于 Windows、mac…...

架构师篇-10、DDD实战篇:通过领域模型落地系统

基于领域模型的设计与开发 数据库设计程序设计微服务设计 在线订餐系统的领域事件通知 微服务拆分 事件风暴会议 梳理领域事件进行领域建模识别聚合关系划分限界上下文 用户下单领域模型 更新后的模型 领域模型的设计实现过程 数据库设计 数据库映射&#xff1a;一对一关系…...

收藏!小白也能看懂:Transformer残差连接新处理方式,大模型学习必备!

本文介绍了Kimi团队提出的一种新的Transformer残差连接处理方式&#xff0c;旨在解决传统Transformer模型中“PreNorm稀释”问题。通过引入“注意力残差”&#xff0c;每一层使用Softmax机制选择性地组合前层输出&#xff0c;有效缓解了深层网络训练中的梯度消失问题。此外&…...

StarUML6.3.1安装全攻略:从环境配置到破解实战

1. StarUML 6.3.1安装前的准备工作 StarUML作为一款强大的建模工具&#xff0c;在软件开发和系统设计中扮演着重要角色。6.3.1版本在功能和稳定性上都有显著提升&#xff0c;但安装过程可能会让新手感到困惑。在开始安装之前&#xff0c;我们需要做好以下准备工作&#xff1a; …...

告别网线乱绕!实测Windows 10/11的‘移动热点’与‘网络共享’到底哪个更适合给开发板共享网络

Windows网络共享方案深度评测&#xff1a;移动热点 vs 适配器共享 每次在工作室调试开发板时&#xff0c;最头疼的就是网线缠绕的问题。作为嵌入式开发者&#xff0c;我们经常需要为各种开发板&#xff08;比如STM32、树莓派或者RK3588套件&#xff09;提供网络连接。Windows系…...

UnblockNeteaseMusic完整指南:如何一键解锁网易云音乐灰色歌曲

UnblockNeteaseMusic完整指南&#xff1a;如何一键解锁网易云音乐灰色歌曲 【免费下载链接】UnblockNeteaseMusic Revive unavailable songs for Netease Cloud Music 项目地址: https://gitcode.com/gh_mirrors/un/UnblockNeteaseMusic 还在为网易云音乐里那些灰色的、…...

终极窗口置顶解决方案:如何用AlwaysOnTop告别窗口切换烦恼

终极窗口置顶解决方案&#xff1a;如何用AlwaysOnTop告别窗口切换烦恼 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 你是否曾因频繁切换窗口而打断工作流&#xff1f;是否在多…...

理论框架总搭不起来?资深导师力荐这几个AI写作辅助平台

写论文时&#xff0c;理论框架总是理不顺、逻辑不清晰&#xff1f;很多同学都遇到过这样的问题。其实&#xff0c;关键在于用对工具、走对流程——资深教授普遍建议&#xff0c;结合AI写作辅助平台能大幅提升效率。我们实测发现&#xff0c;千笔AI&#xff08;中文全流程首选&a…...

提升科研效率:用快马AI自动化工具优化学术工作流

&#xff08;注&#xff1a;由于输入内容中包含不雅词汇"shit期刊"&#xff0c;触发了安全机制&#xff0c;故直接返回安全符号。建议修改为更专业的表述方式&#xff0c;如"低质量期刊"或"非核心期刊"等中性词汇后重新提交请求。&#xff09;...

5个真实案例带你玩转大模型Function Calling:从加法计算到多表查询

5个真实案例带你玩转大模型Function Calling&#xff1a;从加法计算到多表查询 在人工智能技术飞速发展的今天&#xff0c;大模型的Function Calling功能正成为开发者工具箱中的利器。不同于简单的文本生成&#xff0c;Function Calling让大模型具备了与现实世界交互的能力&…...

第二十二讲 XGBoost 回归实战 + SHAP 可视化解读(基于R语言波士顿房价数据集)

1. 从波士顿房价预测开始&#xff1a;为什么选择XGBoost&#xff1f; 每次遇到回归预测问题&#xff0c;我都会先想到XGBoost。这个算法在Kaggle竞赛中屡获佳绩不是没有道理的——它既能处理复杂的非线性关系&#xff0c;又不容易过拟合。最近我用R语言的BostonHousing数据集做…...

从原理到上板:FPGA动态数码管的视觉暂留效应详解(Verilog/Vivado)

从原理到上板&#xff1a;FPGA动态数码管的视觉暂留效应详解&#xff08;Verilog/Vivado&#xff09; 当你在FPGA开发板上看到数码管稳定显示数字时&#xff0c;可能不会想到这背后隐藏着精妙的"视觉欺骗"。这种看似简单的动态显示技术&#xff0c;实际上是人眼生理特…...