小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

一、概述

Ansible是一种开源的自动化工具,用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法,可以通过SSH协议远程管理和配置多台计算机。

Ansible的主要特点包括:

1、简单易用:设计简单,语法清晰,无需特殊培训即可上手使用。

2、基于模块化的架构:使用各种内置和第三方的插件和模块,可以轻松地扩展功能。

3、配置管理:可以管理各种操作系统、网络设备和云平台等的配置。

4、任务自动化:可以自动执行各种任务,如软件安装、服务启停等。

5、基于剧本(Playbook)的自动化:可以编写剧本来定义一系列任务和配置,实现复杂的自动化流程。

6、可扩展性:可以与其他工具和平台集成,如监控系统、版本控制工具等。

二、工作原理

Ansible的工作原理基于以下几个核心概念:

1、控制节点(Control Node):控制节点是指安装了Ansible的机器,可以是任何一台可以访问到被管理节点的计算机。在控制节点上,管理员可以编写Ansible的配置文件和剧本,然后使用Ansible命令行工具来执行这些任务。

2、主机清单(Inventory):主机清单是一个文本文件,用于定义被管理节点的主机列表和相关的配置信息。其中可以包含主机名、IP地址、SSH连接信息等。管理员可以根据需要在主机清单中组织和分类主机。

3、模块(Modules):模块是Ansible的核心组成部分,用于执行特定的任务。Ansible自带了众多内置模块,如文件操作、软件包管理、服务管理等。管理员可以通过在剧本中使用模块来指定需要执行的任务,并传递参数。

4、剧本(Playbook):剧本是一个定义了一系列任务和配置的YAML格式文件。通过剧本,管理员可以描述需要在被管理节点上执行的操作。剧本由一个或多个Play组成,每个Play包含了一组任务和要操作的主机列表。

5、执行流程:管理员在控制节点上编写好剧本,然后使用Ansible命令行工具执行剧本。当执行命令时,Ansible会首先与被管理节点建立SSH连接,然后将剧本分发到被管理节点上,并在每个节点上按照剧本定义的任务进行执行。执行完成后,Ansible会将执行结果返回到控制节点。

三、ansible的应用

Ansible没有客户端,也不需要在被管理主机添加任何代理程序,通过SSH完成底层通信,而SSH在Linux的发型版本中默认已经安装并启用,而在Windows系统下则依赖于PowerShell,Ansible要求管理端必须是Linux系统,在管理节点通过应用模块将指令发送到被管理主机上,并在执行完毕后自动删除产生的临时文件,根据Ansible使用过程中不同角色,可将其分为三个部分。

1、使用者如何使用Ansible实现自动化运维?

2、Ansible的工具集,Ansible可以实现的功能?

3、作用对象,Ansible可以影响哪些主机?

四、ansible的使用者

1、CMDB:CMDB系统存储和管理着企业IT架构中的各种配置信息,是构建ITL项目核心工具,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具完成操作者所希望达到的目标。

2、PUBLIC/PRIVATE方式,Ansible除了丰富的内置模块外,同时提供丰富的API语言接口,如PHP,Pythone,PERL等多种流行语言,基于PUBLIC/PRIVATE,Ansible以API调用的方式运行。

3、Ad-Hoc命令集,Users直接通过Ad-Hoc命令集调用Ansible工具来完成工作。

4、Playbooks:Users预先编写好Ansible Playbooks,通过执行Playbooks中预先编排好的任务集按序执行命令。

五、ansible的工具集合

Ansible工具集合了inventory,Moudles,Plugins和API。其中,inventory用来管理设备列表,可以通过分组(不同的业务)实现,对组的调用直接影响组内所有的主机;Moudles是各种执行模块,几乎所有的管理任务都是通过模块来执行的;Plugins提供了各种附加功能;API为编程人员提供了一个调用接口,可以做Ansible的二次开发具体表现如下:

1、Ansible Playbook:任务脚本,编排定义Ansible任务集的配置文件,由Ansible按序依次执行,通常是JSON格式的YML/YAML文件;

