Ansible自动化工具模块调用与playbook编写

目录

一、Ansible工作机制与特点

(一)Ansible工作机制

1. 初始化与配置

2. 编写Playbook

3. 调用模块

4. 加密敏感数据

5. 执行Playbook

6. 收集执行结果

7. 错误处理与回滚

8. 反馈与报告

(二)Ansible 的主要特点包括

(三)安装ansible

二、主机组

(一)定义主机组

(二)组嵌套

(三)组变量

三、Ansiible模块使用

(一)Command 模块

(二)shell模块

(三)Yum模块

(四)Service模块

四、Playbook

(一)Playbook基础

(二)Playbook结构

(三)Playbook示例

(四)定义、引用变量

(五)when条件判断

(六)迭代

五、实战---使用Playbook编译安装nginx


Ansible,作为一款强大的自动化运维工具,以其简洁的语法、零代理架构以及广泛的支持度,在DevOps领域占据了一席之地。它允许系统管理员和开发人员以声明式的方式描述基础设施的配置状态,从而实现跨平台的配置管理、应用部署、任务自动化等

一、Ansible工作机制与特点

(一)Ansible工作机制

1. 初始化与配置

  • 安装Ansible:首先确保Ansible已在控制节点(通常是运维人员的电脑或服务器)上安装并配置好。
  • 准备Inventory:创建或编辑/etc/ansible/hosts文件,定义要管理的目标主机或主机组,包括IP地址、主机名等。

2. 编写Playbook

  • Playbook编写:使用YAML格式编写Playbook,这是Ansible的核心配置文件,描述了需要在目标主机上执行的任务序列、角色分配、变量、条件判断等。

3. 调用模块

  • 模块选择与定义:在Playbook中,每个任务都会调用一个或多个Ansible模块。Ansible拥有大量内置模块,覆盖了系统管理、网络配置、云服务管理等多个方面。
  • 模块参数:为每个模块指定参数,以定制任务的具体行为。

4. 加密敏感数据

  • 使用Ansible Vault:对于Playbook中的敏感信息(如密码、密钥),可以使用Ansible Vault进行加密保护。

5. 执行Playbook

  • 执行模式选择:可以直接在命令行执行Ansible命令,或通过Ansible Tower等UI界面进行。
  • 提供认证信息:如果Playbook中使用到了加密数据,需要提供Ansible Vault的密码。
  • 解析Inventory:Ansible根据Inventory文件确定目标主机。
  • 连接目标主机:Ansible通过SSH(默认)或其他连接插件与目标主机建立连接。
  • 模块执行:Ansible在每个目标主机上顺序执行Playbook中定义的任务,调用相应的模块。
  • 幂等性执行:Ansible确保模块操作是幂等的,即重复执行相同任务,系统状态保持不变。

6. 收集执行结果

  • 输出与日志:Ansible收集每个任务的执行结果,输出到控制台或日志文件中。如果任务失败,会提供详细的错误信息。

7. 错误处理与回滚

  • 错误处理:通过Playbook中的错误处理机制(如rescuealways块)来捕获异常并执行相应的恢复操作。
  • 状态跟踪:Ansible可以追踪任务的执行状态,便于后续的审计和故障排查。

8. 反馈与报告

  • 生成报告:Ansible执行完成后,可以生成执行报告,便于分析任务的成功率、耗时等指标。

(二)Ansible 的主要特点包括

简单易用:基于 YAML 格式的 playbook 定义任务,直观且易于理解。

无代理架构:通过 SSH 连接直接在远程主机上执行任务,无需在目标机器上安装任何代理软件或守护进程。

模块化设计:提供了大量的内置模块,覆盖了操作系统配置、网络设备管理、云计算服务操作等众多领域。用户也可以自定义模块来满足特定需求。

幂等性:许多 Ansible 模块都具有幂等性,即无论执行多少次,只要系统状态达到预期,都不会再做更改,确保了系统的稳定性。

