
    Vh                         d dl mZmZmZ eZd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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: eos
short_description: Use eAPI to run command on eos platform
description:
- This eos plugin provides low level abstraction api's for sending and receiving CLI
  commands with eos network devices.
version_added: 1.0.0
options:
  eos_use_sessions:
    type: bool
    default: yes
    description:
    - Specifies if sessions should be used on remote host or not
    env:
    - name: ANSIBLE_EOS_USE_SESSIONS
    vars:
    - name: ansible_eos_use_sessions
N)AnsibleConnectionFailure)to_text)ConnectionError)to_list)HttpApiBase)session_nametextjson)linestrictexactnone)r   blockconfig)format
diff_matchdiff_replaceoutputc                   J     e Zd Z f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 | _        d | _        y N)superr   __init___device_info_session_support)selfargskwargs	__class__s      b/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/arista/eos/plugins/httpapi/eos.pyr   zHttpApi.__init__1   s'    gt%t6v6  $    c                 
   | j                  d      sd| _        | j                  S | j                  r| j                  S 	 | j                  d      }d|v| _        | j                  S # t        $ r d| _        Y | j                  S w xY w)Neos_use_sessionsFzshow configuration sessionserror)
get_optionr   send_requestr   )r    responses     r$   supports_sessionszHttpApi.supports_sessions6   s    12$)D! $$$ $$,,,.,,-JK(/x(?% $$$ , .(-%$$$.s   A$ $BBc           	         t        |      }| j                  }|r;| j                  j                  dd       |j	                  dd| j
                  d       |j                  d      xs d}|j                  d      xs d	}t        |||      }d
di}| j                  j                  d||d      \  }}		 t        j                  t        |	j                                     }	t!        |	      }
|r|
dd  }
t#        |
      dk(  r|
d   }
|
S # t        $ r2 t        dj                  t        |	j                                           w xY w)Nvvvvzfiring event: on_becomer   enable)cmdinputr   r   versionlatestzContent-Typezapplication/json-rpcz/command-apiPOST)headersmethodz$Response was not valid JSON, got {0}   )r	   _become
connectionqueue_messageinsert_become_passgetrequest_buildersendr   loadsr   getvalue
ValueErrorr   r   handle_responselen)r    datamessage_kwargsbecomer   r2   requestr5   	_responseresponse_dataresultss              r$   r*   zHttpApi.send_requestE   sD   t}OO))&2KLKK8d6G6GHI##H-7 $$Y/;8!$8!#9:#'??#7#7	 $8 $
 	=	 JJw}/E/E/G'HIM "-0abkGw<1ajG  	!6==M2245 	s   3,D ;Ec                 6   | j                   r| j                   S i }d|d<   | j                  dd      }t        j                  |      }|d   |d<   |d   |d	<   | j                  d
d      }t        j                  |      }|d   |d<   || _         | j                   S )Neos
network_oszshow versionr   )r   r2   network_os_version	modelNamenetwork_os_modelzshow hostnamehostnamenetwork_os_hostname)r   r*   r   r@   )r    device_inforeplyrE   s       r$   get_device_infozHttpApi.get_device_infoj   s    $$$$)L!!!.!@zz% ,0O()*.{*;&'!!/&!Azz% -1*-=)*'   r%   c                     dt        | j                               ddt        | j                               ddddt        | j                                t        | j                               dS )NTF)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)boolr,   )r    s    r$   get_device_operationszHttpApi.get_device_operations   sh    %)#D$:$:$<=!&!&#'(>(>(@#A',,1#'*.*.t/E/E/G*H&H $T%;%;%= >
 	
r%   c                     i }g |d<   | j                         |d<   | j                         |d<   |j                  t               d|d<   t	        j
                  |      S )NrpcrT   device_operationseapinetwork_api)rV   rd   updateOPTIONSr   dumps)r    results     r$   get_capabilitieszHttpApi.get_capabilities   s\    u $ 4 4 6}&*&@&@&B"#g &}zz&!!r%   c                 (    | j                  ||      S )N)rE   r   )r*   )r    commandr   s      r$   r=   zHttpApi.get   s       gf ==r%   c                 4   d }| j                         rt               }d|z  g|z   }ndg|z   }|j                  d       	 | j                  |      }t        |      D cg c]
  }|dk7  s	| c}S # t        $ r |r| j                  d|z  dg        w xY wc c}w )Nzconfigure session %s	configurecommitabortz{})r,   r   appendr*   r   r	   )r    	candidatesession	responsesresps        r$   edit_configzHttpApi.edit_config   s     !!#"nG/'9:YFI$	1I"	)))4I ")!3Dtt|DD  	!!#9G#CW"MN	
 Es   A/ 
B(B/#Br   )__name__
__module____qualname__r   r,   r*   rV   rd   rn   r=   rz   __classcell__)r#   s   @r$   r   r   0   s-    %
%#J!*
">Er%   r   c                    d| v rg| d   }g }|j                  dg       D ]#  }|j                  |j                  dg              % dj                  |      xs |d   }t        ||d         g }| d   D ]i  }d	|v r|j	                  |d	   d
          d|v r#|j	                  |d   j                                F|j	                  t        j                  |             k |S )Nr(   rE   errors
messagecode)r   rm   messagesr   r   )r=   extendjoinr   ru   stripr   rl   )r+   r(   
error_textrE   rK   rm   s         r$   rC   rC      s    (!
IIfb) 	6Ddhhx45	6YYz*>eI.>
juV}==G8$ /NN6*-a01NN6(+1134NN4::f-./ Nr%   c                     |dk7  rt        |      }t        || |      }t        j                  t        d|d|            S )Nr3   )r2   cmdsr   z2.0runCmds)jsonrpcidr6   params)intdictr   rl   )commandsr   r2   reqidr   s        r$   r>   r>      s@    (g,'@F::UuYvF r%   r   )
__future__r   r   r   type__metaclass__DOCUMENTATIONr   ansible.errorsr   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
   Cansible_collections.arista.eos.plugins.module_utils.network.eos.eosr   rk   r   rC   r>    r%   r$   <module>r      sm    A @ (  3 . ; c _ \ v5/v	BEk BEJ0r%   