1. ansible-playbook變量定義與使用
- 命令行
- 在Inventory中定義
- 在Playbook中定義
- 在Role中定義
- 注冊變量(register)
- 系統信息變量(facts)
2. 在命令行中定義變量
2.1) 案例編寫playbook中定義,變量命令行傳參
1 [root@test-1 bin]# vim veriable.yaml 2 [root@test-1 bin]# cat veriable.yaml 3 --- 4 - hosts: web1 5 gather_facts: no 6 remote_user: root 7 8 9 tasks: 10 - name: test var 11 debug: msg="{{work_dir}}"
2.2) 執行playbook變量命令傳參
1 [root@test-1 bin]# ansible-playbook veriable.yaml -e work_dir=/usr/local 2 3 PLAY [web1] ****************************************************************************************************************************************************************************************************************************************************************** 4 5 TASK [test var] ************************************************************************************************************************************************************************************************************************************************************** 6 ok: [192.168.200.132] => { 7 "msg": "/usr/local" 8 } 9 ok: [192.168.200.133] => { 10 "msg": "/usr/local" 11 } 12 13 PLAY RECAP ******************************************************************************************************************************************************************************************************************************************************************* 14 192.168.200.132 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 15 192.168.200.133 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3. 在inventory中定義變量
是在通過hosts文件里定義變量
1 [WebServer] 2 app[01:03].imzcy.cn 3 4 5 [DB] 6 db-[a:c].imzcy.com 7 8 9 192.168.109.[131:133]
4. 在Playbook中定義變量
4.1)編寫Playbook定義變量
1 [root@test-1 bin]# vim playbook.yaml 2 [root@test-1 bin]# cat playbook.yaml 3 --- 4 - hosts: web1 5 gather_facts: no 6 remote_user: root 7 vars: 8 - work_dir: /usr/local 9 - nginx_version: 1.15 10 11 tasks: 12 - name: install nginx 13 debug: msg="{{work_dir}}/nginx/{{nginx_version}}"
4.2) 執行playbook配置文件語法檢測
1 [root@test-1 bin]# ansible-playbook --syntax-check playbook.yaml 2 3 playbook: playbook.yaml
4.3) 執行playbook變量文件傳參
1 [root@test-1 bin]# ansible-playbook playbook.yaml 2 3 PLAY [web1] ************************************************************************************************************************************ 4 5 TASK [install nginx] *************************************************************************************************************************** 6 ok: [192.168.200.132] => { 7 "msg": "/usr/local/nginx/1.15" 8 } 9 ok: [192.168.200.133] => { 10 "msg": "/usr/local/nginx/1.15" 11 } 12 13 PLAY RECAP ************************************************************************************************************************************* 14 192.168.200.132 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 15 192.168.200.133 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
5. 在Role中定義
1 [root@test-1 vars]# vim /ansible/roles/nginx/vars/main.yaml 2 [root@test-1 vars]# cat /ansible/roles/nginx/vars/main.yaml 3 --- 4 #nginx 5 nginx_version: 1.16.1 6 http_port: 80 7 server_name: test-www.scajy.cn
6. 注冊變量(register)
6.1)編寫register注冊變量
1 [root@test-1 bin]# vim register.yaml 2 [root@test-1 bin]# cat register.yaml 3 --- 4 - hosts: web1 5 gather_facts: no 6 remote_user: root 7 vars: 8 - work_dir: /usr/local 9 - nginx_version: 1.15.1 10 11 tasks: 12 - name: register var 13 command: date +"%F_%T" 14 register: datetime 15 16 - name: touch file 17 file: 18 dest: /tmp/r_{{datetime.stdout}} 19 state: touch
6.2) 檢查語法是否錯誤
1 [root@test-1 bin]# ansible-playbook --syntax-check register.yaml 2 3 playbook: register.yaml
6.3) 執行register配置文件
1 [root@test-1 bin]# ansible-playbook register.yaml 2 3 PLAY [web1] ************************************************************************************************************************************ 4 5 TASK [register var] **************************************************************************************************************************** 6 changed: [192.168.200.133] 7 changed: [192.168.200.132] 8 9 TASK [touch file] ****************************************************************************************************************************** 10 changed: [192.168.200.133] 11 changed: [192.168.200.132] 12 13 PLAY RECAP ************************************************************************************************************************************* 14 192.168.200.132 : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 15 192.168.200.133 : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
6.4) 驗證tmp下是否創建了文件
1 [root@test-1 bin]# ansible web1 -m shell -a "ls -a /tmp |grep r_*" 2 192.168.200.132 | CHANGED | rc=0 >> 3 apache-tomcat-8.5.38.tar.gz 4 hsperfdata_root 5 r_2019-08-25_11:04:53 6 7 8 192.168.200.133 | CHANGED | rc=0 >> 9 apache-tomcat-8.5.38.tar.gz 10 hsperfdata_root 11 r_2019-08-25_11:04:53
7. 系統信息變量(facts)
1 --- 2 - hosts:webservers 3 tasks: 4 - debug: 5 msg: {{group_names}} #打印ansible的host組 6 - debug: 7 msg: {{inventory_hostname}} #打印詳細的host主機 8 - debug: 9 msg: {{ansible_hostname}} #配合gather_facts: yes 開啟收集系統信息