【问题标题】:Encrypting ansible inventory file加密 ansible 库存文件
【发布时间】:2017-08-10 12:20:40
【问题描述】:

我想使用 ansible vault 加密我的 ansible 库存文件,因为它包含 IP/密码/密钥文件路径等,我不想将其保持为可读格式。

这是我尝试过的。

我的文件夹结构如下所示

env/
   hosts
   hosts_details
plays/
   test.yml
files/
   vault_pass.txt

环境/主机

[server-a]
server-a-name

[server-b]
server-b-name

[webserver:children]
server-a
server-b

env/hosts_details(我要加密的文件)

[server-a:vars]
env_name=server-a
ansible_ssh_user=root
ansible_ssh_host=10.0.0.1
ansible_ssh_private_key_file=~/.ssh/xyz-key.pem

[server-b:vars]
env_name=server-b
ansible_ssh_user=root
ansible_ssh_host=10.0.0.2
ansible_ssh_private_key_file=~/.ssh/xyz-key.pem

test.yml

---
  - hosts: webserver
    tasks:
      - name: Print Hello world
        debug:
          msg: "Hello World"

不加密的执行成功运行,没有任何错误

ansible-playbook -i env/ test.yml 

当我使用 files/vault_pass.txt 中的 vault 文件加密我的 env/hosts_details 文件然后执行 playbook 时,我收到以下错误

ansible-playbook -i env/ test.yml --vault-password-file files/vault_pass.txt


PLAY [webserver] 
******************************************************************

TASK [setup] 
*******************************************************************
Thursday 10 August 2017  11:21:01 +0100 (0:00:00.053)       0:00:00.053 *******
fatal: [server-a-name]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname server-a-name: Name or service not known\r\n", "unreachable": true}
fatal: [server-b-name]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname server-b-name: Name or service not known\r\n", "unreachable": true}

PLAY RECAP 
*********************************************************************
server-a-name            : ok=0    changed=0    unreachable=1    failed=0
server-b-name            : ok=0    changed=0    unreachable=1    failed=0

我想知道我是否遗漏了任何东西,或者是否可以加密库存文件。

还有其他替代品吗?

【问题讨论】:

    标签: ansible ansible-inventory ansible-vault


    【解决方案1】:

    据我所知,您无法加密库存文件。
    您应该改用组 vars 文件。

    以 YAML 格式将变量放入 ./env/group_vars/server-a.ymlserver-b.yml

    env_name: server-a
    ansible_ssh_user: root
    ansible_ssh_host: 10.0.0.1
    ansible_ssh_private_key_file: ~/.ssh/xyz-key.pem
    

    并加密server-a.ymlserver-b.yml

    这样您的清单(主机文件)将采用纯文本格式,但所有清单(主机和组)变量都将被加密。

    【讨论】:

    • 嘿!感谢你的回复。我试过这个,我遇到了这个error.ERROR! Unexpected Exception: dictionary update sequence element #0 has length 1; 2 is required
    • 我的错!这是一个 yaml 语法错误。这是有效的,谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多