�
�Udac @` s d d l m Z m Z m Z e Z d Z d d l Z d d l Z d d l Z d d l
m Z d d l m
Z
d d l m Z d d l m Z i d d g d
6d d d
d g d 6d d d g d 6d d g d 6Z d e f d � � YZ d � Z d d d d � Z d S( i ( t absolute_importt divisiont print_functions
---
author: Ansible Networking Team
httpapi: nxos
short_description: Use NX-API to run command on nxos platform
description:
- This eos plugin provides low level abstraction api's for
sending and receiving CLI commands with nxos network devices.
version_added: "2.6"
N( t to_text( t ConnectionError( t to_list( t HttpApiBaset textt jsont formatt linet strictt exactt nonet
diff_matcht blockt configt diff_replacet outputt HttpApic B` sP e Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z RS( c O` s/ t t | � j | | � d | _ i | _ d S( N( t superR t __init__t Nonet _device_infot _module_context( t selft argst kwargs( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyR % s c C` s! | j j | � r | j | Sd S( N( R t getR ( R t
module_key( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyt read_module_context* s c C` s | | j | <d S( N( R R ( R R t module_context( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyt save_module_context0 s
c K` s4 d } t � } t � } x� t | � D]� } | j d d � } t | t � rr | d } d | k rx | d } qx n | } | j d � r� | j d d � d } d } n | r� | | k r� | j | j | | � � t � } n | } | j
| � q% W| r| j | j | | � � n t | � d k r0| d S| S( NR R t commands | jsont |i i R ( R t listR R t
isinstancet dictt endswitht rsplitt extendt
_run_queuet appendt len( R t datat message_kwargsR t queuet responsest itemt
cmd_outputR! ( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyt send_request5 s.
c C` s� | j r/ | j j d d � | j d d � n t | | � } i d d 6} | j j d | d | d d
�\ } } y t j t | j � � � } Wn2 t
k
r� t d j t | j � � � � � n Xt
| � } | j r� | d } n | S(
Nt vvvvs firing event: on_becomei t enables application/jsons Content-Types /inst headerst methodt POSTs$ Response was not valid JSON, got {0}i ( t _becomet
connectiont
queue_messaget insertt request_buildert sendR t loadsR t getvaluet
ValueErrorR R t handle_response( R R. R t requestR5 t responset
response_datat results( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyR) V s
'
c C` s� | j r | j Si } d | d <| j d � } | j d � } d d d g } xC | D]; } t j | | t j � } | rT | j d � | d <PqT qT Wt j d
| t j � } | r� | j d � | d <n t j d | t j � } | r� | j d � | d
<n d d d g } xC | D]; } t j | | t j � }
|
r|
j d � | d <PqqWt j d | t j � } | r�| j d � | d <n | | _ | j S( Nt nxost
network_oss show versions show inventorys \s+system:\s+version\s*(\S+)s \s+kickstart:\s+version\s*(\S+)s \s+NXOS:\s+version\s*(\S+)i t network_os_versions Hardware\n\s+cisco\s*(\S+\s+\S+)t network_os_models \s+Device name:\s*(\S+)t network_os_hostnames \s+system image file is:\s*(\S+)s# \s+kickstart image file is:\s*(\S+)s \s+NXOS image file is:\s*(\S+)t network_os_images7 NAME: (?:"Chassis"| Chassis ),\s*DESCR:.*\nPID:\s*(\S+)t network_os_platform( R R2 t ret searcht Mt group( R t device_infot replyt platform_replyt find_os_versiont regext match_vert match_chassis_idt match_host_namet
find_os_imaget match_file_namet match_os_platform( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyt get_device_infom s:
c C` s{ | j � j d d � } i t d 6t d 6t d 6t d 6t d 6t d 6t d 6t d
6t d 6t d 6d
| k rs t n t d 6S( NRL t t supports_diff_replacet supports_committ supports_rollbackt supports_defaultst supports_onbox_difft supports_commit_commentt supports_multiline_delimitert supports_diff_matcht supports_diff_ignore_linest supports_generate_difft 9Kt supports_replace( R\ R t Truet False( R t platform( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyt get_device_operations� s c C` sT i } g | d <| j � | d <| j � | d <| j t � d | d <t j | � S( Nt rpcRQ t device_operationst nxapit network_api( R\ Rm t updatet OPTIONSR t dumps( R t result( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyt get_capabilities� s
(
t __name__t
__module__R R R R2 R) R\ Rm Rv ( ( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyR $ s ! ' c C` s� g } | d j d � r� x� t | d d d � D]� } | d d k rs t d | d | d f d | d �� q2 d | k r2 | d } t | t � r� t j | � } n | j | j � � q2 q2 Wn | S(
Nt ins_apit outputsR t codet 200s %s: %st inputt msgt body( R R R R$ R% R Rt R* t strip( RC RE R Ru ( ( s@ /usr/lib/python2.7/site-packages/ansible/plugins/httpapi/nxos.pyRA � s +
s 1.0t 0c
C` sY i d d 6d d 6d d 6d d 6} | d j d � d
j � } | | k r� | | } g | D] } | j d � d j � ^ q\ } nM y | | } Wn<