day1:ansible

ansible-doc <module_name>(如果没有网,那这个超级有用)

这个很有用,用来查单个模块的文档。

ansible-doc -l
列出所有模块
ansible-doc -s <module_name>
查看更详细的模块文档。
ansible-doc --help
使用 --help 或 -h 获取帮助信息

一,自动化运算场景与工具

场景描述

场景

假如我要为100台服务器做同一个操作,比如修改一下yum源

方案
  • 手动
    • 一台一台用手动或者ssh操作,效率低
  • shell
    • 写个脚本,到时快,但是每台机器都不太一样,占用进程,免密设置麻烦

概述

自动化运维(AIOps 或 DevOps)是指通过使用自动化工具和技术,将日常的系统运维任务、软件发布、配置管理、监控、日志分析等流程自动化,以提高运维效率、减少人工干预、降低错误率,并确保系统的高可用性和可靠性。自动化运维不仅包括基础设施的管理,还涉及软件生命周期管理、应用程序部署、监控、故障响应和性能优化等多个方面。

常见工具(很多)

  • Ansible:一个基于 YAML 配置文件的自动化工具,无代理架构,易于使用,适用于服务器配置、应用部署和任务自动化。(不需要客户端)
  • Puppet:一个配置管理工具,使用声明性语言来定义基础设施的状态。适用于大规模环境的自动化管理。(最完整最复杂)
  • Chef:类似于 Puppet,Chef 是一个自动化平台,用于管理基础设施的配置、部署和操作。它通过 Ruby 编写自定义资源和任务。
  • SaltStack:一个配置管理和自动化工具,支持并行执行任务,能够管理大量节点,特别适合大规模基础设施管理。(需要客户端)

二,ansible的概述与搭建

概述

Ansible 是一个开源的自动化工具,主要用于配置管理、应用程序部署、任务自动化和多台服务器的管理。它的设计目的是简化管理和自动化的过程,通过无代理(Agentless)的方法让运维人员能够以更高效和灵活的方式管理大量主机。Ansible 使用简单的配置语言和现有的 SSH 协议进行操作,能够非常高效地处理从单台机器到数千台机器的配置和管理任务。

1. Ansible 的特点• 简洁性:Ansible 使用 YAML 语法编写配置文件(称为 Playbook),易于理解和维护。• 无代理:Ansible 不需要在被管理的节点上安装任何代理软件。它通过 SSH 或 WinRM 连接到远程主机,执行命令和任务。• 可扩展性:Ansible 提供了多种扩展机制,如自定义模块、插件和动态库存支持,可以轻松集成到现有的基础设施和工具链中。• 跨平台支持:Ansible 可以管理 Linux、Unix、Windows 等多个平台上的主机。• 并行执行:Ansible 支持并行执行任务,能够高效地管理大量主机。
2. Ansible 的组件• 控制节点(Control Node):控制节点是运行 Ansible 的地方,通常是开发者或运维人员的工作站。控制节点负责执行 Playbook 和管理被控制节点。• 被管理节点(Managed Nodes):被管理节点是由 Ansible 管理的远程主机,它们可以是任何支持 SSH 或 WinRM 的设备,如服务器、虚拟机、云实例等。• Playbook:Playbook 是 Ansible 的核心部分,它是用 YAML 编写的配置文件,定义了一系列要在远程主机上执行的任务。Playbook 支持条件逻辑、循环、变量和包含其他 Playbook 等功能。• 模块(Modules):Ansible 提供了大量的模块,用于执行特定的操作,如安装软件包、管理服务、文件操作等。模块是 Ansible 中执行任务的实际代码单元。• 任务(Tasks):任务是 Playbook 中定义的具体操作,每个任务都调用一个模块来执行实际操作。• 库存(Inventory):库存是 Ansible 用来管理远程主机的清单。库存可以是静态的(例如一个简单的 INI 文件),也可以是动态的(例如通过 API 自动生成)。• 插件(Plugins):Ansible 提供了多种插件,可以扩展其功能,包括连接插件、回调插件、动态库存插件等。
3. Ansible 工作流程
Ansible 的工作流程通常是如下几步:1. 控制节点发起请求:用户通过 Ansible 控制节点(通常是本地计算机)发起请求来管理远程主机。2. 通过 SSH 或 WinRM 连接:Ansible 控制节点通过 SSH(Linux/Unix)或 WinRM(Windows)连接到远程主机。3. 执行任务:Ansible 在远程主机上执行任务。任务是通过模块来完成的,Ansible 会依次执行 Playbook 中定义的任务。4. 返回结果:任务执行结果返回到控制节点,供用户查看和分析。
4. Ansible 的常见使用场景• 配置管理:自动化服务器、应用程序和服务的配置。比如安装和配置 Nginx、MySQL 等软件。• 应用程序部署:自动化应用程序的部署过程,包括代码的推送、环境的配置等。• 基础设施管理:自动化管理虚拟机、容器等基础设施,进行系统更新和维护。• 云资源管理:通过与 AWS、Azure、Google Cloud 等云平台的集成,自动化云资源的创建、管理和销毁。• 持续集成和持续部署(CI/CD):与 Jenkins 等 CI/CD 工具结合,自动化软件构建、测试和部署

搭建

环境准备

IP地址

主机名

配置要求

服务器角色

192.168.13.129/24

ansible

可用就行,大于目标主机

ansible服务器

1192.168.13.133/24

host01

可用就行

目标主机

192.168.13.134/24

host02

可用就行

目标主机

192.168.13.130/24

host03

可用就行

目标主机

ansible主机

1,设置主机名
hostnamectl set-hostname ansible
su -root
2,修改hosts文件
echo "目标主机ip1  目标主机名1" >> /etc/hosts
echo "目标主机ip2  目标主机名2" >> /etc/hosts
echo "目标主机ip3  目标主机名3" >> /etc/hosts
比如
echo "192.168.13.133  host1" >> /etc/hosts
3,关闭防火墙和SELINUX
4,设置时间同步
安装虚拟机的时候勾选,同步宿主机时间就可以了
5,配置yum源,扩展源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum clean all
yum makecache
yum install epel-release -y6,安装ansible,只用在ansible主机安装就可以了
yum install ansible -y
ansible --version

目标主机

目标主机要打开sshd服务,并查看是否使用了22端口
systemctl restart sshd;systemctl status sshd
修改主机名
hostnamectl set-hostname host1;su
hostnamectl set-hostname host2;su
hostnamectl set-hostname host3;su

ansible命令

ansible [host-pattern] [options] [module] [arguments]host-pattern:目标主机或主机组(如:all, webservers等)options:命令选项(如:-i指定库存文件,-u指定远程用户等)-i:指定库存文件路径-u:指定远程主机的用户名-k:在需要密码时,提示输入SSH密码(用于非免密登录的场景)-b:使用sudo权限执行命令-v:启用详细输出-f:指定并发任务的数量-o: 就是精简模式,一行显示,也可以放到最后module:Ansible模块(如:ping, shell, yum等)-m 【模块】的方式指定arguments:模块的参数-a "<arguments>":指定模块的参数。

主机清单

通过ansible的ping模块测试ansible的主机清单文件,主要验证:分组,子分组,组变量

需求1:使用ansible去ping三台主机

ansible host1 -m ping

这个警告表示Ansible无法找到你指定的目标主机或主机组,因此默认只会连接到本地主机(localhost)。出现这个问题的常见原因是库存文件为空或者没有正确指定库存文件。

解决:

rpm -qc ansible找到相关文件,有一个叫hosts的文件,和系统的hosts类似,但是ansible只能根据他操作说打开它。

将域名追加进入文件。

ansible host1 -m ping还是有问题,因为要密码和用户

ansible host1 -m ping -u 用户名 -k '密码'

需求2:给host2设置免密

先生成一个ssh的密钥

ssh-keygen [options]-t:指定密钥类型(例如 rsa, dsa, ecdsa, ed25519 等)。-b:指定密钥的位数(适用于 RSA 密钥),例如 2048 位、4096 位等。-f:指定密钥文件的保存路径。默认保存位置是 ~/.ssh/id_rsassh-keygen -t rsa -f /path/to/your_key-C:为密钥添加注释(一般用于标识密钥用途)。-p:更改现有私钥的密码,-p '' 表示密码移除ssh-keygen -p -f ~/.ssh/id_rsa移除现有私钥的密码:然后在提示输入新密码时,按回车键不设置密码即可。更改现有私钥的密码:输入密码就可以了-q:启用安静模式,禁止显示冗余的输出信息。-N:设置私钥的密码,如果不想设置密码,使用空字符串(""),而不是通过交互式输入。ssh-keygen -t rsa -b 2048 -N "your_password"-P 选项用于 直接设置私钥密码,它在密钥生成时提供一个密码,而不是通过交互式输入。ssh-keygen -t rsa -b 2048 -P "your_password"
-N和-P一样,就像是-N是新版本,-P是老版本。推荐-N,但是-P也可以用。

再将密钥发送到目标主机

ssh-copy-id user@hostname
使用 ssh-copy-id 将生成的公钥复制到目标主机的 ~/.ssh/authorized_keys 文件中,以便进行免密码登录。
cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> ~/.ssh/authorized_keys'
如果没有 ssh-copy-id 命令,可以手动将公钥内容复制到目标主机的 ~/.ssh/authorized_keys 文件中。

这样就可以免密登录了


说了这么多,还没有讲到分组之类的,前面出了命令还是牛头不搭马嘴的,其实我是想让大家先一个一个的ping,然后再说分组,让大家知道分组的好。

创建一个简单的主机清单文件

创建一个名为 hosts.ini 的清单文件,内容如下:(要说的是可以在默认的hosts文件中创建,在其他地方创建要用-i指定绝对路径才可以引用)

#分组是 Ansible 中的一个概念,它帮助你将多个主机组织到一起,以便批量执行操作。你可以将主机按功能、角色、地理位置等分类到不同的组中。[host]
#这里放域名,表示主机,其它设置可以在后面空格隔开,也可以在【xx:vars】中写
host1
#host1 ansible_host=192.168.1.102表示指定ip,但是我们之前在系统的hosts做了映射,所以就没必要了,要说的时【xx:vars】中放到是大家共有的参数。
host2
host3[host:vars]
ansible_ssh_user=root
#账号
ansible_ssh_pass=ly
#密码
ansible_ssh_port=80
#端口#子分组是指一个分组(父分组)下面可以包含其他分组(子分组)。子分组本质上是父分组的扩展,它能够继承父分组的所有主机和变量,并且可以定义自己的主机和变量。#Ansible 使用 :children 关键字来定义子分组关系。父分组中通过 :children 指定哪些子分组属于它。
#【父分组:children】
#子分组1
#子分组2
#…………[all_servers:children]
#父分组,简单的说就是当你有多个分组时,你可以将多个分组作为父分组的子成员,通过父分组的变量调控可以影响到其成员组。
#放组名
host[all_servers:vars]
#子分组也可以设置vars

变量优先级顺序(从低到高):

  • 全局变量:如 ansible.cfggroup_vars/all 中的变量。
  • 组变量:如 group_vars/ 目录中为特定分组(如 [all_servers][web_servers])定义的变量。
  • 子分组变量:子分组中的变量会覆盖父分组中的变量。
  • 主机变量host_vars/ 目录中为特定主机定义的变量,具有最高优先级。
  • 命令行传入的变量:通过 -e 参数传递的变量,优先级最高。

ansible host -i hosts.ini -m ping

作业

三,ansible模块

概述

Ansible 模块是执行自动化任务的基本单位。模块封装了执行特定操作的逻辑,并将它们作为任务执行。通过调用模块,Ansible 能够在远程主机上执行各种操作,例如管理文件、安装软件、配置系统等。

Ansible 模块的运行方式是通过命令行工具或者 Playbook 文件调用,它们使得任务更加可复用和易于维护。每个模块通常会执行一个单独的操作,并且返回一些结果(如成功与否、返回的输出数据等)。

常见模块

