使用awx.awx.credential_type创建自定义凭证类型时遇未定义变量错误
使用awx.awx.credential_type创建自定义凭证类型时的"未定义变量"错误解决
你遇到的问题是Ansible误将AWX凭证注入模板里的变量当成自身变量解析,导致抛出"未定义变量"错误。
问题原因
playbook中injectors字段里的{{ username }}、{{ vault_addr }}是给AWX使用的模板变量,但Ansible会自动解析playbook中的双大括号语法,把它们当作Ansible自身的变量处理——而这些变量并没有在playbook中定义,因此触发报错。
解决方法
需要让Ansible不对这些模板变量进行解析,有两种常用实现方式:
方式1:用单引号包裹injectors内容
将injectors的整个值用单引号包裹,Ansible会把内部内容当作纯字符串直接传递,不解析双大括号:
injectors: '{ "env": { "VAULT_USERNAME": "{{ username }}", "VAULT_PASSWORD": "{{ password }}", "VAULT_ADDR": "{{ vault_addr }}" } }'
方式2:转义双大括号
通过Ansible的变量嵌套写法,把需要保留的双大括号包裹在Ansible的变量引用中,避免被提前解析:
injectors: { "env": { "VAULT_USERNAME": "{{ '{{ username }}' }}", "VAULT_PASSWORD": "{{ '{{ password }}' }}", "VAULT_ADDR": "{{ '{{ vault_addr }}' }}" } }
修改后的完整Playbook示例
--- - name: Configure AWX hosts: localhost connection: local become: false gather_facts: false tasks: - name: Create Custom Vault credential type awx.awx.credential_type: name: "Custom Vault" description: "" kind: cloud inputs: { "fields": [ { "id": "username", "type": "string", "label": "Username", "secret": false }, { "id": "password", "type": "string", "label": "Password", "secret": true }, { "id": "vault_addr", "type": "string", "label": "Custom Vault Address" } ] } injectors: '{ "env": { "VAULT_USERNAME": "{{ username }}", "VAULT_PASSWORD": "{{ password }}", "VAULT_ADDR": "{{ vault_addr }}" } }' state: present validate_certs: false
验证说明
修改后重新运行playbook,Ansible会将注入模板原封不动传递给AWX,AWX创建凭证类型后,即可正确使用这些变量完成环境变量注入。
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

