ansible变量

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

    ansible变量的使用方法

1.主机变量:直接在/etc/ansible/hosts文件中,主机的后边设置key=value的格式

注:inventory_hostname是ansible自带的变量,代表组中的每个主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#在配置文件中定义主机变量
[root@nfs-server playbook] # cat /etc/ansible/hosts
[webservers]
192.168.2.101 key=101
192.168.2.111 key=111
#写playbook,测试主机变量
[root@nfs-server playbook] # cat hosts_vars.yml
---
- hosts: webservers
   remote_user: root
   tasks:
   - name: 显示主机变量
     debug: msg= "The server ip is {{ inventory_hostname }},The key is {{ key }}"
#执行playbook,查看主机变量是否正常显示
[root@nfs-server playbook] # ansible-playbook hosts_vars.yml 
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.111]
ok: [192.168.2.101]
 
TASK [显示主机变量] ************************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The server ip is 192.168.2.101,The key is 101"
}
ok: [192.168.2.111] => {
     "msg" "The server ip is 192.168.2.111,The key is 111"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0

2.主机组变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#在配置文件中定义主机组变量
[root@nfs-server playbook] # cat /etc/ansible/hosts
[webservers]
192.168.2.101 
192.168.2.111 
[webservers:vars]
ansiber_version=2.3
key=nginx
#写playbook,测试主机组变量
[root@nfs-server playbook] # cat hosts_group_vars.yml
---
- hosts: webservers
   remote_user: root
   tasks:
   - name:  "显示主机组变量"
     debug: msg= "The server ip is {{ inventory_hostname }},The key is {{ key }}"
#执行playbook,查看主机组变量是否正常显示
[root@nfs-server playbook] # ansible-playbook hosts_group_vars.yml
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.111]
ok: [192.168.2.101]
 
TASK [显示主机组变量] *****************************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The server ip is 192.168.2.101,The key is nginx"
}
ok: [192.168.2.111] => {
     "msg" "The server ip is 192.168.2.111,The key is nginx"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0

3.通过/etc/ansible下的文件定义主机以及主机组变量

主机变量目录:host_vars(注:需要在此目录下为每个主机创建一个文件,在此文件中定义变量)

组变量目录:group_vars(注:需要在此目录下创建一个以主机组名命名的文件,在此文件中定义变量)

注:以上两个目录均不存在,需要自己手动创建;mkdir /etc/ansible/{host_vars,group_vars}

注:当需要为所有主机或者所有主机组创建一样的变量时,在host_vars和group_vars目录下,创建all文件并写入变量即可~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#在配置文件中定义主机组变量
[root@nfs-server playbook] # cat /etc/ansible/hosts
[webservers]
192.168.2.101 
192.168.2.111 
#在host_vars目录下创建以主机名为名字的文件,并在此文件中配置变量,变量格式为: key: value
[root@nfs-server ansible] # head host_vars/*
==> host_vars /192 .168.2.101 <==
key: 101
 
==> host_vars /192 .168.2.111 <==
key: 111
#在group_vars目录创建以主机组为名字的文件,并在此文件中配置变量,变量格式为:key: value
[root@nfs-server ansible] # head group_vars/*
name: nginx
#测试主机变量:利用上面写的主机变量playbook进行测试
[root@nfs-server playbook] # ansible-playbook hosts_vars.yml
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.111]
ok: [192.168.2.101]
 
TASK [显示主机变量和主机组变量] ************************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The server ip is 192.168.2.101,The key is 101"
}
ok: [192.168.2.111] => {
     "msg" "The server ip is 192.168.2.111,The key is 111"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0   
#测试主机组变量:利用上面写的主机组变量playbook进行测试(把key名字改为了name)
[root@nfs-server playbook] # ansible-playbook hosts_group_vars.yml
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.101]
ok: [192.168.2.111]
 
TASK [显示主机组变量] *****************************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The server ip is 192.168.2.101,The application is nginx"
}
ok: [192.168.2.111] => {
     "msg" "The server ip is 192.168.2.111,The application is nginx"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0

4.通过命令行传入变量,或者变量文件

-e,--extra-vars:此参数表示从命令行传入变量

-e "key=value":直接传递变量的格式

-e "@vars.yml":传递变量文件的格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#在playbook中引用一个key为YOURNAME,此key通过命令行传入
[root@nfs-server playbook] # cat hosts_vars.yml 
---
- hosts: webservers
   remote_user: root
   tasks:
   - name: 显示主机变量和主机组变量
     debug: msg= "The server ip is {{ inventory_hostname }},The key is {{ YOURNAME }}"
[root@nfs-server playbook] # ansible-playbook hosts_vars.yml -e "YOURNAME=liuzhengwei"
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.101]
ok: [192.168.2.111]
 
TASK [显示主机变量和主机组变量] ************************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The server ip is 192.168.2.101,The key is liuzhengwei"
}
ok: [192.168.2.111] => {
     "msg" "The server ip is 192.168.2.111,The key is liuzhengwei"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0 
#在playbook中引用一个key为YOURNAME,此key通过提前定义的变量文件传入
#下面文件为变量文件
[root@nfs-server playbook] # cat vars/vars.yml 
abc: LIUZHENGWEI
#通过命令行将此变量文件传入
[root@nfs-server playbook] # ansible-playbook hosts_vars.yml -e "@vars/vars.yml"
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.111]
ok: [192.168.2.101]
 