2、inventory:Ansible管理主机清单

3、Moudle:Ansible执行命令功能模块,多数为内置的核心模块也可以用户自定义;

4、Plugins:模块功能的补充,如连接类型插件,循环插件,变量插件,过滤插件等,该功能不常用。

5、API:提供第三方程序调用的应用程序编程接口;

六、作用对象

Ansible的作用对象不仅仅是Linux和非Linux操作系统的主机,也可以作用于各类PUBLIC/PRIVATE,商业和非商业设备的网络设施。

使用者使用Ansible或Ansible-playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或playbooks后,Ansible会遵循预先定义安排的规则将Playbooks逐步拆解为Play,再将Play组织成Ansible可以识别的任务,随后调用任务涉及的所有模板和插件,根据inventory中自定义的主机列表通过SSH将任务集以临时文件或命令的形式传输给远程客户端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。

七、准备工作

1、准备三台或多台服务器

2、三台主机关闭防火墙

3、三台主机互相通联

4、三台主机互相配置ssh免密登录

八、安装部署

三台主机都按照ansible
yum -y install ansible 

修改主机的配置文件

vim /etc/ansible/hosts
到最后一行插入
[syh]               组名
192.168.77.111      成员ip
192.168.77.115      成员ip

ok这样ansible就配置完成了

九、ansible的使用

ansible命令格式:ansible  要执行命令的组  -m  要使用的模块  -[选项]   指定模块参数

在ansible中有3000多个模块,ansible通过模块来控制组中的成员执行命令,修改文件内容,安装软件等这里只写几个常用的模块

配置完成后测试
ansible -i /etc/ansible/hosts  syh -m  ping
这里-i选项表示inventory 默认为/etc/ansible/hosts
-m表示指定模块
ping是一个模块用来测试

 1、command模块

command模块在远程主机执行命令,但是不支持管道,重定向等shell的特征,常用参数如下(不支持管道,不建议使用)。

  1. chdir:在远程主机上运行命令前要提前进入的目录

  2. creates:在命令运行时创建一个文件,如果文件已经存在,则不会创建任务

  3. removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务

  4. executable:指明运行命令的shell程序

远程查看组中成员家目录的内容
ansible syh -m command -a "chdir=/root ls -l"

查看组成员的的时间和平均负载
ansible syh -m command -a "uptime"

 2、shell模块

shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令,和command模块的区别是它支持shell特征,如管道,重定向等。

重定向
ansible syh -m shell -a "echo 111 > 1.txt"

测试管道符
ansible syh -m shell -a 'ifconfig ens33 | awk 'NR==2' "

 3.raw模块

最原始的方式运行命令(不依赖python,仅通过ssh实现)

清除yum缓存
ansible syh -m raw -a "yum clean all"

4、copy模块

copy模块用于复制指定主机文件到远程主机的指定位置,常见参数如下

  1. dest:指出复制文件的目标目录位置,使用绝对路径。如果源是目录,指目标也要是目录,如果目标文件已经存在会覆盖原有内容。

  2. src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录

  3. mode:指出复制时,目标文件的权限 可选

  4. owner:指出复制时,目标文件的属主 可选

  5. group:指出复制时,目标文件的属组 可选

  6. content:指出复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据到目标文件中

特别提示:

参数:backup=yes===>意思是,如果目标路径下,有与我同名但不同内容的文件时,在覆盖前,对目标文件先进行备份。

所有被管理端节点必须安装libselinux-python包

将syh组中主机的/etc/hosts文件拷贝到/tmp下 指定权限为777 更改属主为syh更改属组为root
ansible syh -m copy -a "src=/etc/hosts dest=/tmp mode=777 owner=Rich group=root"

查看

 5、yum模块

Yum模块基于yum机制,对远程主机管理程序包,常用参数如下。

  1. name:程序包的名称,可以带上版本号,如不指定版本号默认安装为最新版本

  2. state=present | latest | absent:指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包

  3. disablerepo:在用yum安装时禁用某个仓库的ID

  4. enablerepo:在用yum安装时启用某个参考的ID

  5. conf_file:yum运行时的配置文件而不是使用默认的配置文件

  6. diable_gpg_check=yes | no:是否启用完整性校验功能

