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

Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)

本篇文章详细给大家介绍Ansible变量,变量适合管理剧本中每个项目的动态值,或是某些值在多个地方重复使用,如果将此值设置为变量再在其他地方调用会方便许多。会用变量,才算真正会用Ansible,话不多说,直接开始。

1.变量定义

在测试情况下,可以在命令行中定义变量;当变量较少,不会被其他剧本调用的情况下,可以在剧本头部进行定义;当有较多playbook调用时,可以在文件中定义变量;也可以通过主机清单中定义变量,但是一般不推荐;也可以采取官方推荐的定义方式。一共四种定义方式。

(1)命令行定义变量

主机清单的变量会被剧本文件的方式覆盖,这两种方式的变量又会被命令行定义的方式覆盖,命令行可以使用--extra-vars或者-e设置变量。

[root@Ansible test]# cat test.yml
- hosts: web_grouptasks:- name: install httpd serveryum:name: "{{ web_server }}"
[root@Ansible test]# ansible-playbook test.yml -e "web_server=vsftpd"    #定义变量并运行[root@Ansible test]# cat test.yml
- hosts: web_grouptasks:- name: install httpd serveryum:name: - "{{ web_server }}"- "{{ db_server }}"
[root@Ansible test]# ansible-play test.yml -e "web_server=vsftpd" -e "db_server=mariadb-server"    #定义多个变量并运行

(2)剧本头部进行定义

#1、将一个列表定义在一个变量中
[root@Ansible test]# cat test.yml
- hosts: web_groupvars:packages:- httpd- mariadb-server- php- php-mysql- php-pdotasks:- name: install httpd ....yum: name: "{{ packages }}"#2、以列表的形式,一个内容定义一个变量
[root@Ansible test]# cat test.yml
- hosts: web_groupvars:- web_server: httpd- db_server: mariadb-server- php_server: php,php-mysql,php-pdotasks:- name: install httpd ....yum: name: - "{{ web_server }}"- "{{ db_server }}"- "{{ php_server }}"#3、以列表形式,多个内容由多个变量定义,最后拼接调用
[root@Ansible test]# cat test.yml
- hosts: web_groupvars:- ngx_ver: 1.1- ngx_dir: webtasks:- name: touchfile: name: /tmp/{{ ngx_dir }}_{{ ngx_ver }}state: touch#获取并调用Ansible内置变量
[root@Ansible test]# cat test.yml
- hosts: web_groupvars: - remote_ip: "{{ ansible_default_ipv4['address'] }}"- remote_hostname: "{{ ansible_fqdn }}"tasks:- name: touch ip filefile:path: /root/{{ remote_ip }}state: touch- name: touch hostname filefile:path: /root/{{ remote_hostname }}state: touch

(3)文件中定义变量

剧本头部定义变量的缺陷是只能当前变量使用,其他文件无法调用该变量文件,我们可以在文件中定义变量解决这个问题。

[root@Ansible test]# cat vars1.yml 
web_server: httpd
[root@Ansible test]# cat vars2.yml 
db_server: mariadb-server
[root@Ansible test]# cat test.yml    #调用一个文件一个变量
- hosts: web_groupvars_files: vars1.ymltasks:- name: install httpd mariadbyum:name: "{{ web_server }}"    [root@Ansible test]# cat test.yml    #调用多个文件多个变量
- hosts: web_groupvars_files: - vars1.yml- vars2.ymltasks:- name: install httpd mariadbyum:name: - "{{ web_server }}"- "{{ db_server }}"

(4)主机清单定义变量

在主机清单中定义变量,主机的变量要高于主机组的变量,所以该方法不推荐使用,容易将环境弄乱。

[root@Ansible test]# vim /etc/ansible/hosts
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8
[web_group:vars]
web_server=httpd
index_file=index.html- hosts: web_grouptasks:- name: Install httpd Serveryum:name: "{{ web_server }}"- name: Create Index Filefile:path: /tmp/{{ index_file }}state: touch 

(5)官方推荐定义变量

创建group_vars目录,在里面创建以组名命名的文件给组定义变量,想对所有主机进行定义使用组下面的all进行定义。

[root@Ansible test]# mkdir group_vars
[root@Ansible test]# cat group_vars/web_group 
web_server: httpd
[root@Ansible test]# cat test.yml 
- hosts: web_grouptasks:- name: install httpd serveryum:name: "{{ web_server }}"

