Ansible Error: «[Errno 2] Нет такого файла или каталога»

Я не могу выполнить команды kubectl (v1.16.3) в модуле ansible команд.

Например, для создания пространства имен с использованием ansible.

    tasks:
       - name: "Creating Directory"
         file:
           path: ~/ansible_ns/demo_namespaces
           state: directory

       - name: "Creating Namespaces(1/2)"
         copy:
           content: "apiVersion: v1 
kind: Namespace 
metadata: 
     name: {{item}} "
           dest: "~/ansible_ns/demo_namespaces/{{item}}.yml"
         with_items:
           - "{{ namespace }}"

       - name: "Creating Namespaces(2/2)"
         command: "kubectl create -f {{item}}.yml --kubeconfig=/var/lib/kubernetes/kubeconfig.yaml"
         args:
           chdir: ~/ansible_ns/demo_namespaces/
         ignore_errors: true
         with_items:
           - "{{ namespace }}"

Я заканчиваю с ошибкой ниже:

(item=ns) => {
    "ansible_loop_var": "item",
    "changed": false,
    "cmd": "kubectl create -f ns.yml --kubeconfig=/var/lib/kubernetes/kubeconfig.yaml",
    "invocation": {
        "module_args": {
            "_raw_params": "kubectl create -f ns.yml --kubeconfig=/var/lib/kubernetes/kubeconfig.yaml",
            "_uses_shell": false,
            "argv": null,
            "chdir": "/root/ansible_ns/demo_namespaces/",
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "stdin_add_newline": true,
            "strip_empty_ends": true,
            "warn": true
        }
    },
    "item": "ns",
    "msg": "[Errno 2] No such file or directory",
    "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)]

К вашему сведению, я также пробовал с Ansible - 2.4.2. Но не везет.

Моя система ОС: CentOS 7

Мои запросы:

  1. Что означает эта ошибка «[Errno 2] Нет такого файла или каталога» в моем контексте?

  2. Я узнал, что Ansible представил модуль kubectl & k8s: есть ли кто-нибудь в сообществе, использующий их ... Если да, пожалуйста, дайте мне знать, как их использовать. Если у них есть какие-либо предварительные условия - пожалуйста, поделитесь ими. Модуль kubectl: узнал, что обязательным условием является kubectl go library.May я знаю, где я могу получить эту библиотеку.

  3. когда версия kubectl - 1.8, а версия ansible - 2.4.2 - я могу получить ресурсы K8s, созданные с помощью «kubectl create -f ...», используя командный модуль. Но когда я обновил свой кластер с v1.8 до v1.16.3 - я не смог создать ресурсы, используя «kubectl create -f ...», используя командный модуль. Позвольте мне, если я пропустил что-то делать.

Заранее спасибо за сообщество

Всего 3 ответа


Если вы используете ansible 2.9.2, у него есть модуль k8s . Он обеспечивает полностью декларативный подход (вместо выдачи императивных команд), который больше похож на то, что вы можете найти в самом kubernetes.

Например, если вы хотите создать новое пространство имен, просто используйте:

- name: Create a k8s namespace
  k8s:
    name: testing
    api_version: v1
    kind: Namespace
    state: present

Вы должны признать, что это выглядит намного проще.


Ну, есть два способа сделать этот процесс лучше и функциональнее.

Вы можете попробовать использовать модуль k8s следующим образом.

- name: Create k8s catota namespace
  k8s:
    name: catota
    api_version: v1
    kind: Namespace
    state: present

Или вы можете использовать модуль оболочки :

- name: Create k8s catota namespace
  shell: "kubectl create namespace catota"
  args:
    executable: /bin/bash

Вы должны добавить путь к kubectl в командном модуле.

command: "/the/path/kubectl create -f {{item}}.yml .........."

Это связано с тем, что $ PATH не обновляется путём kubectl. Вы можете добавить путь к $ PATH также вместо указания пути в командном модуле.


Есть идеи?

10000