如何通过Ansible的hashi_vault lookup插件仅获取Hashi Vault中的指定密钥字段
如何通过Ansible的hashi_vault lookup插件仅获取Hashi Vault中的指定密钥字段
我来帮你搞定这个问题~从你给出的playbook输出能看出来,你用的是Hashi Vault的KV v2版本的 secrets引擎——因为返回结果里实际的用户名和密码被嵌套在data字段下面,而你尝试的:username语法只适用于KV v1引擎(或者返回结构没有外层data的场景),这就是为什么你会收到“找不到username字段”的错误。
下面给你两种可行的解决方法:
方法1:直接在lookup结果中提取字段
你可以先通过lookup拿到完整的secret数据,再用Jinja2的点标记语法直接提取data下的指定字段,修改后的task如下:
- name: Get only username from Vault secret debug: msg: "{{ lookup('hashi_vault', 'secret=platform/data/ansibletest token={{mytoken}} url=http://{{myvaultip}}:8200').data.username }}"
如果要提取密码,只需要把.data.username换成.data.password即可。
方法2:先存储完整secret到变量,再提取字段
如果需要多次使用secret里的不同字段,建议先把完整的secret数据存到一个变量里,后续再按需提取,这样代码更清晰易维护:
- name: Retrieve full secret from Hashi Vault set_fact: ansible_test_secret: "{{ lookup('hashi_vault', 'secret=platform/data/ansibletest token={{mytoken}} url=http://{{myvaultip}}:8200') }}" - name: Print the username from stored secret debug: msg: "{{ ansible_test_secret.data.username }}" - name: Print the password from stored secret debug: msg: "{{ ansible_test_secret.data.password }}"
补充说明
为什么你的原尝试会失败?
你用的
secret=platform/data/ansibletest:username语法,是让hashi_vault lookup插件直接在secret的顶层结构中寻找username字段,但KV v2引擎返回的顶层结构只有data和metadata两个键,实际的密钥都在data内部,所以插件会提示找不到该字段。
备注:内容来源于stack exchange,提问作者siguru chennai
相关产品推荐
相关产品推荐

