当前位置: 首页 > news >正文

厦门市网站建设软件开发公司/搜索自媒体平台

厦门市网站建设软件开发公司,搜索自媒体平台,百度有没有做游戏下载网站,河南省建设注册中心网站Ansible playbook自动化运维工具详解 一、playbook的相关知识1.1、playbook 的简介1.2、playbook的 各部分组成 二、基础的playbook剧本编写实例三、 playbook的定义、引用变量3.1、基础变量的定义与引用3.2、引用fact信息中的变量 四、playbook中的when条件判断和变量循环使用…

Ansible playbook自动化运维工具详解

  • 一、playbook的相关知识
    • 1.1、playbook 的简介
    • 1.2、playbook的 各部分组成
  • 二、基础的playbook剧本编写实例
  • 三、 playbook的定义、引用变量
    • 3.1、基础变量的定义与引用
    • 3.2、引用fact信息中的变量
  • 四、playbook中的when条件判断和变量循环使用
    • 4.1、when条件判断
    • 4.2、变量循环
  • 五、Templates 模块
    • cd /etc/ansible #在ansible的所在目录中创建该项目的目录 mkdir apache vim apache.yaml
    • vim nginx.yaml
    • vim test1.yaml
    • vim test2.yaml
    • vim test3.yaml
    • vim test3.yaml
    • 4.2 变量循环 (1)with_item 单循环输出 vim test4.yaml
    • vim test4.yaml
    • (2) with_list 每组列表一起循环的输出
    • (3) with_together 同一列表位置数据组合输出的循环
    • (4) with_nested 列表数据循环匹配的循环(根据列表个数定义有多少层的循环)
  • 五、Templates 模块
  • 六、Tags
    • 6.1 单标签的使用
    • 6.2、多标签的运用
    • 6.3、通用标签always的运用

一、playbook的相关知识

1.1、playbook 的简介

  • playbook是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。
  • 简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。
  • Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。我们完成一个任务,例如安装部署一个httpd服务,我们需要多个模块(一个模块也可以称之为task)提供功能来完成。
  • 而playbook就是组织多个task的容器,他的实质就是一个文件,有着特定的组织格式,它采用的语法格式是YAML(Yet Another Markup Language)。

1.2、playbook的 各部分组成

  • Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行
  • Variables:变量
  • Templates:模板
  • Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作
  • Roles:角色

二、基础的playbook剧本编写实例

playbook中运用的模块就是ansible中的模块,就像docker-compose一样将docker操作容器的指令归纳为一个yaml文件,开启运行yaml中的指令模块就能按照预设计的方向去完成。

实例1:playbook编写 apache的yum安装部署剧本

剧本编写实现的需求:对Ansible管理的所有的webservers组的成员,yum安装最新版本的apache服务软件,并进行相应环境的调整,确保webservers的apache服务能够正常运行并设置开机自启 
cd /etc/ansible    #在ansible的所在目录中创建该项目的目录
mkdir apache
vim apache.yaml
---
- name: apache yum applygather_facts: falsehosts: webserversremote_user: roottasks:- name: test connectionping:- name: stop firewalldservice: name=firewalld state=stopped- name: stop selinuxcommand: '/usr/sbin/setenforce 0'ignore_errors: true- name: yum install apache serviceyum: name=httpd state=latest- name: start apache serviceservice: name=httpd state=started enabled=yes

在这里插入图片描述
运行剧本的方法:

//运行playbook
ansible-playbook apache.yaml//补充参数:
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码
-u:指定用户
ansible-playbook apache.yaml --syntax-check    #检查yaml文件的语法是否正确
ansible-playbook apache.yaml --list-task       #检查tasks任务
ansible-playbook apache.yaml --list-hosts      #检查生效的主机
ansible-playbook apache.yaml --start-at-task='install httpd'     #指定从某个task开始运行

在这里插入图片描述
在这里插入图片描述
实例2:playbook编写nginx 的yum安装并且能修改其监听端口的剧本

需求:通过yum安装nginx服务,并且能够控制被管理的主机的服务的开启,按照预设的配置在运行时的端口。在编写剧本前,需要准备相应的两个文件,一个为nginx的yum源。一个为相对应的主配置文件,在主配置文件中修改其端口,在将该配置移至被管理主机中,作为运行启动时的默认配置 

在这里插入图片描述
在这里插入图片描述
剧本编写:

mkdir /etc/ansible/nginxvim nginx.yaml 
---
- name: nginx scriptgather_facts: falsehosts: webserversremote_user: roottasks:- name: test connectionping:- name: stop firewalldservice: name=firewalld state=stopped enabled=no- name: stop selinuxcommand: '/usr/sbin/setenforce 0'ignore_errors: true- name: prepare nginx repocopy: src=/etc/ansible/nginx/nginx.repo dest=/etc/yum.repos.d/nginx.repo- name: install nginxyum: name=nginx state=latest- name: change portcopy: src=/opt/default.conf dest=/etc/nginx/conf.d/default.confnotify: "restart nginx"- name: start nginxservice: name=nginx state=started enabled=yeshandlers:- name: restart nginxservice: name=nginx state=restarted

在这里插入图片描述
运行结果:

在这里插入图片描述

在这里插入图片描述

三、 playbook的定义、引用变量

3.1、基础变量的定义与引用

在yaml文件中,我们可以在初始配置的模块中用var去定义变量的存在,变量的格式为key:value,以此来确定该变量在剧本中的存在
vim test1.yaml
---
- name: this is a play for testing variableshosts: dbserversremote_user: rootvars:filename: abc.txttasks:- name: touch a test filefile: path=/opt/{{filename}} state=touchansible-playbook test1.yaml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2、引用fact信息中的变量

首先我们知道  使用 ansible   -m setup   可以收集该组中所有的节点信息 所以setup中fact'信息,有时候会剧本编写中需要,而fact的信息也是可以通过变量的方式进行调用

在这里插入图片描述
剧本编写:

vim test2.yaml
---
- name: this is a playbook for quote variatehosts: dbserversremote_user: roottasks:- name: reading setup fact variatedebug: msg={{ansible_date_time.weekday}}
~                                                 

在这里插入图片描述
运行的结果:
在这里插入图片描述

四、playbook中的when条件判断和变量循环使用

4.1、when条件判断

#选用filter=ansible_default_ipv4中的address作为when条件进行测试
ansible all -m setup -a 'filter=ansible_default_ipv4'

在这里插入图片描述
测试剧本编写:

vim test3.yaml
---
- name: this is when test playbookhosts: allremote_user: roottasks:- name: test whendebug: msg='判断位置'when: ansible_default_ipv4.address == "192.168.73.107"ansible-playbook test3.yaml

在这里插入图片描述

4.2、变量循环

with_item 单循环输出
vim test4.yaml
---
- name: item testhosts: dbserversremote_user: rootgather_facts: notasks:- debug:msg: "{{item}}"with_items: [a, b, c, d]ansible-playbook test4.yaml

在这里插入图片描述

   with_list  每组列表一起循环的输出
---
- name: item testhosts: dbserversremote_user: rootgather_facts: notasks:- debug:msg: "{{item}}"with_list:- [a, b, c, d]- [1 ,2, 3, 4]
~                                                                                                                                           
~                            

在这里插入图片描述

with_together 同一列表位置数据组合输出的循环
---
- name: item testhosts: dbserversremote_user: rootgather_facts: notasks:- debug:msg: "{{item}}"with_together:- [a, b, c, d]- [1 ,2, 3, 4]
~                        

在这里插入图片描述

with_nested 列表数据循环匹配的循环(根据列表个数定义有多少层的循环)
---
- name: item testhosts: dbserversremote_user: rootgather_facts: notasks:- debug:msg: "{{item}}"with_nested:- [a, b, c, d]- [1 ,2, 3, 4]
~                      

