Ansible AWX报错:无法定位community.general集合,Pod检查Playbook失效
问题:AWX中运行检查MicroK8s Pod状态的Playbook报错
我在使用Ansible AWX推进项目,需要检查所有MicroK8s Pod是否处于运行状态。之前在Linux虚拟机上测试对应的Playbook完全正常,但在AWX中运行时出现报错。
对应的Playbook内容
- name: Wait for pods to become running hosts: host_company_01 tasks: - name: wait for pod status shell: kubectl get pods -o json register: kubectl_get_pods until: kubectl_get_pods.stdout|from_json|json_query('items[*].status.phase')|unique == ["Running"] timeout: 600
AWX返回的报错信息
[WARNING]: an unexpected error occurred during Jinja2 environment setup: unable to locate collection community.general fatal: [host_company_01]: FAILED! => {"msg": "The conditional check 'kubectl_get_pods.stdout|from_json|json_query('items[*].status.phase')|unique == [\"Running\"]' failed. The error was: template error while templating string: unable to locate collection community.general. String: {% if kubectl_get_pods.stdout|from_json|json_query('items[*].status.phase')|unique == [\"Running\"] %} True {% else %} False {% endif %}"}
已尝试的无效解决方案
- 确认ansible galaxy中存在community.general集合,重新使用sudo安装该集合,但运行工作流模板后仍报错;
- 尝试切换不同的执行环境(Execution Environment),但问题依旧;
- 尝试编写替代Playbook,但无法实现原Playbook的功能。
解决步骤
1. 确保AWX执行环境包含community.general集合
AWX的执行环境是独立的容器环境,宿主机上安装的集合不会被容器继承,必须让执行环境内置该集合:
- 自定义执行环境:基于官方AWX EE镜像,创建
requirements.yml文件,内容如下:
然后使用collections: - name: community.generalansible-builder构建新的执行环境镜像,导入AWX后在作业模板中选择该镜像。 - 选择官方预包含集合的EE:部分官方AWX执行环境(如
quay.io/ansible/awx-ee:latest)默认包含community.general,可优先尝试使用这类镜像。
2. 替换为不依赖json_query的原生逻辑
如果暂时无法解决集合依赖问题,可以修改Playbook,用Ansible核心自带的过滤器实现相同功能,无需依赖community.general:
- name: Wait for pods to become running hosts: host_company_01 tasks: - name: wait for pod status shell: kubectl get pods -o json register: kubectl_get_pods until: > kubectl_get_pods.stdout|from_json['items'] |selectattr('status.phase', '!=', 'Running')|list|length == 0 timeout: 600
这段代码通过筛选出所有状态不是Running的Pod,判断其数量是否为0,达到和原Playbook完全一致的效果。
3. 验证执行环境的集合安装情况
在AWX中创建一个临时作业模板,选择目标执行环境,运行以下命令检查集合:
ansible-galaxy collection list | grep community.general
如果没有输出,说明该执行环境确实未安装该集合,需要重新构建或更换执行环境。
内容的提问来源于stack exchange,提问作者Lars
相关产品推荐
相关产品推荐

