f,8ddlZddlZddlZddlmZddlmZmZmZddl m Z ddl m Z m Z ddl mZddl mZddlmZdd lmZej*eZGd d ZGd d e j2ZdZdZdZee j<e j>ffgZ dZ!y)N)suppress)gaierror getaddrinfo inet_ntoa)pack)sourcessubp) url_helper)util)dhcp)ec2c"eZdZdZdZdZdZy)CloudStackPasswordServerClienta Implements password fetching from the CloudStack password server. http://cloudstack-administration.readthedocs.org/ en/latest/templates.html#adding-password-management-to-your-templates has documentation about the system. This implementation is following that found at https://github.com/shankerbalan/cloudstack-scripts/ blob/master/cloud-set-guest-password-debian c||_yN)virtual_router_address)selfrs H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceCloudStack.py__init__z'CloudStackPasswordServerClient.__init__+s &<#ctjddddddddd d j|d j|jg \}}|jS) Nwgetz--quietz--tries3z --timeout20z--output-document-z--headerzDomU_Request: {0}z{0}:8080)r formatrstrip)r domu_requestoutput_s r _do_requestz*CloudStackPasswordServerClient._do_request.sfII##**<8!!$"="=>  ||~rct|jd}|dvry|dk(r td|jd|S)Nsend_my_password)saved_password bad_requestz-Error when attempting to fetch root password.r%)r! RuntimeError)rpasswords r get_passwordz+CloudStackPasswordServerClient.get_passwordCsG##$67 - - } $NO O )*rN)__name__ __module__ __qualname____doc__rr!r)rrrrs =*rrcfeZdZdZdZdZdZdZ d fd ZdZ dZ d Z d Z e d ZxZS) DataSourceCloudStack CloudStackx2c\tjj||||tjj |j d|_d|_||_t|j|_ |js tdd|jd|_ i|_ y)NcslatestzNo virtual router found!zhttp:///)r DataSourcerospathjoinseed_dirapi_verdistroget_vr_addressvr_addrr'metadata_addresscfg)rsys_cfgr>pathss rrzDataSourceCloudStack.__init__Us##D'65A U^^T:    %dkk2 ||9: :")$,,q 9rctjdtjd}|r|Stjdt tj 5tj j|jd}|r |cdddS dddtjd|jjjt t5|jjj|jj}|jdxsd}|cdddS#1swYxYw#1swYnxYwtjdy)z Try obtaining a "domain-name" DHCP lease parameter: - From systemd-networkd lease - From dhclient lease z.Try obtaining domain name from networkd leases DOMAINNAMEzHCould not obtain FQDN from networkd leases. Falling back to ISC dhclientz domain-nameNzBCould not obtain FQDN from ISC dhclient leases. Falling back to %szNo dhcp leases found)LOGdebugr networkd_get_option_from_leasesrNoDHCPLeaseMissingDhclientError IscDhclientget_key_from_latest_leaser> dhcp_client client_nameFileNotFoundErrorget_newest_leasefallback_interfaceget)r domainname domain_name latest_leases r_get_domainnamez$DataSourceCloudStack._get_domainnamecs7 BC99,G    + d:: ; #**,FF ]K"  # #  #  ! KK # # / / ' ( ;;22CC ..L'**=9ATK    # #   ()s2D?%AE ?E EcRt||||}|rd|jvrtj d|j }|rG|jd|}tj d|t j||jStj d||S)z Returns instance's hostname / fqdn First probes the parent class method. If fqdn is requested, and the parent method didn't return it, then attach the domain-name from DHCP response. .zFQDN requestedzObtained the following FQDN: %szNCould not determine domain name for FQDN. Fall back to hostname as an FQDN: %s) super get_hostnamehostnamerGrHrVrDataSourceHostname is_default)rfqdn resolve_ip metadata_onlyr[rS __class__s rrZz!DataSourceCloudStack.get_hostnames7'j-H Cx000 II& '--/J"++,Aj\: ;TB11$8K8KLL II7  rc|j}|jdkrytj|jdg}t j }tj ||j|jtj\}}|r!tjd|t|Stjd|tt j |z t|S)NrFzlatest/meta-data/instance-id)urlsmax_waittimeout status_cbzUsing metadata source: '%s'z>Giving up on waiting for the metadata from %s after %s seconds)get_url_paramsmax_wait_secondsuhelp combine_urlrAtime wait_for_urltimeout_secondsrGwarningrHcriticalintbool)r url_paramsrc start_timeurl _responses rwait_for_metadata_servicez.DataSourceCloudStack.wait_for_metadata_services((*  & &! +   %%'E   YY[ ++00..kk  Y  II3S 9Cy LL$DIIK*,-  Cyrc|jSr)rBrs rget_config_objz#DataSourceCloudStack.get_config_objs xxrcdi}tj||jdzr5|d|_|d|_t j d|jy |jsytj}tj|j|j|_tj|j|j|_t j dttj|z t|j } |j#}|r d|d did |_y#t&$r(tj(t d |j YywxYw#t&$r(tj(t d |jYywxYw) Nr7)basez user-dataz meta-dataz%Using seeded cloudstack data from: %sTFz)Crawl of metadata service took %s secondsexpire) ssh_pwauthr(chpasswdz/Failed to fetch password from virtual router %sz(Failed fetching from metadata service %s)r read_optional_seedr< userdata_rawmetadatarGrHrvrkr get_instance_userdatar=rAget_instance_metadatarprr@r)rB Exceptionlogexc)rseed_retrspassword_client set_passwords r _get_datazDataSourceCloudStack._get_datas|  " "84==33F H ( 5D $[1DM II=t}} M' 113J # 9 9 d33!D  55 d33DM II;DIIK*,- =T\\JO .;;=  &*$0$e% DH  ELL    KK:%%    s=E>.B;E>*E :E> .E;8E>:E;;E>>.F/.F/c |jdS)Nz instance-idrrxs rget_instance_idz$DataSourceCloudStack.get_instance_ids}}]++rc |jdS)Nzavailability-zonerrxs ravailability_zonez&DataSourceCloudStack.availability_zones}}011r)FFF)r*r+r,dsname url_max_wait url_timeoutrrVrZrvryrrpropertyr __classcell__)ras@rr0r0MsX FLK (X 8>.`,22rr0cz tdd}|dddS#t$rtjdYywxYw)Nz data-serverPrzDNS Entry data-server not found)rrrGrH)addrinfos rget_data_serverrsI!}b1 {1~a   34s ::c tjdj}|D]W}|jd}|ddk(st t dt |dd}tjd||cSy) Nz/proc/net/route 00000000zlatest_addressrUs rr?r?sF %&N B  99:JKN ;^  $66 7"))+EE ,   II> O! ""  " # $ ))::6B  IIC""..      II45   )""  s->E  A E EEc6tj|tSr)rlist_from_depends datasources)dependss rget_datasource_listrRs  $ $Wk ::r)"loggingr9rk contextlibrsocketrrrstructr cloudinitrr r rir cloudinit.netr cloudinit.sources.helpersr getLoggerr*rGrr8r0rrr?DEP_FILESYSTEM DEP_NETWORKrrr.rrrs 33#))g!++\s27--s2l! -!dG22G4G4GHI ;r