【星海出品】ansible入门(二) playbook
核心是管理配置进行批量节点部署。
执行其中的一些列tasks。
playbook由YAML语言编写。
YAML的格式如下:
文件名应该以 .yml 结尾
1.文件的第一行应该以“—”(三个连字符)开始,表明YAML文件的开始。
2.在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
3.YAML中的列表元素以“-”开头并且跟着一个空格。后面为元素内容。
4.同一个列表之中的元素应该保持相同的缩进,否则会被当做错误处理。
5.play中hosts、variables、roles、tasks等对象的表示方法都是以键值中间以“:”分隔表示,并且“:”之后要加一个空格。
---
- hosts: node1 #hosts指示使用哪个主机或者主机组来运行下面的tasks,host也可以使用通配符格式.remote_user: root #remote_user:指定远端主机的哪个用户来登录远端系统,在远端系统执行task的用户,可以任意指定,也可以使用sudo,但是用户必须要有执行相应的task权限。tasks: #执行的核心- name: install mysql-server packageyum: name=mysql-server state=present- name: starting mysqld serviceservice: name=msyql state=started
一。主机或者主机组在inventorry清单中指定,可以使用系统默认的/etc/ansible/hosts
也可以自己编辑,在运行的时候加上-i 选项指定清单的位置。
在运行清单文件的时候, --list-hosts选项会显示哪些主机将会参与执行task的过程中。
二。使用ansible-playbook运行playbook文件,得到的输出信息中,信息内容为JSON格式,并且由不同的颜色组成,便于识别。
[root@ansible ansible]# ansible-playbook roles.yml
如何定义一个role
[root@ansible ansible]# pwd
/etc/ansible
[root@ansible ansible]# ls
ansible.cfg hosts nginx.yml roles
Mkdir:创建文件夹
Mkdir -p :创建嵌套式文件夹
Mkdir -v :显示过程
Mkdir -pv:同时创建多个文件夹
roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制
[root@ansible roles]# ls
[root@ansible roles]# mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}
[root@ansible roles]# tree
.
├── httpd
│ ├── default
│ ├── files
│ ├── handlers
│ ├── meta
│ ├── tasks
│ ├── templates
│ └── vars
├── mysql
│ ├── default
│ ├── files
│ ├── handlers
│ ├── meta
│ ├── tasks
│ ├── templates
│ └── vars
└── nginx├── default├── files├── handlers├── meta├── tasks├── templates└── vars[root@ansible nginx]# pwd
/etc/ansible/roles/nginx
用于定义此角色用到的各handler:在handler中使用include包含的其他的handler文件也应该位于此目录中;
files目录:存放由copy或script等模块调用的文件;
templates目录:templates模块会自动在此目录中寻找Jinja2模板文件;
tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其他的位于此目录中的task文件;
handlers目录:此目录中应当包含一个main;
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3及其以后的版本才支持
default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件;
.
├── default
├── files
│ └── nginx-1.18.0-1.el7.ngx.x86_64.rpm
├── handlers
│ └── main.yml
├── meta
├── tasks
│ └── main.yml
├── templates
│ └── nginx.conf.j2
└── vars└── main.yml
[root@ansible ]# cp /var/cache/yum/x86_64/7/nginx/packages/nginx.rpm /etc/ansible/roles/nginx/files/
[root@ansible ]# cp /tmp/nginx.conf.j2 /etc/ansible/roles/nginx/templates/
[root@ansible nginx]# ls tasks/
main.yml
[root@ansible nginx]# cat tasks/main.yml
- name: cpcopy: src=nginx.rpm dest=/tmp/nginx.rpm
- name: installyum: name=/tmp/nginx.rpm state=latest
- name: conftemplate: src=nginx.conf.j2 dest=/etc/nginx/nginx.conftags: nginxconfnotify: new conf to reload
- name: start serviceservice: name=nginx state=started enabled=true
修改变量文件
cat vars/main.yml
nginxport: 9999
定义handlers文件
[root@ansible nginx]# cat handlers/main.yml
- name: new conf to reloadservice: name=nginx state=restarted
[root@ansible ansible]# pwd
/etc/ansible
[root@ansible ansible]# cat roles.yml
- hosts: webremote_user: rootroles:- nginx
[root@ansible nginx]# cat handlers/main.yml
- name: new conf to reloadservice: name=nginx state=restarted
[root@ansible nginx]# cat tasks/main.yml
- name: cpcopy: src=nginx-1.18.0-1.el7.ngx.x86_64.rpm dest=/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm
- name: installyum: name=/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm state=latest
- name: conftemplate: src=nginx.conf.j2 dest=/etc/nginx/nginx.conftags: nginxconfnotify: new conf to reload
- name: start serviceservice: name=nginx state=started enabled=true
[root@ansible nginx]# cat templates/nginx.conf.j2 user nginx;
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;
server {listen {{ nginxport }};
}include /etc/nginx/conf.d/*.conf;
}
[root@ansible nginx]# cat vars/main.yml
nginxport: 9999
相关文章:
【星海出品】ansible入门(二) playbook
核心是管理配置进行批量节点部署。 执行其中的一些列tasks。 playbook由YAML语言编写。 YAML的格式如下: 文件名应该以 .yml 结尾 1.文件的第一行应该以“—”(三个连字符)开始,表明YAML文件的开始。 2.在同一行中,#之…...
Spring Boot对账号密码进行加密储存
未来避免明文硬编码,我们需要对密码进行加密保存,例如账号密码 方法 在Spring Boot中,可以使用Jasypt(Java Simplified Encryption)库来对敏感信息进行加密和解密。Jasypt提供了一种简单的方式来在应用程序中使用加密…...
总结js中常见的层次选择器
js中的层次选择器可以用于选择和操作DOM树中的元素,根据元素的层级关系进行选择。以下是js中常见的层次选择器: 1. getElementById:使用元素的ID属性进行选择。通过给元素设置唯一的ID属性,可以使用getElementById方法选择该元素…...
阿里云ECS服务器上启动的portainer无法访问的问题
如下图,在阿里云ECS服务器上安装并启动了portainer,但是在自己电脑上访问不了远程的portainer。 最后发现是要在网络安全组里开放9000端口号,具体操作如下: 在云服务器管理控制台点击左侧菜单中的网络与安全-安全组,然…...
JavaScript系列从入门到精通系列第十八篇:JavaScript中的函数作用域
文章目录 前言 一:函数作用域 前言 我们刚才提到了,在<Script>标签当中进行定义的变量、对象、函数对象都属于全局作用域,全局作用域在页面打开的时候生效在页面关闭的时候失效。 一:函数作用域 调用函数时创建函数作用域…...
开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
[C]嵌入式中变量存储方案
#include<stdio.h>#define uint8_t unsigned char #define uint16_t unsigned short #define uint24_t unsigned int #define uint32_t unsigned int #define uint64_t unsigned long long//用户自定义变量名字,用于存储 typedef enum {first_run 0,//…...
热迁移中VirtIO-PCI设备的配置空间处理
文章目录 问题现象定位过程日志分析源端目的端 原理分析基本原理上下文分析复现分析patch分析 总结解决方案 问题现象 集群升级虚拟化组件版本,升级前存量运行并挂载了virtio磁盘的虚拟机集群内热迁移到升级后的节点失败,QEMU报错如下: 202…...
模拟滤波器的基础知识和设计
信号处理工作中滤波器的应用是非常广泛的,可以分成模拟滤波器和数字滤波器两种,数字滤波器主要包括两种,IIR和FIR,这两种滤波器后面统一说,今天先来说一说模拟滤波器(主要是我先用Python实现了Matlab书里面…...
机器学习基础-Pandas学习笔记
Pandas Python的数据分析库,与Numpy配合使用,可以从常见的格式如CSV、JSON等中读取数据。可以进行数据清洗、数据加工工作。数据结构Series,Pandas.Series(data,index,dtype,name,copy) data类型是Numpy的ndarray类型,index指定下…...
【GIT版本控制】--协作流程
一、Fork与Pull Request Git协作流程中的关键概念包括Fork和Pull Request,它们允许多人在项目中协作并贡献代码。以下是关于Fork和Pull Request的简要总结: 1. Fork: Fork是指复制一个Git仓库,通常是一个开源项目的仓库…...
简析Cookie、Session、Token
手打不易,如果转摘,请注明出处! 注明原文:https://zhangxiaofan.blog.csdn.net/article/details/133498756 文章目录 简析Cookie、Session、Token什么是 Cookie ?什么是 Session ?Cookie 和 Session 到底是…...
加速attention计算的工业标准:flash attention 1和2算法的原理及实现
transformers目前大火,但是对于长序列来说,计算很慢,而且很耗费显存。对于transformer中的self attention计算来说,在时间复杂度上,对于每个位置,模型需要计算它与所有其他位置的相关性,这样的计…...
小程序获取用户手机号
在小程序中获取用户手机号需要以下步骤: 首先需要授权用户手机号,即在小程序中调用 wx.login() 方法获取用户的登录凭证,在回调函数中调用 wx.getUserInfo() 方法获取用户的个人信息,并且设置 withCredentials 参数为 true。 在获…...
Zama的fhEVM:基于全同态加密实现的隐私智能合约
1. 引言 Zama的fhEVM定位为: 基于全同态加密实现的隐私智能合约 解决方案 开源代码见: https://github.com/zama-ai/fhevm(TypeScript Solidity) Zama的fhEVM协议中主要包含: https://github.com/zama-ai/tfhe-…...
Mac M1安装ROS1或ROS2
1.首先进入Anaconda官网,安装Anaconda 2.创建、激活并配置环境 #创建环境 conda create -n ROS #激活环境 conda activate ROS #配置环境 conda config --add channels conda-forge conda config --add channels robostack conda config --set channel_priority st…...
[NISACTF 2022]popchains - 反序列化+伪协议
[NISACTF 2022]popchains 一、解题流程二、小小疑惑 一、解题流程 1、链条:Road_is_Long(construct->wakeup【page$r】-> toString【string$m】)-> Make_a_Change(construct->get【effort$t】)-> Try_W…...
分贝定义简介
一、什么是分贝 辅助单元Bel表示任何给定部件、电路或系统的输入和输出之间的对数比L,并且可以用电压、电流或功率来表示: 如果使用场量(电压或电流)代替功率量,则: 我们可以将增益或损耗因子相加为正或负dB值,而不是将其乘以比率。 分贝与功率转化的速读表如下所示:…...
socket简介
套接字(Socket)实质上就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,为应用层进程利网络协议交换数据提供了相应机制。套接字出于承上启下的作用,向上连接应用进程…...
【AI视野·今日Robot 机器人论文速览 第四十九期】Fri, 6 Oct 2023
AI视野今日CS.Robotics 机器人学论文速览 Fri, 6 Oct 2023 Totally 29 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚ContactGen, 基于生成模型的抓取手势生成,类人五指手。(from 伊利诺伊大学 香槟) 数据集:GRAB da…...
七、互联网技术——SQL查询
文章目录 一、基础查询二、高级查询三、SQL视图一、基础查询 某学校的教学信息关系数据库中有如下两个表(表的名字和字段均用中文名字)学生表(学号,姓名,性别,专业)成绩表(学号,课程名,分数)用SQL语句表达下述查询:[问题1]检索分数高于80分的所有学生的学号和分数select 学…...
1.6 计算机网络的性能
思维导图: 1.6.1 计算机网络的性能指标 前言: 我的理解: 这段前言主要介绍了关于计算机网络性能的两个方面的讨论。首先,计算机网络的性能可以通过一些重要的性能指标来衡量。但除了这些指标之外,还有一些非性能特征…...
小程序中如何核销订单和优惠券
小程序已成为许多商家线上线下开展业务的重要渠道。客户在小程序中下单/领券后,可能需要商家现场扫码核销,例如超市购物、卖票、游乐园等线下场景。下面就介绍小程序中如何核销订单和优惠券。 一、订单核销 订单核销是指商家在小程序中确认顾客已经支付…...
211 毕业就入职 30 人的小公司是什么体验
为什么“选择”了 30 人的小公司? 作为一个 211 毕业的学生,进入 30 人的小公司不管是 8 年前还是现在,应该都是比较稀少的,但是当面的我阴差阳错进了这样一个小公司。 为什么我选择进入这样一个 30 人的小公司呢?主…...
aardio 读取 Excel文件,显示在 listview 中
编写 main.aardio 如下 import win.ui; /*DSG{{*/ winform win.form(text"excel1";right801;bottom500) winform.add( button1{cls"button";text"读取Excel文件";left19;top14;right126;bottom44;z1}; button2{cls"button";text&quo…...
Web:前端常用的几种Http请求GET和POST样例
1、简述 在Web开发过程中,少不了发起Http请求服务端的接口数据,在不同的框架中使用了不同的Http请求方式,常用的请求有fetch、 ajax、 axios、XMLHttpRequest、request,以下样例仅供参考。 2、Fetch Fetch API 是一种 JavaScr…...
clickonce 发布的winform 如何CA认证?
要为使用ClickOnce发布的WinForms应用程序启用CA(证书颁发机构)认证,您可以按照以下步骤进行操作: 1. **获取数字证书**: - 首先,您需要获得一个数字证书,通常从受信任的CA购买。这个数字证…...
#力扣:13. 罗马数字转整数@FDDLC
13. 罗马数字转整数 一、Java import java.util.HashMap;class Solution {public int romanToInt(String s) {HashMap<Character, Integer> m new HashMap<>() {{put(I, 1);put(V, 5);put(X, 10);put(L, 50);put(C, 100);put(D, 500);put(M, 1000);}};char[] a …...
React18入门(第一篇)——JSX、TSX语法详解
文章目录 一、JSX 语法简介二、和 HTML 标签的几点不同三、JSX 属性四、JSX 事件4.1 简单点击事件4.2 类型限制4.3 带参数,箭头函数 五、插入 JS 变量六、JSX 中使用条件判断七、循环 一、JSX 语法简介 JSX - 是 JS 的扩展,写在 JS 代码里面,…...
【计算机基础知识】字符的编码表示
欢迎来到我的:世界 希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 ! 目录 前言1.西文字符编码2.中文字符编码汉字输入码汉字国标码汉字机内码汉字字形码 总结 前言 计算机处理的数据中,除了数值型数据以外…...
温州网络公司网站建设/恢复正常百度
一、前言我们在使用爬虫程序爬取网页时,一般对于静态页面的爬取是比较简单的,之前写过挺多的案例。但是对于使用js动态加载的页面如何爬取呢?对于动态js页面的爬取有以下几种爬取的方式:通过seleniumphantomjs实现。phantomjs是一…...
w3cschool wordpress/搜索引擎营销的案例
Flink提供了两种在yarn上运行的模式,分别为Session-Cluster和Per-Job-Cluster模式。 Session-cluster 模式: Session-Cluster模式需要先启动集群,然后再提交作业,接着会向yarn申请一块空间后,资源永远保持不变。如果…...
贵阳疫情最新政策/结构优化
第一个问题:“==”与equals的区别 1. ==可以用来比较基本类型和引用类型,判断内容和内存地址 2. equals只能用来比较引用类型,它只判断内容。该函数存在于老祖宗类 java.lang.Object java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型。byte,short,char,…...
163企业邮箱怎么申请/惠州市seo广告优化营销工具
开头 中国互联网发展的这些年,如今90后程序员是中国程序员的主力军,互联网的热潮也让一批批00后蠢蠢欲动,尝试涌入互联网圈。 当程序员容易,当一个优秀的程序员需要不断学习,从初级程序员到高级程序员,从…...
网站建设原理/销售渠道及方式
Vue作者尤雨溪,英文 Evan You艺术硕士,毕业后在 Google Creative Lab工作后转为 全职 JavaScript 开发工程师主要作品 Vue、Vue Router、Vuex、vue/cli github主页:https://github.com/yyx990803Vue.js记录片:https://www.youtube…...
东莞阳光官方网/济南seo网站排名优化工具
全文共1983字,预计学习时长5分钟图源:unsplash写代码必然会出现错误,而错误处理可以针对这些错误提前做好准备。通常出现错误时,脚本会停止运行,而有了错误处理,脚本就可以继续运行。为此,我们需…...