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__/DataSourceOpenStack.cpython-38.pyc
U

Ӈgg(�@sddlZddlZddlmZmZmZmZddlmZm	Z	ddl
mZddlm
Z
ddlmZddlmZe�e�ZdZd	eiZd
ZdZeegZdZd
ZdZeZeeeeg7ZGdd�dejej �Z!Gdd�de!�Z"ddd�Z#e"ej$ffe!ej$ej%ffgZ&dd�Z'dS)�N)�dmi�sources�
url_helper�util)�
EventScope�	EventType)�NoDHCPLeaseError)�EphemeralDHCPv4)�DataSourceOracle)�	openstackziid-dsopenstackzinstance-idzOpenStack NovazOpenStack ComputeZOpenTelekomCloudz
SAP CCloud VMZHUAWEICLOUDcs�eZdZdZejZdZej	e
je
je
j
e
jhiZ�fdd�Zdd�Zdd�Zd	d
�Zedd��Zd
d�Zdd�Zdd�Z�ZS)�DataSourceOpenStackZ	OpenStackFcsHtt|��|||�d|_t�|j�|_d|_i|_	t
j|_t
j|_
dS�N)�superr�__init__�metadata_addressrZfetch_ssl_details�paths�ssl_details�version�filesr�UNSET�ec2_metadata�network_json)�self�sys_cfg�distror��	__class__��G/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenStack.pyr<szDataSourceOpenStack.__init__cCs"tj�|�}d||j|jf}|S)Nz%s [%s,ver=%s])r�
DataSource�__str__�dsmoder)r�rootZmstrrrrr EszDataSourceOpenStack.__str__cCsdj|jjd�dg}|j�d|�}dd�|D�}t|�t|�kr\t�dtt|�t|���t	|�rj|}nt�
d�|}g}i}|D]"}t�|d	�}|�
|�|||<q�|��}t��}	tj||j|jd
d�\}
}|
r�t�d||
�nt�d
|tt��|	��|�|
�|_t|
�S)Nz"http://[fe80::a9fe:a9fe%25{iface}])Zifacezhttp://169.254.169.254Z
metadata_urlscSsg|]}t�|�r|�qSr)rZis_resolvable_url)�.0�xrrr�
<listcomp>Rs
zADataSourceOpenStack.wait_for_metadata_service.<locals>.<listcomp>z,Removed the following from metadata urls: %sz+Empty metadata url list! using default listrF)�urlsZmax_wait�timeoutZconnect_synchronouslyzUsing metadata source: '%s'z2Giving up on OpenStack md from %s after %s seconds)�formatr�fallback_interface�ds_cfg�get�set�LOG�debug�list�len�warningrZcombine_url�append�get_url_params�time�	monotonicZwait_for_urlZmax_wait_seconds�timeout_seconds�intr�bool)rZDEF_MD_URLSr&ZfilteredZmd_urlsZurl2baseZurlZmd_url�
url_paramsZ
start_timeZ	avail_urlZ	_responserrr�wait_for_metadata_serviceJsN���


�
�z-DataSourceOpenStack.wait_for_metadata_servicecCst�|���Sr
)rZinstance_id_matches_system_uuidZget_instance_id)rrrrr�check_instance_idysz%DataSourceOpenStack.check_instance_idcCsn|jtjkr|jSt�|j�dd��r2d|_|jS|jtjkrLt�	d�dSt�
d�tj|jdd�|_|jS)z@Return a network config dict for rendering ENI or netplan files.Zapply_network_configTNz<Unexpected call to network_config when network_json is None.z(network config provided via network_json)Z
known_macs)
�_network_configrrrZis_falser*r+rr-r1r.rZconvert_net_json)rrrr�network_config}s �
�z"DataSourceOpenStack.network_configc
Cs�|jrpz(t|j|jj��|��}W5QRXWq�ttjfk
rl}zt�	t
t|��WY�dSd}~XYq�XnHz|��}Wn:tjk
r�}zt�	t
t|��WY�dSd}~XYnX|�|�
d�g�|_|jtjkr�dS|�
di�}t�|tg�}||_|�
d�|_|�
d�|_|�
d�|_|d|_|j�|�
d	i��|�
d
�}zt�|�|_Wn6tk
�r�}zt
�d|�d|_W5d}~XYnX|�
d�}zt�|�|_Wn6tk
�r�}zt
�d
|�d|_W5d}~XYnXdS)a
Crawl metadata, parse and persist that data for this instance.

        @return: True when metadata discovered indicates OpenStack datasource.
            False when unable to contact metadata service or when metadata
            format is invalid or disabled.
        FNr!�metadatazec2-metadataZnetworkdataZuserdatarrZ