在组成员中安装dns服务
ansible syh -m yum -a "name=bind state=present"

查看

7.service模块 

Service模块为用来管理远程主机上的服务的模块,常见参数如下:

  1. name:被管理的服务名称

  2. state=started | stopped | restarted:动作包含启动关机或重启

  3. enabled=yes | no:表示是否设置该服务开机自启动

  4. runlevel:如果设定了enabled开机自启动,则要定义在哪些运行目标下自启动

启动组成员中http服务,并设置为开机自启
ansible syh -m service -a "name=httpd state=started enabled=yes"

 查看

 8、user模块

User模块用于管理远程主机上的用户账户,常见参数如下:

  1. name:必选参数  账号名称

  2. state=present | absent:创建账号或者删除账号,present表示创建,absent表示删除

  3. system=yes | no:是否为系统账号

  4. uid:用户UID

  5. group:用户的基本组

  6. groups:用户的附加组

  7. shell:默认使用的shell

  8. home:用户的家目录

  9. move_home=yes | no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动

  10. password:用户的密码,建议使用加密后的字符串

  11. comment:用户的注释信息

  12. remove=yes | no:当state=absent时,是否删除用户的家目录

创建一个程序用户
ansible syh -m user -a 'name=user1 system=yes uid=502 group=root groups=sshd shell=/sbin/nologin home=/home/user1 password=user1 comment="test user"' 

 9、script模块

script模块能够实现远程服务器批量运行本地的shell脚本

vim /opt/file.sh                  在opt目录下创建一个创建20个测试文件的脚本
#!/bin/bash

touch /tmp/file{1..20}.txt

 

查看

 十、playkook(剧本)的使用

playbook格式:ansible-playbook -[选项] 编写的yml文件路径

Playbook配置文件使用YAML语法,具有简洁明了,结构清晰等特点。Playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表,前面介绍的ansible命令虽然可以完成各种任务,但是当配置一系列任务时,逐条输入命令就显得效率非常低下,更有效的方式在playbook配置中配置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运维,YAML文件的扩展名通常为.yaml或.yml

YAML语法和其他高级语言类似,其结构通过缩进来展示,通过“-“来表达选项,通过冒号“:”来分隔键和值。整个文件以“---”开始并以“”结束

1、playbook选项

--syntax-check:检测yaml文件的语法

-C(--check):测试,不会改变主机的任何配置

--list-hosts:列出yaml文件影响的主机列表

--list-tasks:列出yaml文件的任务列表

--list-tags:列出yaml文件中的标签

-t TAGS(--tags=TAGS):表示只执行指定标签的任务

--skip-tags=SKIP_TAGSS:表示除了指定标签任务,执行其他任务

--start-at-task=START_AT:从指定任务开始往下运行

2、修改配置文件(方便测试)

vim /etc/ansible/hosts
[test1]
192.168.77.112

[test2]
192.168.77.115

 3、编写playbook

所有的“-”和“:”后面均有空格,而且要注意缩进和对齐

Playbook的核心元素包含:

  1. hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts中的分组信息

  2. remote_user:远程主机上,运行此任务的默认为root运行

  3. tasks:任务,即定义的具体任务,由模块定义的操作列表

  4. handlers:触发器,类似tasks,只是在特定的条件下才会触发任务。某任务的状态在运行后changed时,可通过“notify”通知给相应的handlers进行触发执行。

  5. roles:角色,将hosts剥离出去,由tasks,handlers等所组成的一种特定的结构集合。

vim /etc/ansible/test1.yml

---										#开头格式(可忽略)
- hosts: test1							#表示对test01(192.168.77.112)的操作
  remote_user: root						#远端执行用户身份root
  tasks:								#任务列表
    - name: adduser						#任务名称
      user: name=user2 state=present	#执行user模块创建用户
      tags:								#创建tag标签
      - testa							#tag标签为testa
    - name: addgroup					#任务名称
      group: name=tests system=yes		#执行group模块创建一个组账号
      tags:								#创建tag标签
      - testb							#tag标签为testb
