[toc]
ansible定义变量
1.ansible定义变量
1.1 在playbook中的play进行定义
在yml文件中通过 vars
关键字定义变量,引用变量使用 {{}}
vars:
- 变量名1: 变量值1
- 变量名2: 变量值2
使用示例
- hosts: all
vars:
- pkg_name1: httpd
- pkg_name2: nginx
tasks:
- name: install httpd
yum:
name:
- "{{ pkg_name1 }}"
- "{{ pkg_name2 }}"
state:
present
在playbook中还可以通过 vars_files
关键字引用变量文件
vars_files: 变量文件
编辑一个变量文件
pkg_name1: httpd
pkg_name2: nginx
在yml文件使用关键字 vars_files
引用变量文件
- hosts: devops02
vars_files:
./vars_pub.yml
tasks:
- name: install httpd nginx
yum:
name:
- "{{ pkg_name1 }}"
- "{{ pkg_name2 }}"
state:
present
1.2 通过inventory主机清单进行定义
在inventory主机清单中通过 [组名:vars]
定义变量,这个变量既可以在inventory中引用,也可以在playbook中引用
[all_server:vars]
ansible_ssh_user=ops
ansible_ssh_port=2233
ansible_ssh_private_key_file=/home/ops/.ssh/id_rsa_ops
ansible_become=true
ansible_become_method=sudo
ansible_become_user=root
[all_server]
devops01
devops02
1.2.1 group_vars
与 host_vars
官方推荐在项目目录下,创建两个变量目录 host_vars
、group_vars
,在这2个目录下存放变量的文件
-
在组(group_vars)下面创建一个和inventory中组名相同的变量文件,那么inventory中某个组下面的主机就会引用
group_vars
目录下与组名同名的变量文件中的变量 -
在主机(host_vars)下面创建一个和inventory中主机名相同的变量文件,那么invertory中的某个主机就会引用
host_vars
目录下和主机同名的变量文件中的变量
1.2.1.1 group_vars
使用示例
在项目下创建 group_vars
目录
mkdir group_vars
项目下hosts文件内容如下
[devops]
devops01
devops02
在 group_vars
目录下创建与组名同名的文件并写入变量
cat > group_vars/devops <<EOF
pkg_name1: nginx
pkg_name2: httpd
EOF
编辑yml文件
cat > vars01.yml <<EOF
- hosts: devops
tasks:
- name: install httpd nginx
yum:
name:
- "{{ pkg_name1 }}"
- "{{ pkg_name2 }}"
state:
present
EOF
执行playbook,可以看到在yml文件中没有指定变量文件的情况下会自动读取 group_vars
目录下与invertory中组名同名的变量文件中的变量
$ ansible-playbook vars01.yml -i hosts
PLAY [devops] ******************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [devops02]
ok: [devops01]
TASK [install httpd nginx] *****************************************************************************************************************************
ok: [devops02]
ok: [devops01]
PLAY RECAP *********************************************************************************************************************************************
devops01 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
devops02 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0