Ansible中的变量

变量概述

变量提供了便捷的方式来管理Ansible playbook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果将此值设置为变量,然后再在其他的playbook中调用,会方便许多。如此一来还方便维护,减少维护的成本。

变量定义的方式

  • 命令行定义变量

  • 在play文件定义变量

  • 在主机清单里定义变量

变量的优先级

命令行 > playbook文件 > Inventory文件

如何定义变量

playbook中定义变量

playbook变量可以通过多种方式进行定义,最简单的方式就是在playbook的开头通过vars进行定义

# 1.playbook中全局定义
- hosts: web_group
# 定义变量:pkg=nginx,pkg2=tree
vars:    
- pkg: nginx    
- pkg2: tree
tasks:    
- name: Create File    
file:  
# 表示创建一个叫Nginx的文件
path: /root/{{ pkg }}-------------使用变量时,变量旁边有字符,就不用双引号,双括号就行
state: touch    - name: Install {{ pkg2 }}
    yum:
    # 表示安装tree命令
    name: "{{ pkg2 }}"----------------使用变量时,旁边没有内容,变量外面就需要双引号
    state: presen
   
# 2.playbook中局部定义
- hosts: web_group
tasks:
- name: Create File    
file:
path: /root/{{ pkg }}
state: touch    - name: Install {{ pkg2 }}
    yum:
    name: "{{ pkg2 }}"
    state: presen
    vars: --------------------与单个模块同级,其他模块将无法识别到变量
- pkg: nginx    
- pkg2: tree

vars_file中定义变量

刚才我们学到在playbook中使用vars定义变量,有一个缺陷,就是其他的playbook无法使用该变量。所以我们可以 采取第二种定义变量的方式,在vars_file中定义变量

# 编辑一个变量文件,也必须是yml结尾,在里面定义变量
[root@m01 ansible]$ vim bianliang.yml
pkg: httpd
pkg2: tree
pkg3: mariadb-server # 在playbook中,利用vars_files调用配置好的变量文件,然后就可以使用文件中的变量
[root@m01 ansible]$ vim test_vars.yml
- hosts: web_group
vars_files: /root/ansible/bianliang.yml
tasks:
- name: Create File
file:
path: /root/{{ pkg2 }}
state: touch # 一个变量设置多个值
pkg:
- httpd
- tree
- mariadb-server
# 调用pkg去安装时,会将httpd,tree,mariadb-server全部安装

系统内置变量

系统内置变量有哪些

## 系统内置变量
ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_fqdn / ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。

调用系统内置变量

- hosts: web_group
tasks:
- name: Create File    
file:
# 在web端创建/root下以主机名_ip信息(ansible_default_ipv4.address表示:取ipv4下面的address,可以直接取出ip信息)_总内存大小,命名的文件
path: /root/{{ ansible_fqdn }}_{{ ansible_default_ipv4.address }}_{{ ansible_memtotal_mb }}
state: touch

不调用系统内置变量

facts:playbook执行之前会先调取系统内置变量

- hosts: web_group
# 关闭facts缓存:不加载内置变量,默认开启,只能影响内置变量,不影响手动设置的变量
gather_facts: no
tasks:
- name: Create File    
file:
path: /root/{{ ansible_fqdn }}_{{ ansible_default_ipv4.address }}_{{ ansible_memtotal_mb }}
state: touch

inventory定义变量 (了解即可)

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

# 在主机清单中定义
[root@m01 ~]$ vim /etc/ansible/hosts
## 在指定的主机组中定义变量只有当前主机组能识别
[web_group:vars]
pkg=httpd
pkg2=tree

优先级总结

1.命令行
2.vars_file
3.vars
4.host_vars:单个主机
5.group_vars:主机组
6.主机清单中的单个主机
7.主机清单中的主机组

官方推荐的变量定义位置

之前的几种变量定义都不是很好用,比较好用的是在Ansible项目目录下创建两个变量目录:

  • host_vars

  • group_vars

切记,目录名字一定要一致,不能做任何修改,并且目录必须和yml文件同级