模块功能常见参数
ping用于测试目标主机的连通性。
command运行系统命令(不支持 shell 特性)。cmd(要执行的命令)
shell在远程主机上执行 shell 命令。cmd(要执行的命令),creates(命令创建的文件路径,用于避免重复执行),chdir(工作目录)
wait_for等待某些条件满足(如端口开启、文件出现等)。host(主机 IP 或域名),port(端口号),statestartedstopped),timeout(超时时间)
assert用于验证某些条件是否为真。如果条件不成立,任务失败。that(条件表达式,例如 ansible_facts['distribution'] == 'CentOS'),msg(失败时输出的消息)
file管理文件和目录的属性(如权限、所有者、符号链接等)。path(目标文件或目录路径),state(文件状态,如 file, directory, absent),mode(文件权限),owner(所有者),group(用户组)
copy将本地文件复制到远程主机。src(本地文件路径),dest(目标文件路径),mode(文件权限),owner(所有者),group(用户组)
lineinfile管理文件中的单行内容(添加、修改或删除行)。path(文件路径),line(行内容),state(行状态,如 presentabsent),regexp(匹配正则)
template将 Jinja2 模板文件复制到远程主机,并渲染内容。src(模板文件路径),dest(目标文件路径)
cron管理 cron 任务,设置定时任务。name(任务名称),minute(分钟),hour(小时),day(日期),month(月份),weekday(星期几),job(任务命令)
yum管理 CentOS/RHEL 系统上的软件包。name(软件包名称),state(软件包状态,如 present, absent, latest),enablerepo(启用的仓库),disablerepo(禁用的仓库)
apt用于管理基于 Debian 的系统上的软件包(如 Ubuntu)。name(软件包名称),state(软件包状态,如 present, absent, latest),update_cache(是否更新缓存)
service管理服务的启动、停止、重启等操作。name(服务名称),state(服务状态,如 started, stopped, restarted),enabled(是否开机启动)
user管理用户账户(如创建、删除用户、修改用户属性)。name(用户名),state(用户状态,如 present, absent),uid(用户ID),groups(用户组),password(密码)
group管理 Linux 用户组(如创建、删除用户组、修改用户组属性)。name(用户组名称),state(用户组状态,如 present, absent),gid(用户组 ID)
git在目标主机上操作 Git 仓库(如克隆、拉取等)。repo(Git 仓库 URL),dest(目标路径),version(分支或标签),clone(是否克隆仓库)
docker_container用于管理 Docker 容器(启动、停止、删除等)。name(容器名称),state(容器状态,如 started, stopped, restarted),image(镜像名称)
docker_image用于管理 Docker 镜像(拉取、删除等)。name(镜像名称),state(镜像状态,如 present, absent),tag(镜像标签)
firewalld管理 firewalld 防火墙规则。service(服务名称),state(防火墙规则状态,如 enabled, disabled),zone(防火墙区域)
selinux管理 SELinux 状态。policy(SELinux 策略),state(SELinux 状态,如 enabled, disabled, permissive

功能分组:

  1. 系统检查与验证

    • ping:测试主机连通性。
    • wait_for:等待特定条件满足(如端口开启)。
    • assert:验证条件是否为真。
  2. 文件管理与配置

    • file:管理文件和目录的权限、所有者等。
    • copy:复制本地文件到远程主机。
    • lineinfile:编辑文件中的单行内容。
    • template:通过 Jinja2 模板渲染文件并复制。
  3. 定时任务与服务管理

    • cron:设置定时任务(cron jobs)。
    • service:启动、停止或重启服务。
  4. 软件包管理

    • yum:管理 CentOS/RHEL 系统的 RPM 包。
    • apt:管理 Debian/Ubuntu 系统的 APT 包。
  5. 用户与用户组管理

    • user:管理用户账户。
    • group:管理用户组。
  6. 版本控制与容器管理

    • git:操作 Git 仓库(克隆、拉取等)。
    • docker_container:管理 Docker 容器。
    • docker_image:管理 Docker 镜像。
  7. 安全与防火墙管理

    • firewalld:管理防火墙规则。
    • selinux:管理 SELinux 状态。

file模块

file 模块是 Ansible 中用于管理文件和目录的模块,可以用于设置文件或目录的属性,例如权限、所有者、符号链接等。该模块常用于配置文件的管理,比如设置文件的权限、创建目录、删除文件等。

常见用途

  • 设置文件或目录的权限、所有者和用户组
  • 创建或删除文件/目录
  • 管理符号链接
  • 更改文件的内容状态(比如将文件删除)

模块参数

参数描述
path目标文件或目录的路径。
state文件或目录的状态,常用值:file(文件),directory(目录),absent(文件或目录不存在)。
mode设置文件权限,格式如 0644
owner设置文件的所有者,通常是一个用户名。
group设置文件的用户组,通常是一个用户组名。
follow设置是否追踪符号链接。默认为 no,如果设置为 yes,会遵循符号链接。
recurse如果设置为 yes,会递归操作所有子目录和文件。适用于目录操作。
selevel用于设置 SELinux 安全上下文的级别。
serole用于设置 SELinux 安全角色。
setype用于设置 SELinux 安全类型。
seuser用于设置 SELinux 安全用户。

常见的 state

  • touch:确保目标是一个文件,若目标不存在,则创建它。(有些地方可能说是file,但是这是错误的)
  • file:即使文件不存在也不会创建,一般用于更改(只对文件有效)
  • directory:确保目标是一个目录,若目标不存在,则创建它。
  • absent:确保目标不存在,若目标存在则删除它(连同内部文件一起删除,如果是文件夹的话)。
  • link:创建符号链接,指向目标文件或目录。src=/源  dest=/目标,其它都用path不用src
  • hard:创建硬链接,指向目标文件或目录。src=/源  dest=/目标,其它都用path不用src

示例用法

ansible host -m file -a "path=/root/liye state=directory mode=0644 owner=root group=root"

注意这里报错的原因是mode,通常目录的权限是0755,我的意思是要有x权限,至少要有一个x权限

ansible host -m file -a "src=/root/liye dest=/root/liye/liye.l state=link"这个是创链接的

copy模块

常见用途

  • 将文件从控制节点复制到目标主机。
  • 配置文件的分发。
  • 复制脚本、配置文件到远程服务器。
  • 设置文件权限、所有者、组等属性。

模块参数

参数描述示例用法
src指定源文件的路径(控制节点上的文件)。src=/path/to/local_file
dest目标文件路径(远程主机上的路径)。dest=/path/to/remote_file
mode设置文件权限(如:06440755)。mode=0644
owner设置文件的所有者。owner=root
group设置文件的所属组。group=root
backup如果目标文件已存在,是否备份文件。备份会将文件重命名为 <filename>.<timestamp>.bakbackup=yes
force是否强制复制文件。如果设置为 no,只有当文件内容发生变化时,才会复制文件;默认值是 yesforce=no
content将内容直接写入文件,而不是从源文件复制。此时,src 参数无效。content="Hello World!"
validate复制文件后,验证文件内容是否符合正则表达式。validate='sha256sum %s'

示例用法

示例 1:将本地文件复制到远程主机

将控制节点上的 /path/to/local_file 文件复制到远程主机的 /path/to/remote_file

ansible host -m copy -a "src=/path/to/local_file dest=/path/to/remote_file"

示例 2:复制文件并设置权限

将文件复制到目标路径,并设置文件权限为 0644

ansible host -m copy -a "src=/path/to/local_file dest=/path/to/remote_file mode=0644"

示例 3:设置文件所有者和组

将文件复制并设置文件所有者为 root,组为 root

ansible host -m copy -a "src=/path/to/local_file dest=/path/to/remote_file owner=root group=root"

示例 4:备份目标文件

如果目标文件已存在,设置 backup=yes 会自动备份该文件。

ansible host -m copy -a "src=/path/to/local_file dest=/path/to/remote_file backup=yes"

备份的是目标主机上的原始文件,而不是要发送的本地文件。

备份文件会被重命名,通常是原文件名后加上一个时间戳(例如:file.txt.1638730242.bak)。

示例 5:强制覆盖文件

即使文件内容没有变化,也强制覆盖目标文件。

ansible host -m copy -a "src=/path/to/local_file dest=/path/to/remote_file force=yes"

示例 6:将内容直接写入文件

将直接内容写入文件,而不是从本地文件复制。src 参数无效。

ansible host -m copy -a "dest=/root/testfile content='This is a test file.'"(多次写覆盖)

示例 7:将目录复制到远程主机

将本地目录 /path/to/local_dir 复制到远程主机的 /path/to/remote_dir

ansible host -m copy -a "src=/path/to/local_dir/ dest=/path/to/remote_dir/ mode=0755"
注意src 后面有斜杠 /,表示复制目录内容,而不是整个目录本身。不加就是复制目录,很奇怪,我的显示"changed": false,但是却移动过去了。

示例 8:验证文件内容

复制文件后,通过正则验证文件内容是否符合要求。

ansible host -m copy -a "src=/path/to/local_file dest=/path/to/remote_file validate='sha256sum %s'"

user模块

user 模块是 Ansible 中用于管理用户账户的模块,可以用来创建、删除或修改远程主机上的用户账户。它提供了多种参数,可以灵活地管理用户的相关设置。

常用的 user 模块参数

参数类型描述默认值常用度
name字符串必填,指定用户的用户名。★★★★★
state字符串用于管理用户的状态,present 表示创建用户,absent 表示删除用户。present★★★★★
password字符串设置用户的密码,通常是加密后的密码。★★★★☆
echo "mypassword" | openssl passwd -1 -stdin
  • -1:选择 MD5 算法。这是较老的加密算法,在现代系统中已经被认为不够安全,因此推荐使用 SHA-512(即 -6 参数,更安全)或者 SHA-256(即 -5 参数)。
  • -stdin:表示从标准输入读取密码。在这里,echo 命令的输出通过管道传递给 openssl,而无需手动输入密码。
comment字符串设置用户的描述信息,通常是用户的全名或其他相关信息。★★★★☆
group字符串设置用户的主组,用户只能属于一个主组。★★★★☆
groups字符串设置用户的附加组,支持多个组,多个组名用逗号分隔。★★★★☆
append布尔值如果你希望添加附加组而不覆盖现有的组,可以使用 append=yes 参数。no★★★☆☆
home字符串设置用户的主目录。如果目录不存在,可以自动创建(如果 create_homeyes)。默认目录在/home/下★★★☆☆
move_home布尔值是否在修改用户的主目录时,自动将用户现有的文件移动到新主目录。no★★★☆☆
shell字符串设置用户的登录 shell,例如 /bin/bash/bin/bash★★★☆☆
create_home布尔值是否在创建用户时自动创建主目录。如果为 yes,则创建;如果为 no,则不创建。yes★★★☆☆
uid整数设置用户的 UID(用户标识符)。如果未指定,则系统自动分配。★★★☆☆
remove布尔值删除用户时是否删除用户的主目录。yes 表示删除,no 表示不删除。no★★★☆☆
force布尔值如果为 yes,强制修改用户属性,忽略任何已有的文件和目录冲突(例如,修改主目录时)。no★★★☆☆
system布尔值如果为 yes,则创建系统用户,系统用户的 UID 通常较低。no★★★☆☆
non_unique布尔值如果为 yes,允许多个用户具有相同的 UID(用户标识符)。no★★☆☆☆

示例使用

1. 创建一个用户 alice,并指定主目录、shell 和描述信息:

ansible host -m user -a "name=alice state=present home=/home/alice shell=/bin/bash comment='Alice User'"

2. 创建用户并强制修改其主目录:

ansible host -m user -a "name=bob state=present home=/home/bob move_home=yes force=yes"

3. 删除用户 alice,并删除用户的主目录:

ansible host -m user -a "name=bob state=present home=/home/bob move_home=yes force=yes"

4. 设置用户 alice 的密码(使用加密后的密码):

ansible host -m user -a "name=alice password='$6$rounds=5000$saltsalt$encryptedpassword'"

5. 创建一个系统用户 webuser,并设置其为系统用户:

ansible host -m user -a "name=webuser state=present system=yes"

yum模块

yum 模块是 Ansible 中用于管理和操作基于 RPM 的 Linux 系统(如 CentOS、RHEL、Fedora 等)软件包的一个模块。它允许你通过 Ansible 来安装、升级、删除软件包,或管理 yum 仓库的配置。

常用参数
参数类型描述默认值
name字符串/列表要安装、更新或删除的软件包名称,支持多个包名用逗号分隔。只有仓库操作时才不会用到name
state字符串软件包的状态。present 表示安装,latest 表示更新到最新版本,absent 表示删除软件包。present
update_cache布尔值是否更新缓存。yes 表示更新,no 表示不更新。no
disable_gpg_check布尔值是否禁用 GPG 检查。yes 禁用 GPG 检查,no 启用 GPG 检查。no
enablerepo字符串/列表启用指定的仓库,可以指定一个或多个仓库名,多个仓库名之间用逗号分隔。
disablerepo字符串/列表禁用指定的仓库,多个仓库名用逗号分隔。
update_only布尔值如果为 yes,则仅更新已安装的软件包。no
installroot字符串指定软件包安装的根目录。默认情况下是 //
verify布尔值是否在安装后验证软件包。yes 表示验证,no 表示不验证。no
exclude字符串/列表exclude 是一个以逗号分隔的软件包名称列表。Ansible 在执行 yum 操作时,会排除这些包,避免它们被更新或安装。(可以用*通配)

示例使用

1. 安装软件包

安装一个或多个软件包,例如安装 httpdvim

ansible host -m yum -a "name=httpd,vim state=present"

2. 安装最新版本的软件包

如果你想安装软件包的最新版本,可以将 state 设置为 latest(对已安装进行更新)

ansible host -m yum -a "name=httpd state=latest"

3. 删除软件包

如果你要删除一个或多个软件包,可以将 state 设置为 absent

ansible host -m yum -a "name=httpd state=absent"

4. 更新缓存

在某些情况下,你可能希望更新软件包缓存(尤其是在添加了新的仓库后):

ansible host -m yum -a "name=httpd update_cache=yes state=present"

5. 禁用 GPG 检查

如果你遇到 GPG 错误,或者在使用不受信任的仓库时,可以选择禁用 GPG 检查:

ansible host -m yum -a "name=httpd state=present disable_gpg_check=yes"

6. 启用和禁用特定的仓库

如果你只想使用特定的仓库来安装软件包,可以使用 enablerepodisablerepo 参数。

  • 启用特定仓库:

    • ansible host -m yum -a "name=httpd enablerepo=epel state=present"

  • 禁用特定仓库:

    • ansible host -m yum -a "name=httpd disablerepo=base state=present"

7. 仅更新已安装的软件包

如果你只想更新已安装的软件包,而不是安装新软件包,可以使用 update_only=yes

ansible host -m yum -a "name=httpd update_only=yes"

service模块

Ansible 的 service 模块用于管理和控制系统服务(如启动、停止、重启等)。它是一个通用模块,适用于大多数 Linux 和 Unix 系统。通过这个模块,可以在目标主机上启用、禁用、启动、停止或重启服务。

常用参数
参数类型描述默认值
name字符串要管理的服务名称(如 httpd, sshd, nginx 等)。service 模块中,一次只能操作一个服务。每次调用 service 模块时,你只能指定一个服务名(通过 name 参数)。必填
state字符串服务的状态。常见值:started, stopped, restarted, reloadedstarted
enabled布尔值是否在系统启动时启用或禁用服务。yes 启用,no 禁用。no
sleep整数在执行服务操作后等待指定的秒数,通常用于等待服务完全启动。
runlevel字符串在特定运行级别下启用服务,通常用于 SysV 或 Upstart 服务。
pattern字符串用于匹配一个或多个服务。通常在某些系统中用来选择服务(如使用通配符匹配)。

常见的 state

  • started:启动服务。
  • stopped:停止服务。
  • restarted:重启服务。
  • reloaded:重新加载服务(如果服务支持重载)。
示例用法
1. 启动服务

ansible host -m service -a "name=httpd state=started"

2. 停止服务

ansible host -m service -a "name=httpd state=stopped"

3. 重启服务

ansible host -m service -a "name=httpd state=restarted"

4. 重新加载服务

ansible host -m service -a "name=httpd state=reloaded"

5. 启用服务

ansible host -m service -a "name=httpd enabled=yes"

6. 禁用服务

ansible host -m service -a "name=httpd enabled=no"

7. 检查服务状态(用于调试)

如果你不确定服务的状态,可以通过 ansibleservice_facts 来获取目标主机上所有服务的状态信息:

ansible host -m service_facts

cron模块

Ansible 的 cron 模块用于管理 cron 作业(定时任务)。你可以使用它来添加、删除或修改 cron 作业。

常用参数
参数类型描述默认值
name字符串cron 任务的名称,用于标识该任务。必填
minute字符串任务执行的分钟,支持值为 0 到 59,或 *(每分钟)。*
hour字符串任务执行的小时,支持值为 0 到 23,或 *(每小时)。*
day字符串任务执行的日期,支持值为 1 到 31,或 *(每天)。*
month字符串任务执行的月份,支持值为 1 到 12,或 *(每月)。*
weekday字符串任务执行的星期几,支持值为 0 到 6(0=周日,1=周一...),或 *(每天)。*
user字符串运行任务的用户(通常是 root)。当前用户
state字符串任务的状态。常用值:present(存在)和 absent(删除)。present
job字符串要执行的命令。必填
special_time字符串特殊的时间设置,如 reboot

常见 state

  • present:确保 cron 任务存在。如果任务不存在,则会添加。
  • absent:确保 cron 任务不存在。如果任务存在,则会删除。
示例用法

添加一个简单的定时任务

例如:每小时运行一个脚本 /path/to/script.sh

ansible host -m cron -a "name='run script every hour' minute='0' hour='*' job='/path/to/script.sh' state=present"

添加一个每天执行的任务

例如:每天凌晨 2 点执行 backup.sh 脚本:

ansible host -m cron -a "name='daily backup' minute='0' hour='2' job='/path/to/backup.sh' state=present"

删除一个定时任务

例如:删除名称为 run script every hourcron 任务:

ansible host -m cron -a "name='run script every hour' state=absent"

使用 special_time 设置特殊时间

例如:系统重启后执行某个命令:

ansible host -m cron -a "name='run on reboot' special_time='reboot' job='/path/to/reboot_script.sh' state=present"

shell模块

Ansible 的 shell 模块用于在目标主机上执行 Shell 命令。这是一个通用模块,可以用来执行任何可以在 Shell 中运行的命令,包括脚本、命令行工具等。

常用参数
参数类型描述默认值
cmd字符串要执行的命令或脚本。{不是cmd=xx的形式}必填
executable字符串指定要使用的 Shell 类型,例如 /bin/bash/bin/sh
creates字符串如果指定的文件已存在,则不会执行命令。
chdir字符串在指定目录下执行命令。
stdin字符串向命令传递标准输入。
warn布尔值是否显示警告信息,通常是用来忽略某些潜在错误。yes
示例用法

执行一个简单的命令

例如:执行 echo 命令来输出信息:

ansible host -m shell -a "echo 'Hello, World!'"

执行脚本

例如:在 /tmp 目录下执行一个脚本 /tmp/my_script.sh

ansible host -m shell -a "bash /tmp/my_script.sh"

在指定目录下执行命令

例如:在 /tmp 目录下执行 ls 命令:

ansible host -m shell -a "ls" chdir="/tmp"

使用 creates 参数避免重复执行

例如:如果 /tmp/my_file.txt 文件存在,则不执行命令:

ansible host -m shell -a "touch /tmp/my_file.txt" creates="/tmp/my_file.txt"

使用 executable 指定 Shell 类型

例如:使用 /bin/bash 执行命令:

ansible host -m shell -a "echo 'Hello, Bash!'" executable="/bin/bash"

执行命令并传递标准输入

例如:使用标准输入传递给命令:

ansible host -m shell -a "cat" stdin="This is a test"

template模块(多和playbook一起)

Ansible 的 template 模块用于从模板文件中生成配置文件或其他文本文件。它基于 Jinja2 模板引擎,将变量和表达式嵌入到文本中生成最终的文件内容。

使用 template 模块时,通常会在源文件中使用 Jinja2 的语法来替换变量和执行条件判断、循环等操作。

常见选项:

选项描述示例
src模板文件的路径(通常是 .j2 后缀)。src=nginx.conf.j2
dest目标文件的路径,生成的文件将保存到此位置。dest=/etc/nginx/nginx.conf
owner设置目标文件的所有者。owner=root
group设置目标文件的组。group=root
mode设置目标文件的权限。mode=0644
backup如果设置为 yes,会创建目标文件的备份。backup=yes

示例命令:

ansible <host> -m template -a "src=/path/to/template.j2 dest=/path/to/destination owner=root group=root mode=0644 backup=yes"

注意,这里的xx.j2其实就是你写好的配置文件,他会去找同名的替换。和copy不一样的是,可以接收playbook中的变量,直接在文中就这种方式引入{{playbook中的binlog}}

四,playbook

Ansible自动化运维(三)Playbook 模式详解_ansible-playbook -e-CSDN博客

概述

Ansible Playbook 是 Ansible 中用于自动化任务的核心文件,它是一个以 YAML 格式编写的文件,包含了一组定义自动化任务的 "plays"。每个 "play" 主要定义了哪些主机需要执行哪些任务(任务通常是模块的调用)。Playbook 可以让你描述并执行一系列任务,以实现系统配置、应用部署、任务管理等自动化操作。

Playbook 是 Ansible 中最强大的功能之一,支持复杂的工作流、条件逻辑、循环等结构。

核心元素

Playbook 的核心元素包括:

  1. play: 每个 Play 描述了一个特定的主机组和与这些主机进行交互的任务。一个 Playbook 由一个或多个 Play 组成。

  2. host: Play 定义了要操作的主机,可以是单个主机、主机组或 IP 地址。主机列表通常来自于 inventory 文件。

  3. tasks: Playbook 中的每个 Play 下会包含一个或多个任务(tasks),每个任务通常调用一个模块来执行某个操作(如安装软件、复制文件等)。

  4. vars: 变量可以用于动态控制 Playbook 的行为,如根据环境、目标主机等条件决定要执行的任务。

  5. handlers: Handlers 是特殊类型的任务,它们只有在某个任务被触发时才会执行(例如:当某个文件被修改时,触发服务重启)。

  6. roles: Roles 是 Playbook 中的一种组织方式,允许将复杂的任务分解成多个小块,以便更好地重用、维护和管理。

  7. Loops and Conditionals: Playbook 支持循环和条件语句,可以根据条件来控制任务的执行。比如,基于特定变量的值执行不同的任务。

  8. tags: Playbook 支持使用标签来标识任务,这样可以选择性地执行特定任务。

  9. Includes and Imports: Playbook 允许包含或导入其他 Playbook 或任务文件,以便分割任务并提高重用性。

格式语法(yaml)

Playbook 文件使用 YAML 格式编写,遵循以下基本语法规则:

  • 缩进:YAML 使用缩进来表示层级,通常每个层级缩进 2 个空格。
  • 键值对:键值对之间使用冒号分隔。
  • 列表:列表项以 - 开头。
基本结构

一个简单的 Playbook 的结构通常如下所示:

---
# Playbook 开始
- name: Playbook 的描述hosts: web_servers  # 指定目标主机组,执行任务的主机是 web_servers 组中的主机become: yes  # 提升权限,以 root 用户执行任务# 定义 Playbook 使用的变量vars:nginx_version: "1.20.1"  # 定义 nginx 版本号custom_html: |  # 定义一个自定义 HTML 内容,用作网页<html><head><title>Welcome to Nginx!</title></head><body><h1>This is a custom Nginx page!</h1></body></html># 任务部分,Playbook 中的主要操作tasks:- name: 安装 nginxyum:  # 使用 yum 模块进行包管理name: nginx-{{ nginx_version }}  # 安装指定版本的 nginxstate: present  # 确保 nginx 包已经安装- name: 复制自定义的 index.html 到目标主机copy:  # 使用 copy 模块复制文件content: "{{ custom_html }}"  # 使用自定义 HTML 内容dest: /usr/share/nginx/html/index.html  # 复制到 nginx 的默认网页路径- name: 启动 nginx 服务service:  # 使用 service 模块管理服务name: nginx  # 服务名称state: started  # 确保 nginx 服务已启动- name: 设置 nginx 服务为开机自启service:  # 使用 service 模块设置开机自启name: nginx  # 服务名称enabled: yes  # 启用开机启动- name: 修改配置文件template:src: 模版文件.j2(里面可以用到playbook的变量)dest: /etc/xx/要替换的文件notify: #如果任务成功了而且changed为true就触发对应的hander- 在路上hander的名字# 处理程序部分,处理需要触发的操作(如服务重启)handlers:# 定义一个 handler,用于重启 nginx 服务- name: Restart nginx serviceservice:  # 使用 service 模块重启 nginx 服务name: nginx  # 服务名称state: restarted  # 重启服务

补充声明关于yaml文档书写方式

在 Ansible Playbook 中,模块的参数可以用简化的 key=value 形式进行声明。这样书写方式的目的是让 Playbook 更简洁,容易理解和书写。也可以向使用命令一样的使用

比如简化写法:
---
- name: 安装 httpd 包yum:name: httpdstate: present通过键值对的形式书写任务的模块和参数。这种方式更简洁,也更符合 YAML 的结构。它通常是针对 Ansible 中一些常见的模块(如 yum、service、copy 等)来书写参数的,而无需完全展开模块的详细语法。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
比如完整写法:
---
- name: 安装 httpd 包yum: name=httpd state=present disable_gpg_check=no enablerepo=epel简洁性:这种写法可以显著简化 Playbook 的结构,尤其是在任务比较简单时,参数不多时使用这种方式非常方便。
易读性:对于参数较少、简单的任务来说,这种写法有助于提高 Playbook 的紧凑性,但如果参数较多,还是推荐使用多行书写。当参数较多时,单行的写法可能会导致可读性差,因为参数过长时可能会变得难以辨认。这时推荐采用多行书写(即每个参数一行),以提高可读性和维护性。

相关命令

ansible-playbook 是用来执行 Playbook 文件的命令。

命令/选项描述示例
ansible-playbook playbook.yml执行指定的 Playbook 文件。ansible-playbook playbook.yml
-i <inventory_file>指定使用的库存文件,默认是 /etc/ansible/hostsansible-playbook -i my_inventory playbook.yml
-v / -vv / -vvv设置输出的详细级别,-v 是普通输出,-vv 是更详细的输出,-vvv 是最详细的输出。ansible-playbook -v playbook.yml
--tags <tag1,tag2,...>只运行带有指定标签的任务。ansible-playbook playbook.yml --tags "install,configure"
--skip-tags <tag1,tag2,...>跳过带有指定标签的任务。ansible-playbook playbook.yml --skip-tags "install"
--check执行 Playbook 的干运行(dry-run),仅检查会发生的更改而不实际执行。ansible-playbook playbook.yml --check
--limit <host>限制运行指定的主机,可以是单个主机名、主机组或主机模式(例如 web_servers[1])。ansible-playbook playbook.yml --limit web_server1
--list-vars列出所有可以使用的变量和相关信息。ansible-playbook playbook.yml --list-vars
--syntax-check检查 Playbook 文件的语法是否正确。ansible-playbook playbook.yml --syntax-check
--start-at-task <task_name>从指定任务开始执行 Playbook,而不是从头开始执行。ansible-playbook playbook.yml --start-at-task "Install nginx"
--extra-vars <key=value>传递额外的变量值,可以在命令行中动态覆盖 Playbook 中的变量。ansible-playbook playbook.yml --extra-vars "my_var=value"
--private-key <path_to_key>使用指定的私钥文件进行 SSH 连接,通常用于免密登录。ansible-playbook playbook.yml --private-key /path/to/key
--ask-vault-pass在执行时提示输入 Ansible Vault 密码。ansible-playbook playbook.yml --ask-vault-pass
--vault-password-file <file>指定包含 Vault 密码的文件,用于解密敏感数据。ansible-playbook playbook.yml --vault-password-file ~/.ansible-vault-password

五,roles

概述

Ansible 的 Roles 是一种用于组织 Playbook 和任务的结构化方法。通过使用 Roles,可以将一个复杂的自动化过程分解为多个独立的部分,每个部分处理不同的任务。这样有助于提高任务复用性和模块化。

Roles 使得 Ansible 配置管理更加清晰、可维护,并可以方便地共享和重用。每个 Role 包含了一组与某个特定功能相关的任务、变量、模板和文件等。

目录结构

  • defaults/main.yml
    存放该角色的默认变量,这些变量的优先级最低,用户可以通过覆盖文件来改变变量值。

  • files/
    存放静态文件,这些文件可以被传送到目标主机上,如配置文件、脚本等。

  • handlers/main.yml
    存放处理程序(handlers),处理程序通常在任务运行完成后根据条件触发,比如重新启动服务。

  • meta/main.yml
    存放该角色的元数据,如依赖关系、作者、版本等信息。

  • tasks/main.yml
    存放角色执行的具体任务。一个角色的任务列表会在这个文件中定义,任务的执行顺序由此文件确定。

  • templates/
    存放 Jinja2 模板文件,这些文件可以通过变量动态生成配置文件等。

  • tests/test.yml
    用于测试角色是否正确执行的 Playbook 文件。通过执行测试 Playbook 可以验证角色的功能是否正常。

  • vars/main.yml
    存放该角色的变量,优先级高于 defaults/main.yml。这些变量用于控制角色的行为。

编写步骤

步骤 1: 创建 Role 目录(注意目录结构,建议在/etc/ansible/roles执行命令)

使用 ansible-galaxy 命令来创建一个新的 Role 结构:

ansible-galaxy init myrole
#ansible-galaxy init 【角色名】

这将自动生成上面提到的标准目录结构。

步骤 2: 编写角色任务(Tasks)

myrole/tasks/main.yml 中定义角色的任务。例如:

---
- name: Install nginxyum:name: nginxstate: present- name: Start nginx serviceservice:name: nginxstate: startedenabled: yes
步骤 3: 设置默认变量(Defaults)

myrole/defaults/main.yml 中定义默认变量。例如:

---
nginx_port: 80
nginx_user: nginx

这些变量可以在其他地方被覆盖。

步骤 4: 编写模板(Templates)

myrole/templates 目录下,创建 Jinja2 模板文件。例如 nginx.conf.j2

server {listen       {{ nginx_port }};server_name  localhost;root         /usr/share/nginx/html;
}
步骤 5: 使用文件(Files)

如果需要在角色中使用静态文件,添加到 files/ 目录下,例如上传的配置文件。

步骤 6: 编写处理程序(Handlers)

handlers/main.yml 中定义处理程序,通常用于在任务变更时进行额外的操作,如重启服务:

---
- name: Restart nginxservice:name: nginxstate: restarted
步骤 7: 编写元数据(Meta)

meta/main.yml 中定义角色的元数据,可以指定角色的依赖关系、版本等信息

---
dependencies:- { role: common, version: "1.0" }
步骤 8: 编写测试 Playbook

tests/test.yml 中编写测试 Playbook,确保角色按预期工作:

- hosts: localhostroles:- myrole
步骤 9: 使用 Role

在 Playbook 中使用创建的 Role,例如:

- hosts: web_serversroles:- myrole

六,ansible面试题

ansible的执行模式:

执行模式:Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhoc和playbook

ad-hoc模式(点对点模式):

使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell

playbook模式(剧本模式):

是Ansible 主要管理方式 ,也是Ansib1e功能强大的关健所在。playbook通过多个task集合完成一类功能,如web服务的安装部署、数据库服务器的批量备份等。可以简单地把p1aybook理解为通过组合多条ad-hoc操作的配置文件

ansible的执行流程:

执行流程:

简单理解就是ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务, 最后等待执行返回的结果

具体流程:

  1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
  2. 查找对应的主机配置文件,找到要执行的主机或者组
  3. 加载自己对应的模块文件,如command
  4. 通过ansible将模块或命令生成对应的临时py文件(python脚本),并将读文件传输至远程服务器
  5. 对应执行用户的家目录的.ansible/tmp/x00/x0.PY文件
  6. 给文件 +x 执行权限
  7. 执行并返回结果
  8. 删除临时py文件,sleep 0退出

ansible的常用模块,如何使用

Ansible 模块是 Ansible 提供的可用于执行特定任务的代码单元

常用的模块有:copy文件拷贝 yum软件安装与卸载 file文件管理 shell执行she11命令 user用户管理 service服务管理等

你用ansible实现了什么功能

  1. 通过ansible批量jdk,nginx等软件的安装
  2. 根据指定内容查找文件,统一处理。比如Fast]son反序列化漏洞,通过'Fast]son"关键字查找有无对应文件,如果有则进行整改

