ansible在本地从remoteA同步(synchronize)文件到remoteB

29 篇文章 0 订阅

本地连接的是serverA:

hosts: serverB
  - name: Deploy firmware images
    synchronize:
      src: /path/on/serverA
      dest: /path/on/serverB
      checksum: true
    delegate_to: serverB


本地连接的是serverB:

hosts: serverA
  - name: Deploy firmware images
    synchronize:
      src: /path/on/serverA
      dest: /path/on/serverB
      checksum: true
      mode: pull
    # delegate_to: serverB
    delegate_to: "{{ item }}"
    loop: "{{ query('inventory_hostnames', pxe_hosts | default('serverB')) }}"
	# loop: "{{ lookup('inventory_hostnames', pxe_hosts | default('serverB'), wantlist=True) }}"  lookup 需要加wantlist=True来返回list
    run_once: true

在hosts为serverA的情况,若serverA 中包含多台server:
hosts文件:

[serverA]
server1
server2
[serverB]
server3
server4
  1. 则在ansible运行时,若没有run_once: true, server1和server2都会向serverB同步文件。

    并且在server执行时会报错:
    \r\nrsync: rename failed for “/path/on/serverB/test_file” (from bios/.tmp/test): No such file or directory (2)\nrsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1650) [generator=3.1.2]\n", “rc”: 23
    同步过去的目的地的文件/path/on/serverB/test_file会出现问题,具体原因还未找到。

    若有run_once: true, 那么此task只会在第一台server上运行。

  2. 如果要同步到多台server, 如此例中的[serverB] 下的两台server, 不能直接在delegate_to中写serverB,
    需写成:

        delegate_to: "{{ item }}"
        loop: "{{ query('inventory_hostnames', pxe_hosts | default('serverB')) }}"
    

    pxe_hosts 为在运行ansible时通过 -e 传入的参数:

    ansible-playbook -i ./hosts -e "pxe_hosts=server3" deploy.yml
    
  3. synchronize模块和copy模块的简单比较
    copy模块不支持从远端到本地的拉去操作,fetch模块支持,但是src参数不支持目录递归,只能回传具体文件;
    copy模块的remote_src参数是指定从远端服务器上往远端服务器上复制,相当于在shell模块中执行copy命令;
    synchronize则支持文件下发和回传,分别对应的push和pull模式。synchronize模块的功能依赖于rsync.x86_64,但是功能不依赖于rsync配置文件中定义的模块;
    copy模块适用于小规模文件操作,synchronize支持大规模文件操作。

  4. 使用synchronize模块,delegate_to remoteB, 前提保证remoteB 的serverB 能够ssh免密访问remoteA的server
    即serverA 的.ssh/authorized_keys 中要有serverB的id_rsa.pub。 否者会一直卡住

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值