
    f8                     $   d dl Z 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	ej                        Zd
 Zd Z G d de      Zeej,                  ffeej,                  ej.                  ffgZd Zy)    N)List)dmisources)
EventScope	EventType)DataSourceEc2)DataSourceHostnamezAlibaba Cloud ECSc                   f     e Zd ZU dZdgZdZg Zee   e	d<   e
d        Z fdZd
dZd Zd	 Z xZS )DataSourceAliYunAliYunzhttp://100.100.100.200z
2016-01-01extended_metadata_versionsc                      y)NzX-aliyun-ecs-metadata-token selfs    D/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceAliYun.pyimdsv2_token_put_headerz(DataSourceAliYun.imdsv2_token_put_header   s    ,    c                     t         t        |   |||       t        j                  | j
                        | _        | j
                  t        j                     j                  t        j                         y N)superr   __init__copydeepcopydefault_update_eventsr   NETWORKaddr   BOOT)r   sys_cfgdistropaths	__class__s       r   r   zDataSourceAliYun.__init__   sQ    .wF%)]]43M3M%N""":#5#56::9>>Jr   c                 `    | j                   j                  d      }d}|d}d}t        ||      S )NhostnameFzlocalhost.localdomainT)metadatagetr	   )r   fqdn
resolve_ipmetadata_onlyr$   
is_defaults         r   get_hostnamezDataSourceAliYun.get_hostname$   s8    ==$$Z0
.HJ!(J77r   c                 L    t        | j                  j                  di             S )Nzpublic-keys)parse_public_keysr%   r&   r   s    r   get_public_ssh_keysz$DataSourceAliYun.get_public_ssh_keys,   s     !2!2="!EFFr   c                 ~    t               rt        j                  j                  S t        j                  j                  S r   )
_is_aliyunEC2
CloudNamesALIYUNNO_EC2_METADATAr   s    r   _get_cloud_namez DataSourceAliYun._get_cloud_name/   s'    <>>(((>>111r   )FFF)__name__
__module____qualname__dsnamemetadata_urlsmin_metadata_versionr   r   str__annotations__propertyr   r   r+   r.   r5   __classcell__)r"   s   @r   r   r      sQ    F-.M (,.S	. - -K
8G2r   r   c                  :    t        j                  d      t        k(  S )Nzsystem-product-name)r   read_dmi_dataALIYUN_PRODUCTr   r   r   r0   r0   6   s    23~EEr   c                    g }| j                         D ]  \  }}t        |t              r |j                  |j	                                6t        |t
              r|j                  |       Xt        |t              si|j                  dg       }t        |t              r |j                  |j	                                t        |t
              s|j                  |        |S )Nzopenssh-key)	items
isinstancer<   appendstriplistextenddictr&   )public_keyskeys_key_idkey_bodykeys        r   r-   r-   :   s    D(..0 
!h$KK()$'KK!$',,}b1C#s#CIIK(C&C 
! Kr   c                       e Zd ZdZdZy)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)r6   r7   r8   __doc__perform_dhcp_setupr   r   r   rQ   rQ   J   s     r   rQ   c                 6    t        j                  | t              S r   )r   list_from_dependsdatasources)dependss    r   get_datasource_listrX   ]   s    $$Wk::r   )r   loggingtypingr   	cloudinitr   r   cloudinit.eventr   r   cloudinit.sourcesr   r1   r	   	getLoggerr6   LOGrB   r   r0   r-   rQ   DEP_FILESYSTEMDEP_NETWORKrV   rX   r   r   r   <module>rb      s       " 1 2 0g!$"2s(( "2JF 	, 	 W3356..0C0CDE;r   