当前位置: 首页 > news >正文

深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(下)

文章目录

  • 六、playbook
    • 运行playbook方式
      • Playbook VS ShellScripts
      • 忽略错误 ignore_errors
      • handlers和notify结合使用触发条件
      • playbook中tags的使用
      • playbook中变量的使用
      • invertory参数
      • 模板templates
      • 迭代与条件判断
      • 迭代:with_items
      • 迭代嵌套子变量
      • roles

六、playbook

运行playbook方式

ansible-playbook <filename.yml>  ... [options]
常见选项
--check (-C)只检测可能会发生的改变,但不真正执行操作
--list-hosts 列出运行任务的主机
--limit 主机列表 只针对主机列表中的主机执行
-i 指定主机清单(hosts)
-v 显示过程 -vv -vvv更详细
-t 指定执行的tags名称
示例:
ansible-playbook file.yml --check 只检测
ansible-playbook --syntax-check  file.yml 检查yaml文件是否正确
ansible-playbook file.yml --limit webserver 指定执行的机器
ansible-playbook file.yml --list-hosts  # 查看主机
ansible-playbook file.yml --list-tasks  #查看任务列表
ansible-playbook file.yml --list-tags  # 查看标签

在这里插入图片描述
注意 :上图中copy连续使用两次,这是错误操作,这种操作只会执行最下面的copy,其余copy不会执行!!应该将其分开,分为两个name。
在这里插入图片描述

Playbook VS ShellScripts

安装httpd
SHELL脚本
#!/bin/bash
# 安装Apache
yum install --quiet -y httpd
# 复制配置文件
cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf
cp/tmp/vhosts.conf /etc/httpd/conf.d/
# 启动Apache,并设置开机启动
service httpd start
chkconfig httpd onPlaybook定义
---
- hosts: allremote_user: roottasks:- name: "安装Apache"yum: name=httpd       yum模块:安装httpd- name: "复制配置文件"copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/  copy模块: 拷贝文件- name: "复制配置文件"copy: src=/tmp/vhosts.conf dest=/etc/httpd/conf.d/  - name: "启动Apache,并设置开机启动"service: name=httpd state=started enabled=yes   service模块: 启动服务

忽略错误 ignore_errors

如果一个task出错,默认将不会继续执行其他task
利用ignore_errors:yes 可以忽略次task的错误,继续指定playbook其他task
---
- hosts: alltasks:- name: errorignore_errors: yes

handlers和notify结合使用触发条件

handlers
是tasks列表,这些task与前述的task并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作
notify 此action可用于在每个play的最后被出发,这样可以避免多次有改变发生时,每次都执行指定的操作,仅在所有的变化发生完后一次性执行指定的操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作
注意:
如果多个task通知了相同的handlers,此handlers仅会在所有task结束后运行一次
只有notify对应的task发生改变才会通知handlers
handlers实在所有前面的task执行成功之后才触发,可以使用force_handlers: yes强制执行handlers

- hosts: allremote_user: rootforce_handlers: yes  #强制执行handlerstasks:- name: install Apacheyum: name=httpd state=installed- name: copy confcopy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/ backup=yesnotify: service restart- name: service Apacheservice: name=httpd state=started enabled=yeshandlers:- name: service restartservice: name=httpd state=restarted
小贴士:selinux的开启导致apache更换端口后启动不成功。

在这里插入图片描述

playbook中tags的使用

在这里插入图片描述
ansible-playbook -t conf httpd.yml 【使用-t 指定标签名字】
ansible-playbook -t conf,service httpd.yml
ansible-playbook httpd.yml --list-tsgs #查看标签列表
注意:tags标签命名可以相同,不通模块下写入相同tags标签,执行时,打入标签的模块会同时执行

playbook中变量的使用

变量名:仅能由字母、数字和下划线组成,且只能以字母开头 (setup模块,显示主机所有变量)
变量的优先级:命令行中的-e > playbook中定义的变量 > 主机清单中定义的变量
变量来源

