HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceScaleway.cpython-38.pyc
U

Ӈg�:�@s.ddlZddlZddlZddlZddlZddlmZddlZddlm	Z	ddl
mZddlm
Z
ddlmZmZmZmZmZddlmZmZddlmZdd	lmZmZdd
lmZddlmZe� e!�Z"dd
gZ#dZ$dZ%dZ&Gdd�dej'j(�Z)dd�Z*dd�Z+Gdd�dej,�Z-e-ej.ffgZ/dd�Z0dS)�N)�urlparse)�ConnectionError)�HTTPConnection)�PoolManager)�dmi�performance�sources�
url_helper�util)�
EventScope�	EventType)�NoDHCPLeaseError)�EphemeralDHCPv4�EphemeralIPv6Network)�DataSourceHostname)�ProcessExecutionErrorzhttp://169.254.42.42zhttp://[fd00:42::42]���
cs*eZdZdZ�fdd�Zddd�Z�ZS)�SourceAddressAdapterzF
    Adapter for requests to choose the local address to bind to.
    cs||_tt|�jf|�dS�N)�source_address�superr�__init__)�selfr�kwargs��	__class__��F/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceScaleway.pyr+szSourceAddressAdapter.__init__FcCs0tjtjtjdfg}t||||j|d�|_dS)N�)Z	num_pools�maxsize�blockr�socket_options)rZdefault_socket_options�socketZ
SOL_SOCKETZSO_REUSEPORTrrZpoolmanager)rZconnectionsr!r"r#rrr�init_poolmanager/s��z%SourceAddressAdapter.init_poolmanager)F)�__name__�
__module__�__qualname__�__doc__rr%�
__classcell__rrrrr&src
Cshz(tj|d|d|dd�d�}t�|j�WStjk
rb}z|jdkrPWY�
dS�W5d}~XYnXdS)aQ
    Retrieve user data or vendor data.

    Scaleway user/vendor data API returns HTTP/404 if user/vendor data is not
    set.

    This function calls `url_helper.readurl` but instead of considering
    HTTP/404 as an error that requires a retry, it considers it as empty
    user/vendor data.

    Also, be aware the user data/vendor API requires the source port to be
    below 1024 to ensure the client is root (since non-root users can't bind
    ports below 1024). If requests raises ConnectionError (EADDRINUSE), the
    caller should retry to call this function on an other port.
    NrcSs|jdkot|jtjj�S)N�)�code�
isinstance�cause�requests�
exceptionsr)�excrrr�<lambda>Ws
z%query_data_api_once.<locals>.<lambda>)�data�timeout�retriesZsessionZexception_cbr+)r	�readurlr
�
decode_binary�contents�UrlErrorr,)�api_addressr4�requests_session�respr1rrr�query_data_api_once<s�

r=c
Cs(tdt|d��D�]}z�t�d||�t��}d}zRt|�j}|}|ddkrZ|dd�}tj	|dtj
d	�dd}	|	tjkr�d
}Wntk
r�YnX|�
dt||fd��t|||d
�}
t�d|�|
WStjk
�r}z(t�d||�t�d�|}WY�qW5d}~XYqXq|�dS)a/Get user or vendor data.

    Handle the retrying logic in case the source port is used.

    Scaleway metadata service requires the source port of the client to
    be a privileged port (<1024).  This is done to ensure that only a
    privileged user on the system can access the metadata service.
    r rz*Trying to get %s data (bind on port %d)...z0.0.0.0r�[���N)�protoz0::zhttp://)r)r4r;z%s-data downloadedz%Error while trying to get %s data: %s�)�range�max�LOG�debugr/ZSessionrZnetlocr$ZgetaddrinfoZIPPROTO_TCPZAF_INET6�
ValueErrorZmountrr=r	r9�warning�time�sleep)
Zapi_typer:r5r4Zportr;Z	localhostZurl_address�addressZ
addr_protor3r1�last_excrrr�query_data_apidsX�
���
��

rLcs�eZdZdZejejejej	hiZ
�fdd�Zedd��fdd�Z
dd	�Zd
d�Zedd
��Zdd�Zedd��Zedd��Zdd�Zdd�Zddd�Zedd��Zedd��Z�ZS) �DataSourceScaleway�Scalewaycs�tt|��|||�t�t�|ddgi�g�|_t|j�dt	��|_
t|j�dt��|_t|j�dt
��|_tj|_t|_d|_d|_d|_d|_d|_d|j��kr�|j|jd7_dS)NZ
datasourcerNr5r4�max_waitT�
metadata_urls)rrMrr
Z
mergemanydictZget_cfg_by_pathZds_cfg�int�get�DEF_MD_RETRIESr5�DEF_MD_TIMEOUTr4�DEF_MD_MAX_WAITrOr�UNSET�_network_config�DS_BASE_URLSrP�metadata_url�userdata_url�vendordata_url�ephemeral_fixed_address�has_ipv4�keys)rZsys_cfg�distro�pathsrrrr�s"��zDataSourceScaleway.__init__N)�ci_pkl_version�returncsFt��|�ddttddd�}|D]}t||�s"t||||�q"dS)NT)r\r]rOrPrZr[)r�	_unpicklerUrX�hasattr�setattr)rraZ
attr_defaults�attrrrrrc�s�
zDataSourceScaleway._unpicklecCs|t��}tj||j|jdd�\}}|rZt�d|�|�d�|_|�d�|_	|�d�|_
dSt�d|tt��|��t�dS)	zO
        Define metadata_url based upon api-metadata URL availability.
        F)�urlsrOr4Zconnect_synchronouslyz%s is reachablez/conf?format=jsonz/user_data/cloud-initz/vendor_data/cloud-initNz3Unable to reach api-metadata at %s after %s seconds)
rH�	monotonicr	Zwait_for_urlrOr4rDrErYrZr[rQr)rrgZ
start_timeZ	avail_url�_rrr�_set_metadata_url�s&�
�z$DataSourceScaleway._set_metadata_urlcCsZtj|j|j|jd�}t�t�|j	��|_
td|j|j|j�|_
td|j|j|j�|_dS)N)r4r5z	user-datazvendor-data)r	r6rYr4r5�json�loadsr
r7r8�metadatarLrZZuserdata_rawr[Zvendordata_raw)rr<rrr�_crawl_metadata�s$���z"DataSourceScaleway._crawl_metadatacCs>t�d�}|dkrdStj�d�r&dSt��}d|kr:dSdS)a 
        There are three ways to detect if you are on Scaleway:

        * check DMI data: not yet implemented by Scaleway, but the check is
          made to be future-proof.
        * the initrd created the file /var/run/scaleway.
        * "scaleway" is in the kernel cmdline.
        zsystem-manufacturerrNTz/var/run/scalewayZscalewayN)rZ
read_dmi_data�os�path�existsr
Zget_cmdline)Zvendor_nameZcmdlinerrr�	ds_detect�s

zDataSourceScaleway.ds_detectc
Cs|jr�z^t|j|jj��D}t�d��|�|j�W5QRX|��|d|_	d|j
d<W5QRXWn>ttt
fk
r�}zt�tt|��d|_W5d}~XYnX|j�szTt|j|jj��:t�d��|�|j�W5QRX|��d|j
d<W5QRXWntk
�rYdSXdS)	Nz7Setting api-metadata URL depending on IPv4 availabilityz
fixed-address�ipv4Z
net_in_useFz7Setting api-metadata URL depending on IPv6 availability�ipv6T)r]rr_�fallback_interfacerZTimedrjrPrnr\rmr
rrr
ZlogexcrD�strr)rrs�errr�	_get_datasH��
���zDataSourceScaleway._get_datac	Cs�|jdkr t�dtj�tj|_|jtjkr2|jS|jddk�rVi}i}|jdD]�}|d|jkr�d|d<ddd	d
�}d|��kr�|d|g7<n
|g|d<qTd|��kr�|d|d�d
|d��f7<n|d�d
|d��f|d<|ddkrT|ddd�}d|��k�r0|d|g7<qT|g|d<qT|||jj	<d|d�|_n�dd|jj	d�}ddig}|jd�r�|dd|jddd|jddddd|jddd�gd�g7}||d <d!|gd"�|_t�
d#|j�|jS)$z`
        Configure networking according to data received from the
        metadata API.
        Nz5Found None as cached _network_config. Resetting to %sZ
private_ipZ
public_ipsrJTZdhcp4z169.254.42.42/32z
62.210.0.1)zon-link�to�via�routesZ	addresses�/�netmaskZfamilyZinet6�gatewayz::/0)rzryr)�versionZ	ethernetsZphysicalz%s)�type�namer�rtZstaticz::�0)Znetwork�prefixr~)r�rJr}r{�subnetsr )rZconfigznetwork_config : %s)rWrDrGrrVrmr\r^r_rurE)rZnetcfgZip_cfgZipZrouter�rrr�network_config4sp
���
�
�
�����z!DataSourceScaleway.network_configcCsdSrr�rrrr�launch_index�szDataSourceScaleway.launch_indexcCs
|jdS)N�id)rmr�rrr�get_instance_id�sz"DataSourceScaleway.get_instance_idcCs^dd�|jdD�}d}t|�}|j�dg�D]*}|�|�s>q.|�||d��dd��q.|S)NcSsg|]}|d�qS)�keyr)�.0r�rrr�
<listcomp>�sz:DataSourceScaleway.get_public_ssh_keys.<locals>.<listcomp>Zssh_public_keyszAUTHORIZED_KEY=Ztagsri� )rm�lenrR�
startswith�append�replace)rZssh_keysZakeypre�plen�tagrrr�get_public_ssh_keys�s
z&DataSourceScaleway.get_public_ssh_keysFcCst|jdd�S)NZhostnameF)rrm)rZfqdnZ
resolve_ipZ
metadata_onlyrrr�get_hostname�szDataSourceScaleway.get_hostnamecCsdSrrr�rrr�availability_zone�sz$DataSourceScaleway.availability_zonecCsdSrrr�rrr�region�szDataSourceScaleway.region)FFF)r&r'r(ZdsnamerZNETWORKrZBOOT_NEW_INSTANCEZBOOTZBOOT_LEGACYZdefault_update_eventsrrQrcrjrn�staticmethodrrrx�propertyr�r�r�r�r�r�r�r*rrrrrM�s2��

2
O


rMcCst�|t�Sr)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_list�sr�)1rkZloggingror$rHZurllib.parserr/Zrequests.exceptionsrZurllib3.connectionrZurllib3.poolmanagerrZ	cloudinitrrrr	r
Zcloudinit.eventrrZcloudinit.net.dhcpr
Zcloudinit.net.ephemeralrrZcloudinit.sourcesrZcloudinit.subprZ	getLoggerr&rDrXrSrUrTZadaptersZHTTPAdapterrr=rLZ
DataSourcerMZDEP_FILESYSTEMr�r�rrrr�<module>s:
(4
