ansible變數
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 |
相關文章
- Ansible fact變數與魔法變數變數
- ansible 設定環境變數變數
- ansible設定環境變數變數
- ansible取出register變數中最長字串變數字串
- ansible 變數優先順序示例變數
- Linux架構27 Ansible變數, 定義變數的方式, 變數註冊, facts快取Linux架構變數快取
- 【ansible】關於ansible執行過程中載入環境變數問題變數
- 你需要會的ansible-playbook劇本這6種變數變數
- Linux架構26 playbook實戰, 安裝資料庫, 網站遷移, ansible變數Linux架構資料庫網站變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 變數的分類(臨時(本地)變數、環境變數、全域性變數和系統變數)變數
- ansible
- iOS 靜變數static、全域性變數extern、區域性變數、例項變數iOS變數
- 【Ansible】ansible任務失敗控制
- 變數變數
- Oracle中的替換變數,&變數名,&&變數名說明Oracle變數
- linux基礎——shell變數(本地變數和環境變數)Linux變數
- 【Ansible】ansible容器學習環境搭建
- ansible高階應用ansible-vault
- Ansible學習筆記-Ansible安裝筆記
- python變數與變數作用域Python變數
- ODI第7節-變數(一):變數變數
- ansible register
- Ansible——模組
- Ansible Playbook
- ansible模組
- Ansible教程
- ansible template
- 引數和變數變數
- 全域性變數與區域性變數變數
- 靜態變數和非靜態變數變數
- ODI第10節-變數(四):變數使用變數
- 成員變數和區域性變數變數
- C語言區域性變數、全域性變數、靜態區域性變數、靜態全域性變數C語言變數
- 二、變數變數
- 變數提升變數
- 變數1變數
- 位置變數變數