在这里插入图片描述

四种迭代循环方式的总结
  • whith_items: {{item}}会把所有的列表展开进行遍历输出,with_flattened也可以替代with_items

  • with_list: {{item}}会把每个列表当作一个整体输出。如果每个列表中只有一个值,则效果与with items一致。loop也可以替代ith

  • with_together: {{item}}引用时会把每个列表相同位置的值对齐合并后输出

  • with nested:{ {item}}引用时会把每个列表的值两两组合循环输出

五、Templates 模块

linux自动化运维
同时被 2 个专栏收录
8 篇文章1 订阅
订阅专栏

Linux软件使用
10 篇文章1 订阅
订阅专栏
内容预知
目录

内容预知

1.playbook的相关知识

1.1 playbook 的简介

1.2 playbook的 各部分组成

  1. 基础的playbook剧本编写实例

实例1:playbook编写 apache的yum安装部署剧本

实例2:playbook编写nginx 的yum安装并且能修改其监听端口的剧本

  1. playbook的定义、引用变量

3.1 基础变量的定义与引用

3.2 引用fact信息中的变量

  1. playbook中的when条件判断和变量循环使用

4.1 when条件判断

4.2 变量循环

(1)with_item 单循环输出

(2) with_list 每组列表一起循环的输出

(3) with_together 同一列表位置数据组合输出的循环

(4) with_nested 列表数据循环匹配的循环(根据列表个数定义有多少层的循环)

四种迭代循环方式的总结

  1. Templates 模块

(1)先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量

(2) 修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

(3) 编写 playbook

  1. Tags

6.1 单标签的使用

6.2 多标签的运用

6.3 通用标签always的运用

  1. roles

1.playbook的相关知识
1.1 playbook 的简介
playbook是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。我们完成一个任务,例如安装部署一个httpd服务,我们需要多个模块(一个模块也可以称之为task)提供功能来完成。而playbook就是组织多个task的容器,他的实质就是一个文件,有着特定的组织格式,它采用的语法格式是YAML(Yet Another Markup Language)。

对于YAML文件格式的编写,我在之前的博客就有所介绍:

【云原生】Docker-compose单机容器集群编排_站在这别动,我去给你买橘子的博客-CSDN博客
https://blog.csdn.net/qq_62462797/article/details/128052363?spm=1001.2014.3001.5501

