Мне нужно скопировать машину формы файла A на машину B, тогда как моя управляющая машина, с которой я запускаю все свои доступные задачи, - это машина C (локальная машина)
Я пробовал следующее:
Используйте команду scp в модуле оболочки ansible
hosts: machine2
user: user2
tasks:
- name: Copy file from machine1 to machine2
shell: scp user1@machine1:/path-of-file/file1 /home/user2/file1
Этот подход продолжается и никогда не заканчивается.
использовать модули выборки и копирования
hosts: machine1
user: user1
tasks:
- name: copy file from machine1 to local
fetch: src=/path-of-file/file1 dest=/path-of-file/file1
hosts: machine2
user: user2
tasks:
- name: copy file from local to machine2
copy: src=/path-of-file/file1 dest=/path-of-file/file1
Этот подход вызывает у меня следующую ошибку:
error while accessing the file /Users/<myusername>/.ansible/cp/ansible-ssh-machine2-22-<myusername>, error was: [Errno 102] Operation not supported on socket: u'/Users/<myusername>/.ansible/cp/ansible-ssh-machine2-22-<myusername>'
Любые предложения будут полезны.
Ответы:
Для копирования удаленных файлов на удаленные вы можете использовать модуль синхронизации с
delegate_to: source-server
ключевым словом ' ':Этот сценарий может запускаться с вашего компьютера C.
источник
config.ssh.insert_key = false
чтобы заставить Vagrant использовать ОДИН insecure_key для доступа ко всем машинам. Но теперь у меня даже сообщение об ошибке не появляется (ждет вечно). Также ошибка github.com/ansible/ansible/issues/7250 говорит о невозможности копирования с удаленного на удаленный.mode=push
(илиdelegate_to: serverB
, но не оба).mode=push
следует использовать, но в этой ситуацииdelegate_to: serverB
нельзя использовать, потому что это сделаетserverB
источник и место назначения.Как уже указывал ant31, вы можете использовать
synchronize
для этого модуль. По умолчанию модуль передает файлы между управляющей машиной и текущим удаленным хостом (inventory_host
), однако это можно изменить с помощью параметра задачиdelegate_to
(важно отметить, что это параметр задачи , а не модуля).Вы можете разместить задачу на любом
ServerA
илиServerB
, но вы должны соответствующим образом скорректировать направление передачи (с помощьюmode
параметраsynchronize
).Ставим задачу на
ServerB
При этом используется значение по умолчанию
mode: push
, поэтому файл передается от delegate (ServerA
) к текущему удаленному (ServerB
).Это может показаться странным, поскольку задача помещена в
ServerB
(черезhosts: ServerB
). Однако следует иметь в виду, что задача на самом деле выполняется на делегированном хосте , которым в данном случае и являетсяServerA
. Так что толкание (отServerA
кServerB
) - действительно правильное направление. Также помните, что мы не можем просто отказаться от делегирования вообще, поскольку это будет означать, что передача происходит между управляющей машиной иServerB
.Ставим задачу на
ServerA
Используется
mode: pull
для изменения направления передачи. Опять же, имейте в виду, что задача фактически выполняется наServerB
, поэтому вытягивание - правильный выбор.источник
Warning: Identity file /Users/myuser/.ssh/id_servers not accessible
.Если вам нужно синхронизировать файлы между двумя удаленными узлами через ansible, вы можете использовать это:
когда
remote_server
вам нужно запустить rsync в режиме демона. Простой пример:источник
Я смог решить эту проблему, используя local_action в scp в файл с машиныA на machineC, а затем скопировав файл на machineB.
источник
Простой способ использовать модуль копирования для передачи файла с одного сервера на другой.
Вот playbook
источник
Если вы хотите выполнить rsync и использовать настраиваемый пользовательский и настраиваемый ключ ssh, вам необходимо записать этот ключ в параметрах rsync.
источник
Вы можете использовать
deletgate
сscp
тоже:Потому
delegate
что команда выполняется на другом сервере, и этоscp
файл сам себе.источник