vendordataz"Invalid content in vendor-data: %sZvendordata2z#Invalid content in vendor-data2: %sT)�perform_dhcp_setupr	rr)�_crawl_metadatarr�InvalidMetaDataExceptionrZlogexcr-�strZ_determine_dsmoder+r!ZDSMODE_DISABLEDZ
mergemanydict�DEFAULT_METADATAr>rrZuserdata_rawrr�updateZconvert_vendordataZvendordata_raw�
ValueErrorr1Zvendordata2_raw)rZresults�eZmdZvdZvd2rrr�	_get_data�sN�


zDataSourceOpenStack._get_datac
Cs�z|��st�d��Wn8tk
rN}zt�djt|�d���W5d}~XYnX|��}zt|j|j	|j
|jd�}Wnrtj
k
r�}zt�t|���W5d}~XYnBtjtfk
r�}zdj|jd�}t�|�|�W5d}~XYnX|S)z�Crawl metadata service when available.

        @returns: Dictionary with all metadata discovered for this datasource.
        @raise: InvalidMetaDataException on unreadable or broken
            metadata.
        z No active metadata service foundz,IOError contacting metadata service: {error})�errorN)r�retriesr'zBroken metadata address {addr})Zaddr)r:rrA�IOErrorr(rBr3�read_metadata_servicerrZnum_retriesr6rZNonReadableZBrokenMetadata)rrFr9�result�msgrrrr@�s6����
�z#DataSourceOpenStack._crawl_metadatacCspd|j�d�k}t��sdSt�d�}|tkr2dSt�d�tkrDdS|rTt�	�rTdSt�
d��d�tkrldSdS)	z<Return True when a potential OpenStack platform is detected.ZOracleZdatasource_listTzsystem-product-namezchassis-asset-tag��product_nameF)rr+rZis_x86rZ
read_dmi_data�VALID_DMI_PRODUCT_NAMES�VALID_DMI_ASSET_TAGS�oracleZ_is_platform_viableZget_proc_env�DMI_PRODUCT_NOVA)rZ
accept_oraclerOrrr�	ds_detect�s
zDataSourceOpenStack.ds_detect)�__name__�
__module__�__qualname__Zdsnamerrr<r?rZNETWORKrZBOOT_NEW_INSTANCEZBOOTZBOOT_LEGACYZHOTPLUGZsupported_update_eventsrr r:r;�propertyr=rGr@rT�
__classcell__rrrrr*s&��		/
5%rc@seZdZdZdZdS)�DataSourceOpenStackLocalauRun in init-local using a dhcp discovery prior to metadata crawl.

    In init-local, no network is available. This subclass sets up minimal
    networking with dhclient on a viable nic so that it can talk to the
    metadata service. If the metadata service provides network configuration
    then render the network configuration for that instance based on metadata.
    TN)rUrVrW�__doc__r?rrrrrZsrZ�cCstj||||d�}|��S)N)rr'rI)rZMetadataReaderZread_v2)Zbase_urlrr'rI�readerrrrrKs�rKcCst�|t�Sr
)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_listsr_)Nr\r\)(Zloggingr4Z	cloudinitrrrrZcloudinit.eventrrZcloudinit.net.dhcprZcloudinit.net.ephemeralr	Zcloudinit.sourcesr
rRZcloudinit.sources.helpersrZ	getLoggerrUr-ZDEFAULT_IIDrCrSZDMI_PRODUCT_COMPUTErPZDMI_ASSET_TAG_OPENTELEKOMZDMI_ASSET_TAG_SAPCCLOUDZDMI_ASSET_TAG_HUAWEICLOUDrQZSourceMixinrrrZrKZDEP_FILESYSTEMZDEP_NETWORKr^r_rrrr�<module>s@
��Z
	
