Ansible定义各类变量,引用变量方式介绍及注册变量和vars_prompt的用法示例
目录
一.Ansible定义变量
1.用途
2.定义规则
3.变量优先级
二.命令行定义变量
三.定义主机和主机组变量
1.主机变量
(1)内置主机变量
(2)简单示例
2.主机组变量
四.定义playbook变量
1.通过vars表示定义变量,通过' "{{变量名}}" '来引用变量
2.通过vars_file指定变量文件
五.定义host_vars和group_vars目录变量
1.主机组变量使用group_vars
2.主机变量只用host_vars
3.以主机变量简单为例演示
六.注册变量
七.vars_prompt交互变量
1.参数解析
2.简单交互案例
3.创建用户和密码示例
(1)encrypt
(2)confirm
八.引用变量
1.引用简单定义的变量
2.引用较为复杂定义的变量
一.Ansible定义变量
1.用途
ansible的变量主要用于存储在整个项目中重复使用的一些值,来提高创建任务和维护节点的效率
2.定义规则
变量名由字母、数字、下划线组成,由字母开头
内置关键字不能作为变量名
3.变量优先级
全局范围内命令行设置的变量>playbook及其相关配置的变量>主机和组清单的变量>ansible.cfg配置文件设置的变量
二.命令行定义变量
如上文所述,命令行使用"-e '变量名=值' "设置的变量优先级最高,下面举例演示命令行变量覆盖playbook中的变量
[root@main ~]# cat abc.yaml
---
- hosts: webserversvars:myservice: httpd #原本playbook内容为停掉httpdtasks:- name: test1service:name: "{{ myservice }}"state: stopped
[root@main ~]# ansible-playbook abc.yaml -e 'myservice=chronyd'
#运行时指定变量更改为关掉chronyd
[root@main ~]# ansible webservers -m shell -a 'systemctl status httpd | grep Active'
serverb | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 14:06:57 CST; 5h 22min ago
servera | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 19:25:46 CST; 3min 12s ago
[root@main ~]# ansible webservers -m shell -a 'systemctl status chronyd | grep Active'
serverb | CHANGED | rc=0 >>Active: inactive (dead) since Tue 2023-10-17 19:28:30 CST; 35s ago
servera | CHANGED | rc=0 >>Active: inactive (dead) since Tue 2023-10-17 19:28:30 CST; 35s ago
#运行结果可以看出,停掉httpd未生效,停chonyd生效,命令行给定变量优先级高于playbook给定变量优先级
三.定义主机和主机组变量
1.主机变量
(1)内置主机变量
在变量前加上"ansible_"即成为内置变量
部分内置主机关于ssh和提权的变量举例
ansible_ssh_host:指定受管节点主机真实IP地址
ansible_ssh_port:指定通过哪个端口连接受管节点
ansible_ssh_user:指定连接时使用的用户名称
ansibe_connection:指定ssh连接类型,local、ssh、paramiko
ansible_ssh_pass:ssh连接时使用的密码
ansible_ssh_executable:指定ssh指定的路径
ansible_become:允许特权升级,等同于ansible_sudo,ansible_su
ansible_become_user:提权到哪个用户,等同于ansible_sudo_user,ansible_su_user
ansbile_become_pass:需要密码时指定密码,等同于ansible_sudo_pass
ansible_sudo_exec:指定sudo命令路径
(2)简单示例
[student@workstation ~]$ vim user.yml
#不属于任何组的用户
192.168.2.190 ansible_ssh_user=root ansible_user_pass='redhat'
192.168.2.191 ansible_ssh_user=root ansible_user_pass='su123'
2.主机组变量
如上例,将两台受管节点相等的部分定义为一个变量
[student@workstation ~]$ vim user.yml
192.168.2.190 ansible_ssh_user=root ansible_user_pass='redhat'
192.168.2.191 ansible_ssh_user=root ansible_user_pass='su123'
#更改为
192.168.2.190 ansible_user_pass='redhat'
192.168.2.191 ansible_user_pass='su123'
[webservers:vars]
ansible_ssh_user=root
四.定义playbook变量
1.通过vars表示定义变量,通过' "{{变量名}}" '来引用变量
[root@localhost ~]# cat httpd.yaml
---
- name: install httpd chronyhosts: webserversvars: #声明在此处定义变量mypackages: #变量名- httpd- chronymyhttpd: httpd mychronyd: chronydtasks:- name: install themyum:name: "{{ mypackages }}" #使用变量state: present- name: start httpdservice:name: "{{ myhttpd }}"state: started- name: start chronydservice:name: "{{ mychronyd }}"state: started
[root@localhost ~]# ansible webservers -m shell -a 'systemctl status httpd | grep Active'
serverb | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 14:06:57 CST; 3min 45s ago
servera | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 14:06:57 CST; 3min 45s ago
[root@localhost ~]# ansible webservers -m shell -a 'systemctl status chronyd | grep Active'
servera | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 13:29:27 CST; 41min ago
serverb | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 13:31:57 CST; 38min ago
2.通过vars_file指定变量文件
[root@main ~]# cat myvar1.yaml #vars文件也使用yaml格式
packages:- rpcbind- openssl[root@main ~]# cat httpd1.yaml
---
- name: install rpcbind opensslhosts: webserverstasks:- name: install themyum:name: "{{ packages }}" #同样这样使用变量state: presentvars_files: #指定vars文件- myvar1.yaml #指定你自己的vars问文件位置,这里是当前路径下的myvars1.yaml文件
[root@main ~]# ansible-playbook httpd1.yaml --syntax-check
playbook: httpd1.yaml
[root@main ~]# ansible-playbook httpd1.yaml
[root@main ~]# ansible webservers -m shell -a 'yum list installed | grep rpcbind'
servera | CHANGED | rc=0 >>
rpcbind.x86_64 0.2.0-49.el7 @base
serverb | CHANGED | rc=0 >>
rpcbind.x86_64 0.2.0-49.el7 @base
[root@main ~]# ansible webservers -m shell -a 'yum list installed | grep openssl'
servera | CHANGED | rc=0 >>
openssl.x86_64 1:1.0.2k-19.el7 @anaconda
openssl-libs.x86_64 1:1.0.2k-19.el7 @anaconda
xmlsec1-openssl.x86_64 1.2.20-7.el7_4 @anaconda
serverb | CHANGED | rc=0 >>
openssl.x86_64 1:1.0.2k-19.el7 @anaconda
openssl-libs.x86_64 1:1.0.2k-19.el7 @anaconda
xmlsec1-openssl.x86_64 1.2.20-7.el7_4 @anaconda
五.定义host_vars和group_vars目录变量
1.主机组变量使用group_vars
group_vars是一个目录,这个名称固定,必须是和你的inventory文件和ansible.cfg文件位于同一级目录,其下创建的文件需要和你主机清单中的组名称一致,在这个文件中写入变量和值
2.主机变量只用host_vars
host_vars和group_vars相同,也是一个目录,名称固定,必须和inventory文件和ansible.cfg文件位于同一级目录,其下创建的文件需要和你主机清单中的主机名称一致(清单文件中写的是主机名就写=用主机名,是IP地址就用IP地址),在这个文件中写入变量和值
3.以主机变量简单为例演示
[root@main ~]# tree /root
/root
├── anaconda-ks.cfg
├── ansible.cfg
├── group_vars
│ ├── dbservers
│ └── webservers
├── host_vars
│ ├── servera
│ └── serverb
├── httpd1.yaml
├── httpd.yaml
├── myhosts
├── myhttpd.yaml
└── myvar1.yaml
[root@main ~]# cat host_vars/servera
aname: httpd
[root@main ~]# cat host_vars/serverb
bname: mod_ssl
[root@main ~]# cat myhttpd.yaml
---
- name: stop servera httpdhosts: serveratasks:- name: stop itservice:name: "{{ aname }}" #在剧本中就可以直接用用定义好的主机变量state: stopped
- name: install serverb mod_sslhosts: serverbtasks:- name: install ityum:name: "{{ bname }}"state: present
[root@main ~]# ansible-playbook myhttpd.yaml --syntax-check
playbook: myhttpd.yaml
[root@main ~]# ansible-playbook myhttpd.yaml
[root@main ~]# ansible servera -m shell -a 'systemctl status httpd | grep Active'
servera | CHANGED | rc=0 >>Active: inactive (dead)
[root@main ~]# ansible serverb -m shell -a 'yum list installed | grep mod_ssl'
serverb | CHANGED | rc=0 >>
mod_ssl.x86_64 1:2.4.6-99.el7.centos.1 @updates
六.注册变量
注册变量主要是使用register来捕获命令的输出,将其保存在一个临时变量中,便于进行特定操作。
如下例,将"id su"的结果注册为"su",并使用debug模块输出su的内容,并在playbook执行后的debug结果中判断出该用户是否存在
[root@main ~]# cat iduser.yaml
---
- name: is su existhosts: webserverstasks:- name: test sushell: id suregister: suignore_errors: yes #便于测试,忽略错误- name: echo itdebug:msg: "{{ su }}"
[root@main ~]# ansible-playbook iduser.yaml
PLAY [is su exist] ******************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
ok: [serverb]
TASK [test su] **********************************************************************************************************************************
changed: [servera]
changed: [serverb]
TASK [echo it] **********************************************************************************************************************************
ok: [servera] => {"msg": {"changed": true, "cmd": "id su", "delta": "0:00:00.004109", "end": "2023-10-17 19:05:47.215481", "failed": false, "rc": 0, #为0表示存在,非0不存在"start": "2023-10-17 19:05:47.211372", "stderr": "", "stderr_lines": [], "stdout": "uid=1000(su) gid=1000(su) groups=1000(su)", #有会输出该用户的详细信息,没有会提示不存在此用户"stdout_lines": ["uid=1000(su) gid=1000(su) groups=1000(su)"]}
}
ok: [serverb] => {"msg": {"changed": true, "cmd": "id su", "delta": "0:00:00.004695", "end": "2023-10-17 19:05:47.220915", "failed": false, "rc": 0, "start": "2023-10-17 19:05:47.216220", "stderr": "", "stderr_lines": [], "stdout": "uid=1000(su) gid=1000(su) groups=1000(su)", "stdout_lines": ["uid=1000(su) gid=1000(su) groups=1000(su)"]}
}
PLAY RECAP **************************************************************************************************************************************
servera : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
serverb : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
七.vars_prompt交互变量
用于交互提示用户输入值
1.参数解析
prompt表示对用户的提示信息
private表示用户在输入时是否隐藏输入的信息
default表示如果用户没有输入,则此项的默认值
2.简单交互案例
[root@main ~]# cat register.yaml
---
- hosts: webserversvars_prompt:- name: "one"prompt: "请输入第一个值"private: no- name: "two"prompt: "请输入第二个值"#default: 'hello'private: yestasks:- name: dis one valuedebug: msg="{{one}}"- name: dis two valuedebug: msg="{{two}}"
#测试结果
[root@main ~]# ansible-playbook register.yaml
请输入第一个值: nihao
请输入第二个值: #private为yes,此处我输入时会隐藏信息
PLAY [webservers] *******************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
ok: [serverb]
TASK [dis one value] ****************************************************************************************************************************
ok: [servera] => {"msg": "nihao"
}
ok: [serverb] => {"msg": "nihao"
}
TASK [dis two value] ****************************************************************************************************************************
ok: [servera] => { #显示输入的信息"msg": "hello"
}
ok: [serverb] => {"msg": "hello"
}
PLAY RECAP **************************************************************************************************************************************
servera : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
serverb : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3.创建用户和密码示例
(1)encrypt
可以指定在密码处可以指定使用sha512对密码进行哈希加密
(2)confirm
可以设置重复确认密码,两次密码不符合会报“* VALUES ENTERED DO NOT MATCH ”
[root@main ~]# cat register1.yaml
---
- hosts: webserversvars_prompt:- name: "name"prompt: "enter user_name"private: no- name: "passwd"prompt: "enter user_passwd"private: yes#encrypt: "sha512_crypt" #confirm: yes tasks:- name: create himuser:name: "{{ name }}"password: "{{ passwd }}"
[root@main ~]# ansible-playbook register1.yaml
enter user_name: sulibao
enter user_passwd:
[WARNING]: Found variable using reserved name: name
PLAY [webservers] *******************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************
ok: [serverb]
ok: [servera]
TASK [create him] *******************************************************************************************************************************
[WARNING]: The input password appears not to have been hashed. The 'password' argument must be encrypted for this module to work properly.
changed: [serverb]
changed: [servera]
PLAY RECAP **************************************************************************************************************************************
servera : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
serverb : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@main ~]# ansible webservers -a 'id sulibao'
serverb | CHANGED | rc=0 >>
uid=1001(sulibao) gid=1001(sulibao) groups=1001(sulibao)
servera | CHANGED | rc=0 >>
uid=1001(sulibao) gid=1001(sulibao) groups=1001(sulibao)
#未加密的密码
[root@main ~]# ansible webservers -m shell -a 'cat /etc/shadow | grep sulibao'
serverb | CHANGED | rc=0 >>
sulibao:ansible:19647:0:99999:7:::
servera | CHANGED | rc=0 >>
sulibao:ansible:19647:0:99999:7:::
#加密后
[root@main ~]# ansible webservers -m shell -a 'cat /etc/shadow | grep li'
serverb | CHANGED | rc=0 >>
sulibao:ansible:19647:0:99999:7:::
li:$6$U0qiY4DnzK8AWcBe$rIFmtpCr.1qU3sxtv90U2bRaZbxgqj1PK9UV4wp6W8zWXigHTfcfuFjJ0AvCZMb0Xe75juLlarm94xNZUnoCX.:19647:0:99999:7:::
servera | CHANGED | rc=0 >>
sulibao:ansible:19647:0:99999:7:::
li:$6$U0qiY4DnzK8AWcBe$rIFmtpCr.1qU3sxtv90U2bRaZbxgqj1PK9UV4wp6W8zWXigHTfcfuFjJ0AvCZMb0Xe75juLlarm94xNZUnoCX.:19647:0:99999:7:::
八.引用变量
1.引用简单定义的变量
[root@main ~]# cat myvar1.yaml
packages: #类似于定义了一个列表形式的变量- rpcbind- openssl
[root@main ~]# cat httpd1.yaml
---
- name: install rpcbind opensslhosts: webserverstasks:- name: install themyum:name: "{{ packages }}" #就直接通过“ "{{变量名}}" ”来引用state: presentvars_files:- myvar1.yaml
2.引用较为复杂定义的变量
[root@main ~]# cat myvar2.yaml
su: #定义了一个层层嵌套的变量name:tname: sulibaofname: libaosu
[root@main ~]# cat echo.yaml
---
- hosts: webserverstasks:- name: echo somethingdebug:msg: "{{ su.name.fname }}" #需要使用嵌套定义的变量时,需要使用"."或者"[]"来表示一层一层地引用#msg: "{{ su['name']['fname'] }}"vars_files:- myvar2.yaml
#运行查看结果
[root@main ~]# ansible-playbook echo.yaml
PLAY [webservers] *******************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************
ok: [serverb]
ok: [servera]
TASK [echo something] ***************************************************************************************************************************
ok: [servera] => {"msg": "libaosu"
}
ok: [serverb] => {"msg": "libaosu"
}
PLAY RECAP **************************************************************************************************************************************
servera : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
serverb : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
相关文章:
Ansible定义各类变量,引用变量方式介绍及注册变量和vars_prompt的用法示例
目录 一.Ansible定义变量 1.用途 2.定义规则 3.变量优先级 二.命令行定义变量 三.定义主机和主机组变量 1.主机变量 (1)内置主机变量 (2)简单示例 2.主机组变量 四.定义playbook变量 1.通过vars表示定义变量ÿ…...
各类证件的版面信息收集
香港身份证的版面分析: 证件页面: 相关的版面信息: 该页面包含香港身份证的信息,可以用于版面分析; 信息来源:香港不同证件说明大汇总|回乡证|居民身份证|护照|永居_手机网易网 台湾通行证号码…...
vueday01——ref响应式
特性:持续监控某个响应式变量的属性名变化,可以使用shallowRef来取消这一特性,只监控对象整体的变化 ref测试代码: <template><div :id"idValue" ref"myDiv">打印obj{{ obj }}</div><…...
SpringBoot集成Redisson操作Redis
目录 一、前言二、基础集成配置(redis单节点)2.1、POM2.2、添加配置文件2.3、添加启动类2.4、添加测试类测试redisson操作redis 一、前言 Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格,Redisson相比较与Jedis和Lettuce来说最…...
整数反转
题目: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 …...
【ELK使用指南 2】常用的 Logstash filter 插件详解(附应用实例)
Logstash filter 一、logstash filter过滤插件的常用模块简介二、grok 正则捕获插件2.1 grok插件的作用2.2 内置正则表达式2.3 自定义正则表达式 三、mutate 数据修改插件3.1 mutate插件的作用3.2 常用的配置选项3.3 mutate插件应用实例 四、multiline 多行合并插件4.1 multili…...
(转)STR 内核做了什么
参考这篇文章: Linux电源管理(6)_Generic PM之Suspend功能 写的很清晰...
fastapi项目结构以及多进程部署
环境: python3.10.x Linux/centos 背景: 最近在用FastApi开发数据统计,并将统计数据返回给前端展示的数据系统。 数据库: mongodb, python包为mongoEngine 项目结构 main.py api middleware router-- __init__.py-- …...
【LeetCode】 412. Fizz Buzz
题目链接 文章目录 Python3 【O(n) O(1)】C.emplace_back() 【C 11 之后】 Python3 【O(n) O(1)】 初始版本 class Solution:def fizzBuzz(self, n: int) -> List[str]:ans []for i in range(1, n1):if i % 5 0 and i % 3 0:ans.append("FizzBuzz")elif i % …...
vector+算法sort与list+sort的效率比较,容易写错的地方原因探析
我写的代码: #include <iostream> using namespace std; #include <vector> #include <list> #include <algorithm> int main() {const int N 10000000;vector<int> v;list<int> l;for (int i 0; i < N; i){v.push_back(…...
iOS——Manager封装网络请求
在之前的项目里,我们都是把网络请求写在viewController的viewDidLoad,而实际中使用的时候并不能这么简单,对于不同的需要,我们需要有不同的网络请求。所以我们可以用单例模式创建一个全局的Manager类,用实例Manager来执…...
【javascript】内部引入与外部引入javascript
创建a.html 内部引入: 外部引入: 创建a.js 注意: 我这里的a.js和a.html是放在同一个目录下,如果a.js放在js的目录下,a.html 调用a.js的时候 <script src"/js/a.js"></script>...
掌握JavaScript的练习之道:十个手写函数让你信手拈来!
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
买卖股票的最佳时机 II[中等]
优质博文:IT-BLOG-CN 一、题目 给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。返回你能获得…...
前端开发调试技巧:如何在Component下选中当前插件并且查看当前插件信息
在react开发项目中,在Component下选中组件,然后在控制台输$r 按回车键即可输出该组件信息。例如 $r.props输出该组件的props参数。例子详情见如下截图...
你是否还迷茫要不要学习Linux?
近几年Linux这个词好像很流行,无论是现实工作中,还是在网络信息中均可以听到或者看到有关Linux相关的内容,可以说Linux无处不在。说到这,有人可能会问了,我对Linux比较感兴趣,但是没有接触过Linuxÿ…...
leetcode(1)链表
# 1. 定义一个链表节点 class ListNode:def __init__(self, val0, next_nodeNone):self.val valself.next_node next_node# 2. 定义一个 node头节点 class LinkedList:def __init__(self):self.head None# 3.链表查找元素 get(index): def get_node(self, index)…...
spring boot Rabbit高级教程
消息可靠性 生产者重试机制 首先第一种情况,就是生产者发送消息时,出现了网络故障,导致与MQ的连接中断。 为了解决这个问题,SpringAMQP提供的消息发送时的重试机制。即:当RabbitTemplate与MQ连接超时后,…...
FTP的魅力:构建高效的文件传输基础
1 ftp介绍 1.1 ftp服务器安装 dnf install vsftpd-3.0.3-31.el8.x86_64 -y # 安装ftp服务 systemctl enable --now vsftpd # 启动ftp服务 systemctl stop --now firewalld.service # 关闭防火墙,允许客户端访问anonymous_enableYES #启动匿名用户访问功能1.2 客户…...
70、window11+visual studio2019+共享内存进行数据传输
基本思想:服务端和客户端 写共享内存 #include <windows.h> #include <iostream> using namespace std;HANDLE g_EventRead; // 读信号灯 HANDLE g_EventWrite; // 写信号灯 // 定义共享数据class Writer { public:Writer(const int buf_size, const wchar_t…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
