2016-03-08 81 views
1

我正在尝试将我在Python中创建的自动化脚本传输给ansible(公司请求),并且我从未与ansible合作过。我尝试了“wait_for:”,但我还没有得到那个工作。在脚本中,我可以设置dev.timeout = None或任何我需要的。我发现很难找出我能在何处做到这一点。我试图在“ansible.cfg”文件中设置超时时间。但那不起作用。我可以执行简单的命令,例如:Ansible,瞻博网络CLI命令。超时错误?

cli =“show version”或 cli =“show system firmware”。

以下是我的剧本:

- hosts: local 
    roles: 
    - Juniper.junos 
    connection: local 
    gather_facts: no 

    tasks: 
    - junos_cli: 
     host={{ inventory_hostname }} 
     user=root 
     passwd=Hardware1 
     cli="request system snapshot slice alternate" 
     dest="{{ inventory_hostname }}.txt" 

后,我跑的是,大约120秒后,我收到以下错误:

fatal: [192.168.2.254]: FAILED! => {"changed": false, "failed": true, "module_stderr": "/usr/local/lib/python2.7/dist-packages/jnpr/junos/device.py:652: RuntimeWarning: CLI command is for debug use only!\n warnings.warn(\"CLI command is for debug use only!\", RuntimeWarning)\nTraceback (most recent call last):\n File \"/home/pkb/.ansible/tmp/ansible-tmp-1457428640.58-63826456311723/junos_cli\", line 2140, in <module>\n main()\n File \"/home/pkb/.ansible/tmp/ansible-tmp-1457428640.58-63826456311723/junos_cli\", line 177, in main\n dev.close()\n File \"/usr/local/lib/python2.7/dist-packages/jnpr/junos/device.py\", line 504, in close\n self._conn.close_session()\n File \"/usr/local/lib/python2.7/dist-packages/ncclient/manager.py\", line 158, in wrapper\n return self.execute(op_cls, *args, **kwds)\n File \"/usr/local/lib/python2.7/dist-packages/ncclient/manager.py\", line 228, in execute\n raise_mode=self._raise_mode).request(*args, **kwds)\n File \"/usr/local/lib/python2.7/dist-packages/ncclient/operations/session.py\", line 28, in request\n return self._request(new_ele(\"close-session\"))\n File \"/usr/local/lib/python2.7/dist-packages/ncclient/operations/rpc.py\", line 342, in _request\n raise TimeoutExpiredError('ncclient timed out while waiting for an rpc reply.')\nncclient.operations.errors.TimeoutExpiredError: ncclient timed out while waiting for an rpc reply.\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false} 

我认为这是超时,我可能是错误。但它是我的头,因为这样一个简单的任务正在逃避我。

回答

0

好的,我设法解决了这个问题。

用于执行CLI的Ansible模块(junos_cli)不支持超时。我为此进去:

/etc/ansible/roles/Juniper.junos/library/junos_cli 

及以下线路:

dev = Device(args['host'], user=args['user'], password=args['passwd'], 
        port=args['port'], gather_facts=False).open() 

我说:

dev.timeout=None 

这将定时器设置为无穷大,所以我有时间的格式做时“请求系统快照切片备用”。

希望这可以帮助任何人通过完美的自动化与junos cli做些事情。

+0

联系模块的开发人员,他们将尝试并在未来添加超时功能:) – Knockturn

0

建议将超时值增加到我们认为应该对呼叫有利的一些体面数字(比如说300秒),而不是使其变为无限。

+0

嗨,是的。由于这篇文章我已经做到了这一点:)这只是为了得到最初的一步。我现在已计时需要多长时间,并加了一点额外的东西以防万一。它像鸡蛋一样顺畅。 – Knockturn