Ansible set_fact提取注册结果路径返回generator对象如何解决
问题原因
map过滤器返回的是生成器对象,直接调用string过滤器不会解析生成器内容,才会输出<generator object do_map ...>的异常结果- 你当前提取的
item属性是循环的输入项(也就是源文件路径),如果要获取目标路径应该取dest字段而非item字段
解决方案
场景1:仅单个循环结果(你示例中的场景)
直接取第一个结果的对应属性即可:
- set_fact: # 提取目标路径就用dest字段,要源路径就换成item字段 filefact: "{{ output.results[0].dest }}" - debug: msg: "{{ filefact }}"
执行后输出即为你需要的字符串:/home/ec2-user/bb/Data-1.1.tar.gz
场景2:多个循环结果,要提取所有路径
先用list过滤器把map返回的生成器转成列表,按需拼接成字符串即可:
# 提取所有目标路径为列表格式 - set_fact: filefact_list: "{{ output.results | map(attribute='dest') | list }}" # 如果需要转成空格分隔的字符串,加join过滤器 - set_fact: filefact_str: "{{ output.results | map(attribute='dest') | list | join(' ') }}"
内容的提问来源于stack exchange,提问作者tarun
相关产品推荐
相关产品推荐

