o
    x[hÌ  ã                   @   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deddf‡ 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 )NÚ
datasourcer	   r   ÚretriesÚtimeoutÚ	use_ip4LLÚ
wait_retry)r   Ú
DataSourceÚ__init__ÚdistroÚdictÚmetadatar   ÚmergemanydictÚget_cfg_by_pathÚBUILTIN_DS_CONFIGÚ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__Úci_pkl_versionÚreturnNc                    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.)Ú
deprecatedÚdeprecated_versionÚextra_message)r   Ú	deprecate©r!   r$   r$   r%   r   9   s
   
ýz!DataSourceDigitalOcean._deprecatec                 C   s   t  ¡ S r(   )Ú	do_helperÚread_sysinfor1   r$   r$   r%   Ú_get_sysinfo@   s   z#DataSourceDigitalOcean._get_sysinfoc                 C   sÞ   |   ¡ \}}|s
dS t d|¡ d }| jrt | 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 ¡| _|rmt | j|¡ dS )NFz&Running on DigitalOcean. droplet_id=%s)r   Úsec_betweenr   Ú
droplet_idzinstance-idÚhostnamezlocal-hostnameÚ
interfacesÚpublic_keyszpublic-keysÚregionÚdefaultÚavailability_zoneÚvendor_dataÚ	user_dataT)r4   ÚLOGÚinfor   r2   Úassign_ipv4_link_localr   Úread_metadatar   r   r   r   r    r   r   Úvendordata_rawÚuserdata_rawÚdel_ipv4_link_local)r!   Úis_dor6   Ú
ipv4LL_nicÚmdr$   r$   r%   Ú	_get_dataC   s0   üz DataSourceDigitalOcean._get_datac                 C   s   t  |  ¡ d¡S )Nzsystem-serial-number)r   Úinstance_id_matches_system_uuidÚ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.
        r8   z'Unable to get meta-data from server....ÚdnsÚnameservers)	r   r   r   r?   ÚdebugÚRuntimeErrorr    r2   Úconvert_network_configuration)r!   r8   rN   r$   r$   r%   Únetwork_configj   s   
ÿz%DataSourceDigitalOcean.network_config)Ú__name__Ú
__module__Ú__qualname__Údsnamer   Úintr*   r   r4   rI   rL   ÚpropertyrR   Ú__classcell__r$   r$   r+   r%   r      s    "r   c                 C   s   t  | t¡S r(   )r   Úlist_from_dependsÚdatasources)Údependsr$   r$   r%   Úget_datasource_list‡   s   r]   )ÚloggingÚ&cloudinit.sources.helpers.digitaloceanr   ÚhelpersÚdigitaloceanr2   Ú	cloudinitr   r   Ú	getLoggerrS   r?   r   r   r   r   r   r   r   ÚDEP_FILESYSTEMr[   r]   r$   r$   r$   r%   Ú<module>   s   
ÿ
fÿ