Your IP : 216.73.216.31


Current Path : /usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceGCE.cpython-38.pyc

U

�Ad�/�@sddlZddlZddlmZddlmZddlmZddlm	Z
ddlmZmZm
Z
ddlmZddlmZdd	lmZe
�e�Zd
ZdeiZdZd
ZdZddiZGdd�d�ZGdd�dej�ZGdd�de�Z dd�Z!dd�Z"d8dd�Z#d9dd�Z$d d!�Z%e ej&ffeej&ej'ffgZ(d"d#�Z)ed$k�rddl*Z*ddl+Z+dd%lm,Z,e*j-d&d'�Z.e.j/d(d)d*ed+�e.j/d,d-d.d/dd0�e.�0�Z1e$e1j2e1j3d1�Z4d2e4k�r�ze4d2�5�e4d2<Wn<e6k
�r�e+j7�8d3�e4d2=e,e4d2��5�e4d4<YnXe9ej:e4d5dd6d7��dS):�N)�	b64decode)�suppress)�dmi)�log)�sources�
url_helper�util)�ug_util)�EphemeralDHCPv4)�DataSourceHostnamez3http://metadata.google.internal/computeMetadata/v1/�metadata_url)�instance-id�availability-zone�local-hostnamezLhttp://metadata.google.internal/computeMetadata/v1/instance/guest-attributes�hostkeyszMetadata-Flavor�Googlec@seZdZdd�Zddd�ZdS)�GoogleMetadataFetchercCs||_||_||_dS�N)�metadata_address�num_retries�sec_between_retries)�selfrrr�r�A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceGCE.py�__init__szGoogleMetadataFetcher.__init__Fc	
Cs�d}z0|j|}|r|d7}tj|t|j|jd�}Wn6tjk
rj}zd}t�|||�W5d}~XYn<X|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@sjeZdZdZdZdd�Zdd�Zedd��Zd	d
�Z	dd�Z
d
d�Zddd�Zedd��Z
edd��ZdS)�
DataSourceGCE�GCEFcCsrtj�||||�d|_|r<t�||�\}}t�|�\|_}t�|_t	�
t	�|ddgi�tg�|_
|j
d|_dS)NZ
datasourcer2r)r�
DataSourcer�default_userr	Znormalize_users_groupsZextract_default�dict�metadatarZ
mergemanydictZget_cfg_by_path�BUILTIN_DS_CONFIGZds_cfgr)rZsys_cfg�distro�pathsZusersZ_groupsZ_user_configrrrrCs��zDataSourceGCE.__init__c	Cs�|��}t�}|jr(t|j|j��d�}|�"tjt	j
dt|j|d�d�}W5QRX|ds�|drtt	�
|d�nt	�
|d�dS|d	|_|d
|_dS)N)Ztmp_dirzCrawl of GCE metadata service)�address�
url_params)�kwargs�success�platform_reports_gce�reasonF�	meta-data�	user-dataT)Zget_url_params�noop�perform_dhcp_setupr
Zfallback_interfacer8Zget_tmp_exec_pathrZlog_timer!r"�read_mdr�warningr6Zuserdata_raw)rr;Znetwork_context�retrrr�	_get_dataRs0���


zDataSourceGCE._get_datacCsdSrr�rrrr�launch_indexoszDataSourceGCE.launch_indexcCs
|jdS)Nr
�r6rHrrr�get_instance_idtszDataSourceGCE.get_instance_idcCs|jd}t||j�S)N�public-keys-data)r6�_parse_public_keysr4)r�public_keys_datarrr�get_public_ssh_keysws
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)Nr�.rF)rr6�split)rZfqdnZ
resolve_ipZ
metadata_onlyrrr�get_hostnames�zDataSourceGCE.get_hostnamecCs
|jdS)NrrJrHrrr�availability_zone�szDataSourceGCE.availability_zonecCs|j�dd�dS)N�-�r)rV�rsplitrHrrr�region�szDataSourceGCE.regionN)FFF)r.r/r0ZdsnamerCrrG�propertyrIrKrOrRrUrVrZrrrrr1>s


