509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼met  ã               @   s‚   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
mZ e jeƒZG dd„ dejƒZeZeejffgZdd	„ ZdS )
é    N)Ú	b64decode)ÚdmiÚsources)ÚDataSourceHostname)ÚSERIAL_PORTÚCepkoc               @   sR   e Zd ZdZdZdd„ Zedd„ ƒZdd„ Zd	d
„ Z	ddd„Z
dd„ Zdd„ ZdS )ÚDataSourceCloudSigmazÍ
    Uses cepko in order to gather the server context from the VM.

    For more information about CloudSigma's Server Context:
    http://cloudsigma-docs.readthedocs.org/en/latest/server_context.html
    Z
CloudSigmac             C   s$   t ƒ | _d| _tjj| |||ƒ d S )NÚ )r   ÚcepkoÚssh_public_keyr   Ú
DataSourceÚ__init__)ÚselfZsys_cfgZdistroÚpaths© r   ú*/usr/lib/python3.6/DataSourceCloudSigma.pyr      s    zDataSourceCloudSigma.__init__c              C   s>   t jdƒ tjdƒ} | s&t jdƒ dS t jd| ƒ d| jƒ kS )z
        Uses dmi data to detect if this instance of cloud-init is running
        in the CloudSigma's infrastructure.
        z0determining hypervisor product name via dmi datazsystem-product-namez-system-product-name not available in dmi dataFzdetected hypervisor as %sZ
cloudsigma)ÚLOGÚdebugr   Zread_dmi_dataÚlower)Zsys_product_namer   r   r   Ú	ds_detect!   s    


zDataSourceCloudSigma.ds_detectc             C   sÄ   d}y| j jƒ j}|d }W n tk
r:   tjdƒ dS X | j|jdƒgƒ| _|t	j
kr^dS |jddƒjdƒ}|jd	dƒ| _d	|kr’t| jƒ| _d
|jdi ƒkr°|d d
 | _|| _|d | _dS )zj
        Metadata is the whole server context and /meta/cloud-config is used
        as userdata.
        NÚmetaz+CloudSigma: Unable to read from serial portFzcloudinit-dsmodeÚbase64_fieldsr	   ú,zcloudinit-user-dataÚ	cloudinitZvendor_datar   T)r
   ÚallÚresultÚ	Exceptionr   r   Z_determine_dsmodeÚgetÚdsmoder   ZDSMODE_DISABLEDÚsplitZuserdata_rawr   Zvendordata_rawÚmetadatar   )r   r   Zserver_contextZserver_metar   r   r   r   Ú	_get_data0   s(    


zDataSourceCloudSigma._get_datac             C   s   dt  S )z/Return the subplatform metadata source details.z
cepko (%s))r   )r   r   r   r   Ú_get_subplatformR   s    z%DataSourceCloudSigma._get_subplatformFc             C   sD   t jd| jd ƒr&| jd dd… }n| jd jdƒd }t|dƒS )	z†
        Cleans up and uses the server's name if the latter is set. Otherwise
        the first part from uuid is being used.
        z^[A-Za-z0-9 -_\.]+$ÚnameNé=   Úuuidú-r   F)ÚreÚmatchr    r   r   )r   ZfqdnZ
resolve_ipZmetadata_onlyÚretr   r   r   Úget_hostnameV   s    z!DataSourceCloudSigma.get_hostnamec             C   s   | j gS )N)r   )r   r   r   r   Úget_public_ssh_keysa   s    z(DataSourceCloudSigma.get_public_ssh_keysc             C   s
   | j d S )Nr%   )r    )r   r   r   r   Úget_instance_idd   s    z$DataSourceCloudSigma.get_instance_idN)FFF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zdsnamer   Ústaticmethodr   r!   r"   r*   r+   r,   r   r   r   r   r      s   "
r   c             C   s   t j| tƒS )zK
    Return a list of data sources that match this set of dependencies
    )r   Zlist_from_dependsÚdatasources)Zdependsr   r   r   Úget_datasource_listr   s    r3   )Zloggingr'   Úbase64r   r   r   r   Zcloudinit.sourcesr   Z$cloudinit.sources.helpers.cloudsigmar   r   Z	getLoggerr-   r   r   r   ZDataSourceCloudSigmaNetZDEP_FILESYSTEMr2   r3   r   r   r   r   Ú<module>   s   
W