wait_for,ansible无法正常工作

时间:2016-10-04 21:13:50

标签: ansible ansible-playbook ansible-2.x

我使用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 }} 

2 个答案:

答案 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