1.2 playbook的 各部分组成
(1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行
(2)Variables:变量
(3)Templates:模板
(4)Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作
(5)Roles:角色

  1. 基础的playbook剧本编写实例
    playbook中运用的模块就是ansible中的模块,就像docker-compose一样将docker操作容器的指令归纳为一个yaml文件,开启运行yaml中的指令模块就能按照预设计的方向去完成。

实例1:playbook编写 apache的yum安装部署剧本
剧本编写实现的需求:对Ansible管理的所有的webservers组的成员,yum安装最新版本的apache服务软件,并进行相应环境的调整,确保webservers的apache服务能够正常运行并设置开机自启

cd /etc/ansible #在ansible的所在目录中创建该项目的目录
mkdir apache
vim apache.yaml

  • name: apache yum apply
    gather_facts: false
    hosts: webservers
    remote_user: root
    tasks:
    • name: test connection
      ping:

    • name: stop firewalld
      service: name=firewalld state=stopped

    • name: stop selinux
      command: ‘/usr/sbin/setenforce 0’
      ignore_errors: true

    • name: yum install apache service
      yum: name=httpd state=latest

    • name: start apache service
      service: name=httpd state=started enabled=yes

运行剧本的方法:

//运行playbook
ansible-playbook apache.yaml

//补充参数:
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码
-u:指定用户
ansible-playbook apache.yaml --syntax-check #检查yaml文件的语法是否正确
ansible-playbook apache.yaml --list-task #检查tasks任务
ansible-playbook apache.yaml --list-hosts #检查生效的主机
ansible-playbook apache.yaml --start-at-task=‘install httpd’ #指定从某个task开始运行

实例2:playbook编写nginx 的yum安装并且能修改其监听端口的剧本
需求:通过yum安装nginx服务,并且能够控制被管理的主机的服务的开启,按照预设的配置在运行时的端口。

在编写剧本前,需要准备相应的两个文件,一个为nginx的yum源。一个为相对应的主配置文件,在主配置文件中修改其端口,在将该配置移至被管理主机中,作为运行启动时的默认配置

剧本编写:

mkdir /etc/ansible/nginx

vim nginx.yaml

  • name: nginx script
    gather_facts: false
    hosts: webservers
    remote_user: root
    tasks:

    • name: test connection
      ping:

    • name: stop firewalld
      service: name=firewalld state=stopped enabled=no

    • name: stop selinux
      command: ‘/usr/sbin/setenforce 0’
      ignore_errors: true

    • name: prepare nginx repo
      copy: src=/etc/ansible/nginx/nginx.repo dest=/etc/yum.repos.d/nginx.repo

    • name: install nginx
      yum: name=nginx state=latest

    • name: change port
      copy: src=/opt/default.conf dest=/etc/nginx/conf.d/default.conf
      notify: “restart nginx”

    • name: start nginx
      service: name=nginx state=started enabled=yes

    handlers:

    • name: restart nginx
      service: name=nginx state=restarted

运行结果:

  1. playbook的定义、引用变量
    3.1 基础变量的定义与引用
    在yaml文件中,我们可以在初始配置的模块中用var去定义变量的存在,变量的格式为key:value,以此来确定该变量在剧本中的存在

vim test1.yaml

  • name: this is a play for testing variables
    hosts: dbservers
    remote_user: root
    vars:
    filename: abc.txt
    tasks:
    • name: touch a test file
      file: path=/opt/{{filename}} state=touch

ansible-playbook test1.yaml

3.2 引用fact信息中的变量
首先我们知道 使用 ansible 组 -m setup 可以收集该组中所有的节点信息 ,

所以setup中fact’信息,有时候会剧本编写中需要,而fact的信息也是可以通过变量的方式进行调用

剧本编写:

vim test2.yaml

  • name: this is a playbook for quote variate
    hosts: dbservers
    remote_user: root
    tasks:
    • name: reading setup fact variate
      debug: msg={{ansible_date_time.weekday}}
      ~

运行的结果:

  1. playbook中的when条件判断和变量循环使用
    4.1 when条件判断
    #选用filter=ansible_default_ipv4中的address作为when条件进行测试
    ansible all -m setup -a ‘filter=ansible_default_ipv4’

测试剧本编写:

vim test3.yaml

  • name: this is when test playbook
    hosts: all
    remote_user: root
    tasks:
    • name: test when
      debug: msg=‘判断位置’
      when: ansible_default_ipv4.address == “192.168.73.107”

ansible-playbook test3.yaml

除此之外 when条件还可以通过 !=(不等于条件来进行判断)

vim test3.yaml

  • name: this is when test playbook
    hosts: all
    remote_user: root
    tasks:
    • name: test when
      debug: msg=‘判断位置’
      when: ansible_default_ipv4.address != “192.168.73.107”
      ansible-playbook test3.yaml

4.2 变量循环
(1)with_item 单循环输出
vim test4.yaml

  • name: item test
    hosts: dbservers
    remote_user: root
    gather_facts: no
    tasks:
    • debug:
      msg: “{{item}}”
      with_items: [a, b, c, d]

ansible-playbook test4.yaml

当列表为两个时。with_item的输出方式:

vim test4.yaml

  • name: item test
    hosts: dbservers
    remote_user: root
    gather_facts: no
    tasks:
    • debug:
      msg: “{{item}}”
      with_items:
      • [a, b, c, d]
      • [1 ,2, 3, 4]
        ansible-playbook test4.yaml

(2) with_list 每组列表一起循环的输出

  • name: item test
    hosts: dbservers
    remote_user: root
    gather_facts: no
    tasks:
    • debug:
      msg: “{{item}}”
      with_list:
      • [a, b, c, d]
      • [1 ,2, 3, 4]
        ~
        ~

(3) with_together 同一列表位置数据组合输出的循环

  • name: item test
    hosts: dbservers
    remote_user: root
    gather_facts: no
    tasks:
    • debug:
      msg: “{{item}}”
      with_together:
      • [a, b, c, d]
      • [1 ,2, 3, 4]
        ~

  • name: item test
    hosts: dbservers
    remote_user: root
    gather_facts: no
    tasks:
    • debug:
      msg: “{{item}}”
      with_together:
      • [a, b, c, d]
      • [1 ,2, 3, 4]
      • [A, B, C]

(4) with_nested 列表数据循环匹配的循环(根据列表个数定义有多少层的循环)

  • name: item test
    hosts: dbservers
    remote_user: root
    gather_facts: no
    tasks:
    • debug:
      msg: “{{item}}”
      with_nested:
      • [a, b, c, d]
      • [1 ,2, 3, 4]
        ~

四种迭代循环方式的总结
whith_items: {{item}}会把所有的列表展开进行遍历输出,with_flattened也可以替代with_items

with_list: {{item}}会把每个列表当作一个整体输出。如果每个列表中只有一个值,则效果与with items一致。loop也可以替代ith

with_together: {{item}}引用时会把每个列表相同位置的值对齐合并后输出

with nested:{ {item}}引用时会把每个列表的值两两组合循环输出

五、Templates 模块

  • Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。

  • 本次我们以改变apche的配置文件为例,来展现Templates模块的运用

     先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量 
    
#如果没有相关的httpd的配置文件,可以先yum按住一个httpd的服务,取其主配置文件
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2vim /opt/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改
修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量
vim /etc/ansible/hosts       
[webservers]
192.168.73.106 http_port=192.168.73.106:80 server_name=www.test1.com:80 root_dir=/etc/httpd/htdocs[dbservers]
192.168.73.107 http_port=192.168.73.107:80 server_name=www.test2.com:80 root_dir=/etc/httpd/htdocs

在这里插入图片描述

  此外如果没有做DNS解析域名,还需要对主机名进行映射 :
vim /etc/hosts192.168.73.106 www.test1.com
192.168.73.107 www.test2.com
编写 playbook 
mkdir /etc/ansible/templates
vim apache.yaml
---
- hosts: allremote_user: rootvars:- package: httpd- service: httpdtasks:- name: install httpd packageyum: name={{package}} state=latest- name: install configure filetemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify:- restart httpd- name: create root dirfile: path=/etc/httpd/htdocs state=directory- name: start httpd serverservice: name={{service}} enabled=true state=startedhandlers:- name: restart httpdservice: name={{service}} state=restartedansiable-playbook apache.yaml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、Tags

  • 可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用–tags选项能实现仅运行指定的tasks。
  • playbook还提供了一个特殊的tags为always。作用就是当使用always作为tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。

6.1 单标签的使用

vim test1.yaml
---
- name: this is a play for testing variableshosts: dbserversremote_user: rootvars:filename: abc.txttasks:- name: position 1debug:msg: 'ls /opt'tags:- only- name: position 2debug:msg: 'ls /mnt'ansible-playbook test1.yaml --tags="only"

在这里插入图片描述

6.2、多标签的运用

---
- name: this is a play for testing variableshosts: dbserversremote_user: rootvars:filename: abc.txttasks:- name: position 1debug:msg: '测试标签1'tags:- one- name: position 2debug:msg: '测试标签2'tags:- two- name: position 3debug:msg: '测试标签3'tags:- one

在这里插入图片描述
执行结果:

在这里插入图片描述

6.3、通用标签always的运用

---
- name: this is a play for testing variableshosts: dbserversremote_user: rootvars:filename: abc.txttasks:- name: position 1debug:msg: '测试标签1'tags:- one- name: position 2debug:msg: '测试通用标签always'tags:- always- name: position 3debug:msg: '测试标签3'tags:- one

在这里插入图片描述
执行结果:
在这里插入图片描述

相关文章:

Ansible playbook自动化运维工具详解

Ansible playbook自动化运维工具详解 一、playbook的相关知识1.1、playbook 的简介1.2、playbook的 各部分组成 二、基础的playbook剧本编写实例三、 playbook的定义、引用变量3.1、基础变量的定义与引用3.2、引用fact信息中的变量 四、playbook中的when条件判断和变量循环使用…...

图像切分:将一张长图片切分为指定长宽的多张图片

1.需求 比如有一张很长的图片其大小为宽度779,高度为122552,那我想把图片切分为779乘以1280的格式。 步骤如下: 使用图像处理库(如PIL或OpenCV)加载原始图片。确定子图片的宽度和高度。计算原始图片的宽度和高度&am…...

ROS学习笔记(5):ros_control

1.ros_control简介 ros_control - ROS Wiki ros_control是为ROS提供的机器人控制包,包含一系列控制器接口、传动装置接口、控制器工具箱等,有效帮助机器人应用功能包快速落地,提高开发效率。 2.ros_control框架 ros_control总体框架: 针对…...

《008.Springboot+vue之自习室选座系统》

[火]《008.Springbootvue之自习室选座系统》 项目简介 [1]本系统涉及到的技术主要如下: 推荐环境配置:DEA jdk1.8 Maven MySQL 前后端分离; 后台:SpringBootMybatisredis; 前台:vueElementUI; [2]功能模块展示: 前端…...

道可云元宇宙每日资讯|5G数智新时代元宇宙发展论坛在厦门举办

道可云元宇宙每日简报(2023年11月6日)讯,今日元宇宙新鲜事有: 5G数智新时代元宇宙发展论坛在厦门举办 3日,由2023年中国金鸡百花电影节执委会主办、厦门电影节有限公司协办的“5G数智新时代元宇宙发展论坛暨‘中国白德…...

使用 Go 写入文件

在本教程中,我们将学习如何使用 Go 将数据写入文件。我们还将学习如何同时写入文件。 本教程有以下部分 将字符串写入文件将字节写入文件逐行将数据写入文件附加到文件同时写入文件 由于 Playground 不支持文件操作,请在本地系统中运行本教程的所有程…...

调用DeleteLocalRef的正确姿势

做安卓jni相关开发的总会在涉及到jni变量释放时怀疑人生,what? where? when? who? why? how? how much? 最近碰到一个比较奇怪的问题,有一个jni方法的耗时在随着调用次数的增加而上涨,但是没有明显的内存泄漏,经过我缜密分…...

抖音小店从0到1起店流程,实操经验分享!

我是电商珠珠 很多人在开店之后,并不知道怎么做。往往会有人跑来问我说,开店之后怎么做啊,流程方面我还不是很熟悉啊等等。 这份起店流程备好了,将来对你有用。 第一步,店铺基础设置 在店铺开好之后,不…...

MySQL权限

权限 MySQL 允许客户端用户连接到服务器并访问服务器管理数据,MySQL 用户权限系统的主要功能是对给定主机连接的用户进行身份验证,并将该用户与数据库的权限相关联。 在 MySQL8 之前,授权表使用 MyISAM 并且是非事务性的,在 MyS…...

Nginx服务器安装证书并启用SSL(acme.sh)

前提 您已购置vps服务器,例如阿里云全球站ecs、AWS EC2、Azure VM、GCP Compute等安全组已开启80、443端口,且访问源设置为0.0.0.0/0域名已设置A记录指向当前操作服务器,若您使用aws ec2,有公有 IPv4 DNS,可供使用 安…...

c++实现观察者模式

前言 我觉得这是最有意思的模式&#xff0c;其中一个动&#xff0c;另外的自动跟着动。发布-订阅&#xff0c;我觉得很巧妙。 代码 头文件 #pragma once #include<vector> #include<string> #include<iostream>// 抽象观察者 class Aobserver { public:v…...

C 语言左移位操作在kernel驱动子系统中的特殊用途

文章目录 前言一、C语言左移位操作介绍1. 左移位二、左移位操作在kernel 驱动子系统中的应用1. 左移位操作在 V4L2, Media 子系统中的应用实例2.左移位操作在 DRM 子系统中的应用实例2.1 左移位操作在struct drm_crtc 中的应用2.2 左移位操作在struct drm_encoder 中的应用总结…...

kafka3.6.0集群部署

环境准备 机器环境 系统主机名IP地址centos7.9kafka01192.168.200.51centos7.9kafka02192.168.200.52centos7.9kafka03192.168.200.53 所需软件 jdk-8u171-linux-x64.tar.gzapache-zookeeper-3.8.3-bin.tar.gz https://dlcdn.apache.org/zookeeper/zookeeper-3.8.3/apache-zook…...

JAVA客户端使用账号密码调用influxdb2报错:{“code“:“unauthorized“,“message“:“Unauthorized“}

问题&#xff1a;JAVA客户端访问influxdb2报错 说明&#xff1a;当前influxdb版本&#xff1a;2.6.1 使用依赖&#xff1a; <dependency><groupId>org.influxdb</groupId><artifactId>influxdb-java</artifactId><version>2.10</vers…...

Mysql查询今天到期、n天即将到期、还有n天过期相关sql

超级治愈的一段话 其实你已经很幸福了,吃饱穿暖,没病没灾,隔三岔五还能吃顿好的,偶尔还能睡到自然醒,肥嘟嘟的一身福气。人这一辈子,要是能够逃过天灾,躲过战乱,不遇歹人,不生大病,就已经是非常幸运了,要是还能家庭和谐,收人稳定,三五知己,那更是天大的福泽。 -…...

【漏洞复现】Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 1.5、深度利用1、反弹Shell 说明内容漏洞编号CVE-2017-5645漏洞名称Log4j Server …...

【江协科技-用0.96寸OLED播放知名艺人打篮球视频】

Python进行视频图像处理&#xff0c;通过串口发送给stm32&#xff0c;stm32接收数据&#xff0c;刷新OLED进行显示。 步骤&#xff1a; 1.按照接线图连接好硬件 2.把Keil工程的代码下载到STM32中 3.运行Python代码&#xff0c;通过串口把处理后的数据发送给STM32进行显示 …...

CATIA环境编辑器用不了时创建项目快捷方式

CATIA环境编辑器用不了时创建项目快捷方式 一、参考适用情况示例二、 解决步骤(一) 先正确放置winb_64部署包(二) 添加环境文件(三) 修改加入的环境文件(四) 复制本机CATIA快捷方式后重命名(五) 修改快捷方式目标的值 一、参考适用情况示例 二、 解决步骤 (一) 先正确放置winb…...

java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和通配符 泛型类练习

文章目录 泛型的深入泛型还可以在很多地方进行定义泛型类泛型方法泛型接口 泛型的继承和通配符泛型类练习总结 泛型的深入 public static void main(String[] args) {//在没有泛型的时候怎么存储数据ArrayList listnew ArrayList();list.add(1);list.add("abc");//遍…...

持续交付的好处

在软件领域&#xff0c;持续交付就是这样一种开发实践&#xff0c;它为所有利益相关者带来好处&#xff1a;开发、运营、测试人员和业务团队。持续交付适用于每个由软件驱动的组织&#xff1b;很难想象企业不使用软件。 它使人们受益&#xff0c;并需要人们做出改变才能更好地…...

APP开发:用途与未来前景|软件定制开发|网站小程序建设

APP开发&#xff1a;用途与未来前景|软件定制开发|网站小程序建设 APP开发已成为现代科技趋势的一部分&#xff0c;无论是日常生活还是商业领域&#xff0c;都有它的身影。通过开发APP&#xff0c;我们可以将想法、功能和内容转化为直观、易用的移动设备应用程序&#xff0c;满…...

图论——并查集

参考内容&#xff1a; 图论——并查集(详细版) 并查集&#xff08;Disjoint-set&#xff09;是一种精巧的树形数据结构&#xff0c;它主要用于处理一些不相交集合的合并及查询问题。一些常见用途&#xff0c;比如求联通子图、求最小生成树的 Kruskal 算法和求最近公共祖先&…...

计算机毕业设计java+vue+springboot的论坛信息网站

项目介绍 本论文系统地描绘了整个网上论坛管理系统的设计与实现&#xff0c;主要实现的功能有以下几点&#xff1a;管理员&#xff1b;首页、个人中心、用户管理、公告管理、公告类型管理、热门帖子管理、帖子分类管理、留言板管理、论坛新天地、我的收藏管理、系统管理&#…...

.net core添加SQL日志输出

GreDbContext : Microsoft.EntityFrameworkCore.DbContext 下添加 public static readonly ILoggerFactory MyLoggerFactory LoggerFactory.Create(builder > { builder.AddConsole(); }); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder…...

虚幻5.1 常见的效果关闭方式

常见的虚幻效果关闭方式 1.Bloom ProjectSettings->Rendering->Default Settings->Bloom PostProcessVolume->Lens->Bloom 2.Ambient Occlusion/Screen Space Ambient Occlusion(SSAO) ProjectSettings->Rendering->Default Settings->Ambient Occl…...

每日一题 --- 力扣318----最大单词长度乘积

这道题时间复杂度我感觉设置的不是很好&#xff0c;应该最好是有一个1000变成10000就行。 因为我在做这道题的时候被误导了&#xff0c;以为双重循环暴力判断一下也能过&#xff0c;因为1000*1000 *26的时间复杂度没有到1亿&#xff0c;那么我刚开始认为是能过的&#xff0c;结…...

掌动智能性能压力测试优势有哪些

企业通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。本文将介绍性能压力测试的价值及主要优势! 一、性能压力测试的价值 1、评估系统能力&#xff1a;有助于参数的基准测试&#xff0c;可以度量系统的响应时间;还有助于检查系统是否可…...

虚拟机没有桥接模式--物理机WiFi不见了--注册表修复

我们知道虚拟机有三种模式&#xff1a; vmnet0 桥接模式&#xff1b;vmnet1 仅主机模式&#xff1b;vmnet8 NAT模式 我自己以前一直用的NAT模式&#xff0c;今天突然要用到桥接模式&#xff0c;发现无法切换... 我下面这个是后面弄好了的&#xff0c;最开始是没有显示桥接模式…...

【Python】批量下载素材酷视频资源

【需求】 做视频精彩需要用到梗图视频等,但是素材酷上面的视频没有搜索功能,每次用起来还要去下载也很麻烦,下载只能一个一个下载也很麻烦,下要搞一个能够批量下载的功能,然后把下载的资源全部放进万兴喵影编辑器的云空间,这样就可以做到随做随查随用了。 【效果】 目…...

QuantLib学习笔记——一个简单的价值估算案例

⭐️ 前言 QuantLib很强大&#xff0c;它实现了很多金融工具及其价值估算方法&#xff0c;从最简单的折现模型&#xff0c;到利用BSM模型对期权进行定价&#xff0c;覆盖面相当齐全。本文以一个简单的净现值估算案例&#xff0c;开启笔者金融工具估值的旅程。 开上豪车&#…...