ansible變數

weixin_34115824發表於2017-11-21

    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

相關文章