使用setup变量示例:var.yml- hosts: websrvsremote_user: roottasks:- name: create log filefile: name=/var/log/ {{ ansible_fqdn }} state=touchansible-playbook var.ymlansible setup facts 远程主机的所有变量都可直接调用 (系统自带变量)setup模块可以实现系统中很多系统信息的显示可以返回每个主机的系统信息包括:版本、主机名、cpu、内存ansible all -m setup -a 'filter="ansible_nodename"'     查询主机名ansible all -m setup -a 'filter="ansible_memtotal_mb"'  查询主机内存大小ansible all -m setup -a 'filter="ansible_distribution_major_version"'  查询系统版本ansible all -m setup -a 'filter="ansible_processor_vcpus"' 查询主机cpu个数2> 在/etc/ansible/hosts(主机清单)中定义变量普通变量:主机组中主机单独定义,优先级高于公共变量(单个主机 )公共(组)变量:针对主机组中所有主机定义统一变量(一组主机的同一类别)通过命令行传递变量在运行playbook的时候也可以传递一些变量供playbook使用
示例:var.yml
- hosts: websrvsremote_user: roottasks:- name: install packageyum: name={{ pkname }} state=presentansible-playbook –e pkname=httpd var.yml通过命令行指定变量,优先级最高
在playbook中定义
示例:var.yml
- hosts: websrvsremote_user: root
vars:- username: user1- groupname: group1
tasks:- name: create groupgroup: name={{ groupname }} state=present- name: create useruser: name={{ username }} state=presentansible-playbook var.yml
ansible-playbook -e "username=user2 groupname=group2” var2.yml变量文件中引用
cat vars.yml
var1: httpd
var2: nginxcat var.yml
- hosts: webremote_user: rootvars_files:- vars.ymltasks:- name: create httpd logfile: name=/app/{{ var1 }}.log state=touch- name: create nginx logfile: name=/app/{{ var2 }}.log state=touchhostname app_81.magedu.com  hostname 不支持"_",认为"_"是非法字符
hostnamectl set-hostname app_80.magedu.com  可以更改主机名
在role中定义变量命名:变量名仅能由字母、数字和下划线组成,且只能以字母开头变量定义:key=value示例:http_port=80变量调用方式:1> 通过{{ variable_name }} 调用变量,且变量名前后必须有空格,有时用“{{ variable_name }}”才生效2> ansible-playbook –e 选项指定ansible-playbook test.yml -e "hosts=www user=magedu"
在主机清单中定义变量,在ansible中使用变量
vim /etc/ansible/hosts
[appsrvs]
192.168.38.17 http_port=817 name=www
192.168.38.27 http_port=827 name=web调用变量
ansible appsrvs -m hostname -a'name={{name}}'  更改主机名为各自被定义的变量 针对一组设置变量
[appsrvs:vars]
make="-"ansible appsrvs -m hostname -a 'name={{name}}{{mark}}{{http_port}}'  ansible调用变量针对主机和主机组的变量
主机变量
可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用
[websrvs]
www1.magedu.com http_port=80 maxRequestsPerChild=808
www2.magedu.com http_port=8080 maxRequestsPerChild=909组变量
组变量是指赋予给指定组内所有主机上的在playbook中可用的变量[websrvs]www1.magedu.comwww2.magedu.com[websrvs:vars]ntp_server=ntp.magedu.comnfs_server=nfs.magedu.com普通变量[websrvs]192.168.99.101 http_port=8080 hname=www1192.168.99.102 http_port=80 hname=www2公共(组)变量[websvrs:vars]http_port=808mark="_"[websrvs]192.168.99.101 http_port=8080 hname=www1192.168.99.102 http_port=80 hname=www2ansible websvrs –m hostname –a ‘name={{ hname }}{{ mark }}{{ http_port }}’组嵌套
inventory中,组还可以包含其它的组,并且也可以向组中的主机指定变量。
这些变量只能在ansible-playbook中使用,而ansible命令不支持[apache]httpd1.magedu.comhttpd2.magedu.com[nginx]ngx1.magedu.comngx2.magedu.com[websrvs:children]apachenginx[webservers:vars]ntp_server=ntp.magedu.com

invertory参数

invertory参数:用于定义ansible远程连接目标主机时使用的参数,而非传递给playbook的变量ansible_ssh_hostansible_ssh_portansible_ssh_useransible_ssh_passansbile_sudo_pass示例:cat /etc/ansible/hosts[websrvs]192.168.0.1 ansible_ssh_user=root ansible_ssh_pass=magedu192.168.0.2 ansible_ssh_user=root ansible_ssh_pass=magedu

