
    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	m
Z
 d dlmZ d dlmZ d dlmZ d dlmc mc mc mZ d dlmZ d d	lmZmZ  G d
 de      ZddZd Zd Zy)    )absolute_importdivisionprint_functiona  
---
deprecated:
  removed_in: 6.0.0
  why: This collection and all content in it is unmaintained and deprecated.
  alternative: Unknown.
author:
  - "Ujwal Komarla (@ujwalkomarla)"
name: exos
short_description: Use EXOS REST APIs to communicate with EXOS platform
description:
  - This plugin provides low level abstraction api's to send REST API
    requests to EXOS network devices and receive JSON responses.
N)to_text)ConnectionError)to_list)HttpApiBase)Mapping)NetworkConfigdumpsc                   n     e Zd Z fdZd Zd Zd ZddZddZd Z	d Z
d	 Zd
 Zd ZddZddZ xZS )HttpApic                 l    t        t        | 
  |i | d | _        t	        j
                         | _        y N)superr   __init___device_info	cookiejar	CookieJar_auth_token)selfargskwargs	__class__s      j/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/network/plugins/httpapi/exos.pyr   zHttpApi.__init__2   s0    gt%t6v6 $..0    c                 `    d}||d}| j                  |t        j                  |      d       y )Nz/auth/token)usernamepasswordPOST)pathdatamethod)send_requestjsonr   )r   r   r   	auth_pathcredentialss        r   loginzHttpApi.login7   s/    !	#+Bytzz+/FvVr   c                      y r    r   s    r   logoutzHttpApi.logout<   s    r   c                      y)NFr*   )r   excs     r   handle_httperrorzHttpApi.handle_httperror?   s    r   c           	      j   ddi} | j                   j                  ||f|| j                  |d|\  }}	 |j                  dk(  ri }|S t	        j
                  t        |j                                     }	 |S # t        $ r2 t        dj                  t        |j                                           w xY w)NContent-Typeapplication/json)r#   cookiesheaders   $Response was not valid JSON, got {0})
connectionsendr   statusr%   loadsr   getvalue
ValueErrorr   format)r   r"   r!   r#   message_kwargsr4   responseresponse_datas           r   r$   zHttpApi.send_requestB   s    !#56"6$//"6"6tT  #O&Z^ZjZjt{  #O  @N  #O-	#% "  !%

7=3I3I3K+L M
 	  	!"H"O"O..01#  	s   A7 ,A7 7;B2c                    |t        d      ddi}t               }t        |      D ]  }t        |t              sd|i}t        |d         |d<   |j                  dd       }|r^|| j                         j                  d      vr=t        d|ddj                  | j                         j                  d                  t        |d         }| j                  j                  d	|| j                  |d
      \  }}		 t        j                  t!        |	j#                                     }	|	j                  dd       rt%        dj'                  |	d               |	j                  dd       st%        dj'                  |	            |	d   }	|rb|dk(  r]t)        |	d      }
t)        |	d      }|
dk(  rt%        dj'                  |d   |            |t        dj'                  |d   |	            |}	|j+                  |	        |S # t         $ r2 t%        dj'                  t!        |	j#                                           w xY w)Nz'commands' value is requiredr1   r2   commandoutputz'output' value is  is invalid. Valid values are ,z/jsonrpcr    )r3   r4   r#   r6   errorzRequest Error, got {0}resulttextr9   	CLIoutputERRORz"Command error({1}) for request {0}zBResponse for request {0} doesn't have the CLIoutput field, got {1})r<   listr   
isinstancer
   strip_run_script_cli2jsonpopget_option_valuesgetjoinrequest_builderr7   r8   r   r%   r:   r   r;   r   r=   getKeyInResponseappend)r   commandscheck_rcr4   	responsescmdrC   r"   r?   r@   	statusOutcliOuts               r   run_commandszHttpApi.run_commandsP   s   ;<<!#56F	8$ $	,Cc7+ #&6s9~FC	NWWXt,F&(>(>(@(D(DX(NN [acfckcklp  mC  mC  mE  mI  mI  JR  mS  dT  "U  V  V"3y>2D&*oo&:&::tUYUeUeov  @F&:  'G#Hm $

7=3I3I3K+L M   $/%&>&E&EmT[F\&]^^ $$Xt4%&>&E&Em&TUU)(3M&F*,]HE	)-E')*N*U*UVYZcVdfl*mnn>$%i%p%pqtu~q  BO  &P  Q  Q &]+I$	,J -  %&L&S&SM2245'  s   >,H;H?c                 z   i }d|d<   | j                  ddd      }t        |d      j                         }t        j                  d|      }|r|j                  d	      |d
<   t        j                  d|      }|r|j                  d	      |d<   t        j                  d|      }|r|j                  d	      |d<   |S )Nexos
network_oszshow switch detailrH   rB   rC   surrogate_or_stricterrorszExtremeXOS version  (\S+)   network_os_versionzSystem Type: +(\S+)network_os_modelzSysName: +(\S+)network_os_hostname)r[   r   stripresearchgroup)r   device_inforeplyr"   matchs        r   get_device_infozHttpApi.get_device_info}   s    $*L!!!.Bf"UVu%:;AAC		6=05AK,-		0$7.3kk!nK*+		,d316QK-.r   c                 "    ddddddddddddddS )NFT)supports_diff_replacesupports_commitsupports_rollbacksupports_defaultssupports_commit_commentsupports_onbox_diffsupports_generate_diffsupports_multiline_delimitersupports_diff_matchsupports_diff_ignore_linessupports_config_replacesupports_adminsupports_commit_labelr*   r+   s    r   get_device_operationszHttpApi.get_device_operations   s3    %*$!&!%',#(&*,1#'*.',#%*
 	
r   c                      ddgg dddgddgdS )NrH   r%   )linestrictexactnoner   block)r=   
diff_matchdiff_replacerC   r*   r+   s    r   rO   zHttpApi.get_option_values   s'    v&=#W-v&	
 	
r   c                     i }g d|d<   | j                         |d<   | j                         |d<   |j                  | j                                d|d<   t	        j
                  |      S )N)get_default_flagr[   
get_configr$   get_capabilitiesget_diffrpcrk   device_operationsexosapinetwork_api)rn   r}   updaterO   r%   r   )r   rG   s     r   r   zHttpApi.get_capabilities   se    zu $ 4 4 6}&*&@&@&B"#d,,./ )}zz&!!r   c                      y)Ndetailr*   r+   s    r   r   zHttpApi.get_default_flag   s    r   c           	         i }| j                         }| j                         }	||d   rt        d      ||	d   vr#t        d|ddj                  |	d               ||	d   vr#t        d|ddj                  |	d               t	        d	
      }
|
j                  |       |r.|dk7  r)|dk7  r$t	        d	||      }|
j                  ||||      }n|
j                  }|rt        |d      nd|d<   |S )Nrv   z4candidate configuration is required to generate diffr   z'match' value z in invalid, valid values are z, r   z'replace' value rc   )indentr   config)r   contentsignore_lines)r!   rm   replacerU    config_diff)	r}   rO   r<   rQ   r   load
differenceitemsr   )r   	candidaterunningr   diff_ignore_linesr!   r   diffr   option_valuescandidate_objrunning_objconfigdiffobjss                r   r   zHttpApi.get_diff   sH    668..0!23K!LSTT]<88S]_c_h_hiv  xD  jE  `F  G  H  H}^<<Uacgclclmz  |J  nK  dL  M  N  N &Q/9%zV+0H'q7QbcK*55kT^ht5uN +00NCQeNJ?WY]r   c           	      F   | j                         }||d   vr#t        d|ddj                  |d               ddd}||vrt        d|z        ||   d	d
}|dk(  ru| j                  dd	d      }t	        |d      j                         }t        j                  d|t        j                        }	|	r|dxx   |	j                  d      z  cc<   ni S |dxx   dj                  t        |            z  cc<   |d   j                         |d<   | j                  |      d   S )Nr=   z'format' value rD   rE   zshow configurationz$debug cfgmgr show configuration file)r   startupz/fetching configuration from %s is not supportedrH   r_   r   zshow switch)rB   r=   r`   ra   zConfig Selected: +(\S+)\.cfgrB   rc    r   )rO   r<   rQ   r[   r   rg   rh   ri   	MULTILINErj   r   )
r   sourcer=   flagsoptions_valueslookuprX   rl   r"   rm   s
             r   r   zHttpApi.get_config   s+   //111TZ\_\d\dest|e}\~  A  A1>deNQWWXX .F;Y%%-6&RSE5)>?EEGDII=tR\\REI%++a.0 	I#((75>22Y--/I  %a((r   )GET)T)NNr   NNr   )r   rH   N)__name__
__module____qualname__r   r(   r,   r/   r$   r[   rn   r}   rO   r   r   r   r   __classcell__)r   s   @r   r   r   0   sF    1
W
+Z*
"
":)r   r   c           
      X    t        j                  t        d|dt        |                   S )Nz2.0cli)jsonrpcidr#   params)r%   r   dictr   )rB   reqids     r   rR   rR      s"    ::d5U5QXIYZ[[r   c                 t    t        | d      j                  d      rt        |       j                  dd      } | S )Nsurrogate_then_replacera   zrun script cli2json.pyr   )r   
startswithstrr   )rB   s    r   rM   rM      s5    w78CCD\]g,&&'?DNr   c                 0    d }| D ]  }||v s||   } |S  |S r   r*   )r?   keykeyOutitems       r   rS   rS      s5    F $;#YFM	 Mr   )r   ) 
__future__r   r   r   type__metaclass__DOCUMENTATIONr%   rh   ansible.module_utils._textr   ansible.module_utils.connectionr   Oansible_collections.ansible.netcommon.plugins.module_utils.network.common.utilsr   ansible.plugins.httpapir	   -ansible.module_utils.six.moves.http_cookiejarmodule_utilssixmoveshttp_cookiejarr   /ansible.module_utils.common._collections_compatr
   Pansible_collections.ansible.netcommon.plugins.module_utils.network.common.configr   r   r   rR   rM   rS   r*   r   r   <module>r      sY   & C B  	 . ; c / A A C q})k })@\r   