[DO374] Ansible 配置文件

[DO374] Ansible 配置文件

  • 1. 配置文件位置
  • 2. 配置文件
  • 3. Ansible 配置
  • 4. Ansible的Ad-hoc
  • 5. Ansible 模块
  • 6. playbook段落
  • 7. 任务执行后续
  • 8. Ansible 变量
    • 8.1 ansible 变量的定义
      • 8.1.1 主机变量
      • 8.1.2 主机组变量
    • 8.2 vars的循环
  • 9. Ansible Collection
  • 10. Ansible-galaxy 安装模块
    • 10.1 红帽和ansible的hub配置
    • 10.2 私有化hub配置
  • 11. 剧本执行顺序
  • 12. 判断
    • 12.1 远程文件的判断
    • 12.2 字符串大小写的判断
    • 12.3 判断ansible版本(控制端)
    • 12.4 子集
    • 12.5 父集(超集)
    • 12.6 判断字符串是否在集合内
    • 12.7 多任务用同一条件判断
      • 12.7.1 block
      • 12.7.2 rescue
      • 12.7.3 always
      • 12.7.4 剧本退出
      • 12.7.5 带有条件的退出
  • 13. 循环语句
    • 13.1 遍历列表
    • 13.2 遍历字典
    • 13.3 loop循环
  • 14. 任务委派
  • 15. 事实委派
  • 16. 缓存事实变量

1. 配置文件位置

  1. 默认位置(全局)/etc/ansible/ansible.cfg
  2. 当前工作目录./ansible.cfg
  3. 当前用户家目录下的~/.ansible.cfg
  4. 当前系统的ANSIBLE_CONFIG环境变量

优先级顺序: 4 > 2 > 3 > 1

2. 配置文件

配置块含义
[defaults]通用配置项,配置远程用户,连接密码,文件清单位置等
[inventory]主机清单段落,配置清单使用的插件等
[privilege_escalation]提权配置,是否提权,提权到哪个用户
[persistent_connection]RHEL6 连接插件,现在默认ssh连接
[ssh_connection]SSH连接配置项
[persistent_connection]持久连接配置项,连接超时时间,命令超时时间
[accelerate]加速项,默认端口:5099
[selinux]selinux的配置项,用来配置ansible支持的文件系统驱动及lxc容器配置
[colors]配置ansible的颜色,定义执行成功,错误输出的颜色
[diff]打印任务执行前后的差异

3. Ansible 配置

如果使用普通用户进行sudo,客户端需要

# 1. add user
useradd qiu
# 2. Set a passwd to the qiu user
echo redhat | passwd --stdin qiu
# 3. Grant sudo privileges to the qiu user
vim /etc/sudoers.d/qiu        
qiu ALL=(ALL) NOPASSWD:ALL

ansible.cfg 配置

