관리-도구
편집 파일: DataSourceNoCloud.cpython-39.pyc
a ����'�Dg�?����������������������@���s8��d�dl�Z�d�dlZd�dlZd�dlmZ�d�dlmZmZmZm Z �d�dl mZ�e�e �ZG�dd��dej�Zddd�Zdd d �Zddd�Zd d��ZG�dd��de�ZeejffeejejffgZdd��Ze dk�r4d�dlmZ�ejejd��ed�Ze �e�\Z Z!Z"Z#e$de �����e$de!�����e$de"�����e$de#�����dS�)�����N)�partial)�dmi� lifecycle�sources�util)�enic�����������������������sv���e�Zd�ZdZdd��Z��fdd�Zdd��Zdd ��Zed d���Z e d�d d�Zdd��Zdd��Z dd��Zedd���Z���ZS�)�DataSourceNoCloud�NoCloudc�����������������C���sV���t�j�|�|||��d�|�_tj�|jd�tj�|jd�g|�_d�|�_d|�_ d�|�_ d�|�_d�S�)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_cfgZdistro�paths��r����G/usr/lib/python3.9/site-packages/cloudinit/sources/DataSourceNoCloud.pyr������s�����zDataSourceNoCloud.__init__c��������������������sD���t������d�|�jr d|�j��d�nd�|�jtjkr>d|�j��d�nd�S�)z@append seed and dsmode info when they contain non-default values� z[seed=�]��z[dsmode=)�super�__str__r����dsmoder����DSMODE_NETWORK�r����� __class__r���r���r#���&���s������ ���zDataSourceNoCloud.__str__c�����������������C���s|���t��d�}|�t��d���t��d|�����}|�t��d|�������|�t��d|����tt|�t|�@��}|jdd��|S�)Nz TYPE=vfatzTYPE=iso9660zLABEL=%szLABEL_FATBOOT=%sT)�reverse)r���Zfind_devs_with�extend�upper�lower�list�set�sort)r����labelZfslistZ label_listZdevlistr���r���r����_get_devices3���s���� zDataSourceNoCloud._get_devicesc�����������������C���s��d|�j�d�}g�}i�ddd�d�}z8i�}t�d�}|rTt||�rT|�d��t|d|i�}W�n �tyv���t�t d��Y�d S�0�z(i�}t|�r�|�d ��t|d|i�}W�n �ty����t�t d��Y�d S�0�ddgd dgd�}|�j D�]X}z>tj|fi�|��}|�|��t �d|��t||�}W���q4W�q��t �y0���Y�q�0�q�|�j�d��r^|�d��|�jd�|d�d<�d|�jv��r�d|�jv��r�t||�j�}|�d��dd��} |�j�dd�} | d�u�r�| ���dk�r�tjdddd��|��| �D�]�}zvt �d|��zt�|| |�}W�n*�t �y"���t �d|| ��Y�W��q�Y�n0�t||�}t �d|��|�|��W���q�W�nX�t�y��}�z|jtjk�rp��W�Y�d�}~n,d�}~0��tj�y����t�t d|��Y�n0��q�t|�d k�r�d S�d|d�v��rx|d�d�} d }|�jD�]}| �|��r�|}��q��q�|�s|��| ��d S�t�| �} tj| d�d!�\}}}}t �d"| ��t� |d�|g�|d<�||d<�||d <�||d<�|�| ��t� |d�|g�|d<�|��!|d��d#�g�|�_�|�j�t"j#k�r�t �d$|�|�j���d S�d%�$|�|�_%|d�|�_&|d�|�_'|d �|�_(|d�|�_)|d��d&�|�_*d'S�)(Nr ���)�instance-idr$���r!���)� meta-data� user-data�vendor-data�network-config�system-serial-numberr���r3���zUnable to parse dmi dataF�cmdlinez!Unable to parse command line datar4���r5���r6���)�requiredZoptionalzUsing seeded data from %s�seedfromZds_config_seedfromZ ds_configc�����������������S���s���t�j|�fi�|��S��N)r����pathprefix2dict)Zmp�datar���r���r����_pp2d_callback����s����z3DataSourceNoCloud._get_data.<locals>._pp2d_callbackZfs_labelZcidatazCustom fs_label keys�24.3z(This key isn't supported by ds-identify.�Z deprecatedZdeprecated_versionZ 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���Zlogexc�LOGr���r<����debug� ValueErrorZds_cfg�getr,���r���� deprecater1���Zmount_cb�warning�OSError�errno�ENOENTZMountFailedError�lenr���� startswith�_log_unusable_seedfromZsub_dmi_vars�read_seeded� mergemanydictZ_determine_dsmoder���ZDSMODE_DISABLEDr���r����metadataZuserdata_rawZvendordata_rawr���r���)r����defaults�foundZmydata�md�serialZpp2d_kwargsr����seededr>���r0����dev�er:���Z seedfound�proto�md_seed�ud�vd�networkr���r���r���� _get_data?���s������� � ��� � � ��� zDataSourceNoCloud._get_datac�����������������C���s���|�j�st���rdnd|�_�|�j�S�)NZlxdr ���)Z_platform_typer���Zis_lxdr&���r���r���r���� platform_type����s����zDataSourceNoCloud.platform_type�r:���c�����������������C���s���t��d|�|�j|��dS�)�!Stage-specific level and message.zN%s only uses seeds starting with %s - will try to use %s in the network stage.N)rH����infor����r���r:���r���r���r���rS�������s�����z(DataSourceNoCloud._log_unusable_seedfromc�����������������C���s���t�jS�)z=Return unknown when 'cloud-name' key is absent from metadata.)r���ZMETADATA_UNKNOWNr&���r���r���r����_get_cloud_name����s����z!DataSourceNoCloud._get_cloud_namec�����������������C���s$���|�j��d�rd}nd}d||�j�f�S�)z/Return the subplatform metadata source details.z/devzconfig-diskzseed-dirz%s (%s))r���rR���)r���Zsubplatform_typer���r���r����_get_subplatform����s����z"DataSourceNoCloud._get_subplatformc�����������������C���s:���|�����}|sd�S�t|�d|�jg�}t|d�}|s2d�S�||kS�)Nr���)�dirs)Zget_instance_id�getattrr����_quick_read_instance_id)r���r����currentrk���Zquick_idr���r���r����check_instance_id���s���� z#DataSourceNoCloud.check_instance_idc�����������������C���s8���|�j�d�u�r2|�jd�ur2tjdddd��t�|�j�|�_�|�j�S�)Nz$Eni network configuration in NoCloudr?���z,You can use network v1 or network v2 insteadr@���)r���r���r���rL���r���Zconvert_eni_datar&���r���r���r����network_config��s���� �z DataSourceNoCloud.network_config)�__name__� __module__�__qualname__�dsnamer���r#���r1���rc����propertyrd����strrS���ri���rj���ro���rp���� __classcell__r���r���r'���r���r������s��� �& r���c�������������� ���C���s����|�d�u�rg�}�d}i�}t�|�r,||v�r,||�S�|�D�]^}|d�u�r>q0z<tj|dgd�}t�|d��}|rx||v�rx||�W���S�W�q0�ty����Y�q00�q0d�S�)Nr2���r3���)r9���)rD���r���r<���� load_yamlrJ���)rk���Ziid_key�fill�dr=���rY���r���r���r���rm�����s"����rm���c�����������������C���s����dt�jfdt�jfg}|D�]j\}}t||�|�s.qd|�v�r<�dS�|��d�}|rv|�d�r`t�j|�d<�q~|�d�r~t�j|�d<�n||�d<��dS�dS�) Nz ds=nocloudzds=nocloud-netr$���Tr:����zhttp://zhttps://zftp://zftps://)r ���r���F)r���ZDSMODE_LOCALr%����parse_cmdline_datarK���rR���)ry���r8����pairsZidstrr$���r:���r���r���r���rD���5��s&����� � rD���c�������������� ���C���s����|d�u�rt����}d|�}d|��|v�s4d|��|v�s4dS�d}|���D�]}|�|��r@|�dd�}q@|d��d�}t|�dkr�|dd���}nd}d d dd�}|D�]V}|dkr�q�z|�dd�\} } W�n�ty����|} d�} Y�n0�| |v�r�|| �} | || <�q�d S�)Nz %s z %s;Fr!����=�����;r���zlocal-hostnamer2���r:���)�h�i�sT)r���Zget_cmdline�splitrR���rQ���rG���)Zds_idry���r8���Zargline�tok�tmpZkvpairsZs2l�item�k�vr���r���r���r|���V��s4���� r|���c�����������������C���s����|�����}|�di��}t|d�t�s0t�|d��}t�|�d�|g�|d<�|�d�rdt�|�d��|d<�d|v�rx|d�|d<�d|v�r�|d�|d<�|S�)Nr3���r6���r4���r5���)�copyrK���� isinstance�dictr���rx���rU���)Zcurr[����retZnewmdr���r���r���rF���~��s���� rF���c�������������������@���s*���e�Zd�Zdd��Zed�dd�Zdd��ZdS�) �DataSourceNoCloudNetc�����������������C���s���t��|�|||��d|�_d�S�)Nr{���)r���r���r���r���r���r���r���r������s����zDataSourceNoCloudNet.__init__re���c�����������������C���s���t��d|�|�j|��dS�)rf���z6%s only uses seeds starting with %s - %s is not valid.N)rH���rM���r���rh���r���r���r���rS������s�����z+DataSourceNoCloudNet._log_unusable_seedfromc�����������������C���s����t�tjdddd�}dt���kr(|���dS�t�t�d�p8d����}||�j ���dfv�rpt �d |���|dkrl|���dS�|�j� d i��� di��� d�r�t �d |���dS�dS�)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.r@���r���Tr7���r!���zJMachine is configured by dmi serial number to run on single datasource %s.Z datasourcer ���r:���zMMachine is configured by system configuration to run on single datasource %s.F)r���r���rL���r���Z parse_cmdlineZparse_cmdline_or_dmir���rC���r,���rt���rH���rI���r���rK���)r���Zlog_deprecatedrZ���r���r���r���� ds_detect���s@����� ������zDataSourceNoCloudNet.ds_detectN)rq���rr���rs���r���rv���rS���r����r���r���r���r���r�������s��� r����c�����������������C���s���t��|�t�S�r;���)r���Zlist_from_depends�datasources)Zdependsr���r���r����get_datasource_list���s����r�����__main__)�argv)�levelr���zseeded: zud: zvd: z network: )N)N)N)%rO���Zloggingr���� functoolsr���Z cloudinitr���r���r���r���Z cloudinit.netr���Z getLoggerrq���rH���r���r���rm���rD���r|���rF���r����ZDEP_FILESYSTEMZDEP_NETWORKr����r�����sysr����ZbasicConfig�DEBUGr:���rT���r_���r`���ra���rb����printr���r���r���r����<module>���s6��� �� ! (E �