AWX中role_path变量识别失败问题求助
AWX中使用role_path动态生成角色vars文件失败的解决办法
问题背景
在AWX运行带Ansible角色的任务时,试图通过role_path变量动态生成角色的vars/main.yml文件,避免硬编码项目目录,但执行时报错找不到目标路径。相关代码及错误信息如下:
Playbook代码片段
- name: Running script script: generate_t0_vars.sh {{ t0_count }} "{{ role_path }}" register: output - include_vars: "{{ role_path }}/vars/main.yml"
生成vars的Bash脚本generate_t0_vars.sh
#!/bin/bash t0_count=$1 role_path=$2 t0_name=() for i in $(seq -f "%02g" 1 $t0_count); do t0_name+=(T0_GW_$i); done echo -n "" > "$role_path/vars/main.yml" echo "vars_t0:" >> "$role_path/vars/main.yml" for i in $(seq 0 $((${#t0_name[@]} - 1))) do echo " - t0_name: ${t0_name[$i]}" >> "$role_path/vars/main.yml" done
报错信息
"/home/user/.ansible/var/tmp/ansible-tmp-1669894315.1132782-31686-208889357499252/generate_t0_vars.sh: /tmp/awx_2484_zvvoz0dl/project/roles/t0_create/vars/main.yml: No such file or directory"
已尝试修改ansible.cfg的roles_path、配置remote_tmp,均无效果;仅硬编码项目目录时任务可正常运行。
核心原因
问题出在**script模块的执行逻辑**:script模块会把控制节点(AWX服务器)上的脚本复制到远程目标节点的临时目录中执行,此时脚本接收的role_path是AWX控制节点上的项目路径,但远程节点并没有这个目录结构,因此会触发"文件不存在"的错误。
解决方法
方法一:用Ansible原生逻辑替代Bash脚本
直接用Ansible模块完成vars文件的生成,所有操作在AWX控制节点执行,能正确识别role_path:
- name: 生成T0名称列表 set_fact: t0_name_list: "{{ range(1, t0_count|int + 1) | map('format', 'T0_GW_%02d') | list }}" - name: 确保vars目录存在 file: path: "{{ role_path }}/vars" state: directory - name: 生成vars/main.yml文件内容 copy: content: | vars_t0: {% for t0_name in t0_name_list %} - t0_name: {{ t0_name }} {% endfor %} dest: "{{ role_path }}/vars/main.yml" - include_vars: "{{ role_path }}/vars/main.yml"
方法二:修改脚本执行方式,在控制节点运行
如果必须保留Bash脚本,改用command/shell模块并指定在控制节点执行:
- name: 在控制节点执行生成脚本 command: "{{ role_path }}/generate_t0_vars.sh {{ t0_count }} {{ role_path }}" delegate_to: localhost register: output - name: 确保vars目录存在(可选,防止目录缺失) file: path: "{{ role_path }}/vars" state: directory delegate_to: localhost - include_vars: "{{ role_path }}/vars/main.yml"
注意:需确保generate_t0_vars.sh具备可执行权限,且AWX运行用户能访问该脚本路径。
额外提示
- 避免在
script模块中使用控制节点特有的路径变量,该模块的执行上下文是远程节点。 - 若涉及文件操作,优先用Ansible原生模块(如
copy、file),减少跨节点路径问题。
内容的提问来源于stack exchange,提问作者Olivier
相关产品推荐
相关产品推荐