创建host_vars目录,在里面创建以主机别名命名的文件给主机定义变量。

[root@Ansible test]# mkdir host_vars
[root@Ansible test]# cat host_vars/web01
web_server: nginx
[root@Ansible test]# cat test.yml 
- hosts: web_grouptasks:- name: install httpd serveryum:name: "{{ web_server }}"
2.变量优先级
变量读取优先级命令行>playbook文件>主机列表文件注意:尽量使用一种定义变量的方式进行定义,太乱了不容易操作
3.变量注册

Ansible模块运行时,都会返回一些result结果,类似于执行脚本,我们需要获取这些结果,判断上一步是否执行成功,默认情况下,Ansible的result并不会显示出来,所以,我们可以吧这些返回值储存到变量之中,通过调用对应的变量名,获取这些result。这种将模块的返回值写入到变量的方法叫做变量注册。

[root@Ansible test]# cat test.yml 
- hosts: web_grouptasks:- name: test register varsshell: "ls -l /"
[root@Ansible test]# ansible-playbook test.yml    PLAY [web_group] ***************************************************************TASK [Gathering Facts] *********************************************************
ok: [web01]
ok: [web02]TASK [test register vars] ******************************************************
changed: [web02]
changed: [web01]PLAY RECAP *********************************************************************
web01                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web02                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

当我们执行这个命令时,并不会给我们返回结果,只会返回changed是否改变,这时我们使用变量注册。

[root@Ansible test]# cat test.yml 
- hosts: web_grouptasks:- name: test register varsshell: "ls -l /"register: list_dir- name: return resultdebug:msg: "{{ list_dir }}"                                                [root@Ansible test]# ansible-playbook test.ymlPLAY [web_group] ***************************************************************TASK [Gathering Facts] *********************************************************
ok: [web01]
ok: [web02]TASK [test register vars] ******************************************************
changed: [web02]
changed: [web01]TASK [return result] ***********************************************************
ok: [web01] => {"msg": {"changed": true, "cmd": "ls -l /", "delta": "0:00:00.073085", "end": "2023-04-19 17:30:57.892956", "failed": false, "rc": 0, "start": "2023-04-19 17:30:57.819871", "stderr": "", "stderr_lines": [], "stdout": "total 24\nlrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin\ndr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot\ndrwxr-xr-x    6 www  www    71 Apr 19 08:29 code\ndrwxr-xr-x   19 root root 3200 Apr 18 22:37 dev\ndrwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 home\nlrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib\nlrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 media\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 mnt\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 opt\ndr-xr-xr-x  128 root root    0 Mar 30 20:56 proc\ndr-xr-x---.   5 root root  197 Apr 19 16:25 root\ndrwxr-xr-x   29 root root  740 Apr 19 17:20 run\nlrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 srv\ndr-xr-xr-x   13 root root    0 Apr 19 17:28 sys\ndrwxrwxrwt.  11 root root 4096 Apr 19 17:30 tmp\ndrwxr-xr-x.  13 root root  155 Mar 29 18:30 usr\ndrwxr-xr-x.  21 root root 4096 Apr 19 17:20 var", "stdout_lines": ["total 24", "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin", "dr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot", "drwxr-xr-x    6 www  www    71 Apr 19 08:29 code", "drwxr-xr-x   19 root root 3200 Apr 18 22:37 dev", "drwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc", "drwxr-xr-x.   2 root root    6 Apr 11  2018 home", "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib", "lrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64", "drwxr-xr-x.   2 root root    6 Apr 11  2018 media", "drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt", "drwxr-xr-x.   2 root root    6 Apr 11  2018 opt", "dr-xr-xr-x  128 root root    0 Mar 30 20:56 proc", "dr-xr-x---.   5 root root  197 Apr 19 16:25 root", "drwxr-xr-x   29 root root  740 Apr 19 17:20 run", "lrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin", "drwxr-xr-x.   2 root root    6 Apr 11  2018 srv", "dr-xr-xr-x   13 root root    0 Apr 19 17:28 sys", "drwxrwxrwt.  11 root root 4096 Apr 19 17:30 tmp", "drwxr-xr-x.  13 root root  155 Mar 29 18:30 usr", "drwxr-xr-x.  21 root root 4096 Apr 19 17:20 var"]}
}
ok: [web02] => {"msg": {"changed": true, "cmd": "ls -l /", "delta": "0:00:00.072887", "end": "2023-04-19 17:30:57.891135", "failed": false, "rc": 0, "start": "2023-04-19 17:30:57.818248", "stderr": "", "stderr_lines": [], "stdout": "total 28\nlrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin\ndr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot\ndrwxr-xr-x    6 www  www    71 Apr 19 08:29 code\ndrwxr-xr-x   19 root root 3200 Apr 18 22:37 dev\ndrwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 home\nlrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib\nlrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 media\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 mnt\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 opt\ndr-xr-xr-x  127 root root    0 Mar 30 20:56 proc\ndr-xr-x---.   5 root root 4096 Apr 19 16:25 root\ndrwxr-xr-x   29 root root  740 Apr 19 17:20 run\nlrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 srv\ndr-xr-xr-x   13 root root    0 Apr 19 17:28 sys\ndrwxrwxrwt.  10 root root 4096 Apr 19 17:30 tmp\ndrwxr-xr-x.  13 root root  155 Mar 29 18:30 usr\ndrwxr-xr-x.  21 root root 4096 Apr 19 17:20 var", "stdout_lines": ["total 28", "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin", "dr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot", "drwxr-xr-x    6 www  www    71 Apr 19 08:29 code", "drwxr-xr-x   19 root root 3200 Apr 18 22:37 dev", "drwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc", "drwxr-xr-x.   2 root root    6 Apr 11  2018 home", "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib", "lrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64", "drwxr-xr-x.   2 root root    6 Apr 11  2018 media", "drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt", "drwxr-xr-x.   2 root root    6 Apr 11  2018 opt", "dr-xr-xr-x  127 root root    0 Mar 30 20:56 proc", "dr-xr-x---.   5 root root 4096 Apr 19 16:25 root", "drwxr-xr-x   29 root root  740 Apr 19 17:20 run", "lrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin", "drwxr-xr-x.   2 root root    6 Apr 11  2018 srv", "dr-xr-xr-x   13 root root    0 Apr 19 17:28 sys", "drwxrwxrwt.  10 root root 4096 Apr 19 17:30 tmp", "drwxr-xr-x.  13 root root  155 Mar 29 18:30 usr", "drwxr-xr-x.  21 root root 4096 Apr 19 17:20 var"]}
}PLAY RECAP *********************************************************************
web01                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web02                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

