2014-09-12 3 views
0

Ниже приведена игра, которую я пытаюсь запустить.Невозможно проверить несколько репозиториев на один каталог

--- 
- hosts: all 
    sudo : true 
    sudo_user : ganesh 

    tasks: 
    - name: git repo clone 
    git: repo=https://ganesh:[email protected]/myrepo/root-repo.git dest=/home/ganesh/rootrepo version=master recursive=no 
    git: repo=https://ganesh:[email protected]/myrepo/subrepo1.git dest=/home/ganesh/rootrepo/subrepo1 version=master recursive=no 
    git: repo=https://ganesh:[email protected]/myrepo/subrepo2.git dest=/home/ganesh/rootrepo/subrepo2 version=master recursive=no 
    git: repo=https://ganesh:[email protected]/myrepo/subrepo3.git dest=/home/ganesh/rootrepo/subrepo3 version=master recursive=no 

Я ожидаю следующую структуру каталогов после запуска этой пьесы.

 
rootrepo 
    - root repo contents 
    - subrepo1 
     - subrepo1 contents 
    - subrepo2 
     - subrepo2 contents 
    - subrepo3 
     - subrepo3 contents 

Но есть только один репо, то есть., subrepo3, оставаясь при rootrepo директории после Playbook выполняется. Все остальное удаляется. Даже rootrepo Содержимое удаляется.

 
rootrepo 
    - subrepo3 
     - subrepo3 contents 

Почему это так? Как можно добиться структуры каталогов, которые я ожидаю?

+0

Вы должны использовать [GIT подмодуль] (http://www.git-scm.com/book/ru/Git-Tools-Submodules) – keltar

+0

Спасибо @keltar за ответ. Есть ли способ выполнить этот подмодуль git в недоступном. –

ответ

2

Объяснение относительно того, почему это не работает как exepected, заключается в том, что Ansible играет в качестве файлов yaml, а «tasks» - это список словарей. В вашем случае вы дублируете модуль «git» (ключ в словаре), так что выигрывает последний.

Чтобы сделать именно то, что вы хотите, чтобы следующая игра будет работать

--- 
- hosts: all 
    sudo : true 
    sudo_user : ganesh 

    tasks: 
    - name: git repo clone 
    git: repo=https://ganesh:[email protected]/myrepo/root-repo.git dest=/home/ganesh/rootrepo version=master recursive=no 
    - name: clone subrepos 
    git: repo=https://ganesh:[email protected]/myrepo/{{ item }}.git dest=/home/ganesh/rootrepo/{{ item }} version=master recursive=no 
    with_items: 
     - subrepo1 
     - subrepo2 
     - subrepo3 

В целом, хотя, это не очень хорошая идея, чтобы иметь хранилища проверили в других хранилищах. Скорее всего, вы хотите добавить subrepo {1,2,3} в качестве подмодулей в root-repo.

Предполагая, что вы зафиксировали доступ к своему корневому репо, и затем выполните его.

git submodule add https://ganesh:[email protected]/myrepo/subrepo1.git subrepo1 
git submodule add https://ganesh:[email protected]/myrepo/subrepo2.git subrepo2 
git submodule add https://ganesh:[email protected]/myrepo/subrepo3.git subrepo3 

Проверить в этих изменениях, а затем в вашей игре установить рекурсивный = верно, когда вы извлекаете корневой repo.git

+0

Спасибо @jarv. Он работает, когда я создал отдельные задачи для клонирования субрепозиций. Похоже, что ваше предложение об использовании 'subodule' и' recursive = true' делает работу простой, но что, если я хочу проверить разные ветви для корневого модуля и подмодулей, т. Е. Ветку 'master' для корневого модуля и некоторой ветви' dev' для подмодуля. –

Смежные вопросы