3.管理变量和事实
主机变量和组变量 直接应用于主机的清单变量分为两大类:
1.主机变量:应用于特定主机
2.组变量:应用于一个主机组或一组主机组中的所有主机
主机变量优先于组变量,但是 playbook 中定义的变量比这两者更高
dbservers 主机组的 user 组变量:
定义 server1.example.com 的 ansible_user 主机变量:
[webservers]
server1.example.com ansible_user=westos
定义 dbservers 主机组的 user 组变量:
[dbserver]
dbserver1.example.com
dbserver2.example.com
[dbservers:vars]
user=westos
定义嵌套组 user 变量:
[servers1]
node1.example.com
node2.example.com
[servers2]
node3.example.com
node4.example.com
[servers:children]
servers1
servers2
[servers:vars]
user=student
使用目录填充主机和组变量
定义主机和主机组变量的首选做法时与清单文件或目录相同的工作目录中,创建 group_vars 和 host_vars 两个目录,这两个目录分别包含用于定义组变量和主机变量的文件
创建 group_vars/servers 的 YAML 文件,设置变量为值:
user: westos
同样需要在 host_vars 目录中创建名称与主机匹配的文件来存放主机变量 所以一个项目目录中包含: ansible.cfg、group_vars、host_vars、inventory、playbook.yml
使用已注册变量捕获命令输出
vim palybook.yml
# ansible-playbook --syntax-check playbook.yml
# ansible-playbook playbook.yml
管理变量的练习
创建 playbook,来安装 apache 并开启,使可被访问,playbook 查询 web 服务器并确认它 已经设置好并在运行
web_pkg 要安装的 web 服务器软件包
firewall_pkg 要安装的防火墙软件包
web_service 要管理的 web 服务
firewall_service 要管理的防火墙服务
python_pkg #uri 模块所需软件包
rule 要打开的服务
# mkdir date-variables
# vim ansiable.cfg
# vim inventory
# vim playbook.yml
# ansible-playbook --syntax-check playbook.yml 检测语法
# ansible-playbook playbook.yml 运行
# firefox servera
在servera 主机中
# systemctl status httpd
# systemctl status firewalld.service
管理机密
目标:使用 ansible vault 加密敏感变量,并运行 vault 加密变量文件的 playbook
介绍 ansible vault
ansible 可能需要访问密码或者 api 密钥等敏感数据,以便配置主机。
加密解密工具:ansible-vault 命令
'ansible vault 不实施自有的加密函数,而使用外部 python 工具集'
创建加密文件
# ansible-vault encrypt playbook.yml 加密
#
# ansible-vault view playbook.yml 查看加密文件
# ansible-vault edit playbook.yml 编辑 原理:将文件解密为一个临时文件,并编辑;保存时,复制内容并删除临时文件 'edit 命令始终重写文件,因此只有在更改文件时使用
# ansible-vault decrypt playbook.yml 解密
ansible-vault decrypt westos.yml --output=redhat.yml 解密同时改名
# ansible-vault rekey palybook.yml 更改密码
# ansible-vault rekey --new-vault-password-file=file palybook.yml
# ansible-playbook -C --vault-id @prompt playbook.yml 运行加密的playook
# ansible-playbook -C --vault-password-file=password playbook.yml 使用交互式提供密码
管理事实
描述 ansible 事实
查询ip和域名
# vim ip.yml
# ansible-playbook ip.yml
创建自定义事实
'自定义事实的使用方式和默认事实相同'
# ansible localhost -m setup
json格式
常用的有四个:
hostvars #包含受管主机的变量,可以用于获取另一台受管主机的变量的值
group_names #列出当前受管主机所属的所有组
groups #列出清单中的所有组和主机
inventory_hostname #包含清单中配置的当前受管主机的主机名称
# vim westos.fact
# vim fact.yml
# ansible-playbook --syntax-check fact.yml
查看
编写主playbook
vim playbook.yml
\
# ansible servera.lab.example.com -m command -a 'systemctl status httpd' 查看测试机的apache服务
# ansible-playbook --syntax-check playbook.yml
# ansible-playbook playbook.yml