内容很多,我们让其输入自己想要的内容。

[root@Ansible test]# cat test.yml
- hosts: web_grouptasks:- name: test register varsshell: "ls -l /"register: list_dir- name: return resultdebug:msg: "{{ list_dir.stdout_lines }}"
[root@Ansible test]# ansible-playbook test.yml PLAY [web_group] ***************************************************************TASK [Gathering Facts] *********************************************************
ok: [web02]
ok: [web01]TASK [test register vars] ******************************************************
changed: [web02]
changed: [web01]TASK [return result] ***********************************************************
ok: [web01] => {"msg": ["total 24", "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin", "dr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot", "drwxr-xr-x    6 www  www    71 Apr 19 08:29 code", "drwxr-xr-x   19 root root 3200 Apr 18 22:37 dev", "drwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc", "drwxr-xr-x.   2 root root    6 Apr 11  2018 home", "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib", "lrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64", "drwxr-xr-x.   2 root root    6 Apr 11  2018 media", "drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt", "drwxr-xr-x.   2 root root    6 Apr 11  2018 opt", "dr-xr-xr-x  129 root root    0 Mar 30 20:56 proc", "dr-xr-x---.   5 root root  197 Apr 19 16:25 root", "drwxr-xr-x   29 root root  740 Apr 19 17:20 run", "lrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin", "drwxr-xr-x.   2 root root    6 Apr 11  2018 srv", "dr-xr-xr-x   13 root root    0 Apr 19 17:28 sys", "drwxrwxrwt.  11 root root 4096 Apr 19 17:34 tmp", "drwxr-xr-x.  13 root root  155 Mar 29 18:30 usr", "drwxr-xr-x.  21 root root 4096 Apr 19 17:20 var"]
}
ok: [web02] => {"msg": ["total 28", "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin", "dr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot", "drwxr-xr-x    6 www  www    71 Apr 19 08:29 code", "drwxr-xr-x   19 root root 3200 Apr 18 22:37 dev", "drwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc", "drwxr-xr-x.   2 root root    6 Apr 11  2018 home", "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib", "lrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64", "drwxr-xr-x.   2 root root    6 Apr 11  2018 media", "drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt", "drwxr-xr-x.   2 root root    6 Apr 11  2018 opt", "dr-xr-xr-x  127 root root    0 Mar 30 20:56 proc", "dr-xr-x---.   5 root root 4096 Apr 19 16:25 root", "drwxr-xr-x   29 root root  740 Apr 19 17:20 run", "lrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin", "drwxr-xr-x.   2 root root    6 Apr 11  2018 srv", "dr-xr-xr-x   13 root root    0 Apr 19 17:28 sys", "drwxrwxrwt.  10 root root 4096 Apr 19 17:34 tmp", "drwxr-xr-x.  13 root root  155 Mar 29 18:30 usr", "drwxr-xr-x.  21 root root 4096 Apr 19 17:20 var"]
}PLAY RECAP *********************************************************************
web01                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web02                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

