77、ansible及常见模块

news2024/11/25 10:49:44

ansible

一、ansible:

远程自动化运维

ansible是基于python开发的配置管理和应用部署工具。

也是自动化运维的重要工具。

可以批量配置,部署,管理上千台主机。

只需要在一台主机ansible就可以完成其他主机的操作。

1.1、操作模式:

1、模块化操作,命令行执行。

2、playbook,脚本,也是把命令行脚本化,脚本的格式是yaml格式。

1.2、ansible的特性:幂等性

幂等性:多次操作或者多次执行,对系统的影响不会发生变化,无论执行多少次结果都是一样的。

ansible什么都不会做。

例子1:systemctl restart mysqld

先stop,再start,发生变化

例子2、http get--------幂等性

​ post-------上传数据,发生变化

二、ansible四大组件:

1、lnventory:主机清单 主机组

必须是要声明管理主机的地址或者是其他配置,不声明ansible无法对目标主机进行操作

2、mudules 模块 学习的核心

ansible的功能是靠模块来实现的

3、插件

4、playbooks 剧本 ------ 脚本(复用)

2.1、模块和语法的学习:

192.168.168.21 ansible

192.168.168.22 被管理端

192.168.168.23 被管理端

2.2、安装release,并部署配置

root@test1 ~]# systemctl stop firewalld
[root@test1 ~]# setenforce 0
[root@test1 ~]# yum -y install epel-release   

[root@test1 ~]# yum -y install ansible   ##yum源安装ansible

[root@test1 ~]# cd /etc/ansible/
[root@test1 ansible]# ls
ansible.cfg  hosts  roles
[root@test1 ansible]# vim hosts 
[web]

## alpha.example.org

## beta.example.org

192.168.168.22

[xy102]
## 

## db01.intranet.mydomain.net

## db02.intranet.mydomain.net

192.168.168.23

[root@test1 ansible]# ssh-keygen -t rsa  ##生成密钥
[root@test1 ansible]# sshpass -p '123' ssh-copy-id root@192.168.168.22     ##传输密钥到被管理端192.168.168.22,执行免密登录
[root@test1 ansible]# sshpass -p '123' ssh-copy-id root@192.168.168.23

[root@test1 ansible]# ansible-doc -l ##列出ansible已安装所有的模块

三、模块操作

1、command

1、command模块 基础模块,也是ansible的默认模块,不支持管道符和重定向操作。执行一般的linux命令。

2、ansible <组名/ip地址> -m指定模块,不加-m,默认使用command -a <参数或者命令>

1.1、远程操作被管理端
[root@test1 ansible]# ansible 192.168.168.22 -m command -a 'date'

[root@test1 ansible]# sshpass -p '123' ssh-copy-id root@192.168.168.22 ##重新传免密密钥

[root@test1 ansible]# ansible 192.168.168.22 -m command -a 'date'  ##指定主机

[root@test1 ansible]# ansible web -m command -a 'date'   ##组内所有主机

[root@test1 ansible]# ansible xy102 -m command -a 'date'
192.168.168.23 | CHANGED | rc=0 >>
2024年 08月 21日 星期三 10:01:14 CST

[root@test1 ansible]# ansible all -m command -a 'date'   ##所有组内所有主机执行命令
192.168.168.23 | CHANGED | rc=0 >>
2024年 08月 21日 星期三 10:02:18 CST
192.168.168.22 | CHANGED | rc=0 >>
2024年 08月 21日 星期三 10:02:18 CST

[root@test1 ansible]# ansible all -a 'ls /opt'
##默认是-m command操作

-f 动态查看也看不了,静态可以---------发生环境变化,动态的执行不了,静态可以查看。

