我是 ansible 的新手,我正在使用一个非常简单的剧本来发布sudo apt-get update
和sudo apt-get upgrade
在几个服务器上。
这是我正在使用的剧本:
---
- name: Update Servers
hosts: my-servers
become: yes
become_user: root
tasks:
- name: update packages
apt: update_cache=yes
- name: upgrade packages
apt: upgrade=dist
~/.ansible/inventory/hosts
这是我文件的摘录:
[my-servers]
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-francisco>
san-diego ansible_host=san-diego ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-diego>
如果我启动剧本,这就是我得到的:
$ ansible-playbook update-servers-playbook.yml
PLAY [Update Servers] **********************************************************
TASK [setup] *******************************************************************
ok: [san-francisco]
ok: [san-diego]
TASK [update packages] *********************************************************
ok: [san-francisco]
ok: [san-diego]
TASK [upgrade packages] ********************************************************
ok: [san-francisco]
ok: [san-diego]
PLAY RECAP *********************************************************************
san-francisco : ok=3 changed=0 unreachable=0 failed=0
san-diego : ok=3 changed=0 unreachable=0 failed=0
困扰我的是我的用户密码以user
明文形式存储在我的~/.ansible/inventory/hosts
文件中。
我读过vaults,我也读过关于变量和 vaults 的最佳实践,但我不明白如何将它应用到我最小的用例中。
我也尝试使用lookups。虽然通常它们也可以在库存文件中使用,但我可以执行以下操作:
[my-servers]
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass="{{ lookup('env', 'ANSIBLE_BECOME_PASSWORD_SAN_FRANCISCO') }}"
在这种情况下,密码将存储在名为ANSIBLE_BECOME_PASSWORD_SAN_FRANCISCO
;的环境变量中。据我所知,没有办法在保险库中查找变量。
那么,我该如何组织我的文件,以便能够从某个地方查找我的密码并安全地存储它们呢?