debug模块常用参数 

msg        #调试输出的消息

var          #将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出

verbosity #debug的级别(默认是0,全部显示)

4.层级定义变量

(1)编辑变量文件

[root@Ansible test]# cat vars_file.yml
lamp:framework:web_package: httpddb_package: mariadb-serverphp_package: phplnmp:framework:web_package: nginxdb_package: mysqlphp_package: phplnmt:framework:web_package: nginxdb_package: mysqljava_package: tomcat

(2)编辑剧本文件

#简单写法
[root@Ansible test]# cat test.yml
- hosts: web_groupvars_files: vars_file.ymltasks:- name: install lamp httpdyum:name: "{{ lamp.framework.web_package }}"- name: install lamp mariadb-serveryum:name: "{{ lamp.framework.db_package }}"- name: install lamp phpyum:name: "{{ lamp.framework.php_package }}"#官方推荐写法
[root@Ansible test]# cat test.yml
- hosts: web_groupvars_files: vars_file.ymltasks:- name: install lamp httpdyum:name: "{{ lamp['framework']['web_package'] }}"- name: install lamp mariadb-serveryum:name: "{{ lamp['framework']['db_package'] }}"- name: install lamp phpyum:name: "{{ lamp['framework']['php_package'] }}"

(3)执行剧本

[root@Ansible test]# ansible-playbook test.yml PLAY [web_group] ***************************************************************TASK [Gathering Facts] *********************************************************
ok: [web01]
ok: [web02]TASK [install lamp httpd] ******************************************************
ok: [web01]
ok: [web02]TASK [install lamp mariadb-server] *********************************************
ok: [web01]
ok: [web02]TASK [install lamp php] ********************************************************
ok: [web01]
ok: [web02]PLAY RECAP *********************************************************************
web01                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web02                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
5.facts缓存变量

Ansible facts是在客户端主机通过Ansible自动采集发现的变量,facts包含每台特定的主机信息,如被控端的主机名、IP地址、系统版本、CPU数量、内存状态、磁盘状态等等。

(1)fasts使用场景

1、通过facts缓存检查CPU,来生成对应的nginx配置文件2、通过facts缓存检查主机名,生成不同的zabbix配置文件3、通过facts缓存检索物理机的内存大小来生成不同的mysql配置文件Ansible facts类似于saltstack中的grains,对于做自动化非常有帮助!

(2)fasts用法

[root@Ansible test]# cat test.yml 
- hosts: web_groupvars_files: vars_file.ymltasks:- name: get host infodebug:msg: Hostname "{{ ansible_fqdn }}" and IP "{{ an
sible_default_ipv4.address }}"[root@Ansible test]# ansible-playbook test.yml PLAY [web_group] ***************************************************************TASK [Gathering Facts] *********************************************************
ok: [web01]
ok: [web02]TASK [get host info] ***********************************************************
ok: [web01] => {"msg": "Hostname \"Web01\" and IP \"10.0.0.7\""
}
ok: [web02] => {"msg": "Hostname \"Web02\" and IP \"10.0.0.8\""
}PLAY RECAP *********************************************************************
web01                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web02                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

(3)关闭fasts

[root@Ansible test]# cat test.yml
- hosts: web_groupgather_facts: no #关闭信息采集vars_files: vars_file.ymltasks:- name: get host infodebug:msg: Hostname "{{ ansible_fqdn }}" and IP "{{ ansible_default_ipv4.address }}"

