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