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