(4)fasts生成zabbix配置文件

[root@Ansible test]# cat test.yml
- hosts: web_groupvars: - zabbix_server: 172.16.1.71tasks:- name: copy zabbix agent conftemplate:                    #作用是将管理机上的变量内容覆盖到客户机的目标配置文件中src: ./zabbix_agentd.confdest: /tmp/zabbix_agentd.conf

(5)facts生成mysqld配置文件

- hosts: db_grouptasks:- name: Install mysql serveryum:name: mariadb-serverstate: present- name: copy mysql  conftemplate:                  #作用是将管理机上的变量内容覆盖到客户机的目标配置文件中src: ./my.cnfdest: /etc/my.cnf[root@m01 ~]# vim /etc/my.cnf
[mysqld]
basedir=/usr
datadir=/var/lib/mysql/
socket=/var/lib/mysql/mysql.sock
log_error=/var/log/mariadb/mariadb.log
innodb_buffer_pool_size={{ ansible_memtotal_mb * 0.8 }}

相关文章:

Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)

本篇文章详细给大家介绍Ansible变量,变量适合管理剧本中每个项目的动态值,或是某些值在多个地方重复使用,如果将此值设置为变量再在其他地方调用会方便许多。会用变量,才算真正会用Ansible,话不多说,直接开…...

面向对象系统的分析和设计

来源:《设计模式精解-GOF23种设计模式解析》 作者:k_eckel k_eckels mindview - 博客园 (cnblogs.com) --------- 面向对象系统的分析和设计实际上追求的就是两点: (1)高内聚 (2)低耦合 …...

Vue 提供了Transition,可以帮助你制作基于状态变化的过渡和动画

官方文档&#xff1a;https://cn.vuejs.org/guide/built-ins/transition.html Transition​ Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition> 会在一个元素或组件进入和离开 DOM 时应用动画。本章节会介绍如何使用…...

视频编辑技术:一键生成混剪视频的AI技术应用

随着视频内容的爆炸式增长&#xff0c;视频编辑技术也在不断进步。本文将探讨如何利用AI技术&#xff0c;实现一键生成混剪视频&#xff0c;并自动添加配音和字幕&#xff0c;以提高视频编辑的效率和质量。 AI技术在视频编辑中的应用 AI技术在视频编辑领域的应用越来越广泛&am…...

Android11 MTK 开机默认启动热点

1、需求&#xff1a;开机后不锁屏&#xff0c;默认打开热点&#xff0c;且长时间没有设备连接热点时保证热点也是打开的。 2、开机后不锁屏&#xff1a; 路径&#xff1a;vendor/mediatek/proprietary/packages/apps/SettingsProvider/res/values/defaults.xml<bool name&q…...

Vue Web开发(二)

1. 项目搭建 1.1. 首页架子搭建 使用Element ui中的Container布局容器&#xff0c;选择倒数第二个样式&#xff0c;将代码复制到Home.vue。 1.1.1.下载less &#xff08;1&#xff09;下载less样式 npm i less   &#xff08;2&#xff09;下载less编辑解析器 npm i less…...

Linux-实用操作

文章目录 一. 各类实用小技巧(快捷键)1. ctrl c 强制停止2. ctrl d 退出登出3. history 查看历史命令4. !命令前缀&#xff0c;自动匹配上一个命令5. ctrl r&#xff0c;搜索历史命令6. ctrl a | e&#xff0c;光标移动到命令开始或结束7. ctrl ← | →&#xff0c;左右跳…...

Elasticsearch:使用 Elastic APM 监控 Android 应用程序

一、前言 人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情。 拥有成千上万甚至数百万的用户&#xff0c;确保出色的性能和可靠性是移动应用程序和相关后端服务的提供商和运营商面临的主要挑战。 了解移动应用程序的行为、崩溃的发生和类型、响应时间慢的根本…...

Go的简单问题问答

基础问题回答 Go 的主要特点是什么&#xff1f; 简洁&#xff1a;语法简化&#xff0c;减少复杂性。并发&#xff1a;内置 Goroutine 和 Channel&#xff0c;支持轻量级并发。静态类型&#xff1a;强类型语言&#xff0c;编译时检查错误。跨平台&#xff1a;编译生成独立的二进…...

【攻防实验】溯源与取证分析实验

