
    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mZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ  G d de      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: Unknown (!UNKNOWN)
name: exos
short_description: Use exos cliconf to run command on Extreme EXOS platform
description:
  - This exos plugin provides low level abstraction apis for
    sending and receiving CLI commands from Extreme EXOS network devices.
N)AnsibleConnectionFailure)to_bytesto_text)to_list)ConnectionError)Mapping)NetworkConfigdumps)CliconfBasec                   d     e Zd ZddZd Zd ZddZddZddZddZ	d Z
d	 Z fd
Zd Z xZS )Cliconfc           	         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 )Nsupports_generate_diffz4candidate configuration is required to generate diff
diff_matchz'match' value z in invalid, valid values are z, diff_replacez'replace' value    )indentnoneconfig)r   contentsignore_lines)pathmatchreplacecommands config_diff)	get_device_operationsget_option_values
ValueErrorjoinr   load
differenceitemsr   )self	candidaterunningr   diff_ignore_linesr   r   diffdevice_operationsoption_valuescandidate_objrunning_objconfigdiffobjss                j/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/network/plugins/cliconf/exos.pyget_diffzCliconf.get_diff2   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]    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 detailtextcommandoutputsurrogate_or_stricterrorszExtremeXOS version  (\S+)r   network_os_versionzSystem Type: +(\S+)network_os_modelzSysName: +(\S+)network_os_hostname)run_commandsr   stripresearchgroup)r(   device_inforeplydatar   s        r2   get_device_infozCliconf.get_device_infoO   s    $*L!!!.Bf"UVu%:;AAC		6=05AK,-		0$7.3kk!nK*+		,d316QK-.r4   c                      y)Ndetail r(   s    r2   get_default_flagzCliconf.get_default_flagd   s    r4   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 )Nformatz'format' value  is invalid. Valid values are ,zshow configurationz$debug cfgmgr show configuration file)r*   startupz/fetching configuration from %s is not supportedr8   r9   rT   zshow switch)r:   rQ   r<   r=   zConfig Selected: +(\S+)\.cfgr:   r    r   )r"   r#   r$   rB   r   rC   rD   rE   	MULTILINErF   r	   )
r(   sourceflagsrQ   options_valueslookupcmdrH   rI   r   s
             r2   
get_configzCliconf.get_configh   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((r4   c                 >   i }| j                         }| j                  |||||       g }g }	|rZt        |      D ]K  }
t        |
t              sd|
i}
|j                   | j                  di |
       |	j                  |
d          M nt        d      |	|d<   ||d<   |S )Nr:   zcheck mode is not supportedrequestresponserM   )r!   check_edit_config_capabilityr	   
isinstancer   appendsend_commandr#   )r(   r)   commitr   r,   commentresp
operationsresultsrequestslines              r2   edit_configzCliconf.edit_config   s    //1
))*iRYZ	* 1!$0%t,D0t008489Y0	1 :;;"Y"Zr4   c                 X    |r| j                  ||      }| j                  ||||||      S )N)r:   promptanswersendonlynewline	check_all)_get_command_with_outputrc   )r(   r:   rm   rn   ro   rp   r;   rq   s           r2   getzCliconf.get   sB    33GVDG  Yakr  H   I  	Ir4   c           
         |t        d      t               }t        |      D ]  }t        |t              sd|i}|j                  dd       }|r| j                  |d   |      |d<   	  | j                  di |}|Y	 t        |d      j                         }|r|dk(  r	 t        j                  |      }|j#                  |        |S # t        $ r}|du r t        |d|      }Y d }~qd }~ww xY w# t        $ r t        d|d	t        |      
      w xY w# t         $ r$ t        dj!                  t        |                  w xY w)Nz'commands' value is requiredr:   r;   Terrr<   r=   zFailed to decode output from z: )messagejsonz$Response was not valid JSON, got {0}rM   )r#   listr	   ra   r   poprr   rc   r   getattrr   rC   UnicodeErrorr
   rw   loadsrQ   rb   )r(   r   check_rc	responsesr[   r;   outes           r2   rB   zCliconf.run_commands   sj   ;<<F	8$ 	&Cc7+ #&WWXt,F!%!>!>s9~v!VI+'d''.#. p!#.CDJJLC f."jjo
   %9	&< ) , +t#a*+ $ p)\_ahilam2noop & -.T.[.[#CL/  s0   'C
=C2 D
	C/C**C/2%D-Ec                 $    d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_diffr   supports_multiline_delimitersupports_diff_matchsupports_diff_ignore_linessupports_config_replacesupports_adminsupports_commit_labelsupports_replacerM   rN   s    r2   r!   zCliconf.get_device_operations   s6    %*$!&!%',#(&*,1#'*.',#%* %
 	
r4   c                      ddgg dddgddgdS )Nr8   rw   )rj   strictexactr   rj   block)rQ   r   r   r;   rM   rN   s    r2   r"   zCliconf.get_option_values   s'    v&=#W-v&	
 	
r4   c                     t         t        |          }|dxx   g dz  cc<   | j                         |d<   | j	                         |d<   |j                  | j                                t        j                  |      S )Nrpc)run_commmandsrO   r3   r-   rG   )	superr   get_capabilitiesr!   rJ   updater"   rw   r   )r(   result	__class__s     r2   r   zCliconf.get_capabilities   sl    w68uJJ&*&@&@&B"# $ 4 4 6}d,,./zz&!!r4   c           
          || j                         j                  d      vr=t        d|ddj                  | j                         j                  d                  |dk(  r|j	                  d      sd|z  }|S |}|S )Nr;   z'output' value is rR   rS   rw   zrun script cli2json.pyzrun script cli2json.py %s)r"   rs   r#   r$   
startswith)r(   r:   r;   r[   s       r2   rr   z Cliconf._get_command_with_output   s    //155h??W]_b_g_ghlh~h~  iA  iE  iE  FN  iO  `P  Q  R  RVG$6$67O$P-7C 
 C
r4   )NNrj   NNrj   )r*   Nr8   )NTNFN)NNFTNF)NT)__name__
__module____qualname__r3   rJ   rO   r\   rk   rs   rB   r!   r"   r   rr   __classcell__)r   s   @r2   r   r   0   s<    :*)4(I
#J
$
"r4   r   )
__future__r   r   r   type__metaclass__DOCUMENTATIONrD   rw   ansible.errorsr   ansible.module_utils._textr   r   Oansible_collections.ansible.netcommon.plugins.module_utils.network.common.utilsr	   ansible.module_utils.connectionr
   /ansible.module_utils.common._collections_compatr   Pansible_collections.ansible.netcommon.plugins.module_utils.network.common.configr   r   ansible.plugins.cliconfr   r   rM   r4   r2   <module>r      sE   & C B 
  3 8 c ; C q /zk zr4   