[defaults]
inventory=./inventory		# 清单文件
remote_user = root			# 远程用户
ask_pass      = false		# 连接是用  密码/秘钥
[privilege_escalation]
become=True					# 是否提权
become_method=sudo			# 是否 sudo
become_user=root			# 提权到 root 用户
become_ask_pass=False		# 提权是否需要 密码
[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s # ssh 连接加速

通过命令添加

# Set passwd file.
echo "Asimov" > .ansible_pass
chmod 600 .ansible_pass
# Test whether the password can be used for connection.
ansible all -m shell -a "whoami" -u root --vault-pass-file .ansible_pass
# Create qiu user.
ansible all -m shell -u root --vault-pass-file .ansible_pass -a "useradd qiu"
# Grant a password to the qiu user.
ansible all -m shell -u root --vault-pass-file .ansible_pass -a "echo 'root123' qiu"
# Grant sudo privileges to the qiu user.
ansible all -m shell -u root --vault-pass-file .ansible_pass -a "echo 'qiu ALL=(ALL)  NOPASSWD: ALL' > /etc/sudoers.d/qiu"
# Grant access key to the qiu user.
ansible all -m shell -u root --vault-pass-file .ansible_pass -a "mkdir /home/qiu/.ssh;echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGtUW3ismHyuCW4CDdTVOOOq6aySdtYenXFWWx7HJa4VTepkG00aaLId9ocra10hc+MB0GTJMCyabDv3i8NKdi6GDH/aOLVsp/Ewy8DEzZMBlJDCt4v2i4/wU4liw6KgEFkZs+5hnqU8d4QzldyGJ5onr+AGvFOKG68CS0BBl40Z1twf1HhCyx8k6nzD2ovlkxWRFZKPAFrtPCBVvQDkOfVFZF+lwzaSztgAjbFZ4A9jqQyUYx4kOJ5DtRef36ucdUdVQale0+8lICl7/gb142SPpYfhxe88/BJScLPRjvVNeu1TxRmoHtVazqnAoRxQYAn2MoI6AG+w6QuZf8f7aL LabGradingKey' >> /home/qiu/.ssh/authorized_keys;chmod 600 /home/qiu/.ssh/authorized_keys; chown -R qiu:qiu /home/qiu/.ssh"
# Try to use the qiu remote user to connect with ansible.
# Modify ansible.cfg and change remote_user to qiu user.
ansible all -m ping

4. Ansible的Ad-hoc

ad-hoc: ansible 临时命令,用ansible的模块来完成自动化任务,每次只能使用1个模块,来完成一个任务.因此ad-hoc称为ansible的临时命令

ad-hoc的语法:

格式: ansible 选择的主机 -m [模块] -a “模块的参数” (ansible参数)

# example
ansible all -m shell -a "whoami" -u root -k 

5. Ansible 模块

请添加图片描述

模块查询方式:

​ ansible-doc -l: 列出当前支持的所有模块

  1. 命令模块:
模块名作用
shell相当于在被控端本机上执行linux指令
command相当于在被控端本机上执行linux指令,但有4个符号除外 |,>,<,& 出现这4个符号时,command将无法执行该命令
script将主控端的shell复制到远程并执行.
raw不支持高阶参数(chdir,creates,removes)

chdir 执行命令前修改执行路径

creates 判断文件是否存在,如果存在就不执行后面的命令,文件不存在则执行后续命令

removes 和creates相反

当ansible省略模块时,默认使用command模块,取决于ansible.cfg配置文件中module_name = command参数.

  1. 文件模块

6. playbook段落

target段落:

​ hosts: 定义play在那些主机上运行

​ remote_user: 定义运行play的远程用户是哪个

​ gather_facts: 定义是否收集事实变量


注意: 在target中定义的参数可以是ansible.cfg中出现的,如果play中没有定义,则按ansible.cfg中的为准

vars段落: 用来定义变量,如果没有可以省略

支持在该段落中定义变量,也支持从文件中引入变量

直接定义变量:

​ 变量名1: 值1

​ 变量名2: 值2


tasks段落 用来定义任务,可以省略

在playbook中默认存在一个facts的任务.可以通过target中的gather_facts: false关闭

tasks:- name: 任务名称模块名称:具体参数: 参数的值

7. 任务执行后续

当需要执行完一个模块后有后续动作,可以用notify通知handlers.

当一个notify需要调用多个handler时,使用listen来关联监听.

---
- name: test notifyhosts: servera.lab.example.comgather_facts: falsetasks:- name: touch fileansible.builtin.file:path: /etc/foo.confstate: touch  notify: show debug infohandlers:- name: handler 1listen: show fileansible.builtin.debug:msg: "in 1"- name: handler 2listen: show fileansible.builtin.debug:msg: "in 2"- name: handler 3listen: show fileansible.builtin.debug:msg: "in 3"

请添加图片描述

8. Ansible 变量

8.1 ansible 变量的定义

# inventory
servera ansible_port=2222 ansible_host=192.168.31.123 ansible_user=devlop
serverb ansible_port=4422 ansible_host=192.168.31.124 ansible_user=test
变量含义
ansible_portssh端口
ansible_host服务器ip
ansible_userssh用户
ansible_connectionssh连接类型:local,ssh,paramikko,默认ssh
ansible_ssh_passssh 密码
ansible_ssh_privite_key_filessh秘钥文件路径
ansible_ssh_executablessh命令路径

8.1.1 主机变量

对单个主机自定义变量

[test]
serverd.lab.example.com app=apache
servere.lab.example.com app=vsftpd

请添加图片描述

8.1.2 主机组变量

对组进行定例变量

[test]
serverd.lab.example.com app=apache
servere.lab.example.com app=vsftpd
[test:vars]
zabbix_agent=yes
prometheus_agent=no

请添加图片描述

主机的vars优先级高于主机组中的vars

8.2 vars的循环

---
- name: test notifyhosts: servera.lab.example.comgather_facts: falsevars:os_version:redhat:release: '7.9'ubuntu:release: '20.04'openeuler:release: '24.03LTS'tasks:- name: print versionsdebug:msg: "{{ item.value.release }}"loop: "{{ os_version | dict2items }}"

请添加图片描述

9. Ansible Collection

  1. 通过红帽自动化中心获取

https://console.redhat.com/ansible/automation-hub

  1. 通过ansible galaxy来获取

https://galaxy.ansible.com/ui/

  1. 通过yaml安装
# collection.yml
collections:- name: url

执行命令进行安装

ansible-galaxy collection install -r collection.yml -p 安装的路径和位置

10. Ansible-galaxy 安装模块

10.1 红帽和ansible的hub配置

[defaults]
ask_pass=False
forks=5
inventory=./inventory
remote_user = devops
collections_path=/root/collections
[privilege_escalation]
become_method=sudo
become_user=root
become_ask_pass=False
become=true
[galaxy]
server_list=redhat_hub
[galaxy_server.redhat_hub]
url=https://console.redhat.com/api/automation-hub/content/published/
auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
token=eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0NzQzYTkzMC03YmJiLTRkZGQtOTgzMS00ODcxNGRlZDc0YjUifQ.eyJpYXQiOjE3MzYzMTg4MzMsImp0aSI6ImI0YjJmZTAxLWM5NWMtNDZiNS05YWE4LWRlZGQyZmE1Y2RiNCIsImlzcyI6Imh0dHBzOi8vc3NvLnJlZGhhdC5jb20vYXV0aC9yZWFsbXMvcmVkaGF0LWV4dGVybmFsIiwiYXVkIjoiaHR0cHM6Ly9zc28ucmVkaGF0LmNvbS9hdXRoL3JlYWxtcy9yZWRoYXQtZXh0ZXJuYWwiLCJzdWIiOiJmOjUyOGQ3NmZmLWY3MDgtNDNlZC04Y2Q1LWZlMTZmNGZlMGNlNjoxMzkxNzA5OTMyMkAxMzkuY29tIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6ImNsb3VkLXNlcnZpY2VzIiwibm9uY2UiOiIwYzYyMDFkZS03MmE4LTRhNDEtOTE3My1mOGMwNzgxYjBmNzQiLCJzaWQiOiJiZTA0ZTk1Zi1iZjViLTRhZTgtOGJhMS05MjBjMzk5NjQxZGYiLCJzY29wZSI6Im9wZW5pZCBiYXNpYyBhcGkuaWFtLnNlcnZpY2VfYWNjb3VudHMgcm9sZXMgd2ViLW9yaWdpbnMgY2xpZW50X3R5cGUucHJlX2tjMjUgb2ZmbGluZV9hY2Nlc3MifQ.QdBlhVTGUj0Z0IsAkSRXM5yR2FfnY8k0Sczj5xVUjaKCiTJ-lCk08dUP2Omcndk6oQ0LYPXDzWL7v4f9423trg

请添加图片描述

测试安装ansible.posix

ansible-galaxy collection install ansible.posix

请添加图片描述

确认安装完成

[root@foundation0 ansible]# ls /root/collections/ansible_collections/ansible
posix

添加ansible仓库

[galaxy]
# 下行追加ansible_hub定义
server_list=redhat_hub,ansible_hub
[galaxy_server.redhat_hub]
url=https://console.redhat.com/api/automation-hub/content/published/
auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
token=eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0NzQzYTkzMC03YmJiLTRkZGQtOTgzMS00ODcxNGRlZDc0YjUifQ.eyJpYXQiOjE3MzYzMTg4MzMsImp0aSI6ImI0YjJmZTAxLWM5NWMtNDZiNS05YWE4LWRlZGQyZmE1Y2RiNCIsImlzcyI6Imh0dHBzOi8vc3NvLnJlZGhhdC5jb20vYXV0aC9yZWFsbXMvcmVkaGF0LWV4dGVybmFsIiwiYXVkIjoiaHR0cHM6Ly9zc28ucmVkaGF0LmNvbS9hdXRoL3JlYWxtcy9yZWRoYXQtZXh0ZXJuYWwiLCJzdWIiOiJmOjUyOGQ3NmZmLWY3MDgtNDNlZC04Y2Q1LWZlMTZmNGZlMGNlNjoxMzkxNzA5OTMyMkAxMzkuY29tIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6ImNsb3VkLXNlcnZpY2VzIiwibm9uY2UiOiIwYzYyMDFkZS03MmE4LTRhNDEtOTE3My1mOGMwNzgxYjBmNzQiLCJzaWQiOiJiZTA0ZTk1Zi1iZjViLTRhZTgtOGJhMS05MjBjMzk5NjQxZGYiLCJzY29wZSI6Im9wZW5pZCBiYXNpYyBhcGkuaWFtLnNlcnZpY2VfYWNjb3VudHMgcm9sZXMgd2ViLW9yaWdpbnMgY2xpZW50X3R5cGUucHJlX2tjMjUgb2ZmbGluZV9hY2Nlc3MifQ.QdBlhVTGUj0Z0IsAkSRXM5yR2FfnY8k0Sczj5xVUjaKCiTJ-lCk08dUP2Omcndk6oQ0LYPXDzWL7v4f9423trg
# 添加以下2行
[galaxy_server.ansible_hub]
url=galaxy.ansible.com

安装一个vmware.vmware的插件

ansible-galaxy collection install vmware.vmware

安装结束后可以看到在/root/collections/ansible_collections/创建了vmware的子目录,我们下载的新插件就安装在这个位置

请添加图片描述

10.2 私有化hub配置

复制仓库配置

请添加图片描述

[galaxy]
server_list = community_repo[galaxy_server.community_repo]
url=https://hub.lab.example.com/api/galaxy/content/community/
token=<put your token here>

生成token

请添加图片描述

修改后的ansible.cfg文件内容

[defaults]
collections_path=/home/student/collection/plugin
[galaxy]
server_list = community_repo
[galaxy_server.community_repo]
url=https://hub.lab.example.com/api/galaxy/content/community/
token=9e266577135f4a42c8612d4bb06a9dcbdb394cdc

创建galaxy collection的路径

mkdir -p /home/student/collection/plugin

安装一个community库的试一下

请添加图片描述

请添加图片描述

复制以下命令在命令行执行

请添加图片描述

请添加图片描述

11. 剧本执行顺序

  1. pre_tasks
  2. pre_tasks中的handler
  3. roles
  4. tasks
  5. roles中的handler
  6. post_tasks
  7. post_tasks中的handler
  8. pre roles和tasks post

12. 判断

12.1 远程文件的判断

---
- name: Is the file in serverahosts: servera.lab.example.comgather_facts: falsetasks:- name: get file statusfile:name: /etc/hostsstate: fileregister: get_file- name: get filedebug:msg: "The file is exists"when: get_file.state == "file"

12.2 字符串大小写的判断

---
- name: Is the file in serverahosts: servera.lab.example.comgather_facts: falsevars:uppercase: REDHATlowercase: redhattasks:- name: Uppercase outputdebug:msg: "It's Uppercase!"when: uppercase is upper- name: Lowercase outputdebug:msg: "It's Lowercase!"when: lowercase is lower

12.3 判断ansible版本(控制端)

---
- name: Is the file in serverahosts: servera.lab.example.comgather_facts: falsetasks:- name: Operating Versiondebug:msg: "The playbook can run."when: ansible_version.full is version("2.8","gt")

12.4 子集

---
- name: Is the file in serverahosts: servera.lab.example.comgather_facts: falsevars:os_type:- rhel- fedora- centos- ubuntu- openeulerredhat:- rhel- fedora- centostasks:- name: Subsetdebug:msg: "It's subset"when: redhat is subset(os_type)

请添加图片描述

12.5 父集(超集)

---
- name: Is the file in serverahosts: servera.lab.example.comgather_facts: falsevars:os_type:- rhel- fedora- centos- ubuntu- openeulerredhat:- rhel- fedora- centostasks:- name: SuperSetdebug:msg: "It's superset"when: os_type is superset(redhat)

请添加图片描述

12.6 判断字符串是否在集合内

---
- name: Is the file in serverahosts: servera.lab.example.comgather_facts: falsevars:os_type:- rhel- fedora- centos- ubuntu- openeulerredhat:- rhel- fedora- centoscentos: centostasks:- name: SuperSetdebug:msg: "It's in superset"when: centos in redhat

请添加图片描述

12.7 多任务用同一条件判断

12.7.1 block

block: 将多个任务包含在一个区块内,进行判断.

---
- name: block message testhosts: allgather_facts: truetasks:- name: in blockblock:- name: debug1debug:msg: "msg 1"- name: debug2debug:msg: "msg 2"- name: debug3debug:msg: "msg 3"- name: debug4debug:msg: "msg 4"- name: display hostnamedebug:var: ansible_hostnamewhen: ansible_hostname == "servera"

这样就不需要在每个模块下面都加一个重复的

when: ansible_hostname == "servera"

请添加图片描述

12.7.2 rescue

rescue是用来处理block失败的后续手段.

---
- name: block message testhosts: allgather_facts: truetasks:- name: in blockblock:- name: get filefile:name: /opt/rh374.txtstate: filerescue:- name: touch filefile:name: /opt/rh374.txtstate: touch

当block内容执行错误后,rescue的修复任务被触发.如果block执行正常,那么rescue内容不会被执行.

请添加图片描述

当第二次再次执行,修复任务不在被执行

请添加图片描述

12.7.3 always

无论如何这个命令都会被执行

---
- name: block message testhosts: allgather_facts: truetasks:- name: in blockblock:- name: get filefile:name: /opt/rh374.txtstate: filerescue:- name: touch filefile:name: /opt/rh374.txtstate: touchalways:- name: show the filename rh374.txtfile:name: /opt/rh374.txtstate: file

请添加图片描述

12.7.4 剧本退出

---
- name: block message testhosts: servera.lab.example.comgather_facts: truetasks:- name: get filefile:name: /etc/hostsstate: file- name: exit playbookfail:msg: "exit playbook"- name: output messagedebug:msg: "I am running"

当执行到fail段落时候就直接退出了,后续任务不会再被执行

请添加图片描述

判断ansible版本是否高于2.9,如果太低那么就不执行

---
- name: block message testhosts: servera.lab.example.comgather_facts: truetasks:- name: output messagedebug:msg: "{{ ansible_version.full }}"- name: optput ansible versionfail:msg: "The ansible version is lower than 2.9,you must update the ansible version."when: ansible_version.full is version("2.9","lt")- name: install applicationsdebug:msg: "install apps....."

请添加图片描述

12.7.5 带有条件的退出

当条件触发,则退出

---
- name: block message testhosts: servera.lab.example.comgather_facts: truetasks:- name: Determine the ansible version,then install applicationsdebug:msg: "Install apps....."failed_when: ansible_version.full is version("2.9","lt")

改为failed_when之后可以将2-3个task合并成一个

请添加图片描述

13. 循环语句

13.1 遍历列表

在ansible中有很多循环场景需要批量安装或者授权.

---
- name: loop hosts: servera.lab.example.comgather_facts: truevars:user_list:- tom- bob- andy- tony- tedtasks:- name: Add usersuser:name: "{{ item }}"state: presentwith_items: "{{ user_list }}"

请添加图片描述

13.2 遍历字典

---
- name: loop hosts: servera.lab.example.comgather_facts: truevars:user_list:ituser1:name: tomuid: 3000home: /home/tomituser2:name: jarryuid: 3001home: /home/jarrytasks:- name: Add users#debug:#  msg:  "{{ item.value.name }} {{ item.value.uid }} {{ item.value.home }}"#msg:  "{{ item.value.name }}"user:name: "{{ item.value.name }}"uid: "{{ item.value.uid }}"comment: "{{ item.value.name }}"home: "{{ item.value.home }}"with_dict: "{{ user_list }}"

请添加图片描述

到servera上确认两个用户正常创建

请添加图片描述

13.3 loop循环

loop本身是循环列表,可以通过loop dict2items来循环字典.将字典转换成列表.

---
- name: loop hosts: servera.lab.example.comgather_facts: truevars:user_list:ituser1:name: tomuid: 3000home: /home/tomituser2:name: jarryuid: 3001home: /home/jarrytasks:- name: Add usersdebug:msg:  "{{ item.value.name }} {{ item.value.uid }} {{ item.value.home }}"loop: "{{ user_list |dict2items }}"

请添加图片描述

14. 任务委派

delegate_to 可以将任务交给其他服务器执行,此服务器甚至可以不在inventory中

---
- name: delegate to pluginghosts:  servera,serverbgather_facts: truetasks:- name: Delegate the playbook to serverc.block:- name: Install Apacheyum:name: httpdstate: present- name: Make sure a service unit is runningansible.builtin.systemd:state: startedname: httpdenabled: yes- name: Make sure a service unit is stoppingansible.builtin.systemd:state: stoppedname: firewalldenabled: yes- name: Create the index filecopy:dest: /var/www/html/index.htmlcontent: "In serverc"delegate_to: serverc - name: Download the fileansible.builtin.get_url:url: http://serverc/index.htmldest: /root/aaa.html

将整个block中内容由servera和serverb调度给serverc,在serverc完成了调度后,servera和serverb再从serverc上获取到该文件

请添加图片描述

15. 事实委派

主要作用就是在服务器之间的参数传递

一般delegate_facts和delegate_to 会同时出现

---
- name: Delegate factshosts: servera,serverbgather_facts: notasks:- name: get servera factssetup:delegate_facts: truedelegate_to: serverb- name: set ip infocopy:dest: /opt/ipaddress.txtcontent: "{{ hostvars['serverb'].ansible_eth0.ipv4.address }}"

请添加图片描述

16. 缓存事实变量

缓存事实变量目的: 为了加速playbook的执行加速,不必每次运行playbook都要进行实时变量的收集.

常见有3种缓存方式:

  1. jsonfile
  2. memcache
  3. redis

开启缓存方式:

在ansible.cfg中[defaults]段落中gathering= 进行设置

参数含义
smart智能收集,如果本地有缓存则使用缓存,如果本地没有缓存则收集事实变量并缓存.
implicit一直收集事实变量(默认)
explict从来不收集,除非在playbook中指定gather_facts=true

smart开启后需要指定以下参数:

参数含义
fact_caching=jsonfile/memcached/redis三选一以哪种格式缓存
fact_cacheing_connection./facts_cache/jsonfile需要指定事实变量缓存的位置
fact_caching_timeout86400 (一天)当缓存失效后,重新开始缓存

memcache配置参数:

参数含义
fact_cachingmemcached使用memcache来做缓存
fact_caching_connection127.0.0.1:11211memcache的地址

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

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

相关文章

STM32如何测量运行的时钟频率

前言 环境&#xff1a; 芯片&#xff1a;STM32F103C8T6 Keil&#xff1a;V5.24.2.0 一、简介STM32F103C8T6的时钟源 ①HSI 内部高速时钟,RC振荡器&#xff0c;频率为8MHz&#xff0c;精度不高。②HSE 外部高速时钟,可接石英/陶瓷谐振器&#xff0c;频率范围为4MHz~16MHz&…

【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)

