运维必会:ansible剧本(piaybook)
playbooks 概述以及实例操作
Playbooks 组成部分:
Inventory
Modules
Ad Hoc Commands
Playbooks
Tasks: 任务,即调用模块完成的某些操作
Variables: 变量
Templates: 模板
Handlers: 处理器,由某时间触发执行的操作
Roles: 角色
YAML 介绍
YAML 是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言。
YAML Ain’t Markup Language,即YAML不是XML。
其特性:
可读性好
和脚本语言的交互性好
使用时限语言的数据类型
有一个一直的信息模型
易于实现
可以基于流来处理
表达能力强,扩展型好
YAML 语法
YAML 的语法和其他高阶语言类似,并且可以简单表达清单、散列表、变量等数据结构。其结构(Structure)通过空格来展示,序列(Squence)里的项用-来代办,Map里的键值对用:分割
案例
name: John Smith
age: 41
gender: Male
spouse:name: Jane Smithage: 37gennder: Female
children:- name: Jimmy Smithage: 17gender: Male- name: Jenny Smithage: 13gender: Female
YAML 文件扩展名通常为: .yaml,如 example.yaml
List
列表中的所有元素均使用-打头,例如:
# A list of t asty fruits
- Apple
- Orange
- Strawberry
- Mango
Dictionary
字典通过key与value进行表示,例如:
# An exployee record
name: Example Developer
job: Developer
skill: Elite
也可以将key:value 放置于{}中进行描述
# An exployee record
{name: Example Developer, job: Developer, skill: Elite}
Ansible 基础元素
变量
变量名仅能由字母、数字和下划线组成,且只能以字母开头。
facts
facts是由正在通信的远程目标主机发挥的信息,这些信息被保存在ansible变量中,要获取指定额远程主机所支持的所有facts,可以使用如下命令进行:
#ansible hostname -m setup
registre
把任务的输出定义为变量,然后用于其他任务,示例如下:
tasks:
- shell: /usr/bin/fooregister: foo_resultignore_errors: true
通过命令传递变量
在运行playbook的时候也可以通过一些变量供playbook使用,示例如下:
ansible-playbook test.yml --extra-vars "hosts=www user=mageedu"
通过roles传递变量
当一个主机应用角色的时候可以传递变量,然后在角色内使用这些变量,示例如下:
- hosts: webservsroles:- common- { role: foo_app_instance, dir: '/web/htdocs/a.com', port: 8080 }
Inventory
ansible 的主要功能在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的Inventory file 为 /etc/ansible/hosts。
inventory file 可以有多个,且也可以通过Dynamic Inventory来动态生成
主机变量
可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用。例如:
[webservs]
10.0.0.65 http_port=80 maxRequestsPerChild=888
10.0.0.66 http_port=8080 maxRequestsPerChild=909
组变量
组变量是指赋予给特定组内所有主机上在playbook中可用的变量。例如:
[webservs:vars]
ntp_server=ntp.aliyun.com
nfs_server=nfs.aliyun.com
注意:[组名:vars] 组名中的:vars 是固定用法
组嵌套
inventory中,组还可以包含其他的组,并且也可以像组中的主机指定变量。不过这些变量只能在ansible-playbook中使用,而不支持ansible。例如:
[apache]
http1.magedu.com
http2.magedu.com
[nginx]
nginx1.magedu.com
nginx2.magedu.com
[webservs:children]
apache
nginx
[webservs:vars]
ntp_server=ntp.magedu.com
注意::childer 同样是固定用法
inventory 参数
ansible基于ssh链接inventory中指定的远程主机时,还可以通过参数指定其交互方式;这些擦桉树如下所示:
ansible_ssh_host
ansible_ssh_port
ansible_ssh_user
ansible_ssh_pass
ansible_sudo_pass
ansible_connection
ansible_ssh_private_key_file
ansible_shell_type
ansible_python_interpreter
ansible_*_interpreter
编写 ansible playbooks 剧本
playbook是由一个或多个play组成的列表。play的主要功能在于将事先归并一组的主机装扮成事先通过ansible中的tasks定义好的角色。从根据上来讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,既可以让他们联通起来按事先编排的机制同唱一台大戏。下面是一个简单的示例:
- hosts: webnodesvars:http_port: 80max_clients: 256remote_user: roottasks:- name: ensure apache is at the lastest versionyum: name=httpd state=latest- name: ensure apache is runningservice: name=httpd state=startedhandlers:- name: restart apacheservice:name=httpd state=restarted

playbook 基础组件
Hosts 和 Users
playbook 中的每一个play的目的都是为了让某个或某些主机一某个指定的用户执行任务。hosts用于指定要执行指定任务的主机,其可以使一个或多个由冒号分割主机组;remote_user则用于指定远程主机上的执行任务的用户。例如上面示例中的:
- hosts: webnodesremote_user: root

