Skip to content

Using kubespray with Ansible 2.18+ should not require a workaround for missing FQCNs #13332

Description

@manzsolutions-aleski

What happened?

After your last release announced support for a more modern Ansible version (2.18), we tried upgrading our use of kubespray, however the playbooks we import do not run properly because the kubespray project is currently using short task names kube instead of fully-qualified collection names (as you do in some of your filters).

What did you expect to happen?

Ansible should be able to find kubespray modules correctly, even if kubespray playbooks are imported from another playbook.

How can we reproduce it (as minimally and precisely as possible)?

I'm extremely sorry. I cannot come up with a minimal reproducer just yet. I tried for 45 minutes and eventually had to give up on creating one from scratch by building upwards since I didn't want to create an entire cluster. If you require one, I'll try instead to take our current code base and remove all things that are not required instead, but it might be a really big undertaking.

I'll at least leave you the files that we typically use for kubespray, without the inventory:

# ❯ bat playbooks/kubespray_facts.yaml
# noqa: syntax-check[missing-file] # required while kubespray is not available
in default environment

- name: Refresh facts for Kubespray
  ansible.builtin.import_playbook: kubernetes_sigs.kubespray.facts

and here's the partial error message my coworker provided

task path: /home/REDACTED/ansible/.collections/ansible_collections/kubernetes_sigs/kubespray/roles/kubernetes-apps/cluster_roles/tasks/main.yml:40
fatal: [REDACTED]: FAILED! => {"msg": "The module kube was not found in configured module paths"}

ls /home/REDACTED/ansible/.collections/ansible_collections/kubernetes_sigs/kubespray/plugins/modules
kube.py

OS

Debian 13 (Trixie) with backports enabled

Version of Ansible

2.18.17

Version of Python

3.13.14

Version of Kubespray (commit)

v2.31.0

Network plugin used

calico

Full inventory with variables

(this isn't relevant here)

Command used to invoke ansible

uv run ansible-playbook \                                                                                                                                                                                                                                
  --limit 'k8s_redacted:&~.+master.+' \
  playbooks/kubespray_upgrade_cluster.yaml

Output of ansible run

~8k lines of ansible output: for-submission.log, relevant part is at line 8789

Anything else we need to know

I'm currently preparing a PR to fix this as well as a quick AI-generated lint-rule to prevent regressions.
A PR is available: #13333

I've labeled some items in this issue as PENDING while I'm working to obtain the info as soon as possible.
All requested info has been added.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions