Ansible--4.Ansible中的变量及加密
前言
本章我们主要介绍ansible中的变量设定和使用方式,JINJA2模板的使用以及文件加密控制。
一、变量命名与级别
变量命名:
只能包括数字、下划线与字母,且数字不能开头。
变量级别:
全局变量:从命令行或配置文件中设定
play:在paly和相关结构中设定的
主机:由清单,事实手机或注册的任务
二、变量设定和使用方式
vim test.yml
ansible-playbook test.yml -e "username=haha" 命令方式设定全局变量
1.剧本定义变量:
vim test.yml
ansible-playbook test.yml
2.设定清单变量
写入清单:先读取清单,再读取剧本,当两者同时存在,剧本生效
vim inventory
[westos:vars]
username=linux
执行查看变量:
3.数组定义变量
vim userlist.yml
---
username: haha
vim test.yml
---
- name: test
vars_files: ./userlist.yml
hosts: westos1
tasks:
- name: test vars
debug:
var: username
数组设定变量:
vim userlist.yml
---
USER:
lee:
USERNAME: lee
UID: 6666
westos:
USERNAME: westos
UID: 7777
vim test.yml
---
- name: test
hosts: all
vars_files: ./userlist.yml
tasks:
- name: test vars
debug:
msg: "{{USER['lee']['USERNAME']}}{{USER['lee']['UID']}}"
ansible-playbook test.yml
5.注册变量
register 将模块输出注册到指定字符串中
vim test.yml
将hostname产生的结果注册到 msg中,再将msg的stdout输出,即可显示主机名。
6.事实变量
事实变量是ansible在受控主机中检测出的包括主机信息、内核版本、IP等与主机相关的信息。
可通过ansible westos -m setup | less
查看
例如查看ip:
gather_facts:yes 打开事实变量收集,默认为打开
gather_facts: no 关闭事实变量收集,再次执行报错
7.魔法变量
ansible的内嵌变量
ansible westos -m debug -a "var=hostvars" ansible软件内嵌信息
ansible westos -m debug -a "var=group_names" 当前受管主机所在组
ansible westos -m debug -a "var=groups" 列出清单中所有的组和主机
ansible westos -m debug -a "var=inventory_hostname" 清单中配置的当前授管主机的名称
练习:
显示所有受控主机中能够登陆的用户
vim test.yml
ansible-playbook test.yml
三、JINJA2模板
Jinja2是python的一种模板语言,是一种系统的完整的python模板语言。其设计思想来源于Django的模板引擎。
其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能。
沙箱模式: 将代码与外界隔离,不管你在箱子里做什么,都不会污染到全局。
1.jinja2书写规则
vim test.j2
{{ansible_facts['ens3']['ipv4']['address']}} {{ansible_facts['fqdn']}}
vim test.yml
---
- name: users who can log in
hosts: all
tasks:
- template:
src: ./test.j2
dest: /mnt/test
ansible-playbook test.yml
ansible westos -m shell -a 'cat /mnt/test' 查看
for循环
vim user.yml
vim test.j2
{% for NAME in users %}
{{ NAME }}
{%endfor%}
ansible-playbook test.yml
loop.index 循环迭代记数从1开始
loop.index0 循环迭代计数从0开始
vim test.j2
{% for NAME in users %}
{{loop.index}} {{ NAME }}
{%endfor%}
ansible-playbook test.yml
ansible westos -m shell -a 'cat /mnt/test'
if判定
vim users.yml
vim test.j2
{% for NAME in users %}
{% if NAME['age'] is defined %}
{{ NAME['name'] }} {{ NAME['age'] }}
{%endif%}
{% if NAME['age'] is not defined %}
{{ NAME['name'] }} unknow_age
{%endif%}
{%endfor%}
vim test.yml
ansible-playbook test.yml
四、Ansible的加密控制
ansible-vault create westos 加密并生成westos
ansible-vault encrypt westos 已存在的文件进行加密
ansible-vault view westos 查看加密文件
ansible-vault view --vault-password-file=pass westos 非交互式查看
ansible-vault edit westos 编辑加密文件
ansible-vault edit --vault-password-file=pass westos
ansible-vault decrypt westos 解密文件
ansible-vault decrypt westos --output=linux 解密文件到linux文件,源文件依然加密
ansible-vault rekey westos 修改密码
ansible-vault encrypt test.yml 加密剧本
ansible-playbook test.yml --ask-vault-pass 输入密码执行剧本
练习:
使用j2模板create web vhost
www.westos.com 80 ------ > /var/www/html ------> www.westos.com
linux.westos.com 80 ------> /var/www/virtual/westos.com/linux -----> linux.westos.com
vim vhost.yml
ansible-playbook vhost.yml
ansible westos -m shell -a 'cat /etc/httpd/conf.d/hosts.conf' 查看修改文件