o
    f                     @   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 )zConfigure 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