第一种方式: 在play中定义 类似数组方式
[root@m01 ansible]#cat vars.yml
- hosts: web01
vars:
packages: # 变量的名称 自定义
- wget # 变量的值 如果有多个则使用列表的方式
- lrzsz
- tree
tasks:
- name: Install all Packages
yum:
name: "{{ packages }}" # 调用变量
state: absent
安装软件:
[root@m01 ansible]#cat vars.yml
- hosts: web01
vars:
packages:
- wget
- lrzsz
- tree
tasks:
- name: Install all Packages
yum:
name: "{{ packages }}"
state: present
第二种方式: 类似shell边的方式 一个变量名称对应一个值
[root@m01 ansible]#cat vars.yml
- hosts: web01
vars: # 使用列表的方式创建变量
- pack1: wget # 一个名称对应一个值
- pack2: lrzsz
- pack3: tree
tasks:
- name: Install all Packages
yum:
name:
- "{{ pack1 }}"
- "{{ pack2 }}"
- "{{ pack3 }}"
state: present
注意:
[root@m01 ansible]#cat vars.yml
- hosts: web01
vars:
- ngx_ver: v1.1
- ngx_dir: web01
tasks:
- name: Install all Packages
file:
path: "{{ ngx_dir }}_{{ ngx_ver }}" # 调用变量如果没有路径则加双引号
state: touch
[root@m01 ansible]#cat vars.yml
- hosts: web01
vars:
- ngx_ver: v1.1
- ngx_dir: web01
tasks:
- name: Install all Packages
file:
path: /tmp/{{ ngx_dir }}_{{ ngx_ver }} # 调用变量如果带路径不需要加双引号
state: touch
第三种定义方式: 在文件中定义变量 在play中引用变量
[root@m01 ansible]#cat test.yml
package1: tree
package2: wget
package3: lrzsz
调用变量:
[root@m01 ansible]#cat vars.yml
- hosts: web01
vars_files: ./test.yml
tasks:
- name: Install all Packages
yum:
name:
- "{{ package1 }}"
- "{{ package2 }}"
- "{{ package3 }}"
state: present
客户端IP取值方式: 两种写法
第一种:
"{{ ansible_default_ipv4['address'] }}"
第二种:
"{{ ansible_default_ipv4.address }}"
在task中直接调用客户端变量
[root@m01 ansible]#cat vars.yml
- hosts: web_servers
tasks:
- name: Install all Packages
file:
name: "{{ ansible_hostname }}_{{ ansible_default_ipv4['address'] }}"
state: directory
在play中先定义 在task中在调用
[root@m01 ansible]#cat vars.yml
- hosts: web_servers
vars:
- ip: "{{ ansible_default_ipv4['address'] }}"
- hostname: "{{ ansible_hostname }}"
tasks:
- name: Install all Packages
file:
name: "{{ hostname }}_{{ ip }}"
state: directory
第四种定义方式: 在inventory主机清单定义
第五种定义方式: 官方推荐
在执行plabybook的目录创建
group_vars host_vars
在hosts_vars目录下创建 以单个主机名称命名的文件
在group_vars目录下创建以组名称命名的文件
[root@m01 ansible]#cat group_vars/web_servers
test: wget
[root@m01 ansible]#cat host_vars/web01
package1: lrzsz
[root@m01 ansible]#cat vars.yml
- hosts: web_servers
tasks:
- name: Install all Packages
file:
name: "{{ test }}.txt"
state: touch