Ansible自动化运维工具之playbook剧本编写

2023-11-15

 内容预知

目录

 内容预知

 1.playbook的相关知识

1.1 playbook 的简介 

1.2 playbook的 各部分组成

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

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

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

 3. playbook的定义、引用变量

 3.1 基础变量的定义与引用

3.2 引用fact信息中的变量 

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

 4.1 when条件判断

4.2 变量循环

  (1)with_item 单循环输出

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

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

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

四种迭代循环方式的总结

 5. Templates 模块

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

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

(3) 编写 playbook 

 6. Tags

6.1 单标签的使用

6.2 多标签的运用

6.3 通用标签always的运用 

 7. 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:角色

 

 2. 基础的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

 

运行结果:

 

 

 3. 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}}
~                                                 

运行的结果:
 

 4. 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}}引用时会把每个列表的值两两组合循环输出

 5. Templates 模块

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

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

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

#如果没有相关的httpd的配置文件,可以先yum按住一个httpd的服务,取其主配置文件
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

vim /opt/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改

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

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/hosts

192.168.73.106 www.test1.com
192.168.73.107 www.test2.com

(3) 编写 playbook 

mkdir /etc/ansible/templates
vim apache.yaml
---
- hosts: all
  remote_user: root
  vars:
    - package: httpd
    - service: httpd
  tasks:
    - name: install httpd package
      yum: name={{package}} state=latest
    - name: install configure file
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify:
        - restart httpd
    - name: create root dir
      file: path=/etc/httpd/htdocs state=directory
    - name: start httpd server
      service: name={{service}} enabled=true state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted


ansiable-playbook apache.yaml

 

 

 

 6. 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 variables
  hosts: dbservers
  remote_user: root
  vars:
   filename: abc.txt
  tasks:
   - name: position 1
     debug:
       msg: 'ls /opt'
     tags:
      - only
   - name: position 2
     debug:
       msg: 'ls /mnt'

ansible-playbook test1.yaml --tags="only"

6.2 多标签的运用

---
- name: this is a play for testing variables
  hosts: dbservers
  remote_user: root
  vars:
   filename: abc.txt
  tasks:
   - name: position 1
     debug:
       msg: '测试标签1'
     tags:
      - one
   - name: position 2
     debug:
       msg: '测试标签2'
     tags:
      - two

   - name: position 3
     debug:
       msg: '测试标签3'
     tags:
      - one

执行结果:

 

6.3 通用标签always的运用 

---
- name: this is a play for testing variables
  hosts: dbservers
  remote_user: root
  vars:
   filename: abc.txt
  tasks:
   - name: position 1
     debug:
       msg: '测试标签1'
     tags:
      - one
   - name: position 2
     debug:
       msg: '测试通用标签always'
     tags:
      - always

   - name: position 3
     debug:
       msg: '测试标签3'
     tags:
      - one

 

执行结果:

 

 7. roles

  • Roles又称为角色,playbook被称为剧本。Roles角色是自1.2版本之后引入的新特性,用于层次性、结构化的组织剧本
     
  • roles能够根据层次型结构自动装载变量文件、任务集、以及触发的动作等,要使用roles只需要在剧本中使用include命令引入即可
  • 简单的来说,roles就是分别将变量、文件、任务、模板以及处理器放置于不同的单独的目录,并且可以便捷的通过include引入
  • 角色一般用于基于主机构建的服务的场景中,但是也可以是用于构建守护进程等场景中,主要是使用在代码复用度较高的场景下

●files
用来存放由 copy 模块或 script 模块调用的文件。

●templates
用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。

●tasks
此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。

●handlers
此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。

●vars
此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。

●defaults
此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。

●meta
此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。

 

集中式lamp的简单role编写过程:

//在一个 playbook 中使用 roles 的步骤:
(1)创建以 roles 命名的目录
mkdir /etc/ansible/roles/ -p    #yum装完默认就有

(2)创建全局变量目录(可选)
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all     #文件名自己定义,引用的时候注意

(3)在 roles 目录中分别创建以各角色名称命名的目录,如 httpd、mysql
mkdir /etc/ansible/roles/httpd
mkdir /etc/ansible/roles/mysql

(4)在每个角色命名的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}

