
    Vh9                     4   d Z ddlmZmZmZ eZddlZddlZddl	m
Z
 	 ddlmZ dZdd	d
ddddddd	Zdddddddddd	Z	 ddlZdZ eddddd d!d"d#d$d%&
      Z ej,                  e      Zd'Zd( Zd) Zd* Z G d+ d,e      Zy# e$ r dZY ew xY w# e$ r dZY Qw xY w)-z=
netapp.py: wrapper around send_requests and other utilities
    )absolute_importdivisionprint_functionN)missing_required_lib)__version__unknownz21.24.0zcloudmanager.cloud.netapp.comznetapp-cloud-account.auth0.comz.cloudmanager.cloud.netapp.com/auth/oauth/token Mu0V1ywgYteI6w1MbD15fKfVIUrNXGWCzSetup-As-Service-AMI-Prod*952013314444znetapp-cloudmanagercloudmanagerz%https://api.services.cloud.netapp.com)	CLOUD_MANAGER_HOSTAUTH0_DOMAINSA_AUTH_HOSTAUTH0_CLIENT
AMI_FILTERAWS_ACCOUNTGCP_IMAGE_PROJECTGCP_IMAGE_FAMILYCVS_HOST_NAMEz%staging.cloudmanager.cloud.netapp.comz&staging-netapp-cloud-account.auth0.comz6staging.cloudmanager.cloud.netapp.com/auth/oauth/token O6AHa7kedZfzHaxN80dnrIcuPBGEUvEvzSetup-As-Service-AMI-*282316784512ztlv-automationzoccm-automationz-https://staging.api.services.cloud.netapp.comTF   i   i   i   @l        l           l            l            l               )
bytesbkbmbgbtbpbebzbybz/tmp/cloudmanager_apis.logc                      t        t        ddd      t        ddd      t        ddd      t        ddddgd      t        dd	      
      S )NFstrT)requiredtypeno_logprodstage)r$   r%   choicesdefaultdict)r$   r%   )refresh_tokensa_client_idsa_secret_keyenvironmentfeature_flags)r+        s/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/netapp/cloudmanager/plugins/module_utils/netapp.pycloudmanager_host_argument_specr4   _   sQ    EdC5uTBEdC%efg=NX^_E7 r2   c                     t        | |      }t        |t              r|S | j                  d|dt	        |             y )Nz,Error: expected bool type for feature flag: z, found msg)get_feature
isinstancebool	fail_jsonr%   )modulefeature_namefeatures      r3   has_featurer?   j   s;    &,/G'4 
Wceijqerstr2   c                     t        dddd      }| j                  d   #|| j                  d   v r| j                  d   |   S ||v r||   S | j                  d|z         y)zW if the user has configured the feature, use it
        otherwise, use our default
    FT)
trace_apistrace_headersshow_modified	simulatorr0   Nz+Internal error: unexpected feature flag: %sr6   )r+   paramsr;   )r<   r=   default_flagss      r3   r8   r8   q   sz     	M }}_%1lfmmTcFd6d}}_-l;;}$\**
FUVr2   c                       e Zd ZdZddZd 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 Zd Zd Zd Zy)CloudManagerRestAPIz wrapper around send_request c                    || _         || _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                  dk(  rt        | _        n| j                  dk(  rt        | _        d| _
        d | _        | j                          t        |d      r*t        j                  t         t        j"                  d	
       t        |d      | _        t        |d      | _        | j)                         \  | _        | _        y )Nr,   r-   r.   r/   r'   r(   zhttps://rA   z'%(asctime)s %(levelname)-8s %(message)s)filenamelevelformatrB   rD   )r<   timeoutrE   r,   r-   r.   r/   PROD_ENVIRONMENTenvironment_dataSTAGE_ENVIRONMENTurlapi_root_pathcheck_required_libraryr?   loggingbasicConfigLOG_FILEDEBUGlog_headersrD   	get_token
