【问题标题】:Ansible copy and extract archived file from remote server to anotherAnsible 将存档文件从远程服务器复制并提取到另一个服务器
【发布时间】:2015-10-29 03:17:10
【问题描述】:

我正在远程服务器 A 上生成一个存档文件。例如 /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..

更新: 我可以使用rsync module 吗? .我正在尝试使用同步模块将存档文件复制到远程服务器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?

【问题讨论】:

    标签: ansible tar


    【解决方案1】:

    您当前的剧本正在尝试从服务器 A rsync 到服务器 B,但它没有这样做的权限(如您的错误所示,缺少公钥)。

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

    您可以将fetch module 用于此类操作。它基本上类似于copy module,但相反。

    示例剧本可能如下所示:

    - 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
    

    【讨论】:

    • 您有可能在示例代码中混淆了serverAserverB(或fetchcopy)?如果存档是在serverA 上创建的,那么它应该 serverA serverB 获取 - 或者,复制到 serverB by serverA,对吗?另外,一个z tar 开关还不够吗?
    • 正如答案所说,此示例从服务器 A 获取存档,因此它返回到 Ansible 控制主机,然后再将其复制回服务器 B,因为服务器 A 和服务器 B 没有每个其他人的公钥(在许多情况下实际上应该是这种情况)。是的,tar 压缩开关重复是直接从问题中复制的,我现在会解决这个问题,谢谢。
    【解决方案2】:
    - 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
    

    【讨论】:

      猜你喜欢
      • 2020-06-18
      • 2013-12-03
      • 2014-11-18
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      相关资源
      最近更新 更多