【Web安全】SQL 注入攻击技巧详解&#xff1a;UNION 注入&#xff08;UNION SQL Injection&#xff09; 引言 UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集&#xff0c;可以获取数据库中未授权的数据。这种注入技术要…

什么是卷积网络中的平移不变性?平移shft在数据增强中的意义

今天来介绍一下数据增强中的平移shft操作和卷积网络中的平移不变性。 1、什么是平移 Shift 平移是指在数据增强&#xff08;data augmentation&#xff09;过程中&#xff0c;通过对输入图像或目标进行位置偏移&#xff08;平移&#xff09;&#xff0c;让目标在图像中呈现出…

C#中通道(Channels)的应用之(生产者-消费者模式)

一.生产者-消费者模式概述 生产者-消费者模式是一种经典的设计模式&#xff0c;它将数据的生成&#xff08;生产者&#xff09;和处理&#xff08;消费者&#xff09;分离到不同的模块或线程中。这种模式的核心在于一个共享的缓冲区&#xff0c;生产者将数据放入缓冲区&#x…

【excel】VBA简介(Visual Basic for Applications)

文章目录 一、基本概念二、语法2.1 数据类型2.11 基本数据类型2.12 常量2.13 数组 2.2 控制语句2.21 条件语句2.22 循环语句2.23 错误处理&#xff1a;On Error2.24 逻辑运算 2.3 其它语句2.31 注释2.32 with语句 2.4 表达式2.41 常见表达式类型2.42 表达式的优先级 2.5 VBA 的…

