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

Ansible跨剧本传递post_token_headers遇dictionary/hash映射错误

问题分析与解决:Ansible Tower中include_vars引用剧本文件报错
  • 核心问题:include_vars模块的设计目的是加载纯变量定义文件(内容为字典/哈希结构的键值对),但你试图引用的oauth.yaml是一个完整的Ansible剧本(Playbook),其结构包含hosts、tasks等顶级字段,不符合include_vars对文件格式的要求,因此触发"/runner/project/oauth.yaml must be stored as a dictionary/hash"错误。

  • 可行解决方案:

    1. 工作流全局变量传递:在Ansible Tower工作流配置中,将oauth.yaml执行后生成的post_token_headers设置为工作流全局变量。后续执行device_add.yaml时,可直接调用该全局变量,无需引用整个oauth剧本。
    2. 提取变量到独立文件:在oauth.yaml末尾添加任务,将认证变量写入专门的变量文件,再在device_add.yaml中加载:
      • oauth.yaml新增任务:
        - name: 导出认证头到变量文件
          copy:
            content: "{{ post_token_headers | to_nice_yaml }}"
            dest: "{{ playbook_dir }}/oauth_vars.yaml"
        
      • device_add.yaml中加载变量:
        - name: 加载认证变量
          include_vars: oauth_vars.yaml
        
      注意:Tower执行用户需对/runner/project目录有写入权限,若权限受限,可改用/tmp/oauth_vars.yaml作为目标路径。
    3. 复用整个认证流程:若需要完整复用oauth的认证逻辑,而非仅变量,在device_add.yaml中使用import_playbook或include_playbook调用oauth.yaml,执行完成后post_token_headers会直接在当前剧本上下文生效:
      - name: 执行OAuth认证流程
        import_playbook: oauth.yaml
      

内容的提问来源于stack exchange,提问作者Calibus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:55:56