使用Ansible如何在同一主机上同步两个目录

110次阅读
没有评论

问题描述

在使用Ansible时,有一个需求是希望在同一主机上同步两个目录。他尝试了多种方法,包括使用copy模块的同步和rsync模块,但都没有成功。他希望能找到一种能够保留权限的同步两个目录的方法。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

使用Ansible的copy模块可以将文件从本地或远程机器复制到远程机器上的指定位置。为了从远程机器本身复制文件,需要将remote_src设置为yes
以下是使用copy模块同步两个目录的步骤:
1. 在Ansible playbook中添加一个任务,使用copy模块。
2. 设置src为源目录的路径,dest为目标目录的路径,mode为保留权限。
3. 将remote_src设置为yes,以从远程机器复制文件。
下面是一个示例的Ansible playbook片段:

- name: Copy multiple Directories
  copy:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
    mode: "{{ item.mode }}"
    remote_src: yes
  with_items:
    - { src: '/home_old/', dest: '/home/', mode: preserve}
    - { src: '/var_old/', dest: '/var/', mode: preserve}

在上面的示例中,我们使用copy模块将/home_old/目录复制到/home/目录,将/var_old/目录复制到/var/目录。设置remote_srcyes,以从远程机器复制文件,并保留权限。

方案2

使用shell模块执行cp命令可以解决问题,但不推荐使用该方法。
另一种方法是使用shell模块执行cp命令来复制目录。但需要注意,使用shell模块执行命令可能会增加复杂性,并且不推荐使用该方法。
以下是一个示例的Ansible playbook片段:

- name: Copy var directory
  shell: |
    cp -rpf /home_old/* /home
    cp -rpf /var_old/* /var
  args:
    executable: /bin/bash

在上面的示例中,我们使用shell模块执行cp命令将/home_old/目录的内容复制到/home/目录,将/var_old/目录的内容复制到/var/目录。
请注意,使用shell模块执行命令可能会增加复杂性,并且需要确保命令的正确性和安全性。

正文完