库存管理(Inventory):Ansible 使用 inventory 文件管理要操作的目标主机列表,可以灵活地根据组(groups)和主机变量进行运维操作。

角色(Roles):为了代码复用和组织结构清晰,Ansible 提供了角色的概念,用于将一组相关的任务、文件和模板打包在一起。

动态_inventory:支持从各种源获取动态主机信息,如 EC2 API、OpenStack 或者 CMDB 系统。

安全传输:通过使用 SSH 密钥对等方式保证数据的安全传输。

扩展性强:除了丰富的官方模块库,Ansible 还有一个活跃的社区,不断开发新的模块和插件以支持更多的功能。

一键回滚:部分高级特性如 ansible-bender 支持容器镜像构建时的一键回滚。

(三)安装ansible

[root@test opt]#yum  install epel-release.noarch -y
#安装epel源
[root@test opt]#yum install ansible  -y
#安装ansible

二、主机组

Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内

(一)定义主机组

[root@test opt]#vim /etc/ansible/hosts 
......
[web]            
192.168.83.60
192.168.83.100
#定义一个主机组,组名为web,改组包含的IP地址有192.168.83.60与192.168.83.100
......

使用ssh-keygen对指定主机进行免密登录

[root@test opt]#ssh-keygen -t rsa           #生成密钥文件
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:zMgIug5GNxry7YClXFETG+Lqh14BAkZEQCAhNkOE3HY root@docker
The key's randomart image is:
+---[RSA 2048]----+
|^&.. =.          |
|B.+ooE+          |
|..oo..           |
|..o..o +         |
|o+.=. o S        |
|=**.o            |
|=*oo.            |
|= oo             |
| o  .            |
+----[SHA256]-----+[root@test opt]#sshpass -p '123' ssh-copy-id root@192.168.83.60
-p '123':指定远程主机,root用户的登录密码
[root@test opt]#sshpass -p '123' ssh-copy-id root@192.168.83.100

测试联通性

[root@test opt]#ansible web -m ping
192.168.83.60 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
192.168.83.100 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

(二)组嵌套

可以将多个组合并在同一个组内

在/etc/ansible/hosts文件中添加多个主机清单

[root@test opt]#vim  /etc/ansible/hosts
......
[web]
192.168.83.60
192.168.83.100[web1]
192.168.83.[10:15]   #表示IP地址为192.168.83.10~192.168.83.15之间的所有主机[webs:children]
web
web1
#将组名为web与web1中的所有主机,嵌套在同一个组下,取名为webs,childern为固定格式
#webs: 是一个父组,通过:children后缀表明它用来汇总或包含其他组作为其“子组”(children)
......

使用 ansible [组名] --list 列出指定组名包含的所有IP地址

(三)组变量

Inventory变量名作用
ansible_hostansible连接节点时的IP地址
ansible_port连接对方的端口号,ssh连接时默认为22
ansible_user

连接对方主机时使用的主机名。不指定时,将使用执行ansible或

ansible-playbook命令的用户

ansible_password连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效
ansible_ssh_private_key_file指定密钥认证ssh连接时的私钥文件
ansible_ssh_common_args提供给ssh、sftp、scp命令的额外参数
ansible_become允许进行权限提升
ansible_become_method指定提升权限的方式,例如可使用sudo/su/runas等方式
ansible_become_user提升为哪个用户的权限,默认提升为root
ansible_become_password提升为指定用户权限时的密码
[root@test opt]#vim  /etc/ansible/hosts
......
[web]
192.168.83.60
192.168.83.100
192.168.83.30 ansible_password=123 ansible_port=22 ansible_user=root
#指定链接主机IP地址为192.168.83.30
#ansible_password=123:表示使用ssh协议访问该主机的密码为123
#ansible_port=22:指定访问端口为22。默认端口为22
#ansible_user=root:指定访问用户为root用户,可以指定其它普通用户,但是在操作命令时,需要一定权限
......

