#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.
Комментариев нет:
Отправить комментарий