运维必会: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年 发明了一种解决上…...
免费网盘直链解析工具:九个主流网盘的高速下载完整解决方案
免费网盘直链解析工具:九个主流网盘的高速下载完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…...
告别应用层延时!在迅为RK3568开发板上,将RS485收发切换彻底交给Linux内核驱动
告别应用层延时!在迅为RK3568开发板上将RS485收发切换彻底交给Linux内核驱动 工业自动化领域对通信实时性的要求近乎苛刻,当RS485总线上挂载的多个设备响应时间参差不齐时,应用层手动控制的收发切换就像用机械表校准原子钟——看似可行实则漏…...
B站视频下载终极方案:DownKyi全功能解析与高效使用指南
B站视频下载终极方案:DownKyi全功能解析与高效使用指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...
Unity工业级机械仿真:刚体约束链与运动学反解实战
1. 这不是“玩具模型”,而是一套可投产验证的机械运动逻辑沙盒在Unity里做机械结构仿真,很多人第一反应是“做个动画演示”——齿轮转得漂亮、连杆动得丝滑、液压缸伸缩带点粒子特效,导出个MP4发给客户就算交付。但MGS-Machinery这个项目完全…...
终极显卡风扇控制指南:用FanControl彻底解决NVIDIA风扇异常
终极显卡风扇控制指南:用FanControl彻底解决NVIDIA风扇异常 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…...
保姆级教程:在Vue3项目中用ZLMediaKit+WebRTC实现超低延迟监控直播(附完整代码)
Vue3WebRTC超低延迟监控直播实战指南 在实时视频监控领域,延迟是衡量系统性能的核心指标之一。传统RTSP流媒体方案在Web端实现时,往往面临秒级甚至更长的延迟,这在对实时性要求极高的安防监控、工业检测等场景中成为致命短板。本文将深入探讨…...
JSON差异对比终极指南:快速定位JSON数据变化的免费在线工具
JSON差异对比终极指南:快速定位JSON数据变化的免费在线工具 【免费下载链接】online-json-diff 项目地址: https://gitcode.com/gh_mirrors/on/online-json-diff 还在为JSON数据对比而烦恼吗?无论你是前端开发者、后端工程师,还是数据…...
Steam创意工坊下载器深度解析:WorkshopDL架构揭秘与实战指南
Steam创意工坊下载器深度解析:WorkshopDL架构揭秘与实战指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 在跨平台游戏生态日益成熟的今天,Steam创意…...
3个12位ADC+17个定时器+摄像头接口:STM32F207IGT6的电机控制与机器视觉资源
STM32F207IGT6:176引脚工业级MCU的连接性与性能解析在工业自动化、电机控制以及物联网网关等应用中,MCU的性能不仅取决于主频,更取决于内部总线架构对瓶颈的突破。STM32F207IGT6是意法半导体STM32F2系列中的大容量型号,采用2424mm…...
Python金融数据引擎:重构通达信数据获取的技术范式
Python金融数据引擎:重构通达信数据获取的技术范式 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资和金融数据分析领域,数据获取一直是开发者面临的首要挑战。传…...
