ansible的变量及JINJA2模板、加密控制
一、变量的设定
1、变量的命名规则:
(1)只能包含数字,下划线,字母;
(2)只能用下划线或字母开头;
(3)ansible内置的关键字不能作为变量名。
2、变量的级别:
全局 | 从命令行或配置文件中设定的 |
play |
在play 和相关结构中设定 |
主机 | 由清单,事实收集或注册的任务 |
3、变量优先级:
全局 > play
> 主机
二、变量的使用方式
- 这里使用循环定义的方式,使用
loop
和item
实现循环执行
1、在playbook中直接定义变量
定义变量,为远程主机添加用户
vim skk.yml
---
- name: test
hosts: server2
vars: ##定义变量
user:
- aaa
- bbb
tasks:
- name: useradd
user:
name: "{
{ item }}" ##循环每一个变量
state: present
loop: ##与 user同一级别
"{
{ user }}" ##定义循环的变量
2、在文件中定义变量
定义变量
vim userdel.yml
---
user: ##定义变量名称
- aaa
- bbb
- lee
使用变量删除远程主机的多个用户
vim skk.yml
---
- name: test
hosts: server2
vars_files: ##定义变量文件
- ./userdel.yml ##定义变量文件位置
tasks:
- name: userdel
user:
name: "{
{ item }}" ##循环每一个变量
state: absent
remove: yes
loop:
"{
{ user }}" ##定义循环的变量
远程主机查看,用户已被删除
3、设定主机变量和清单变量
清单:定义demo
组的USER
变量为devops
vim inventory
[demo]
server2
172.25.36.2
[demo:vars] ##定义清单组的变量
USER=devops
编写playbook,输出USER
变量
vim debug.yml
---
- name: test
hosts: server2
tasks:
- name: debug
debug:
msg: "{
{ USER }}"
4、目录设定变量
group_vars |
清单变量,目录中的文件名称与主机清单名称一致 |
host_vars |
主机变量,目录中的文件名称与主机名称一致 |
cat inventory
[demo]
server2
172.25.36.2
执行上面编写的
debug.yml
,使输出变化
5、用命令覆盖变量
改变输出为linux
ansible-playbook debug.yml -e "USER=linux"