token_typetoken)selfr<   rM   s      r3   __init__zCloudManagerRestAPI.__init__   s   ![[//@ KK..~>![[//@;;--m<v%$4D!($5D!!##%v|,Oxy&v?$V[9&*nn&6#r2   c                 \    t         s&| j                  j                  t        d             y y )Nrequestsr6   )HAS_REQUESTSr<   r;   r   )r\   s    r3   rS   z*CloudManagerRestAPI.check_required_library   s%    KK!!&::&F!G r2   c                 2    |j                  d      r|S |dz   S )Nclients)endswith)r\   	client_ids     r3   format_client_idz$CloudManagerRestAPI.format_client_id   s    %..y9yTy9?TTr2   c                     |j                  d      r|S | j                  d   | j                  vr |j                  d      r| j                  d   nd}| j                  |z   |z   S )Nhttpr   / )
startswithrO   rQ   )r\   apiprefixs      r3   	build_urlzCloudManagerRestAPI.build_url   s|    >>&!J@D@U@UVj@ksws{s{@{  AD  AO  AO  PS  AT&&';<  Z\xx& 3&&r2   Nc           	      .   | j                  |      }ddd}	|r| j                  dz   | j                  z   |	d<   ||	j                  |       t	        d      D ]9  }
| j                  ||||||	      \  }}}|d|v rt        j                  d       9 n fS )	zD send http request and process response, including error conditions zapplication/jsonAnsible_NetApp)zContent-typeReferer Authorization   zMax retries exceeded with url:   )rm   rZ   r[   updaterange_send_requesttimesleep)r\   methodrk   rE   jsondataheader
authorizedrQ   headers__	json_dicterror_detailson_cloud_request_ids                 r3   send_requestz CloudManagerRestAPI.send_request   s    nnS!.'
 '+'<tzz'IGO$NN6"( 	B<@<N<NvWZ\bdhjnpw<x9I}&9(-MQ^-^

1	 -)<<<r2   c           	          d }d }d }	d }
d }d } fd} j                  ||||||       	 t        j                  ||| j                  |||      }|j                  }|dk\  s|dk  r7 j                  |d|j                  z         |j                  t        |      |
fS  ||      \  }}|j                  j                  dd      dk7  r|j                  j                  d      }
| j                  |d||fz         |}	|r j                  ||j                         ||	|
fS # t        j                  j                  $ r*} j                  |d	|z         t        |      }	Y d }~d }~wt        j                  j                  $ r*} j                  |d
|z         t        |      }	Y d }~d }~wt        $ r*} j                  |d|z         t        |      }	Y d }~d }~ww xY w)Nc                     d}	 | j                         }g d}| j                  |vr0|j                  d      }j	                  | j                  d|z         ||fS # t        $ r Y yw xY w)z, extract json, and error message if present NNN)         messageHTTP error: %s)r{   
ValueErrorstatus_codeget	log_error)responseerrorr{   success_coder\   s       r3   get_jsonz3CloudManagerRestAPI._send_request.<locals>.get_json   ss    E"}} +L##<7+x335E5MN;  "!"s   A 	A'&A')rz   rQ   rE   r{   r|   r   )r   rM   rE   r{   r|   i,  r   zHTTP status code error: %szOnCloud-Request-Idri   r   zConnection error: %szOther error: %szEndpoint error: %d: %s)log_requestr_   requestrM   r   r   contentr#   r   r   
exceptions	HTTPErrorConnectionError	Exception	log_debug)r\   rz   rQ   rE   r{   r|   r   r   
json_errorr   r   r   r   r   errs   `              r3   rw   z!CloudManagerRestAPI._send_request   s   	
"	 	CTPT^ef	%''Wdllcipt{  AH"..Kc![3%6{,H8K[K[,[\''[)9;NNN$,X$6!Iz##$8"=C&.&6&6&:&:;O&P# !NN;(@KQ[C\(\]&MNN;(8(89-)<<< "",, 	%NN;(83(>?HM""22 	%NN;(>(DEHM 	%NN;(9C(?@HM	%s7   A2D! AD! !G> E## G F((G4 GGc                 2    d}| j                  |||d |      S )NGETrz   rk   rE   r{   r}   r   )r\   rk   rE   r}   rz   s        r3   r   zCloudManagerRestAPI.get   $      CTZ` aar2   c                 d    d}|r| j                  |||||      S | j                  ||||||      S )NPOST)rz   rk   rE   r|   r}   )rz   rk   rE   r{   r}   r~   r   )r\   rk   r|   rE   r}   gcp_typer~   rz   s           r3   postzCloudManagerRestAPI.post   sI    $$FFQU^d$ee$$FFQU^dq{$||r2   c                 2    d}| j                  |||||      S )NPATCHr   r   r\   rk   r|   rE   r}   rz   s         r3   patchzCloudManagerRestAPI.patch   s$      CTZ` aar2   c                 2    d}| j                  |||||      S )NPUTr   r   r   s         r3   putzCloudManagerRestAPI.put   r   r2   c                 2    d}| j                  |||||      S )NDELETEr   r   r   s         r3   deletezCloudManagerRestAPI.delete   s$      CTZ` aar2   c                 l   | j                   i| j                   dk7  rZ| j                  N| j                  dk7  r?| j                  | j                  d   d| j                  | j                   ddd      \  }}}n|| j                  T| j                  dk7  rE| j                  | j                  d   d	z   d
| j                  | j                  d   ddd      \  }}}n| j
                  j                  d       r4| j
                  j                  dt        |      dt                     d   }|d   }||fS )Nri   r   client_credentialszhttps://api.cloud.netapp.com)
