509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼meü3  ã               @   s²   d dl Z d dlZd dlZd dlmZmZmZ d dlmZ ej	e
ƒZG dd„ dejƒZddd„Zddd	„Zdd
d„Zdd„ ZG dd„ deƒZeejffeejejffgZdd„ ZdS )é    N)ÚdmiÚsourcesÚutil)Úenic               @   s`   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zed
d„ ƒZ	dd„ Z
dd„ Zdd„ Zedd„ ƒZdS )ÚDataSourceNoCloudZNoCloudc             C   sJ   t jj| |||ƒ d | _tjj|jdƒtjj|jdƒg| _d | _d| _	d S )NÚnocloudznocloud-netú/úfile://)r   r	   )
r   Ú
DataSourceÚ__init__ÚseedÚosÚpathÚjoinÚseed_dirÚ	seed_dirsÚsupported_seed_starts)ÚselfÚsys_cfgÚdistroÚpaths© r   ú'/usr/lib/python3.6/DataSourceNoCloud.pyr      s    zDataSourceNoCloud.__init__c             C   s   t jj| ƒ}d|| j| jf S )Nz%s [seed=%s][dsmode=%s])r   r
   Ú__str__r   Údsmode)r   Úrootr   r   r   r   #   s    zDataSourceNoCloud.__str__c             C   s|   t jdƒ}|jt jdƒƒ t jd|jƒ  ƒ}|jt jd|jƒ  ƒƒ |jt jd| ƒƒ tt|ƒt|ƒ@ ƒ}|jdd� |S )Nz	TYPE=vfatzTYPE=iso9660zLABEL=%szLABEL_FATBOOT=%sT)Úreverse)r   Zfind_devs_withÚextendÚupperÚlowerÚlistÚsetÚsort)r   ÚlabelZfslistZ
label_listZdevlistr   r   r   Ú_get_devices'   s    
zDataSourceNoCloud._get_devicesc          "   C   sä  d| j dœ}g }i ddd dœ}y8i }tjdƒ}|rTt||ƒrT|jdƒ t|d|iƒ}W n  tk
rv   tjt	dƒ d	S X y(i }t|ƒrž|jd
ƒ t|d|iƒ}W n  tk
rÀ   tjt	dƒ d	S X ddgddgdœ}xZ| j
D ]P}y4tj|f|Ž}|j|ƒ t	jd|ƒ t||ƒ}P W qÜ tk
�r*   Y qÜX qÜW | jjdƒ�rZ|jdƒ | jd |d d< d| jk�rˆd| jk�rˆt|| jƒ}|jdƒ dd„ }	| jjddƒ}
|
d k	�r†xÜ| j|
ƒD ]Î}ynt	jd|ƒ ytj||	|ƒ}W n( tk
�r    t	jd||
ƒ �w´Y nX t||ƒ}t	jd|ƒ |j|ƒ P W nX tk
�rZ } z|jtjk�rJ‚ W Y d d }~X n& tjk
�r~   tjt	d|ƒ Y nX �q´W t|ƒdk�r˜d	S d|d k�rL|d d }d	}x"| jD ]}|j|ƒ�r¾|}P �q¾W |�sòt	jd|| ƒ d	S tj|ƒ}tj|d d�\}}}t	jd|ƒ tj|d |gƒ|d< ||d< ||d< |j|ƒ tj|d |gƒ|d< | j|d jd ƒgƒ| _ | j tjk�rœt	jd!| | j ƒ d	S d"j |ƒ| _!|d | _"|d | _#|d | _$|d | _%|d jd#ƒ| _&d$S )%Nr   )zinstance-idr   Ú )z	meta-dataz	user-datazvendor-dataznetwork-configzsystem-serial-numberr   z	meta-datazUnable to parse dmi dataFÚcmdlinez!Unable to parse command line dataz	user-datazvendor-dataznetwork-config)ÚrequiredZoptionalzUsing seeded data from %sÚseedfromZds_config_seedfromZ	ds_configc             S   s   t j| f|ŽS )N)r   Úpathprefix2dict)ZmpÚdatar   r   r   Ú_pp2d_callbackt   s    z3DataSourceNoCloud._get_data.<locals>._pp2d_callbackZfs_labelZcidatazAttempting to use data from %sz)device %s with label=%s not a valid seed.zUsing data from %sz(Failed to mount %s when looking for datar   z Seed from %s not supported by %s)ZtimeoutzUsing seeded cache data from %sr   z&%s: not claiming datasource, dsmode=%sú,znetwork-interfacesT)'r   r   Zread_dmi_dataÚload_cmdline_dataÚappendÚ_merge_new_seedÚ	Exceptionr   ZlogexcÚLOGr   r)   ÚdebugÚ
ValueErrorZds_cfgÚgetr$   Zmount_cbZwarningÚOSErrorÚerrnoÚENOENTZMountFailedErrorÚlenr   Ú
startswithZsub_dmi_varsZread_seededÚmergemanydictZ_determine_dsmoder   ZDSMODE_DISABLEDr   r   ZmetadataZuserdata_rawZvendordata_rawÚ_network_configÚ_network_eni)r   ZdefaultsÚfoundZmydataÚmdÚserialZpp2d_kwargsr   Úseededr+   r#   ZdevÚer(   Z	seedfoundÚprotoZmd_seedZudZvdr   r   r   Ú	_get_data3   sÊ    


















zDataSourceNoCloud._get_datac             C   s.   t | dƒsd | _| js(tjƒ r"dnd| _| jS )NÚ_platform_typeZlxdr   )ÚhasattrrD   r   Zis_lxd)r   r   r   r   Úplatform_typeÑ   s
    
zDataSourceNoCloud.platform_typec             C   s   t jS )z=Return unknown when 'cloud-name' key is absent from metadata.)r   ZMETADATA_UNKNOWN)r   r   r   r   Ú_get_cloud_nameÚ   s    z!DataSourceNoCloud._get_cloud_namec             C   s$   | j jdƒrd}nd}d|| j f S )z/Return the subplatform metadata source details.z/devzconfig-diskzseed-dirz%s (%s))r   r9   )r   Zsubplatform_typer   r   r   Ú_get_subplatformÞ   s    z"DataSourceNoCloud._get_subplatformc             C   s:   | j ƒ }|sd S t| d| jgƒ}t|d�}|s2d S ||kS )Nr   )Údirs)Zget_instance_idÚgetattrr   Ú_quick_read_instance_id)r   r   ZcurrentrI   Zquick_idr   r   r   Úcheck_instance_idæ   s    
z#DataSourceNoCloud.check_instance_idc             C   s(   | j d kr"| jd k	r"tj| jƒ| _ | j S )N)r;   r<   r   Zconvert_eni_data)r   r   r   r   Únetwork_configõ   s    

z DataSourceNoCloud.network_configN)Ú__name__Ú
__module__Ú__qualname__Zdsnamer   r   r$   rC   ÚpropertyrF   rG   rH   rL   rM   r   r   r   r   r      s   
 	r   c             C   s”   | d krg } d}i }t |ƒr,||kr,|| S xb| D ]Z}|d kr@q2y6tj|dgd�}tj|d ƒ}|rt||krt|| S W q2 tk
rŠ   Y q2X q2W d S )Nzinstance-idz	meta-data)r'   )r-   r   r)   Ú	load_yamlr3   )rI   Ziid_keyÚfillÚdr*   r>   r   r   r   rK   ý   s"    

rK   c             C   sˆ   dt jfdt jfg}xn|D ]f\}}t|| |ƒs0qd| kr<dS | jdƒ}|rv|jdƒr`t j| d< q~|jdƒr~t j| d< n|| d< dS W d
S )Nz
ds=nocloudzds=nocloud-netr   Tr(   úhttp://úhttps://úfile://r   F)rU   rV   )rW   r   )r   ZDSMODE_LOCALZDSMODE_NETWORKÚparse_cmdline_datar4   r9   )rS   r&   ZpairsZidstrr   r(   r   r   r   r-     s     


r-   c             C   sþ   |d krt jƒ }d| }d|  |kp.d|  |ks4dS d}x&|jƒ D ]}|j| ƒrB|jddƒ}qBW |d jdƒ}t|ƒdkrˆ|dd … }nf }dd	d
dœ}x`|D ]X}|dkr¬qžy|jddƒ\}	}
W n tk
rÜ   |}	d }
Y nX |	|krî||	 }	|
||	< qžW dS )Nz %s z %s;Fr%   ú=é   ú;zlocal-hostnamezinstance-idr(   )ÚhÚiÚsT)r   Zget_cmdlineÚsplitr9   r8   r0   )Zds_idrS   r&   ZarglineÚtokZtmpZkvpairsZs2lÚitemÚkÚvr   r   r   rX   3  s4    


rX   c             C   s�   | j ƒ }|jdi ƒ}t|d tƒs0tj|d ƒ}tj| d |gƒ|d< |jdƒrdtj|jdƒƒ|d< d|krx|d |d< d|krŒ|d |d< |S )Nz	meta-dataznetwork-configz	user-datazvendor-data)Úcopyr4   Ú
isinstanceÚdictr   rR   r:   )Zcurr@   ÚretZnewmdr   r   r   r/   [  s    
r/   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚDataSourceNoCloudNetc             C   s   t j| |||ƒ d| _d S )Núhttp://úhttps://)ri   rj   )r   r   r   )r   r   r   r   r   r   r   r   n  s    zDataSourceNoCloudNet.__init__c             C   s   dt jƒ kS )a  NoCloud requires "nocloud-net" as the way to specify
        seeding from an http(s) address. This diverges from all other
        datasources in that it does a kernel commandline match on something
        other than the datasource dsname for only DEP_NETWORK.
        znocloud-net)r   Zparse_cmdline)r   r   r   r   Ú	ds_detectr  s    zDataSourceNoCloudNet.ds_detectN)rN   rO   rP   r   rk   r   r   r   r   rh   m  s   rh   c             C   s   t j| tƒS )N)r   Zlist_from_dependsÚdatasources)Zdependsr   r   r   Úget_datasource_listƒ  s    rm   )N)N)N)r6   Zloggingr   Z	cloudinitr   r   r   Zcloudinit.netr   Z	getLoggerrN   r1   r
   r   rK   r-   rX   r/   rh   ZDEP_FILESYSTEMZDEP_NETWORKrl   rm   r   r   r   r   Ú<module>   s   
 i


(
