如何让ansible.posix.synchronize跳过不存在的源文件夹?
解决方案:跳过不存在的源文件夹执行同步
可以通过stat模块检查文件夹存在性,结合set_fact筛选有效列表,再执行同步任务,具体步骤如下:
1. 检查所有待同步文件夹的存在状态
遍历folder_list,用stat模块检查每个源文件夹是否存在,将结果注册为变量:
tasks: - name: 检查待同步文件夹状态 stat: path: "/path/folder/{{ item }}" get_checksum: false loop: "{{ folder_list | list }}" register: folder_stats
2. 筛选出存在的文件夹
用set_fact从检查结果中过滤出存在的文件夹,生成新的有效列表:
- name: 筛选存在的文件夹 set_fact: existing_folders: "{{ folder_stats.results | selectattr('stat.exists', 'equalto', true) | map(attribute='item') | list }}"
3. 执行同步任务
遍历筛选后的existing_folders列表,执行同步操作:
- name: 同步存在的文件夹 loop: "{{ existing_folders }}" ansible.posix.synchronize: src: "/path/folder/{{ item }}" dest: "/other_node/folders/" archive: false recursive: true perms: true checksum: true delete: true
关于问题发布平台的说明
这个问题既涉及Ansible脚本的编写,也属于系统运维自动化的实践场景,ServerFault和Stack Overflow都适合发布:
- 如果更侧重Ansible语法、模块组合的代码层面问题,Stack Overflow是更匹配的选择;
- 如果更偏向生产环境下的运维实践、同步策略这类运维场景问题,ServerFault更合适。
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

