Ansible:如何将Jinja2变量用作uri模块的动态YAML键?
Ansible uri模块动态生成HTTP头键名解决方法
原写法中直接在headers下写"{{ ACCESS_TOKEN_TYPE }}": "my-token"无法生效,核心原因是YAML会把带模板的字符串当作字面量键,不会触发Ansible的变量解析。要实现动态键名,需用Ansible的字典表达式构造headers:
方法一:直接在uri模块中构造动态字典
- name: "Set variable" set_fact: ACCESS_TOKEN_TYPE: "TEST-TOKEN" - name: Check API ansible.builtin.uri: url: "https://my-url.com" headers: "{{ {ACCESS_TOKEN_TYPE: 'my-token'} }}"
方法二:提前构造headers字典再引用
如果需要复用headers配置,可先通过set_fact生成完整的headers字典:
- name: "Set token type and headers" set_fact: ACCESS_TOKEN_TYPE: "TEST-TOKEN" api_request_headers: "{{ {ACCESS_TOKEN_TYPE: 'my-token'} }}" - name: Check API ansible.builtin.uri: url: "https://my-url.com" headers: "{{ api_request_headers }}"
方法三:结合静态头和动态头
如果需要同时包含静态HTTP头和动态头,可使用combine过滤器合并字典:
- name: "Set variable" set_fact: ACCESS_TOKEN_TYPE: "TEST-TOKEN" - name: Check API ansible.builtin.uri: url: "https://my-url.com" headers: "{{ {'Content-Type': 'application/json'} | combine({ACCESS_TOKEN_TYPE: 'my-token'}) }}"
以上写法都会将变量ACCESS_TOKEN_TYPE解析为TEST-TOKEN,最终生成期望的headers结构:
headers: "TEST-TOKEN": "my-token"
内容的提问来源于stack exchange,提问作者Ewro
相关产品推荐
相关产品推荐

