
    x[ht                         S SK r S SKrS SKJr  S SKJrJr  S SKJr  S SK	J
r
Jr  \ R                  " \5      r " S S\R                  5      r\r\\R$                  44/rS rg)	    N)	b64decode)dmisources)DataSourceHostname)SERIAL_PORTCepkoc                   T    \ rS rSrSrSrS r\S 5       rS r	S r
SS jrS	 rS
 rSrg)DataSourceCloudSigma   z
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                 p    [        5       U l        SU l        [        R                  R                  XX#5        g )N )r   cepkossh_public_keyr   
DataSource__init__)selfsys_cfgdistropathss       H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceCloudSigma.pyr   DataSourceCloudSigma.__init__   s)    W
 ##D6A    c                      [         R                  S5        [        R                  " S5      n U (       d  [         R                  S5        g[         R                  SU 5        SU R	                  5       ;   $ )zg
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_detectDataSourceCloudSigma.ds_detect!   s[     			DE,,-BCIIEF		-/?@/55777r   c                 2   Sn U R                   R                  5       R                  nUS   nU R                  UR                  S5      /5      U l        U[        R                  :X  a  gUR                  SS5      R                  S5      nUR                  S	S5      U l        S	U;   a  [        U R                  5      U l        S
UR                  S0 5      ;   a  US   S
   U l        X l        US   U l        g! [         a    [        R                  S5         gf = f)zR
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_dataDataSourceCloudSigma._get_data0   s   
 	!ZZ^^-44N(0K ,,__/01
 W,,,#<BB3G'OO,A2F M1 )$*;*; <D.,,]B??"0"?"LD&)*:;-  	 IICD		s   )C4 4DDc                     S[         -  $ )z/Return the subplatform metadata source details.z
cepko (%s))r   r   s    r   _get_subplatform%DataSourceCloudSigma._get_subplatformR   s    k))r   c                     [         R                  " SU R                  S   5      (       a  U R                  S   SS nO!U R                  S   R                  S5      S   n[	        US5      $ )	zn
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matchr3   r0   r   )r   fqdn
resolve_ipmetadata_onlyrets        r   get_hostname!DataSourceCloudSigma.get_hostnameV   s_    
 88*DMM&,ABB--',C--'--c215C!#u--r   c                     U R                   /$ )N)r   r9   s    r   get_public_ssh_keys(DataSourceCloudSigma.get_public_ssh_keysa   s    ##$$r   c                      U R                   S   $ )Nr?   )r3   r9   s    r   get_instance_id$DataSourceCloudSigma.get_instance_idd   s    }}V$$r   )r   r.   r3   r   r1   r2   N)FFF)__name__
__module____qualname____firstlineno____doc__dsnamer   staticmethodr!   r6   r:   rG   rJ   rM   __static_attributes__ r   r   r
   r
      sB     FB
 8 8 D*	.%%r   r
   c                 8    [         R                  " U [        5      $ )zC
Return a list of data sources that match this set of dependencies
)r   list_from_dependsdatasources)dependss    r   get_datasource_listr\   r   s     $$Wk::r   )loggingrA   base64r   r'   r   r   cloudinit.sourcesr   $cloudinit.sources.helpers.cloudsigmar   r   	getLoggerrO   r   r   r
   DataSourceCloudSigmaNetDEP_FILESYSTEMrZ   r\   rW   r   r   <module>rd      se     	  " 0 C!S%7-- S%n / 
 G2245
;r   