模板templates

文本文件,嵌套有脚本(使用模板编程语言编写)
jinja2语言,使用字面量,有下面形式:
字符串:使用单引号或者双引号
数字:整数,浮点数
列表:[item1,itme2,…]
元组:(item1,itme2,…)
字典:{key1:value1,key2:value2,…}
布尔型:true/false
算术运算:+,-,*,/,//,%,**
比较操作:==,!=,>,>=,<,<=
逻辑运算:and,or,not
流表达式:For If When(循环语句)
小记:在模板目录template下写入模板文件,文件中可以直接调用setup变量(src可以直接书写模板目录下的文件)

迭代与条件判断

when
条件测试:如果需要根据变量,facts或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,通过when语句实现,在task中使用,jinja2的语法格式
when语句
在task后添加when子句即可使用户条件测试;when语句支持jinji2表达式语法
示例:

  • name: ‘shutdown redhad flavored systems’
    command: /sbin/shutdown -h now
    when: ansible_os_family == “RedHat”

迭代:with_items

迭代:当有需要重复执行的任务时,可以使用迭代机制
对迭代项的引用,固定变量名为“iftem”
要在task中使用with_items给定要迭代的元素列表
列表格式:
字符串
字典
在这里插入图片描述

迭代嵌套子变量

在这里插入图片描述
playbook中template模板对于for if 循环的使用
在这里插入图片描述
在这里插入图片描述

for
yml文件
---
- hosts: web serverremote_user: rootvars:ports:- listen_port: 84- listen_port: 85- listen_port: 86tasks:- name: copy conftemplate: src=for1.conf.j2 dest=/data/for1.conf
模板文件:
{% for port in ports %}   #port自定义变量
server{listen {{ port.listen_port }}
}
{% endfor %}
&&
yml文件
---
- hosts: webremote_user: rootvars:ports:- web1:port: 81name: web1.magedu.comrootdir: /data/website1- web2:port: 82name: web2.magedu.comrootdir: /data/website2tasks:- name: copy conftemplate: src=for2.conf.j2 dest=/data/for2.conf模板文件:
{% for p in ports %}    #p自定义变量
server{listen {{ p.port }}servername {{ p.name }}documentroot {{ p.rootdir }}
}
{% endfor %}
if
yml文件
---
- hosts: webremote_user: rootvars:ports:- web1:port: 81name: web1.magedu.comrootdir: /data/website1- web2:port: 82#name: web2.magedu.comrootdir: /data/website2tasks:- name: copy conftemplate: src=if.conf.j2 dest=/data/if.conf模板文件:
{% for p in ports %}
server{listen {{ p.port }}
{% if p.name is defined %} #如果p.name被定义就执行下面的servername,否则不执行servername {{ p.name }}
{% endif %}documentroot {{ p.rootdir }}
}
{% endfor %}

在这里插入图片描述

roles

ansible自1.2版本引入的新特性,用于层次性,结构化地组织playbook。roles能够根据层次结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于主机构建服务的场景中,但也可以使用于构建守护进程等场景中
复杂场景:建议使用roles,代码复用度高
变更指定主机或主机组
如命令不规范,维护和传承成本大
某些功能需要多个playbook,通过includes可以实现
roles的使用
在这里插入图片描述

roles目录结构
playbook.yml
roles
project/
tasks/
files/
vars/  不常用
defaults/  不常用
templates/
handlers/
meta/  不常用
roles各目录的作用
/roles/project/:项目名称,有以下目录
files/:存放由copy模块或scripts模块等调用的文件
template/:template模块查找所需要模板文件的目录
tasks/:定义tasks,roles的基本元素,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
handlers/:至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
vars/:定义变量,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
default/:设定默认变量时使用此目录中的main.yml文件

相关文章:

深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(下)

文章目录 六、playbook运行playbook方式Playbook VS ShellScripts忽略错误 ignore_errorshandlers和notify结合使用触发条件playbook中tags的使用playbook中变量的使用invertory参数模板templates迭代与条件判断迭代&#xff1a;with_items迭代嵌套子变量roles 六、playbook 运…...

langchain chroma 与 chromadb笔记