- hosts: test2							#表示对test02(192.168.77.115)的操作
  remote_user: root						#远端执行用户身份root
  tasks:								#任务列表
    - name: cf							#任务名称
      copy: src=/etc/passwd dest=/home	#执行copy模块复制文件
      tags:								#创建tag标签
      - testc							#tag标签为testsc
...										#结尾格式(可忽略)

测试palybook
ansible-playbook -C /etc/ansible/test.yml

没有报错就可以执行了(有些特殊情况就算没有报错也会执行失败)

 执行

十一、触发器

需要触发才能执行的任务,当之前定义在tasks中的任务执行完成后,若希望在基础上触发其他的任务,这时就需要定义handlers。例如,当通过ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以使配置文件生效,handlers触发器具有以下优点。

  1. handlers是Ansible提供的条件机制之一,handlers和task很类似,但是他在被task通知的时候才会触发执行

  2. handlers只会在所有任务执行完成后执行,而且即使被通知了多次,它也只会执行一次,handlers按照定义的顺序依次执行

---											    //固定开头格式
- hosts: test1									//指定运行主机为test01组
  remote_user: root						        //指定对端运行用户的身份
  tasks: 									    //任务列表
        - name: change port				        //定义任务名称
          command: sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
			                                    //模块为command:使用sed命令替换监听端口为8080
          notify: 				                //完成任务后调用restart httpd server触发器
          - restart httpd server		
  handlers: 			                        //配置触发器
  - name: restart httpd server				    //指定触发器名字
    service: name=httpd state=restarted			//指定触发条件为重启httpd服务

测试playbook (没有报错)

 执行playbook(成功)

十二、变量

vim /etc/ansible/test_vars.yml   编写自定义变量
---
- hosts: all
 vars:                           #定义变量
 - names: "cloud"                #第一个name变量
  age: "3"                       #第二个age变量
 tasks:
 - name: "{{ names }}"           #{{}}两对大括号引用变量,变量名两头空格
  shell: echo "myname {{ names }},myage {{ age }}"
  register: var_result
 - debug: var=var_result
...

 

图中红色的就是刚才定义的变量

 

十三、playbook中的角色

将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色,角色一般存放在/etc/ansible/roles/目录中,可通过ansible的配置文件来调整默认的角色目录。/etc/ansible/roles目录下有很多的子目录,其中每一个子目录对应一个角色。每个角色也有自己的目录结构。

/etc/ansible/roles/为角色集合,该目录下有自定义的各个子目录

  1. mariadb:mysql角色

  2. apache:httpd角色

  3. nginx:nginx角色

每个角色的定义,以特定的层级目录结构进行组织,以Mariadb(mysql角色) 为例

  1. files:存放copy或script等模块调用的文件

  2. templates:存放template模块查找所需要的模板文件的目录,如mysql配置文件等模板

  3. tasks:任务存放目录

  4. handlers:存放相关触发执行器的目录

  5. vars:变量存放的目录

  6. meta:用于存放此角色元数据

  7. default:默认变量存放目录,文件中定义了此角色使用的默认变量

上述目录中tasks,handlers,vars,meta,default至少应该包含一个main.yml,该目录下也可以有其他的yml文件,但是需要在main.yml文件中用include指定将其他.yml文件包含进来。

十三、用ansible-playbook给成员安装mariadb

创建数据库角色
mkdir -pv /etc/ansible/roles/mariadb/{files,tasks,handlers}

vim /etc/ansible/mariadb.yml                    创建mariadb角色
---
- hosts: test1:test2                            需要执行的主机
  remote_user: root                             执行的用户
  roles:                                        
    - mariadb                                   角色
...

cd /etc/ansible/roles/mariadb/tasks     进入任务存放目录
vim main.yml                            编写任务
---			                                    //固定开头格式
- name: install mariadb			                //指定任务名称安装mariadb数据库
  yum: name=mariadb-server state=present		//执行yum模块安装mariadb
