BYPASS SHELL BY ./RAZORGANZ
Server: nginx/1.20.1
System: Linux iZdzfnv9mwfppeZ 5.10.134-19.2.al8.x86_64 #1 SMP Wed Oct 29 22:47:09 CST 2025 x86_64
User: apache (48)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/cloudinit/sources/__pycache__/DataSourceScaleway.cpython-36.pyc
3

�q�h�=�@s:ddlZddlZddlZddlZddlmZddlZddlmZddl	m
Z
ddlmZddl
mZddl
mZddl
mZmZmZmZdd	lmZmZdd
lmZddlmZmZddlmZdd
lm Z ej!e"�Z#ddgZ$dZ%dZ&dZ'Gdd�dej(j)�Z*dd�Z+dd�Z,Gdd�dej-�Z.e.ej/ffgZ0dd�Z1dS)�N)�urlparse)�ConnectionError)�HTTPConnection)�PoolManager)�dmi)�log)�net�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__��(/usr/lib/python3.6/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_poolmanager0sz%SourceAddressAdapter.init_poolmanager)F)�__name__�
__module__�__qualname__�__doc__rr$�
__classcell__rr)rrr'srcCs`y&tj|d|d|dd�d�}tj|j�Stjk
rZ}z|jdkrHdS�WYdd}~XnXdS)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)Ni�)�code�
isinstance�cause�requests�
exceptionsr)�_�excrrr�<lambda>Xs
z%query_data_api_once.<locals>.<lambda>)�data�timeout�retriesZsessionZexception_cbi�)r
�readurlr�
decode_binary�contents�UrlErrorr*)�api_addressr3�requests_session�respr0rrr�query_data_api_once=s
r<c
Cs"�xtdt|d��D�]}y�tjd||�tj�}d}yRt|�j}|}|ddkr^|dd�}tj	|dtj
d�dd}	|	tjkr�d	}Wntk
r�YnX|j
d
t||fd��t|||d�}
tjd
|�|
Stjk
�r}z$tjd||�tjd�|}wWYdd}~XqXqW|�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.
    rrz*Trying to get %s data (bind on port %d)...z0.0.0.0r�[N)�protoz0::zhttp://)r)r3r:z%s-data downloadedz%Error while trying to get %s data: %s����)�range�max�LOG�debugr-ZSessionr�netlocr#�getaddrinfo�IPPROTO_TCP�AF_INET6�
ValueErrorZmountrr<r
r8�warning�timeZsleep)
Zapi_typer9r4r3Zportr:Z	localhostZurl_address�address�
addr_protor2r0�last_excrrr�query_data_apies>




rOcs�eZdZdZejejejej	hiZ
�fdd�Zdd�Zdd�Z
edd	��Zd
d�Zdd
�Zedd��Zedd��Zdd�Zdd�Zddd�Zedd��Zedd��Z�ZS)�DataSourceScaleway�Scalewaycs�tt|�j|||�tjtj|ddgi�g�|_t|jjdt	��|_
t|jjdt��|_t|jjdt
��|_d|_tj|_t|_d|_d|_d|_d|_d|jj�kr�|j|jd7_dS)NZ
datasourcerQr4r3�max_waitT�
metadata_urls)rrPrrZ
mergemanydictZget_cfg_by_pathZds_cfg�int�get�DEF_MD_RETRIESr4�DEF_MD_TIMEOUTr3�DEF_MD_MAX_WAITrR�_fallback_interfacer	�UNSET�_network_config�DS_BASE_URLSrS�userdata_url�vendordata_url�ephemeral_fixed_address�has_ipv4�keys)rZsys_cfg�distro�paths)rrrr�szDataSourceScaleway.__init__cCs|tj�}tj||j|jdd�\}}|rZtjd|�|�d�|_|�d�|_|�d�|_	dStjd|t
tj�|��t�dS)	zO
        Define metadata_url based upon api-metadata URL availability.
        F)�urlsrRr3Zconnect_synchronouslyz%s is reachablez/conf?format=jsonz/user_data/cloud-initz/vendor_data/cloud-initNz3Unable to reach api-metadata at %s after %s seconds)rKr
Zwait_for_urlrRr3rCrD�metadata_urlr]r^rTr)rrdZ
start_timeZ	avail_urlr/rrr�_set_metadata_url�s"z$DataSourceScaleway._set_metadata_urlcCsZtj|j|j|jd�}tjtj|j	��|_
td|j|j|j�|_
td|j|j|j�|_dS)N)r3r4z	user-datazvendor-data)r
r5rer3r4�json�loadsrr6r7�metadatarOr]Zuserdata_rawr^Zvendordata_raw)rr;rrr�_crawl_metadata�sz"DataSourceScaleway._crawl_metadatacCs>tjd�}|dkrdStjjd�r&dStj�}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-manufacturerrQTz/var/run/scalewayZscalewayN)rZ
read_dmi_data�os�path�existsrZget_cmdline)Zvendor_nameZcmdlinerrr�	ds_detect�s