chromadb可独立使用也可搭配langchain 框架使用。 环境&#xff1a; python 3.9 langchain0.2.16 chromadb0.5.3 chromadb 使用示例 import chromadb from chromadb.config import Settings from chromadb.utils import embedding_functions# 加载embedding模型 en_embeddin…...

04 创建一个属于爬虫的主虚拟环境

文章目录 回顾conda常用指令创建一个爬虫虚拟主环境Win R 调出终端查看当前conda的虚拟环境创建 spider_base 的虚拟环境安装完成查看环境是否存在 为 pycharm 配置创建的爬虫主虚拟环境选一个盘符来存储之后学习所写的爬虫文件用 pycharm 打开创建的文件夹pycharm 配置解释器…...

xcode开发相关英语单词

创建项目&#xff1a; otheraudio unit extension app音频单元扩展应用程序generic kernel extension通用内核扩展installer plug-in安装程序插件instruments package仪器包iokit driveriokit驱动程序presence pane状态窗格screen saver屏幕保护程序...

etcd-v3.5release-(2)-STM

a.b.c表示a文件里的b类的方法c&#xff0c;注意a不一定是包名&#xff0c;因为文件名不一定等于包名 &#xff01;&#xff01;&#xff01;&#xff01;etcd在put的过程中使用的batchTxBuffered&#xff0c;这个事务是写bbolt数据库使用的事务&#xff0c;是对bbolt.Tx的一个…...

多系统萎缩锻炼如何好起来?

多系统萎缩&#xff08;Multiple System Atrophy, MSA&#xff09;是一种复杂的神经系统退行性疾病&#xff0c;影响着患者的自主神经系统、运动系统和平衡功能等多个方面。面对这一挑战&#xff0c;科学、合理的锻炼对于缓解症状、提高生活质量至关重要。本文将详细介绍多系统…...

非对称任意进制转换器(安卓)

除了正常进制转换&#xff0c;还可以输入、输出使用不同的数字符号&#xff0c;达成对数值进行加密的效果 点我下载APK安装包提取码&#xff1a;h4nw 使用unity开发。新建一个c#代码文件&#xff0c;把代码覆盖进去&#xff0c;再把代码文件添加给main camera即可。 using Sy…...

MySQL数据库安全与管理

1、创建两个新用户U_student1和U_student2,密码分别为1234和5678 create user U_student1@localhost identified by 1234, U_student2@localhost identified by 5678; 2、创建两个新用户的详细信息保存在MySQL数据库的user表中 use mysql; select user, host, authentication…...

python使用PyPDF2 和 pdfplumber操作PDF文件

文章目录 一、第三方库介绍二、基本使用1、拆分pdf2、合并pdf3、提取文字内容4、提取表格内容5、PDF加密6、PDF解密 一、第三方库介绍 Python 操作 PDF 会用到两个库&#xff0c;分别是&#xff1a;PyPDF2 和 pdfplumber。 PyPDF2 可以更好的读取、写入、分割、合并PDF文件&a…...

【vue2自定义指令】v-disabled 实现el-switch,el-button等elementUI禁用(disabled)效果

如果你搜过类似的功能&#xff0c;肯定看到过千篇一律的 // 实现按钮禁用el.disabled true// 增加 elementUI 的禁用样式类el.classList.add(is-disabled)但是这个方案明显对el-switch&#xff0c;不起作用&#xff0c;所以我这边直接把方案贴出来&#xff0c;不想了解具体原理…...

从容面对大规模作业:利用PMI提升作业启用和结束效率

1.进程管理瓶颈 随着集群规模的不断扩大和处理器性能的不断提升&#xff0c;高性能计算HPC(High Performance Computing)系统性能已经进入百亿亿次时代&#xff0c;进程管理是高性能计算的一个重要组成部分&#xff0c;传统进程管理已经不能满足海量处理器的管理需求&#xff…...

2024年认证杯SPSSPRO杯数学建模C题(第一阶段)云中的海盐解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现&#xff1a; 巴黎气候协定提出的目标是&#xff1a;在2100年前&#xff0c;把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平&#xff0c;并为1.5摄氏度而努力。但事实上&#xff0c;许多之前的…...

burp(6)暴力破解与验证码识别绕过

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