添加完变量后,就可以不是用ssh-keygen进行免密登录,但是一般不推荐这种方法,因为是明文密码,可能会造成外泄

三、Ansiible模块使用

[root@test opt]#ansible-doc -l |wc -l   #统计ansible一共有多少个模块
3387

下面就列举几个常用的模块

(一)Command 模块

功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项

注意:此命令不支持 $VARNAME < > | ; & 等,可以用shell模块实现

注意:此模块不具有幂等性

比如查看定义的host组中的主机/opt目录下的文件

(二)shell模块

功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >

注意:此模块不具有幂等性

(三)Yum模块

yum和apt模块分别用于管理基于RHEL/CentOS系列(使用Yum或DNF包管理器)以及基于Debian/Ubuntu系列(使用Apt包管理器)的Linux系统的软件包。

常用参数

name                       所安装的包的名称
state                         present--->安装, latest--->安装最新的, absent---> 卸载软件。
update_cache          强制更新yum的缓存
conf_file                   指定远程yum安装时所依赖的配置文件(安装本地已有的包)。
disable_pgp_check  是否禁止GPG checking,只用于presentor latest。
disablerepo              临时禁止使用yum库。 只用于安装或更新时。
enablerepo               临时使用的yum库。只用于安装或更新时

使用yum模块,可以在远程主机上同时安装软件

使用shell模块查看安装版本

(四)Service模块

service模块的作用是管理远程主机上的服务

常用参数

name参数           #指定需要操作的服务名称,比如httpd
state参数            #指定服务的状态,可用值有 started(开启)、stopped(关闭)、restarted(重启)、reloaded(重新加载配置文件)。
enabled参数       #指定是否将服务设置为开机启动项, yes表示设置为开机启动,no不设置

ansible的核心模块较多,更多的模块操作,可以访问下列的链接,去查看更多的模块使用

链接地址:Ansible基本介绍与模块使用_ansible script模块-CSDN博客

四、Playbook

(一)Playbook基础

Playbook是Ansible的配置、部署和编排语言。它以YAML格式编写,用来描述一组任务序列,以及这些任务如何在不同主机上执行。Playbook使得复杂的多步骤部署变得简单易管理。

(二)Playbook结构

一个基本的Playbook由以下部分构成:

Hosts指定:定义了执行任务的目标主机或主机组。

Tasks:一系列要执行的任务列表,每个任务调用一个特定的模块。

Handlers:特殊任务,仅在被其它任务通知时执行,常用于服务重启等。

Variables:用于存储配置信息,可以在Playbook中或外部文件定义。

Roles:组织相关任务、文件、变量的集合,促进代码复用和模块化。

(三)Playbook示例

[root@test opt]#cat  tree.yaml
---    
#这是YAML文档的开始声明,表明一个新的文档或“playbook”即将开始
- name: tree     
#Playbook的描述性名称,本例中为"tree",用于说明此Playbook的功能或目的hosts: host    
#指定此Playbook将要执行于host组的所有主机上gather_facts: false 
#设置是否收集目标主机的系统信息,默认为True。设为false可以加快执行速度remote_user: root
#指定连接目标主机时使用的用户名tasks:
#Playbook的核心部分,包含了一系列任务(tasks),这些任务将会在上面定义的主机上顺序执行- name: install tree
#任务的描述性名称,这里是"install tree",说明任务是为了安装tree软件包yum: name=tree state=latest
#使用Ansible的yum模块来管理软件包,state=latest表示安装最新版本ignore_errors: True
#该任务的配置选项,当设为True时,即使该任务执行出错,Ansible也会继续执行后续任务,而不是立即停止[root@test opt]#ansible-playbook tree.yaml  #加载执行指定的yaml文件PLAY [tree] ***************************************************************************************************TASK [install tree] *******************************************************************************************
changed: [192.168.83.60]PLAY RECAP ****************************************************************************************************
192.168.83.60              : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

yaml文件注意格式,以空格缩进区分层级

验证命令是否安装

(四)定义、引用变量

[root@test opt]#vim  vars.yaml 
[root@test opt]#cat  vars.yaml 
---
- name: vars
#Playbook的描述性名称hosts: host
#指定此Playbook将要执行于host组的所有主机上gather_facts: falseremote_user: rootvars:- username: lisi
#在vars下定义了一个变量 username,其值为 "lisi"。这个变量在playbook的后续任务中引用tasks:- name: create user
#描述为 "create user",意在创建一个新的系统用户user: name={{username}} uid=1200
#使用user模块
#name={{username}}:设置用户名称,使用刚才定义的变量 {{username}},创建用户名为lisi的用户
#uid=1200:设置uid为1200- name: copy file
#描述为 "copy file",目的是将一段内容复制到远程主机上的一个文件中copy: content="{{ansible_version}}" dest=/opt/kernel.txt
#使用coyp模块
#content: 指定了要写入文件的内容,这里使用了内置的 Ansible 变量 {{ansible_version}},
#即 Ansible 的当前运行版本号,作为文件内容
#dest: 指定目标文件的路径,即/opt/kernel.txt

常用的Ansible内置变量

ansible_version 表示 Ansible 的版本信息。
inventory_hostname 返回当前正在处理的主机名,即清单文件中定义的主机名。
inventory_hostname_short 返回清单文件中主机名的第一部分,通常是去掉域名后的主机名。
hostvars

 一个字典,包含了在同一 playbook 运行中所有主机的变量。

可以通过 hostvars['hostname'] 访问其他主机的变量。

group_names 当前主机所属的所有组名列表。
play_hosts 当前 play 中所有目标主机的列表。
ansible_facts

 一个包含收集到的目标系统事实信息的字典,

例如网络接口信息 (ansible_default_ipv4, ansible_all_ipv4_addresses)、

操作系统类型 (ansible_system)、主机架构 (ansible_architecture) 等。

ansible_os_family 表示操作系统家族,如 'RedHat', 'Debian' 等。
ansible_distribution 操作系统的具体发行版名称,如 'Ubuntu', 'CentOS' 等。
ansible_hostname 目标主机的 hostname。
ansible_env 包含目标主机环境变量的字典。
ansible_connection 当前连接到主机所使用的连接插件类型。
ansible_python_interpreter 当前用于执行Python脚本的Python解释器路径。

(五)when条件判断

在Ansible中,when条件判断是一种强大的控制结构,允许你根据特定条件来决定是否执行某个任务。这对于实现任务执行的灵活性和针对性非常有用,特别是在管理具有不同配置或需求的多主机环境时

基本语法
when条件可以放在任务定义之下,使用YAML语法编写。其基本形式如下:- name: 任务描述action: 任务模块及参数when: 条件表达式

条件表达式

条件表达式可以是简单的布尔表达式、比较运算符、变量检查、逻辑运算符组合等。一些常见的用法包括:

  • 简单条件:直接比较或检查变量,如 when: ansible_os_family == RedHat'',这会检查目标主机的操作系统家族是否为RedHat
  • 逻辑运算:支持and、or、not等逻辑运算符,例如 when: ansible_distribution == 'Ubuntu' or ansible_distribution == 'CentOS'。
  • 存在性检查:使用when: variable is defined或when: variable | default('') != ''来检查变量是否已定义或非空。
  • 数值和字符串比较:比如 when: ansible_memory_mb.real.total > 2048,比较内存大小

首先定义多个主机

在主机名为hy的主机上安装 httpd服务

---
- name: httpdhosts: webremote_user: roottasks:- name: firewalldservice: name=firewalld state=stopped
#使用service模块,关闭防火墙,也可以使用shell或command模块关闭selinux- name: install httpdyum: name=httpd 
#使用yum模块安装httpd软件包when: ansible_hostname == 'hy'
#进行条件判断,仅当主机名为'hy'时执行此任务
#ansible_hostname为内置变量,反回组内的所有主机名- name: start httpdservice: name=httpd state=startedwhen: ansible_hostname == 'hy'

