我有一个带有保险库的Ansible剧本,我想通过我的网络界面中的提示框询问保险箱密码,然后在运行ansible playbook时传递已发布的密码。我试着用:
echo $password | ansible-playbook test.yml --ask-vault-pass
将密码传递给剧本,但它不起作用,错误信息是:
" msg":"尝试解密但没有找到保险库秘密"
我不想将密码存储在文件中以供某些人使用,现在我只想尝试在运行时自动将密码传递给playbook。对我有什么建议吗? ansible版本是2.4。
答案 0 :(得分:9)
您可以使用脚本而不是通过交互式界面提供密码。
以下是您的用例示例:
使用以下内容保存path_to/vault_secret.sh
文件(添加执行权限):
#!/bin/bash
echo $password
执行:
ansible-playbook test.yml --vault-password-file path_to/vault_secret.sh
可替换地:
添加到ansible.cfg
:
[defaults]
vault_password_file=path_to/vault_secret.sh
执行:
ansible-playbook test.yml
答案 1 :(得分:2)
您可以将--vault-password-file
与文件描述符一起使用:
ansible-playbook test.yml --vault-password-file <(echo somepassword)
答案 2 :(得分:0)
@全部 确保将vault_password_file =添加到ansible.cfg文件的[defaults]部分。
当我在另一部分中添加vault_password_file =时遇到了同样的问题,将其移至[defaults]后已解决
如果有帮助,请尝试运气。
答案 3 :(得分:0)
这就是我的工作方式,它运作良好。 我的命令行如下所示:
[prompt/]$ansible-playbook -i <inventory>, /mnt/m/NetworkGetters/get_vpn_status.yml --extra-vars varsfilepath=/mnt/m/NetworkVars/host_vars/test-oci-test-vpn-config.yml
我经过清理的passwords.yml(保险库文件)如下:
---
credentials:
base: &base
host: "{{ansible_host}}"
timeout: 30
transport: cli
svc_rhelsystemrw:
<<: *base
username: svc_rhelsystemrw
password: dWERE#@kds23
我的剧本遵循以下约定:
name: Set VPN Configuration
hosts: all
connection: local
gather_facts: no
vars_files:
- "{{ varsfilepath }}"
- "/etc/ansible/NetworkVars/passwords.yml"
vars:
# ssh_auth credentials come from ansible vault
provider_rw:
username: "{{ credentials['svc_rhelsystemrw'].username }}"
password: "{{ credentials['svc_rhelsystemrw'].password }}"
tasks:
- name: Capture Pre-change Configuration
ios_command:
provider: "{{ provider_rw }}"
commands:
- show running-config
register: running_config_before
tags: vpn
- debug:
var: running_config_before.stdout
tags: vpn