name : DataSourceGCE.cpython-39.pyc
a

'�DgN5�@sddlZddlZddlZddlmZddlmZmZmZm	Z	m
Z
ddlmZddl
mZmZddlmZddlmZddlmZe�e�Zd	Zd
eiZdZdZd
diZdZGdd�d�ZGdd�dej �Z!Gdd�de!�Z"dd�Z#dd�Z$d7dd�Z%d8dd�Z&dd �Z'e"ej(ffe!ej(ej)ffgZ*d!d"�Z+ed#k�r
ddl,Z,ddl-Z-dd$lm.Z.e,j/d%d&�Z0e0j1d'd(d)ed*�e0j1d+d,d-d.dd/�e0�2�Z3e&e3j4e3j5d0�Z6d1e6v�r�ze6d1�7�e6d1<Wn:e8�y�e-j9�:d2�e6d1=e.e6d1��7�e6d3<Yn0e;ej<e6d4dd5d6��dS)9�N)�	b64decode)�dmi�net�sources�
url_helper�util)�ug_util)�
EventScope�	EventType)�NoDHCPLeaseError)�EphemeralDHCPv4)�DataSourceHostnamez3http://metadata.google.internal/computeMetadata/v1/�metadata_urlzLhttp://metadata.google.internal/computeMetadata/v1/instance/guest-attributes�hostkeyszMetadata-Flavor�GoogleZens4c@seZdZdd�Zddd�ZdS)�GoogleMetadataFetchercCs||_||_||_dS�N)�metadata_address�num_retries�sec_between_retries)�selfrrr�r�C/usr/lib/python3.9/site-packages/cloudinit/sources/DataSourceGCE.py�__init__szGoogleMetadataFetcher.__init__Fc	
Cs�d}z0|j|}|r|d7}tj|t|j|jd�}Wn8tjyl}zd}t�|||�WYd}~nDd}~00|j	dkr�|r�t
�|j�}q�|j�
d�}nt�d||j	�|S)Nz/?recursive=True)�url�headersZretriesZsec_betweenzurl %s raised exception %s���utf-8zurl %s returned code %s)rr�readurl�HEADERSrrZUrlError�LOG�debug�coderZ
decode_binary�contents�decode)	r�path�is_text�is_recursive�valuer�resp�exc�msgrrr�	get_value$s(
�
$
zGoogleMetadataFetcher.get_valueN)F)�__name__�
__module__�__qualname__rr,rrrrrsrc@s|eZdZdZdZejejej	hiZ
dd�Zdd�Ze
dd��Zd	d
�Zdd�Zd
d�Zddd�Ze
dd��Ze
dd��ZdS)�
DataSourceGCE�GCEFcCsrtj�||||�d|_|r<t�||�\}}t�|�\|_}t�|_t	�
t	�|ddgi�tg�|_
|j
d|_dS)NZ
datasourcer1r)r�
DataSourcer�default_userrZnormalize_users_groupsZextract_default�dict�metadatarZ
mergemanydictZget_cfg_by_path�BUILTIN_DS_CONFIGZds_cfgr)rZsys_cfg�distro�pathsZusersZ_groupsZ_user_configrrrrIs��zDataSourceGCE.__init__cCs�|��}|j�rPt��}t|vr6|�t�|�dt�t�d|�t	|�dksVJd��|D]�}t
|j|d�}z�|�pzt|j
|d�}WnLty�}z4t�d||�WYd}~Wd�WqZWYd}~n
d}~00Wd�n1s�0YWnt�yYqZYn0|drZ||j_t�d	|��q2qZ|jjdu�r^t�d
|j�nt|j
|d�}|d�s�|d�r�t�|d�nt�|d�d
S|d|_|d|_dS)Nrz"Looking for the primary NIC in: %s�z3The instance has to have at least one candidate NIC)Ziface)�address�
url_paramsz,Error fetching IMD with candidate NIC %s: %s�successzPrimary NIC found: %s.z(Did not find a fallback interface on %s.�platform_reports_gce�reasonF�	meta-data�	user-dataT)Zget_url_params�perform_dhcp_setuprZfind_candidate_nics�DEFAULT_PRIMARY_INTERFACE�remove�insertr r!�lenrr7�read_mdr�	ExceptionrZfallback_interface�warningZ
cloud_namer5Zuserdata_raw)rr;Zcandidate_nicsZ
candidate_nicZnetwork_context�ret�errr�	_get_dataXsb

����
�R
�



zDataSourceGCE._get_datacCsdSrr�rrrr�launch_index�szDataSourceGCE.launch_indexcCs
|jdS)N�instance-id�r5rLrrr�get_instance_id�szDataSourceGCE.get_instance_idcCs|jd}t||j�S)N�public-keys-data)r5�_parse_public_keysr3)r�public_keys_datarrr�get_public_ssh_keys�s
z!DataSourceGCE.get_public_ssh_keyscCs|D]}t|�qdSr)�#_write_host_key_to_guest_attributes)rr�keyrrr�publish_host_keys�szDataSourceGCE.publish_host_keyscCst|jd�d�dd�S)N�local-hostname�.rF)r
r5�split)rZfqdnZ
resolve_ipZ
metadata_onlyrrr�get_hostname�s�zDataSourceGCE.get_hostnamecCs
|jdS)N�availability-zonerOrLrrr�availability_zone�szDataSourceGCE.availability_zonecCs|j�dd�dS)N�-r9r)r]�rsplitrLrrr�region�szDataSourceGCE.regionN)FFF)r-r.r/ZdsnamerAr	ZNETWORKr
ZBOOT_NEW_INSTANCEZBOOTZdefault_update_eventsrrK�propertyrMrPrTrWr[r]r`rrrrr0>s&��5


r0c@seZdZdZdS)�DataSourceGCELocalTN)r-r.r/rArrrrrb�srbcCsRdtt|f}|�d�}tj||tddd�}|��rBt�d|�nt�d|�dS)Nz%s/%s/%srZPUTF)r�datarZrequest_methodZcheck_statusz&Wrote %s host key to guest attributes.z0Unable to write %s host key to guest attributes.)	�GUEST_ATTRIBUTES_URL�HOSTKEY_NAMESPACE�encoderrr�okr r!)Zkey_type�	key_valuerr)rrrrU�s
�rUc	Cs�z|�dd�dd�\}}Wnttfy4YdS0|dkrBdSzt�|�}WntydYdS0d|vrrdS|d}d}ztj�||�}Wnty�YdS0tj�tjj	�|kS)N��Fz
google-sshZexpireOnz%Y-%m-%dT%H:%M:%S%z)
rZ�
ValueError�AttributeError�json�loads�datetime�strptimeZnow�timezoneZutc)�
public_keyZschemaZjson_strZjson_objZ
expire_strZ
format_strZexpire_timerrr�_has_expired�s&rscCsrg}|s|S|D]\}|rtdd�|D��s,q|�dd�}t|�dkrFq|\}}|d|fvrt|�s|�|�q|S)Ncss|]}t|�dkVqdS)�N)�ord)�.0�crrr�	<genexpr>��z%_parse_public_keys.<locals>.<genexpr>�:r9rj�	cloudinit)�allrZrErs�append)rSr3Zpublic_keysrrZsplit_public_key�userrVrrrrR�srRTcCs
|durt}ddddd�}t�|d<|r<|ds<d|d<|St�|�sbt�d|�d||d<|Sgd�}t||j|j�}i}|D]b\}}}	}
}d}|D]}
|�	|
|
|�}|dur�|}q�|	r�|dur�d	}|||d<|S|||<q�t
�|d
p�d�}t
�|d�pd�}|�d
�|�d�g}|�dd��
�}|dk�rf|�d
��sf|�|�d��|�|�d
��d�dd�|D��}|��|d<|d�r�|d�d�d|d<d|v�r�|d�d�}|�d�}|dk�r�t|�}n|�r�t�d|�||d<||d<d|d <|S)!NF)r?r@r<r>r=zNot running on GCE.r>z%s is not resolvablezaddress "%s" is not resolvable))rN)zinstance/idTTF)r\)z
instance/zoneTTF)rX)zinstance/hostnameTTF)�
instance-data)zinstance/attributesFFT)�project-data)zproject/attributesFFTz)required key %s returned nothing. not GCErz{}r�ZsshKeyszssh-keyszblock-project-ssh-keys��true�
cSsg|]}|r|�qSrr)rvrVrrr�
<listcomp>-ryzread_md.<locals>.<listcomp>rQr\�/���r@rzuser-data-encoding�base64z(unknown user-data-encoding: %s, ignoringr?Tr<)�	MD_V1_URLr=rZis_resolvable_urlr r!rrrr,rmrn�get�lowerr}�join�
splitlinesrZrfrrH)r:r;�platform_checkrIZurl_mapZmetadata_fetcherZmdZmkeyr8�requiredr&r'r(r%Z	new_valuer+Z
instance_dataZproject_dataZ
valid_keysZ
block_projectrSZud�encodingrrrrF�sj�


�





rFcCsPt�d�pd}|dks|dkr"dSt�d�p.d}|�d�r>dSt�d||�d	S)
Nzsystem-product-namezN/AzGoogle Compute EnginerTzsystem-serial-numberzGoogleCloud-z6Not running on google cloud. product-name=%s serial=%sF)rZ
read_dmi_data�
startswithr r!)Zpname�serialrrrr=Cs
�r=cCst�|t�Sr)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_list[sr��__main__)�	b64encodezQuery GCE Metadata Service)�descriptionz
--endpointZURLz The url of the metadata service.)�metavar�help�defaultz--no-platform-checkr�zIgnore smbios platform check�store_false)�destr��actionr�)r:r�r@z/User-data cannot be decoded. Writing as base64
z
user-data-b64r9)�,z: )�indentZ	sort_keysZ
separators)N)NNT)=rormZloggingr�rr{rrrrrZcloudinit.distrosrZcloudinit.eventr	r
Zcloudinit.net.dhcprZcloudinit.net.ephemeralrZcloudinit.sourcesr
Z	getLoggerr-r r�r6rdrerrBrr2r0rbrUrsrRrFr=ZDEP_FILESYSTEMZDEP_NETWORKr�r��argparse�sysr��ArgumentParser�parser�add_argument�
parse_args�argsZendpointr�rcr$�UnicodeDecodeError�stderr�write�print�dumpsrrrr�<module>sv
� n"

M
�
��
�

© 2025 Cubjrnet7