注意:

gather_facts 参数的值需要设置为ture(默认),可以不添加参数,因为关闭此参数,ansible获取不到主机信息,后面的内置变量,如ansible_hostname无法识别

[root@test opt]#vim  httpd.yaml
[root@test opt]#ansible-playbook httpd.yaml PLAY [httpd] **************************************************************************************************TASK [Gathering Facts] ****************************************************************************************
ok: [192.168.83.60]
ok: [192.168.83.100]
ok: [192.168.83.30]
......[root@test opt]#ansible web -a 'rpm -q httpd'
192.168.83.30 | FAILED | rc=1 >>
未安装软件包 httpd non-zero return code
192.168.83.60 | FAILED | rc=1 >>
未安装软件包 httpd non-zero return code
192.168.83.100 | CHANGED | rc=0 >>
httpd-2.4.6-99.el7.centos.1.x86_64   #主机名为hy

(六)迭代

Ansible中的迭代允许你对列表或其他可迭代对象中的每一项执行一个任务或一组任务,这是处理重复性工作时非常有用的特性。迭代可以通过几种方式实现,最常用的是使用loop或历史上的with_items

---
- name: Create Directories on Hostshosts: hosttasks: - name: Create Specified Directoriesfile:                   #使用file模块path: "{{item}}"      
#指定要操作的文件或目录路径。
#使用{{ item }}表示循环中的当前项目,每次迭代时item的值会依次替换为列表中的每个路径state: directory 
#设定资源的状态,这里是directory,意味着如果指定的路径不存在,则创建目录with_items:             
#Ansible中用来迭代列表的关键词。指定接下来的任务需要对提供的列表中的每一个元素执行一次。- /data- /data/test01- /data/test02
#定义了要创建的目录路径#整个playbook定义了一个操作,即在名为host的组内所有主机上创建with_items定义的一系列目录

五、实战---使用Playbook编译安装nginx

[root@test opt]#vim /etc/ansible/hosts 
......
[nginx]            
192.168.83.30

准备nginx安装包与安装脚本文件

[root@test data]#ls
nginx-1.18.0.tar.gz  nginx.sh
[root@test data]#chmod +x nginx.sh
#给脚本文件添加执行权限

查看脚本文件

[root@test data]#cat nginx.sh 
#/bin/bash
systemctl  start  nginx  >>/dev/null
if [ $? -eq 0 ];then 
echo  "nginx服务已安装"
else
useradd -M -s /sbin/nologin nginx
cd  /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz >>/dev/null
echo "正在安装,请耐心等待"
tar xf   nginx-1.18.0.tar.gz
cd  /opt/nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel  &>>/dev/null
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make -j `lscpu|sed -n '4p'|awk '{print $2}'`&>>/dev/null
make  install  &>>/dev/null
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
cat >  /usr/lib/systemd/system/nginx.service  <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -1 $MAINPID
ExecStop=/bin/kill -3 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
chown -R nginx.nginx  /usr/local/nginx
systemctl  daemon-reload  &>>/dev/null
systemctl  enable --now nginx
echo  "nginx服务已开启"
fi

编写playbook副本

[root@test opt]#vim  nginx.yaml
[root@test opt]#cat  nginx.yaml 
---
- name: install nginx   #Playbook的描述性名称,这里是安装Nginxhosts: nginx          #定义执行此Playbook的目标主机组,这里指的是名为nginx的主机组remote_user: root     #指定远程执行任务时使用的用户名,这里是root用户tasks:                #开始定义具体任务列表- name: firewalld stop   #任务一:停止firewalld服务service: name=firewalld state=stopped- name: package          #任务二:复制Nginx安装包到目标主机copy: src=/data/nginx-1.18.0.tar.gz dest=/opt/ owner=root group=root- name: Execute script   #任务三:执行编译安装nginx脚本文件script: /data/nginx.sh  #使用script模块

