Ansible新手求助:如何在Playbook输出中显示copy模块content计算值
解决Ansible中无法捕获copy模块content内容的问题
copy模块的register返回结果里不包含content字段,所以你无法通过csv_content变量获取到生成的CSV内容。
直接将CSV内容定义为独立变量,即可同时用于文件生成和调试输出:
vars: current_date: "{{ '%Y-%m-%d' | strftime }}" # 定义CSV内容变量,把原copy模块中的模板逻辑迁移过来 csv_data: | {% for host in hosts_list %} {% set idm=host.inventory_hostname.split('_')[0].split('-')[1] %} {% set idm_padded = '%03d' % idm|int %} {{ [idm_padded] | map('trim') | join(';') }} {% endfor %} hosts_list: "{{ ansible_play_hosts | map('extract', hostvars) | list }}" tasks: - name: Dump results to /tmp/myfile.csv copy: dest: /tmp/mycsv_{{ current_date }}.csv content: "{{ csv_data }}" run_once: yes - ansible.builtin.debug: msg: "{{ csv_data }}"
关键调整说明
- 将原copy模块
content内的模板逻辑提取为全局变量csv_data,既可以传递给copy模块生成文件,也能直接通过debug模块输出内容。 - 复用
current_date变量替代重复的strftime过滤器调用,简化代码。 - 将
hosts_list移至全局vars,避免任务内重复定义。
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