chdir 在目标主机提前进入目录,然后执行指令–相当于cd。
[root@test1 ansible]# ansible 192.168.168.23 -m command -a 'chdir=/home ls'   ##chdir相当于cd
192.168.168.23 | CHANGED | rc=0 >>
dn
zhang
creates 判断文件是否存在,如果存在,不执行后面的命令,不存在,就执行
[root@test1 ansible]# ansible 192.168.168.23 -m command -a 'creates=/opt/123 ls'
192.168.168.23 | CHANGED | rc=0 >>
anaconda-ks.cfg
initial-setup-ks.cfg
公共
模板
视频
图片
文档
下载
音乐
桌面


[root@test1 ansible]# ansible 192.168.168.23 -m command -a 'creates=/opt/123 ls'  ##存在123文件夹,不执行
192.168.168.23 | SUCCESS | rc=0 >>
skipped, since /opt/123 exists

remove 判断文件是否存在,如果存在,执行后面的命令
[root@test1 ansible]# ansible 192.168.168.23 -m command -a 'removes=/opt/123 ls'
192.168.168.23 | CHANGED | rc=0 >>
anaconda-ks.cfg
initial-setup-ks.cfg
公共
模板
视频
图片
文档
下载
音乐
桌面

[root@test3 opt]# rm -rf 123
[root@test3 opt]# ls
jenkins-2.396-1.1.noarch.rpm  test

[root@test1 ansible]# ansible 192.168.168.23 -m command -a 'removes=/opt/123 ls'
192.168.168.23 | SUCCESS | rc=0 >>
skipped, since /opt/123 does not exist
解压------需要指定解压的路径
[root@test1 opt]# ansible 192.168.168.23 -a 'tar -xf /opt/nginx-1.22.0.tar.gz -C /opt/'
[root@test1 opt]# ansible 192.168.168.23 -a 'chdir=/opt tar -xf nginx-1.22.0.tar.gz'

2、shell模块

支持管道符和重定向,也可以用逻辑表达式 &&且 ;逻辑或

