目录 - 管理变量和事实
1. 管理变量
1.1 ansible 变量简介
1.1.1 变量内容
要创建的用户
要安装的软件包
要重启的服务
要删除的文件
要从互联网检索的文档
1.1.2 命名变量
变量名称必须以字母开头,并且只能含有字母、数字和下划线
错误 | 正确 |
---|---|
web server | web_server |
westos.file | remote_file |
1st file | file1 |
1.1.3 定义变量
三个范围级别
全局范围 | 从命令行或 ansible 配置设置的变量 |
---|---|
play 范围 | 在 play 和相关结构中设置的变量 |
主机范围 | 由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量 |
如果多个级别上定义了相同名称的变量,优先采用级别最高的变量,窄范围优先于广范围’
1.2 playbook 中的变量
1.2.1 在 playbook 中定义变量
1.常见方式:
在 playbook 开头的 vars 块中:
2.在外部文件定义 playbook 变量
1.2.2 在 playbook 中使用变量
将变量名称放在花括号内即可
- 注意:
当变量用作开始一个值的第一元素时,必须使用引号
2. 主机变量和组变量
2.1 变量分类
直接应用于主机的清单变量分为两大类:
主机变量 | 应用于特定主机 |
---|---|
组变量 | 应用于一个主机组或一组主机组中的所有主机 |
主机变量优先于组变量,但是 playbook 中定义的变量比这两者更高
2.2 定义主机变量和组变量
方法一(比较旧,不建议采用)
方法二:使用目录填充主机和组变量
定义主机和主机组变量的首选做法时与清单文件或目录相同的工作目录中,创建 group_vars 和 host_vars 两个目录,这两个目录分别包含用于定义组变量和主机变量的文件
- 创建 group_vars/servers 的 YAML 文件,设置变量为值:
user: student - 同样需要在 host_vars 目录中创建名称与主机匹配的文件来存放主机变量
- 所以一个项目目录中包含:
ansible.cfg、group_vars、host_vars、inventory、playbook.yml
1. 从命令行覆盖变量
清单变量可以被 playbook 中设置的变量覆盖
两者又可通过命令行参数覆盖
- 使用数组作为变量
2. 使用已注册变量捕获命令输出 - 管理员可以使用 register 语句捕获命令输出
3. 管理变量的练习
创建 playbook,来安装 apache 并开启,使可被访问,playbook 查询 web 服务器并确认它 已经设置好并在运行
web_pkg | 要安装的 web 服务器软件包 |
---|---|
firewall_pkg | 要安装的防火墙软件包 |
web_service | 要管理的 web 服务 |
firewall_service | 要管理的防火墙服务 |
python_pkg | uri 模块所需软件包 |
rule | 要打开的服务 |
vim playbook.yml
检测
4. 管理机密
4.1 目标
使用 ansible vault 加密敏感变量,并运行 vault 加密变量文件的 playbook
4.2 介绍 ansible vault
ansible 可能需要访问密码或者 api 密钥等敏感数据,以便配置主机。
加密解密工具ansible-vault 命令
ansible vault 不实施自有的加密函数,而使用外部 python 工具集
4.3 创建加密文件
方法:
ansible-vault create filename
4.4 查看加密文件
方法:ansible-vault view filename
4.5 编辑现有的加密文件
原理:将文件解密为一个临时文件,并编辑;保存时,复制内容并删除临时文件
edit 命令始终重写文件,因此只有在更改文件时使用,查看尽量使用 view
4.6 加密现有的文件
方法:ansible-vault encrypt filename
filename 参数可以是多个
可以使用–output=filename 将加密文件保存为新的名称,使用此参数时输入文件只能是一个
4.7 解密现有的文件
4.8 更改加密文件密码
方法:ansible-vault rekey filename
可以一次更新多个文件密码
注:
使用 vault 密码文件时,最好使用–net-vault-password-file
5. playbook 和 ansible vault
- 交互式提供密码
- 注意:2.4版本之前的ansible,使用–ask-vault-pass提供交互式密码’
6. 管理事实
事实包括:主机名称、内核版本、网络借口、IP 地址等
描述 ansible 事实
6.1 查看主机信息
6.2 再将事实替换为动态的值
6.3 ansible 事实作为变量注入
使用 setup 模块显示所有事实信息
6.4 创建自定义事实
可以使用 INI 格式或者 JSON 格式
-
INI 格式
-
JSON 格式
自定义格式不能使用 ymal 格式,使用最为接近的 json 最好
自定义事实的使用方式和默认事实相同
6.5 使用魔法变量
常用的有四个:
hostvars | 包含受管主机的变量,可以用于获取另一台受管主机的变量的值 |
---|---|
group_names | 列出当前受管主机所属的所有组 |
groups | 列出清单中的所有组和主机 |
inventory_hostname | 包含清单中配置的当前受管主机的主机名称 |
用途:使用 debug 模块报告特定主机的 hostvars 的值
7. 管理事实
- 检测ansible_local变量当前是不存在的(未设定变量之前)
- 受管主机上检查文件变量是否存在
- 编写主playbook
- 受管主机上测试(在运行playbook时受管主机上不能有http服务)
8. 管理变量和事实
- 练习:
使用基本身份认证的 httpd
1.写 playbook
2.创建加密文件
3.创建 files 目录
4.交互式输入密码,进行语法检测
5.执行
测试:
- 总结
1.变量能够让 playbook 复用
2.可以给清单中的主机和主机组定义变量
3.可以使用事实和外部文件定义变量,也可以在命令行中
4.register 关键字何以用于捕获命令输出
**5.ansible vault 6.ansible 事实是从受管主机自动检测到的变量