
    Vh3                        d dl mZmZmZ eZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZmZ d dlmZ d dlmZ d dlmZ dZ	 d dlmZ dZd
 Zd Zd Z G d de      ZdZdZ d Z!d Z" G d de#      Z$d Z% G d de#      Z& G d de#      Z'ddddddddddddd d!dddd d!dd"d#d$d%dd"d#d$d&dd'd(d)d*dd'd(d)d*dd+Z(d,Z)g d-Z*g d.Z+y# e$ r dZ ej4                         Zd	ZY w xY w)/    )absolute_importdivisionprint_functionN)env_fallbackmissing_required_lib)	fetch_url)	urlencode)now)argon2TFc            
          t        t        dt        g dfddg      t        t        dgfddg      t        d	d
dg      t        di       t        dd            S )NT)	SCW_TOKENSCW_API_KEYSCW_OAUTH_TOKENSCW_API_TOKENoauth_token)requiredfallbackno_logaliasesSCW_API_URLhttps://api.scaleway.combase_url)r   defaultr   int   timeout)typer   r   dictr   r   bool)r   r   )	api_tokenapi_urlapi_timeoutquery_parametersvalidate_certs)r   r        s/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/module_utils/scaleway.pyscaleway_argument_specr)   "   sb    >~/"]O=|m_=GalvkwxeR)E626Dv6 r'   c                  `    t        t        dd      t        dd      t        dd            S )Nr    Tr   r   i,     )waitwait_timeoutwait_sleep_timer   r&   r'   r(   (scaleway_waitable_resource_argument_specr0   -   s-    vt,uc2%3 r'   c                 d    | j                         D ci c]  \  }}|dk7  r||| c}}S c c}}w )Nid)items)
scw_objectkvs      r(   payload_from_objectr7   5   s@     $$&Aq9 	
1  s   ,c                       e Zd Zd Zy)ScalewayExceptionc                     || _         y N)message)selfr<   s     r(   __init__zScalewayException.__init__?   s	    r'   N)__name__
__module____qualname__r>   r&   r'   r(   r9   r9   =   s    r'   r9   z]<[^>]+>;\srel="(first|previous|next|last)"
    (,<[^>]+>;\srel="(first|previous|next|last)")*zG</?(?P<target_IRI>[^>]+)>; rel="(?P<relation>first|previous|next|last)"c                 F   t        j                  t        | t         j                        st	        d      | j                  d      }i }t        j                  t              }|D ];  }|j                  |      }|st	        d      |j                         }|d   ||d   <   = |S )Nz<Scaleway API answered with an invalid Link pagination header,zLScaleway API answered with an invalid relation in the Link pagination header
target_IRIrelation)	rematchR_LINK_HEADERVERBOSEr9   splitcompile
R_RELATION	groupdict)header	relationsparsed_relationsrc_relationrE   rG   datas          r(   parse_pagination_linkrS   J   s    88M62::6 ^__LL%	jj,! 	DH%%h/E'(vww??$D15l1CT*-.	D  r'   c                     |D ]  }d| |<   	 | S )z
    WARNING: This function is effectively private, **do not use it**!
    It will be removed or renamed once changing its name no longer triggers a pylint bug.
    SENSITIVE_VALUEr&   )	container
attributesattrs      r(   filter_sensitive_attributesrY   Z   s$    
  ,+	$, r'   c                   N    e Zd Zed        Zed        Zedd       Zed        Zy)SecretVariablesc                 V    t         s#| j                  t        dd      t               y y )Nzpasslib[argon2]z)https://passlib.readthedocs.io/en/stable/)url)msg	exception)HAS_SCALEWAY_SECRET_PACKAGE	fail_jsonr   SCALEWAY_SECRET_IMP_ERRmodules    r(   ensure_scaleway_secret_packagez.SecretVariables.ensure_scaleway_secret_packagef   s,    *():@kl1   +r'   c                 j    | j                         D cg c]  }t        |d   |d          c}S c c}w )Nr      )keyvalue)r3   r   )source_dictvars     r(   dict_to_listzSecretVariables.dict_to_listn   s<     #((*
 SV3q6*
 	
 
s   0c                 F    |rdnd}| D ci c]  }|d   ||    c}S c c}w )Nhashed_valueri   rh   r&   )source_listhashed	key_valuerk   s       r(   list_to_dictzSecretVariables.list_to_dictu   s,    &,N'	6ABsE
C	N*BBBs   c                     | j                  |d      }| j                  |d      }|D ]4  }||v st        j                  ||   ||         r	||   ||<   -||   ||<   6 | j                  |      S )NT)rp   F)rr   r   verifyrl   )clssecrets_listvalues_listsecrets_dictvalues_dictrh   s         r(   decodezSecretVariables.decodez   s    ''T'B&&{5&A 	:Cl"==S!1<3DE(3C(8L%(4S(9L%	: --r'   NF)	r?   r@   rA   staticmethodre   rl   rr   classmethodrz   r&   r'   r(   r[   r[   e   sR      
 
 C C 
