Ë
    x[ht  ã                   óÄ   — 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ej                  «      ZeZeej$                  ffgZd„ Zy)	é    N)Ú	b64decode)ÚdmiÚsources)ÚDataSourceHostname)ÚSERIAL_PORTÚCepkoc                   óJ   — e Zd ZdZdZd„ Zed„ «       Zd„ Zd„ Z	dd„Z
d„ Zd	„ Zy
)Ú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
    Ú
CloudSigmac                 ót   — t        «       | _        d| _        t        j                  j                  | |||«       y )NÚ )r   ÚcepkoÚssh_public_keyr   Ú
DataSourceÚ__init__)ÚselfÚsys_cfgÚdistroÚpathss       úH/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceCloudSigma.pyr   zDataSourceCloudSigma.__init__   s-   € Ü“WˆŒ
Ø ˆÔÜ×Ñ×#Ñ# D¨'°6¸5ÕAó    c                  óÖ   — t         j                  d«       t        j                  d«      } | st         j                  d«       yt         j                  d| «       d| j	                  «       v 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 %sÚ
cloudsigma)ÚLOGÚdebugr   Úread_dmi_dataÚlower)Úsys_product_names    r   Ú	ds_detectzDataSourceCloudSigma.ds_detect!   s[   € ô 	�	‰	ÐDÔEÜ×,Ñ,Ð-BÓCÐÙÜ�I‰IÐEÔFØÜ�	‰	Ð-Ð/?Ô@ØÐ/×5Ñ5Ó7Ð7Ð7r   c                 ó(  — d}	 | j                   j                  «       j                  }|d   }| j                  |j                  d«      g«      | _        |t        j                  k(  ry|j                  dd«      j                  d«      }|j                  d	d«      | _        d	|v rt        | j                  «      | _        d
|j                  di «      v r|d   d
   | _        || _        |d   | _        y# t        $ r t        j                  d«       Y yw xY w)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Ú	cloudinitÚvendor_datar   T)r   ÚallÚresultÚ	Exceptionr   r   Ú_determine_dsmodeÚgetÚdsmoder   ÚDSMODE_DISABLEDÚsplitÚuserdata_rawr   Úvendordata_rawÚmetadatar   )r   r+   Úserver_contextÚserver_metar"   s        r   Ú	_get_datazDataSourceCloudSigma._get_data0   s  € ð
 ˆð	Ø!ŸZ™ZŸ^™^Ó-×4Ñ4ˆNØ(¨Ñ0ˆKð ×,Ñ,Ø�_‰_Ð/Ó0Ð1ó
ˆŒð ”W×,Ñ,Ò,Øà#Ÿ™¨¸Ó<×BÑBÀ3ÓGˆØ'ŸO™OÐ,AÀ2ÓFˆÔØ  MÑ1Ü )¨$×*;Ñ*;Ó <ˆDÔØ˜.×,Ñ,¨]¸BÓ?Ñ?Ø"0°Ñ"?ÀÑ"LˆDÔà&ˆŒØ)Ð*:Ñ;ˆÔàøô- ò 	ô �I‰IÐCÔDÙð		ús   „)C0 Ã0DÄDc                 ó   — dt         z  S )z/Return the subplatform metadata source details.z
cepko (%s))r   ©r   s    r   Ú_get_subplatformz%DataSourceCloudSigma._get_subplatformR   s   € àœkÑ)Ð)r   c                 óÈ   — 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Úmatchr0   r-   r   )r   ÚfqdnÚ
resolve_ipÚmetadata_onlyÚrets        r   Úget_hostnamez!DataSourceCloudSigma.get_hostnameV   s\   € ô
 �8‰8Ð*¨D¯M©M¸&Ñ,AÔBØ—-‘- Ñ'¨¨Ð,‰Cà—-‘- Ñ'×-Ñ-¨cÓ2°1Ñ5ˆCÜ! # uÓ-Ð-r   c                 ó   — | j                   gS )N)r   r5   s    r   Úget_public_ssh_keysz(DataSourceCloudSigma.get_public_ssh_keysa   s   € Ø×#Ñ#Ð$Ð$r   c                 ó    — | j                   d   S )Nr:   )r0   r5   s    r   Úget_instance_idz$DataSourceCloudSigma.get_instance_idd   s   € Ø�}‰}˜VÑ$Ð$r   N)FFF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Údsnamer   Ústaticmethodr   r3   r6   rB   rD   rF   © r   r   r
   r
      sB   „ ñð €FòBð
 ñ8ó ð8ò òD*ó	.ò%ó%r   r
   c                 ó6   — t        j                  | t        «      S )zK
    Return a list of data sources that match this set of dependencies
    )r   Úlist_from_dependsÚdatasources)Údependss    r   Úget_datasource_listrR   r   s   € ô ×$Ñ$ W¬kÓ:Ð:r   )Úloggingr<   Úbase64r   r$   r   r   Úcloudinit.sourcesr   Ú$cloudinit.sources.helpers.cloudsigmar   r   Ú	getLoggerrG   r   r   r
   ÚDataSourceCloudSigmaNetÚDEP_FILESYSTEMrP   rR   rM   r   r   ú<module>rZ      sg   ðó Û 	Ý ç "Ý 0ß Cà€g×Ñ˜Ó!€ôS%˜7×-Ñ-ô S%ðn /Ð ð
 ˜G×2Ñ2Ð4Ð5ð€ó
;r   