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