r1c@seZdZdZdS)�DataSourceGCELocalTN)r.r/r0rCrrrrr\�sr\cCsRdtt|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*rrrrP�s
�rPc	Cs�z|�dd�dd�\}}Wnttfk
r6YdSX|dkrDdSzt�|�}Wntk
rhYdSXd|krvdS|d}d}ztj�||�}Wntk
r�YdSXtj��|kS)N��Fz
google-sshZexpireOnz%Y-%m-%dT%H:%M:%S+0000)rT�
ValueError�AttributeError�json�loads�datetime�strptimeZutcnow)�
public_keyZschemaZjson_strZjson_objZ
expire_strZ
format_strZexpire_timerrr�_has_expired�s&rlcCsrg}|s|S|D]\}|rtdd�|D��s,q|�dd�}t|�dkrFq|\}}|d|fkrt|�s|�|�q|S)Ncss|]}t|�dkVqdS)�N)�ord)�.0�crrr�	<genexpr>�sz%_parse_public_keys.<locals>.<genexpr>�:rXrd�	cloudinit)�allrT�lenrl�append)rNr4Zpublic_keysrkZsplit_public_key�userrQrrrrM�srMTcCs|dkrt}ddddd�}t�|d<|r<|ds<d|d<|St�|�sbt�d|�d||d<|Sdd	d
ddg}t||j|j�}i}|D]b\}}}	}
}d}|D]}
|�	|
|
|�}|dk	r�|}q�|	r�|dkr�d
}|||d<|S|||<q�t
�|dp�d�}t
�|d�pd�}|�d�|�d�g}|�dd��
�}|dk�rl|�d��sl|�|�d��|�|�d��d�dd�|D��}|��|d<|d�r�|d�d�d|d<d|k�r�|d�d�}|�d�}|d k�r�t|�}n|�r�t�d!|�||d<||d"<d#|d$<|S)%NF)r@rAr=r?r>zNot running on GCE.r?z%s is not resolvablezaddress "%s" is not resolvable)r
)zinstance/idTTF)r)z
instance/zoneTTF)r)zinstance/hostnameTTF)�
instance-data)zinstance/attributesFFT)�project-data)zproject/attributesFFTz)required key %s returned nothing. not GCErxz{}ryZsshKeyszssh-keyszblock-project-ssh-keys��true�
cSsg|]}|r|�qSrr)rorQrrr�
<listcomp>szread_md.<locals>.<listcomp>rLr�/���rArzuser-data-encoding�base64z(unknown user-data-encoding: %s, ignoringr@Tr=)�	MD_V1_URLr>rZis_resolvable_urlr!r"rrrr-rgrh�get�lowerrv�join�
splitlinesrTr`rrE)r:r;�platform_checkrFZurl_mapZmetadata_fetcherZmdZmkeyr9Zrequiredr'r(r)r&Z	new_valuer,Z
instance_dataZproject_dataZ
valid_keysZ
block_projectrNZud�encodingrrrrD�sx�

��





rDcCsPt�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>%s
�r>cCst�|t�Sr)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_list=sr��__main__)�	b64encodezQuery GCE Metadata Service)Zdescriptionz
--endpointZURLz The url of the metadata service.)�metavar�help�defaultz--no-platform-checkr�zIgnore smbios platform checkZstore_false)�destr��actionr�)r:r�rAz/User-data cannot be decoded. Writing as base64
z
user-data-b64rX)�,z: )�indentZ	sort_keysZ
separators)N)NNT);rirgr�r�
contextlibrrBrsrrZloggingrrrZcloudinit.distrosr	Zcloudinit.net.ephemeralr
Zcloudinit.sourcesrZ	getLoggerr.r!r�r7ZREQUIRED_FIELDSr^r_r rr3r1r\rPrlrMrDr>ZDEP_FILESYSTEMZDEP_NETWORKr�r��argparse�sysr��ArgumentParser�parser�add_argument�
parse_args�argsZendpointr�r]r%�UnicodeDecodeError�stderr�write�print�dumpsrrrr�<module>sv
� P"

M
�
��
