܍~cj'*ddlZddlZddlmZmZmZddlmZddlm Z ddlm Z m Z ddlm ZddlmZddlmZdd lmZe jeZGd d ZGd d e jZdZdZdZddZdZee je j ffgZ!dZ"dS)N)gaierror getaddrinfo inet_ntoa)pack)log)sourcessubp) url_helper)util)dhcp)ec2c$eZdZdZdZdZdZdS)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||_dSN)virtual_router_address)selfrs H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceCloudStack.py__init__z'CloudStackPasswordServerClient.__init__*s&<###ctjddddddddd d |d |jg \}}|S) 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-snI##**<88!!$"=>>   ||~~rc|d}|dvrdS|dkrtd|d|S)Nsend_my_password)saved_password bad_requestz-Error when attempting to fetch root password.r%)r! RuntimeError)rpasswords r get_passwordz+CloudStackPasswordServerClient.get_passwordBs[##$677 - - -4 } $ $NOO O )***rN)__name__ __module__ __qualname____doc__rr!r)rrrrsK  ===*rrcNeZdZdZdZdZdZdZdZdZ dZ e d Z d S) DataSourceCloudStack CloudStackx2c,tj||||tj|jd|_d|_t|_ |j stdd|j d|_ i|_ dS)NcslatestzNo virtual router found!zhttp:///) r DataSourcerospathjoinseed_dirapi_verget_vr_addressvr_addrr'metadata_addresscfg)rsys_cfgdistropathss rrzDataSourceCloudStack.__init__Ts##D'65AAA U^T::   %'' | ;9:: : ;04 >rc|}|jdkrdStj|jdg}t j}tj||j|jtj \}}|rt d|n=t d|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_urlr@time wait_for_urltimeout_secondsLOGwarningdebugcriticalintbool)r url_paramsrF start_timeurl _responses rwait_for_metadata_servicez.DataSourceCloudStack.wait_for_metadata_service`s((**  &! + +5  %'E    Y[[ +0.k    Y   II3S 9 9 9 9 LL$DIKK*,--    Cyyrc|jSr)rArs rget_config_objz#DataSourceCloudStack.get_config_objs xrcNi}tj||jdzr<|d|_|d|_t d|jdS |sdStj}tj |j |j |_tj |j |j |_t dttj|z t|j} |}|r d|d did |_n0#t&$r#tjt d |jYnwxYwdS#t&$r$tjt d |j YdSwxYw) 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_rawmetadatarQrSr[rNr get_instance_userdatar=r@get_instance_metadatarUrr?r)rA Exceptionlogexc)rseed_retrXpassword_client set_passwords r _get_datazDataSourceCloudStack._get_datas  "84=33F H H H  ( 5D $[1DM II=t} M M M4' 1133 uJ # 9 d3!!D  5 d3DM II;DIKK*,--   =T\JJO .;;==  &*$0$e%  DH    EL 4    K:%    55  s=E64B+E6 E4E6*E1.E60E11E66*F$#F$c|jdS)Nz instance-idrfr]s rget_instance_idz$DataSourceCloudStack.get_instance_ids}]++rc|jdS)Nzavailability-zonerpr]s ravailability_zonez&DataSourceCloudStack.availability_zones}011rN) r*r+r,dsname url_max_wait url_timeoutrr[r^rnrqpropertyrsr.rrr0r0Ls FLK   >...`,,,22X222rr0c tdd}|dddS#t$rtdYdSwxYw)Nz data-serverPrzDNS Entry data-server not found)rrrQrS)addrinfos rget_data_serverr|sb!}b11 {1~a   3444tts&$A Ac >tjd}|D]s}|d}|ddkrPt t dt |dd}td||cStdS) Nz/proc/net/route 00000000z>!   RZ]]!3!3a!7!7 II0! 4 4 4HHH 4rc||t}|sdStj|}d}d}|D]}|dr|ds|dsCtj||}tj|}||kr|}|}|S)N dhclient6z.leasez.leases)rr9r startswithendswithr:r;getmtime)lease_d lease_files latest_mtime latest_filefnameabs_pathmtimes rget_latest_leasers "" t*W%%KLK # #   K ( (  x(( ENN9,E,E  7<<//  ** <   L"K rct}|rtd||Stjd}|rtd||St }|s(tdt St|d5}|D]f}d|vr`|d d}t|d kr%|d }td ||}g dddn #1swxYwY|s(td t S|S) Nz4Found metadata server '%s' via data-server DNS entrySERVER_ADDRESSz-Found SERVER_ADDRESS '%s' via networkd_leasesz*No lease file found, using default gatewayrzdhcp-server-identifierz ;  rzFound DHCP identifier %sz$No DHCP found, using default gateway) r|rQrSr networkd_get_option_from_leasesrropenrrr)latest_address lease_filefdrwordsdhcptoks rr>r>s %&&N B    9:JKKN ;^   "##J % >???"$$$ j#  -" - -D'4// 8,,22377u::>>#AhGII8'BBB%,N  ---------------- % 8999"$$$ s)A*D  D$'D$c6tj|tSr)rlist_from_depends datasources)dependss rget_datasource_listr3s  $Wk : ::rr)#r9rNsocketrrrstructr cloudinitrloggingrr r rLr cloudinit.netr cloudinit.sources.helpersr getLoggerr*rQrr8r0r|rrrr>DEP_FILESYSTEM DEP_NETWORKrrr.rrrs 3333333333$$$$$$########))))))))))))g!!++++++++\k2k2k2k2k27-k2k2k2\!!!      B(((ZG2G4GHI ;;;;;r