使用ansible在2个主机之间同步文件

问题描述 投票:0回答:1

我正在寻找一种在ansible中在2个主机之间同步文件的方法。情况如下。我有一个CSV文件,其中包含3列,指示需要在2台服务器之间同步的目录。前两列指示源服务器和目标服务器,第三列指示目录

source, target, directory
src01, tgt02, dir0003
src02, tgt05, dir0004
src10, tgt68, dir1022

我找到了这个答案,用于在2个主机之间同步文件-How to copy files between two nodes using ansible

是否有任何方法可以使用csv配置文件对其进行参数化?

ansible synchronize
1个回答
0
投票

是。这是可能的。在第一个剧本中,读取CSV文件并创建目标组。在第二个播放中使用新的组,并循环播放synchronize模块。例如剧本

- hosts: localhost
  tasks:
    - read_csv:
        path: db.csv
      register: my_db
    - add_host:
        hostname: "{{ item.target }}"
        groups: my_targets
        my_list: "{{ my_db.list }}"
      loop: "{{ my_db.list }}"

- hosts: my_targets
  tasks:
    - debug:
        msg: "Copy {{ item.directory }} from {{ item.source }} to {{ inventory_hostname }}"
      loop: "{{ my_list|json_query(query) }}"
      vars:
        query: "[?target == '{{ inventory_hostname }}']"

    - name: Copy
      synchronize:
        src: "{{ item.directory }}"
        dest: "{{ item.directory }}"
      delegate_to: "{{ item.source }}"
      loop: "{{ my_list|json_query(query) }}"
      vars:
        query: "[?target == '{{ inventory_hostname }}']"

(未测试)

给予

    "msg": "Copy dir0004 from src02 to tgt05"
    "msg": "Copy dir0003 from src01 to tgt02"
    "msg": "Copy dir1022 from src10 to tgt68"
© www.soinside.com 2019 - 2024. All rights reserved.