
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me                 @   st   d dl Z d dljjjZd dlmZmZ e j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)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j| ||| || _t | _tjtj|ddgi t	g| _
| j  | j
d | _| j
jdt| _| j
jdt| _| j
jdt| _| j
jdt| _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)selfsys_cfgr   paths r   ,/usr/lib/python3.6/DataSourceDigitalOcean.pyr       s    
zDataSourceDigitalOcean.__init__N)ci_pkl_versionreturnc                s   t  j| | j  d S )N)super	_unpickler   )r   r    )	__class__r   r   r#   4   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   8   s    z!DataSourceDigitalOcean._deprecatec             C   s   t j S )N)	do_helperZread_sysinfo)r   r   r   r   _get_sysinfo?   s    z#DataSourceDigitalOcean._get_sysinfoc             C   s   | j  \}}|sdS tjd| d }| jr6tj| j}tj| j| j	| j
| jd}|| _|jd|| jd< |jd|| jd< |jd| jd< |jd	| jd
< |jdd| jd< |jdd | _|jdd | _|rt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	   metadata_fullr   r   Zvendordata_rawZuserdata_rawZdel_ipv4_link_local)r   Zis_dor'   Z
ipv4LL_nicZmdr   r   r   	_get_dataB   s.    

z DataSourceDigitalOcean._get_datac             C   s   t j| j dS )Nzsystem-serial-number)r   Zinstance_id_matches_system_uuidZget_instance_id)r   r   r   r   r   check_instance_idd   s    z(DataSourceDigitalOcean.check_instance_idc             C   sP   | j r| j S | jjd}tj| |s.td| jd d }tj||| _ | 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.
        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(   r/   r   r   r   network_configi   s    

z%DataSourceDigitalOcean.network_config)__name__
__module____qualname__Zdsnamer   intr#   r   r&   r-   r.   propertyr2   __classcell__r   r   )r$   r   r      s   "r   c             C   s   t j| tS )N)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   Z	getLoggerr3   r*   r   r   r   r   r   r   r   ZDEP_FILESYSTEMr9   r:   r   r   r   r   <module>	   s   
e