Git:Cherry-Pick 的使用场景及使用流程

前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能&#xff0c;Cherry-Pick不是merge&#xff0c;只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介&#xff1a; git cherry-pick 是用来从一个分…

mysql本地安装和pycharm链接数据库操作

MySQL本地安装和相关操作 Python相关&#xff1a;基础、函数、数据类型、面向、模块。 前端开发&#xff1a;HTML、CSS、JavaScript、jQuery。【静态页面】 Java前端&#xff1b; Python前端&#xff1b; Go前端 -> 【动态页面】直观&#xff1a; 静态&#xff0c;写死了…

数据结构与算法之二叉树: LeetCode 654. 最大二叉树 (Ts版)

最大二叉树 https://leetcode.cn/problems/maximum-binary-tree/ 描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值递归地在最大值 左边 的 子数组前缀上 构建左子树递归地在最大值…

【Unity高级】一文了解Unity 中的条件编译(附所有指令)

一、Unity中的条件编译 Unity 对 C# 语言的支持包括使用指令&#xff0c;这些指令允许您根据是否定义了某些脚本符号&#xff0c;选择性地包含或排除代码的编译。有关这些指令在 C# 中如何工作的更多信息&#xff0c;请参阅微软关于 C# 预处理器指令 的文档。 &#xff08;一…

苍穹外卖08——(涉及接收日期格式数据、ApachePOI导出报表、sql获取top10菜品数据)

营业额统计 service层 在需要处理空值、与数据库交互或使用集合时&#xff0c;Integer 、Double是更好的选择。 // 导入string工具类 import org.apache.commons.lang.StringUtils; Service // 标记该类为Spring的服务组件 Slf4j // 引入日志功能 public class Repor…

微信小程序订阅消息提醒-云函数

微信小程序消息订阅分2种&#xff1a; 1.一次性订阅&#xff1a;用户订阅一次就可以推送一次&#xff0c;如果需要多次提醒需要多次订阅。 2.长期订阅&#xff1a;只有公共服务领域&#xff0c;如政务、医疗、交通、金融和教育等。‌在用户订阅后&#xff0c;在很长一段时间内…

代码随想录算法训练营第 4 天(链表 2)| 24. 两两交换链表中的节点19.删除链表的倒数第N个节点 -

一、24. 两两交换链表中的节点 题目&#xff1a;24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 视频&#xff1a;帮你把链表细节学清楚&#xff01; | LeetCode&#xff1a;24. 两两交换链表中的节点_哔哩哔哩_bilibili 讲解&#xff1a;代码随想录 dummy-…

pycharm-pyspark 环境安装