zDataSourceScaleway.ds_detectcCs�|dkrtjd|�gSg}x�|D]~}t|�j}|ddkrH|dd	�}tj|dtjd�dd}|tjkr�|dkr�||g7}q"q"|tjkr"|dkr"||g7}q"q"W|S)
N�ipv4�ipv6zInvalid IP version : %srr=r)r>)rorpr@)	rCrDrrEr#rFrGZAF_INETrH)rr>rdZ
filtered_urlsZurlrLrMrrr�_set_urls_on_ip_version�s$




z*DataSourceScaleway._set_urls_on_ip_versionc!Cs0|jdkrtj�|_|jr�y`t|j|j��H}tjtj	d|j
|jfd�tjtj	d|jd�|d|_
d|jd<WdQRXWn>tttfk
r�}ztjtt|��d|_WYdd}~XnX|j�s,yRt|j��>tjtj	d	|j
|jfd�tjtj	d|jd�d
|jd<WdQRXWntk
�r*dSXdS)Nz3Set api-metadata URL depending on IPv4 availability)�logfunc�msg�func�argszCrawl of metadata service)rrrsrtz
fixed-addressroZ
net_in_useFz3Set api-metadata URL depending on IPv6 availabilityrpT)rYr�find_fallback_nicr`rrbrZlog_timerCrDrfrSrjr_rirrrZlogexc�strr)rro�errr�	_get_data
sT





zDataSourceScaleway._get_datac	Cs�|jdkr tjdtj�tj|_|jtjkr2|jS|jdkrFtj�|_|jddk�rFi}i}x�|jdD]�}|d|j	kr�d|d<dd	d
�g|d<qjd|j
�kr�|d|d�d
|d��f7<n|d�d
|d��f|d<|ddkrj|ddd�}d|j
�k�r |d|g7<qj|g|d<qjW|||j<d|d�|_n�dd|jd�}ddig}|jd�r�|dd|jddd|jddddd|jddd�gd�g7}||d <d!|gd"�|_tjd#|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_ipsrLTZdhcp4z169.254.42.42/32z
62.210.0.1)�to�via�routesZ	addresses�/�netmaskZfamilyZinet6�gatewayz::/0)r{rzr)�versionZ	ethernetsZphysicalz%s)�type�namer�rpZstaticz::�0)Znetwork�prefixr)r�rLr~r|�subnetsr)r��configznetwork_config : %s)r[rCrJr	rZrYrrvrir_rarD)rZnetcfgZip_cfgZipZrouter�rrr�network_configMsV




z!DataSourceScaleway.network_configcCsdS)Nr)rrrr�launch_index�szDataSourceScaleway.launch_indexcCs
|jdS)N�id)ri)rrrr�get_instance_id�sz"DataSourceScaleway.get_instance_idcCsbdd�|jdD�}d}t|�}x<|jjdg�D]*}|j|�s@q0|j||d�jdd��q0W|S)NcSsg|]}|d�qS)�keyr)�.0r�rrr�
<listcomp>�sz:DataSourceScaleway.get_public_ssh_keys.<locals>.<listcomp>Zssh_public_keyszAUTHORIZED_KEY=Ztagsr/� )ri�lenrU�
startswith�append�replace)rZssh_keysZakeypreZplen�tagrrr�get_public_ssh_keys�s
z&DataSourceScaleway.get_public_ssh_keysFcCst|jdd�S)NZhostnameF)rri)rZfqdnZ
resolve_ipZ
metadata_onlyrrr�get_hostname�szDataSourceScaleway.get_hostnamecCsdS)Nr)rrrr�availability_zone�sz$DataSourceScaleway.availability_zonecCsdS)Nr)rrrr�region�szDataSourceScaleway.region)FFF)r%r&r'ZdsnamerZNETWORKr
ZBOOT_NEW_INSTANCEZBOOTZBOOT_LEGACYZdefault_update_eventsrrfrj�staticmethodrnrqry�propertyr�r�r�r�r�r�r�r)rr)rrrP�s$

@M
rPcCstj|t�S)N)r	Zlist_from_depends�datasources)Zdependsrrr�get_datasource_list�sr�)2rgrkr#rKZurllib.parserr-Zrequests.exceptionsrZurllib3.connectionrZurllib3.poolmanagerrZ	cloudinitrrZloggingrr	r
rZcloudinit.eventrr
Zcloudinit.net.dhcprZcloudinit.net.ephemeralrrZcloudinit.sourcesrZcloudinit.subprZ	getLoggerr%rCr\rVrXrWZadaptersZHTTPAdapterrr<rOZ
DataSourcerPZDEP_FILESYSTEMr�r�rrrr�<module>s:
(4#