以下是我试图运行的剧本。
---
- hosts: all
sudo : true
sudo_user : ganesh
tasks:
- name: git repo clone
git: repo=https://ganesh:mypassword@github.com/myrepo/root-repo.git dest=/home/ganesh/rootrepo version=master recursive=no
git: repo=https://ganesh:mypassword@github.com/myrepo/subrepo1.git dest=/home/ganesh/rootrepo/subrepo1 version=master recursive=no
git: repo=https://ganesh:mypassword@github.com/myrepo/subrepo2.git dest=/home/ganesh/rootrepo/subrepo2 version=master recursive=no
git: repo=https://ganesh:mypassword@github.com/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 目录下执行。其他一切都被删除了。即使 rootrepo 内容也会被删除。
rootrepo - subrepo3 - subrepo3 contents
为什么会这样?如何实现我期待的目录结构?
答案 0 :(得分:2)
关于为什么它没有按照预期工作的解释是Ansible游戏被读作yaml文件和"任务"是一个词典列表。在您的情况下,您正在复制模块" git" (字典中的一个键)所以最后一个获胜。
要完全按照您的要求进行以下游戏
---
- hosts: all
sudo : true
sudo_user : ganesh
tasks:
- name: git repo clone
git: repo=https://ganesh:mypassword@github.com/myrepo/root-repo.git dest=/home/ganesh/rootrepo version=master recursive=no
- name: clone subrepos
git: repo=https://ganesh:mypassword@github.com/myrepo/{{ item }}.git dest=/home/ganesh/rootrepo/{{ item }} version=master recursive=no
with_items:
- subrepo1
- subrepo2
- subrepo3
一般而言,在其他存储库中检出存储库并不是一个好主意。 您想要做的更有可能是将subrepo {1,2,3}添加为root-repo的子模块。
假设你已经提交了对你的root repo的访问权限克隆它然后运行。
git submodule add https://ganesh:mypassword@github.com/myrepo/subrepo1.git subrepo1
git submodule add https://ganesh:mypassword@github.com/myrepo/subrepo2.git subrepo2
git submodule add https://ganesh:mypassword@github.com/myrepo/subrepo3.git subrepo3
检查这些更改,然后在结帐时将你的游戏设置recursive = true指定为root-repo.git