Ansible 可从vault读取用户名和密码

Ansible 可从vault读取用户名和密码,ansible,hashicorp-vault,Ansible,Hashicorp Vault,我在配置文件中有我的vault令牌,试图从本地vault读取用户名和密码,并将这些变量传递给远程主机。尝试了下面的方法,可以将用户名和密码作为getusername和getpassword的一部分读取,但在最后一个块中,它们无法作为变量读取。请告诉我哪里做错了 - name: wait for native_transport_port wait_for: host="{{ inventory_hostname }}" port="9042" state=starte

我在配置文件中有我的vault令牌,试图从本地vault读取用户名和密码,并将这些变量传递给远程主机。尝试了下面的方法,可以将用户名和密码作为getusername和getpassword的一部分读取,但在最后一个块中,它们无法作为变量读取。请告诉我哪里做错了

- name: wait for native_transport_port
  wait_for:
    host="{{ inventory_hostname }}"
    port="9042"
    state=started
    timeout=300

- name: getusername
  gather_facts: no
  become_user: pc_user
  tasks:
  shell: source ~/.profile ;vault_username=`vault read --field=adm path`
  delegate_to: 127.0.0.1

- name: getpassword
  gather_facts: no
  become_user: pc_user
  tasks:
  shell: source ~/.profile ;vault_p=`vault read --field=adm_p path`
  delegate_to: 127.0.0.1

- name:  create keyspace
  command: cqlsh  -u $vault_username -p $vault_p -f filname"
  become_user: ec2-user

正如在注释中简要解释的,您需要让shell任务返回用户名和密码作为输出,以便ansible能够捕获它。请参见下面修改代码片段中的3项任务:

- name: getusername
  gather_facts: no
  become_user: pc_user
  tasks:
  shell: source ~/.profile ;vault read --field=adm path
  register: vault_username
  delegate_to: 127.0.0.1

- name: getpassword
  gather_facts: no
  become_user: pc_user
  tasks:
  shell: source ~/.profile ;vault read --field=adm_p path
  register: vault_password
  delegate_to: 127.0.0.1

- name:  create keyspace
  command: "cqlsh  -u {{ vault_username.stdout }} -p  {{ vault_password.stdout }} -f filname"
  become_user: ec2-user
这些命令假定两个shell命令:

source ~/.profile ;vault read --field=adm path
source ~/.profile ;vault read --field=adm_p path
将仅返回用户名/密码作为输出,其他内容将不会在屏幕中显示

编辑

忘了提一下,这些ansible变量(vault\u用户名/vault\u密码)应该在同一重头戏中,它们不会在重头戏中持续存在,也不确定它们是否会以您组织任务的方式工作


希望这些帮助。

这些“块”
getusername
getpassword
似乎是重头戏,而不仅仅是任务-另一重头戏的一部分,因为
等待本机传输端口
创建密钥空间
都是。这是故意的还是错误的?您提供的此代码段不是您正在运行的代码。如果您添加了用于发现问题的实际代码,这会有所帮助。这是有意的。我主要关心的是在GetUserName和getpassword vault\u username和vault\p中能够获取的值。当使用$vault\u username和$vault\p时,我无法在创建密钥空间中传递它们。在Keyspace中传递这些变量值的方法是什么我得到了错误[Bad credentials]消息=\“提供的用户名$vault\u用户名和/或密码不正确\“,)}],“stdout:”,“stdout行”:[]}您需要将shell任务更改为“在其输出中回显字符串,并使用
register
子句将其保存到ansible中的变量。我将举一个例子作为回答。很高兴它有帮助!