不过,remote_user也可用于各task中,也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务,甚至可以在sudo时sudo_user指定sudo时切换的用户。
- hosts: webnodesremote_user: mageedutasks:- name: test connectionping:remote_user: mageedusudo: yes

任务列表和action
play的主体部分是task list。task list中的个任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。在运行playbook 时,如果中途发生错误,所有已执行任务都将会滚,因此,在更正playbook后重新执行一次即可。
task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致。
每个task都应该有其name,用于playbook的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤,如果为提供name,则action的结果将用于输出
定义task的可以使用"action: module options" 或 “module: options” 的格式,推荐使用候着以实现向后兼容。如果action一行的内容过度,也使用在行首使用几个空白字符进行换行
tasks:
- name: make sure apache is runningservice: name=htpd state=running

在众多模块中,只有command 和shell模块仅需要给一个列表而无需使用"key=vale"格式,例如:
tasks:
- name: disable selinuxcommand: /sbin/setenforce 0

如果命令或脚本的退出码不为零,可以使用如下方式替代:
tasks:
- name: run this command and ignore the resultshell: /usr/bin/somecommand || /bin/trueignore_errors: true

或者使用ignore_errors来忽略错误信息
tasks:
- name: run this command and ignore the resultshell: /usr/bin/somecommandignore_errors: true

playbook 案例 1
在所有的webservs组的主机上创建nginx用户和用户组
并模拟拷贝文件到dbservs中
[root@node01 ansible]# cat nginx.yml
- hosts: webservsremote_user: roottasks:- name: create nginx groupgroup: name=nginx system=yes gid=208- name: create nginx useruser: name=nginx system=yes uid=208 group=nginx
- hosts: dbservsremote_user: roottasks:- name: copy file to dbservscopy: src=/etc/inittab dest=/tmp/inittab.ans

使用ansible-playbook命令执行:
[root@node01 ansible]# ansible-playbook nginx.yml
PLAY [webservs] ***********************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************
ok: [10.0.0.65]
TASK [create nginx group] *************************************************************************************************
changed: [10.0.0.65]
TASK [create nginx user] **************************************************************************************************
changed: [10.0.0.65]
PLAY [dbservs] ************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************
ok: [10.0.0.66]
TASK [copy file to dbservs] ***********************************************************************************************
ok: [10.0.0.66]
PLAY RECAP ****************************************************************************************************************
10.0.0.65 : ok=3 changed=2 unreachable=0 failed=0
10.0.0.66 : ok=2 changed=0 unreachable=0 failed=0

验证: webservs的nginx用户和组以及dbservs的/tmp/inittab.ans文件
[root@node01 ansible]# ansible webservs -a 'grep nginx /etc/passwd'
10.0.0.65 | CHANGED | rc=0 >>
nginx:x:208:208::/home/nginx:/bin/bash
[root@node01 ansible]# ansible webservs -a 'grep nginx /etc/group'
10.0.0.65 | CHANGED | rc=0 >>
nginx:x:208:
[root@node01 ansible]# ansible dbservs -a 'ls -l /tmp/inittab.ans'
10.0.0.66 | CHANGED | rc=0 >>
-rw-r--r-- 1 root root 511 Oct 12 10:38 /tmp/inittab.ans