简单的说一下ansible在一百台机器上安装nginx的过程

  1. 收集被管主机的信息(IP,账号,密码)
  2. 编写主机清单文件工
  3. 准备相关配置文件(yum源文件,nginx配置文件)
  4. 编写playbook剧本,主要是以下几个方面(定义变量,yum配置,软件安装,基于模板的配置文件,服务管理等)
  5. 修改nginx配置文件,通过变量获取数据
  6. 检查剧本格式
  7. 执行
  8. 找其中一台主机确认结果

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

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

相关文章

unity 2D像素种田游戏学习记录(自用)

一、透明度排序轴 改变sprite的排序方式&#xff0c;默认按照z轴进行排序&#xff08;离摄像机的远近&#xff09;。可以将其改变成y轴的排序方式&#xff0c;这样可以使2D人物走在草丛的下方就不被遮挡&#xff0c;走在草丛上方就被遮挡&#xff0c;如下图。 在项目设置-图形…

关于GaussDB

一、GaussDB的层级关系 &#xff0c;关于schemas的定位&#xff0c;到底是个什么&#xff0c;其实就可以理解为一个文件夹 数据库服务器 --> databases --> schemas --> tables schema类似于文件夹&#xff0c;一个数据库database里面可以有多个文件夹&#xff0c;每…

