变量调用方式
bash
通过{{ variable_name }} 调用变量,且变量名前后建议加空格,有时用"{{ variable_name }}"才生效。因为使用 {{ }} 直接调用时,有时 variable 变量内存在特殊字符,所以使用 "{{ }}" 可以忽略特殊字符。
变量来源
- ansible 的 setup facts 远程主机的所有变量都可直接调用
- 通过命令行指定变量,优先级最高
yaml
ansible-playbook -e variables_name=var playbook.yaml
- 在playbook文件中定义
yaml
vars:
- var1: value1
- var2: value2
- 在独立的变量YAML文件中定义
yaml
- hosts: all
vars_files:
- vars.yml
- 在 /etc/ansible/hosts 中定义
主机(普通)变量:主机组中主机单独定义,优先级高于公共变量
bash
100.0.0.150 port=80 domain=www.dingchen.local
组(公共)变量:针对主机组中所有主机定义统一变量
bash
[mysql:vars] # 定义组名一般为 [主机组名:公共变量组名]
port=80 # 定义变量
domain=www.dingchen.local
[mysql] # 定义的主机组名
100.0.0.150
100.0.0.10
100.0.0.105
特殊公共变量
[all:vars] # 作用域在整个主机清单
- 在 role 中定义
范例
主机变量调用
创建一个变量定义的文件名,三个主机分别使用不同的变量内容
bash
1. 主机清单中定义主机变量
[mysql]
100.0.0.10 hostname=dingchen.org
100.0.0.105 hostname=dingchen.cn
2. 使用
[root@DESKTOP-NHT2EP5 ~]#ansible mysql -m file -a "state=touch name=/root/{{ hostname }}"
3. 查看创建文件名称
[root@DESKTOP-NHT2EP5 ~]#ansible mysql -m shell -a "ls /root/dingchen*"
100.0.0.10 | CHANGED | rc=0 >>
/root/dingchen.org
100.0.0.105 | CHANGED | rc=0 >>
/root/dingchen.cn
创建一个通用变量内容为二级域名,再创建一个一级域名组合,创建一个以域名为名称的文件名
bash
1. 主机文件定义
[mysql:vars]
host=dingchen
[mysql]
100.0.0.10 name=.org
100.0.0.105 name=.cn
2. 使用
[root@DESKTOP-NHT2EP5 ~]#ansible mysql -m file -a "state=touch name=/root/{{ host }}{{ name }}"
3. 查看创建文件名称
[root@DESKTOP-NHT2EP5 ~]#ansible mysql -m shell -a "ls /root/dingchen*"
100.0.0.10 | CHANGED | rc=0 >>
/root/dingchen.org
100.0.0.105 | CHANGED | rc=0 >>
/root/dingchen.cn