grant_typeclient_secretrd   audienceF)r|   r~   r   z/oauth/tokenr,   r   )r   r,   rd   r   z7Missing refresh_token or sa_client_id and sa_secret_keyr6   zError acquiring token: z, access_tokenrZ   )r-   r.   r   rO   r,   r<   r;   r#   )r\   r   r   ocr_idr[   rZ   s         r3   rY   zCloudManagerRestAPI.get_token  s\   (T->->"-DI[I[Iglpl~l~  CE  mE&*ii0E0En0UDXkok}k}CGCTCT  cA6B;@ '0 'B#HeV +0B0Bb0H&*ii0E0En0UXf0fDSfjfxfxCGCXCXYgChB`6b <A	 '0 'B#HeV KK!!&_!`KK!!UUXYaUb&c!d(l+
5  r2   c                     	 | j                  |      \  }}}||S |dk(  rd|d|d|S |dk(  ry |dk(  r	d|d|d	S t        j                  |       |dz
  }X)
Nz
Failed to rq   z	, error: r   r   zTaking too long for z to z or not properly setup)check_task_statusrx   ry   )	r\   api_urlaction_nametaskretrieswait_interval
cvo_statusfailure_error_messager   s	            r3   wait_on_completionz&CloudManagerRestAPI.wait_on_completion  su    7;7M7Mg7V4J-u R7;[J_``q!|OZ\`aaJJ}%kG r2   c                     d| j                  | j                  j                  d         i}d}	 | j                  |d |      \  }}}|%|dk  rdd|fS t	        j
                  d       |dz  }n|}nC|d   |d	   d fS )
Nz
X-Agent-Idrd   rs   )r}   r   ri   r   statusr   )re   r<   rE   r   rx   ry   )r\   r   r   network_retriesresultr   dummyr   s           r3   r   z%CloudManagerRestAPI.check_task_status)  s    $//0B0B;0OP
 #'88GT'8#J FE5 "a'b%<'

11$!  !8G#4d::r2   c                 2    t         j                  d||       y Nz%s: %s)LOGr   )r\   r   r   s      r3   r   zCloudManagerRestAPI.log_error;      		(K1r2   c                 2    t         j                  d||       y r   )r   debug)r\   r   r   s      r3   r   zCloudManagerRestAPI.log_debug>  r   r2   c                 x    ||||d}|r||d<   | j                   r||d<   | j                  dt        |             y )N)rz   rQ   r{   r|   rE   r   sending)rX   r   repr)r\   rz   rE   rQ   r{   r|   r   contentss           r3   r   zCloudManagerRestAPI.log_requestA  sI    	
 !'HX")HYy$x.1r2   )<   )NNNTr   )NNFT)__name__
__module____qualname____doc__r]   rS   re   rm   r   rw   r   r   r   r   r   rY   r   r   r   r   r   r1   r2   r3   rH   rH      sb    '7(HU'=(.=bb}bbb!,";$222r2   rH   )r   
__future__r   r   r   r%   __metaclass__rT   rx   ansible.module_utils.basicr   $ansible.module_utils.ansible_releaser   ansible_versionImportErrorCOLLECTION_VERSIONrN   rP   r_   r`   r+   POW2_BYTE_MAP	getLoggerr   r   rV   r4   r?   r8   objectrH   r1   r2   r3   <module>r      s  : C B   ; S  94D6.!.&<
  B<L6*!))D
 L
 
 g!'uW$I2& I2s   O <  Ls"   B  B  B
	B
BB