# 创建两个目录
mkdir host_vars
mkdir group_vars # 主机定义变量:在host_vars主机变量目录下创建的变量文件,必须以主机名命名,代表给指定主机定义的变量
vim ansible/host_vars/web01
filename=inventory_web01 vim ansible/host_vars/web02
filename=inventory_web02 vim ansible/host_vars/web03
filename=inventory_web03 # 主机组定义变量:在group_vars主机组变量目录下创建的变量文件,必须以主机组命名,代表给指定主机组定义的变量
vim ansible/group_vars/web_group
filename=web_group

变量注册

默认情况下,ansible的result并不会显示出来,所以,我们可以把这些返回值'存储'到变量中,这样我们就能通过'调用'对应的变量名,从而获取到这些result,这种将模块的返回值,写入到变量中的方法被称为变量注册

# 利用shell模块查看web端根目录下的信息
[root@m01 ~/ansible]$ vim test.yml
- hosts: web_group
tasks:
- name: Test Register Vars
shell: "ls -l /"
# 不会返回任何结果
[root@m01 ~/ansible]$ ansible-playbook test.yml PLAY [web_group] *************************************************************** TASK [Gathering Facts] *********************************************************
ok: [web02]
ok: [web01] TASK [Test Register Vars] ******************************************************
changed: [web01]
changed: [web02] 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

如上执行结果可见,当我们使用shell模块执行ls -l /时,ansible给我们返回的只有changed我们无法看到执行之后的 结果,所以此时我们需要使用到变量注册

