
    Vh"                         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 dd	gg d
g ddd	gdZ G d de      Zd ZddZy)    )absolute_importdivisionprint_functiona-  
author: Ansible Networking Team (@ansible-network)
name: nxos
short_description: Use NX-API to run commands on Cisco NX-OS platform
description:
- This plugin provides low level abstraction APIs for sending and receiving
  commands using NX-API with devices running Cisco NX-OS.
version_added: 1.0.0
N)to_text)ConnectionError)to_list)HttpApiBasetextjson)linestrictexactnone)r   blockconfig)format
diff_matchdiff_replaceoutputc                   V     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
dd	Zd
 Z xZS )HttpApic                 H    t        t        | 
  |i | d | _        i | _        y N)superr   __init___device_info_module_context)selfargskwargs	__class__s      c/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/cisco/nxos/plugins/httpapi/nxos.pyr   zHttpApi.__init__&   s'    gt%t6v6 !    c                 X    | j                   j                  |      r| j                   |   S y r   )r   get)r   
module_keys     r"   read_module_contextzHttpApi.read_module_context+   s*    ##J/''
33r#   c                 "    || j                   |<   y r   )r   )r   r&   module_contexts      r"   save_module_contextzHttpApi.save_module_context1   s    +9Z(r#   c                    d }t               }t               }t        |      D ]  }|j                  d      xs d}t        |t              r|d   }d|v r|d   }n|}|j                  d      r|j                  dd      d   }d}|r0||k7  r+|j                  | j                  ||             t               }|}|j                  |        |r!|j                  | j                  ||             t        |      dk(  r|d   S |S )	Nr   r
   commandz| json|   r   r   )listr   r%   
isinstancedictendswithrsplitextend
_run_queueappendlen)	r   datamessage_kwargsr   queue	responsesitem
cmd_outputr,   s	            r"   send_requestzHttpApi.send_request6   s   F	DM 	"D'++H5?J$%y/t#!%hJ )!..a03#
&J.  !?@FLL!'	"* T__UF;<y>QQ<r#   c           	         | j                   r| j                  j                  dd       t        ||      }ddi}| j                  j	                  d||d      \  }}	 t        j                  t        |j                                     }t        |      }|S # t        $ r2 t        dj                  t        |j                                           w xY w)	NwarningzVbecome has no effect over httpapi. Use network_cli if privilege escalation is requiredzContent-Typezapplication/jsonz/insPOST)headersmethodz$Response was not valid JSON, got {0})_become
connectionqueue_messagerequest_buildersendr   loadsr   getvalue
ValueErrorr   r   handle_response)r   r:   r   requestrB   responseresponse_dataresultss           r"   r5   zHttpApi._run_queueW   s    <<OO))h
 "%0!#56"&//"6"6	 #7 #
-	 JJw}/E/E/G'HIM "-0  	!6==gmF\F\F^>_` 	s   ,B ;Cc                    | j                   r| j                   S i }d|d<   | j                  ddg      \  }}g d}|D ]?  }t        j                  ||t        j                        }|s+|j                  d      |d<    n t        j                  d|t        j                        }|r|j                  d      |d	<   t        j                  d
|t        j                        }|r|j                  d      |d<   g d}	|	D ]?  }t        j                  ||t        j                        }
|
s+|
j                  d      |d<    n t        j                  d|t        j                        }|r|j                  d      |d<   || _         | j                   S )Nnxos
network_oszshow versionzshow inventory)z\s+system:\s+version\s*(\S+)z\s+kickstart:\s+version\s*(\S+)z\s+NXOS:\s+version\s*(\S+)r.   network_os_versionz Hardware\n\s+cisco\s*(\S+\s+\S+)network_os_modelz\s+Device name:\s*(\S+)network_os_hostname)z \s+system image file is:\s*(\S+)z#\s+kickstart image file is:\s*(\S+)z\s+NXOS image file is:\s*(\S+)network_os_imagez7NAME: (?:"Chassis"| Chassis ),\s*DESCR:.*\nPID:\s*(\S+)network_os_platform)r   r>   researchMgroup)r   device_inforeplyplatform_replyfind_os_versionregex	match_vermatch_chassis_idmatch_host_namefind_os_imagematch_file_namematch_os_platforms               r"   get_device_infozHttpApi.get_device_infor   s   $$$$*L! $ 1 1>CS2T U~

 % 	E		%5I4=OOA4F01		 99%H%QSQUQUV.>.D.DQ.GK*+))$>rttL1@1F1Fq1IK-.

 # 	E iiubdd;O2A2G2G2J./		 IIFDD

 1B1H1H1KK-.'   r#   c                 n    | j                         j                  dd      }ddddddddddd|v rddS ddS )NrX    TF9K)supports_diff_replacesupports_commitsupports_rollbacksupports_defaultssupports_onbox_diffsupports_commit_commentsupports_multiline_delimitersupports_diff_matchsupports_diff_ignore_linessupports_generate_diffsupports_replace)rh   r%   )r   platforms     r"   get_device_operationszHttpApi.get_device_operations   s`    '')--.CRH%)$!&!%#(',,1#'*.&*(,(8
 	
 ?D
 	
