我对 ansible 的其中一项功能不太满意。
对于我的场景,我想在我的托管节点上执行一个剧本来安装例如 nginx。
现在我的控制节点上有以下 playbook.yml:
---
- hosts: all
become: yes
tasks:
- name: Install Packages
apt: name={{ item }} update_cache=yes state=latest
loop: ['nginx', 'vim']
tags: ['setup']
- name: Copy index page
copy:
src: index.html
dest: /var/www/html/index.html
owner: www-data
group: www-data
mode: '0644'
tags: ['update', 'sync']
和我的hosts.yml
---
ungrouped:
hosts:
testserver:
ansible_host: managed.node.ip
ansible_user: exampleuser
ansible_become_pass: '{{sudo_password}}'
ansible_ss_private_key_file: ~/.ssh/id_rsa
ansible.cfg
[defaults]
vault_password_file = vault_pass.txt
为了在我的托管节点上执行剧本,我的控制节点上有一个解密的
sudo_password.yml
。
现在有几个选项可以正确执行它:
方法一:
ansible-playbook -i hosts.yml --extra-vars '@sudo_pass.yml' ansible-receiver_playbook.yml
方法二:
ansible-playbook -i hosts.yml --ask-vault-pass --extra-vars '@sudo_pass.yml' ansible-receiver_playbook.yml
方法1使用我的ansible.cfg中定义的
vault_pass.txt
。
方法 2 以交互方式要求我输入我的保管库密码。
现在我在自动化此过程时遇到一些问题。方法 1 可以工作,例如安排为 cronjob。方法 2 不起作用,因为需要输入。
方法 1 对我来说有点不对,因为我不想以纯文本格式保存我的
vault-password
只是为了解密我的加密 sudo_password.yml
到目前为止我是否错过了一些重要的事情?
到目前为止我是否错过了一些重要的事情?
这取决于您计划如何执行您的剧本。典型的环境可以是 CI/CD 服务器或 K8S 实例。两者都有自己的工具来存储秘密并将它们临时安装到您的剧本可以安全访问的地方。
此外,请查看 Ansible Vault 文档中的使用 Vault 密码客户端脚本在第三方工具中存储密码。