# 编辑playbook
[root@m01 ~/ansible]$ vim test.yml
- hosts: web_group
tasks:
- name: Test Register Vars
shell: "ls -l /"
# 表示将shell模块执行的结果,利用register赋值给了list_dir(list_dir可以随便写)
register: list_dir - name: Return Result
# debug模块
debug:
# 利用msg动作调用上面的赋值,并打印
msg: "{{ list_dir }}" # 再次查看执行结果
[root@m01 ~/ansible]$ ansible-playbook test.yml
ok: [web01] => {
"stdout_lines": [
"total 20",
"lrwxrwxrwx. 1 root root 7 Jul 5 19:02 bin -> usr/bin",
"dr-xr-xr-x. 5 root root 4096 Jul 5 19:05 boot",
"drwxr-xr-x 3 www www 23 Aug 14 17:21 code",
"drwxr-xr-x 19 root root 3200 Jul 8 23:06 dev",
"drwxr-xr-x. 84 root root 8192 Aug 14 17:21 etc",
"drwxr-xr-x. 2 root root 6 Apr 11 2018 home",
"lrwxrwxrwx. 1 root root 7 Jul 5 19:02 lib -> usr/lib",
"lrwxrwxrwx. 1 root root 9 Jul 5 19:02 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 121 root root 0 Jul 8 23:06 proc",
"dr-xr-x---. 4 root root 179 Aug 14 17:19 root",
"drwxr-xr-x 25 root root 740 Aug 14 17:21 run",
"lrwxrwxrwx. 1 root root 8 Jul 5 19:02 sbin -> usr/sbin",
"drwxr-xr-x. 2 root root 6 Apr 11 2018 srv",
"dr-xr-xr-x 13 root root 0 Aug 15 15:31 sys",
"drwxrwxrwt. 20 root root 4096 Aug 15 15:35 tmp",
"drwxr-xr-x. 13 root root 155 Jul 5 19:02 usr",
"drwxr-xr-x. 20 root root 278 Aug 14 17:21 var"
]
} ok: [web02] => {
"stdout_lines": [
"total 20",
"lrwxrwxrwx. 1 root root 7 Jul 5 19:02 bin -> usr/bin",
"dr-xr-xr-x. 5 root root 4096 Jul 5 19:05 boot",
"drwxr-xr-x 3 www www 23 Aug 14 17:21 code",
"drwxr-xr-x 19 root root 3200 Jul 8 23:11 dev",
"drwxr-xr-x. 84 root root 8192 Aug 14 17:21 etc",
"drwxr-xr-x. 2 root root 6 Apr 11 2018 home",
"lrwxrwxrwx. 1 root root 7 Jul 5 19:02 lib -> usr/lib",
"lrwxrwxrwx. 1 root root 9 Jul 5 19:02 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 120 root root 0 Jul 8 23:11 proc",
"dr-xr-x---. 4 root root 179 Aug 14 17:19 root",
"drwxr-xr-x 25 root root 740 Aug 14 17:21 run",
"lrwxrwxrwx. 1 root root 8 Jul 5 19:02 sbin -> usr/sbin",
"drwxr-xr-x. 2 root root 6 Apr 11 2018 srv",
"dr-xr-xr-x 13 root root 0 Aug 15 15:31 sys",
"drwxrwxrwt. 20 root root 4096 Aug 15 15:35 tmp",
"drwxr-xr-x. 13 root root 155 Jul 5 19:02 usr",
"drwxr-xr-x. 20 root root 278 Aug 14 17:21 var"
]
}
# 只输出想要查看的内容
[root@m01 ~/ansible]$ vim test.yml
- hosts: web_group
tasks:
- name: Test Register Vars
shell: "ls -l /"
register: list_dir - name: Return Result
debug:
msg: "{{ list_dir.stdout_lines }}" ----------指定整个结果中的stdout_lines模块 # 查看结果
[root@m01 ~/ansible]$ ansible-playbook test.yml
ok: [web01] => {
"msg": [
"total 20",
"lrwxrwxrwx. 1 root root 7 Jul 5 19:02 bin -> usr/bin",
"dr-xr-xr-x. 5 root root 4096 Jul 5 19:05 boot",
"drwxr-xr-x 3 www www 23 Aug 14 17:21 code",
"drwxr-xr-x 19 root root 3200 Jul 8 23:06 dev",
"drwxr-xr-x. 84 root root 8192 Aug 14 17:21 etc",
"drwxr-xr-x. 2 root root 6 Apr 11 2018 home",
"lrwxrwxrwx. 1 root root 7 Jul 5 19:02 lib -> usr/lib",
"lrwxrwxrwx. 1 root root 9 Jul 5 19:02 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 122 root root 0 Jul 8 23:06 proc",
"dr-xr-x---. 4 root root 179 Aug 14 17:19 root",
"drwxr-xr-x 25 root root 740 Aug 14 17:21 run",
"lrwxrwxrwx. 1 root root 8 Jul 5 19:02 sbin -> usr/sbin",
"drwxr-xr-x. 2 root root 6 Apr 11 2018 srv",
"dr-xr-xr-x 13 root root 0 Aug 15 15:31 sys",
"drwxrwxrwt. 20 root root 4096 Aug 15 15:37 tmp",
"drwxr-xr-x. 13 root root 155 Jul 5 19:02 usr",
"drwxr-xr-x. 20 root root 278 Aug 14 17:21 var"
]
}
ok: [web02] => {
"msg": [
"total 20",
"lrwxrwxrwx. 1 root root 7 Jul 5 19:02 bin -> usr/bin",
"dr-xr-xr-x. 5 root root 4096 Jul 5 19:05 boot",
"drwxr-xr-x 3 www www 23 Aug 14 17:21 code",
"drwxr-xr-x 19 root root 3200 Jul 8 23:11 dev",
"drwxr-xr-x. 84 root root 8192 Aug 14 17:21 etc",
"drwxr-xr-x. 2 root root 6 Apr 11 2018 home",
"lrwxrwxrwx. 1 root root 7 Jul 5 19:02 lib -> usr/lib",
"lrwxrwxrwx. 1 root root 9 Jul 5 19:02 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 120 root root 0 Jul 8 23:11 proc",
"dr-xr-x---. 4 root root 179 Aug 14 17:19 root",
"drwxr-xr-x 25 root root 740 Aug 14 17:21 run",
"lrwxrwxrwx. 1 root root 8 Jul 5 19:02 sbin -> usr/sbin",
"drwxr-xr-x. 2 root root 6 Apr 11 2018 srv",
"dr-xr-xr-x 13 root root 0 Aug 15 15:31 sys",
"drwxrwxrwt. 20 root root 4096 Aug 15 15:37 tmp",
"drwxr-xr-x. 13 root root 155 Jul 5 19:02 usr",
"drwxr-xr-x. 20 root root 278 Aug 14 17:21 var"
]
}