执行playbook脚本并进行测试

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

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

相关文章

Java并发编程: Synchronized锁升级

文章目录 一、jdk8 markword实现表二、使用工具来查看锁升级 一、jdk8 markword实现表 new -> 偏向锁 -> 轻量级锁&#xff08;自旋锁、自适应自旋锁&#xff09;-> 重量级锁&#xff1a; 偏向锁和轻量级锁都是用户空间完成的。重量级锁是需要向内核申请的。 synchr…

深度学习之基于Matlab神经网络的活体人脸和视频人脸识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 人脸识别技术作为生物识别技术的一种&#xff0c;近年来得到了广泛的关注和应用。与传统的身份认证方…

高素质高学历婚恋相亲交友平台有哪些?分享我的网上找对象成功脱单经历!

尽管觉得在社交软件上找到真爱的可能性很小&#xff0c;但我却时常看到别人成功的案例&#xff0c;这也让我跃跃欲试了。没想到&#xff0c;我真的成功了&#xff01;以下是我亲身使用过的一些方法&#xff0c;在此与大家分享&#xff0c;仅供参考哦&#xff01; &#x1f449;…

新手做抖音小店多久能出单?新手抖音小店出单秘籍!出单教程必看

大家好&#xff0c;我是电商花花。 现阶段还是有很多朋友加入到抖音电商行业&#xff0c;因为抖音小店上还隐藏很多的红利和市场&#xff0c;很多新手开店后第一个问题就是&#xff0c;店铺开通后&#xff0c;一般多久能出单&#xff1f; 多久能出单&#xff0c;其实更看重的…

深入学习和理解Django视图层:处理请求与响应

title: 深入学习和理解Django视图层&#xff1a;处理请求与响应 date: 2024/5/4 17:47:55 updated: 2024/5/4 17:47:55 categories: 后端开发 tags: Django请求处理响应生成模板渲染表单处理中间件异常处理 第一章&#xff1a;Django框架概述 1.1 什么是Django&#xff1f;…

获取波形极值与间距并显示

获取并显示波形的极值与极值间距 1、流程 1、通过signal.find_peaks获取极大值 2、获取极大值下标 3、获取极大值对应的值 4、获取极大值的下标间距(就是隔多远有一个极大值) 5、获取极大值间距的标准差、方差、均值、最大值 6、图形展示波形图并标记极大值2、效果图 3、示…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.13-1.14

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)1.13 梯度检验&#…

IT 项目管理介绍和资料汇总

IT项目管理到底是什么&#xff1f;是对组织承担的任何信息技术项目的成功监督。IT项目经理负责规划、预算、执行、领导、故障排除和维护这些项目。IT项目经理可能会做的事情包括&#xff1a; 1、硬件安装 2、软件、网站和应用程序开发 3、网络和云计算解决方案的升级和/或推出…

非平衡数据处理-Tomek link算法介绍,代码和实战测评

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;非平衡数据处理-Tomek link算法 概述 非平衡数据在金融风控领域、反欺诈客户识别、广告智能推荐和生物医疗中普遍存在。一般而言&#xff0c;不平衡数据正负样本的比例差异极大&#xff0c;如在Kaggle竞…

20240503安装HEVC解码器播放H265格式的8K视频

20240503安装HEVC解码器播放H265格式的8K视频 2024/5/3 9:55 缘起&#xff1a;由于youtube支持8K视频了&#xff0c;想尝尝鲜&#xff01; 主摄像头当然是选择SONY的【夜摄/弱光场景】&#xff0c;根据优选&#xff0c;小米&#xff08;MI&#xff09;13Ultra 最佳了。 在开始播…

jenkins目录下的vue3项目——pnpm install后运行报错——奇葩问题解决

