Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Копирование файлов посредством ansible

#ansible


Что-то не смог понять из примеров в документации - как же скопировать файл с удалённого
сервера на локальный и наоборот? Вот есть модули copy и fetch, например. Вот я пишу
в плейбуке:

- name: Copy file from remote host to local machine
  fetch: src=/tmp/somefile dest=/tmp/fetched(взято из доки)


Как указать ansible, с какого хоста я хочу скопировать файл? Ну и соответственно,
при копировании на удалённый хост, где указывать этот удалённый хост?

P.S. Немного разобрался:
Чтобы скопировать файл с удалённого хоста на локальный:

- hosts: localhost

  vars_files:
    - config.yml

  tasks:
    - include: ../share/dev.yml

    - name: Get file from remote
      fetch: src="{{ remote_sources_path }}/test.txt" dest="backup"
      delegate_to: '{{ remote_host }}'
      tags: fetch


Файл test.txt будет лежать в каталоге ./backup/localhost/{{ remote_sources_path }}

Скопировать с локального на удалённый:

- name: Send file to remote
  copy: src="{{ local_sources_path }}/to_remote_test.txt" dest={{ remote_sources_path }}
  delegate_to: '{{ remote_host }}'
  tags: fetch


Подозреваю, что, если указать в начале - hosts: {{ remote_host }} вместо localhost,
то delegate_to использовать не нужно.
    


Ответы

Ответ 1



Ну зачем же так сложно? )) Все эти задачи решаются и без мороки с Delegation и Local Actions, вам же самим потом сложнее будет разбираться в собственных плейбуках или читать чужие, написанные по-простому. Смотрите. В каждом плейбуке вы указываете на каких хостах запускать задачи - пишете hosts: '{{ target }}' (если хотите из командной строки управлять списком через --extra-vars "target=10.0.100.123") или hosts: dbservers (если фиксировать плейбук на группу хостов): --- # This playbook for quick tests. - name: quick tests hosts: '{{ target }}' become: true become_user: root roles: - role1 - role2 tasks: - name: install mc yum: name=mc state=latest - name: install wget yum: name=wget state=latest Эти хосты - "удалённый" сервер, ну а "локальный" - это само собой хост, на котором находится ваш плейбук. Теперь: Для копирования файла с локального сервера на удалённый -- используете модуль copy Для копирования файла с удалённого сервера на локальный -- используете модуль fetch И в copy и в fetch src - это откуда брать файл, а dest - это куда положить файл. Для copy src=local а dest=remote, для fetch -- наоборот src=remote, а dest=local. Вот и всё. Вам кстати именно об этом говорили в комментарии к вашему последнему вопросу: "В целом Ansible подразумевает то, что ты уже на удаленном хосте", не надо нарезать лишние петли вокруг локалхоста. PS Если нужно копировать с произвольного хоста на произвольный хост - то смотрите в сторону модуля syncronyze на основе rsync. Но вообще в 90% случаев вам понадобится копирование с локального хоста на удалённый и будете использовать copy или template.

Комментариев нет:

Отправить комментарий