我试图实现一个自定义的网络命令模块,作为一个Ansible角色。此模块将在远程设备上运行命令。
Ansible连接类型为
网络客户端
使用下面的命令创建角色
ansible-galaxy init --type=network test-command-mod
这给了我以下默认目录结构
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
此外,它还试图寻找
插件/cliconf/myos。py
在默认的Ansible位置下,而不是我的Ansible角色(test命令mod)。
我希望它能看进去
角色/测试命令mod/cliconf_plugins/myos。py
这是一个bug还是故意的?
此外,如果
-
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。具体如下
[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