debug模块常用参数

msg:            #调试输出的消息
var:            #将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity:      #debug的级别(默认是0级,全部显示)

利用ifconfig查看eth0的网卡信息

[root@m01 ~/ansible]$ vim test.yml
- hosts: web_group
tasks:
- name: Test Register Vars
shell: "ifconfig"
register: suibian - name: Return Result
debug:
msg: "{{ suibian.stdout_lines }}" # 查看结果
[root@m01 ~/ansible]$ 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": [
"eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500",
" inet 10.0.0.7 netmask 255.255.255.0 broadcast 10.0.0.255",
" inet6 fe80::20c:29ff:fee9:c96a prefixlen 64 scopeid 0x20<link>",
" ether 00:0c:29:e9:c9:6a txqueuelen 1000 (Ethernet)",
" RX packets 25022 bytes 33152427 (31.6 MiB)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 7785 bytes 1701680 (1.6 MiB)",
" TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0",
"",
"eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500",
" inet 172.16.1.7 netmask 255.255.255.0 broadcast 172.16.1.255",
" inet6 fe80::20c:29ff:fee9:c974 prefixlen 64 scopeid 0x20<link>",
" ether 00:0c:29:e9:c9:74 txqueuelen 1000 (Ethernet)",
" RX packets 32809 bytes 43612898 (41.5 MiB)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 6922 bytes 709784 (693.1 KiB)",
" TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0",
"",
"lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536",
" inet 127.0.0.1 netmask 255.0.0.0",
" inet6 ::1 prefixlen 128 scopeid 0x10<host>",
" loop txqueuelen 1000 (Local Loopback)",
" RX packets 22 bytes 13552 (13.2 KiB)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 22 bytes 13552 (13.2 KiB)",
" TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0"
]
}
ok: [web02] => {
"msg": [
"eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500",
" inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255",
" inet6 fe80::20c:29ff:fe02:880a prefixlen 64 scopeid 0x20<link>",
" ether 00:0c:29:02:88:0a txqueuelen 1000 (Ethernet)",
" RX packets 24380 bytes 33105256 (31.5 MiB)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 6460 bytes 424432 (414.4 KiB)",
" TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0",
"",
"eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500",
" inet 172.16.1.8 netmask 255.255.255.0 broadcast 172.16.1.255",
" inet6 fe80::20c:29ff:fe02:8814 prefixlen 64 scopeid 0x20<link>",
" ether 00:0c:29:02:88:14 txqueuelen 1000 (Ethernet)",
" RX packets 32328 bytes 43371472 (41.3 MiB)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 6391 bytes 648620 (633.4 KiB)",
" TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0",
"",
"lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536",
" inet 127.0.0.1 netmask 255.0.0.0",
" inet6 ::1 prefixlen 128 scopeid 0x10<host>",
" loop txqueuelen 1000 (Local Loopback)",
" RX packets 0 bytes 0 (0.0 B)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 0 bytes 0 (0.0 B)",
" TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0"
]
} # 尝试只取出网卡信息
[root@m01 ~/ansible]$ vim test.yml
- hosts: web_group
tasks:
- name: Test Register Vars
shell: "ifconfig"
register: suibian - name: Return Result
debug:
# 表示取出列表的第一行,0就是第一个元素,1才是第二个,以此类推
msg: "{{ suibian.stdout_lines.0 }}"
# 查看结果
[root@m01 ~/ansible]$ ansible-playbook test.yml
PLAY [web_group] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [web02]
ok: [web01]
TASK [Test Register Vars] ******************************************************
changed: [web01]
changed: [web02]
TASK [Return Result] ***********************************************************
ok: [web01] => {
"msg": "eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500"
}
ok: [web02] => {
"msg": "eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500"
} ----------------------------------------------------------------------------------------
# 如何做到取出整个eth0信息
# 1.第一种方式
[root@m01 ~/ansible]$ vim test.yml
- hosts: web_group
tasks:
- name: Test Register Vars
shell: "ifconfig"
register: suibian - name: Return Result
debug:
# 表示取出第一行到第八行的内容
msg: "{{ suibian.stdout_lines[0:7] }}" # 2.第二种方式
[root@m01 ~/ansible]$ vim test.yml - hosts: web_group
tasks:
- name: Test Register Vars
shell: "ifconfig"
register: suibian - name: Return Result
debug:
msg:
- "{{ suibian.stdout_lines.0 }}"          
- "{{ suibian.stdout_lines.1 }}"        
- "{{ suibian.stdout_lines.2 }}"          
- "{{ suibian.stdout_lines.3 }}"          
- "{{ suibian.stdout_lines.4 }}"          
- "{{ suibian.stdout_lines.5 }}"          
- "{{ suibian.stdout_lines.6 }}"          
- "{{ suibian.stdout_lines.7 }}" # 第三种方式
[root@m01 ~/ansible]$ vim test.yml
- hosts: web_group
tasks:
- name: Test Register Vars
shell: "ifconfig"
register: suibian - name: Return Result
debug:
msg: "{{ suibian.stdout_lines[:7] }}" # 最后的结果
[root@m01 ~/ansible]$ ansible-playbook test.yml
PLAY [web_group] *********************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************
ok: [web02]
ok: [web01]
TASK [Test Register Vars] ************************************************************************************************
changed: [web01]
changed: [web02]
TASK [Return Result] *****************************************************************************************************
ok: [web01] => {
"msg": [
"eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500",
" inet 10.0.0.7 netmask 255.255.255.0 broadcast 10.0.0.255",
" inet6 fe80::20c:29ff:fee9:c96a prefixlen 64 scopeid 0x20<link>",
" ether 00:0c:29:e9:c9:6a txqueuelen 1000 (Ethernet)",
" RX packets 25071 bytes 33157588 (31.6 MiB)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 7829 bytes 1705024 (1.6 MiB)"
]
}
ok: [web02] => {
"msg": [
"eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500",
" inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255",
" inet6 fe80::20c:29ff:fe02:880a prefixlen 64 scopeid 0x20<link>",
" ether 00:0c:29:02:88:0a txqueuelen 1000 (Ethernet)",
" RX packets 24429 bytes 33110417 (31.5 MiB)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 6504 bytes 427776 (417.7 KiB)"
]
}

