学习目标:
能够学会在写playbook时定义和使用变量
学习内容:
playbook中变量的使用
- 变量名:仅能由字母、数字和下划线组成,且只能以字母开头
- 变量来源:
通过命令行指定变量的样例
[root@zabbix_server ansible]# cat install.yml
---
- hosts: LYP
remote_user: root
tasks:
- name: install package
yum: name={{ pkname1 }}
- name: install package
yum: name={{ pkname2 }}
[root@zabbix_server ansible]# ansible-playbook -e 'pkname1=httpd pkname2=vsftpd' install.yml
或
[root@zabbix_server ansible]# ansible-playbook -e 'pkname1=httpd' -e 'pkname2=vsftpd' install.yml
执行的效果一样,如下:
PLAY [LYP] **************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [172.28.102.130]
ok: [172.28.102.131]
TASK [install package] **************************************************************************************************************************************************************************************
ok: [172.28.102.130]
ok: [172.28.102.131]
TASK [install package] **************************************************************************************************************************************************************************************
ok: [172.28.102.130]
ok: [172.28.102.131]
PLAY RECAP **************************************************************************************************************************************************************************************************
172.28.102.130 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.28.102.131 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
**在playbook中定义样例**
[root@zabbix_server ansible]# cat install2.yml
---
- hosts: LYP
remote_user: root
vars:
- pkname1: httpd
- pkname2: vsftpd
tasks:
- name: install package
yum: name={{ pkname1 }}
- name: install package
yum: name={{ pkname2 }}
普通变量样例
[root@zabbix_server ansible]# cat hostname.yaml
---
- hosts: LYP
remote_user: root
tasks:
- name: set hostname
hostname: name=www{{ http_port }}.com
[root@zabbix_server ansible]# tail -n 5 /etc/ansible/hosts
[LYP]
#172.28.102.130 ansible_user=root ansible_ssh_pass=Cm146688!
#172.28.102.131 ansible_user=root ansible_ssh_pass=Cm146688!
172.28.102.130 http_port=81
172.28.102.131 http_port=82
公共组变量定义样例
[root@zabbix_server ansible]# cat hostname.yaml
---
- hosts: LYP
remote_user: root
tasks:
- name: set hostname
hostname: name={{ name1 }}{{ http_port }}.{{ name2 }}
[root@zabbix_server ansible]# tail -9 /etc/ansible/hosts
[LYP]
#172.28.102.130 ansible_user=root ansible_ssh_pass=Cm146688!
#172.28.102.131 ansible_user=root ansible_ssh_pass=Cm146688!
172.28.102.130 http_port=81
172.28.102.131 http_port=82
[LYP:vars]
name1=web
name2=com
使用变量文件
[root@zabbix_server ansible]# cat vars.yml
var1: httpd
var2: vsftpd
[root@zabbix_server ansible]# cat test.yml
---
- hosts: LYP
remote_user: root
vars_files:
- vars.yml
tasks:
- name: create file
file: name=/home/test2/{{ var1 }}.log state=touch
- name: crete file2
file: name=/home/test2/{{ var2 }}.log state=touch
[root@zabbix_server ansible]# ansible-playbook test.yml
PLAY [LYP] **************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [172.28.102.130]
ok: [172.28.102.131]
TASK [create file] ******************************************************************************************************************************************************************************************
changed: [172.28.102.131]
changed: [172.28.102.130]
TASK [crete file2] ******************************************************************************************************************************************************************************************
changed: [172.28.102.130]
changed: [172.28.102.131]
PLAY RECAP **************************************************************************************************************************************************************************************************
172.28.102.130 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.28.102.131 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@zabbix_server ansible]# ansible LYP -m shell -a 'ls /home/test2/'
172.28.102.130 | CHANGED | rc=0 >>
httpd.log
vsftpd.log
172.28.102.131 | CHANGED | rc=0 >>
httpd.log
vsftpd.log