Как скопировать файл удаленно на удаленные серверы Windows через ansible - PullRequest
0 голосов
/ 29 июня 2018

Коротко:

Ansible Control Machine : ServerC
Source Machine : ServerA
Destination Machine : ServerB

Я хочу отправить файл с сервера A на сервер B через сервер C (ответим). Я пытался использовать win_copy, но не работает из-за удаленных серверов.

---
-
  hosts: ServerA
  tasks:
    -
      delegate_to: ServerB
      name: "Transfer file from ServerA to ServerB"
      synchronize:
        dest: "C:\\Temp\\"
        mode: pull
        src: "C:\\Temp\\test"

Спасибо

@ imjoseangel Когда я отредактировал, как ты сказал, у меня возникла такая ошибка, какая-нибудь идея?

PLAY [Sync Files] ***************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [ServerA]

TASK [Sync ServerA to ServerB] **************************************************************************************************************************************************************************************************************
fatal: [ServerA]: FAILED! => {"changed": false, "cmd": " C:\\Temp\\test.gz \\ServerB\\c$\\TEMP /purge /e", "dest": "\\ServerB\\c$\\TEMP", "flags": null, "msg": "2018/07/11 09:11:50 ERROR 123 (0x0000007B) Accessing Source Directory C:\\Temp\\test.gz\\", "output": ["", "-------------------------------------------------------------------------------", "   ROBOCOPY     ::     Robust File Copy for Windows                              ", "-------------------------------------------------------------------------------", "", "  Started : Wednesday, July 11, 2018 9:11:50 AM", "   Source : C:\\Temp\\test.gz\\", "     Dest : C:\\ServerB\\c$\\TEMP\\", "", "    Files : *.*", "\t    ", "  Options : *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /R:1000000 /W:30 ", "", "------------------------------------------------------------------------------", "", "2018/07/11 09:11:50 ERROR 123 (0x0000007B) Accessing Source Directory C:\\Temp\\test.gz\\", "The filename, directory name, or volume label syntax is incorrect.", ""], "purge": true, "rc": 16, "recurse": true, "return_code": 16, "src": "C:\\Temp\\test.gz"}
 [WARNING]: Could not create retry file '/etc/ansible/test/test.retry'.         [Errno 13] Permission denied: u'/etc/ansible/test/test.retry'


PLAY RECAP **********************************************************************************************************************************************************************************************************************************
ServerA              : ok=1    changed=0    unreachable=0    failed=1

Мой недавний ямл:

---
- name: Sync Files
  hosts: ServerA

  tasks:
  - name: Sync ServerA to ServerB
    win_robocopy:
      src: "C:\\Temp\\test.gz"
      dest: "\\ServerB\\c$\\TEMP"
      recurse: true
      purge: true

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

В заголовке не очень ясно, хотите ли вы копировать из окон в окна, поэтому, если кто-то хочет скопировать большие файлы с компьютера Ansible на удаленный, я написал эту статью . В основном шаги следующие:

  1. создает общую сетевую папку на компьютере с Windows
  2. монтирует эту сетевую папку с машины linux
  3. передает файлы
  4. очистить все

Шаг 1 можно выполнить следующим образом (общая идея, больше информации в самой статье):

- name: Add share on the remote
  win_share:
    name: ansible-work-dir
    description: for pushing ansible stuff
    path: "{{ destination_folder }}"
    list: yes
    full: "{{ ansible_user_id }}"

, а шаг 2 зависит от используемой ОС. Для Ubuntu / Linux я использую следующее

- name: Mount local folder
  shell: gio mount smb://{{ ansible_host }}/ansible-work-dir < {{ thefile.path }}
  delegate_to: localhost
  become: False
  register: command_result
  failed_when:
    - command_result.rc != 0
    - not ('Location is already mounted' in command_result.stderr)

Передача самого файла на шаге 3 становится копией файла на компьютере Ansible при подключении удаленного общего ресурса.

0 голосов
/ 05 июля 2018

Сделайте следующее:

  ---
  - name: Sync Files
    hosts: ServerA

  - name: Sync ServerA to ServerB
    win_robocopy:
      src: "C:\\Temp\\"
      dest: "\\ServerB\\c$\\Temp"
      recurse: yes
      purge: yes

Выход:

"msg": "Files copied successfully!",
"output": [
    "",
    "-------------------------------------------------------------------------------",
    "   ROBOCOPY     ::     Robust File Copy for Windows                              ",
    "-------------------------------------------------------------------------------",
    "",
    "  Started : Thursday, July 5, 2018 12:02:15",
    "   Source : C:\\Temp\\",
    "     Dest : C:\\ServerB\\c$\\Temp\\",
    "",
    "    Files : *.*",
    "\t    ",
    "  Options : *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /R:1000000 /W:30 ",
    "",
    "------------------------------------------------------------------------------",

Примечание: Вам не нужно делегировать на ServerB, поскольку ServerA выполняет эту работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...