3 \me(#@s^ddlZddlmZmZmZmZmZmZddlm Z ej e Z dZ dZdZdZdZd ZGd d d ejZeejejffgZd d Ze eeeefddZe eeeefddZe dkrZddlZejddZejddde dejdddedejddededejd ded!edejd"d#ed$edej Z!ee!j"e!j#e!j$e!j%e!j&d%Z'e(ej)e'dS)&N) atomic_helperdmihelperssources url_helperutil)ec2zhttp://169.254.169.254z1.0i ExoscalecsXeZdZdZdZfddZddZddZd d Zd d Z d dZ e ddZ Z S)DataSourceExoscaler xcs|tt|j|||tjd|jjdt|_|jjdt |_ t |jjdt |_ |jjdt|_|jjdt|_i|_dS)Nz$Initializing the Exoscale datasource metadata_url api_versionpassword_server_porttimeoutretries)superr __init__LOGdebugZds_cfgget METADATA_URLr API_VERSIONrintPASSWORD_SERVER_PORTr URL_TIMEOUT url_timeout URL_RETRIES url_retries extra_config)selfZsys_cfgZdistropaths) __class__(/usr/lib/python3.6/DataSourceExoscale.pyrs zDataSourceExoscale.__init__cCs8d}|jjd}tj|}|jd|dr4tjddS)zdStj|dddi||d|S) zObtain the VM's password if set. Once fetched the password is marked saved. Future calls to this method may return empty string or 'saved_password'.z {}:{}/{}/NZ DomU_RequestZsend_my_password)Z ssl_detailsZheadersrrzutf-8saved_password)rBrC)r)rZread_file_or_urlcontentsdecode)rrrrrZ password_urlZresponser4r$r$r% get_passwords$   rFc Csi}||d<y0tj||||d|d<tj||||d|d<Wn0tk rl}ztjtd||iSd}~XnXyt|||||d|d<Wn4tk r}ztjtd |||WYdd}~XnX|S) z8Query the metadata server and return the retrieved data.Z_metadata_api_version)rrz user-dataz meta-dataz(failed reading from metadata url %s (%s)N)rrrrrr4z2failed to read from password server url %s:%s (%s))rZget_instance_userdataZget_instance_metadata ExceptionrZlogexcrrF)rrrrrZcrawled_metadataer$r$r%r2s4 r2__main__zQuery Exoscale Metadata) descriptionz --endpointZURLz The url of the metadata service.)metavarhelpdefaultz --versionVERSIONz.The version of the metadata endpoint to query.z --retriesZNUMz,The number of retries querying the endpoint.)rKtyperLrMz --timeoutz.The time in seconds to wait before timing out.z--password-portZPORTz/The port on which the password endpoint listens)rrrrr)*ZloggingZ cloudinitrrrrrrZcloudinit.sources.helpersrZ getLoggerr;rrrrrrr9Z DataSourcer ZDEP_FILESYSTEMZ DEP_NETWORKr@rArFr2argparseArgumentParserparser add_argumentr parse_argsargsZendpointversionZ password_portrrr5printZ json_dumpsr$r$r$r%s|    " &