一、playbook变量
变量名:字母数字和下划线
二、变量来源
1.ansible 主机 -m setup|less所有主机都可以调用
#过滤-a 'filter=*address*'
1.1例子创建一个hostname 的log文件
ansible date -m setup -a 'filter=ansible_fqdn*'
[root@linux-node1 ansible]# cat var.yaml --- - hosts: date remote_user: root tasks: - name: create log file file: name=/data/{{ ansible_fqdn }}.log state=touch mode=600 owner=zjy
2. 在/etc/ansible/hosts
2.1 在host配置文件定义http_port变量
[root@linux-node1 ansible]# cat hostname.yaml --- - hosts: date remote_user: root tasks: - name: set hostname hostname: name=www.{{http_port}}.123
2.2为组设置固定格式
[root@linux-node1 ansible]# cat hostname1.yaml --- - hosts: date remote_user: root tasks: - name: set hostname hostname: name={{nodename}}.{{http_port}}.{{dominname}}
3、通过命令行指定变量、优先级最高
[root@linux-node1 ansible]# cat app.yaml --- - hosts: date remote_user: root tasks: - name: install package yum: name={{ pkname }} - name: start service service: name={{ pkname }} state=started enabled=yes
ansible-playbook -e 'pkname=vsftpd' app.yaml
3.1定义多个变量
[root@linux-node1 ansible]# cat app1.yaml --- - hosts: date remote_user: root tasks: - name: install package yum: name={{ pkname1 }} - name: install package yum: name={{ pkname2 }}
4、 在playbook中定义
vars:
- var1: value1
- var2: value2
[root@linux-node1 ansible]# cat app2.yaml --- - hosts: date remote_user: root vars: - pkname1: httpd - pkname2: vsftpd tasks: - name: install package yum: name={{ pkname1 }} - name: install package yum: name={{ pkname2 }}
5、定义变量文件
[root@linux-node1 ansible]# cat vars.yaml var1: httpd var2: nginx
#playbook [root@linux-node1 ansible]# cat testvar.yaml --- - hosts: date remote_user: root vars_files: - vars.yaml tasks: - name: install package yum: name={{ var1 }} - name: create file file: name=/data/{{ var2 }}.log state=touch
ansible-playbook testvar.yaml