使用变量结合Ansible with_fileglob时出现字符范围错误的问题
问题原因
直接将列表变量libvirt_package_name插入glob路径时,会生成类似files/['libvirt-clients', 'libvirt-daemon']*的非法格式,不符合glob语法规则,因此触发"bad character range"解析错误。
解决方案
需要为列表中的每个包名单独生成合法的glob匹配模式,以下两种方式都可以解决问题:
方式一:结合loop遍历列表
- name: debug debug: var: item with_fileglob: "files/{{ item }}*" loop: "{{ libvirt_package_name }}"
通过loop遍历libvirt_package_name里的每个包名,为每个包名拼接成files/包名*的glob模式,再由with_fileglob匹配对应文件。
方式二:用过滤器生成完整模式列表
- name: debug debug: var: item with_fileglob: "{{ libvirt_package_name | map('regex_replace', '^(.*)$', 'files/\\1*') | list }}"
借助map和regex_replace过滤器,把列表中的每个包名转换为files/包名*的格式,再转为完整的模式列表传给with_fileglob,它会自动遍历每个模式匹配对应文件。
效果说明
两种方式都能正确匹配files目录下以目标包名开头的deb文件,比如libvirt-clients_8.0.0-1ubuntu7.1~cloud0_amd64.deb这类文件。
内容的提问来源于stack exchange,提问作者huynp
相关产品推荐
相关产品推荐

