U
    Ó‡gÌ  ã                   @   s‚   d dl Z d dlm  m  mZ d dlmZmZmZ e  	e
¡ZddiZdZdZdZdZG dd	„ d	ejƒZeejffgZd
d„ ZdS )é    N)Ú	lifecycleÚsourcesÚutilÚmetadata_urlz'http://169.254.169.254/metadata/v1.jsoné   é   Tc                       s\   e Zd ZdZdd„ Zeddœ‡ fdd„Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
edd„ ƒZ‡  ZS )ÚDataSourceDigitalOceanÚDigitalOceanc                 C   s¢   t j | |||¡ || _tƒ | _t t |ddgi ¡t	g¡| _
|  ¡  | j
d | _| j
 dt¡| _| j
 dt¡| _| j
 dt¡| _| j
 dt¡| _d | _d | _d S )NZ
datasourcer	   r   ÚretriesÚtimeoutÚ	use_ip4LLÚ
wait_retry)r   Ú
DataSourceÚ__init__ÚdistroÚdictÚmetadatar   ZmergemanydictZget_cfg_by_pathÚBUILTIN_DS_CONFIGZds_cfgÚ
_deprecateÚmetadata_addressÚgetÚ
MD_RETRIESr
   Ú
MD_TIMEOUTr   ÚMD_USE_IPV4LLr   ÚMD_WAIT_RETRYr   Ú_network_configÚmetadata_full)ÚselfÚsys_cfgr   Úpaths© r    úJ/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceDigitalOcean.pyr       s(      ÿüÿzDataSourceDigitalOcean.__init__N)Úci_pkl_versionÚreturnc                    s   t ƒ  |¡ |  ¡  d S ©N)ÚsuperÚ	_unpickler   )r   r"   ©Ú	__class__r    r!   r&   5   s    z DataSourceDigitalOcean._unpicklec                 C   s   t jdddd d S )Nr   z23.2z.Deprecated in favour of DataSourceConfigDrive.)Z
deprecatedZdeprecated_versionZextra_message)r   Z	deprecate©r   r    r    r!   r   9   s
    ýz!DataSourceDigitalOcean._deprecatec                 C   s   t  ¡ S r$   )Ú	do_helperZread_sysinfor)   r    r    r!   Ú_get_sysinfo@   s    z#DataSourceDigitalOcean._get_sysinfoc                 C   sÞ   |   ¡ \}}|sdS t d|¡ d }| jr6t | j¡}tj| j| j	| j
| jd}|| _| d|¡| jd< | d|¡| jd< | d¡| jd< | d	¡| jd
< | dd¡| jd< | dd ¡| _| dd ¡| _|rÚt | j|¡ dS )NFz&Running on DigitalOcean. droplet_id=%s)r   Zsec_betweenr
   Ú
droplet_idzinstance-idZhostnamezlocal-hostnameÚ
interfacesZpublic_keyszpublic-keysZregionÚdefaultZavailability_zoneZvendor_dataZ	user_dataT)r+   ÚLOGÚinfor   r*   Zassign_ipv4_link_localr   Zread_metadatar   r   r   r
   r   r   r   Zvendordata_rawZuserdata_rawZdel_ipv4_link_local)r   Zis_dor,   Z
ipv4LL_nicZmdr    r    r!   Ú	_get_dataC   s0    üz DataSourceDigitalOcean._get_datac                 C   s   t  |  ¡ d¡S )Nzsystem-serial-number)r   Zinstance_id_matches_system_uuidZget_instance_id)r   r   r    r    r!   Úcheck_instance_ide   s     ÿz(DataSourceDigitalOcean.check_instance_idc                 C   sP   | j r| j S | j d¡}t |¡ |s.tdƒ‚| jd d }t ||¡| _ | j S )zŸConfigure the networking. This needs to be done each boot, since
        the IP information may have changed due to snapshot and/or
        migration.
        r-   z'Unable to get meta-data from server....ZdnsÚnameservers)	r   r   r   r/   ÚdebugÚRuntimeErrorr   r*   Zconvert_network_configuration)r   r-   r3   r    r    r!   Únetwork_configj   s    
 ÿz%DataSourceDigitalOcean.network_config)Ú__name__Ú
__module__Ú__qualname__Zdsnamer   Úintr&   r   r+   r1   r2   Úpropertyr6   Ú__classcell__r    r    r'   r!   r      s   "r   c                 C   s   t  | t¡S r$   )r   Zlist_from_dependsÚdatasources)Zdependsr    r    r!   Úget_datasource_list‡   s    r>   )ZloggingZ&cloudinit.sources.helpers.digitaloceanr   ZhelpersZdigitaloceanr*   Z	cloudinitr   r   Z	getLoggerr7   r/   r   r   r   r   r   r   r   ZDEP_FILESYSTEMr=   r>   r    r    r    r!   Ú<module>	   s   
 ÿf
ÿ