
"·T`×  ã               @   s¶   d  d l  m Z d  d l  m Z d  d l  m Z d  d l j j j Z e j	 e
 ƒ Z d d i Z d Z d Z d Z d	 Z Gd
 d „  d e j ƒ Z e e j f f g Z d d „  Z d S)é    )Úlog)Úsources)ÚutilNÚmetadata_urlz'http://169.254.169.254/metadata/v1.jsoné   é   Tc               @   sX   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d d	 „  Z e d
 d „  ƒ Z	 d S)ÚDataSourceDigitalOceanÚDigitalOceanc             C   sØ   t  j j |  | | | ƒ | |  _ t ƒ  |  _ t j t j | d d g i  ƒ t	 g ƒ |  _
 |  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Úmetadata_addressÚgetÚ
MD_RETRIESr
   Ú
MD_TIMEOUTr   ÚMD_USE_IPV4LLr   ÚMD_WAIT_RETRYr   Ú_network_config)ÚselfÚsys_cfgr   Úpaths© r   úJ/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceDigitalOcean.pyr   !   s    	zDataSourceDigitalOcean.__init__c             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 St j d | ƒ d  } |  j rM t j |  j ƒ } t j |  j d |  j	 d |  j
 d |  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  ƒ |  _ | r7t j | ƒ d S)NFz'Running on digital ocean. droplet_id=%sr   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_data2   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_idQ   s    z(DataSourceDigitalOcean.check_instance_idc             C   sn   |  j  r |  j  S|  j j d ƒ } t j | ƒ | sA t d ƒ ‚ |  j d d } t j | | ƒ |  _  |  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Ú	Exceptionr'   r    Zconvert_network_configuration)r   r#   r*   r   r   r   Únetwork_configU   s    	z%DataSourceDigitalOcean.network_configN)
Ú__name__Ú
__module__Ú__qualname__Zdsnamer   r!   r(   r)   Úpropertyr-   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_listq   s    r3   )Z	cloudinitr   Zloggingr   r   Z&cloudinit.sources.helpers.digitaloceanZhelpersZdigitaloceanr    Z	getLoggerr.   r%   r   r   r   r   r   r   r   ZDEP_FILESYSTEMr2   r3   r   r   r   r   Ú<module>	   s   O