Eu preciso copiar o arquivo da máquina A para a máquina B, enquanto minha máquina de controle de onde executo todas as minhas tarefas ansible é a máquina C (máquina local)
Eu tentei o seguinte:
Use o comando scp no módulo shell do ansible
hosts: machine2
user: user2
tasks:
- name: Copy file from machine1 to machine2
shell: scp user1@machine1:/path-of-file/file1 /home/user2/file1
Essa abordagem continua e nunca termina.
usar módulos de busca e cópia
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
Essa abordagem me lança o seguinte erro:
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>'
Quaisquer sugestões seriam úteis.
Respostas:
Para copiar arquivos remotos para remotos, você pode usar o módulo de sincronização com
delegate_to: source-server
a palavra-chave ' ':Este manual pode ser executado em sua máquinaC.
fonte
config.ssh.insert_key = false
para forçar o Vagrant a usar a ÚNICA insecure_key para acessar todas as máquinas. Mas agora nem mesmo recebo uma mensagem de erro (espera para sempre). Também o bug github.com/ansible/ansible/issues/7250 diz que não é possível copiar de remoto para remoto.mode=push
(oudelegate_to: serverB
, mas não ambos).mode=push
deveria ser usado, mas nesta situaçãodelegate_to: serverB
não pode ser usado, pois isso fariaserverB
a origem e o destino.Como a ant31 já apontou você pode usar o
synchronize
módulo para isso. Por padrão, o módulo transfere arquivos entre a máquina de controle e o host remoto atual (inventory_host
), porém isso pode ser alterado usando odelegate_to
parâmetro da tarefa (é importante notar que este é um parâmetro da tarefa , não do módulo).Você pode colocar a tarefa em
ServerA
ouServerB
, mas deve ajustar a direção da transferência de acordo (usando omode
parâmetro desynchronize
).Colocando a tarefa em
ServerB
Este usa o padrão
mode: push
, então o arquivo é transferido do delegado (ServerA
) para o remoto atual (ServerB
).Isso pode parecer estranho, já que a tarefa foi colocada em
ServerB
(viahosts: ServerB
). No entanto, é preciso ter em mente que a tarefa é realmente executada no host delegado , que neste caso éServerA
. Portanto, empurrar (deServerA
paraServerB
) é de fato a direção correta. Lembre-se também de que não podemos simplesmente optar por não delegar de jeito nenhum, pois isso significaria que a transferência aconteceria entre a máquina de controle eServerB
.Colocando a tarefa em
ServerA
Isso é usado
mode: pull
para inverter a direção de transferência. Novamente, tenha em mente que a tarefa é realmente executadaServerB
, então puxar é a escolha certa.fonte
Warning: Identity file /Users/myuser/.ssh/id_servers not accessible
.Consegui resolver isso usando local_action para scp para o arquivo da máquinaA para a máquinaC e, em seguida, copiando o arquivo para a máquinaB.
fonte
Se você precisar sincronizar arquivos entre dois nós remotos via ansible, você pode usar isto:
quando ligado
remote_server
você precisa iniciar o rsync com o modo daemon. Exemplo simples:fonte
Uma maneira simples de usar o módulo de cópia para transferir o arquivo de um servidor para outro
Aqui está o manual
fonte
Se você deseja fazer rsync e usar um usuário personalizado e uma chave ssh personalizada, é necessário escrever esta chave nas opções de rsync.
fonte
Você também pode usar
deletgate
comscp
:Por causa do
delegate
comando é executado no outro servidor escp
é o arquivo para si mesmo.fonte