变量调用方式

bash
通过{{ variable_name }} 调用变量,且变量名前后建议加空格,有时用"{{ variable_name }}"才生效。因为使用 {{ }} 直接调用时,有时 variable 变量内存在特殊字符,所以使用 "{{ }}" 可以忽略特殊字符。

变量来源

  1. ansible 的 setup facts 远程主机的所有变量都可直接调用
  2. 通过命令行指定变量,优先级最高
yaml
ansible-playbook -e variables_name=var playbook.yaml
  1. 在playbook文件中定义
yaml
vars:
  - var1: value1
  - var2: value2
  1. 在独立的变量YAML文件中定义
yaml
- hosts: all
  vars_files:
    - vars.yml
  1. 在 /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]            # 作用域在整个主机清单
  1. 在 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