Ansible Tower Survey逗号分隔文件名转换与循环拷贝实现问题
Ansible Tower Survey 逗号分隔文件名参数处理方案
现有报错修复
你遇到的模板渲染错误由两个核心问题导致:
- YAML语法错误:
set_fact模块下的变量没有缩进,不符合YAML层级要求 - 路径拼接语法错误:
{{standard_path \\ item }}写法错误,同时拆分后的文件名可能带有前后空格(用户输入逗号后带空格),需要提前处理
完整实现逻辑
前置Survey配置
在Ansible Tower作业模板的Survey中新增一个单行文本输入项,变量名设为input_file_list,提示用户输入逗号分隔的文件名即可,支持1-5个文件输入。
完整Playbook代码
--- - name: 预处理Survey传入的文件名列表 set_fact: # 拆分逗号分隔的字符串,同时去除每个文件名前后的多余空格 clean_file_list: "{{ input_file_list.split(',') | map('trim') | list }}" # 定义目标工作目录 standard_path: "{{ ansible_user_dir }}\\execution" - name: 循环拷贝文件到目标目录 win_copy: src: "{{ item }}" dest: "{{ standard_path }}\\{{ item }}" with_items: "{{ clean_file_list }}" - name: 生成脚本要求的单引号逗号分隔格式参数 set_fact: # 自动给每个文件名加单引号,再用逗号拼接 formatted_file_names: "{{ clean_file_list | map('quote') | join(',') }}" # 拼装成脚本调用的完整参数 script_exec_params: "-filenames {{ formatted_file_names }}" # 后续执行脚本的步骤直接引用 {{ script_exec_params }} 即可
效果验证
如果用户在Survey中输入file1.txt, file2.txt, file3.txt,最终生成的formatted_file_names值就是'file1.txt','file2.txt','file3.txt',完全符合脚本的入参要求。
内容的提问来源于stack exchange,提问作者user3535468
相关产品推荐
相关产品推荐

