我使用ansible的git模块(使用ansible 2.1)来获取repo,然后使用shell模块更改为下载的repo(如果shell不起作用,我可以尝试命令)。我有一个角色有两个include.yml文件(一个来自git,另一个来自使用shell命令) - 都在角色的tasks目录中。 git克隆工作,但即使是shell命令之后也没有(它似乎无法检测到目录是否已创建 - 即使我可以使用另一个shell转到该目录)。我尝试使用wait_for(但它永远不会返回)。我使用我的本地用户ID来执行所有任务,并使用我的ID创建git repo。关于如何解决这个问题的任何想法:
shell.yml
---
- wait_for: path=/tmp/my-repos/my-proj
- shell: cd /tmp/my-repos/my-proj
main.yml
---
- include: git.yml
- include: shell.yml
git.yml
---
- name: fetching my repo
local_action: git repo={{ my_repo_url }}
dest={{ my_proj_path }}
accept_hostkey=yes
depth=10
version={{ my_project_version }}
答案 0 :(得分:1)
这是因为git模块本地克隆了一个repo,'shell'和'wait_for'模块在另一台主机上执行(根据你的库存文件)
如果您的剧本必须在localhost上完全播放,您可以:
1)删除 git.yml 中的'local_action':
---
- name: fetching my repo
git repo={{ my_repo_url }}
dest={{ my_proj_path }}
accept_hostkey=yes
depth=10
version={{ my_project_version }}
2)使用“本地”连接器插件调用您的剧本:
ansible-playbook -i "localhost," -c local main.yml
优势:如果需要,您可以在远程主机上使用此剧本。
我不明白为什么你需要使用模块'wait_for','git'模块确保在下一个任务之前克隆存储库。
答案 1 :(得分:0)
问题是在shell命令之前没有使用local_action - 该命令是在远程机器上运行的,而不是在控制器机器上运行
---
- local_action: shell cd /tmp/my-repos/my-proj