
    Vh*,                        d dl mZmZmZ eZd dlZd dlZd dlm	Z	m
Z
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 d	d
dd	d
edgfdd	d
d	edgfddd	dddiddddZdddZdZ G d de      Z G d de      Z G d d e      Zy)!    )absolute_importdivisionprint_functionN)open_urlConnectionErrorSSLValidationError)URLError	HTTPError)	urlencode)env_fallback)config_ipv6)AnsibleModuleTstrrequiredtypeIDRAC_USERNAMEr   r   fallbackIDRAC_PASSWORDr   r   no_logr   boolr   defaultr   pathint   )baseuriusernamepasswordvalidate_certsca_pathtimeoutz/redfish/v1/Sessionsz/redfish/v1/Sessions/{Id})SESSION
SESSION_IDz%Unable to resolve hostname or IP {0}.c                   f    e Zd ZdZd Zed        Zed        Zed        Zed        Z	ed        Z
y)	OpenURLResponsezHandles HTTPResponsec                 x    d | _         || _        | j                  r | j                  j                         | _         y y N)bodyrespread)selfr,   s     s/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/dellemc/openmanage/plugins/module_utils/redfish.py__init__zOpenURLResponse.__init__=   s.    		99		(DI     c                 r    	 t        j                  | j                        S # t        $ r t        d      w xY w)NzUnable to parse json)jsonloadsr+   
ValueErrorr.   s    r/   	json_datazOpenURLResponse.json_dataC   s5    	5::dii(( 	5344	5s   ! 6c                 6    | j                   j                         S r*   )r,   getcoder6   s    r/   status_codezOpenURLResponse.status_codeJ   s    yy  ""r1   c                 @    | j                   }|d|z  cxk\  xr dk  S c S )N   i+  )r:   )r.   statuss     r/   successzOpenURLResponse.successN   s'    !!v,,,,,r1   c                 .    | j                   j                  S r*   )r,   headersr6   s    r/   r@   zOpenURLResponse.headersS   s    yy   r1   c                 .    | j                   j                  S r*   )r,   reasonr6   s    r/   rB   zOpenURLResponse.reasonW   s    yyr1   N)__name__
__module____qualname____doc__r0   propertyr7   r:   r>   r@   rB    r1   r/   r(   r(   :   sn    ) 5 5 # # - - ! !    r1   r(   c                   d    e Zd ZdZddZd ZddZddZddZddZ		 	 dd	Z
d
 Zd ZddZd Zy)Redfishz"Handles iDRAC Redfish API requestsNc                 P   || _         | j                   d   | _        | j                   d   | _        | j                   d   | _        | j                   j	                  d      | _        | j                   j	                  dd      | _        | j                   j	                  d      | _        | j                   j	                  dd	      | _        | j                   j	                  d
d      | _	        || _
        d | _        d| _        d| _        ddd| _        t        | j                        | _        y )Nr   r    r!   x_auth_tokenr"   Tr#   r$   r   	use_proxyhttpsz/redfish/v1/zapplication/json)zContent-TypeAccept)module_paramshostnamer    r!   getrL   r"   r#   r$   rM   req_session
session_idprotocolroot_uri_headersr   )r.   rP   rS   s      r/   r0   zRedfish.__init___   s    ***95**:6**:6 ..22>B"00445EtL))--i8))--i<++//TB&&);GYZ#DMM2r1   c                 N    dj                  | j                  | j                        S )zbuilds base urlz	{0}://{1})formatrU   rQ   r6   s    r/   _get_base_urlzRedfish._get_base_urlp   s    !!$--??r1   c                 v    |}| j                         }|r||z   }|r|dj                  t        |            z  }|S )zbuilds complete urlz?{0})rZ   rY   r   )r.   r   query_paramurlbase_uris        r/   
_build_urlzRedfish._build_urlt   sA    %%'T/C6==;!788C
r1   c                     | j                   }|r|j                  |       || j                  }| j                  | j	                         | _        || j
                  | j                  | j                  ||dd}|S )zCreates an argument common specall)methodr"   r#   rM   r@   r$   follow_redirects)rW   updater$   r#   _get_omam_ca_envr"   rM   )r.   rb   api_timeoutr@   
req_header
url_kwargss         r/   _url_common_args_speczRedfish._url_common_args_spec~   sw    ]]
g&,,K<<002DL"11||!" %

 r1   c                     | j                   }|r|j                  |       | j                  |||      }|t        d   k(  r|dk(  s#| j                  |d<   | j
                  |d<   d|d<   |S )z8Creates an argument spec in case of basic authenticationr@   r%   POSTurl_usernameurl_passwordTforce_basic_auth)rW   rd   ri   SESSION_RESOURCE_COLLECTIONr    r!   )r.   r   rb   rf   r@   rg   rh   s          r/   _args_without_sessionzRedfish._args_without_session   su    ]]
