我想使用 Ansible 创建一些 Kubernetes 对象。可以做到这community.kubernetes.k8s
一点,它包含在community.kubernetes
集合中。当我尝试创建命名空间时
- name: Create ns
community.kubernetes.k8s:
api_version: v1
kind: Namespace
name: myapp
state: present
Ansible 抛出集合未安装的错误:
ERROR! couldn't resolve module/action 'community.kubernetes.k8s'. This often indicates a misspelling, missing collection, or incorrect module path.
The error appears to be in '/home/user/ansible-project/ansible/roles/k8s/tasks/main.yml': line 14, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Create ns
^ here
但是它已经安装好了,正如ansible-galaxy collection install
确认的那样:
$ ansible-galaxy collection install community.kubernetes
Process install dependency map
Starting collection install process
Skipping 'community.kubernetes' as it is already installed
我安装的 Ansible 版本是 Python 3.8.10 上的 2.9.6,其中ansible_python_interpreter=/usr/bin/python3
设置和 Python2 未安装在工作站上(以 为目标ansible_connection=local
)。
我究竟做错了什么?
我已经尝试过的
使用旧 + 新命名
安装集合需要 Ansible 2.9+ ansible-galaxy
,所以这应该可以工作。在收集文档中,我发现了这个通知:
重要信息 community.kubernetes 集合正在重命名为 kubernetes.core。从 2.0.0 版本开始,该集合已被弃用的所有内容重定向到 kubernetes.core 所取代。如果您使用以 community.kubernetes 开头的 FQCN,请将它们更新为 kubernetes.core。
尽管这似乎令人困惑,因为 Ansible 文档仍然提到community.kubernetes.k8s
我也尝试过
- name: Create ns
kubernetes.core.k8s:
# ...
并且可以肯定
$ ansible-galaxy collection install kubernetes.core
Process install dependency map
Starting collection install process
Skipping 'kubernetes.core' as it is already installed
但仍然抛出相同的无法解决模块/操作“kubernetes.core.k8s”错误。两个目录都~/.ansible/collections/ansible_collections/kubernetes/core/
存在~/.ansible/collections/ansible_collections/community/kubernetes/
,所以我猜这两个(旧+新命名)都应该工作。
检查目录
ansible-galaxy
通过用switch调用-vvv
,我证明了它/home/user/.ansible/collections/ansible_collections
是有用的。它还表明这些软件包在后台安装了两个软件包:旧community.kubernetes
的和新的kubernetes.core
:
Installing 'community.kubernetes:2.0.0' to '/home/user/.ansible/collections/ansible_collections/community/kubernetes'
Downloading https://galaxy.ansible.com/download/community-kubernetes-2.0.0.tar.gz to /home/user/.ansible/tmp/ansible-local-1610573465r9kd/tmpz_hw9gza
Installing 'kubernetes.core:2.1.1' to '/home/user/.ansible/collections/ansible_collections/kubernetes/core'
Downloading https://galaxy.ansible.com/download/kubernetes-core-2.1.1.tar.gz to /home/user/.ansible/tmp/ansible-local-1610573465r9kd/tmpz_hw9gza
这对我来说似乎更令人困惑,因为旧的回购说
这个 repo 托管 community.kubernetes (aka kubernetes.core) Ansible Collection。
对我来说,这听起来像是他们只是在更改名称。但正如我们所见,kubernetes.core
它有自己的 repo 和版本(2.1.1 vs 2.0)。
为了确保使用此目录,我ansible.cfg
在项目范围内将以下内容添加到本地:
[defaults]
collections_paths = /home/user/.ansible/collections/ansible_collections/
没有任何区别。