ansible-playbook中使用變量的方式有以下幾種。
1、在/etc/ansible/hosts中定義,如下:
[testhost]
192.168.217.120 package=httpd # 普通變量
192.168.217.121 package=git
[testhost:vars]
package=httpd # 組變量
在這種方式中,普通變量的優先級高於組變量的優先級。組變量主要用於在主機組內的主機都使用相同的變量的情況下。
驗證這個變量是否生效:
[root@localhost playbook]# ansible testhost -a "echo {{ package }}"
192.168.217.121 | SUCCESS | rc=0 >>
git
192.168.217.120 | SUCCESS | rc=0 >>
httpd
在play-book中引用變量安裝相應的包:
[root@localhost playbook]# cat var_hosts.yml
---
- hosts: testhost
remote_user: root
tasks:
- name: install package
yum: name={{ package }} state=present
執行ansible-playbook
[root@localhost playbook]# ansible-playbook var_hosts.yml
PLAY [testhost] ************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [192.168.217.121]
ok: [192.168.217.120]
TASK [install package] ****************************************************************************************************************************
ok: [192.168.217.121]
changed: [192.168.217.120]
PLAY RECAP *****************************************************************************************************************************************
192.168.217.120 : ok=2 changed=1 unreachable=0 failed=0
192.168.217.121 : ok=2 changed=0 unreachable=0 failed=0
2、在play-book中定義
[root@localhost playbook]# cat var.yml
---
- hosts: dbservers
vars:
package: git
tasks:
- name: install package
yum: name=git state=present
執行ansible-playbook便可得到 驗證:
[root@localhost playbook]# ansible-playbook -C var.yml
PLAY [dbservers] ***********************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [192.168.217.121]
TASK [install package] *****************************************************************************************************************************
ok: [192.168.217.121]
PLAY RECAP *****************************************************************************************************************************************
192.168.217.121 : ok=2 changed=0 unreachable=0 failed=0
3、將變量寫入文件文件中:
此時對目錄結構有要求
[root@localhost playbook]# cd /etc/ansible/
[root@localhost ansible]# tree
.
├── ansible.cfg
├── group_vars
│ └── testhost.yaml
├── hosts
├── host_vars
│ └── 192.168.217.120.yaml
└── roles
3 directories, 4 files
[root@localhost ansible]# cat group_vars/testhost.yaml
mysql_port: 3307
[root@localhost ansible]# cat host_vars/192.168.217.120.yaml
mysql_port: 3306
[root@localhost ansible]# ansible testhost -a "echo {{ mysql_port }}"
192.168.217.121 | SUCCESS | rc=0 >>
3307
192.168.217.120 | SUCCESS | rc=0 >>
3306