变量命名
- 要求:
- 只能包含数字,下划线,字母
- 只能用下划线或字母开头
变量级别
全局: 从命令行或配置文件中设定的
paly: 在play和相关结构中设定的
主机: 由清单,事实收集或注册的任务
变量设定和使用方式
-
在playbook中直接定义变量
-
在文件中定义变量
变量文件的内容:
-
变量的使用格式
"{{变量名字}}""
设定主机变量和清单变量
在定义主机变量和清单变量时使用
目录设定变量
注:在使用目录设定变量时,当执行playbook时,需要变量目录所在的目录下执行
group_vars | 清单变量,目录中的文件名称与主机清单名称一致 |
---|---|
host_vars | 主机变量,目录中的文件名称与主机名称一致 |
用命令覆盖变量
ansible-playbook touch.yml -e "FILE=/mnt/westosfile"
使用数组设定变量
-
数组变量的表示形式
- {{顶层数组…}}
- {{顶层数组[‘次级’][‘下一级’]}}
-
在Playbook中定义数组变量
测试结果 :
-
在文件中定义变量数组
文件:
playbook:
测试:
注册变量
- register 把模块输出注册到指定字符串中
playbook:
测试:
事实变量
定义:事实变量是ansible在受控主机中自动检测出的变量,事实变量中还有与主机相关的信息,当需要使用主机相关信息时不需要采集赋值,直接调用即可,因为变量信息为系统信息所以不能随意设定仅为采集信息,故被称为事实变量
- 常用的事实变量:
ansible_facts.enp1s0.ipv4.address 受控主机的ipv4地址 ansible_facts.fqdn 受控主机的hostname
魔法变量
hostvars | ansible软件的内部信息 |
---|---|
group_names | 当前受管主机所在组 |
groups | 列出清单中所有的组和主机 |
inventory_hostname | 包含清单中配置的当前授管主机的名称 |
- 示例
-
变量在playbook的表示形式
-
用JINJA2模板对受控主机的本地解析文件,自动更新
-
JINJA2模板
介绍:Jinja2是Python下一个被广泛应用的模版引擎
他的设计思想来源于Django的模板引擎,
并扩展了其语法和一系列强大的功能。
其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能
-
j2模板的书写格式
-
for循环
vim test.j2
{% for NAME in users %}
{{ NAME }}
{%endfor%}vim users.yml
--- - name: test hosts: all vars: users: - westos - linux - haha tasks: - name: file template: src: ./users.j2 dest: /mnt/westos
测试:
-
if判定
vim users.j2
vim users.yml
测试:
-
Ansible的加密控制
-
对于新文件
加密方式:-
创建加密文件
ansible-vault create westos
-
用加密文件的方式创建加密文件
ansible-vault create westos1.yml --vault-password-file=westos-vault
-
-
对于现有文件
加密方式:-
加密现有文件
-
用加密文件的方式加密现有文件
-
-
查看加密文件
-
对于用密码加密的文件
ansible-vault view westos
-
对于用文件加密的文件
ansible-vault view --vault-password-file=westos-valut westos
-
编辑加密文件
- 对于用密码加密的文件
ansible-vault edit users.yml
- 对于用文件加密的文件,做编辑的方法
ansible-vault edit users.j2 --vault-password-file=westos-vault
- 对于用密码加密的文件
-
解密文件
ansible-vault decrypt westos 文件永久解密 ansible-vault decrypt westos --output=linux 文件解密保存为linux -
更改密码
ansible-vault rekey users.yml 更改成密码加密的文件 ansible-vault rekey users.yml --new-vault-password-file=westos 将用密码加密的文件更改成用密码加密的文件 -
playbook加密执行
- 对密码加密的文件加密执行
ansible-playbook westos.yml --ask-vault-passwd
- 对文件加密的文件加密执行
ansible-playbook users.yml --vault-password-file=westos-vault
- 对密码加密的文件加密执行