wait_for ansible 不工作

wait_for with ansible not working

我正在使用 ansible 的 git 模块(使用 ansible 2.1)拉取一个 repo,然后使用 shell 模块更改为下载的 repo(我可以尝试命令 if shell 不起作用)。我有一个角色有两个 include.yml 文件(一个从 git 中提取,第二个使用 shell 命令) - 都在角色的任务目录中。 git 克隆有效,但即使是紧随其后的 shell 命令也无效(它似乎无法检测到目录已创建 - 尽管我可以使用另一个 shell 转到该目录) .我尝试使用 wait_for(但它从来没有 returns)。我正在使用我的本地用户 ID 执行所有任务,并且 git 存储库是使用我的 ID 创建的。关于如何解决这个问题的任何想法:

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 }} 

问题是在 shell 命令之前没有使用 local_action - 命令是 运行 在远程机器上,而不是控制器机器

---
- local_action: shell cd /tmp/my-repos/my-proj

这是因为 git 模块在本地克隆了一个 repo,并且 'shell' 和 'wait_for' 模块是在另一台主机上执行的(根据您的清单文件)

如果您的剧本必须在本地主机上完整播放,您可以:

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) 使用 'local' 连接器插件调用您的剧本:

ansible-playbook -i "localhost," -c local main.yml

优点:如果需要,您可以在远程主机上使用此剧本。

我不明白你为什么需要使用模块 'wait_for','git' 模块确保在下一个任务之前克隆存储库。