You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:22:07