. 
.r'   r[   c                     t               }|D ]  }||   	| |   ||   k7  s||   ||<    |r|D ci c]  }|||   
 c}S |S c c}w r;   r/   )targetwishedverifiable_mutable_attributesmutable_attributesdiffrX   s         r(   %resource_attributes_should_be_changedr      sh    6D- &$<#tt(DDJ& /ABtfTl"BB Cs   Ac                   B    e Zd Zd Zed        Zed        Zed        Zy)Responsec                 N    d | _         |r|j                         | _         || _        y r;   )bodyreadinfo)r=   respr   s      r(   r>   zResponse.__init__   s     			DI	r'   c                     | j                   s1d| j                  v r"t        j                  | j                  d         S y 	 t        j                  | j                         S # t        $ r Y y w xY w)Nr   )r   r   jsonloads
ValueErrorr=   s    r(   r   zResponse.json   sZ    yy"zz$))F"344	::dii(( 		s   A 	A*)A*c                      | j                   d   S )Nstatus)r   r   s    r(   status_codezResponse.status_code   s    yy""r'   c                     | j                   dv S )N)            )r   r   s    r(   okzResponse.ok   s    #777r'   N)r?   r@   rA   r>   propertyr   r   r   r&   r'   r(   r   r      sC       # # 8 8r'   r   c                       e Zd Zd Zd Zd ZddZed        Zd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dZy)Scalewayc                     || _         | j                   j                  j                  d      | j                  |      dd| _        d | _        y )Nr!   application/json)zX-Auth-Tokenz
User-AgentContent-Type)rd   paramsgetget_user_agent_stringheadersname)r=   rd   s     r(   r>   zScaleway.__init__   sD     KK..22;?44V<.

 	r'   c           	         | j                  d| j                  z        }|j                  spt        dj	                  | j                  | j
                  j                  j                  d      d| j                  |j                  |j                  d               |j                  j                  | j                        S )N/%sz#Error fetching {0} ({1}) [{2}: {3}]r"   /r<   )	r   r   r   r9   formatrd   r   r   r   )r=   resultss     r(   get_resourceszScaleway.get_resources   s    ((5499,-zz#$I$P$P		dkk&8&8&<&<Y&GS##W\\)%<%  
 ||		**r'   c                     | j                   j                  j                  d      }||j                  |       t	        |d      }|d   dk(  r|dd  }| j                   j                  j                  d      d|d|S )	Nr$   T)doseqr   r   rg   r"   ?)rd   r   r   updater	   )r=   pathr   dquery_strings        r(   _url_builderzScaleway._url_builder   ss    KK""#56HHV $/7c>8D![[//33I>lSSr'   Nc           
         | j                  ||      }| j                  |       || j                  j                  |       | j                  d   dk(  r| j                  j                  |      }t        | j                  ||| j                  || j                  j                  j                  d            \  }}|d   dk(  r| j                  j                  |d   	       t        ||      S )
Nr   r   r   r   r#   )rR   r   methodr   r   r^   r^   )r   warnr   r   rd   jsonifyr   r   r   ra   r   )	r=   r   r   rR   r   r   r]   r   r   s	            r(   sendzScaleway.send   s    T&9		#LL(<<'+==;;&&t,DKK4fKK&&**=9

d >RKK!!d5k!2d##r'   c                 h    d| j                   dt        j                  j                  dd      d   S )Nzansible z Python  rg   r   )ansible_versionsysversionrJ   rc   s    r(   r   zScaleway.get_user_agent_string   s,    )/)?)?ARARSVXYAZ[\A]^^r'   c                 .    | j                  d||||      S )NGETr   r   rR   r   r   r   r=   r   rR   r   r   s        r(   r   zScaleway.get       yyDtWU[y\\r'   c                 .    | j                  d||||      S )NPUTr   r   r   s        r(   putzScaleway.put   r   r'   c                 .    | j                  d||||      S )NPOSTr   r   r   s        r(   postzScaleway.post   s    yyTgV\y]]r'   c                 .    | j                  d||||      S )NDELETEr   r   r   s        r(   deletezScaleway.delete       yyt$X^y__r'   c                 .    | j                  d||||      S )NPATCHr   r   r   s        r(   patchzScaleway.patch   s    yydwW]y^^r'   c                 .    | j                  d||||      S )NUPDATEr   r   r   s        r(   r   zScaleway.update   r   r'   c                 L    | j                   j                  t        |             y r;   )rd   r   str)r=   xs     r(   r   zScaleway.warn   s    Q r'   c                 (   | j                   j                  d|d   z         | j                  | j                  d|d   z  z         }|j                  dk(  ry|j
                  s8d|j                  d|j                  }| j                   j                  |	       	 | j                   j                  d
