HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceOpenStack.cpython-310.pyc
o

�Ad�)�@sddlZddlmZddlmZddlmZmZmZddlm	Z	m
Z
ddlmZddl
mZddlmZdd	lmZe�e�Zd
dgZdZd
eiZdZdZeegZdZdZdZeZ e eeeg7Z Gdd�dej!ej"�Z#Gdd�de#�Z$ddd�Z%e$ej&ffe#ej&ej'ffgZ(dd�Z)dS)�N)�dmi)�log)�sources�
url_helper�util)�
EventScope�	EventType)�NoDHCPLeaseError)�EphemeralDHCPv4)�DataSourceOracle)�	openstackzhttp://[fe80::a9fe:a9fe]zhttp://169.254.169.254ziid-dsopenstackzinstance-idzOpenStack NovazOpenStack Compute�OpenTelekomCloudz
SAP CCloud VM�HUAWEICLOUDcs�eZdZdZejZdZej	e
je
je
j
e
jhiZ�fdd�Zdd�Zdd�Zd	d
�Zedd��Zd
d�Zdd�Zdd�Z�ZS)�DataSourceOpenStack�	OpenStackFcsHtt|��|||�d|_t�|j�|_d|_i|_	t
j|_t
j|_
dS�N)�superr�__init__�metadata_addressr�fetch_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>szDataSourceOpenStack.__init__cCs"tj�|�}d||j|jf}|S)Nz%s [%s,ver=%s])r�
DataSource�__str__�dsmoder)r�root�mstrr"r"r#r%GszDataSourceOpenStack.__str__cCs|j�dt�}dd�|D�}t|�t|�kr$t�dtt|�t|���t|�r+|}nt�d�t}g}i}|D]}t	�
|d�}|�|�|||<q8|��}t
�
�}t	j||j|jdd�\}	}
|	rjt�d	||	�n
t�d
|tt
�
�|��|�|	�|_t|	�S)N�
metadata_urlscSsg|]	}t�|�r|�qSr")r�is_resolvable_url)�.0�xr"r"r#�
<listcomp>NszADataSourceOpenStack.wait_for_metadata_service.<locals>.<listcomp>z,Removed the following from metadata urls: %sz+Empty metadata url list! using default listrF)�urls�max_wait�timeout�connect_synchronouslyzUsing metadata source: '%s'z2Giving up on OpenStack md from %s after %s seconds)�ds_cfg�get�DEF_MD_URLS�set�LOG�debug�list�len�warningr�combine_url�append�get_url_params�time�wait_for_url�max_wait_seconds�timeout_seconds�intr�bool)rr.�filtered�md_urls�url2base�url�md_url�
url_params�
start_time�	avail_url�	_responser"r"r#�wait_for_metadata_serviceLsD�



��z-DataSourceOpenStack.wait_for_metadata_servicecCst�|���Sr)r�instance_id_matches_system_uuid�get_instance_id)rrr"r"r#�check_instance_idusz%DataSourceOpenStack.check_instance_idcCsn|jtjkr	|jSt�|j�dd��rd|_|jS|jtjkr&t�	d�dSt�
d�tj|jdd�|_|jS)z@Return a network config dict for rendering ENI or netplan files.�apply_network_configTNz<Unexpected call to network_config when network_json is None.z(network config provided via network_json)�
known_macs)
�_network_configrrr�is_falser2r3rr6r:r7r�convert_net_json)rr"r"r#�network_configys�
�z"DataSourceOpenStack.network_configc
Cs|jrHz&t|j|j��d��tjtjd|j	d�}Wd�n1s#wYWnAt
tjfyG}zt�
tt|��WYd}~dSd}~wwz|�	�}Wntjyj}zt�
tt|��WYd}~dSd}~ww|�|�d�g�|_|jtjkr}dS|�di�}t�|tg�}||_|�d�|_|�d	�|_|�d
�|_|d|_|j�|�di��|�d
�}||_zt�|�|_Wnty�}zt� d|�d|_WYd}~nd}~ww|�d�}||_!z	t�|�|_"WdSt�y}zt� d|�d|_"WYd}~dSd}~ww)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.
        )�tmp_dirzCrawl of metadata service)�logfunc�msg�funcNFr&�metadatazec2-metadata�networkdata�userdatarr�
vendordataz"Invalid content in vendor-data: %s�vendordata2z#Invalid content in vendor-data2: %sT)#�perform_dhcp_setupr
�fallback_interfacer�get_tmp_exec_pathr�log_timer6r7�_crawl_metadatar	r�InvalidMetaDataException�logexc�str�_determine_dsmoder3r&�DSMODE_DISABLED�
mergemanydict�DEFAULT_METADATAr[rr�userdata_rawrr�update�vendordata_pure�convert_vendordata�vendordata_raw�
ValueErrorr:�vendordata2_pure�vendordata2_raw)r�results�e�md�vd�vd2r"r"r#�	_get_data�sp����
����

��
���zDataSourceOpenStack._get_datac
Cs�z|��s
t�d��Wnty"}zt�djt|�d���d}~ww|��}ztjt	j
dt|jg|j
|j|jd�d�}W|StjyR}zt�t|���d}~wtjtfym}z
dj|jd	�}t�|�|�d}~ww)
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})�errorNz#Crawl of openstack metadata service)r�retriesr0)�args�kwargszBroken metadata address {addr})�addr)rMrre�IOError�formatrgr=rrcr6r7�read_metadata_servicerr�num_retriesrAr�NonReadable�BrokenMetadata)rrurI�resultrYr"r"r#rd�sJ�������������z#DataSourceOpenStack._crawl_metadatacCspd|j�d�v}t��sdSt�d�}|tvrdSt�d�tvr"dS|r*t�	�r*dSt�
d��d�tkr6dSdS)	z<Return True when a potential OpenStack platform is detected.�Oracle�datasource_listTzsystem-product-namezchassis-asset-tag��product_nameF)rr3r�is_x86r�
read_dmi_data�VALID_DMI_PRODUCT_NAMES�VALID_DMI_ASSET_TAGS�oracle�_is_platform_viable�get_proc_env�DMI_PRODUCT_NOVA)r�
accept_oracler�r"r"r#�	ds_detect�s
zDataSourceOpenStack.ds_detect)�__name__�
__module__�__qualname__�dsnamerrrSr`r�NETWORKr�BOOT_NEW_INSTANCE�BOOT�BOOT_LEGACY�HOTPLUG�supported_update_eventsrr%rMrP�propertyrVryrdr��
__classcell__r"r"r r#r,s(��		)
<*rc@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)r�r�r��__doc__r`r"r"r"r#r�sr��cCstj||||d�}|��S)N)rr0r{)r�MetadataReader�read_v2)�base_urlrr0r{�readerr"r"r#r�s�r�cCst�|t�Sr)r�list_from_depends�datasources)�dependsr"r"r#�get_datasource_list&sr�)Nr�r�)*r>�	cloudinitrr�loggingrrr�cloudinit.eventrr�cloudinit.net.dhcpr	�cloudinit.net.ephemeralr
�cloudinit.sourcesrr��cloudinit.sources.helpersr�	getLoggerr�r6r4�DEFAULT_IIDrkr��DMI_PRODUCT_COMPUTEr��DMI_ASSET_TAG_OPENTELEKOM�DMI_ASSET_TAG_SAPCCLOUD�DMI_ASSET_TAG_HUAWEICLOUDr��SourceMixinr$rr�r��DEP_FILESYSTEM�DEP_NETWORKr�r�r"r"r"r#�<module>sD
��`

	