一、Playbook中使用变量
变量名仅能由字母、数字和下划线组成,且只能以字母开头
- 1、变量定义:
- variable=value
- 例: http_port=80
- 2、变量调用方式:
- 通过{{ variable_name }} 调用变量,且变量名前后建议加空格,有时用“{{ variable_name }}”才生效
变量来源
- 1.ansible 的 setup facts 远程主机的所有变量都可直接调用
- 2.通过命令行指定变量,优先级最高
ansible-playbook -e varname=value
- 3.在playbook文件中定义
vars:
- var1: value1
- var2: value2
- 4.在独立的变量YAML文件中定义
- hosts: all
vars_files:
- vars.yml
- 5.在 /etc/ansible/hosts 中定义
- 主机(普通)变量:主机组中主机单独定义,优先级高于公共变量
- 组(公共)变量:针对主机组中所有主机定义统一变量
- 6.在role中定义
使用 setup 模块中变量
[root@Ansible ~]# cat var.yml
---
- name: varl
hosts: all
gather_facts: yes
tasks:
- name: create log file
file: name=/data/{{ ansible_nodename }}.log state=touch owner=t1 mode=600
- 受控端主机:
[root@CentOSA data]# ll -lh
total 0
-rw-------. 1 t1 root 0 Feb 25 16:48 CentOSA.log
[root@CentOSB data]# ll -lh
total 0
-rw-------. 1 t1 root 0 Feb 25 16:47 CentOSB.log
在playbook 命令行中定义变量
[root@Ansible ~]# cat var2.yml
---
- name: var2
hosts: all
tasks:
- name: install package
yum: name={{ pkname }} state=present
在playbook文件中定义变量
[root@Ansible ~]# cat var3.yml
---
- name: var3
hosts: all
vars:
- username: user1
- groupname: group1
tasks:
- name: create group
group: name={{ groupname }} state=present
- name: create user
user: name={{ username }} group={{ groupname }} state=present
使用变量文件
- 在一个独立的playbook文件中定义变量,在另一个playbook文件中引用变量文件中的变量,比playbook中定义的变量优化级高
[root@Ansible ~]# cat /root/vars.txt
package_name: mariadb-server
service_name: mariadb
[root@Ansible ~]# cat var4.yml
---
- name: var3
hosts: all
vars_files:
- /root/vars.txt
tasks:
- name: install package
yum: name={{ package_name }}
tags: install
- name: start service
service: name={{ service_name }} state=started enabled=yes
[root@Ansible ~]# cat vars2.yml
---
var1: httpd
var2: nginx
[root@Ansible ~]# cat var5.yml
---
- name: var5
hosts: all
vars_files:
- vars2.yml
tasks:
- name: create httpd log
file: name=/opt/{{ var1 }}.log state=touch
- name: create nginx log
file: name=/opt/{{ var2 }}.log state=touch
[root@CentOSA opt]# ll -lh *.log
-rw-r--r--. 1 root root 0 Feb 25 20:17 httpd.log
-rw-r--r--. 1 root root 0 Feb 25 20:17 nginx.log
[root@CentOSB opt]# ll -lh *.log
-rw-r--r--. 1 root root 0 Feb 25 20:17 httpd.log
-rw-r--r--. 1 root root 0 Feb 25 20:17 nginx.log
主机清单文件中定义变量
- 主机变量:
- 在inventory 主机清单文件中为指定的主机定义变量以便于在playbook中使用
- 例
[websrvs]
www1.magedu.com http_port=80 maxRequestsPerChild=808
www2.magedu.com http_port=8080 maxRequestsPerChild=909
- 组(公共)变量
- 在inventory 主机清单文件中赋予给指定组内所有主机上的在playbook中可用的变量,如果和主机变是同名,优先级低于主机变量
[websrvs]
www1.magedu.com
www2.magedu.com
[websrvs:vars]
ntp_server=ntp.magedu.com
nfs_server=nfs.magedu.com
[websrvs]
192.168.0.101 hname=www1 domain=magedu.io
192.168.0.102 hname=www2
[websvrs:vars]
mark=“-”
domain=magedu.org
ansible websvrs –m hostname –a ‘name={{ hname }}{{ mark }}{{ domain }}’
bash
#命令行指定变量:
ansible websvrs –e domain=magedu.cn –m hostname –a ‘name={{ hname }}{{ mark }}{{ domain }}’