将加密变量与 Ansible-Vault 一起用于网络自动化

Using encrypted variable with Ansible-Vault for network automation

我在网络和 Youtube 上搜索了很多教程,但没有成功。

我想通过 Ansible 配置 Cisco 交换机,我已经设置好了,可以完美运行..但我想存储密码(用于 vty 线路、控制台、启用密码...)最好在 hosts 文件通过 Ansible-Vault 加密为变量,因此在我的 .yml 文件中我可以访问它们。我希望将它们放在主机文件中,因为我们对 ASW、DSW 和 CSW 有不同的密码,这样可以更容易管理。

我在 CLI 中生成了加密变量:

ansible-vault encrypt_string enable_password --ask-vault-pass

我把值复制到/etc/ansible/hosts中的变量:

...
[2960-X:vars]
ansible_become=yes
ansible_become_method=enable
ansible_network_os=ios
ansible_user=admin
enable_password= !vault |
     $ANSIBLE_VAULT;1.1;AES256
     .....

config.yml:

   - name: Set enable password
     ios_config:
       lines:
         - enable secret "{{ enable_password }}"

现在,密码将设置为“!vault |” 我不确定这是否是最佳实践,我阅读了相关建议,但我能找到的只是关于服务器自动化,而不是网络。

我是 运行 Ansible 2.8.0

感谢任何帮助,谢谢。

让我引用 Variables and Vaults

When running a playbook, Ansible finds the variables in the unencrypted file and all sensitive variables come from the encrypted file.

A best practice approach for this is to start with a group_vars/ subdirectory named after the group. Inside of this subdirectory, create two files named vars and vault. Inside of the vars file, define all of the variables needed, including any sensitive ones. Next, copy all of the sensitive variables over to the vault file and prefix these variables with vault_. You should adjust the variables in the vars file to point to the matching vault_ variables using jinja2 syntax, and ensure that the vault file is vault encrypted.

这个方案不仅限于group_vars/,可以应用于任何变量来源的地方。