
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼meÝ  ã               @   s´   d dl Z d dlmZ d dlmZmZ d dlmZmZ d dl	m
Z d dl	mZ e jeƒZdZG dd	„ d	ej
ƒZd
d„ Zdd„ ZG dd„ deƒZeejffeejejffgZdd„ ZdS )é    N)ÚList)ÚdmiÚsources)Ú
EventScopeÚ	EventType)ÚDataSourceEc2)ÚDataSourceHostnamezAlibaba Cloud ECSc                   s^   e Zd ZU dZdgZdZg Zee e	dd„ ƒZ
‡ fdd„Zdd	d
„Zdd„ Zdd„ Z‡  ZS )ÚDataSourceAliYunZAliYunzhttp://100.100.100.200z
2016-01-01c             C   s   dS )NzX-aliyun-ecs-metadata-token© )Úselfr
   r
   ú&/usr/lib/python3.6/DataSourceAliYun.pyÚimdsv2_token_put_header   s    z(DataSourceAliYun.imdsv2_token_put_headerc                s,   t t| ƒj|||ƒ | jtj jtjƒ d S )N)	Úsuperr	   Ú__init__Zdefault_update_eventsr   ZNETWORKÚaddr   ZBOOT)r   Zsys_cfgZdistroÚpaths)Ú	__class__r
   r   r      s    zDataSourceAliYun.__init__Fc             C   s*   | j jdƒ}d}|d kr d}d}t||ƒS )NÚhostnameFzlocalhost.localdomainT)ÚmetadataÚgetr   )r   ZfqdnZ
resolve_ipZmetadata_onlyr   Z
is_defaultr
   r
   r   Úget_hostname"   s    zDataSourceAliYun.get_hostnamec             C   s   t | jjdi ƒƒS )Nzpublic-keys)Úparse_public_keysr   r   )r   r
   r
   r   Úget_public_ssh_keys*   s    z$DataSourceAliYun.get_public_ssh_keysc             C   s   t ƒ rtjjS tjjS d S )N)Ú
_is_aliyunÚEC2Z
CloudNamesZALIYUNZNO_EC2_METADATA)r   r
   r
   r   Ú_get_cloud_name-   s    z DataSourceAliYun._get_cloud_name)FFF)Ú__name__Ú
__module__Ú__qualname__ZdsnameZmetadata_urlsZmin_metadata_versionZextended_metadata_versionsr   ÚstrÚpropertyr   r   r   r   r   Ú__classcell__r
   r
   )r   r   r	      s   

r	   c               C   s   t jdƒtkS )Nzsystem-product-name)r   Zread_dmi_dataÚALIYUN_PRODUCTr
   r
   r
   r   r   4   s    r   c             C   s’   g }xˆ| j ƒ D ]|\}}t|tƒr0|j|jƒ ƒ qt|tƒrF|j|ƒ qt|tƒr|jdg ƒ}t|tƒrv|j|jƒ ƒ qt|tƒr|j|ƒ qW |S )Nzopenssh-key)	ÚitemsÚ
isinstancer   ÚappendÚstripÚlistÚextendÚdictr   )Zpublic_keysÚkeysZ_key_idZkey_bodyÚkeyr
   r
   r   r   8   s    




r   c               @   s   e Zd ZdZdZdS )ÚDataSourceAliYunLocalay  Datasource run at init-local which sets up network to query metadata.

    In init-local, no network is available. This subclass sets up minimal
    networking with dhclient on a viable nic so that it can talk to the
    metadata service. If the metadata service provides network configuration
    then render the network configuration for that instance based on metadata.
    TN)r   r   r   Ú__doc__Zperform_dhcp_setupr
   r
   r
   r   r,   H   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typingr   Z	cloudinitr   r   Zcloudinit.eventr   r   Zcloudinit.sourcesr   r   r   Z	getLoggerr   ZLOGr"   r	   r   r   r,   ZDEP_FILESYSTEMZDEP_NETWORKr.   r/   r
   r
   r
   r   Ú<module>   s   
$