(5)在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

(6)修改 site.yml 文件,针对不同主机去调用不同的角色
vim /etc/ansible/site.yml
---
- hosts: webservers
  remote_user: root
  roles:
     - httpd
- hosts: dbservers
  remote_user: root
  roles:
     - mysql
	 
(7)运行 ansible-playbook
cd /etc/ansible
ansible-playbook site.yml


示例:
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

------编写httpd模块------
写一个简单的tasks/main.yml
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: install apache
  yum: name={{pkg}} state=latest
- name: start apache
  service: enabled=true name={{svc}} state=started
 
//定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
svc: httpd

-------编写mysql模块-------
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: install mysql
  yum: name={{pkg}} state=latest
- name: start mysql
  service: enabled=true name={{svc}} state=started
  
vim /etc/ansible/roles/mysql/vars/main.yml
pkg:
  - mariadb
  - mariadb-server
svc: mariadb

-------编写php模块-----
vim /etc/ansible/roles/php/tasks/main.yml
- name: install php
  yum: name={{pkg}} state=latest
- name: start php-fpm
  service: enabled=true name={{svc}} state=started

vim /etc/ansible/roles/php/vars/main.yml
pkg:
  - php
  - php-fpm
svc: php-fpm

-----编写roles示例-----
vim /etc/ansible/site.yml
---
- hosts: webservers
  remote_user: root
  roles:
   - httpd
   - mysql
   - php


cd /etc/ansible
ansible-playbook site.yml




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible自动化运维工具之playbook剧本编写 的相关文章

  • 使用 Ansible“lineinfile”模块编辑 /etc/sudoers 是否安全?

    我想根据以下内容更改 sudo 会话超时this https superuser com a 149740 775166回答 我可以编辑普通文件 lineinfile path etc sudoers regexp Defaults env
  • Ansible:将命令参数作为列表传递

    我想将多个参数作为列表存储在变量中 vars my args verbose quiet verify 然后将列表作为带引号的参数传递给命令 最明显的是join过滤器没有按我的预期工作 它生成包含所有列表元素的单个单词 而不是每个列表元素一
  • 反向运行 Ansible 循环

    我正在编写一本 ansible playbook 在一次 play 中 我尝试使用我自己的模块 NodeModule 使用 UUID 删除一些节点 所有节点是一个包含节点 UUID 的列表 name Remove OSNs NodeModu
  • 在 Ansible 的字典列表中搜索键 [重复]

    这个问题在这里已经有答案了 我有一个类似于以下内容的字典列表 subnets name subnet1 name34554 address 192 168 1 100 id id1 name subnet2 name67678 addr 1
  • Ansible设置mysql root密码

    你们中有人有想法构建一个 yml 用于 mysql 更新 root 密码并授予权限吗 我已经创建了我的剧本 并且在全新安装时它按预期工作 完全没有问题 但是 当我再次进行 vagrant 配置时 它现在无法设置 root 密码 并且出现错误
  • 如果定义了 item,则 Ansible with_items

    安塞布尔 1 9 4 该脚本应该仅在定义了某些变量的主机上执行某些任务 正常情况下可以正常工作 但与with items陈述 debug var symlinks when symlinks is defined name Create o
  • 从 dict 列表中删除一个项目并分割 stdout_lines

    我试图从字典列表中删除一个项目 即 未找到结果 的项目 validar LPARNAME No results were found LPARNAME server1 server2 server4 LPARNAME server3
  • 如何防止 Ansible 对 JSON 重新排序?

    给定以下剧本 从随机数据中获取一些数据网络服务 http jsonplaceholder typicode com users name sorting json hosts localhost tasks name uri url htt
  • Ansible:全局模板文件夹?

    谷歌搜索找不到任何东西 有group vars 全部 对于变量 有类似的模板吗 我想在多个角色中使用一些模板 您可以将全局模板放入templatesAnsible 布局顶层目录 与group vars 顺便说一句 全局文件也是如此 file
  • Ansible Expect 模块无法匹配字符串/正则表达式脚本问题

    我正在尝试通过 Ansible 在 Vagrant 机器中自动安装脚本 我尝试了很多方法在网络上寻找解决方案 但文档和示例非常薄弱 我试图安装的脚本提示了我试图以编程方式回答的问题Ansible 期望模块 Ansible 任务 名称 运行
  • 在 ansible 角色中引用 defaults/main.yml 中的变量

    我的角色设置如下 角色 测试 任务 main yml name Generate people files template src test j2 dest tmp item name cfg loop people 角色 测试 模板 t
  • Ansible 手册:错误! “command”不是 Play 的有效属性[重复]

    这个问题在这里已经有答案了 我只是想写一个基本的剧本 并不断收到下面的错误 尝试了很多东西但仍然无法做到正确 我知道这一定是语法问题 但不知道在哪里 这是我的代码 This playbook runs a basic DF command
  • ansible安装node.js版本6

    要安装 Node 6 x 版本 请执行以下命令 curl sL https deb nodesource com setup 6 x sudo E bash sudo apt get install y nodejs 现在我到底该如何在an
  • 有条件地使用文件夹大小

    我只想在大小大于特定大小时删除文件夹 不幸的是我无法达到想要的结果stat module Attempt hosts pluto tasks stat path home ik thunderbird register folder nam
  • Ansible:即使成为 sudo 用户,也无法配置 sudo 命令

    testuser 是 sudo 用户 sudo cat etc sudoers d 90 cloud init testuser testuser ALL ALL NOPASSWD ALL 我可以手动登录 testuser 并在没有密码的情
  • 在 Ansible 中检查已安装的 yum 包/rpm 版本并使用它的最佳方法

    我已经在 CentOS 7 上尝试使用 Ansible 2 0 0 2 我试图从已安装的 rpm yum 软件包中获取版本 但在运行脚本时遇到警告消息 安塞布尔脚本 name Get version of RPM shell yum lis
  • 使用 Ansible 配置 EC2 实例时遇到问题

    我对如何使用 Ansible 启动 EC2 实例感到非常困惑 我正在尝试使用 ec2 py 库存脚本 我不确定应该使用哪一个 因为 Ansible 安装了三个 ansible lib ansible module utils ec2 py
  • Ansible 测试变量以什么开头

    我需要能够安装 MySQL 库 Python 有 1 个用于 v2 的包和另一个用于 v3 的包 我需要能够告诉 Ansible 要安装哪个包 name Ensure MySQL python is installed pip name M
  • 如何更改 ansible_default_ipv4?

    我想将 ansible default ipv4 更改为指向 eth1 而不是 eth0 我可以在剧本中或通过 extra vars 选项来执行此操作吗 ansible 使用命令 https github com ansible ansib
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16

随机推荐

  • Pycharm远程连接服务器(实践笔记)

    Pycharm远程连接服务器 实践笔记 1 远程连接服务器 2 配置服务器上的环境 记录一下过程 防止自己隔一段时间又忘了 只有pycharm专业版才能远程连接 搞错了步骤1和2的顺序 然后代码一直不能实现同步 一下午配置了n次都不成功 不
  • java计算算术表达式

    直接上代码 String str 1 0 3 2 1 2 ScriptEngineManager manager new ScriptEngineManager ScriptEngine engine manager getEngineBy
  • Android 将布局文件放在服务器上,动态改变布局。

    转自 https blog csdn net chan1116 article details 44200405 目前在做项目时候有这样的需求 布局文件的控件类型大致相同 例如某布局文件由GridView ScrollView TextVi
  • 网银木马TrickBot的分析调试笔记

    Trickbot描述 Trickbot是2016年出现的一种网银木马 它以大银行的客户为目标 窃取他们的信息 自出现以来 新的变体不断出现 每次都有新的技巧和模块更新 Trickbot是一种模块化恶意软件 包括针对其恶意活动的不同模块 主要
  • Elasticsearch使用教程

    下载ES elasticsearch的下载地址 https www elastic co cn downloads elasticsearch ik分词器的下载地址 https github com medcl elasticsearch
  • csharp:百度翻译

    参考 http api fanyi baidu com api trans product index http developer baidu com wiki index php title E5 B8 AE E5 8A A9 E6 9
  • 如何在 Hive 中使用最近的值填补到缺失的日期中

    我花了几天的时间试图弄清楚如何在 Hive 中使用最近的值填补到缺失的日期中 但没有成功 原始表目前看起来像下表 account name available balance Date of balance Peter 50000 2021
  • NVIDIA GTC主题演讲内容学习<4>

    AI的进步为自动化 以前无法想象的任务开辟了新的机会 用子计算机行业的说法 边缘就是计算机接触世界的地方 如今 大量边缘应用可以在云中处理 例如 人们使用收集连接到云服务 对于许多边缘应用 由于响应时间 数据安全性或可靠性原因 或不间断高速
  • UE4 UE4 C++ Gameplay Abilities的GameplayCue

    UE4 UE4 C Gameplay Abilities的GameplayCue GAS参考文档 用GameplayCue 做一个玩家加血 buff效果 初始化 加血 加buff buff消失 加血的播放一个粒子特效 这个是用Gamepla
  • arm32上uImage镜像的生成过程

    arm32上uImage镜像的生成过程 arch arm boot Image cmd cmd arch arm boot Image arm himix200 linux objcopy O binary R comment S vmli
  • 【机器学习系列】变分推断第三讲:基于随机梯度上升法SGD的变分推断解法

    作者 CHEONG 公众号 AI机器学习与知识图谱 研究方向 自然语言处理与知识图谱 阅读本文之前 首先注意以下两点 1 机器学习系列文章常含有大量公式推导证明 为了更好理解 文章在最开始会给出本文的重要结论 方便最快速度理解本文核心 需要
  • 【前端】Vue项目:旅游App-(12)home-Calendar:日期选择、日历、动态显示时间

    文章目录 目标 过程与代码 安装依赖 结构样式 动态数据 默认数据今天明天 添加日历 修改样式 动态数据 显示日历中选择的数据 效果 总代码 修改或添加的文件 formatDate js home vue main js 目标 点击时间 弹
  • windows测试工具—syslog-server搭建

    1 解压附件小工具 双击打开 syslog server服务器就搭建好了 2 syslog server信息 IP地址为跟环境互通的小网地址 TCP UDP端口号为选择Setting gt Network 可以根据需要更改 改为UTF 8编
  • hx711基准电压_(完整版)hx711基本原理讲解

    基本原理讲解 1 5kg 传感器 满量程输出电压 激励电压 灵敏度 1 0mv v 例如 供电电压是 5v 乘以灵敏度 1 0mv v 满量程 5mv 相当于有 5Kg 重力产生时候产生 5mV 的电压 2 711 模块对产生的 5mV 电
  • CentOS 8 最新阿里YUM源

    前文 由于CentOS8 已停止服务 相关源已经停止 前期官方自带的源和前期 阿里 清华 网易 等等的源 都已无法再使用 需要更换源 安装程序时报错 Failed to synchronize cache for repo AppStrea
  • 【Spring源码系列】Bean生命周期-Bean销毁

    文章目录 前言 一 Bean销毁介绍 bean销毁的时机 spring注册DestroyBean时机 定义bean销毁方式以及源码调试 使用 PreDestroy注解 实现DisposableBean或者AutoCloseable接口 手动
  • 使用Redisson实现Java分布式锁

    在分布式系统中 实现并发控制是一个重要的问题 分布式锁是一种常见的解决方案 它可以确保在分布式环境下只有一个进程能够访问共享资源 Redis是一种流行的内存数据存储系统 它提供了分布式锁的功能 在Java中 可以使用Redisson库来集成
  • SpringBoot(三):集成Mybatis

    1 Mybatis逆向工程 逆向工程即为通过数据库逆向生成model类和mapper文件以及接口文件 步骤如下 1 1在pom文件中加入mybatis相关依赖
  • Android系列开发博客资源汇总

    CSDN博客本期热文推荐 为您介绍有关Android应用开发的10个博客 分享他们的日积月累的宝贵经验 希望这些文章对Android开发者们能有所启发和帮助 1 张国威 Android从入门到提高系列 前面写了十四篇关于界面的入门文章 大家
  • Ansible自动化运维工具之playbook剧本编写

    内容预知 目录 内容预知 1 playbook的相关知识 1 1 playbook 的简介 1 2 playbook的 各部分组成 2 基础的playbook剧本编写实例 实例1 playbook编写 apache的yum安装部署剧本 实例