【问题标题】:Sync files between 2 hosts using ansible使用 ansible 在 2 个主机之间同步文件
【发布时间】:2020-05-10 23:35:08
【问题描述】:

我正在寻找一种在 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 配置文件对其进行参数化?

【问题讨论】:

  • 从 CSV 文件中删除空格。

标签: ansible synchronize


【解决方案1】:

是的。这是可能的。在第一次播放中,读取 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2016-12-12
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多