相关文章:
运维必会:ansible剧本(piaybook)
playbooks 概述以及实例操作 Playbooks 组成部分: Inventory Modules Ad Hoc Commands Playbooks Tasks: 任务,即调用模块完成的某些操作 Variables: 变量 Templates: 模板 Handlers: 处理器,由某时间触发执行的操作 Roles: 角色 YAML 介绍…...
活动星投票午间修身自习室制作在线投票投票制作网页
“午间修身自习室”网络评选投票_免费小程序投票推广_小程序投票平台好处手机互联网给所有人都带来不同程度的便利,而微信已经成为国民的系统级别的应用。现在很多人都会在微信群或朋友圈里转发投票,对于运营及推广来说找一个合适的投票小程序能够提高工…...
C#泛型:高级静态语言的效率利器
文章目录引入类型约束子类泛型常用的泛型数据结构前文提要: 💎超快速成,零基础掌握C#开发中最重要的概念💎抽丝剥茧,C#面向对象快速上手💎Winform,最友好的桌面GUI框架💎懂了委托&a…...
澳大利亚访问学者申请流程总结
澳大利亚访问学者申请需要注意些什么?下面知识人网小编整理澳大利亚访问学者申请流程总结。1、取得wsk英语成绩,现在都是先买票再上车了。2、联系外导,申请意向接收函(email)。3、向留学基金委CSC提出申请。4、获批后,申请正式邀请…...
cookie和Session的作用和比较
目录 什么是cookie cookie的工作原理 什么是session Session的工作原理 为什么会有session和cookie cookie和session如何配合工作 cookie和Session作用 什么是会话 什么是cookie cookie是web服务器端向我们客户端发送的一块小文件,该文件是干嘛的呢…...
测试员都是背锅侠?测试人员避“锅”攻略,拿走不谢
最近发生了一起生产事故,究其根源,事故本身属于架构或者需求层面需要规避的问题,测试人员的责任其实是非常小的,但实际情况是:相关测试人员因此承担了很大的压力,成为质量问题的“背锅侠”。 实际上&#…...
C++: C++模板<template>
C template content😊前言😁模板💕1、泛型编程😍2、函数模板😒2.1:函数模板概念👌2.2:函数模板的格式😘2.3:函数模板原理😁2.4:函数模…...
chmod命令详解
用法:chmod [选项]… 模式[,模式]… 文件… 或:chmod [选项]… 八进制模式 文件… 或:chmod [选项]… --reference参考文件 文件… Change the mode of each FILE to MODE. With --reference, change the mode of each FILE to that of R…...
状态机设计中的关键技术
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库…...
单片机开发---ESP32S3移植NES模拟器(二)
书接上文 《单片机开发—ESP32-S3模块上手》 《单片机开发—ESP32S3移植lvgl触摸屏》 《单片机开发—ESP32S3移植NES模拟器(一)》 暖场视频,小时候称这个为—超级曲线射门!!!!!&am…...
微信小程序nodej‘s+vue警局便民服务管理系统
本文首先介绍了设计的背景与研究目的,其次介绍系统相关技术,重点叙述了系统功能分析以及详细设计,最后总结了系统的开发心得在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括“最多跑一次”微信小程序的网络应用,在外国小程序的使用已经是很普遍的方…...
第18章 MongoDB $type 操作符教程
MongoDB $type 操作符 描述 在本章节中,咱们将继续讨论MongoDB中条件操作符 $type。 $type操作符是基于BSON类型来检索集合中匹配的数据类型,并return 结果。 MongoDB 中可以使用的类型如下表所示: 类型数字备注Double1 String2 Object3…...
【MySQL主从复制】快速配置
本文配置环境Windows和Linux。 windows主 Linux 从 一、主库配置 首先保证Linux和防火墙开启3306端口或关闭防火墙。 登录Mysql管理员账户: GRANT REPLICATION slave,reload,super ON *.* TO root@从库ip地址 IDENtIFIED BY root; flush privileges; 本地的mysql可以被:…...
Typescript - interface 关键字(通俗易懂的详细教程)
前言 简单来说,Interface 就是一种描述对象或函数的东西。 您可以把 interface 理解为形状,真实开发情况下,一个对象需要有什么样的属性,函数需要什么参数或返回什么样的值,数组应该是什么样子的,一个类和继…...
【计组】内存和总线
课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 一、虚拟内存和内存保护 日常使用的操作系统下,程序不能直接访问物理内存。内存需要被分成固定大小的页(Page),再通过虚拟内存地址(Virtu…...
CUDA中的数学方法
CUDA中的数学方法 文章目录CUDA中的数学方法1. Standard FunctionsSingle-Precision Floating-Point FunctionsDouble-Precision Floating-Point Functions2. Intrinsic FunctionsSingle-Precision Floating-Point FunctionsDouble-Precision Floating-Point Functions参考手册…...
Elasticsearch基本概念和索引原理
一、Elasticsearch是什么? Elasticsearch是一个基于文档的NoSQL数据库,是一个分布式、RESTful风格的搜索和数据分析引擎,同时也是Elastic Stack的核心,集中存储数据。Elasticsearch、Logstash、Kibana经常被用作日志分析系统&…...
《NFL橄榄球》:堪萨斯城酋长·橄榄1号位
堪萨斯城酋长队(Kansas City Chiefs)是位于密苏里州堪萨斯城的职业美式橄榄球队;目前在全国橄榄球联盟隶属于美国橄榄球联合会(AFC)西区;其夏季训练营在威斯康星大学河瀑校区举行。 酋长队的前身是达拉斯得州佬队,这支…...
python+django在线教学网上授课系统vue
随着科技的进步,互联网已经开始慢慢渗透到我们的生活和学习中,并且在各个领域占据着越来越重要的部分,很多传统的行业都将面临着巨大的挑战,包括学习也不例外。现在学习竞争越来越激烈,人才的需求量越来越大࿰…...
二叉搜索树之AVL树
AVL树的概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决上…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...
npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...
构建Docker镜像的Dockerfile文件详解
文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...
Ubantu-Docker配置最新镜像源250605
尝试其他镜像加速器 阿里云镜像加速器:登录阿里云,进入容器镜像服务获取专属加速器地址。毫秒镜像:https://docker.1ms.run。DockerHub镜像加速器:https://docker.xuanyuan.me。Docker Hub 镜像加速服务:https://dock…...
