Ansible将存档文件从远程服务器复制并解压缩到另一个服务器

Ansible将存档文件从远程服务器复制并解压缩到另一个服务器,ansible,tar,Ansible,Tar,我正在远程服务器上生成一个存档文件。 /tmp/website.tar.gz 并希望将文件传输/复制和解压缩到远程服务器B(/var/www)。 我如何在Ansible中做到这一点 创建存档文件的我的Ansible脚本: - name: archive files shell: tar -zczf /tmp/website.tar.gz . args: chdir: "{{ source_dir }}" tags: release - name: copy archived

我正在远程服务器上生成一个存档文件。
/tmp/website.tar.gz
并希望将文件传输/复制和解压缩到远程服务器B(/var/www)。 我如何在Ansible中做到这一点

创建存档文件的我的Ansible脚本:

- name: archive files
  shell: tar -zczf /tmp/website.tar.gz .
  args:
    chdir: "{{ source_dir }}"
  tags: release

- name: copy archived file to another remote server and unpack to directory /var/www. unresolved..
更新: 我能用这个吗。我正在尝试使用同步模块将存档文件复制到远程服务器B:

- name: copy archived file to another remote server and unpack to directory /var/www
  synchronize:
    src: /tmp/website.tar.gz
    dest: /var/www
    rsync_opts:
      - "--rsh=ssh -i /home/agan/key/privatekey"
  delegate_to: remote_server_b
  tags: test
它会产生一个错误:

fatal: [remote_server_b] => SSH Error: Permission denied (publickey).
    while connecting to xxx.xxx.xxx.129:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.

FATAL: all hosts have already failed -- aborting

我有服务器B的私钥,如何使用私钥远程访问服务器B?

您当前的playbook正在尝试从服务器a同步到服务器B,但它没有这样做的权限(如错误所示,缺少公钥)

您可以将服务器A的公钥放在服务器B上(如果这些盒子应该定期相互通信),也可以将文件带回Ansible主机(该主机应该可以访问两台服务器),然后将其推回到服务器B

你可以用这个来做类似的事情。这基本上和前面的一样,但正好相反

示例剧本可能如下所示:

- hosts: serverA
  tasks:
    - name: archive files on serverA
      shell: tar -czf /tmp/website.tar.gz .
      args:
        chdir: "{{ source_dir }}"
      tags: release
    - name: fetch the archive from serverA
      fetch:
        src: /tmp/website.tar.gz
        dest: /tmp/website.tar.gz

- hosts: serverB
  tasks:
    - name: copy the archive to serverB
      copy:
        src: /tmp/website.tar.gz
        dest: /tmp/website.tar.gz

您可能在示例代码中混淆了
serverA
serverB
(或
fetch
copy
)?如果存档是在
serverA
上创建的,那么它应该由
serverB
serverA
获取,或者由
serverA
复制到
serverB
,对吗?另外,一个
z
tar开关还不够吗?正如答案所说,本例从服务器A获取存档,这样它就回到Ansible控制主机上,然后再将其复制回服务器B,这是因为服务器A和服务器B上没有彼此的公钥(事实上,在许多情况下都是这样)。是的,tar压缩开关复制是直接从问题中复制的,我现在就解决这个问题,谢谢。
- name: copy archived file to another remote server and using rsync
  synchronize: mode=pull src=/home/{{ user }}/packages/{{ package_name }}.tar.gz dest=/tmp/{{ package_name }}.tar.gz archive=yes
  delegate_to: "{{ production_server }}"
  tags: release