
    }f                         d dl Z d dlmc mc m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	ej                         Zeej$                  ffgZd
 Zy)    N)sourcesutilmetadata_urlz'http://169.254.169.254/metadata/v1.json      Tc                   Z     e Zd ZdZd Zdeddf fdZd Zd Zd	 Z	d
 Z
ed        Z xZS )DataSourceDigitalOceanDigitalOceanc                 n   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 | _        y )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   pathss       J/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceDigitalOcean.pyr   zDataSourceDigitalOcean.__init__    s    ##D'65A(($$lN;R "	
 	 $N ;{{y*={{y*=mD++//,F#!    ci_pkl_versionreturnNc                 D    t         |   |       | j                          y N)super	_unpickler   )r#   r(   	__class__s     r&   r-   z DataSourceDigitalOcean._unpickle5   s    .)r'   c                 4    t        j                  ddd       y )Nr	   z23.2z.Deprecated in favour of DataSourceConfigDrive.)
deprecateddeprecated_versionextra_message)r   	deprecater#   s    r&   r   z!DataSourceDigitalOcean._deprecate9   s    /%J	
r'   c                 *    t        j                         S r+   )	do_helperread_sysinfor4   s    r&   _get_sysinfoz#DataSourceDigitalOcean._get_sysinfo@   s    %%''r'   c                    | j                         \  }}|syt        j                  d|       d }| j                  rt	        j
                  | j                        }t	        j                  | j                  | j                  | j                  | j                        }|| _        |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       | _        |r t	        j"                  | j                  |       y)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)r8   LOGinfor   r6   assign_ipv4_link_localr   read_metadatar   r   r   r   r"   r   r   vendordata_rawuserdata_rawdel_ipv4_link_local)r#   is_dor;   
ipv4LL_nicmds        r&   	_get_dataz DataSourceDigitalOcean._get_dataC   s?   "//1
 9:F
>>"99$++FJ$$!!LLLL	
  ')vvlJ'Gm$*,&&Z*H&'&(ff\&:l#')vvm'<m$-/VVHi-H)* ff]D9FF;5))$++zBr'   c                 J    t        j                  | j                         d      S )Nzsystem-serial-number)r   instance_id_matches_system_uuidget_instance_id)r#   r$   s     r&   check_instance_idz(DataSourceDigitalOcean.check_instance_ide   s$    66  "$:
 	
r'   c                    | 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....dnsnameservers)	r!   r   r   rD   debugRuntimeErrorr"   r6   convert_network_configuration)r#   r=   rU   s      r&   network_configz%DataSourceDigitalOcean.network_configj   s     ''']]&&|4
		*HII((/>(FF 
 ###r'   )__name__
__module____qualname__dsnamer   intr-   r   r8   rN   rR   propertyrY   __classcell__)r.   s   @r&   r	   r	      sI    F"*  
( D

 $ $r'   r	   c                 6    t        j                  | t              S r+   )r   list_from_dependsdatasources)dependss    r&   get_datasource_listre      s    $$Wk::r'   )logging&cloudinit.sources.helpers.digitaloceanr   helpersdigitaloceanr6   	cloudinitr   	getLoggerrZ   rD   r   r   r   r    r   r   r	   DEP_FILESYSTEMrc   re    r'   r&   <module>rn      s     : : #g! =  

a$W// a$L g4467;r'   