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"错误。可行解决方案:
- 工作流全局变量传递:在Ansible Tower工作流配置中,将
oauth.yaml执行后生成的post_token_headers设置为工作流全局变量。后续执行device_add.yaml时,可直接调用该全局变量,无需引用整个oauth剧本。 - 提取变量到独立文件:在
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
/runner/project目录有写入权限,若权限受限,可改用/tmp/oauth_vars.yaml作为目标路径。 - oauth.yaml新增任务:
- 复用整个认证流程:若需要完整复用oauth的认证逻辑,而非仅变量,在
device_add.yaml中使用import_playbook或include_playbook调用oauth.yaml,执行完成后post_token_headers会直接在当前剧本上下文生效:- name: 执行OAuth认证流程 import_playbook: oauth.yaml
- 工作流全局变量传递:在Ansible Tower工作流配置中,将
内容的提问来源于stack exchange,提问作者Calibus
相关产品推荐
相关产品推荐

