从 Ansible 调用 Netscaler CLI 命令

问题描述

我正在尝试使用 Ansible 的“cli_command”模块来配置 netscaler 设备。 对于其中 2 个,运行版本“12.0 - build 60.9.nc”,这样的简单任务非常有效:

- name: call NS CLI
  cli_command:
    command: show nsconf
  register: cs_vserver
  delegate_to: netscaler_dmz

将“delegate_to”更改为运行版本“NS11.1:Build 56.19.nc”的设备,出现错误

完整的回溯是:警告:下面的回溯可能不是 与实际故障有关。文件 "/tmp/ansible_cli_command_payload_4w503v/ansible_cli_command_payload.zip/ansible/modules/network/cli/cli_command.py",第 167 行,在主文件中 "/tmp/ansible_cli_command_payload_4w503v/ansible_cli_command_payload.zip/ansible/module_utils/connection.py",第 185 行,rpc 引发 ConnectionError(to_text(msg,errors='surrogate_then_replace'),code=code) 致命:[localhost -> 172.26.58.112]:失败了! => { “改变”:假, “调用”:{ “模块参数”:{ “答案”:空, “check_all”:假, “命令”:“显示 nsconf”, “换行”:真, “提示”:空, “发送”:假 } },"msg": "命令超时触发,超时值为 30 秒。\n请参阅网络调试和故障排除中的超时设置选项 指南。” }

身份验证对所有 3 台设备都使用 RSA 密钥,日志显示欢迎横幅并且连接正常(使用 ssh 手动连接也可以),但很快就会出现上述错误。 奇怪的是,netscaler 未列在可用网络平台列表 (https://docs.ansible.com/ansible/latest/network/user_guide/platform_index.html#settings-by-platform) 中,但使用以下参数在其他两个 netscaler(清单文件)上工作正常:

all:
  hosts:
    localhost:
      ansible_connection: local
    netscaler_dmz_int: <= OK
      ansible_host: 192.168.XXX.XXX
      ansible_connection: network_cli
      ansible_network_os: ios
      ansible_user: nsroot
    netscaler_dmz_prod: <= OK
      ansible_host: 192.168.XXX.XXX
      ansible_connection: network_cli
      ansible_network_os: ios
      ansible_user: nsroot
    netscaler_dc: <= KO
      ansible_host: 172.26.XXX.XXX
      ansible_connection: network_cli
      ansible_network_os: ios
      ansible_user: nsroot

升级固件在短期内是不可行的。 问题是否来自旧版本?是否有更合适的参数使其适用于所有 3 个设备? 谢谢。

解决方法

问题得到了 2 位同事的解决:Citrix 设备的提示,一旦连接,只显示“>”而不是像“user_device_name>”这样更复杂的提示,导致 paramiko 模块无限等待,以超时。

之前:

simple > prompt

cli_command 结果:

2021-08-06 10:37:07,728 p=4783 u=xxxxx n=p=4783 u=xxxxx | paramiko [xxx.xx.xx.xxx] | Authentication (publickey) successful!
2021-08-06 10:37:34,487 p=4646 u=xxxxx n=ansible | persistent connection idle timeout triggered,timeout value is 30 secs.

可以为用于连接的特定用户更改此提示,此处为“nsroot”:

enter image description here

之后:

enter image description here

后来连接成功。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...