不同系统查看软件占用端口的方式

Windows 使用命令提示符&#xff08;CMD&#xff09; 打开命令提示符: 按 Win R 键打开“运行”对话框&#xff0c;输入 cmd 并按回车。为了执行某些命令&#xff0c;您可能需要以管理员身份运行命令提示符。可以通过右键点击“开始”按钮并选择“命令提示符&#xff08;管理…...

【已解决】黑马点评项目中-实战篇11-状态登录刷新章节设置RefreshTokenInterceptor拦截器后登录异常的问题

黑马点评项目中-实战篇11-状态登录刷新章节设置RefreshTokenInterceptor拦截器后登录异常的问题 在 MvcConfig 文件中添加好RefreshTokenInterceptor拦截器 出现异常情况 按照验证码登录后&#xff0c;进入主页面&#xff0c;再点击“我的”&#xff0c;又跳入登录界面 原因…...

Artec Leo 3D扫描仪 革新家具行业的数字化展示【沪敖3D】

随着科技的飞速进步&#xff0c;三维扫描技术已被广泛应用于包括家居行业在内的多个行业。面对现代消费者对家居产品日益增长的个性化和多样化需求&#xff0c;传统的家居设计和展示方法已难以满足市场需求。三维扫描技术的出现&#xff0c;为家居行业带来了新的发展机遇&#…...

UG NX二次开发(Python)-UIStyler-选取点

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、设计一个UI界面3、创建长方体的代码4、需要引入的库5、测试验证1、前言 采用Python语言进行UG NX二次开发的资料比较少,我本来不是很认可采用Python进行二次开发的,但是近期有读者咨询…...

Linux网络编程之---组播和广播

一.组播 1.概述 单播地址标识单个IP 接口&#xff0c;广播地址标识某个子网的所有IP 接口&#xff0c; 多播地址标识一组IP 接口。单播和广播是寻址方案的两个极端(要么单个要么全部)&#xff0c; 多播则意在两者之间提供一种折中方案。多播数据报只应该由对它感兴趣的接口接收…...

[计算机网络] HTTP/HTTPS

一. HTTP/HTTPS简介 1.1 HTTP HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上&#xff0c;通常使用端口 …...

运动模糊效果

1、运动模糊效果 运动模糊效果&#xff0c;是一种用于 模拟真实世界中快速移动物体产生的模糊现象 的图像处理技术&#xff0c;当一个物体以较高速度移动时&#xff0c;由于人眼或摄像机的曝光时间过长&#xff0c;该物体会在图像中留下模糊的运动轨迹。这种效果游戏、动画、电…...

扫二维码进小程序的指定页面

草料二维码解码器 微信开发者工具 获取二维码解码的参数->是否登陆->跳转 options.q onLoad: function (options) {// console.log("options",options.q)if (options && options.q) {// 解码二维码携带的链接信息let qrUrl decodeURIComponent(optio…...

uniapp的生命周期

在 UniApp 中&#xff0c;生命周期函数是指在组件&#xff08;如页面、视图等&#xff09;创建和销毁过程中会自动触发的一些函数。UniApp 提供了多种生命周期函数&#xff0c;帮助开发者在适当的时机进行相关的逻辑处理。 UniApp 的生命周期函数可以分为 页面生命周期 和 组件…...

vue3-生命周期钩子函数

在 Vue 3 中&#xff0c;**生命周期函数**是指在组件的不同阶段自动执行的一些特殊函数。这些函数就像组件的“生老病死”的各个阶段&#xff0c;你可以在不同阶段执行不同的操作。 生命周期的主要阶段&#xff1a; 1. **创建阶段**&#xff08;组件还没有出现在页面上&#x…...

科技云报到:数智化转型风高浪急,天翼云如何助力产业踏浪而行?

科技云报到原创。 捷径消亡&#xff0c;破旧立新&#xff0c;是今年千行百业的共同底色。 穿越产业周期&#xff0c;用数字化的力量重塑企业经营与增长的逻辑&#xff0c;再次成为数字化技术应用的主旋律&#xff0c;也是下一阶段产业投资的重点。 随着数字化转型行至“深水区…...

利用 360 安全卫士极速版关闭电脑开机自启动软件教程

在使用电脑的过程中&#xff0c;过多的开机自启动软件会严重拖慢电脑的开机速度&#xff0c;影响我们的使用体验。本教程中简鹿办公将详细介绍如何使用 360 安全卫士极速版关闭电脑开机自启动软件&#xff0c;让您的电脑开机更加迅速流畅。 一、打开 360 安全卫士极速版 在电…...

调用大模型api 批量处理图像 保存到excel

最近需要调用大模型&#xff0c;并将结果保存到excel中&#xff0c;效果如下&#xff1a; 代码&#xff1a; import base64 from zhipuai import ZhipuAI import os import pandas as pd from openpyxl import Workbook from openpyxl.drawing.image import Image from io i…...

【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(上篇) , 万字解析, 建议收藏 ! ! !

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…...

Redisson看门狗机制

redis分布式锁我们需要手动为锁设置超时过期时间&#xff0c;但是这个时间不好判断&#xff0c;如果太短&#xff0c;持有锁的客户端还在执行业务&#xff0c;锁就超时释放了&#xff1b;如果太长了&#xff0c;持有锁的客户端释放锁失败&#xff0c;则其他客户端一直没法获取锁…...

LeetCode279. 完全平方数(2024冬季每日一题 27)

给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11 不是。 …...

HTML礼物圣诞树

系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心&#xff08;双心版&#xff09;1…...

【JVM】JVM基础教程(二)

上一篇&#xff1a;【JVM】JVM基础教程&#xff08;一&#xff09;-CSDN博客 类加载器 什么是类加载器&#xff08;ClassLoader&#xff09; 是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。 从这个定义可以得出结论&#xff1a;Java是允许开发者写点代码…...

Appium 安装问题汇总

好生气好生气&#xff0c;装了几天了&#xff0c; opencv4nodejs 和 mjpeg-consumer 就是装不了&#xff0c;气死我了不管了&#xff0c;等后面会装的时候再来完善&#xff0c;气死了气死了。 目录 前言 1、apkanalyzer.bat 2、opencv4nodejs 3、ffmpeg 4、mjpeg-consume…...

在网安中什么是白帽子

在网络安全领域&#xff0c;白帽子是指那些专门从事网络安全研究&#xff0c;帮助企业或个人发现并修复安全漏洞的专家。以下是对白帽子的详细解释&#xff1a; 一、定义与角色 白帽子是网络安全领域的术语&#xff0c;通常指那些具备专业技能和知识的网络安全专家。他们的工作…...

C++解析URL的方式

一、URL格式为http://192.168.80.166:6666/designResLib/test/test std::vector<CString> ThkCabRMaterialStaDlg::splitAddress(const CString& address) {std::vector<CString> result;CString remaining address;result.push_back(remaining.Left(remaini…...

【软件安全】软件安全设计规范,软件系统安全设计制度(Word原件)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 软件全面文档清单涵盖以下核心内容&a…...

基于ZooKeeper搭建Hadoop高可用集群

ZooKeeper搭建Hadoop高可用集群 在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点&#xff0c;集群不具有高可用性。 HDFS 高可用架构 HDFS 高可用架构主要组件&#xff1a; Active NameNode 和 Standby NameNode&#xff1a; 两台 NameNode…...

华硕主板不能开启

正常流程&#xff1a; [主機板]BIOS如何設置主機板整合圖形(內顯)和獨立顯示卡同時顯示輸出 | 官方支援 | ASUS 台灣 如果开启了CSR兼容性模式&#xff0c;在BIOS里面&#xff0c;就必须关掉&#xff0c;才能支持多显示器&#xff0c;如下图显示的标识才会出现。...

[C++]构造函数和析构函数

一、构造函数 1.构造函数的基本概念 1.对构造函数的理解&#xff1a; 构造函数是类的一种特殊成员函数&#xff0c;其主要功能是在创建对象时进行初始化操作。它的名字与类名相同&#xff0c;并且没有返回值类型&#xff08;不能是void&#xff09;。例如&#xff0c;对于一个…...

查询品牌涉及两张表(brand、brand_admin_mapping)

文章目录 1、BrandController2、AdminCommonService3、BrandApiService3、BrandCommonService4、BrandSqlService涉及的表SQL 查询逻辑参数处理执行查询完整 SQL 逻辑参数映射总结 SELECT * FROM brand_admin_mapping WHERE admin_id 252SELECT * FROM brand WHERE id 44SELE…...

CVPR和其他2024顶会论文阅读(资源整理【1】)

CVPR 2024论文阅读(资源整理【1】) 一、3d 重建与建模论文1-Deformable 3D Gaussians for High-Fidelity Monocular Dynamic Scene Reconstruction论文2- 4D Gaussian Splatting for Real-Time Dynamic Scene Rendering论文3-GaussianDreamer: Fast Generation from Text to …...

数据库表约束完全指南:提升数据完整性和准确性

数据库表约束完全指南&#xff1a;提升数据完整性和准确性 在数据库设计中&#xff0c;表约束是确保数据完整性和准确性的关键工具。本文将详细介绍各种类型的表约束及其使用方法&#xff0c;包括非空约束、唯一约束、主键约束、外键约束、默认值约束、检查约束以及自动递增约…...

保姆级教程用vite创建vue3项目并初始化添加PrimeVue UI踩坑实录

文章目录 一、什么是PrimeVue二、详细教程1.添加PrimeVue2.配置main.js3.添加自动引入4.配置vite.config.js5.创建测试页面 一、什么是PrimeVue PrimeVue 是一个用于 Vue.js 3.x 开发的一款高质量、广受欢迎的 Web UI 组件库。 官网地址&#xff1a;https://primevue.org/ 二、…...

数据库索引

以下是关于数据库索引的详细介绍&#xff0c;包括其概念、优点和缺点&#xff0c;并附带丰富的例子&#xff1a; 一、什么是数据库索引 数据库索引是一种数据结构&#xff0c;类似于书籍的目录&#xff0c;它能够帮助数据库管理系统&#xff08;DBMS&#xff09;迅速定位和访问…...

硬件选型规则

光源选型: 先用型号中带H的&#xff0c;没有的选标准的. 光源和光源控制器的搭配需要确保接口一致。 根据型号表中的最佳工作距离和相机的尺寸。 光源控制器选型&#xff1a; 首先选择海康风格系列光源控制器考虑与光源的接口匹配。功率应该满足接近光源功率。检查是否退市…...

linux 架构详解

Linux 是一种开源的操作系统内核&#xff0c;最初由 Linus Torvalds 于 1991 年创建。它是一个基于 Unix 的操作系统内核&#xff0c;用于构建完整的操作系统。Linux 架构是指 Linux 操作系统的内部结构和组成组件的工作方式。 整体架构 Linux系统通常被看作是一个层次化的结…...

Mybatis 学习 之 XML 手册

目录 单次执行单次新增单次更新单次删除 批量执行批量新增批量更新for 循环执行更新for 循环生成多条 sql&#xff0c;一次执行 批量删除 参数传递预处理方式 (OGNL表达式 #{})数据类型转换 直接替换 (EL表达式 ${}) 安全 单次执行 单次新增 <insert id"insert"…...

平面直角坐标系

图1 平面直角坐标系 横轴为x&#xff0c;竖轴为y&#xff0c;x、y的交点为O。 表示一个点经常表示为( x, y )&#xff0c;如图上的红点( 2, 3 )。 图2 点( 2, 3 )...

K8S对接ceph的RBD块存储

1 PG数量限制问题 1.1 原因分析 1.还是老样子&#xff0c;先创建存储池&#xff0c;在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…...

使用 OpenCV 进行 Android 开发

在本节中&#xff0c;我们将创建一个简单的应用程序&#xff0c;它除了加载 OpenCV 之外什么都不做。在下一节中&#xff0c;我们将扩展它以支持相机。 除了这个说明&#xff0c;你还可以使用一些视频指南&#xff0c;例如这个 打开 Android Studio 并选择Empty Views Activi…...

ubuntu下 grep 如何过滤包括G或者T字符串

在 grep 中&#xff0c;你可以通过使用正则表达式来匹配包含 G 或者 T 的字符串。例如&#xff1a; 1. 过滤包括 G 或 T 的字符串&#xff1a; grep -E G|T filename -E 表示启用扩展正则表达式&#xff08;也可以用 egrep&#xff09;。G|T 表示匹配 G 或 T。 2. 不区分大…...