Ë
    GKÕi(  ã                   óø   — d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	m
Z
mZmZmZmZ d dlmZ  ej"                   ej$                  e«      «      ZdZdZdZdZd	Zd
ZdgddgddgddgddgdœZ G d„ de«      Zy)é    N)ÚAnyÚDictÚListÚOptional)Ú
exceptionsÚhttpÚsecret_managerÚsystemÚutil)ÚPublicCloudAutoAttachInstancezˆhttp://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=contracts.canonical.com&format=full&licenses=TRUEzThttp://metadata.google.internal/computeMetadata/v1/instance/licenses/?recursive=truez&wait_for_change=truez&last_etag={etag}z/sys/class/dmi/id/product_namezGoogle Compute EngineÚ8045211386737108299Ú6022427724719891830Ú7427070211152946628Ú599959289349842382Ú7818678586103571931Ú2592866803419978320Ú160084055690847662Ú2176054482269786025Ú4168323874790319525)ÚxenialÚbionicÚfocalÚjammyÚnoblec                   óÒ   — e Zd Zd„ Ze ej                  ej                  g d¢¬«      de	e
ef   fd„«       «       Zede
fd„«       Zedefd„«       Zdee
   fd„Zdefd	„Zd
edefd„Zy)ÚGCPAutoAttachInstancec                 ó   — d | _         y )N©Úetag©Úselfs    ú5/usr/lib/python3/dist-packages/uaclient/clouds/gcp.pyÚ__init__zGCPAutoAttachInstance.__init__%   s   € ð ˆ�	ó    )g      à?é   r%   )Úretry_sleepsÚreturnc                 óÀ  — t        j                  t        ddid¬«      }|j                  dk(  r7t        j
                  j                  |j                  «       d|j                  iS |j                  j                  d«      }|r3d|j                  «       v r!t        j                  |j                  |¬	«      ‚t        j                  |j                  |j                  ¬
«      ‚)NúMetadata-FlavorÚGoogler%   )ÚheadersÚtimeoutéÈ   ÚidentityTokenÚerror_descriptionzservice account)Ústatus_codeÚ	error_msg)ÚcodeÚbody)r   ÚreadurlÚ	TOKEN_URLr2   r	   ÚsecretsÚ
add_secretr3   Ú	json_dictÚgetÚlowerr   ÚGCPServiceAccountErrorÚCloudMetadataError)r!   ÚresponseÚ
error_descs      r"   Úidentity_docz"GCPAutoAttachInstance.identity_doc,   s½   € ô —<‘<ÜÐ 1°8Ð<Àaô
ˆð �=‰=˜CÒÜ×"Ñ"×-Ñ-¨h¯m©mÔ<Ø# X§]¡]Ð3Ð3à×'Ñ'×+Ñ+Ð,?Ó@ˆ
ÙÐ+¨z×/?Ñ/?Ó/AÑAÜ×3Ñ3Ø$ŸM™M°Zôð ô ×+Ñ+Ø—‘ X§]¡]ô
ð 	
r$   c                  ó   — y)NÚgcp© r    s    r"   Ú
cloud_typez GCPAutoAttachInstance.cloud_type?   s   € àr$   c                 ó¬   — t         j                  j                  t        «      r1t	        j
                  t        «      }t        |j                  «       k(  ryy)z$This machine is a viable GCPInstanceTF)ÚosÚpathÚexistsÚDMI_PRODUCT_NAMEr
   Ú	load_fileÚGCP_PRODUCT_NAMEÚstrip)r!   Úproduct_names     r"   Ú	is_viablezGCPAutoAttachInstance.is_viableC   s=   € ô �7‰7�>‰>Ô*Ô+Ü!×+Ñ+Ô,<Ó=ˆLÜ <×#5Ñ#5Ó#7Ò7Øàr$   c                 ó   — | j                   d   }t        j                  |j                  d«      d   dz   «      }t	        j
                  |j                  d«      «      }|j                  di «      j                  di «      j                  dg «      S )	zñGet a list of licenses from the GCP metadata.

        Instance identity token (jwt) carries a list of licenses
        associated with the instance itself.

        Returns an empty list if licenses are not present in the metadata.
        r.   ú.r%   z===zutf-8ÚgoogleÚcompute_engineÚ
