运维必会: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年 发明了一种解决上…...
全栈自动化测试技术笔记(二):准备工作的切入点
自动化测试技术笔记(二):准备工作的切入点 上篇整理的技术笔记,聊了自动化测试的前期调研工作如何开展,最后一部分也提到了工作的优先级区分。 这篇文章,接上篇文章的内容,来聊聊自动化测试前期的准备工作࿰…...
57 长短期记忆网络(LSTM)【动手学深度学习v2】
57 长短期记忆网络(LSTM)【动手学深度学习v2】 深度学习学习笔记 学习视频:https://www.bilibili.com/video/BV1JU4y1H7PC/?spm_id_fromautoNext&vd_source75dce036dc8244310435eaf03de4e330 长短期记忆网络(LSTM)…...
算法第十五期——动态规划(DP)之各种背包问题
目录 0、背包问题分类 1、 0/1背包简化版 【代码】 2、0/ 1背包的方案数 【思路】 【做法】 【代码】 空间优化1:交替滚动 空间优化2:自我滚动 3、完全背包 【思路】 【代码】 4、分组背包 核心代码 5、多重背包 多重背包解题思路1:转化…...
实现复选框全选和全不选的切换
今天,复看了一下JS的菜鸟教程,发现评论里面都是精华呀!! 看到函数这一节,发现就复选框的全选和全不选功能展开了讨论。我感觉挺有意思的,尝试实现了一下。 1. 全选、全不选,两个按钮ÿ…...
React hooks之useState用法(一)
系列文章目录 学习React已经有很长的一段时间了,今天决定重新回顾一下跟React相关的一些知识点 文章目录系列文章目录结构如下一、hooks是什么?useState可以能做什么二、如何使用useState()第一步:创建【函数组件&…...
spring的简单理解
目录 1 .ioc容器(控制反转) 2. Aop面向切面编程 3. 事务申明 4. 注解的方式启动 5. spring是什么与他的优势 6. 代理设计模式(比如aop) 7. springmvc中相应json数据 8. 使用lombok来进行对代码的简化 9. 使用logback记录…...
Docker调用Intel集显实现FFmpeg硬解码
文章目录Docker调用Intel集显实现FFmpeg硬解码参考FFmpeg 集成qsv方式一 容器完成所有步骤方式二 容器完成部分步骤方式三 dockerfile部署Docker调用Intel集显实现FFmpeg硬解码 参考 ffmpeg_qsv_docker拉取该镜像可以实现FFmpeg集成vaapi的硬加速,通过dockerfile文…...
端到端模型(end-to-end)与非端到端模型
一、端到端(end to end) 从输入端到输出端会得到一个预测结果,将预测结果和真实结果进行比较得到误差,将误差反向传播到网络的各个层之中,调整网络的权重和参数直到模型收敛或者达到预期的效果为止,中间所…...
uniApp封装一个滑块组件
最近 项目中有一个需求 PC端动态设计的表单 移动端要能渲染出来 那么 就要去找到对应的组件 而其中 没有的 就包括滑块 没有又能怎么办 只能自己封装一个 我们直接上代码 <template><view class"u-slider" tap"onClick" :class"[disabled…...
运动基元(二):贝塞尔曲线
贝塞尔曲线是我第一个深入接触并使用于路径规划的运动基元。N阶贝塞尔曲线具有很多优良的特性,例如端点性、N阶可导性、对称性、曲率连续性、凸包性、几何不变性、仿射不变性以及变差缩减性。本章主要介绍贝塞尔曲线用于运动基元时几个特别有用的特性。 一、贝塞尔曲线的定义 …...
海东市公司网站建设/今天的国内新闻
选择文件之后自动上传文件: 这里uploadAsync的值为ture(默认),则会走fileuploaded回调(能获取到previewId,所以我会用异步);如果为false,则会走filebatchuploadsuccess回调(获取不到previewId) $(document).ready(fu…...
横琴高新区最新/长沙seo外包优化
将图片转换成HTML格式的文字图程序源代码■ 将图片转换成HTML格式的文字图————————————————以下为程序代码—————————————using System;using System.Drawing;using System.Text;namespace http://doc.wendoc.com.ClassLib{/// /// 将图片转换为Ht…...
电子商务网站规划的内容/网络营销专业学什么课程
参考 http://www.open-open.com/lib/view/open1423558996951.html 参考 http://www.tuicool.com/articles/nyInQfF 从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取…...
扬州市做网站/怎么创建自己的免费网址
1. 图片素材导入 将 Texture Type 改为 Sprite(2D and UI)。 图集(一幅图里含多张图片)要将 Sprite Mode 设为 Multiple。 2. 制作动画 最简单的方法是直接将所有图片拖到 Hierarchy 窗口,可以直接创建动画。 3. 更换 Sprite 的显示 修改 Spr…...
农业网站建设费用预算/南京seo外包平台
随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) Handler类主要有两个作用:在新启动的线程中发送消息。在主线程中获取、处理消息。当新启动的线程发送消息时,Handler类中处理消息的方法会…...
濮阳河南网站建设/网络营销推广要求
Push-Pull推挽输出Open-Drain开漏输出原理输出的器件是指输出脚内部集成有一对互补的MOSFET,当Q1导通、Q2截止时输出高电平;而当Q1截止导通、Q2导通时输出低电平开漏电路就是指以MOSFET的漏极为输出的电路。指内部输出和地之间有个N沟道的MOSFET(Q1)&…...