【CKA】Kubernetes(k8s)认证之CKA考题讲解

CKA考题讲解 0.考试101 0.1 kubectl命令⾃动补全 在 bash 中设置当前 shell 的⾃动补全&#xff0c;要先安装 bash-completion 包。 echo "source <(kubectl completion bash)" >> ~/.bashrc还可以在补全时为 kubectl 使⽤⼀个速记别名&#xff1a; al…

第4章:颜色和背景 --[CSS零基础入门]

在 CSS 中,颜色和背景属性是用于美化网页元素的重要工具。你可以通过多种方式定义颜色,并且可以设置元素的背景颜色、图像、渐变等。以下是关于如何在 CSS 中使用颜色和背景的一些关键点和示例。 1.颜色表示法 当然!以下是使用不同颜色表示法的 CSS 示例,包括 RGB、RGBA、…

linux-12 关于shell(十一)ls

登录系统输入用户名和密码以后&#xff0c;会显示给我们一个命令提示符&#xff0c;就意味着我们在这里就可以输入命令了&#xff0c;给一个命令&#xff0c;这个命令必须要可执行&#xff0c;那问题是我的命令怎么去使用&#xff0c;命令格式有印象吗&#xff1f;在命令提示符…

java+ssm+mysql校园物品租赁网

项目介绍&#xff1a; 使用javassmmysql开发的校园物品租赁网&#xff0c;系统包含管理员、用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;用户管理&#xff1b;物品管理&#xff08;物品种类、物品信息、评论信息&#xff09;&#xff1b;订单管理&#xff1…

肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)

大家好&#xff01;我是凯哥&#xff0c;今天给大家分享一下云计算学习路线图。这是我按照自己最开始学习云计算的时候的学习路线&#xff0c;并且结合自己从业多年所涉及的知识精心总结的云计算的思维导图。这是凯哥精心总结的&#xff0c;花费了不少精力哦&#xff0c;希望对…

31.下一个排列 python

下一个排列 题目题目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;题目链接 题解解题思路python实现代码解释&#xff1a;提交结果 题目 题目描述 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3…

【OpenCV】平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…

springSecurity自定义登陆接口和JWT认证过滤器

下面我会根据该流程图去自定义接口&#xff1a; 我们需要做的任务有&#xff1a; 登陆&#xff1a;1、通过ProviderManager的方法进行认证&#xff0c;生成jwt&#xff1b;2、把用户信息存入redis&#xff1b;3、自定义UserDetailsService实现到数据库查询数据的方法。 校验&a…

PowerShell install 一键部署postgres17

postgres 前言 PostgreSQL 是一个功能强大的开源对象关系数据库系统,拥有超过 35 年的积极开发经验 这为其赢得了可靠性、功能稳健性和性能的良好声誉。 通过官方文档可以找到大量描述如何安装和使用 PostgreSQL 的信息。 开源社区提供了许多有用的地方来熟悉PostgreSQL, 了…

