Ansible 错误:“[Errno 2] 没有这样的文件或目录”

man*_*mar 4 ansible kubernetes

我无法在 ansible 命令模块中执行 kubectl(v1.16.3) 命令。

例如使用 ansible 创建命名空间。

    任务:
       - 名称:“创建目录”
         文件:
           路径:~/ansible_ns/demo_namespaces
           状态:目录

       - name: "创建命名空间(1/2)"
         复制:
           内容:“api版本:v1 \n种类:命名空间\n元数据:\n名称:{{item}}”
           目标:“~/ansible_ns/demo_namespaces/{{item}}.yml”
         与_项目:
           - “{{命名空间}}”

       - name: "创建命名空间(2/2)"
         命令:“kubectl create -f {{item}}.yml --kubeconfig=/var/lib/kubernetes/kubeconfig.yaml”
         参数:
           chdir: ~/ansible_ns/demo_namespaces/
         忽略错误:true
         与_项目:
           - “{{命名空间}}”

我最终遇到以下错误:

(项目=ns) => {
    "ansible_loop_var": "项目",
    “改变”:假,
    "cmd": "kubectl create -f ns.yml --kubeconfig=/var/lib/kubernetes/kubeconfig.yaml",
    “调用”:{
        “模块参数”:{
            "_raw_params": "kubectl create -f ns.yml --kubeconfig=/var/lib/kubernetes/kubeconfig.yaml",
            “_uses_shell”:假,
            “argv”:空,
            "chdir": "/root/ansible_ns/demo_namespaces/",
            “创建”:空,
            “可执行文件”:空,
            “删除”:空,
            “标准输入”:空,
            “stdin_add_newline”:真,
            “strip_empty_ends”:正确,
            “警告”:正确
        }
    },
    “项目”:“ns”,
    "msg": "[Errno 2] 没有这样的文件或目录",
    “RC”:2
}

注意:但我可以手动执行“kubectl create -f ..”......并且它正在创建这些东西。

我的 Ansible 版本:

$ ansible --version
ansible 2.9.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/mdupaguntla/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
Run Code Online (Sandbox Code Playgroud)

仅供参考,我也尝试过 Ansible - 2.4.2。但没有运气。

我的系统操作系统:CentOS 7

我的查询:

  1. 在我的上下文中,此错误意味着“[Errno 2] 没有这样的文件或目录”?

  2. 我了解到 Ansible 引入了 kubectl 和 k8s 模块:社区中是否有人使用这些模块。如果是,请让我知道如何使用它们。如果有任何先决条件 - 请分享 对于 kubectl 模块:我知道先决条件是 kubectl go 库。我知道在哪里可以获取这个库。

  3. 当 kubectl 版本为 1.8 并且 ansible 版本为 2.4.2 时 - 我能够使用命令模块使用“kubectl create -f ...”创建 K8s 资源。但是当我将集群从 v1.8 升级到 v1.16.3 时 - 我无法使用命令模块使用“kubectl create -f ...”创建资源。如果我错过了做事,请告诉我。

预先感谢社区

Smi*_*ily 5

您必须在命令模块中添加 kubectl 的路径。

command: "/the/path/kubectl create -f {{item}}.yml .........."
Run Code Online (Sandbox Code Playgroud)

这是因为 $PATH 没有更新为 kubectl 的路径。您也可以将路径添加到 $PATH,而不是在命令模块中给出路径。