Redhat-ansible-合集

news2024/10/3 0:33:04

1.安装
2.部署ANSIBLE
   2.1INVENTORY
   2.2ANSIBLE配置文件
   2.3AD HOC命令
3.PLAYBOOK
4.变量
5.ansible vault加密变量
6.ansible_facts
7.loop
8.条件判断
9.handler处理
10.错误处理
11.tags标签
12.管理文件
13.template模板
14.host-pattern
15.动态Inventory
16.role
17.配置并行


 


1.安装


  1.1控制节点:linux 
  1.2 受管主机:windows

yum install ansible
yum install python36


2. 部署ANSIBLE
  目录结构



2.1INVENTORY

     mkdir  web
     vim inventory
     格式:INI,YAML格式。
 

ansible all -i inventory --list-host #当前文件夹
# 系统目录 /etc/ansible/hosts 

#查找是否有 servera这个主机
ansible all -i ./inventory --list-hosts servera

#在文件中查找 abc
grep abc /etc/hosts

#不属于任何组
ansible all -i ./inventory --list-hosts ungrouped


树形查看:ansible-inventory -i inventory --graph

[njwebs]
servera
serverb
[njdbs]
serverc
serverd
[nj:children]
njwebs
njdbs

2.2ANSIBLE配置文件
2.21配置文件及优先级  
    文件位置和优先级:由上到下,优先级越来越高。
  ./相对路径

 查看当前使用的配置文件:
ansible --version|grep 'config file'
在文件 ansible.cfg中查找 ‘^\[’
egrep  ‘^\[’ ansible.cfg

2.22常见配置 

2.23 验证配置
ansible all -m command -a id

2.3AD HOC命令


目的:
1.快速执行单个任务
2.快速测试和更改
3.执行简单任务

返回值:

 

3.PLAYBOOK

vim ~/.vimrc    在家目录下 用vim时执行命令
bash ~/.bashrc 在家目录下 用bash时执行命令 
vim /etc/vimrc  全局的vimrc

set ai ts=2
# ai 自动缩进 ts=2 tab键用2个空格实现

3.1一文件一个列表:

---                         #开始
- name: create user         # - 代表列表
  hosts: servera
  tasks:
    - name: create user laoma
      user:
        name: tang
        uid:
        state: present
  shuiguo:                
    - pingguo
    - juzi
    - taozi
  

...                         #结束 一般不写

 3.2 一文件中多个列表

3个层次:是列表类型 - 
1.play :name,hosts,tasks
2.tasks:name,模块
3.模块
冒号后有一个空格 字典类型(多个键值对)
key: value  字典类型

 4.变量
   4.1变量定义

 4.2 变量作用域

4.3 引用变量时要用引号
1.变量声明

 2.变量文件声明

注意:
:后面一定要加“”或者‘’

 4.4.主机变量和主机组变量
 1.主机变量:

---
- name: test vars
  hosts: servers
  remote_user: root
  vars_files:
    - vars/user1.yml
  #vars:
  #  user: joe
  #  home: /home/joe
  tasks:
    - name: add user {{ user }}
      user:
        name: "{{ user }}"
        home: "{{ home }}"
    - name: debug user
      debug:
        msg: >
          username is  {{ user }}
          home is {{ home }}

inventory

[servers]
servera user=usera home=/opt/usera
serverb user=userb home=/opt/userb

此时 vars_files需要注释掉。

2.主机组变量
   优先级低于主机变量的。
inventory

[servers]
servera user=usera home=/opt/usera
serverb
[servers:vars]
user=tom
home=/opt/tom

3.如果有非常多的主机:

3.1主机目录:host_vars:
3.2主机组目录:group_vars:
#1.创建目录mkdir host_vars
#2.创建servera.yml.   serverb.yml
vim host_vars/servera.yml

user: user1
home: /opt/user1
user: user2
home: /opt/user2

grep . host_vars/* #  当前目录/host_vars/

3.2主机组目录:group_vars:
vim  group_vars/servers.yml

users: user-servers
home: /opt/user-servers

tree group_vars/  host_vars/  

4.4数组变量

 

4.41数组列表树形结构
      users_vars.yml

user: user1
home: /opt/user1
ansible_host: servera.lab.example.com
ansible_user: root
users:
  bjones:
    frist_name: Bob
    last_name: Jones
    home_dir: /users/bjones
  acook:
    frist_name: Anne
    last_name: Cook
    home_dir: /users/acook

users-play.yml

---
- name: test vars
  hosts: servera
  remote_user: root
  tasks:
    - name: add user {{ user }}
      user:
        name: "{{ users.bjones.first_name }}_{{ users.bjones.last_name }}"
        home: "{{ users.bjones.home_dir }}"
        state: present
    - name: add user {{ user }}
      debug:
        msg: >
          username is {{ user }}
          home is {{ home }}

4.42变量是两个列表,引用时使用下标的方式:

users_vars.yml

user: user1
home: /opt/user1
ansible_host: all
ansible_user: root
users:
  - first_name: bob
    last_name: jones
    home_dir: /users/bjones
  - first_name: Anne
    last_name: Cook
    home_dir: /users/acook

users_play1.yml

---
- name: test
  hosts: servera
  remote_user: root
  tasks:
    - name: create
      file:
        path: /users
        state: directory
    - name: add user
      user:
        name: "{{ users[0].first_name }}_{{ users[0].last_name }}"
        home: "{{ users[0].home_dir }}"
        state: present
    - name: debug
      debug:
        msg: >
          username is {{ user }}
          home is {{ home }}

users_play2.yml

---
- name: test
  hosts: servera
  remote_user: root
  tasks:
    - name: create
      file:
        path: /users
        state: directory
    - name: add user
      user:
        name: "{{ users[0]['first_name'] }}_{{ users[0]['last_name'] }}"
        home: "{{ users[0]['home_dir'] }}"
        state: present
    - name: debug
      debug:
        msg: >
          username is {{ user }}
          home is {{ home }}

以上两种都可以。vim
1.块复制
    编辑可视块提示字样 :ESC+   ctrl+V 
    复制:选取 +y
    黏贴:p
     回到编辑态
2.删除所有行内容
    ESC:退出编辑模式
    g g:光标移到文本的首行
    d+G:
    ESC:1,$d 
3.替换  把users 替换成 user-type1
  :%s/users/users-type1/g
   

4.43用于捕获任务输出

users_vars.yml

user: user1
home: /opt/user1
ansible_host: all
ansible_user: root
users_type2:
  - first_name: bob
    last_name: jones
    home_dir: /users/bjones
  - first_name: Anne
    last_name: Cook
    home_dir: /users/acook
users_type1:
  - first_name: bob
    last_name: jones
    home_dir: /users/bjones
  - first_name: Anne
    last_name: Cook
    home_dir: /users/acook

users_play.yml

---
- name: test vars
  hosts: servera
  remote_user: root
  tasks:
    - name: add user
      user:
        name: "{{ users_type1[0].frist_name }}_{{ users_type1[0].last_name }}"
        home: "{{ users_type1[0].home_dir }}"
        state: present
      register: result  #定义了一个变量用于存储返回值
    - name: show result
      debug:
        var: result

4.5 4个MAGIC变量

 

hostvars[host].ansible_default_ipv4.address
hostvars[host].ansible_fqdn
hostvars[host].ansible_hostname

when inventory_hostname in groups.dev

5.ansible vault加密变量
 

ansible-vault --help

# 加密
ansible-valut encrypt host_vars/servera.yml
# 查看
ansible-valut view host_vars/servera.yml
# 编辑
ansible-valut edit host_vars/servera.yml
# 解密
ansible-valut decrypt host_vars/servera.yml

#创建
ansible-valut create securite.yml


6.ansible_facts

 通过setup模块查看: ansible servera -m setup|less
  ansible servera -m setup | less
  ansible servera -m setup > fact.yml

 ansible servera -m debug -a 'var=ansible_facts'
#看不到值的
show_facts.yml

---
- name: show var ansible_facts
  hosts: servera
  tasks:
    - name: show var ansibe_facts
      debug:
        var: ansible_facts


deploy_web.yml
不收集事实 gather_facts: false

---
-  name:
   hosts: servera
   gather_facts: false
   remote_user: root
   become: true
   become_method: sudo
   become_user: root
   tasks:
    - name:
      yum:
        name: httpd
        state: present
    - name:


 引用 两种写法
 ansible_default_ipv4.address
 ansible_facts.default_ipv4.address

 1.判断是否存在
ansible_lvm.vgs.research is defined
ansible_lvm.vgs.research is not defined
ansible_devices.vdb is defined
ansible_devices.vdb is not defined
2.取值
 {{ hostvars[host].ansible_default_ipv4.address }} 
{{ hostvars[host].ansible_fqdn }}
{{ hostvars[host].ansible_hostname }}
‘memory={{ ansible_memtotal_mb }}’
'vdasize={{ ansible_devices.vda.size | default("NONE")}}'

7.loop

#删除 host_vars里的文件
rm -fr host_vars/*
vim host_vars/servera/users_vars.yml

ssh root@servera "egrep 'jack|tom' /etc/passwd"

users_vars.yml

#写法1
user1: jack
user2: tom

#写法2
users:
  - jack
  - tom

#写法3
users:
  bjones:
    frist_name:
    last_name:
    home_dir:
  acook:
    frist_name:
    last_name:
    home_dir:

users_play_loop1.yml

---
- name: create users
  hosts: servera
  gather_facts: no
  vars:
    users:
      - jack
      - tom
  tasks:
    - name: add user jane
      user:
        name: "{{ item }}"
        state: present
      loop:
        - jack
        - tom


users_play_loop2.yml

---
- name: create users
  hosts: servera
  gather_facts: no
  vars:
    users:
      - jack
      - tom
  tasks:
    - name: add user jane
      user:
        name: "{{ item }}"
        state: present  #删除 absent
      loop: "{{ users }}"

7.1简单的循环
    声明变量和不声明变量2种。

 7.2循环列表值  列表中带有字典

 7.3with_list with_item

7.4with_random_choice

8.条件判断

8.1判断:== 》等
是否定义:is defined 

---
- name: test when
  hosts: servera
  gather_facts: no
  vars:
    run_mytasks: true
  tasks:
    - name:
      debug:
        msg: "hello my task"
      when: run_mytasks




8.2  判断执行结果

 

9.handler处理:


 

与一般的任务区别在于什么?
handlers:
1.多个任务都会执行同一个函数,最后一个任务时才执行
2.任务发生改变时才通知handlers
3.如果状态未发生改变是不执行的,比如相同的playbook,运行两次。

一步步执行
ansible-playbook handlers.yml --step
notify:
    - hello
    - restart apache
handlers:
    - name: restart apache
       service:
           name:
           state:
    - name: hello
      debug:

先执行 restart apache,再执行hello 
执行顺序取决于 handlers 而非 notify

10.错误处理

1.返回值变量关键字:register
2.返回的值: successded,failed,changed
3.忽略执行错误:ignore_errors: true  #yes

---
- name: test error
  hosts: servera
  gather_facts: no
  vars:
    doshell: "yes"
  tasks:
    - shell : cat /etc/host
      register: result
      ignore_errors: true
      when: deoshell == "yes"
    - name: success
      debug:
        msg: success
      when: result is succeeded
    - name: failed
      debug:
        msg: failed
      when: result is failed
    - name: changed
      debug:
        msg: changed
      when: result is changed

1.一般任务,忽略错误

 2.notify-handler模式的play,执行失败后仍然运行handlers


3.failed模块, 任务必定failed,停在这一步。

4.failed_when 指明什么条件下,判定任务执行失败。

5.ansible block和错误处理
  5.1当两个语句都需要when 语句判断时,用了block。

---
- name: block example
  hosts:
  gather_facts: no
  tasks:
    - block:
        - name:
          debug:
            msg: task1
        - name:
          debug:
            msg: task2
       when: ansible_distribution == "redhat"

5.2 三个层次
    block 是主任务,执行失败时运行rescue,无论成功与否都执行always.

---  
- name: test block  
  hosts: mytest
  gather_facts: no
  vars:
    - run: no
  tasks:
    - block:
        - name:
          debug:
            msg: task1 in block
        - name:
          debug:
            msg: task2 in block
      rescue:
         - name:
           debug:
             msg: task1 in rescue
         - name:
           debug:
             msg: task2 in rescue
      always:
        - name:
          debug:
            msg: task1 in always
        - name:
          debug:
            msg: task2 in always

 查看 ansible facts值:ansible servera -m setup|less
 


11.tags标签

---
- name:
  hosts:
  tasks:
    - name: httpd
      yum:
        name: httpd
        state: latest
      tags: webserver
    - name:
      yum:
        name: postfix
        state: latest
      tags: mailserver
    - name: always debug
      debug:
        msg: debug
      

12.管理文件
 

查找本地的用户和组: /etc/shadow   /etc/passwd
 

12.1 file 创建目录、文件、软硬链接
 

---
- name:
  hosts:
  tasks:
    - name: create file
      file: 
        path: ~/mytest/testfile
        owner:
        group:
        mode: '0640'
        setype: httpd_sys_content_t
        state: touch                             # state 参数file ,directory,link,touch
    - name: create directory
      file: 
        path: ~/mytest/testdir
        owner:
        group:
        mode: '0640'
        setype: httpd_sys_content_t
        state: directory                        # state 参数file ,directory,link,touch
    

   - name: install package
      yum: 
        name: httpd
        state: present                      #state 参数 present absent
    - name: install package
      service: 
        name: "{{ item }}""
        state: present
      loop:
        - httpd
        - firewalld
    - name: create user
      user: 
        name:  harry
        state: present
    - name: create groups
      group: 
        name:  sysm
        state: present   

 

 file :touch:创建 ;absent:删掉;directory:目录。

12.2修改上下文  selinux context:sefcontext

12.3 lineinfile 修改文件内容

12.4 replace 多行替换

12.5 copy

 

13.template模板
 

13.1 基本功能

变量替换。被传输的文件内容是变量,每台机器各异。

1.模板调用:  mytesttemplate.yml
2.模板文件:my.cnf
 

---
- name: test jinja2
  hosts: servera
  tasks:
    - name:
      template:
        src: my.cnf
        dest: /root/my.cnf

my.cnf

bind {{ ansible_default_ipv4.address }}

13.2 jinja2模板
   模板中 光#不是注释。

语法:哪些内容被替换,哪些不被替换?



如果指示不用手动编辑:
1.ansible.cfg文件中添加
   ansible_managed= Ansible managed
2.jinja2 模板中添加
# {{ ansible_managed }}


13.21  条件语句+替换的变量是ansible_facts的值
 

{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }} {{ hostvars[host]['ansible_facts']['fqdn'] }} {{ hostvars[host]['ansible_facts']['hostname'] }}
{% endfor %}
{% for host in groups.all %}
{{ hostvars[host].ansible_default_ipv4.address }} {{ hostvars[host].ansible_facts_fqdn }} {{ hostvars[host].ansible_hostname }}
{% endfor %}

13.22 替换的变量来自文件
  变量文件:~/ansible/host_vars/servera.yml
 变量文件名为主机名,不可任意命名。

ssh_port: 1022
root_allowed: yes
groups_allowed: root
passwords_allowed: yes

模板文件:myvars.cnf

Port {{ ssh_port }}
ListenAddress {{ ansible_defalut_ipv4.address }}
PermitRootLogin {{ root_allowed }}
Allow Groups {{ groups_allowed }}
PasswordAuthentication {{ passwords_allowed }}

13.23 for循环的是自定义变量

模板文件:fro.j2

{% for user in users %}
user:{{ user }}
{% endfor  %} 

变量文件:vim /host_vars/servera.yml

users:
  - user01
  - user02
  - user03

13.24


13.25 变量过滤器



13.26 字符操作过滤器



  

14.host-pattern

 

# 1.查找主机 servera
ansible --list-hosts servera
# 2. 查找主机组   出2个
ansible --list-hosts datacenter1
# 并集
ansible --list-hosts datacenter1 ,new
ansible --list-hosts datacenter1 :new
#3.  查找父组     出4个 就是他们底下的 datacenter1 ,datacenter2
ansible --list-hosts datacenter

#4.模糊匹配  一定要加单引号
ansible --list-hosts all
ansible --list-hosts '*'
ansible --list-hosts 'server*'
ansible --list-hosts '172*'


#5.取两个主机组的交集
ansible --list-hosts ' datacenter1,&lab'
ansible --list-hosts ' datacenter1,&serverc'


#6.取数组第1个值, 0-1, -1最后
ansible --list-hosts 'new[0]'
ansible --list-hosts 'new[0-1]'
ansible --list-hosts 'new[-1]'

15.动态Inventory


 

wget  http://       -O  inventory/inventorya.py
mv inventorya.py inventory

#添加执行权限
chmod +x inventory/*

inventory/inventorya.py --list | json_reformat


脚本如何写?


16.role
   16.1 role 结构 
  role 定义了:tasks,操作的主机,模板。

3个示例:

16.11 timesync
 1.安装包
 2.复制角色所有文件
 3.查看帮助文件: 得到示例  README.md
 4.编写调用的:playbook

sudo yum list|grep roles*
sudo yum install -y rhel-system-roles
cp -r /usr/share/ansible/roles/rhel-systemroles.timesync roles/timesync
ansible-galaxy list
vim roles/timesync/README.md
---
- name: Use RHEL system role
  hosts: all
  vars:
    timesync_ntp_servers:
      - hostname: 172.25.254.254
        iburst: yes
  roles:
      - timesync

16.12 seliunx
 1.安装包。
 2.复制角色所有文件。
 3.查看帮助文件: 得到示例  
/usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml
 4.编写调用的:playbook 

sudo yum list|grep roles*
sudo yum install -y rhel-system-roles
cp -r /usr/share/ansible/roles/rhel-systemroles.selinux roles/selinux
ansible-galaxy list
cp /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml ~/ansible/myselinux.yml

---
- name: Use RHEL system role
  hosts: all
  vars:
    selinux_policy: targeted
    selinux_state: enforcing
    selinux_reboot_required: true
  tasks:
    - block:
        - name: Apply SELinux role
          include_role:
            name: selinux
      rescue:
        - name: Check for failure for other reasons than required reboot
          fail:
          when: not selinux_reboot_required
        - name:
          reboot:
        - name: Reapply SELinux role
          include_role:
            name: selinux

16.13 apache

1.主任务:tasks: main.yml
2.主任务中的变量:defaults:main.yml 
3.主任务中的motd文件: vim files/motd
4.主任务中的
        4.1 模板文件:templates/laoma.conf.j2
        4.2 handlers文件:handlers/main.yml
5.
6.模板文件: templates/index.html.j2
7. 使用

1.主任务 tasks: main.yml

---
- name: install web
  tasks:
    - name: 1.install package  defaults/main.yml
      yum:
        name: "{{ web_package }}"
        state: present
    - name: 2.start service
      service:
        name: "{{ web_service }} "
        state: started
        enabled: yes
    - name: 3.prepare motd  files/motd
      copy:
        src: motd
        dest: /etc/motd
    - name: 4. prepare conf templates/laoma.conf.j2 handlers/main.yml
      template:
        src: laoma.conf.j2
        dest: /etc/httpd/conf.d/laoma.conf
      notify:
        - restart_web
    - name: 5.prepare docRoot
      file:
        path: "/var/www/html/{{ ansible_hostname }}"
        state: directory
    - name: 6.prepare index.html
      template:
        src: index.html.j2
        dest: "/var/www/html/{{ ansible_hostname }}/index.html"     

2.主任务中的变量文件:defaults:main.yml 

---
web_package: httpd
web_service: httpd

3.主任务中的motd文件 vim files/motd

# /etc/issue和/etc/motd
#区别在于 /etc/issue 是在 登录之前显示, /etc/motd 是在登录之后显示
hello guys
welcome to servera!

4.主任务中的
    4.1模板文件: templates/laoma.conf.j2

    4.2  handlers文件:handlers/main.yml

---
- name: restart_web
  service:
    name: httpd
    state: restarted

5.
6.模板文件:templates/index.html.j2

hello guys
welcome to {{ ansible_fqdn }}!

meta/main.yml
   

7.使用:ansible-galaxy list

---
- name:
  hosts: mytest
  roles:
    - apache

curl http://localhost

16.2 使用 rhel-system-role

   deploy apache
   vim mytestDeployApache.yml
16.21 :关键字
    roles:
        - apache

---
- name: deploy apache
  hosts: serverc
  roles:
    - apache

16.22 : tasks:
include_role:

16.3 使用 Galaxy 角色

查看:
ansible-galaxy info haproxy --offline
ansible-galaxy role info -h
ansible-galaxy search haproxy
ansible-galaxy install docker

安装:
单个安装和多个安装:
ansible-galaxy install -r  requires.yml
vim requires.yml

 



a) ansible init tang cd tang
b) cat  tasks/main.yml

17.配置并行
 

 17.1设置forks


1.修改主机清单:inventory:

[servers]
server[a:d]
# 1.查看默认配置
ansible-config  dump|grep -i fork
#2.修改配置文件
vim ansible.cfg
ansible all -m ping

2.修改配置文件: ansible.cfg

[defaults]
inventory=inventory
remote_user=root
forks=2

3.编写 playbook:

---
- name:
  hosts: all
  gather_facts: no
  tasks:
    - name: task1
      shell: sleep 3

4.设置并发台数:

4.1.修改配置文件 ansible.cfg 可以控制每次的台数
4.2.使用命令行控制:ansible-playbook playbook.yml -f 3 命令行高于配置文件。

 

17.2滚动更新
 

a)串行:一次完成整个playbook
  滚动更新用的就是串行。
b)并行:多台先完成一个task


关键词
serial: 2
serial: 20%

---
- name: test
  hosts: all
  serial: 2
  gather_facts: no
  tasks:
    - name: task 1
      shell: sleep 3

滚动更新示例:


异步并行模式:

 

 示例:

---
- name:
  hosts:
  tasks:
    - name: connection
      shell:
      async: 5
      poll: 2

17.3wait_for模块

文件是否存在?
与file区别: 每隔30S测一次。
端口号是否打开?


17.4 async_status模块

  检测线程是否存在。2s测一次,最多30次,直到结束。

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

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

相关文章

玻纤效应对skew的影响(一)

在高速SerDes传输系统中,随着信号速率的提高,UI会越来越小,传输线的对内skew会越来越大。以PCIe信号来说,PCIe4.0速率的一个UI是62.5ps,当速率提高到PCIe5.0时,每个UI就只有31.25ps,更进一步&am…

SparkSQL源码分析系列01-Catalyst作用

SparkSQL 是如何将SQL语句转化为Spark任务的呢? 详细过程如下图 通过拉去 github 的 Spark 源码,查看 SparkSQL 模块的 readme.txt 文件可以看出,SparkSQL 包含4个方面的内容 SparkSQL源码主要包含4大模块 Catalyst (sql/catalyst)&…

Solidity之为什么 ++i 比 i++ 省gas

文章目录为什么 i 比 i 省gas测试验证demo1demo2为什么 i 比 i 省gas为什么 i 比 i 省gas i通常更昂贵,因为它必须增加一个值并“返回”旧值,因此可能需要在内存中保存两个数字我在记忆中只使用过一个数字。在许多情况下,在编译器优化之后&a…

【SVM】简单介绍(四)

1、Soft Margin SVM 对偶求解 构造拉格朗日函数 L12∥w∥2C∑i1nξi−∑i1nαi(yi(wTxib)−1ξi)−∑i1nγiξiαi≥0γi≥0\begin{aligned} & L\frac{1}{2}\|w\|^2C \sum_{i1}^n \xi_i-\sum_{i1}^n \alpha_i\left(y_i\left(w^T x_ib\right)-1\xi_i\right)-\sum_{i1}^n \ga…

dagum基尼系数分析全流程

Dagum系数分析 Dagum基尼系数是传统基尼gini系数的升级,其可分解为组内系数、组间系数和超变密度系数,即Dagum 组内Gw 组间Gb 超变密度Gt。 组内Gw分别反映各地区内部水平的差距、组间Gb反映各地区之间水平的差距,以及超变密度Gt反映各地区…

Strtus2漏洞 - Struts2-052 Struts2-057 Struts2-059

文章目录S2-052(CVE-2017-9805)环境搭建漏洞复现S2-057(CVE-2018-11776)环境搭建漏洞复现S2-059(CVE-2019-0230)环境搭建漏洞复现S2-052(CVE-2017-9805) 原理:Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序…

为什么说DeFi隐私协议Unijoin.io具备趋势性

区块链技术以点对点、去中心化、公开透明、不可逆等作为其主要特点,而基于区块链的加密货币原生的具备了区块链技术的种种特性,这意味着通常每一笔链上交易都是透明可查的。虽然加密账户以“伪匿名”作为主要特点,但我们也同样看到&#xff0…

强大的ANTLR4(1)

以前对于《编译原理》这门课有一种恐惧,现在强大的工具越来越多,有些原理并不一定要非常清楚,也是可以设计一种编程语言的,那就是ANTLR4。 Antlr4(全名:ANother Tool for Language Recognition&#xff09…

Redis集群系列六 —— 分片集群搭建

Redis 常用集群中,常用的几种集群方案有:主从集群、哨兵集群、分片集群,不同的集群对应着不同的场景,并且各种集群也都有不同的优劣,本篇将以 redis 分片集群为切入点。 主从和哨兵虽然解决了高可用、高并发读的问题&…

spring之IoC注解(二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Spring注解的使用1、加入aop的依赖2、在配置文件中添加context命名空间3、在配置文件中指定扫描的包4、在Bean类上使用注解二、Bean的选择性实例化1、需求2、…

二十三种设计模式--系列篇(一)

一、软件设计模式的产生背景 “设计模式”最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(Christopher Alexander)在他的著作《…

(五)devops持续集成开发——jenkins发布一个maven流水线项目

前言 本节内容使用jenkins的maven流水线组件发布一个springboot项目,实现自动化部署一个后端项目。在开始流水化部署前我们需要准备好一个git项目,并在jenkins所在的服务器安装好git客户端便于源码的拉取。并且需要安装一个ssh插件,将我们的…

C++学习:多态与运算符(Day.7~)

总结让人明白。 表明覆盖意图的限定符 override 如图: 说明:1.使用关键字const后,由于函数特征不同,派生类不会再隐藏基类方法 2.想要覆盖基类方法可使用关键字override,此关键字会强制覆盖基类方法,若…

微信功能,你知道多少

用了微信很多年,选择才发现微信收藏的正确打开方式!感觉之前白用了那么久微信收藏,只用来保存消息实在是太可惜了,原来它还有那么多实用功能!协助日常安排如果每天需要做的事情比较多,可以在这里记录日常工…

谷粒商城之高级篇知识补充

谷粒商城高级篇之知识补充 前言 本篇主要是完成谷粒商城高级篇开发时,我们需要了解并学习一部分补充的知识,才能更好的完成商城业务。 以后我们将商城任务和额外知识分开来编写,方便商城业务的连贯性。 下面是本篇文章各个章节对应的相应…

Apollo星火计划学习笔记——Apollo速度规划算法原理与实践

文章目录1. 速度规划算法总体介绍1.2 不同场景下的ST图1.2.1 主车向前匀速行驶1.2.2 主车先向前匀速行驶,后停车1.2.3 主车跟随前车行驶1.2.4 主车跟随前车刹停1.2.5 障碍车在主车后方跟行1.3 速度规划算法整体流程1.3.1 Task: SPEED_BOUNDS_PRIORI_DECI…

数据结构-堆

1、什么是堆 堆是一种满足以下条件的树:堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。 2、堆的用途 当我们只关心所有数据中的最大值或者最小值,存在多次获取最大值或者最小值,多次插入或删除数据时&…

ArrayList与顺序表(一)

目录 1.线性表 2.顺序表 2.1接口的实现 3.ArrayList的简介 4.ArrayList使用 4.1ArrayList的构造 4.2ArrayList常见的操作 4.3ArrayList的遍历 4.4ArrayList的扩容机制 5.模拟实现一个ArrayList 1.线性表 线性表:是n个具有相同特性的数据元素的有限序列。线性…

[思考进阶]04 优秀的人,都在使用“微习惯”

除了要提升自己的技术能力,思维的学习和成长也非常非常重要,特推出此[思考进阶]系列,进行刻意练习,从而提升自己的认知。 我有个微信群,人很少,都是兄弟,每天打开电脑的时候,我都会有…

朴素贝叶斯分类的python的实现

文章目录介绍GaussianNB()参数介绍实例BernoulliNB()参数介绍实例MultinomialNB()参数介绍实例作者:王乐介绍 sklearn 是 scikit–learn 的简称,是一个基于 Python 的第三方模块。 sklearn 库集成了一些常用的机器学习方法,在进行机器学习任务时,并不需要实现算法,…