|d   d|j                  d          |j                  d   S # t        $ r, | j                   j                  d|j                  z  	       Y y w xY w)Nzfetch_state of resource: %sr2   r   )r   i  absentzError during state fetching: (z) r   z	Resource z in state: r   zCould not fetch state in %s)	rd   debugr   api_pathr   r   r   ra   KeyError)r=   resourceresponser^   s       r(   fetch_statezScaleway.fetch_state   s    7(4.HI88$1G!G8H3&{{<D<P<PRZR_R_`CKK!!c!*	UKKHTNHMMZbLcde==** 	UKK!!&Chmm&S!T	Us   ?C 2DDc                    | j                  | j                  |      }|j                  }|j                  sD| j                  j                  dj                  ||j                  |j                  d                |j                  |   S )Nr   zError getting {0} [{1}: {2}]r<   r   )r   r   r   r   rd   ra   r   r   )r=   resource_keypagination_kwargsr   r   s        r(   fetch_paginated_resourcesz"Scaleway.fetch_paginated_resources  s    88$  & **{{KK!!&D&K&K$$hmmI&>'@! A }}\**r'   c                     g }d g}t        |      dk7  r> | j                  |fi |}||z  }d|v r|dxx   dz  cc<   nd|d<   t        |      dk7  r>|S )Nr   pagerg      )lenr   )r=   r   r   	resourcesresults        r(   fetch_all_resourceszScaleway.fetch_all_resources  sv    	&kQ3T33LVDUVFI**!&)Q.),-!&) &kQ r'   c                    | j                   j                  d   }|s|sy | j                   j                  d   }| j                   j                  d   }t        j                  |       t	               }|t        j                  |      z   }t	               |k  r| j                   j                  d       | j                  |      }	|	|v rI| j                   j                  d       | j                   j                  d| j                  |      z         y t        j                  |       t	               |k  r| j                   j                  d	       y )
Nr,   r-   r.   )secondsz>We are going to wait for the resource to finish its transitionz8It seems that the resource is not in transition anymore.zload-balancer in state: %sz.Server takes too long to finish its transitionr   )
rd   r   timesleepr
   datetime	timedeltar   r   ra   )
r=   r   stable_states
force_waitr,   r-   r.   startendstates
             r(   !wait_to_complete_state_transitionz*Scaleway.wait_to_complete_state_transition*  s   {{!!&)
{{)).9++,,->? 	

?#h((>>eckKK^_$$X.E%!!"\]!!">AQAQRZA["[\JJ' eck KK!!&V!Wr'   )NNNr{   )r?   r@   rA   r>   r   r   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r&   r'   r(   r   r      sl    	+T$* _ _]]^`_`!U"+Xr'   r   zParis 1FRz3https://api.scaleway.com/instance/v1/zones/fr-par-1z.https://api.scaleway.com/vpc/v1/zones/fr-par-1)r   countryapi_endpointapi_endpoint_vpczParis 2z3https://api.scaleway.com/instance/v1/zones/fr-par-2z.https://api.scaleway.com/vpc/v1/zones/fr-par-2zAmsterdam 1NLz3https://api.scaleway.com/instance/v1/zones/nl-ams-1z/https://api.scaleway.com/vpc/v1/zones/nl-ams-10z.https://api.scaleway.com/vpc/v1/zones/nl-ams-1zWarsaw 1PLz3https://api.scaleway.com/instance/v1/zones/pl-waw-1z.https://api.scaleway.com/vpc/v1/zones/pl-waw-1)par1zEMEA-FR-PAR1par2zEMEA-FR-PAR2ams1zEMEA-NL-EVSwaw1zEMEA-PL-WAW1r   )zfr-parznl-amszpl-waw)zfr-par-1zfr-par-2znl-ams-1zpl-waw-1),
__future__r   r   r   r   __metaclass__r   rF   r   r   r   	tracebackansible.module_utils.basicr   r   ansible.module_utils.urlsr   +ansible.module_utils.six.moves.urllib.parser	   Cansible_collections.community.general.plugins.module_utils.datetimer
   rb   passlib.hashr   r`   	Exception
format_excr)   r0   r7   r9   rH   rL   rS   rY   objectr[   r   r   r   SCALEWAY_LOCATIONSCALEWAY_ENDPOINTSCALEWAY_REGIONSSCALEWAY_ZONESr&   r'   r(   <module>r     s   C B  	 
    I / A  (#"&	 6 X
   .f  .F	8v 88TXv TXr ML	 ML	 ML	 ML	 MM	 ML	 ML	 ML	e8 t /  [  (F2i224"'(s   C
 
C'&C'