Ansible 2.8 Git模块未返回git_dir_now等预期返回值求助
git_dir_now & Other Expected Return Values in Ansible 2.8 Git Module 我之前也踩过一模一样的坑——明明Ansible 2.8的Git模块文档明确标注了git_dir_now这类新增返回值,但实际跑任务就是拿不到。结合我的排查经验,给你几个实用的方向:
1. 先确认你真的在使用Ansible 2.8的Git模块
有时候系统里会有多个Ansible环境(比如系统自带的旧版本和pip装的新版本),你以为用的是2.8,但实际调用的模块还是旧的。可以用这两个命令验证:
- 查看Git模块的返回值定义:
如果输出里找不到ansible-doc -s git | grep -A 20 RETURNgit_dir_now,说明模块版本不对。 - 直接定位模块文件并检查内容:
如果没有结果,大概率是旧模块文件残留了,彻底清理后重新安装Ansible 2.8试试。find / -name git.py -path "*ansible*modules*" | xargs grep -l "git_dir_now"
2. 不是所有场景都会返回git_dir_now
这个返回值是有触发条件的!它只会在仓库目录类型发生变更的时候才会返回(比如从裸仓库转换成非裸仓库,或者反过来)。如果你的任务只是克隆了一次仓库,之后每次执行都是拉取最新代码,这种场景下不会触发git_dir_now。
你可以先删除目标目录/home/ubuntu/myfolder,然后重新执行playbook,这时候模块会完整执行克隆流程,应该就能看到预期的返回值了。
3. 检查Git版本兼容性
Ansible 2.8对Git版本有要求,推荐用2.11以上的版本。Ubuntu 18.04自带的Git可能比较老,先确认版本:
git --version
如果版本低于2.11,升级一下Git再试:
sudo add-apt-repository ppa:git-core/ppa sudo apt update && sudo apt install git
4. 看详细日志找隐藏问题
有时候模块执行过程中出现了隐性错误(比如SSH密钥权限、目录权限问题),会导致返回值不完整。加上-vvv参数运行playbook,查看详细日志:
ansible-playbook your_playbook.yml -vvv
重点看Git模块执行阶段的输出,有没有报错或者警告信息。
5. 直接核对模块源码的触发逻辑
如果上面的方法都没用,直接去Ansible 2.8的Git模块源码里找git_dir_now的定义,确认它的触发条件。比如在源码里,这个返回值是在_update_git_dir函数执行后才会设置的,只有当仓库目录结构发生变化时才会触发这个函数。
内容的提问来源于stack exchange,提问作者BinaryGuy

