You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:35:02