ansible之playbook-02 机密和事实

Ansible Vault

valut简介

Ansible Vault 是 Ansible 提供的一种加密工具,用于保护敏感数据(如密码、证书等)的存储和传输。通过使用 Ansible Vault,可以在 Ansible Playbooks 中安全地存储和传递敏感信息,确保敏感数据不被未授权的人员访问。

ansible-vault 命令 释义
create 创建一个vault加密文件
decrypt 解密保险库加密文件
edit 编辑保险库加密文件
view 查看保险库加密文件
encrypt 加密现有文件
encrypt_string 加密字符串
rekey 重新加密保险库加密文件

《ansible之playbook-02 机密和事实》

《ansible之playbook-02 机密和事实》

加密文件运行

加密Playbooks 时,需要提供密码才能解密加密的变量。可以使用--ask-vault-pass命令运行加密的 Playbooks

ansible-playbook playbook.yml –ask-vault-pass

《ansible之playbook-02 机密和事实》

加密字符串

使用 ansible-vault encrypt_string 命令将变量加密,并将加密后的值直接添加到 Playbooks 中。

ansible-vault encrypt_string ‘123456’ –name ‘db_pass’

《ansible之playbook-02 机密和事实》

[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-02 机密和事实》

从指定文件中读取密码

ansible-playbook test1.yml –vault-password-file=vault-pass

《ansible之playbook-02 机密和事实》

事实

事实简介

通过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

《ansible之playbook-02 机密和事实》

2.使用debug模块

---

- name: 收集事实
  hosts: centos70
  tasks:
    - name: 执行setup模块,取变量
      debug:
        var: ansible_facts

《ansible之playbook-02 机密和事实》

3.只展示某个结果

---

- name: 收集事实
  hosts: centos70
  tasks:
    - name: 执行setup模块,取变量
      debug:
        var: ansible_facts['all_ipv4_addresses']

《ansible之playbook-02 机密和事实》

4.在playbook中直接使用

---

- name: 收集事实
  hosts: centos70
  tasks:
    - name: 获取事实
      shell: echo {{ansible_facts['all_ipv4_addresses']}}
      register: shadow         ##register捕获命令输出
    - debug: var=shadow        ##使用debug模块打印一个变量值

《ansible之playbook-02 机密和事实》

创建自定义事实

除了使用系统捕获的事实外,我们还可以自定义事实。这些事实整合到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之playbook-02 机密和事实》

或者用 ansible centos70 -m setup 查看

《ansible之playbook-02 机密和事实》

参考

Ansible基础4——变量、机密、事实_ansible 魔法变量-CSDN博客

ansible的事实,循环和条件判断_ansible收集事实的方法-CSDN博客

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注