r#   c                     i }g |d<   | j                         |d<   | j                         |d<   |j                  t               d|d<   t	        j
                  |      S )Nrpcr]   device_operationsnxapinetwork_api)rh   rx   updateOPTIONSr   dumps)r   results     r"   get_capabilitieszHttpApi.get_capabilities   s\    u $ 4 4 6}&*&@&@&B"#g '}zz&!!r#   c                 (    | j                  ||      S )N)r8   r   )r>   )r   r,   r   s      r"   r%   zHttpApi.get   s       gf ==r#   c                 p    | j                  |d      }t        |      D cg c]
  }|dk7  s	| c}S c c}w )Nr   )r   z{})r>   r   )r   	candidater;   resps       r"   edit_configzHttpApi.edit_config   s8     %%i%A	!(!3Dtt|DDDs   
33r   )__name__
__module____qualname__r   r'   r*   r>   r5   rh   rx   r   r%   r   __classcell__)r!   s   @r"   r   r   %   s8    "

B60!d
 ">Er#   r   c                    g }| d   j                  d      rt        | d   d   d         D ]  }|d   dk7  rN|j                  dd      }|j                  dd      }|j                  d	d      }t        |d
|d
||d         d|v s^|d   }t        |t              rt        j                  |      }|j                  |j                                 |S )Nins_apioutputsr   code200inputrj   msgclierrorz: )r   body)	r%   r   r   r0   r1   r   r   r6   strip)rN   rP   r   
input_datar   r   r   s          r"   rL   rL      s    G	y)hy1)<XFG 	/Ff~&#ZZ4
jj+!::j"5%$.X>  6!fd+!ZZ/Fv||~.	/" Nr#   c                 V   ddddd}| d   j                  d      d   j                         }||v r5||   }| D cg c]$  }|j                  d      d   j                         & } }n	 ||   }t        | t        t        t        f      rdj                  |       } t        j                         }	||	d<   ||	d<   ||	d<   ||	d<   | |	d<   d|	d<   t        j                  t        |	            S c c}w # t        $ r1 d	|d
dj                  |j	                               }	t        |	      w xY w)z$Encodes a NXAPI JSON request messagecli_show_asciicli_showbashcli_conf)r
   r   r   r   r   r-   zinvalid format, received z, expected one of ,z ;versiontypechunksidr   r   output_format)r   )splitr   KeyErrorjoinkeysr   r0   r/   settuplecollectionsOrderedDictr   r   r1   )
commandsr   r   r   r   output_to_command_typemaybe_outputcommand_typer,   r   s
             r"   rG   rG      sH    !	 A;$$S)"-335L---l;AIJgGMM#&q)//1JJ	'1&9L (T3./99X&
 
!
!
#CC	NCKCLCJCL!C::d3'((3 K  	'/4467C "#&&	's   )C)'C. .:D()z1.00N)
__future__r   r   r   r   __metaclass__DOCUMENTATIONr   r   rY   ansible.module_utils._textr   ansible.module_utils.connectionr   Oansible_collections.ansible.netcommon.plugins.module_utils.network.common.utilsr   Gansible_collections.ansible.netcommon.plugins.plugin_utils.httpapi_baser	   r   r   rL   rG    r#   r"   <module>r      sm    A @    	 . ; c _ v5/v	eEk eEP0%)r#   