Это двоякий вопрос.
В сценариях, где репозиторий git не является общедоступным, могу ли я развернуть его с локального компьютера (на котором также работает Ansible) на удаленный хост, используя локальную копию репозитория на моем жестком диске (или копию на главном сервере, например )?
Если ответ на предыдущий вопрос положительный, используется ли для этой цели модуль git?
РЕДАКТИРОВАТЬ:
Что я пробовал до сих пор:
Структура каталога выглядит следующим образом:
repo/
|-.git/
|-deploy/
| |-inventory
| |-roles/
| | \-app/
| | \-main.yml
| \-vagrant.yml
\-src/
playbook содержит:
- name: Clone local application
git: repo={{ inventory_dir }}/../
dest=/home/{{ application_name }}/code
Развертывание этого в бродячем боксе через SSH приводит к:
fatal: [vagrant]: FAILED! => {
"changed": false,
"cmd": "/usr/bin/git clone --origin origin path/to/repo",
"failed": true,
"msg": "Cloning into '/home/app/code'...\nfatal:
'path/to/repo' does not appear to be a git repository\nfatal:
Could not read from remote repository.\n\nPlease make sure you
have the correct access rights\nand the repository exists.",
...}
Ansible git
модуль использует собственный git
исполняемый файл для выполнения своих действий, поэтому вам нужно действовать так же, как и с ручными операциями.
Подключите диск, содержащий репозиторий Git, к целевой машине.
Это легко достигается с помощью Vagrant, если вы храните репозиторий в каталоге, содержащем Vagrantfile
(это может отличаться от вашего сценария - не уверен, что вы имеете в виду под vagrant.yml
).
Vagrant по умолчанию монтирует этот каталог в /vagrant
на виртуальной машине, поэтому для клонирования репозитория вы должны использовать стандартный git
модуль:
- git:
repo: /vagrant/path/to/source/repository
dest: /path/to/destination
Он будет клонировать репозиторий в /path/to/destination/repository
.
Использовать Ansible synchronize
модуль , чтобы отправить репозиторий на конечный компьютер. Если единственной причиной клонирования является «развертывание приложения» без возврата в исходный репозиторий, этого достаточно.
Наконец, вы можете поделиться репозиторием, используя любой из протоколов, поддерживаемых Git, например SSH, HTTP, HTTPS, FTP, FTPS, rsync; или смонтируйте каталог с помощью NFS (это эквивалент первого метода).