1、环境准备&#xff1a;java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…

【大模型入门指南 07】量化技术浅析

【大模型入门指南】系列文章&#xff1a; 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…

3DGabor滤波器实现人脸特征提取

import cv2 import numpy as np# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # 相位偏移# 生成 Gabor 滤…

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令&#xff08;重要&#xff09;3.3cp指令&#xff08;重要&#xff09;输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令&#xff08;重要&#xff09;mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…

Vue3初学之Element-plus

用于快速的上手开发&#xff0c;以做项目为导向&#xff0c;所以借用element-plus插件 发现淘宝的镜像有时候也是很慢的&#xff0c;还可以换个 npm config set registry https://registry.npmmirror.com 安装element-plus npm install element-plus --save 查看安装是否成…

实用操作系统学习笔记

第1章 操作系统概述 操作系统基本概念 【基础知识】 操作系统&#xff1a;控制和管理整个计算机系统的硬件和软件资源&#xff0c;合理地组织、调度计算机的工作与资源的分配&#xff0c;进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的…

k8s部署rocketmq踩坑笔记

给团队部署一个rocketmq4.8.0. k8s上部署的broker&#xff0c;注册到nameserver上是自己的pod ip&#xff0c;导致本机连接到的broker的pod ip&#xff0c;这个ip k8s集群外的机器是无法联通的。 nameserver上注册的是这个pod ipv4 尝试将broker的配置brokerIP1修改为注册到na…

UI自动化测试保姆级教程①

欢迎来到阿妮莫的学习小屋慢也好&#xff0c;步子小也好&#xff0c;在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…