Your IP : 216.73.217.13


Current Path : /usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceOpenStack.cpython-38.pyc

U

�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 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!GszDataSourceOpenStack.__str__cCs|j�dt�}dd�|D�}t|�t|�krHt�dtt|�t|���t|�rV|}nt�d�t}g}i}|D]"}t	�
|d�}|�|�|||<qp|��}t
�
�}t	j||j|jdd�\}	}
|	r�t�d	||	�nt�d
|tt
�
�|��|�|	�|_t|	�S)NZ
metadata_urlscSsg|]}t�|�r|�qSr)rZis_resolvable_url)�.0�xrrr�
<listcomp>Ns
zADataSourceOpenStack.wait_for_metadata_service.<locals>.<listcomp>z,Removed the following from metadata urls: %sz+Empty metadata url list! using default listrF)�urlsZmax_wait�timeoutZconnect_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�warningrZcombine_url�append�get_url_params�timeZwait_for_urlZmax_wait_seconds�timeout_seconds�intr�bool)rr'ZfilteredZmd_urlsZurl2baseZurlZmd_url�
url_paramsZ
start_timeZ	avail_urlZ	_responserrr�wait_for_metadata_serviceLsD�


�
�z-DataSourceOpenStack.wait_for_metadata_servicecCst�|���Sr)rZinstance_id_matches_system_uuidZget_instance_id)rrrrr�check_instance_idusz%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.rZconvert_net_json)rrrr�network_configys �
�z"DataSourceOpenStack.network_configc
Cs|jr�z8t|j|j��d��tjtjd|j	d�}W5QRXWq�t
tjfk
r|}zt�
tt|��WY�dSd}~XYq�XnHz|�	�}Wn:tjk
r�}zt�
tt|��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.
        )Ztmp_dirzCrawl of metadata service)Zlogfunc�msg�funcFNr"�metadatazec2-metadataZnetworkdataZuserdatarrZ
vendordataz"Invalid content in vendor-data: %sZvendordata2z#Invalid content in vendor-data2: %sT)#�perform_dhcp_setupr
Zfallback_interfacerZget_tmp_exec_pathr�log_timer-r.�_crawl_metadatar	r�InvalidMetaDataExceptionZlogexc�strZ_determine_dsmoder*r"ZDSMODE_DISABLEDZ
mergemanydict�DEFAULT_METADATAr?rrZuserdata_rawrr�updateZvendordata_pureZconvert_vendordataZvendordata_raw�
ValueErrorr1Zvendordata2_pureZvendordata2_raw)rZresults�eZmdZvdZvd2rrr�	_get_data�sZ��


zDataSourceOpenStack._get_datac
Cs�z|��st�d��Wn8tk
rN}zt�djt|�d���W5d}~XYnX|��}z,tjt	j
dt|jg|j
|j|jd�d�}Wnrtjk
r�}zt�t|���W5d}~XYnBtjtfk
r�}zdj|jd	�}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})�errorNz#Crawl of openstack metadata service)r�retriesr()�args�kwargszBroken metadata address {addr})Zaddr)r9rrC�IOError�formatrDr3rrAr-r.�read_metadata_servicerrZnum_retriesr5rZNonReadableZBrokenMetadata)rrHr8�resultr=rrrrB�s>�����
�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_oraclerSrrr�	ds_detect�s
zDataSourceOpenStack.ds_detect)�__name__�
__module__�__qualname__Zdsnamerrr;r@rZNETWORKrZBOOT_NEW_INSTANCEZBOOTZBOOT_LEGACYZHOTPLUGZsupported_update_eventsrr!r9r:�propertyr<rIrBrX�
__classcell__rrrrr
,s&��		)
<*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__r@rrrrr^sr^�cCstj||||d�}|��S)N)rr(rK)rZMetadataReaderZread_v2)Zbase_urlrr(rK�readerrrrrPs�rPcCst�|t�Sr)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_list&src)Nr`r`)*r4Z	cloudinitrrZloggingrrrZcloudinit.eventrrZcloudinit.net.dhcpr	Zcloudinit.net.ephemeralr
Zcloudinit.sourcesrrVZcloudinit.sources.helpersrZ	getLoggerrYr-r+ZDEFAULT_IIDrErWZDMI_PRODUCT_COMPUTErTZDMI_ASSET_TAG_OPENTELEKOMZDMI_ASSET_TAG_SAPCCLOUDZDMI_ASSET_TAG_HUAWEICLOUDrUZSourceMixinr r
r^rPZDEP_FILESYSTEMZDEP_NETWORKrbrcrrrr�<module>sD
��`
	