license_id)r?   Úbase64Úurlsafe_b64decodeÚsplitÚjsonÚloadsÚdecoder9   )r!   ÚtokenÚidentityÚidentity_dicts       r"   Úget_licenses_from_identityz0GCPAutoAttachInstance.get_licenses_from_identityM   s|   € ð ×!Ñ! /Ñ2ˆÜ×+Ñ+¨E¯K©K¸Ó,<¸QÑ,?À%Ñ,GÓHˆÜŸ
™
 8§?¡?°7Ó#;Ó<ˆà×Ñ˜h¨Ó+ß‰SÐ! 2Ó&ß‰S�˜rÓ"ð	
r$   c                 ó|   — t        j                  «       j                  }|t        vrt        j                  d«       yy)Nz0This series isn't supported for GCP auto-attach.FT)r
   Úget_release_infoÚseriesÚGCP_LICENSESÚLOGÚinfo)r!   r_   s     r"   Úshould_poll_for_pro_licensez1GCPAutoAttachInstance.should_poll_for_pro_license^   s1   € Ü×(Ñ(Ó*×1Ñ1ˆØœÑ%Ü�H‰HÐGÔHØØr$   Úwait_for_changec                ó€  — t         }|r8|t        z  }| j                  r#|t        j	                  | j                  ¬«      z  }t        j                  |ddi¬«      }|j                  dk(  r||j                  D �cg c]  }|d   ‘Œ	 }}|j                  j                  d«      | _        t        j                  «       j                  }t        j                  |g «      D ]  }||v sŒ y y	t        j!                  |j"                  «       |j                  d
k(  rt%        j&                  «       ‚t%        j(                  «       ‚c c}w )Nr   r)   r*   )r+   r-   Úidr   TFi�  )ÚLICENSES_URLÚWAIT_FOR_CHANGEr   Ú	LAST_ETAGÚformatr   r4   r2   Ú	json_listr+   r9   r
   r^   r_   r`   ra   Úerrorr3   r   ÚCancelProLicensePollingÚDelayProLicensePolling)r!   rd   Úurlr=   ÚlicenseÚlicense_idsr_   Úlics           r"   Úis_pro_license_presentz,GCPAutoAttachInstance.is_pro_license_presente   s  € ÜˆáØ”?Ñ"ˆCØ�yŠyØ”y×'Ñ'¨T¯Y©YÐ'Ó7Ñ7�ä—<‘< Ð.?ÀÐ-JÔKˆØ�=‰=˜CÒØ8@×8JÑ8JÖK¨W˜7 4›=ÐKˆKÐKØ ×(Ñ(×,Ñ,¨VÓ4ˆDŒIÜ×,Ñ,Ó.×5Ñ5ˆFÜ#×'Ñ'¨°Ó3ò  �Ø˜+Ò%Ùð ð ä�	‰	�(—-‘-Ô Ø�=‰=˜CÒÜ×4Ñ4Ó6Ð6ä×3Ñ3Ó5Ð5ùò Ls   Á7D;N)Ú__name__Ú
__module__Ú__qualname__r#   Úpropertyr   Úretryr   r<   r   Ústrr   r?   rC   ÚboolrM   r   r\   rc   rs   rB   r$   r"   r   r   $   s«   „ òð Ø€T‡Z�Z�
×-Ñ-ºKÔHð
˜d 3¨ 8™nò 
ó Ió ð
ð" ð˜Cò ó ðð ð˜4ò ó ðð
¨D°©Ió 
ð"¨Tó ð6¸ð 6À$ô 6r$   r   )rS   rV   ÚloggingrE   Útypingr   r   r   r   Úuaclientr   r   r	   r
   r   Úuaclient.cloudsr   Ú	getLoggerÚreplace_top_level_logger_namert   ra   r5   rg   rh   ri   rH   rJ   r`   r   rB   r$   r"   ú<module>r�      s®   ðÛ Û Û Û 	ß ,Ó ,ç CÕ CÝ 9à€g×ÑÐ:˜×:Ñ:¸8ÓDÓE€ð ð 
ðð ð *€Ø€	à3Ð Ø*Ð ð %Ð%Ø$Ð&;Ð<Ø"Ð$9Ð:Ø#Ð%9Ð:Ø#Ð%:Ð;ñ€ôW6Ð9õ W6r$   