如何在 IntelliJ IDEA 中为 Spring Boot 应用实现热部署

文章目录 1. 引言2. 准备工作3. 添加必要的依赖4. 配置 IntelliJ IDEA4.1 启用自动编译4.2 开启热部署策略 5. 测试热部署6. 高级技巧7. 注意事项8. 总结 随着现代开发工具的进步&#xff0c;开发者们越来越重视提高生产力的特性。对于 Java 开发者来说&#xff0c;能够在不重启…

Spring Boot中实现JPA多数据源配置指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始&#xff0c;到配置数据源、创建DataSource bean、定义实体和Repository&#xff0c;最后到配置事务管理器和使用多数据…

如何配置Github并在本地提交代码

前提: 可以流畅访问github, 需要一些上网技巧, 这就自行处理了 申请一个github账号 Github官网地址 首先就是邮箱注册啦, github没有对邮箱的限制, 只要是能收邮件的就ok, qq邮箱, 163等都可以使用. 然后和普通注册账号一样, 一路填写需要的信息, 验证邮箱即可. 如何新增代…

详细聊聊 Spring Cloud for Amazon Web Services

Spring Cloud for Amazon Web Services&#xff08;简称 Spring Cloud AWS&#xff09;是 Spring Cloud 生态系统中用于与亚马逊网络服务&#xff08;AWS&#xff09;集成的一个重要模块。 Spring Cloud AWS 为在 AWS 上构建和部署微服务应用提供了一系列便利的功能和集成点。…

OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用

OpenAI 12Days 第二天 强化微调&#xff08;RFT&#xff09;&#xff1a;推动语言模型在科学研究中的应用 文章目录 OpenAI 12Days 第二天 强化微调&#xff08;RFT&#xff09;&#xff1a;推动语言模型在科学研究中的应用RFT的工作原理与应用领域案例研究&#xff1a;基因突变…

21个Python脚本自动执行日常任务(2)

引言 作为编程领域摸爬滚打超过十年的老手&#xff0c;我深刻体会到&#xff0c;自动化那些重复性工作能大大节省我们的时间和精力。 Python以其简洁的语法和功能强大的库支持&#xff0c;成为了编写自动化脚本的首选语言。无论你是专业的程序员&#xff0c;还是希望简化日常工…

关于信号隔离转换器

isolate converter是隔离转换器‌。它是一种在电子电路中用于实现电路隔离、电压转换或信号隔离的设备‌。隔离转换器能在很多场合发挥关键作用&#xff0c;比如可以保护电路、提高安全性&#xff0c;还能帮助不同电压或信号之间的转换与传递‌。 ‌一、产品概述‌ ‌简介‌&a…

2.linux中调度kettle

一.准备转换&#xff0c;等会在linux中用 1.添加excel输入组件&#xff0c;并添加对应的文件 2.添加列拆分为多行组件 3.添加文本文件输出组件 4.保存转换 二.linux安装java 1.把jdk-8u144-linux-x64.tar.gz上传到linux的/lx目录下 2. 解压jdk包&#xff0c;然后配置环境变量…

图的割点、割边(Tarjan算法)

深度优先搜索的利用。 在一个无向连通图中&#xff0c;如果删掉某个顶点后&#xff0c;图不再连通&#xff08;即任意两点之间不能互相到达&#xff09;&#xff0c;我们称这样的顶点为割点。 在一个无向连通图中&#xff0c;如果删掉某条边后&#xff0c;图不在连通&#xff0…