昨天到今天&#xff0c;同事那边遇到一个问题&#xff0c;就是关于vue3vite的项目&#xff0c;在执行了自动打包后&#xff0c;运行代码会提示报错的问题。 报错信息如下&#xff1a; 具体错误信息如下&#xff1a; ERROR 11:28:14 [vite] Pre-transform error: Cannot find …

深入探究TCP/IP协议

一、引言 在信息技术飞速发展的今天&#xff0c;网络已成为人类社会不可或缺的部分。实现网络中计算机相互通信的关键之一便是TCP/IP协议。作为互联网的基础&#xff0c;TCP/IP协议确保了全球范围内的数据交换和信息共享。本文将深入探讨TCP/IP协议的概念、特点、组成、相关协…

C++笔记之调用PCL库显示PCD文件的点云

C++笔记之调用PCL库显示PCD文件的点云 —— 2024-05-05 杭州 code review! 文章目录 C++笔记之调用PCL库显示PCD文件的点云1.运行2.点云pcd文件github下载地址2.main.cpp3.CMakeLists.txt1.运行 2.点云pcd文件github下载地址 https://github.com/luolaihua/point-cloud-data-…

【优选算法】——Leetcode——202—— 快乐数

目录 1.题目 2. 题⽬分析: 3.简单证明&#xff1a; 4. 解法&#xff08;快慢指针&#xff09;&#xff1a; 算法思路&#xff1a; 补充知识&#xff1a;如何求⼀个数n每个位置上的数字的平⽅和。 总结概括 5.代码实现 1.C语言 2.C 1.题目 202. 快乐数 编写一个算法来…

STL vector详解

STL vector详解 1. 简介2. vector的内存机制3. vector 基类源码_Vector_base3.1. vector 基类成员变量3.2. vector 基类方法3.3. _Vector_base 总结 4. vector类4.1. 方法 1. 简介 本文参考vector源码&#xff0c;主要介绍vector的设计思路&#xff0c;了解一些方法的实现原理…

20240506 深度学习高级技术点

1.基于BN层剪枝 基于Batch Normalization (BN)层进行剪枝是一种常用的模型压缩方法&#xff0c;特别是在卷积神经网络(CNNs)中。BN层在训练期间用于加速收敛和提高模型的泛化能力&#xff0c;而在剪枝过程中&#xff0c;BN层提供的统计信息&#xff08;特别是均值(mean)和方差…

HarmonyOS实战开发-如何通过BlendMode属性来实现挂件和图片的混合

介绍 本实例主要通过BlendMode属性来实现挂件和图片的混合&#xff0c;通过更改不同的混合参数&#xff0c;能够展示不同的混合效果。 效果图预览 使用说明&#xff1a; 1.进入页面&#xff0c;点击挂件区域&#xff0c;进行挂件和图片的混合&#xff0c;点击不同的挂件&…

Golang 开发实战day12 - Pointer

&#x1f3c6;个人专栏 &#x1f93a; leetcode &#x1f9d7; Leetcode Prime &#x1f3c7; Golang20天教程 &#x1f6b4;‍♂️ Java问题收集园地 &#x1f334; 成长感悟 欢迎大家观看&#xff0c;不执着于追求顶峰&#xff0c;只享受探索过程 Golang 开发实战day12 - 指针…

Python实验代码定时调起

Python代码实验调参需要等待1小时运行完成&#xff0c;自动将提前设置的5组参数&#xff08;每组参数有8个&#xff09;间隔1小时之后让Python代码再次自动依次调起运行其中的一组参数&#xff0c;每次跑完将实验结果写一个文件在本地存储通过邮件发送运行结果到指定QQ邮箱 im…

国家电网某地电力公司网络硬件综合监控运维项目

国家电网某地电力公司是国家电网有限公司的子公司&#xff0c;负责当地电网规划、建设、运营和供电服务&#xff0c;下属多家地市供电企业和检修公司、信息通信公司等业务支撑实施机构。 项目现状 随着公司信息化建设加速&#xff0c;其信息内网中存在大量物理服务器、存储设备…