如何在Ansible中通过ansible.posix.synchronize获取变更文件名用于Handler
可行,完全可以实现该需求
以下是具体的配置实现:
1. 同步任务配置
先编写使用ansible.posix.synchronize的任务,确保正确注册变更文件的变量:
- name: 同步Quadlet容器配置文件到远程主机 ansible.posix.synchronize: src: "本地指定目录/*.container" dest: "/home/user/.config/containers/systemd/" rsync_opts: - "--include=*.container" - "--exclude=*" register: changed_quadlet_files notify: 重启变更的用户级容器服务
2. Handler配置
编写对应的Handler,循环处理变更的文件,提取服务名并重启:
handlers: - name: 重启变更的用户级容器服务 ansible.builtin.systemd: name: "{{ item | basename | regex_replace('\\.container$', '') }}.service" state: restarted scope: user loop: "{{ changed_quadlet_files.changed_files }}" when: changed_quadlet_files.changed_files is defined and changed_quadlet_files.changed_files | length > 0
关键细节说明
synchronize模块执行后,changed_quadlet_files.changed_files会存储所有被新增或修改的远程文件路径列表- 通过
basename过滤器提取文件名,再用regex_replace移除.container后缀——Quadlet会自动为每个.container文件生成同名的.service服务单元 scope: user参数指定操作用户级systemd实例,确保和目标用户的容器服务匹配when条件避免在无文件变更时执行空循环操作
内容的提问来源于stack exchange,提问作者matteo-g
相关产品推荐
相关产品推荐

