ó
    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ˆŒ
Ø ˆÔÜ×Ñ×#Ñ# D°6Õ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ÐÞÜ�I‰IÐ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  € ð
 ˆð	Ø!Ÿ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   „)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_   € ô
 �8Š8Ð*¨D¯M©M¸&Ñ,A×BÑBØ—-‘- Ñ'¨¨Ð,‰Cà—-‘- Ñ'×-Ñ-¨cÓ2°1Ñ5ˆCÜ! # 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   € ô ×$Ò$ W¬kÓ:Ð: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   