Contents
Ansible Vault
valut简介
Ansible Vault 是 Ansible 提供的一种加密工具,用于保护敏感数据(如密码、证书等)的存储和传输。通过使用 Ansible Vault,可以在 Ansible Playbooks 中安全地存储和传递敏感信息,确保敏感数据不被未授权的人员访问。
ansible-vault 命令 | 释义 |
---|---|
create | 创建一个vault加密文件 |
decrypt | 解密保险库加密文件 |
edit | 编辑保险库加密文件 |
view | 查看保险库加密文件 |
encrypt | 加密现有文件 |
encrypt_string | 加密字符串 |
rekey | 重新加密保险库加密文件 |
加密文件运行
加密Playbooks 时,需要提供密码才能解密加密的变量。可以使用--ask-vault-pass
命令运行加密的 Playbooks
ansible-playbook playbook.yml –ask-vault-pass
加密字符串
使用 ansible-vault encrypt_string 命令将变量加密,并将加密后的值直接添加到 Playbooks 中。
ansible-vault encrypt_string ‘123456’ –name ‘db_pass’
[root@eab5aec2df6c palybook]# cat test1.yml
---
- hosts: all
vars:
db_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
62373832343534623964623031653931363062323839653432653035323832633635396234616331
3737636132373834663939353132363439623833613833390a666534616466366533663933626161
32653930323830376361393435623834326230663032383033386239396164376663383761376561
3063326263356163620a396332633234386562343536303137366164353533363736626537353262
6136
gather_facts: no
tasks:
- name: vault
debug:
var: db_pass
从指定文件中读取密码
ansible-playbook test1.yml –vault-password-file=vault-pass
事实
事实简介
通过setup模块获取受控机上的变量称为事实,将变量信息输出展示到主控机上,可以方便主控机对受控机的操控使用。
事实中包含与受控机相关的信息,可以配合playbook中的变量、条件和循环来使用。
每个play在执行第一个任务之前会先自动运行setup模块来收集事实,但不会展示出来,可以在playbook中使用debug模块来收集事实并展示出来。使用gather_facts: no,可关闭事实收集功能。
常用事实:
- 主机名称
- 内核版本
- 网络接口
- IP地址
- 操作系统版本
- 各种环境变量
- CPU数量
- 提供的或可用的内存
- 可用磁盘空间
事实 | 变量 |
---|---|
短主机名 | ansible_facts['hostname'] |
完全限定域名 | ansible_facts['fqdn'] |
IPv4地址 | ansible_facts[‘default_ipv4’][‘address’] |
所有网络接口的名称列表 | ansible_facts['interfaces'] |
/dev/vda1磁盘分区的大小 | ansible_facts[‘devices’][‘vda’][‘partitions’][‘vda1’][‘size’] |
DNS服务器列表 | ansible_facts[‘dns’][‘nameservers’] |
当前运行的内核版本 | ansible_facts['kernel'] |
收集事实
1.使用setup模块获取对受控机收集的事实。
ansible all -m setup
2.使用debug模块
---
- name: 收集事实
hosts: centos70
tasks:
- name: 执行setup模块,取变量
debug:
var: ansible_facts
3.只展示某个结果
---
- name: 收集事实
hosts: centos70
tasks:
- name: 执行setup模块,取变量
debug:
var: ansible_facts['all_ipv4_addresses']
4.在playbook中直接使用
---
- name: 收集事实
hosts: centos70
tasks:
- name: 获取事实
shell: echo {{ansible_facts['all_ipv4_addresses']}}
register: shadow ##register捕获命令输出
- debug: var=shadow ##使用debug模块打印一个变量值
创建自定义事实
除了使用系统捕获的事实外,我们还可以自定义事实。这些事实整合到setup模块在受管主机上运行时收集的标准事实列表中。它们让受管主机能够向Ansible提供任意变量,以用于调整play的行为。
默认情况下,setup模块从各受管主机的/etc/ansible/facts.d目录下的文件和脚本中加载自定义事实。各个文件或脚本的名称必须以.fact结尾才能被使用。动态自定义事实脚本必须输出JSON格式的事实,而且必须是可执行文件。
[root@centos70 ~]# mkdir -p /etc/ansible/facts.d/
[root@centos70 ~]# cd /etc/ansible/facts.d/
[root@centos70 facts.d]# vim test.fact
使用ini格式或者json格式都行
json格式
{
"packages":{
"web_package":"httpd",
"db_packages":"mariadb"
},
"users":{
"user1":"linux",
"user2":"redhat"
}
}
ini格式
[packages]
web_package=httpd
db_package=mariadb-server
[users]
user1=westos
user2=redhat
---
- name: 收集事实
hosts: centos70
tasks:
- name: 获取事实
debug:
var: ansible_facts['ansible_local']['test']['packages']['web_package']
ansible-playbook facts.yml
或者用 ansible centos70 -m setup 查看