TASK [显示主机变量和主机组变量] ************************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The server ip is 192.168.2.101,The key is LIUZHENGWEI"
}
ok: [192.168.2.111] => {
     "msg" "The server ip is 192.168.2.111,The key is LIUZHENGWEI"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0

5.在playbook文件中定义变量:格式为key: value

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#在playbook文件中定义变量abc
[root@nfs-server playbook] # cat hosts_vars.yml
---
- hosts: webservers
   remote_user: root
   vars:
     abc: liuzhengwei
   tasks:
   - name: 显示主机变量和主机组变量
     debug: msg= "The server ip is {{ inventory_hostname }},The key is {{ abc }}"
#执行playbook测试变量是否生效
[root@nfs-server playbook] # ansible-playbook hosts_vars.yml
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.111]
ok: [192.168.2.101]
 
TASK [显示主机变量和主机组变量] ************************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The server ip is 192.168.2.101,The key is liuzhengwei"
}
ok: [192.168.2.111] => {
     "msg" "The server ip is 192.168.2.111,The key is liuzhengwei"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0

6.在playbook文件中引用定义了变量的文件:vars_files

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#在playbook文件中引用定义了变量的文件vars/vars.yml
[root@nfs-server playbook] # cat vars/vars.yml 
abc: LIUZHENGWEI
[root@nfs-server playbook] # cat hosts_vars.yml 
---
- hosts: webservers
   remote_user: root
   vars_files:
     - vars /vars .yml
   tasks:
   - name: 显示主机变量和主机组变量
     debug: msg= "The server ip is {{ inventory_hostname }},The key is {{ abc }}"
#执行playbook测试变量是否生效
[root@nfs-server playbook] # ansible-playbook hosts_vars.yml
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.101]
ok: [192.168.2.111]
 
TASK [显示主机变量和主机组变量] ************************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The server ip is 192.168.2.101,The key is LIUZHENGWEI"
}
ok: [192.168.2.111] => {
     "msg" "The server ip is 192.168.2.111,The key is LIUZHENGWEI"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0

7.使用register内的变量

ansible playbook内task之间可以互相传递变量,比如我们总共有2个tasks,其中第2个task是否执行需要判断第一个task运行后的结果,这个时候我们就得在task之间传递数据,需要把第一个task执行的结果传递给第2个task.Ansible task之间传递数据使用register方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#注:这是第1个task把执行hostname的结果register给info这个变量
[root@nfs-server playbook] # cat register_var.yml 
---
- hosts: webservers
   remote_user: root
   tasks:
   - name: register variables
     shell:  hostname
     register: info
   - name: display variables
     #debug: msg="The variable is {{ info['stdout'] }}"
     debug: msg= "The variable is {{ info.stdout }}"
#注:register返回结果是字典的方式,所以用info.stdout或info['stdout']的方式返回结果
[root@nfs-server playbook] # ansible-playbook register_var.yml
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.101]
ok: [192.168.2.111]
 
TASK [register variables] ******************************************************************************************************************************
changed: [192.168.2.101]
changed: [192.168.2.111]
 
TASK [display variables] *******************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "The variable is lamp1"
}
ok: [192.168.2.111] => {
     "msg" "The variable is lamp2"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=3    changed=1    unreachable=0    failed=0   
192.168.2.111              : ok=3    changed=1    unreachable=0    failed=0

8.使用vars_prompt传入变量(vars_prompt是以交互式的方式给定义好的参数传入变量值)

注:交互式传入的变量值可以是加密的也可以是不加密的,用private进行定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#交互式输入变量值,传递给tasks,private=no表示输入的变量值不加密,private=yes表示加密
[root@nfs-server playbook] # cat vars_prompt.yml 
---
- hosts: all
   remote_user: root
   vars_prompt:
   - name:  "one"
     prompt:  "please input one value"
     private: no
   - name:  "two"
     prompt:  "please input two value"
     private:  yes
   tasks:
   - name: display one value
     debug: msg= "one value is {{ one }}"
   - name: display two value
     debug: msg= "two value is {{ two }}"
[root@nfs-server playbook] # ansible-playbook vars_prompt.yml 
please input one value: Liu Zhengwei
please input two value: 
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.101]
ok: [192.168.2.111]
 
TASK [display one value] *******************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "one value is Liu Zhengwei"
}
ok: [192.168.2.111] => {
     "msg" "one value is Liu Zhengwei"
}
 
TASK [display two value] *******************************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "two value is age is 28"
}
ok: [192.168.2.111] => {
     "msg" "two value is age is 28"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=3    changed=0    unreachable=0    failed=0   
192.168.2.111              : ok=3    changed=0    unreachable=0    failed=0
本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1962244如需转载请自行联系原作者                                                  weilovepan520
相关文章
|
3月前
|
JSON 数据格式 索引
Ansible fact变量与魔法变量
Ansible fact变量与魔法变量
54 6
|
3月前
|
存储 网络安全 数据安全/隐私保护
Ansible的变量
Ansible的变量
34 6
|
缓存 运维 监控
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
304 0
|
存储 JSON 数据安全/隐私保护
ansible定义变量和管理事实
ansible定义变量和管理事实
146 0
|
存储 缓存 监控
【2023】ansible-variables变量详解
【2023】ansible-variables变量详解
122 0
Ansible 自定义变量与 role 默认变量的合并方法
如果你遇到 failed to combine variables, expected dicts but got a &#39;NoneType&#39; and a &#39;dict&#39; 这样的报错,你可以看看本文。
300 0
|
存储 JSON 缓存
ansible学习之旅(facts变量)
ansible学习之旅(facts变量)
165 0
ansible学习之旅(初识变量)
ansible学习之旅(初识变量)
80 0
|
关系型数据库 MySQL 应用服务中间件
|
Shell 网络安全 数据安全/隐私保护
ansible主机清单配置以及变量解释(二)
1.配置ansible主机清单 清单文件位于/etc/ansible/hosts
552 0
ansible主机清单配置以及变量解释(二)