层级定义变量

# 在group_vars官方推荐目录下定义web_group组专用变量
[root@m01 ~/ansible]$ vim group_vars/web_group
## 表示:lnmp变量下包含pkg变量,pkg变量下又包含了web,db,php三个变量(两个空格缩进,但是不能加横杠)
lnmp:
pkg:
web: nginx
db: mariadb-server
php: php-fpm

调用方式

# 调用层级变量需要在变量之间加上.符号
[root@m01 ~/ansible]$ vim test.yml
- hosts: web_group
tasks:
# 表示安装mariadb-server
- name: Install {{ lnmp.pkg.db }}
yum:
name: "{{ lnmp.pkg.db }}"
state: present # 执行结果
[root@m01 ~/ansible]$ ansible-playbook test.yml
PLAY [web_group] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [web02]
ok: [web01]
## 任务名也成功调用变量
TASK [Install mariadb-server] **************************************************
changed: [web01]
changed: [web02]
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

Ansible中的变量的更多相关文章

  1. ansible中定义变量的若干方法

    Ansible支持十几种定义变量的方式 根据优先级排序的定义方式: Inventory变量 Host Facts变量 Playbook变量 Playbook提示变量 变量文件 命令行变量 1.Inve ...

  2. ansible中的playbook详解

    首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...

  3. ansible中playbook使用

    palybook使用 ####yaml语法ansible中使用的yaml基础元素:变量Inventory条件测试迭代 playbook的组成结构InventoryModulesAd Hoc Comma ...

  4. ansible中yaml语法应用

    4.yaml语法应用 ansible的playbook编写是yaml语言编写,掌握yaml语法是编写playbook的必要条件,格式要求和Python相似,具体教程参考如下 yaml语言教程 附上一个 ...

  5. Ansible-Playbook中的变量使用

    变量名:仅能由字母.数字和下划线组成,且只能以字母开头 变量来源: 1.ansible all -m setup 远程主机的所有变量都可直接调用 #显示所有变量 ansible all -m setu ...

  6. MFC中成员变量的声明顺序与析构顺序

    第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...

  7. JavaScript 中的变量命名方法

    三种命名方法 在程序语言中,通常使用的变量命名方法有三种:骆驼命名法(CamelCase),帕斯卡命名法(PascalCase)和匈牙利命名法. 依靠单词的大小写拼写复合词的做法,叫做"骆驼 ...

  8. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  9. PHP中的变量与常量详解

    几乎所有的编程语言都会涉及到变量和常量这两个概念,PHP也不例外.本节将介绍PHP语言中的变量和常量的应用方法. 一.什么是变量和常量 在程序执行的过程中,变量存储的值可以随时改变,而常量存储的值是不 ...

  10. Linux中环境变量文件及配置

    Linux中环境变量文件及配置   一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统 ...

