温州建站模板搭建/app运营推广策划方案
文章目录
- 在议playbook
- 虚拟环境中安装ansible
- playbook 结合变量的一些演示
- 普通的vars_files 变量,在同级目录创建目录
- 使用host_vars 定义变量
- group_vars定义变量
- 根据不同系统操作不同版本
- 传递多个外置变量
- 举例几个不同的示例
- facts
- when
- loop
- handlers 与 notify
- tags 任务标签
- 异常处理
- nginx 的异常处理
- jinja2
- roles
- roles 示范
在议playbook
主要是使用不同的模块进行编排
如果格式有问题,找chatgpt调整下格式输出就可以
缺点是比较死板,不能成体系
虚拟环境中安装ansible
要在CentOS 7系统上让Ansible使用Python 3,你可以按照以下步骤进行操作:确认你的CentOS 7系统已安装Python 3。你可以通过在终端中运行python3 --version命令来检查是否已安装Python 3。安装Python 3的pip包管理工具。在CentOS 7上,你可以使用以下命令安装:sudo yum install python3-pip
安装python3-devel软件包以支持Python 3的开发库。运行以下命令进行安装:
sudo yum install python3-devel
创建一个Python 3虚拟环境(可选)。虚拟环境可以帮助你隔离Ansible所需的Python包与系统级安装的Python包。使用以下命令创建虚拟环境:
python3 -m venv ansible-env
激活虚拟环境:source ansible-env/bin/activate
安装Ansible和所需的Python包。在虚拟环境中运行以下命令:
pip install ansible
配置Ansible以使用Python 3。打开/etc/ansible/ansible.cfg文件,并找到以下行:
# interpreter_python = auto_silent
取消注释并将其更改为以下内容:interpreter_python = /usr/bin/python3
确认Ansible使用Python 3。运行以下命令来检查:
ansible --version
playbook 结合变量的一些演示
普通的vars_files 变量,在同级目录创建目录
- hosts: webserversvars_files:- ./test.ymltasks:- name: Output Varsdebug:msg:- "{{ http_packages }}"- "{{ db_packages }}"$cat test.yml
test: ansible_vars_files
http_packages: 123
db_packages: 123r返回结果
=> {"msg": [123,null]
}
注意: test.yml 一定要有这个变量,哪怕为空,否则报错test.yml 可以被多个playbook 引用vars_files:- ./test.yml
使用host_vars 定义变量
hosts 配置文件为
[webservers]
1.1.1.1 aaa=2 bbb=master[webservers:vars]
port=80---
- hosts: webserverstasks:- name: output variablesdebug:msg: "{{ aaa }} {{ bbb }} {{ port }}"> {"msg": "2 master 80"
}
group_vars定义变量
在项目目录中创建 group_vars 目录,然后在创建一个文件,文件的文件名称要与
inventory 清单中的组名称保持完全一致;在 group_vars 目录中创建 webservers 文件,为 webservers 主机组设定变
量;"msg": [11,22]
}$cat group_vars/all
web: 11
web1: 22
(ansible-env)$cat t5.yml
- hosts: webserverstasks:- name: Output Vaiables"debug:msg:- "{{ web }}"- "{{ web1 }}"
根据不同系统操作不同版本
注意 www 用户是有sudo 权限 ---
- hosts: webserversbecome: yesbecome_user: wwwtasks:# 通过fact变量判断系统为centos才会安装httpd- name: Centos Install httpdyum: name=httpd state=presentwhen: (ansible_distribution == "CentOS")# 通过fact变量判断系统为ubuntu才会安装httpd2- name: Ubuntu Install httpdyum: name=httpd2 state=presentwhen: (ansible_distribution == "Ubuntu")
传递多个外置变量
ansible-playbook f5.yml -i hosts -e
"web_packages=GeoIP" -e "ftp_packages=telnet"
举例几个不同的示例
- hosts: alltasks:- name:shell: netstat -lntpregister: System_Status- name: Get System Statusdebug: msg={{System_Status.stdout_lines}}
- hosts: webserverstasks:- name: Output variables ansible factsdebug:msg: >this default IPv4 address "{{ ansible_fqdn}}" is "{{ ansible_default_ipv4.address }}"- hosts: alltasks:- name: Ignore Falsecommand: /bin/falseignore_errors: yes- name: touch new filefile: path=/tmp/old state=touch
facts
用来采集客户端信息,
ansible localhost -m setup -a "filter="ansible_default_ipv4""
when
when 判断在 Ansible 中的使用频率非常高;比如 yum 模块可以自动检测软件包是
否已被安装,而无需人为干涉,但对于有些任务则是需要进行判断才可以实现的。
比如: web 节点都需要配置 nginx 仓库,但其他节点并不需要,此时就会用到
when 判断。
比如: Centos 与 Ubuntu 都需要安装 Apache ,而 Centos 系统软件包为
httpd ,而 Ubuntu 系统软件包为 httpd2 ,那么此时就需要判断主机系统,然
后为不同的主机系统安装不同的软件包。hen: (ansible_hostname is match("web*"))
主机名不为web的不做任何处理
loop
loop 是重复
- hosts: web
tasks:
- name: Add Users
user:
name: {{ item.name }}
groups: {{ item.groups }}
state: present
loop:
- { name: 'testuser1', groups: 'bin' }
- { name: 'testuser2', groups: 'root' }- hosts: all
tasks:
- name: Configure Rsync Server
copy: src={{ item.src }} dest=/etc/{{ item.dest }} mode={{
item.mode }}
with_items:
- {src: "rsyncd.conf", dest: "rsyncd.conf", mode: "0644"}
- {src: "rsync.passwd", dest: "rsync.passwd", mode:
"0600"}
handlers 与 notify
Handlers 是一个触发器,同时是一个特殊的 tasks ,它无法直接运行,它需要被
tasks 通知后才会运行。比如: httpd 服务配置文件发生变更,我们则可通过
Notify 通知给指定的 handlers 触发器,然后执行相应重启服务的操作,如果配
置文件不发生变更操作,则不会触发 Handlers 任务的执行;如果配置文件发生变化会调用该handlers下面的对应名称的task
handlers:- name: Restart Httpd Serverservice: name=httpd state=restartedhandlers 注意事项
1.无论多少个 task 通知了相同的 handlers , handlers 仅会在所有
tasks 结束后运行一次。
2.只有 task 发生改变了才会通知 handlers ,没有改变则不会触发
handlers
3.不能使用 handlers 替代 tasks 、因为 handlers 是一个特殊的 tasks
tags 任务标签
默认情况下, Ansible 在执行一个 playbook 时,会执行 playbook 中所有的任
务。而标签功能是用来指定要运行 playbook 中的某个特定的任务;
1.为 playbook 添加标签的方式有如下几种:
对一个 task 打一个标签
对一个 task 打多个标签
对多个 task 打一个标签
2. task 打完标签使用的几种方式
-t 执行指定tag标签对应的任务
--skip-tags 执行除 --skip-tags 标签之外的所有任务ansible-playbook --skip-tags install_server
xxx.yml标签结合include
[root@ansible ~]# cat main.yml
- hosts: localhost
tasks:
- name: Installed Tomcat8 Version
include: install_tomcat8.yml
tags: tomcat8
- name: Installed Tomcat9 Version
include: install_tomcat9.yml
tags: tomcat9
异常处理
- hosts: webserverstasks:- name: configure httpd servertemplate:src: ./httpd.conf.j2dest: /etc/httpd/conf/httpd.confnotify: Restart Httpd Server- name: Check HTTPDshell: /usr/sbin/httpd -tregister: httpd_checkfailed_when: httpd_check.rc != 0 or '"OK"' not in httpd_check.stdout- name: start httpd serverservice:name: httpdstate: startedenabled: yeshandlers:- name: Restart Httpd Serversystemd:name: httpdstate: restarted
nginx 的异常处理
- hosts: webservertasks:- name: Install Nginx Serveryum:name: nginxstate: present- name: Configure Nginx Servertemplate:src: ./nginx.conf.j2dest: /etc/nginx/nginx.confnotify: Restart Nginx Server- name: Check Nginx Servershell: /usr/sbin/nginx -tregister: check_nginxchanged_when: '"successful" in check_nginx.stdout'- name: Start Nginx Serverservice:name: nginxstate: startedenabled: yeshandlers:- name: Restart Nginx Serversystemd:name: nginxstate: restarted在这个标准格式的 Playbook 中,我们在"hosts"中指定了目标主机组,并定义了多个任务。每个任务都有一个名称以及对应的模块和参数。要解决场景1,即要求每台主机的端口都不一样,可以在 Jinja2 模板文件 (nginx.conf.j2) 中使用变量来动态设置端口号。例如,可以通过定义一个名为nginx_port的变量,并在模板文件中使用它来设置 Nginx 的监听端口。要解决场景2,即使用 Jinja2 模板来修改被管理主机的配置文件,我们使用了template模块。该模块会将指定的模板文件复制到远程主机,并在复制过程中解析文件中的变量值。在"Check Nginx Server"任务中,我们使用了changed_when来定义任务的改变条件。只有当检查 Nginx 配置的输出中包含"successful"时,任务才会被标记为已改变。最后,在处理程序部分,我们定义了一个名为"Restart Nginx Server"的处理程序,它会在被通知时使用systemd模块重启 Nginx 服务。请注意,Ansible Playbook 的格式要求严格,正确的缩进和符号使用非常重要。以上提供的输出已经按照标准格式进行了调整。
jinja2
Jinja2 是 Python 的全功能模板引擎
Ansible 需要使用 Jinja2 模板来修改被管理主机的配置文件。
ansible 使用 jinja2 模板需要借助 template 模块实现,那 template 模块是用
来做什么的?
template 模块和 copy 模块完全一样,都是拷贝文件至远程主机,区别在于
template 模块会解析要拷贝的文件中变量的值,而 copy 则是原封不动的将文件拷
贝至被控端。
roles
更加规范,更加标准的去灵活安排你维护的业务
roles 示范
$tree base_module/
base_module/
├── files
├── handlers
├── tasks
│ ├── main.yml
│ └── main.yml_bak
└── templatestree nginx/
nginx/
├── files
├── handlers
│ └── main.yml
├── meta
├── tasks
│ ├── main1.yml
│ ├── main2.yml
│ └── main.yml
└── templates└── nginx.conf.j2cat site.yml
- hosts: allroles:- base_module- name: Install and Configure Nginxhosts: your_hostbecome: yesbecome_user: wwwroles:- nginx$cat base_module/tasks/main.yml
- name: Disable Selinuxselinux:state: disabled- name: Disable Firewalldsystemd:name: firewalldstate: stoppedenabled: no- name: Installed Base SoftWareyum:name: "{{ item }}"state: presentloop:- wget- lrzsz- bind-utils- net-tools- unzip- vim
相关文章:

飞天使-linux操作的一些技巧与知识点6-ansible结合jinja2使用,可规范化进行自动化管控
文章目录 在议playbook虚拟环境中安装ansibleplaybook 结合变量的一些演示普通的vars_files 变量,在同级目录创建目录使用host_vars 定义变量group_vars定义变量根据不同系统操作不同版本传递多个外置变量举例几个不同的示例factswhenloophandlers 与 notifytags 任…...

ROS2 Control分析讲解
ROS2 Control 文章目录 前言简述组成安装 框架Controller ManagerResource ManagerControllersUser Interfaces Hardware ComponentsURDF中的硬件描述机器人运行框架 总结 前言 ros2_control是一个使用(ROS 2)进行机器人(实时)控…...

Java TCP(一对一)聊天简易版
客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…...

2.4 C语言之运算符
2.4 C语言之运算符 一、算术运算符二、关系运算符三、逻辑运算符四、自增自减运算符五、按位运算符六、赋值运算符七、条件表达式八、运算符优先级与求值次序 一、算术运算符 二元算术运算符包括:(加)、-(减)、*(乘)、/(除)、%(取模) 整数除法会截断结果中的小数部…...

做题笔记:SQL Sever 方式做牛客SQL的题目--SQL157
----SQL157 平均播放进度大于60%的视频类别 计算各类视频的平均播放进度,将进度大于60%的类别输出。 注: 播放进度播放时长视频时长*100%,当播放时长大于视频时长时,播放进度均记为100%。 结果保留两位小数,并按播放进…...

