name : DataSourceOpenStack.cpython-39.pyc
a

'�Dgg(�@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__��I/usr/lib/python3.9/site-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>R�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_urlsZurl2base�urlZmd_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.r2r/rZconvert_net_json)rrrr�network_config}s�
�z"DataSourceOpenStack.network_configc
Cs�|jr�z<t|j|jj��|��}Wd�n1s60YWq�ttjfy~}zt�	t
t|��WYd}~dSd}~00nFz|��}Wn8tjy�}zt�	t
t|��WYd}~dSd}~00|�|�
d�g�|_|jtjk�r�dS|�
di�}t�|tg�}||_|�
d�|_|�
d�|_|�
d�|_|d|_|j�|�
d	i��|�
d
�}zt�|�|_Wn8t�y�}zt
�d|�d|_WYd}~n
d}~00|�
d�}zt�|�|_Wn8t�y�}zt
�d
|�d|_WYd}~n
d}~00dS)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.
        NFr!�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�
ValueErrorr2Zvendordata2_raw)r�results�eZmdZvdZvd2rrr�	_get_data�sL
�*


zDataSourceOpenStack._get_datac
Cs�z|��st�d��Wn:tyP}z"t�djt|�d���WYd}~n
d}~00|��}zt|j|j	|j
|jd�}Wnvtj
y�}zt�t|���WYd}~nLd}~0tjtfy�}z&dj|jd�}t�|�|�WYd}~n
d}~00|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})�addr)r<rrC�IOErrorr)rDr4�read_metadata_servicerrZnum_retriesr7rZNonReadableZBrokenMetadata)rrIr;�result�msgrrrrB�s6����
"�"z#DataSourceOpenStack._crawl_metadatacCspd|j�d�v}t��sdSt�d�}|tvr2dSt�d�tvrDdS|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_oraclerSrrr�	ds_detect�s
zDataSourceOpenStack.ds_detect)�__name__�
__module__�__qualname__Zdsnamerrr>rArZNETWORKrZBOOT_NEW_INSTANCEZBOOTZBOOT_LEGACYZHOTPLUGZsupported_update_eventsrr r<r=�propertyr?rJrBrX�
__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)rYrZr[�__doc__rArrrrr^sr^�cCstj||||d�}|��S)N)rr(rL)rZMetadataReaderZread_v2)Zbase_urlrr(rL�readerrrrrOs�rOcCst�|t�Sr
)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_listsrc)Nr`r`)(Zloggingr5Z	cloudinitrrrrZcloudinit.eventrrZcloudinit.net.dhcprZcloudinit.net.ephemeralr	Zcloudinit.sourcesr
rVZcloudinit.sources.helpersrZ	getLoggerrYr.ZDEFAULT_IIDrErWZDMI_PRODUCT_COMPUTErTZDMI_ASSET_TAG_OPENTELEKOMZDMI_ASSET_TAG_SAPCCLOUDZDMI_ASSET_TAG_HUAWEICLOUDrUZSourceMixinrrr^rOZDEP_FILESYSTEMZDEP_NETWORKrbrcrrrr�<module>s>
��Z
	
�

© 2025 Cubjrnet7