Current File : //usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceNoCloud.cpython-312.pyc
�

S�g�?���ddlZddlZddlZddlmZddlmZmZmZm	Z	ddl
mZeje
�ZGd�dej�Zdd�Zdd�Zdd	�Zd
�ZGd�de�Zeej,ffeej,ej.ffgZd
�Ze
dk(rlddlmZej8ej:��edZe	j>e�\Z Z!Z"Z#e$de ���e$de!���e$de"���e$de#���yy)�N)�partial)�dmi�	lifecycle�sources�util)�enic�r��eZdZdZd�Z�fd�Zd�Zd�Zed��Z	de
fd�Zd	�Zd
�Z
d�Zed��Z�xZS)
�DataSourceNoCloud�NoCloudc�@�tjj||||�d|_tj
j
|jd�tj
j
|jd�g|_d|_d|_	d|_
d|_y)N�nocloud�nocloud-net)�/�file://)r�
DataSource�__init__�seed�os�path�join�seed_dir�	seed_dirs�supported_seed_starts�_network_config�_network_eni��self�sys_cfg�distro�pathss    �E/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNoCloud.pyrzDataSourceNoCloud.__init__sy�����#�#�D�'�6�5�A���	��G�G�L�L�����3��G�G�L�L�����7�
�����
�%5��"�#��� ���c����t�|��dz|jrd|j�d�ndz|jtj
k7rd|j�d�zSdzS)z@append seed and dsmode info when they contain non-default values� z[seed=�]�z[dsmode=)�super�__str__r�dsmoder�DSMODE_NETWORK)r�	__class__s �r!r(zDataSourceNoCloud.__str__&ss���
�G�O���
�(,�	�	���	�	�{�!�$�r�
;�
�;�;�'�"8�"8�8��4�;�;�-�q�)�	
�		
��

�		
r"c���tjd�}|jtjd��tjd|j�z�}|jtjd|j	�z��|jtjd|z��tt
|�t
|�z�}|jd��|S)Nz	TYPE=vfatzTYPE=iso9660zLABEL=%szLABEL_FATBOOT=%sT)�reverse)r�find_devs_with�extend�upper�lower�list�set�sort)r�label�fslist�
label_list�devlists     r!�_get_deviceszDataSourceNoCloud._get_devices3s����$�$�[�1���
�
�d�)�)�.�9�:��(�(��e�k�k�m�)C�D�
����$�-�-�j�5�;�;�=�.H�I�J����$�-�-�.@�5�.H�I�J��s�6�{�S��_�4�5�����T��"��r"c�	�d|jd�}g}idddd�}	i}tjd�}|r+t||�r|j	d�t|d|i�}	i}t|�r|j	d
�t|d|i�}ddgd
dgd�}|jD]M}	tj|fi|��}|j	|�tjd|�t||�}n|jjd�r&|j	d�|jd|dd<d|jvr5d|jvr't||j�}|j	d�d�}	|jjdd�}
|
��|
j!�dk7rt#j$ddd��|j'|
�D]e}	tjd|�	tj(||	|�}t||�}tjd|�|j	|�nt5|�dk(ry	d|dvr�|dd}
d	}|j6D]}|
j9|�s�|}n|s|j;|
�y	tj<|
�}
tj>|
d� �\}}}}tjd!|
�tj@|d|g�|d<||d<||d
<|j	|
�tj@|d|g�|d<|jC|djd"�g�|_|jtDjFk(r"tjd#||j�y	d$jI|�|_%|d|_&|d|_'|d
|_(|d|_)|djd%�|_*y&#t$rtjtd�Yy	wxYw#t$rtjtd�Yy	wxYw#t$rY���wxYw#t$rtj+d||
�Y���wxYw#t,$r)}|j.t.j0k7r�Yd}~���d}~wtj2$rtjtd|�Y��wxYw)'Nr
)�instance-idr)r&)�	meta-data�	user-data�vendor-data�network-config�system-serial-numberrr<zUnable to parse dmi dataF�cmdlinez!Unable to parse command line datar=r>r?)�required�optionalzUsing seeded data from %s�seedfrom�ds_config_seedfrom�	ds_configc�.�tj|fi|��S�N)r�pathprefix2dict)�mp�datas  r!�_pp2d_callbackz3DataSourceNoCloud._get_data.<locals>._pp2d_callback�s���'�'��3�d�3�3r"�fs_label�cidatazCustom fs_label keys�24.3z(This key isn't supported by ds-identify.��
deprecated�deprecated_version�
extra_messagezAttempting to use data from %sz)device %s with label=%s not a valid seed.zUsing data from %sz(Failed to mount %s when looking for datar)�timeoutzUsing seeded cache data from %sr)z&%s: not claiming datasource, dsmode=%s�,znetwork-interfacesT)+r)r�
read_dmi_data�load_cmdline_data�append�_merge_new_seed�	Exceptionr�logexc�LOGrrI�debug�
ValueError�ds_cfg�getr1r�	deprecater9�mount_cb�warning�OSError�errno�ENOENT�MountFailedError�lenr�
startswith�_log_unusable_seedfrom�sub_dmi_vars�read_seeded�
mergemanydict�_determine_dsmoder�DSMODE_DISABLEDrr�metadata�userdata_raw�vendordata_rawrr)r�defaults�found�mydata�md�serial�pp2d_kwargsr�seededrLr5�dev�erD�	seedfound�proto�md_seed�ud�vd�_s                    r!�	_get_datazDataSourceNoCloud._get_data?s���$��k�k�
��
�����"�	
��
	��B��&�&�'=�>�F��+�B��7����U�#�(��+�r�1B�C��
	��B� ��$����Y�'�(��+�r�1B�C��%�k�2�&�(8�9�
��
�N�N�	�D�
��-�-�d�B�k�B�����T�"��	�	�5�t�<�(���8���
	��;�;�?�?�:�&��L�L�-�.�.2�k�k�*�.E�F�;��
�+��$�+�+�%�+����*D�$�V�T�[�[�9�F��L�L��%�	4������
�H�5�����{�{�}��(��#�#�5�'-�"L��
�(�(��/�
����I�I�>��D�
!�!%������"��-�V�V�<�F��I�I�2�C�8��L�L��%��)
�>�u�:��?�����,�,��k�*�:�6�H��I��3�3�
���&�&�u�-� %�I��
���+�+�H�5���'�'��1�H�"&�!1�!1�(�D�!I��G�R��Q��I�I�7��B�#'�"4�"4���$�g�.�#�F�;��#%�F�;��$&�F�=�!��L�L��"�#�0�0�
�K�
 �(�+�
��{���,�,�
�K�
 �
$�
$�X�
.�/�
����;�;�'�1�1�1��I�I�8�$����
���H�H�U�O��	��{�+��
�"�;�/���$�]�3���%�&6�7���"�;�/�3�3�4H�I�����Y�	��K�K��7�8��	���	��K�K��@�A��	��"�
��
��F&�!����G��!��
!�
!�����w�w�%�,�,�.��/���,�,���K�K��G����sy�AO/�,P�$A	Q�Q8�,Q�3Q8�/#P�P�#P>�=P>�	Q�
Q� Q5�1Q8�4Q5�5Q8�8	S�R%�%1S�Sc�l�|jstj�rdnd|_|jS)N�lxdr
)�_platform_typer�is_lxd�rs r!�
platform_typezDataSourceNoCloud.platform_type�s)���"�"�+/�;�;�=�%�i�D���"�"�"r"rDc�H�tjd||j|�y)�!Stage-specific level and message.zN%s only uses seeds starting with %s - will try to use %s in the network stage.N)r\�infor�rrDs  r!rjz(DataSourceNoCloud._log_unusable_seedfrom�s"�����
$���&�&��	
r"c�"�tjS)z=Return unknown when 'cloud-name' key is absent from metadata.)r�METADATA_UNKNOWNr�s r!�_get_cloud_namez!DataSourceNoCloud._get_cloud_name�s���'�'�'r"c�f�|jjd�rd}nd}|�d|j�d�S)z/Return the subplatform metadata source details.z/devzconfig-diskzseed-dirz (�))rri)r�subplatform_types  r!�_get_subplatformz"DataSourceNoCloud._get_subplatform�s/���9�9����'�,��)��,�d�i�i�8�8r"c��|j�}|syt|d|jg�}t|��}|sy||k(S)Nr)�dirs)�get_instance_id�getattrr�_quick_read_instance_id)rr�currentr��quick_ids     r!�check_instance_idz#DataSourceNoCloud.check_instance_id�sI���&�&�(�����t�[�4�=�=�/�:��*��5�����7�"�"r"c���|j�H|j�<tjddd��t	j
|j�|_|jS)Nz$Eni network configuration in NoCloudrOz,You can use network v1 or network v2 insteadrP)rrrrar�convert_eni_datar�s r!�network_configz DataSourceNoCloud.network_configsX�����'�� � �,��#�#�E�'-�F�	�(+�';�';�D�<M�<M�'N��$��#�#�#r")�__name__�
__module__�__qualname__�dsnamerr(r9r��propertyr��strrjr�r�r�r��
__classcell__)r+s@r!r
r
sa���
�F�
!�
�
�b�H�#��#�

�s�
�(�9�
#��$��$r"r
c���|�g}d}i}t|�r	||vr||S|D]C}|��	tj|dg��}tj|d�}|r||vr||cS�Ey#t$rY�RwxYw)Nr;r<)rB)rWrrI�	load_yamlr^)r��iid_key�fill�drKrvs      r!r�r�s����|����G�
�D����7�d�?��G�}��
�	���9��	��'�'��[�M�B�D�����[� 1�2�B��g��m��'�{�"��	����	��	�s�:A&�&	A2�1A2c�R�dtjfdtjfg}|D]~\}}t|||�s�d|vry|j	d�}|rL|jd�rtj|d<y|jd�rtj|d<y||d<yy)	Nz
ds=nocloudzds=nocloud-netr)TrD�zhttp://zhttps://zftp://zftps://)rrF)r�DSMODE_LOCALr*�parse_cmdline_datar`ri)r�rA�pairs�idstrr)rDs      r!rWrW4s���	�w�+�+�,�	�7�1�1�2�
�E���
��v�!�%��w�7���t����8�8�J�'����"�"�<��")�!7�!7��X����$�$�%5�6�!(�!5�!5��X���$�D��N��'�(r"c��|�tj�}d|z}d|z|vsd|z|vsyd}|j�D]&}|j|�s�|jdd�}�(|djd�}t	|�dkDr|dd}nd}d	d
dd�}|D],}|dk(r�		|jdd�\}	}
|	|vr||	}	|
||	<�.y
#t
$r|}	d}
Y� wxYw)Nz %s z %s;Fr&�=��;�zlocal-hostnamer;rD)�h�i�sT)r�get_cmdline�splitrirhrZ)�ds_idr�rA�argline�tok�tmp�kvpairs�s2l�item�k�vs           r!r�r�Us�����"�"�$���w��G��U�N�g�%��%��7�)B���G��}�}��(���>�>�%� ��i�i��Q�'�G�(��!�*�
�
�3�
�C�
�3�x�!�|��a�b�'����!�}�:�
F�C��
���2�:��	��Z�Z��Q�'�F�Q��
��8��A��A���Q��
����	��A��A�	�s�"C�
C�Cc�z�|j�}|jdi�}t|dt�st	j
|d�}t	j|d|g�|d<|jd�r't	j
|jd��|d<d|vr|d|d<d|vr|d|d<|S)Nr<r?r=r>)�copyr`�
isinstance�dictrr�rm)�curry�ret�newmds    r!rYrY}s���

�(�(�*�C��J�J�{�B�'�E��f�[�)�4�0����v�k�2�3���)�)�3�{�+;�U�*C�D�C���
�z�z�"�#� $���v�z�z�:J�/K� L�����f��!�+�.��K�����#�M�2��M���Jr"c�$�eZdZd�Zdefd�Zd�Zy)�DataSourceNoCloudNetc�B�tj||||�d|_y)Nr�)r
rrrs    r!rzDataSourceNoCloudNet.__init__�s ���"�"�4��&�%�@�&
��"r"rDc�H�tjd||j|�y)r�z6%s only uses seeds starting with %s - %s is not valid.N)r\rcrr�s  r!rjz+DataSourceNoCloudNet._log_unusable_seedfrom�s �����D���&�&��		
r"c��ttjddd��}dtj�k(r|�ytj
t
jd�xsd�j�}||jj�dfvr#tjd	|�|dk(r|�y|jjd
i�jdi�jd�rtjd
|�yy)z�Check dmi and kernel command line for dsname

        NoCloud historically used "nocloud-net" as its dsname
        for network timeframe (DEP_NETWORK), which supports http(s) urls.
        For backwards compatiblity, check for that dsname.
        z!The 'nocloud-net' datasource namez24.1zgUse 'nocloud' instead, which uses the seedfrom protocolscheme (http// or file://) to decide how to run.rPrTr@r&zJMachine is configured by dmi serial number to run on single datasource %s.�
datasourcerrDzMMachine is configured by system configuration to run on single datasource %s.F)rrrar�
parse_cmdline�parse_cmdline_or_dmirrVr1r�r\r]rr`)r�log_deprecatedrws   r!�	ds_detectzDataSourceNoCloudNet.ds_detect�s���!����:�%�C�
���G�1�1�3�3�����-�-����4�5�;��
�
�%�'�	��d�k�k�'�'�)�=�9�9��I�I�(��
�
��&�� ���L�L���\�2�.�
�S��B�
�
�S��_�
�
�I�I�(��
�
�r"N)r�r�r�rr�rjr�r�r"r!r�r��s��
�
�s�
�-r"r�c�6�tj|t�SrH)r�list_from_depends�datasources)�dependss r!�get_datasource_listr��s���$�$�W�k�:�:r"�__main__)�argv)�levelr�zseeded: zud: zvd: z	network: rH)%re�loggingr�	functoolsr�	cloudinitrrrr�
cloudinit.netr�	getLoggerr�r\rr
r�rWr�rYr��DEP_FILESYSTEM�DEP_NETWORKr�r��sysr��basicConfig�DEBUGrDrlr~rr��network�printr�r"r!�<module>r�s%��
��	��3�3���g����!��D$��*�*�D$�N�.�B%�P�$@�,�@�J��/�/�1�2��G�2�2�G�4G�4G�H�I���;��z����G���g�m�m�,��A�w�H�/�t�/�/��9��G�R��W�	�H�W�I�
��	�D���+��	�D���+��	�I�g�Y�
� �r"