微信小程序map视野发生改变时切换定位点
<!--地图--> <view><map id"myMap" style"width: 100%; height: 300px;" latitude"{{latitude}}" longitude"{{longitude}}"scale"{{scale}}" markers"{{markers}}" controls"{{controls}}&q…...

javaweb搭配ajax和json
ajax一般用来前端界面与后端界面交互使用。数据格式一般使用json,优点是便于对象与字符串的转化。 1.不适用json对象封装。 jsp: <script>$.ajax({url: "/LoginServlet",data: {"name":name, "pwd":password},dataType: &qu…...

VS2022 将项目打包,导出为exe运行
我有一个在 VS2022 上开发的程序,基于.net 6框架, 想打包成 .exe程序,以在另一个没有安装VS的机器上运行,另一个机器是Win7系统,上面安装了.net 6框架。 虽然网上很多教程,需要安装Project Installer,配置A…...

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试【DP】2023C-分班【欧弟算法】全网注释最详细分类最全的华为OD真题题解
文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出 示例二输入输出 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前…...

pr模板哪个网站好?免费Pr模板视频素材下载网站 Prmuban.com
pr模板哪个网站好?哪里可以下载免费的pr模板视频素材,PR模板网(Prmuban.com)影视后期制作模板视频剪辑素材资源网站。 包含PR模板、PR插件、PR预设、MOGRT、LUT、转场特效、音乐素材、音效素材等,更好的剪辑师必备资源…...

【论文阅读】LoRA: Low-Rank Adaptation of Large Language Models
code:GitHub - microsoft/LoRA: Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large Language Models" 做法: 把预训练LLMs里面的参数权重给冻结;向transformer架构中的每一层,注入可训练的…...

MybatisPlus的分页插件
PaginationInnerInterceptor 此插件是核心插件,目前代理了 Executor#query 和 Executor#update 和 StatementHandler#prepare 方法。 在SpringBoot环境中配置方式如下: /*** author giserDev* description 配置分页插件、方言、mapper包扫描等* date 2023-12-13 …...

保障网络安全:了解威胁检测和风险评分的重要性
在当今数字时代,网络安全问题变得愈发突出,而及时发现和迅速应对潜在威胁成为保障组织信息安全的首要任务。令人震惊的是,根据2023年的数据,平均而言,检测到一次网络入侵的时间竟然长达207天。这引起了对安全策略和技术…...

3D摄影棚布光:Set A Light 3D Studio
Set A Light 3D Studio是一款专业的灯光模拟软件,旨在帮助摄影师和电影制片人在电脑上进行虚拟灯光布置和场景模拟,以实现更加精准和高质量的拍摄效果。该软件提供了丰富的灯光和场景模型,支持灵活调整光源位置、强度、颜色和效果等参数&…...

#HarmonyOS:应用的包名配置--应用图标和标签配置--配置链接
配置相关 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/application-component-configuration-stage-0000001478340869-V2 应用的包名配置 应用需要在工程的AppScope目录下的app.json5配置文件中配置bundleName标签,该标签用于标识应用的唯…...

docker小白第三天
docker小白第三天 docker为什么会比虚拟机快 1、docker有着比虚拟机更少的抽象层。不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU、内存利用率上docker将会在效率上有明显优势。 2、dock…...

FFmpegd的AVBSF
本章主要介绍AVBSF 文章目录 结构体定义对外函数常见的过滤器 从名字我们可以知道这是个码流过滤器,我们最常用的是一个叫做h264_mp4toannexb_bsf的东东 这个过滤器的作用是把h264以MP4格式的NALU转换为annexb(0x000001) const AVBitStreamF…...

深圳三男子写字楼内吸烟被罚,快用富维AI神器,实时监控防火灾
最近,在深圳,一专项控烟督查组在福田区新华保险大厦发现三名男子在写字楼内楼道违法吸烟,并对其进行了现场处罚。根据《控烟条例》,这类室内区域严禁吸烟,但人们往往忽视这一规定,从而引发潜在的安全风险。…...

有哪些已经上线的vue商城项目?
前言 下面是一些商城的项目,需要练手的同学可以挑选一些来练,废话少说,让我们直接开始正题~~ 1、newbee-mall-vue3-app 是一个基于 Vue 3 和 TypeScript 的电商前端项目,它是 newbee-mall 项目的升级版。该项目包含了商品列表、…...

Nginx服务器配置SSL证书
本文将全面介绍如何在Nginx或Tengine服务器配置SSL证书,具体包括下载和上传证书文件,在Nginx上配置证书文件、证书链和证书密钥等参数,以及安装证书后结果的验证。成功配置SSL证书后,您将能够通过HTTPS加密通道安全访问Nginx服务器…...

【JVM从入门到实战】(六)类加载器的双亲委派机制
一、双亲委派机制 在Java中如何使用代码的方式去主动加载一个类呢? 方式1:使用Class.forName方法,使用当前类的类加载器去加载指定的类。 方式2:获取到类加载器,通过类加载器的loadClass方法指定某个类加载器加载。 …...

SpringCloud面试题及答案(最新50道大厂版,持续更新)
在Java开发中,Spring Cloud作为微服务架构的关键组成部分,为了帮助广大Java技术爱好者和专业开发人员深入理解Spring Cloud,本文《SpringCloud面试题及答案(最新50道大厂版,持续更新)》提供了最前沿、最实用…...

Next.js 的设计理念
Next.js 的设计理念:简洁、强大与高效 Next.js 是一个流行的 React 框架,由 Vercel 公司开发。它的设计理念是简洁、强大和高效,这种理念贯穿于 Next.js 的所有功能中。下面我们将深入探讨这三个设计理念。 简洁 Next.js 的一个核心设计理…...

26、文件包含
文章目录 一、文件包含1.1 概念1.2 PHP文件包含原理1.3 文件包含重要函数1.4 文件包含利用条件 二、文件包含漏洞利用2.1 文件包含分类2.2 常见敏感文件2.3 包含Apache日志文件2.4 常见中间件的日志路径2.5 包含其他日志文件2.5.1 SSH日志文件2.5.2 Session文件 三、PHP封装伪协…...

飞天使-linux操作的一些技巧与知识点4-ansible常用的技巧,配置等
文章目录 ansible配置文件的优先级尝试开始进行操作ansible常用模块ansible 的playbook示例安装phpplaybook中变量的引用 ansible yum install -y ansible 测试是否可用 ansible localhost -m ping /etc/ansible/ansible.cfg :主配置文件,配置 ansible…...

Stable Diffusion 源码解析(1)
参考1:https://blog.csdn.net/Eric_1993/article/details/129393890 参考2:https://zhuanlan.zhihu.com/p/613337342 1.StableDiffusion基本原理1.1 UNetModel、FrozenCLIP 模型1.2 DDPM、DDIM、PLMS算法 2. Runwayml SD 源码2.1 Img2Img Pipeline2.2 DD…...

java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter 报错解决
问题原因: 这有可能是因为SpringBoot项目结合jwt进行用户登录时出现的问题,因为jdk版本太高导致的 解决办法: 方法一: 降低jdk版本 检查JDK版本,如果你是JDK17版本,就降到JDK8版本 方案二:在meven中添加依赖 注意: 如果2.3.1的版本不生效,则使用2.3.0的版本 <…...

Python学习笔记-类
1 定义类 类是函数的集合,class来定义类 pass并没有实际含义,只是为了代码能执行通过,不报错而已,相当于在代码种占一个位置,后续完善 类是对象的加工厂 2.创建对象 carCar()即是创建对象的过程 3、类的成员 3.1 实例…...

了解如何在linux使用podman管理容器
本章主要介绍使用 podman 管理容器。 了解什么是容器,容器和镜像的关系 安装和配置podman 拉取和删除镜像 给镜像打标签 导出和导入镜像 创建和删除镜像 数据卷的使用 管理容器的命令 使用普通用户管理容器 使用普通用户管理容器 对于初学者来说,不太容…...

SQL命令---修改字段的数据类型
介绍 使用sql语句修改字段的数据类型。 命令 alter table 表明 modify 字段名 数据类型;例子 有一张a表,表里有一个id字段,长度为11。使用命令将长度修改为12 下面使用命令进行修改: alter table a modify id int(12) NOT NULL;下面使修…...