- name: move config file		                //指定任务名称移除原有配置文件
  shell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak"  //判断有就移除
- name: provide a new config file				//创建一个新的配置文件
  copy: src=my.cnf dest=/etc/my.cnf		        //src源会自动到files文件去找my.cnf文件
- name: reload mariadb					        //指定任务名称为重启mariadb
  shell: systemctl restart mariadb              //shell模块重启
- name: create database testdb		            //按要求添加执行如下sql语句
  shell: mysql -u root -e "create database testdb;grant all privileges on testdb.* to test@192.168.77.% identified by 'test123';flush privileges;"
  notify:				                        //配置触发器
  - restart mariadb		                        //为重启mariadb
...

cd ../handlers/                             进入触发器文件
vim main.yml                                编写触发器
---
- name: restart mariadb				        //引用上面配置的触发器
  service: name=mariadb state=restarted     //触发后重启mariadb
...

 

cd ../files/
cp /etc/my.cnf /etc/ansible/roles/mariadb/files/
ls
my.cnf				//准备my.cnf文件
cd /etc/ansible/
tree	

 

测试(成功)

 执行成功

 

以上就是ansible的基本使用

如有错误欢迎各位大佬批评指正,我们共同进步

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(33)接收信号强度指示(RSSI)

文章目录 前言 33.1 在你的自动驾驶仪上设置RSSI 33.2 在MissionPlanner的HUD中显示RC接收器的RSSI值 33.3 连接实例 33.4 特殊用例 前言 本文介绍了如何获取自动驾驶仪的接收信号强度指示(RSSI)。 33.1 在你的自动驾驶仪上设置RSSI RSSI 可通过一…

ChatGPT变现五个思路

一、前言 ChatGPT是一款AI聊天机器人,发布于2022年11月。凭借着在广泛的知识领域为消费者问题做出清晰、详尽解答的出色能力,其一经推出就引发全球轰动,自然也得到零售行业的高度关注。例如,消费者只要询问ChatGPT如何布置一个梦…

flink1.16读取hive数据存到es 本地和服务器上遇到的问题和解决思路

话不多说 直接上官网 Overview | Apache Flink hive版本 3.1.3000 ​ hadoop 版本 3.1.1.7.1.7 ​ flink 1.16.2 ​ 代码 很简单我还是贴下 import com.fasterxml.jackson.databind.ObjectMapper import com.typesafe.config.{Config, ConfigFactory} import org.apache…

Redis可视化工具 - Another Redis Desktop Manager 安装与使用详细步骤

一、下载安装 Another Redis Desktop Manager AnotherRedisDesktopManager 发行版 - Gitee.com(gitee) 2. 安装 以管理员身份运行下载的安装包 选择是为所有用户还是当前用户安装,按需选择 选择安装位置,点击安装进行安装 安装…

Unity UnityWebRequest使用http与web服务器通讯

一、搭建客户端与服务器http通讯 1.在Nodejs中文官网Node.js 中文网 (nodejs.com.cn),下载并安装Nodejs 2.在项目文件夹下新建WebServer文件夹,打开CMD窗口,在WebServer文件夹路径下安装express 3.在WebServer文件夹中新建main.js文件&#…

Unity游戏源码分享-迷你高尔夫球游戏MiniGolfConstructionKitv1.1

Unity游戏源码分享-迷你高尔夫球游戏MiniGolfConstructionKitv1.1 有多个游戏关卡 工程地址:https://download.csdn.net/download/Highning0007/88052881

安全中级11:sql注入+联合、报错、时间盲注+sqlmap使用

目录 一、sql注入原理 二、联合SQL注入的方法 1.总体的思路 (1)先进行闭合,进行报错 (2)进行逃逸 (3)外带数据 (4)获取库名 表名 列名 数据 (5&#…

自动驾驶商用驶入“快车道”,汽车软件厂商如何“抢市”?

L3级及以上自动驾驶的商业化进程正在驶入“快车道”。 一方面,高阶自动驾驶的相关法规及标准不断出台,为自动驾驶行业的发展注入了“强心剂”。 比如工业和信息化部副部长辛国斌就曾表示,将启动智能网联汽车准入和上路通行试点,…

freemarker模板在客服域的使用场景及用法介绍

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年7月15日 🍊 点…

垃圾收集器CMS-JVM(十一)

Jvm类的创建过程包括类的加载,类的验证,准备,分析,初始化。 验证是不是.class文件。 准备过程则是先赋值初始化的值,并不是直接赋值原始值。 分析比较复杂,会有静态链接处理和动态链接处理。 最后就是类…

uni-app:scroll-view滚动盒子,实现横(纵)向滚动条

参照&#xff1a;scroll-view | uni-app官网 (dcloud.net.cn) 样式&#xff1a; 代码&#xff1a; <template><view class"box"><scroll-view scroll-x"true" class"scroll"><view class"box1"> <view c…

使用Vue + FormData + axios实现图片上传功能实战

前言 上节回顾 上一小节中,我们添加了Vue-router的路有数据,这些数据都将是后续实战课程中的真实路由数据了。同时引入了ElementUI的el-menu做为左侧菜单的组件,但本专栏的特点就是遇到第三方功能和组件,自己尽量也要实现一遍,所以,在文章末尾又自己实现了一个tg-menu的…

Docker 安装 Nginx,并实现负载均衡

1、获取 nginx 的镜像 # 默认是latest版本docker pull nginx 2、运行 nginx 容器 docker run --name nginx-80 -p 80:80 --rm -d nginx# --name nginx-80 设定容器的名称# -p 80:80 端口进行映射&#xff0c;将本地的80端口映射到容器内部的80端口# --rm 表示容器退出后直接…

gogs的自定义配置

在 GOGS 下载并安装后&#xff0c;在程序目录下建立一个custom/conf/app.ini的配置文件&#xff0c;内容如下&#xff1a; APP_NAME Gogs # APP名字 RUN_USER git # 启动用户&#xff0c;设置后只能以此账号启动gogs RUN_MODE prod[database] DB_TYPE mysql HOST 1…

热门二叉树面试题

606. 根据二叉树创建字符串 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&a…

SpringCloud整合Sentinel

文章目录 1、Sentinel介绍2、安装Sentinel控制台3、微服务整合Sentinel 1、Sentinel介绍 阿里开源的流量控制组件官网&#xff1a;https://sentinelguard.io/zh-cn/index.html承接了阿里双十一大促流量的核心场景&#xff0c;如秒杀、消息削峰填谷、集群流量控制、实时熔断下游…

vue+relation-graph绘制关系图实用组件

先在终端执行命令 vue create relationgraph创建一个vue2的项目 然后在编辑器中打开新创建的项目 在终端中执行命令 npm install relation-graph --save引入依赖 这样 我们relation-graph就进来了 然后 我们在需要使用的组件中编写代码如下 <template><div>&…

MyBatis 系列2 -- 增加、删除、修改操作

1. 前言 上一系列介绍了MyBatis的背景,以及为什么我们使用MyBatis进行操作数据库,还实现了使用MyBatis进行查询数据库的,接下来我们继续将使用MyBatis操作数据库的其他三种基本操作进行总结. 目录 1. 前言 2. 增加用户操作 3. 修改用户操作 4. 删除用户操作 5. 多表查询操…

3. CSS-定位

absolute和relative依据什么定位? relative依据自身定位,absolute 依据最近一层的定位元素定位 (定位元素是指开启了absolute relative fixed的父元素,没有就是根元素body) 居中对齐的实现方式:详情看这篇博客

webpack-theme-color-replacer+elementui自定义配置主题色

webpack-theme-color-replacer原理是通过获取到配置数组里的颜色值&#xff0c;在触发换色方法时&#xff0c;elementui使用的颜色值存在与配置表中颜色一致的颜色&#xff0c;则改颜色会被替换成新的颜色值。 若是自定义的css文件&#xff0c;需要配置css文件路径 若是需要修…