我最近在我们的开发环境中从1.9.1升级到ansible 2.1.我使用virtualenv使用pip安装ansible 2.1.最近在运行剧本时,我收到了这个错误:
fatal: [xxxxx-dev.com]: FAILED! => {"changed": false, "failed": true, "msg": "unsupported parameter for module: gather_subset"}
Run Code Online (Sandbox Code Playgroud)
我在Ansible 2.1中看到,他们添加了一个新功能来收集有关主机的有限事实,但默认情况下它将gather_subset设置为all.因此,我没有在配置文件中设置此值并期望它默认为all.
此故障仅发生一次,后续运行成功.我也在这里读到,如果ansible也通过apt单独安装,它可能会引起问题,但由于我使用的是venv,我认为它将被强制使用2.1版本.任何帮助表示赞赏.
折腾了两天,终于明白为什么失败了。
原因是我在 ansible.cfg 中有一个默认配置设置,该设置使 ansible 从 /usr/share/ansible 获取系统 ansible 库,而不是我们安装库的 virtualenv 。我们运行 playbook 的主机上的系统 ansible 库已过时,从而导致失败。我删除了该设置以确保 ansible 仅获取 venv 中安装的最新模块。