slm*_*slm 8 python encryption ansible ansible-vault
我正在试图弄清楚如何为Python脚本提供以下功能,以便它可以:
ansible.cfg和读取的vault_password_file变量vault_password_file并临时存储在Python变量中import ansible.utils
bar = dict()
bar = ansible.utils._load_vars_from_path("secrets.yml", results=bar, vault_password="password")
print bar
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
$ python ansible-vault-ex.py
Traceback (most recent call last):
File "ansible-vault-ex.py", line 5, in <module>
bar = ansible.utils._load_vars_from_path("credentials.vault", results=bar, vault_password="password")
AttributeError: 'module' object has no attribute '_load_vars_from_path'
Run Code Online (Sandbox Code Playgroud)
当我调查这个时,我在任何Ansible相关文件中都没有看到这个函数的迹象,这让我相信这个方法不再适用于Ansible的一些新版本.
底线是我想从Python脚本导入Ansible库/模块的一些方法,以便我可以ansible-vault从Python 以编程方式与托管文件进行交互.
考虑使用ansible-vault包
安装方式:
$ pip install ansible-vault
Run Code Online (Sandbox Code Playgroud)
然后就像这样简单:
from ansible_vault import Vault
vault = Vault('password')
print vault.load(open('/path/to/your/vault.yml').read())
Run Code Online (Sandbox Code Playgroud)
要直接使用ansible代码,请查看该包的来源.最简单的是:
Ansible <= 2.3
from ansible.parsing.vault import VaultLib
vault = VaultLib('password')
print vault.decrypt(open('/path/to/vault.yml').read())
Run Code Online (Sandbox Code Playgroud)
Ansible > = 2.4
from ansible.constants import DEFAULT_VAULT_ID_MATCH
from ansible.parsing.vault import VaultLib
from ansible.parsing.vault import VaultSecret
vault = VaultLib([(DEFAULT_VAULT_ID_MATCH, VaultSecret('password'))])
print vault.decrypt(open('/path/to/vault.yml').read())
Run Code Online (Sandbox Code Playgroud)
源代码的数量是相等的,但是包提供了两个Ansible版本的自动yaml解析+处理.
扩展 Kuba 的答案,ansible-vault 是 VaultLib 的包装器。它可以很好地处理 Vaultlib Ansible 2.4 之前的版本以及 2.4 之后的版本。
ansible-vault load() 方法不仅会解密文件,还会解析文件并将内容作为字典返回。如果您想要不解析的内容,最简单的方法可能是使用以下内容扩展 ansible-vault:
from ansible_vault import Vault
class MyVault(Vault):
def load_raw(self, stream):
return self.vault.decrypt(stream)
def dump_raw(self, text, stream=None):
encrypted = self.vault.encrypt(text)
if stream:
stream.write(encrypted)
else:
return encrypted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7428 次 |
| 最近记录: |