g&//W/U
3I>>6VCS)-J~&)-J~&-1J)*r1   c                 8    | j                  |||      }d|d<   |S )z@Creates an argument spec, in case of authentication with sessionrk   Fro   )ri   )r.   rb   rf   r@   rh   s        r/   _args_with_sessionzRedfish._args_with_session   s*    //W/U
).
%&r1   c                 H   	 d| j                   v r| j                  |||      }n| j                  ||||      }|r|rt        j                  |      }| j                  ||      }	t        |	fd|i|}
t        |
      }|S # t        t        t        t        f$ r}|d}~ww xY w)a  
        Sends a request through open_url
        Returns :class:`OpenURLResponse` object.
        :arg method: HTTP verb to use for the request
        :arg path: path to request without query parameter
        :arg data: (optional) Payload to send with the request
        :arg query_param: (optional) Dictionary of query parameter to send with request
        :arg headers: (optional) Dictionary of HTTP Headers to send with the
            request
        :arg api_timeout: (optional) How long to wait for the server to send
            data before giving up
        :arg dump: (Optional) boolean value for dumping payload data.
        :returns: OpenURLResponse
        X-Auth-Tokenrk   )r\   dataN)rW   rs   rq   r3   dumpsr_   r   r(   r
   r	   r   r   )r.   rb   r   rv   r\   r@   rf   dumprh   r]   r,   	resp_dataerrs                r/   invoke_requestzRedfish.invoke_request   s     	.!44V[RY4Z
!77fk[b7c
zz$'//$K/@CC9d9j9D'-I  8%7I 	I	s   A=B B!BB!c                    | j                   r| j                  s| j                  | j                  d}t        d   }| j                  d||      }|rV|j                  rJ|j                  j                  d      | _	        |j                  j                  d      | j                  d<   | S d}t        |      | j                  | j                  | j                  d<   | S )z(Creates sessions by passing it to header)UserNamePasswordr%   rl   )rv   Idru   zCould not create the session)rS   rL   r    r!   rp   r{   r>   r7   rR   rT   r@   rW   r   )r.   payloadr   r,   msgs        r/   	__enter__zRedfish.__enter__   s    D$5$5#'==#'==2G.y9D&&vt'&BD"&.."4"4T":040@0@0Pn- 	 5%c***,0,=,=DMM.)r1   c                     | j                   r5t        d   j                  | j                         }| j                  d|       y)z1Deletes a session id, which is in use for requestr&   )r   DELETEF)rT   rp   rY   r{   )r.   exc_type	exc_value	tracebackr   s        r/   __exit__zRedfish.__exit__   s8    ??.|<CCtCWD$/r1   c                     |j                         }|j                         }|D ]/  }|t        |      j                         v s|j	                  |       1 |S r*   )copykeysr   lowerpop)r.   
odata_dictchkstrcpklistks         r/   strip_substr_dictzRedfish.strip_substr_dict   sN    __	 	"AQ'q!	" r1   c                     t         j                  j                  d      xs@ t         j                  j                  d      xs t         j                  j                  d      S )zcCheck if the value is set in REQUESTS_CA_BUNDLE or CURL_CA_BUNDLE or OMAM_CA_BUNDLE or returns NoneREQUESTS_CA_BUNDLECURL_CA_BUNDLEOMAM_CA_BUNDLE)osenvironrR   r6   s    r/   re   zRedfish._get_omam_ca_env   sA    zz~~23{rzz~~FV7W{[][e[e[i[ijz[{{r1   )NFr*   )NNNNT)z@odata.)rC   rD   rE   rF   r0   rZ   r_   ri   rq   rs   r{   r   r   r   re   rH   r1   r/   rJ   rJ   \   sH    ,3"@(
 QU.2<"|r1   rJ   c                   (     e Zd Z	 	 	 	 d fd	Z xZS )RedfishAnsibleModulec                 b   dddddt         dgfddddt         dgfddddt         d	gfdd
ddddidddd}|j                  |       ddg}dg}dg}|g }|j                  |       |g }|j                  |       |g }|j                  |       |
i }
t        |   |||||||||	|

       y )NTr   r   Fr   r   r   r   IDRAC_X_AUTH_TOKENr   r   r   r   r   r   )r   r    r!   rL   r"   r#   r$   )r    rL   )r!   rL   )r    r!   )r   rd   extendsuperr0   )r.   argument_specbypass_checksr   mutually_exclusiverequired_togetherrequired_one_ofadd_file_common_argssupports_check_moderequired_ifrequired_byredfish_argument_specauth_mutually_exclusiveauth_required_one_ofauth_required_together	__class__s                  r/   r0   zRedfishAnsibleModule.__init__   s(   
 %)%8%*EWgVhGij%*ETXdgwfxWyz).\hk  kA  \B  C'-$?' %"5!
 	23#?A]"^ <=":!;%!#!!"9:$ "  !78" O34Kv+->(*>,k;	Hr1   )	FFNNNFFNN)rC   rD   rE   r0   __classcell__)r   s   @r/   r   r      s    BG<@<AJN"H "Hr1   r   )
__future__r   r   r   r   __metaclass__r3   r   ansible.module_utils.urlsr   r   r   +ansible.module_utils.six.moves.urllib.errorr	   r
   +ansible.module_utils.six.moves.urllib.parser   &ansible.module_utils.common.parametersr   Aansible_collections.dellemc.openmanage.plugins.module_utils.utilsr   ansible.module_utils.basicr   redfish_auth_paramsrp   HOST_UNRESOLVED_MSGobjectr(   rJ   r   rH   r1   r/   <module>r      s   : C B  	 S S K A ? Y 4 !%0!5|N^M_>`a!5D|^n]oNpq%$7"-  &- 
 >  f  DH|f H|V#H= #Hr1   