Ansible - как заархивировать файлы на локальном хосте перед копированием на удаленный

Я пытаюсь скопировать большие наборы файлов (по сотням) на свой удаленный сервер. Однако при использовании команды «копировать» эта задача занимает довольно много времени. Немного поискав, я понял, что «синхронизация» подходит для этого. К сожалению, на моих текущих удаленных серверах нет «rsync», поэтому я также не могу использовать опцию «синхронизировать».

В качестве обходного пути я хотел заархивировать папку на доступном хосте, а затем перенести ее на удаленный сервер с помощью модуля «разархивировать».

- name: Archive the folder
  shell: zip <dest-zip-path> <path-to-folder>
  delegate_to: localhost

Однако при этом я получаю следующую ошибку: "module_stderr": "sudo: требуется пароль \ n"

Есть ли более простой способ заархивировать папку локально на доступном хосте перед переносом?


person akash    schedule 08.05.2020    source источник


Ответы (2)


Вы, вероятно, используете become: true в своей игре. Это также применимо при делегировании на localhost. Но для этого требуется пароль на вашем локальном компьютере.

Поскольку вам, вероятно, это не нужно, просто примените become: false к этой конкретной задаче. В противном случае вам нужно будет настроить повышение привилегий на localhost или предоставить become_password.

Более того, вам следует рассмотреть возможность использования archive модуля вместо использования оболочки.

person Zeitounator    schedule 08.05.2020

Основываясь на решении, опубликованном Zeitounator, это был код Ansible, который я использовал для решения проблемы:

- name: Archive the files
  archive:
    path: <path-to-folder>
    dest: <dest-zip-path>
    format: zip
  delegate_to: localhost
  become: false
person akash    schedule 08.05.2020