[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'useradd test'  ##创建用户
192.168.168.23 | CHANGED | rc=0 >>

[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'echo 123456 | passwd --stdin test' ##管道符设置密码
192.168.168.23 | CHANGED | rc=0 >>
更改用户 test 的密码 。
passwd:所有的身份验证令牌已经成功更新。


[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'echo 123 > /opt/123'   ##重定向写内容到文件
192.168.168.23 | CHANGED | rc=0 >>


[root@test3 opt]# ls
123  jenkins-2.396-1.1.noarch.rpm  test
[root@test3 opt]# cat 123
123
[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'cat /opt/123'
192.168.168.23 | CHANGED | rc=0 >>
123
[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'touch /opt/123.txt && echo 123 > /opt/123.txt && cat /opt/123.txt'  ##逻辑且创建文件,写文件,查看文件
[WARNING]: Consider using the file module with state=touch rather than running
'touch'.  If you need to use command because file is insufficient you can add
'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.
192.168.168.23 | CHANGED | rc=0 >>
123

[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'ls /opt'  ##展示opt
192.168.168.23 | CHANGED | rc=0 >>
123
123.txt
jenkins-2.396-1.1.noarch.rpm
test

[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'ls /opt ; cat /etc/pasdsa'##逻辑或
192.168.168.23 | FAILED | rc=1 >>
123
123.txt
jenkins-2.396-1.1.noarch.rpm
testcat: /etc/pasdsa: 没有那个文件或目录non-zero return code
小试牛刀:目标主机创建一个脚本,在脚本内写ifconfig,然后运行脚本,在一条命令完成
第一种
[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh' ##echo -e 使用转义符,\n形成换行
第二种
[root@test1 ansible]# ansible 192.168.168.23 -m shell -a 'echo "#!/bin/bash" >> /opt/test1.sh && echo "ifconfig" >> /opt/test1.sh && sh /opt/test1.sh'     ##>>追加执行,形成换行

复习eof

[root@test1 ansible]# cat <<eof>>test2.sh
> #!/bin/bash
> ifconfig
> eof
[root@test1 ansible]# cat test2.sh 
#!/bin/bash
ifconfig

3、cron模块

定时任务模块minute、hour、day、month、weekday 分、时、日、月、周

[root@test1 ansible]# ansible 192.168.168.23 -m cron -a 'minute=30 hour=8 day=* job="ls /opt"'  ##创建定时任务,未指定名称,job=表示定时任务执行的
[root@test1 ansible]# ansible 192.168.168.23 -a 'crontab -l'##查看定时任务

[root@test1 ansible]# ansible 192.168.168.23 -m cron -a 'minute=30 hour=8 day=* job="ls /opt" name="test1"'##指定名称创建任务
删除定时任务
[root@test1 ansible]# ansible 192.168.168.23 -m cron -a 'name="test1" state=absent' ##删除指定test1
[root@test1 ansible]# ansible 192.168.168.23 -m cron -a 'name="none" state=absent' ##删除none

4、user模块

用户管理模块

  • name 就是用户名 必选参数
  • state=present | absent
  • present创建,默认就是创建,absent删除
  • system=yes | no
  • system=no 普通用户,=yes,程序用户/系统用户
  • UID为1-999的用户在Linux系统中被称为系统用户(也称为伪用户)。这些用户主要是用于运行系统上的服务和守护进程,以确保系统的正常运作。系统用户并非用于日常登录和交互式操作,因此它们通常没有登录shell(如设置为/sbin/nologin),并且其主目录也可能不存在或仅包含系统相关的文件和配置。
  • 在Linux系统中,UID(用户标识符)为1000及以上的用户通常被称为普通用户。这些用户是由系统管理员创建的,用于执行日常任务,如浏览网页、编程、文档编辑等。与UID小于1000的系统用户不同,普通用户具有登录系统的能力,并且可以执行各种操作,但其权限受到一定的限制,以防止对系统造成不必要的损害。
  • uid:指定用户的uid
  • group:指定用户组
  • shell 默认时系统用户可以不加/bin/bash
  • create_home==yes | no bu不是默认的家目录/home,指定家目录,/opt/test1家目录,create_home创建,no就是不创建。
  • password :用户添加密码
  • remove=yes | no:state=absent 删除用户,删除用户时是否删除家目录。
[root@test1 ansible]# ansible 192.168.168.23 -m user -a 'user=xy66 shell=/sbin/nologin system=yes'  
[root@test1 ansible]# ansible 192.168.168.23 -m user -a 'user=xy77 uid=900 shell=/sbin/nologin system=yes'

/sbin/nologin这个账户的用户名和密码,他们也无法登录系统,声明解释器

/bin/bash 是 Unix 和类 Unix 系统中的一个命令行界面和脚本语言,它允许用户与操作系统交互并执行命令,声明解释器为shell

[root@test1 opt]# ansible 192.168.168.23 -m user -a 'user=xy99 system=yes'
192.168.168.23 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 978, 
    "home": "/home/xy99", 
    "name": "xy99", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": true, 
    "uid": 984
}

[root@test1 opt]# ansible 192.168.168.23 -m user -a 'user=xy100 system=no'
192.168.168.23 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 1004, 
    "home": "/home/xy100", 
    "name": "xy100", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": false, 
    "uid": 1004
}
创建家目录,指定家目录,创建密码
[root@test1 ansible]# ansible 192.168.168.23 -m user -a 'name=xy77 home=/opt/xy77 create_home=yes password=123456'

删除用户–删除家目录

[root@test1 ansible]# ansible 192.168.168.23 -m user -a 'name=xy77 remove=yes state=absent'

5、copy复制模块

当前主机的文件复制到目标主机。

本地主机的opt目录下的345复制到192.168.168.23的opt目录下
[root@test1 opt]# ansible 192.168.168.23 -m copy -a 'src=/opt/345 dest=/opt/'

##src表示源主机文件,dest目标主机保存的路径

mode复制文件时,表示权限

ower文件的所有者,属主

group 文件的所在组 属组

content 指定复制的内容,就不能用src

本地主机的opt目录下的345复制到192.168.168.23的opt目录下,并授权640
[root@test1 opt]# ansible 192.168.168.23 -m copy -a 'src=/opt/345 dest=/opt/ mode=640'
本地主机的opt目录下的345复制到192.168.168.23的opt目录下,并授权640,chown改变所有者,和所在组
[root@test1 opt]# ansible 192.168.168.23 -m copy -a 'src=/opt/345 dest=/opt/ mode=640 owner=dn group=xy66'
指定content文本内容写入到192.168.168.23的/opt/houzi 文件中
[root@test1 opt]# ansible 192.168.168.23 -m copy -a 'content="黑神话:悟空,真好 玩" dest=/opt/houzi mode=777 owner=dn group=dn'
文件重命名
[root@test1 opt]# ansible 192.168.168.23 -a 'mv /opt/houzi /opt/孙悟空.txt'   ##文件重命名
192.168.168.23 | CHANGED | rc=0 >>
[root@test1 opt]# ansible 192.168.168.23 -m shell -a 'mv /opt/孙悟空.txt /opt/ 孙悟空1.txt'  ##文件重命名

2.9、file模块

设置文件属性

mode owner group state=touch|absent

touch 创建
absent删除

指定路径,创建文件,并规定文件的权限以及所有者,所在组
[root@test1 opt]# ansible 192.168.168.23 -m file -a 'path=/opt/abc.txt state=touch mode=777 owner=dn group=dn'
创建链接文件
[root@test1 opt]# ansible 192.168.168.23 -m file -a 'path=/opt/abc.txt.link src=/opt/abc.txt state=link'
删除link
[root@test1 opt]# ansible 192.168.168.23 -m file -a 'path=/opt/abc.txt.link src=/opt/abc.txt state=absent'

2.10、hostname模块,设置远程主机的主机名

[root@test1 opt]# ansible 192.168.168.23 -m hostname -a “name=test3”

2.11、ping模块,看success

[root@test1 opt]# ansible all -m ping
192.168.168.22 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.168.23 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"

2.12、yum模块

在目标主机安装软件,只能安装和卸载软件

[root@test1 opt]# ansible 192.168.168.23 -m yum -a 'name=httpd'  ##安装httpd
192.168.168.23 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "httpd-2.4.6-99.el7.centos.1.x86_64 providing httpd is already installed"
    ]
}

[root@test3 ~]# systemctl status httpd

卸载软件
[root@test1 opt]# ansible 192.168.168.23 -m yum -a 'name=httpd state=absent' ##卸载httpd

2.13、service模块

用来管理目标主机上的软件的运行状态

name 服务名称

state=started|stopped|restarted

enabled=true

runlevel=40 ##如果设置开机自启,就需要声明运行级别。

[root@test1 opt]# ansible 192.168.168.23 -m yum -a 'name=nginx'     ##安装nginx
[root@test1 opt]# ansible 192.168.168.23 -m service -a 'name=nginx enabled=true state=started runlevel=60'       ##设置服务启动项

2.14、小实验

1、安装nginx

[root@test1 opt]#  ansible 192.168.168.23 -m yum -a 'name=nginx'

2、开启nginx,开机自启动

[root@test1 opt]# ansible 192.168.168.23 -m service -a 'name=nginx enabled=true state=started runlevel=60'ansible 192.168.168.23 -m service -a 'name=nginx enabled=true state=started runlevel=60'

3、访问的内容是this is nginx1!

[root@test1 opt]# ansible 192.168.168.23 -m shell -a 'echo "this is nginx1" > /usr/share/nginx/html/index.html'
yum模块卸载
[root@test1 opt]# ansible 192.168.168.23 -m yum -a 'name=nginx state=absent'
1、安装nginx;2、开启nginx,开机自启动;3、访问的内容是this is nginx1!
ansible 192.168.168.23 -m shell -a 'yum -y install nginx && systemctl start nginx && systemctl enable nginx && echo "this is nginx!" > /usr/share/nginx/html/index.html && curl 192.168.168.23'

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2061444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dell 服务器 PowerEdge T440 通过BIOS配置RAID阵列

目录 1.清除当前RAID磁盘阵列配置 1.1开机按F2进入System Setup管理界面&#xff1b; 1.2点击Device Settings; 1.3选择RAID controller in Slot 4:DELL PERC Configuration Utility&#xff1b;卡型号> 1.4选择Configuration Management&#xff1b; 1.5选择View Dis…

Java 2.4 - JVM

一、Java 内存区域详解&#xff08;重点&#xff09; 本篇讨论的是 HotSpot 虚拟机 相比于 C 而言&#xff0c;程序员不需要对每个 new 操作都写对应的 delete / free 操作&#xff0c;这些操作我们会交给虚拟机去做。因此&#xff0c;如果不了解虚拟机的原理&#xff0c;一旦…

React 学习——React.memo

1、默认情况下&#xff1a;子跟着父一起渲染 2、memo 缓存,只有props发生变化的时候才会重新渲染 import { memo, useState } from react; // 默认情况下&#xff1a;子跟着父一起渲染 //memo 缓存,只有props发生变化的时候才会重新渲染 const MemoSon memo(function Son()…

Java使用Easy Excel对Excel进行操作

Easy Excel使用教程API&#xff1a; 读Excel | Easy Excel 官网 使用代码示例&#xff1a; 需要自行创建一个Maven项目&#xff0c;然后pom文件中需要的依赖如下&#xff1a; <dependencies><!-- easyExcel 表格依赖 --><dependency><groupId>com.a…

Qt实现tcp协议

void Widget::readyRead_slot() {//读取服务器发来的数据QByteArray msg socket->readAll();QString str QString::fromLocal8Bit(msg);QStringList list str.split(:);if(list.at(0) userName){QString str2;for (int i 1; i < list.count(); i) {str2 list.at(i);…

数据结构初阶(1)——算法的时间复杂度和空间复杂度

目录 1.算法效率 1.1 如何衡量一个算法的好坏 1.2算法的复杂度 2.时间复杂度 2.1时间复杂度的概念 2.2大O的渐进表示法 2.3常见时间复杂度计算举例 4. 常见复杂度对比 5.复杂度的oj练习 5.1消失的数字 5.2旋转数组 1.算法效率 1.1 如何衡量一个算法的好坏 代码不一…

探索数据结构:并查集的分析与实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 并查集的引入 1.1 并查集的概念 并查集是一种树型数据结构&#xf…

StarRocks 存算分离数据回收原理

前言 StarRocks存算分离表中&#xff0c;垃圾回收是为了删除那些无用的历史版本数据&#xff0c;从而节约存储空间。考虑到对象存储按照存储容量收费&#xff0c;因此&#xff0c;节约存储空间对于降本增效尤为必要。 在系统运行过程中&#xff0c;有以下几种情况可能会需要删…

详解华为项目管理,附华为高级项目管理内训材料

&#xff08;一&#xff09;华为在项目管理中通过有效的沟通、灵活的组织结构、坚持不懈的努力、细致的管理和科学的考核体系&#xff0c;实现了持续的创新和发展。通过引进先进的管理模式&#xff0c;强调以客户需求为导向&#xff0c;华为不仅优化了技术管理和项目研发流程&a…

el-table自定义样式,表头固定,数据过多时滚动

最终效果&#xff1a;&#xff08;此处没体现出来滚动&#xff0c;数据没那么多&#xff09; 1.表头固定&#xff0c;设置表头样式&#xff0c;修改表格背景色 <div class"category-table"> <el-table ref"tableRef" class"common-table&quo…

java之类和对象的介绍

1.面向对象和面向过程的概念&#xff1a; 面向对象&#xff1a;面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事。 面向过程&#xff1a;注重完成一件事情的过程&#xff0c;后续代码维护扩展较为麻烦。 以洗衣服为例&#xff0c;面向对象为传统…

微软AI人工智能认证有哪些?

微软提供的人工智能认证主要包括以下几个方面&#xff1a; Azure AI Fundamentals&#xff08;AI900认证&#xff09;&#xff1a;这是一个基础认证&#xff0c;旨在展示与Microsoft Azure软件和服务开发相关的基本AI概念&#xff0c;以创建AI解决方案。它面向具有技术和非技术…

C++学习路线分享

我上大学学的第一门编程语言便是C&#xff0c;靠着那本饱受诟病的谭浩强版的教材度过了大一上学期。学的内容现在看来相当之浅&#xff0c;如果没记错的话只学了个基本的语法&#xff0c;考试的时候考一些冒泡&#xff0c;快排之类的东西就结束了。感觉那些有计算机教育背景的学…

解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题

解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题 目录 &#x1f514; 问题背景&#x1f4c4; 问题代码❓ 问题描述&#x1fa7a; 问题分析✔ 解决方案 &#x1f514; 问题背景 在开发一个使用Qt框架的多线程应用程序时&#xff0c;我们遇到了一个棘手的问题&…

【Linux】生产消费模型实践 --- 基于信号量的环形队列

你送出去的每颗糖都去了该去的地方&#xff0c; 其实地球是圆的&#xff0c; 你做的好事终会回到你身上。 --- 何炅 --- 基于信号量的环形队列 1 信号量2 框架构建3 代码实现4 测试运行 1 信号量 信号量本质是一个计数器&#xff0c;可以在初始化时对设置资源数量&#xf…

数据结构——链式队列和循环队列

目录 引言 队列的定义 队列的分类 1.单链表实现 2.数组实现 队列的功能 队列的声明 1.链式队列 2.循环队列 队列的功能实现 1.队列初始化 (1)链式队列 (2)循环队列 (3)复杂度分析 2.判断队列是否为空 (1)链式队列 (2)循环队列 (3)复杂度分析 3.判断队列是否…

91. UE5 RPG 实现拖拽装配技能以及解除委托的绑定

在上一篇文章里&#xff0c;实现了通过选中技能&#xff0c;然后点击下方的装备技能插槽实现了技能的装配。为了丰富技能装配功能&#xff0c;在这一篇里&#xff0c;我们实现一下通过拖拽技能&#xff0c;实现拖拽功能&#xff0c;我们需要修改两个用户控件&#xff0c;一个就…

鸿蒙内核源码分析(信号生产篇) | 注意结构体的名字和作用.

信号生产 关于信号篇&#xff0c;本只想写一篇&#xff0c;但发现把它想简单了&#xff0c;内容不多&#xff0c;难度极大.整理了好长时间&#xff0c;理解了为何<<深入理解linux内核>>要单独为它开一章&#xff0c;原因有二 信号相关的结构体多&#xff0c;而且…

RTC碰到LXTAL低频晶振停振怎么办?

GD32F303的RTC模块框图如下图所示&#xff0c;RTC时钟源可选择HXTAL/128、LXTAL或IRC40K&#xff0c;一般为了实现更精准的RTC时间&#xff0c;MCU系统均会外挂32.768KHz LXTAL低频晶振&#xff0c;但由于低频晶振负阻抗较大&#xff0c;不容易起振&#xff0c;若外部电路布线、…

vue3 antdv3 去掉Modal的阴影背景,将圆角边框改为直角的显示,看上去不要那么的立体的样式处理。

1、来个没有处理的效果图&#xff1a; 这个有立体的效果&#xff0c;有阴影的效果。 2、要处理一下样式&#xff0c;让这个阴影的效果去掉&#xff1a; 图片的效果不太明显&#xff0c;但是阴影效果确实没有了。 3、代码&#xff1a; /* 去掉遮罩层阴影 */.ant-modal-mask {…