随机推荐

  1. Leecode 53.最大子数组和(Java 贪心算法、动态规划两种方法)

    想法(没看解析之前想不出来)   -----------------看了解析和答案 1.贪心算法,若当前元素的之前和<0,则丢弃当前元素之前的数列 设一个maxSum作为子序列最大和,一个sum ...

  2. 观察APP运行日志

    一.Android采用log工具打印日志,他将各类日志分为五个等级 1.log.e:表示错误信息,比如可能导致程序崩溃的异常 2.log.w:表示警告信息 3.log.i:表示一般信息 4.log.d ...

  3. Matlab - 在Figure界面去掉图像的坐标刻度

    Matlab版本:2018b 经过一番尝试,发现有两种方法 第一种:修改坐标轴的Visible属性,去掉坐标轴数字和坐标轴标签 第二种:删除Tick,只去掉坐标轴数字 第一种 ①原图 ②如果有多个子图 ...

  4. Windows系统镜像下载站合集

    Windows系统镜像下载站合集https://latest10.win/https://msdn.itellyou.cn/https://hellowindows.cn/https://www.im ...

  5. VUE配置proxy代理、开发环境、测试环境、生产环境

    VUE配置proxy代理.开发环境.测试环境.生产环境 前端开发过程中,我们经常会碰到跨域的问题,下面我们来配置下,不同的环境下,统一的跨域问题解决. 1.根目录下新建三个环境的配置文件,.env.d ...

  6. 自己动手从零写桌面操作系统GrapeOS系列教程——24.加载并运行loader

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 之前我们在电脑的启动过程中介绍过boot程序的主要任务就是加载并运行loader程序,本讲我们就来实现. 本讲代码文件共2个: boot.asm ...

  7. vue使用keep-alive出现的的activated和deactivated生命周期

    <keep-alive>包裹的动态组件会被缓存,它是一个抽象组件,它自身不会渲染一个dom元素,也不会出现在父组件链中.当组件在 <keep-alive> 内被切换,它的 ac ...

  8. [CTF]upload-lab靶场day1

    Pass-01 前端js绕过 拿到题目看hint提示判定在前端,用burp代理,将1.php后缀名更改为.png格式即可通过前端检测,而后在burp中对修改包内容,将1.png改为1.php即可绕过前 ...

  9. Spring(Bean详解)

    GoF之工厂模式 GoF是指二十三种设计模式 GoF23种设计模式可分为三大类: 创建型(5个):解决对象创建问题. 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型(7个):一些类 ...

  10. 看我如何用定值 Cookie 实现反爬

    摘要:本次案例,用定值Cookie实现反爬. 本文分享自华为云社区<我是怎么用一个特殊Cookie,限制住别人的爬虫的>,作者: 梦想橡皮擦 . Cookie 生成 由于本案例需要用到一个 ...