Я пытаюсь реализовать пользовательский сетевой командный модуль в качестве роли Ansible.Этот модуль будет запускать команды на удаленных устройствах.
Возможный тип подключения: network_cli
Создан роль с помощью приведенной ниже команды
ansible-galaxy init --type=network test-command-mod
, которая выдалаme ниже структуры каталогов по умолчанию
roles
└── test-command-mod
├── cliconf_plugins
│ ├── myos.py (my file)
├── defaults
│ └── main.yml
├── files
├── library
│ ├── __init__.py
│ └── myos_command.py (my file - the command module)
├── meta
│ └── main.yml
├── module_utils
│ └── myos.py (my file)
├── README.md
├── tasks
│ ├── execute-commands.yml ( a test task to run commands )
│ └── main.yml
├── templates
├── terminal_plugins
│ ├── myos.py (my file - emulating the myos terminal)
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
Ниже, как это используется в пьесе Ansible
- hosts: my_os_cli
gather_facts: False
roles:
- role: test-command-mod
tasks:
- name: run some commands on the device
myos_command:
commands:
- command: 'show version'
- command: 'show ntp status'
vars:
ansible_connection: network_cli
ansible_network_os: myos
При использовании из роли происходит сбой с сообщением ниже
The full traceback is:
Traceback (most recent call last):
File "/ansible/bin/ansible-connection", line 102, in start
self.connection._connect()
File "/ansible/lib/ansible/plugins/connection/network_cli.py", line 338, in _connect
raise AnsibleConnectionFailure('network os %s is not supported' % self._network_os)
AnsibleConnectionFailure: network os myos is not supported
При запуске Ansible в режиме отладки, см. Ниже в журнале
unable to load cliconf for network_os myos
Более того, он пытается найти plugins / cliconf / myos.py по умолчанию в Ansible location вместомоя роль Ansible (test-command-mod).
Я ожидаю, что она будет выглядеть в role / test-command-mod / cliconf_plugins / myos.py
Это ошибка или дизайн?
Кроме того, роль работает, если
ansible.cfg обновлен с
cliconf_plugins = ./roles/test-command-mod/cliconf_plugins
terminal_plugins = ./roles/test-command-mod/terminal_plugins
ИЛИ задайте указанные ниже переменные среды
export ANSIBLE_TERMINAL_PLUGINS=./roles/test-command-mod/terminal_plugins
export ANSIBLE_CLICONF_PLUGINS=./roles/test-command-mod/cliconf_plugins
- ИЛИ, если копировать файлы ( мой файл );в соответствующие каталоги в установке ANSIBLE.
Мысли, пожалуйста?
РЕДАКТИРОВАТЬ: ansible.cfg следующим образом
[defaults]
# after suggestion
#cliconf_plugins = cliconf_plugins:./roles/test-command-mod/cliconf_plugins
#terminal_plugins = terminal_plugins:../roles/test-command-mod/terminal_plugins
# before suggestion
cliconf_plugins = ./roles/test-command-mod/cliconf_plugins
terminal_plugins = ./roles/test-command-mod/terminal_plugins
[paramiko_connection]
look_for_keys = False