溯源与取证分析实验 溯源取证分析作为网络攻防过程中重要环节&#xff0c;准确找到攻击者的入侵线索(尤其是攻击突破口、攻击IP地址、域名、工具等信息)&#xff0c;对于企业或者团队安全运营团队来说都是必备技能。常规攻击取证过程中往往会结合流量、Web访问日志、终端系统或…...

THREE.js 入门(一)xyz坐标系

一、坐标系概念 在 three.js 中&#xff0c;相机的默认朝向是沿着 Z 轴的负方向。也就是说&#xff0c;默认情况下&#xff0c;相机会沿着 Z 轴的负方向“看”到场景中的对象&#xff0c;而 X 轴和 Y 轴分别对应水平方向和垂直方向。换句话说&#xff0c;相机的默认位置是 (0,…...

AUTOSAR CP中基于通信模块(COM)的Transformer-R24的规范导读

该文档是关于 AUTOSAR CP中基于通信模块&#xff08;COM&#xff09;的Transformer的规范说明&#xff0c;主要内容包括引言、相关文档、约束与假设、功能规范、API 规范、配置规范等&#xff0c;旨在为汽车电子系统开发中基于 COM 的Transformer提供全面的技术规范和指导。 一…...

ubuntu20.04安装anygrasp_sdk

ubuntu20.04安装anygrasp_sdk采坑记录 安装ME的教程看上一篇,现在来看anygrasp安装问题grasp_detection、grasp_trackinglicense申请demo文件的运行注意的地方到这以为大功告成了,然后出现了一个numpy版本不匹配问题最后还有一个问题就是修改demo.sh,不然没法可视化结果展示安…...

Spring完整知识点二

Spring注解开发 Spring是轻代码而重配置的框架&#xff0c;配置比较繁重&#xff0c;影响开发效率&#xff0c;所以注解开发是一种趋势&#xff0c;它能够代替xml配置文件&#xff0c;可以简化配置&#xff0c;提高开发效率Spring注解根据出现时间分类 Spring原始注解&#xf…...

GESP三级集训——课堂笔记(部分)

进制转换&#xff08;二进制、十进制、八进制、十六进制等&#xff09; 十进制&#xff08;逢十进一&#xff09;——Decimal 十进制是我们生活中最常见的进制&#xff0c;如“1”“23”“891”等&#xff1a; 进位过程如下&#xff1a;{1,2,3,4,5,6,7,8,9}{10,11,12,13,14,…...

Spring Boot接口返回统一格式

统一的标准数据格式好处 SpringBoot返回统一的标准数据格式主要有以下几点好处&#xff1a; 增强接口的可读性和可维护性&#xff0c;使得前端开发人员能够更加清晰地理解接口返回的数据结构&#xff0c;从而提高开发效率。 降低前后端耦合度&#xff0c;当后端需要修改返回数…...

Flink如何基于数据版本使用最新离线数据

业务场景 假设批量有一张商户表&#xff0c;表字段中有商户名称和商户分类两个字段。 批量需要将最新的商户名称和分类的映射关系推到hbase供实时使用。 原实现方案 a.原方案内容 为解决批量晚批问题&#xff0c;批量推送hbase表时一份数据产生两类rowkey&#xff1a;T-1和…...

软件开发中的常用性能指标

大家好&#xff01;我是今越。在软件开发中我们经常会遇到一些性能指标&#xff0c;下面就带大家一起来看看。 QPS Queries Per Second&#xff0c;每秒查询率&#xff0c;一台服务器每秒能够响应的查询次数。它是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准…...

cmakelist使用总结

支持能编译成在不同系统上运行程序的方法 我们代码就一份&#xff0c;但有时需要编译成arm32&#xff0c;有时需要编译成x86_64,或更多 1、首先先将代码定义一个名称&#xff1a; #将所有的源文件列为一个集合&#xff0c;集合名字叫做SRC_LISTS set(SRC_LISTS main.cpp A.cpp…...

准备阶段 Unity优化总纲

Unity优化总纲 我们在学习优化课程之前要预先做好准备功能 例如最主要是的接收到一个优化的任务&#xff0c;应该怎么做&#xff0c;其次怎么做&#xff0c;最后怎么做。 也要学习一些专业工具以及专业术语 了解游戏运行机制&#xff0c;在排查期间思路会更清晰 1.优化目的…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...