我正在寻找一种在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文件并创建目标组。在第二个播放中使用新的组,并循环播放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"