Копировать файл с одного удаленного сервера на другой удаленный сервер, используя вложенный делегат_ - PullRequest
1 голос
/ 10 июля 2019

Как пользователь, я хочу скопировать файл с узла 1 на узел 2. Возможно ли это с модулем копирования + Delegate_to

Вот то, что я пытался сделать. Playbook работает с узла 3.

Playbook Sample

---
- name: Gather Facts for all hosts
  hosts: all
  gather_facts: true
  any_errors_fatal: true
  become: true

- name: Test
  hosts: all
  gather_facts: false
  any_errors_fatal: true
  become: true
  roles:
    - role: test

Role Sample

---
- block:
    - include_tasks: test.yml
      any_errors_fatal: true
      run_once: true
Task Sample

---
 - name: Test
   block:
    - name: Transfer files from node1 to node2
      copy:
        src: /tmp/a
        dest: /tmp/
      delegate_to: node2

  delegate_to: node1

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Модуль синхронизации можно использовать только в том случае, если rsync включен либо на исходном сервере (в вашем случае kube master), либо в узлах kube.

Метод 1: для запуска с мастера необходимо включить rsync в мастере

Синхронизировать режим использования push по умолчанию

- hosts: nodes
  tasks:
    - name: Transfer file from master to nodes
      synchronize:
        src: /src/path/to/file
        dest: /dest/path/to/file
      delegate_to: "{{ master }}"

Способ 2: использовать модули выборки и копирования

 - hosts: all
   tasks:
     - name: Fetch the file from the master to ansible
       run_once: yes
       fetch: src=/src/path/to/file dest=temp/ flat=yes
       when: "{{ ansible_hostname == 'master' }}"
     - name: Copy the file from the ansible to nodes
       copy: src=temp/file dest=/dest/path/to/file
       when: "{{ ansible_hostname != 'master' }}"

Надеюсь, это поможет.

2 голосов
/ 10 июля 2019

Краткий ответ: нет : вы не сможете сделать это с модулем copy.

Возможно, вы захотите взглянуть на модуль synchronize

Цитирование документа

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

Вы бы в итоге получили что-то вроде:

---
- name: Rsync some files
  hosts: my_target_host

  tasks:
    - name: copy my file
      synchronize:
        src: path/on/source/host
        dest: path/on/dest/host
      delegate_to: my_source_host

Редактировать Я только что нашел эту статью , ссылающуюся на synchronize, а также fetch / метод копирования, который вы, возможно, захотите посмотреть.

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