܍~c8: UddlZddlZddlZddlZddlZddlZddlmcmZ ddl m Z ddl m Z ddlmZmZddlmZmZmZmZddlZddlmZddlmZddlmZmZmZmZmZdd lm Z m!Z!dd l"m#Z#dd l$m%Z%m&Z&m'Z'dd l(m)Z)dd l*m+Z+ddl,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@ddlAmBZBmCZCmDZDejEeFZGdZHddiZIdZJdZKdZLdZMdZNdZOdZPdZQdZRdZSejTeDeSejUfZVGdd e ZWGd!d"e ZXd#ZYeeZe[d$<gd%Z\d&d'gZ]d(Z^d)Z_d*eZd+eZd,eeZfd-Z`d.eZd,eZfd/Zae6d,eeZfd0Zbdjd,eZfd1Zcd2Zdd3Zed4Zfd,eeZfd5ZgejhrAd6ZKegd7ZieieGjd8d9eizZJneGjd:dZYeLd;eJidd?gd at scbus1 target 0 lun 0 (cd0,pass0) at scbus2 target 0 lun 0 (da0,pass1) at scbus3 target 1 lun 0 (da1,pass2) (r3rY,rN)r[r\r]r^r_)rhrlrbrjdev_passs rDfind_dev_from_busdevrrs|))++## 9VT " " #JJsOOE5zzQ 8>>#..{""" 4rCmacc t|dkrKd|dd|dd|dd|dd|dd|ddg}|S) z1Normalize mac address with colons and lower-case. :rr3 )r_joinlower)rss rDnormalize_mac_addressr}st 3xx2~~hh 1Xs1Q3xQqS3qs8S2YBrE K   99;;rCc<dtjDS)z-Get Hyper-V NICs as normalized MAC addresses.cPg|]#}|ddkt|d$S)r3 hv_netvscrYr}).0ns rD z1get_hv_netvsc_macs_normalized..s=    Q4;   ad##   rC)r get_interfacesrBrCrDget_hv_netvsc_macs_normalizedrs,  #%%   rCc tj|jS#tj$r3tdd||cYSwxYw)NzFailed to execute: %s )rstdoutProcessExecutionErrorLOGdebugr{)cmdfail_rets rDexecute_or_debugrs^y~~$$  % )388C==999s?AAc(tddgdS)Nsysctlz dev.storvsc)rrrBrCrDget_dev_storvsc_sysctlrs X}5 C C CCrCc$tgdS)N) camcontroldevlistz-brrBrCrDget_camcontrol_dev_busrs ;;; < <> ? II- . . .4!!),,G "#3W = =F &~v>> ? II- . . .4 4rCz freebsd-ufsrYzresource disk is not None/dev/zresource disk is None ephemeral0T)data_dir disk_aliasesapply_network_configgptd) table_typelayout overwritez ephemeral0.1) filesystemdevice) disk_setupfs_setup datasourcenever_destroy_ntfszTemporary StorageREDACTEDseed_dircftj}|dS|dS|dz S)z@Check platform environment to report if this datasource may run.NTF ovf-env.xml)r query_systemexists)r chassis_tags rDis_platform_viabler7sA".00Ktu } $ , , . ..rCc XeZdZdZejejejhiZ dZ e j Z dZdZdeddffd Zd Zd Zeddd d d eedededdfdZedGdZdefdZedZdHfd ZedZeeje dddededede!fdZ"dZ#dZ$ede%efdZ&de!de%efd Z'de%efd!Z(d"Z)d#Z*dId$Z+ed%Z,e dJd(edede-fd)Z.ed*Z/ed+dd,d-ed.eddfd/Z0ed0Z1ed1Z2ed2Z3ed3Z4ed4Z5edId5eedefd6Z6edd7d8ee%edee%efd9Z7de!deefd:Z8d;e!de!de9fd<Z:ed=Z;ed>e!de!dee%efd?Ze?dBZ@edCZAe?dDZBe?dEZCede!defdFZDxZES)KDataSourceAzurer0FrYctj||||tj|jd|_i|_d|_tj tj |titg|_d|_d|_d|_t$|_tj|jdd|_dS)Nazuredatareported_ready)r DataSource__init__ospathr{rcfgseedr mergemanydictget_cfg_by_path DS_CFG_PATHBUILTIN_DS_CONFIGds_cfg_iso_dev_network_config_ephemeral_dhcp_ctxr_wireserver_endpoint cloud_dir_reported_ready_marker_file)selfsys_cfgdistropathss rDrzDataSourceAzure.__init__Rs##D'65AAA U^W==  (  !'; ; ;=N O    ##' $?!+-7<< OV%5, , (((rCci_pkl_versionrmNct|d|_d|_t|_t j|j j dd|_ dS)Nrr) super _unpicklerrrrrrr{rrr)rr __class__s rDrzDataSourceAzure._unpicklebs] .)))#'  $?!+-7<< J &*:, , (((rCcZtj|}|d|jdS)Nz [seed=])rr__str__r)rroots rDrzDataSourceAzure.__str__ls-!))$//!%tyyy11rCc|jd}n?|jdrd}n"|jdkrd}nd}|d|jdS) z/Return the subplatform metadata source details.Nunknownz/devz config-diskimdszseed-dir ())rr`r|)rsubplatform_types rD_get_subplatformz DataSourceAzure._get_subplatformpsq 9 (   Y ! !& ) ) *,   Y__  & ( (%  ) ,,,diii88rC)iface retry_sleeptimeout_minutesrrrc (|jtdtd|t |t |j|_d}|dztz}tj ddt5| |j }n#t$rtd tj Ynt $r$td tj d|_t$$r!td |ztj YnVt&j$rE}td |jd|jd|jd|jtj Yd}~nd}~wwxYw|%t|z|krt3|nn||d|_t%|d|j_d|vrt7|d|_ddddS#1swxYwYdS)aSetup ephemeral networking. Keep retrying DHCP up to specified number of minutes. This does not kill dhclient, so the timeout in practice may be up to timeout_minutes + the system-configured timeout for dhclient. :param timeout_minutes: Number of minutes to keep retrying for. :raises NoDHCPLeaseError: If unable to obtain DHCP lease. Nz/Bringing up networking when already configured.z)Requested ephemeral networking (iface=%s))r dhcp_log_functmp_dir<zobtain-dhcp-leasezobtain dhcp leasename descriptionparentzInterface not found for DHCP logger_funczdhclient executable not foundz&Failed to obtain DHCP lease (iface=%s)zCommand failed: cmd=z stderr=z stdout=z exit_code= interfacez unknown-245)r RuntimeErrorrrrr$rget_tmp_exec_pathrrReportEventStackr! obtain_leaserr+warningrerrorrrrrstderrr exit_coderrr&r)rrrrleasetimeoutrs rD_setup_ephemeral_networkingz+DataSourceAzure._setup_ephemeral_networking|s$  # /A  =uEEE#2%K1133$ $ $  !B&/  $$+$   9 9  -  4AACCEE0+6CK7+7SY04D,'+@5H$'I1   ++"III!LLL!LLL!OO %(I          =TVVk%9G%C%C+&&&&O-R}+/(&(((27{1C(.!E))0Gm,11D-o9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 sVHB65H6%FHAF0H2F;F;HFA5HH H cX|jdS|jd|_dS)zTeardown ephemeral networking.N)r clean_networkrs rD_teardown_ephemeral_networkingz.DataSourceAzure._teardown_ephemeral_networkings5  # + F  ..000#'   rCc2|jdup |jjdu S)z"Check if networking is configured.N)rrr s rD_is_ephemeral_networking_upz+DataSourceAzure._is_ephemeral_networking_ups,  $ , 6'-5  rCc  i}|jd}d}d}i}d}i}i}t|j|D]8} | dr\t jr"t j| td\}}}}nt j| t\}}}}| |_nt| \}}}}d}| }n#t$r!td | ztj Ytj $r/td | ztj d di}d dddiii}d}Yt$r9} d| z} t| tj t!j| d} ~ wwxYwtd|ztj t%|jp| } | rdnd} || n#t($rYnwxYw|r|d}ni}|s'|s%d} t| t!j| |||}|t0jkrt jr1d} t| tj t!j| |t0jkr|n:|t0jkr*|d||\}}}}|d}| |||_!|"||t j#|d|ig|dtI|}tK|}tM|}|r,t d|||d dd<|r&t d|||d d <|r&t d!|||d d"<|dkrX|d#sP tO|||$}d%|i|d#<n5#tP$r(}td&|ztj Yd}~nd}~wwxYw|stS|}|rt d' tUj+d,|-|d(<n+#tP$rtd)tj. YnwxYw|s1d*} t| tj t!j| td+|ztj ||krtd,|ztj t_}|r ||d d-<|0|d d.<|j1dur|r|2||/} |3|0}t d1||r ||d d2<|4d|_1n#tP$rYnwxYw|S)3aWalk all instance metadata sources returning a dict on success. @return: A dictionary of any metadata content for this instance. @raise: InvalidMetaDataException when the expected metadata service is unavailable, broken or disabled. rFNrrudf)mtypeTz$Did not find Azure data source in %srz%s was not mountablelocal-hostname system_info default_userrIMDSzBrokenAzureDataSource: %sz!Found provisioning metadata in %srrrz)retrieszNo OVF or IMDS availablez%Free BSD is not supported for PPS VMs) create_marker)imds_mdr)rfilesmetadata userdata_rawz Username retrieved from IMDS: %sz Hostname retrieved from IMDS: %srz(Disable password retrieved from IMDS: %sdisable_passwordr)usernamehostname disableSshPwdrz)Failed to construct OVF from IMDS data %szRetrieved userdata from IMDSrzBad userdata in IMDSzNo Azure metadata foundzfound datasource in %szusing files cached in %s random_seedr1)rr pubkey_infoznegotiating returned %s public-keys)5rlist_possible_azure_dsrr`r is_FreeBSDmount_cbload_azure_ds_dirrrr+rrMountFailedErrorrrrInvalidMetaDataExceptionboolrrr get_imds_data_with_api_fallback_determine_pps_typerFrLrO_wait_for_all_nics_readyrM_report_ready_for_pps_wait_for_pps_os_disk_shutdown _reprovisionvalidate_imds_network_metadatarupdater_username_from_imds_hostname_from_imds_disable_password_from_imdsr# Exception_userdata_from_imdsbase64 b64decoder{r^r_get_random_seed_iid _negotiated!_determine_wireserver_pubkey_info _report_ready_cleanup_markers)r crawled_dataddirovf_is_accessiblemetadata_sourcemdrrrsrcexcmsgrequires_imds_metadatarrpps_type imds_username imds_hostnameimds_disable_passwordcontentse imds_userdatarr#ssh_keyss rDcrawl_metadatazDataSourceAzure.crawl_metadatas {:& "  )$->># <# >'** J((7;}!2%8884L#uu8<}!2884L#u%(DMM3DS3I3I0B c5$(!"%%   ':S@ # (   '*S0ci'+$~|&DE"(( < < <1C7'CCCC6s;;; < // A     "&dm!4!4!M+> (B c5::2:FFG ++G+<<<#  .VW4E/FGG ,      ,G44 +G44 ;G D D  G II8- H H H9FC ~ .v 6  G II8- H H H9FL $%5 6  & II:%    &  $"  f $ $\'-B $ ,**"7 *7(A W%%   '?!C #   /88M  8999393C 3 3 5 56644L00!+.CK  +C #CSY ? ? ? ?2377 7 #(?:I     d " " #*T1sy     !!  ;6:L $] 326))++ Z /  u $ $)I)I)K)K $@@AK (--+-FF  3X>>>G>FL,];%%'''#'      srB C(E(*:E(& E(/4E##E('F>> G  G #P== Q/Q**Q/ > > > > > > > ? C      C C C KK> B B B B B B B B C4E 0 2= /(LL     #4q8ci      G !   555  / / 1 1 1 1 1    / / 1 1 1 1D / / 1 1 1 1 K 9  H,,  677- 7 8 8 8 % 7>>' " " + #F I      )e$&IJDHH $J I      $E*DH*:6v>* * %'7 8   )8  K #\'%:E    ts\4 A#AA#'A66 B%B  B%?&C&%E!& E09E)E!EE!!E7)md_typeexc_cbinfiniterrjrlctdt t||t||S#t$r<}tdt|jdkricYd}~SYd}~nd}~wwxYwdt}t|tj t||t||S#t$r*}td|ztj icYd}~Sd}~wwxYw) a Fetch metadata from IMDS using IMDS_VER_WANT API version. Falls back to IMDS_VER_MIN version if IMDS returns a 400 error code, indicating that IMDS_VER_WANT is unsupported. :return: Parsed metadata dictionary or empty dict on error. zAttempting IMDS api-version: %s)rrj api_versionrkrlz"UrlError with IMDS api-version: %sNz!Fall back to IMDS api-version: {}rz!Failed to fetch IMDS metadata: %s) rinfo IMDS_VER_WANTget_metadata_from_imdsr-coder= IMDS_VER_MINr+r)rrrjrkrlrlog_msgs rDr,z/DataSourceAzure.get_imds_data_with_api_fallback sR 2MBBB ))!      HH9= I I IzS   !      6<<\JJSX>>>> )(!      #3e;I    IIIIII  s9; B,A<1B<B:C DD<DDc~|jr d|jvr|St|jdS)Nr1)rr<rr s rDget_instance_idzDataSourceAzure.get_instance_id<s;}  T] B B99;; 4=/000rCcB|jd|S)Nr)rrb)rrs rDdevice_name_to_devicez%DataSourceAzure.device_name_to_deviceAs{>*..t444rCc ||jdS#ttf$rYnwxYw|S)z+ Retrieve public SSH keys. r)_get_public_keys_from_imdsrKeyError ValueError_get_public_keys_from_ovfr s rDget_public_ssh_keysz#DataSourceAzure.get_public_ssh_keysDs[  224=3HII I*%    D --///s "66rc d|ddD}n,#t$rd}t|tjwxYwt d|Dr,d}t|tjt |dt|}t|tj|S) zGet SSH keys from IMDS metadata. :raises KeyError: if IMDS metadata is malformed/missing. :raises ValueError: if key format is not supported. :returns: List of keys. cg|] }|d S)keyDatarB)r public_keys rDrz>DataSourceAzure._get_public_keys_from_imds..Ys-9%rCcompute publicKeysz"No SSH keys found in IMDS metadatarc38K|]}t| VdS))keyN)_key_is_openssh_formatted)rrs rD z=DataSourceAzure._get_public_keys_from_imds..bs1JJ#,5555JJJJJJrCzKey(s) not in OpenSSH formatzRetrieved {} keys from IMDS)r|r+rranyr}r=r_)rrrQrus rDr{z*DataSourceAzure._get_public_keys_from_imdsPs "))"4\"BHH   :G #G C C C C   JJJJJ J J &4G #G C C C CW%% %/66s8}}EESY????s )Acg} |jd}dt|}t|tjn-#t $r d}t|tjYnwxYw|S)zYGet SSH keys that were fetched from wireserver. :returns: List of keys. r$zRetrieved {} keys from OVFrzNo keys available from OVF)rr=r_r+rrr|)rrQrus rDr~z)DataSourceAzure._get_public_keys_from_ovfks  D}]3H299#h--HHG #G C C C C C D D D2G #G C C C C C C DsA A'A98A9c|jSNrr s rDget_config_objzDataSourceAzure.get_config_obj{s xrCcNtj|Sr)rinstance_id_matches_system_uuidrw)rrs rDcheck_instance_idz!DataSourceAzure.check_instance_id~s6t7K7K7M7MNNNrCctj|jdd}t jd}|td|}tj |rdtj | }||kr|St||r|S|S)Nrr1z system-uuidzfailed to read system-uuid)rrr{r get_cpathr read_dmi_datarr|rr load_filestripr))rprevious prev_iid_path system_uuidiids rDr<zDataSourceAzure._iids J  ( (-  ' 66  ;<< <!! 7>>- ( ( ~m44::<Ran into exception when attempting to reach %s after %d polls.rpoll IMDS with  failed. Exception: and code: rzT) r+rrrr-causersrequestsTimeoutConnectionError)rHrGexpected_errors_countmetadata_logging_thresholdmetadata_poll_counts rDnetwork_metadata_exc_cbzIDataSourceAzure._check_if_nic_is_primary..network_metadata_exc_cb"s#6"9 #&@@@*a/*'&),.A(BC #  c8,,++33 3885$'Iy 3Z H,h.FG 3)>(A%,224rCT)rrjrkrlzFailed to get network metadata using nic %s. Attempt to contact IMDS failed with error %s. Assuming this is not the primary nic.z%s is the primary nicrzExpected nic count: %dr) rr,r9r@r7rrrpr_r+r ) rr is_primaryexpected_nic_countrrrOrrrs @@@rD_check_if_nic_is_primaryz(DataSourceAzure._check_if_nic_is_primarysx  %&" ! ((vr(JJJ       F ::$,. ;GG     KK            2 HH,f 5 5 5J"%W[%9!:!:  #(+==H       / / 1 1 1---s#A BA>>Bctd g}d} d}tjddt |zt 5t j||}dddn #1swxYwY||td|ztj | ||s3td || |\}}|rtd dS#t$r3}tt|tj Yd}~dSd}~wwxYw) z6Wait until the primary nic for the vm is hot-attached.z*Waiting for primary nic to be hot-attachedFTNzwait-for-nic-attachz4wait for nic attach after %d nics have been attachedrzDetected nic %s attached.rz!Checking if %s is the primary niczFound primary nic for this VM.)rrprrr_r!rwait_for_nic_attach_eventappendr+rrrrr)rr nics_foundprimary_nic_foundr_rs rD"_wait_for_hot_attached_primary_nicz2DataSourceAzure._wait_for_hot_attached_primary_nicfs =>>>/ GJ %  $ ,.Nj//*-   %>F               !!&)))'/&8ch %%f--- )HH@&III+/+H+H,,(%q %HH=>>>EI$ L G G G #CJJCI F F F F F F F F F F GsB3DA1% D1A55D8A59BDD E"(EEcLd} tj}|d |nA#tj$r/}t d|ztjd|_ Yd}~nd}~wwxYw| || |n@#tj $r.}t t|tjd}~wwxYw |r|dSdS#|r|wwxYw)aWait for nic(s) to be hot-attached. There may be multiple nics depending on the customer request. But only primary nic would be able to communicate with wireserver and IMDS. So we detect and save the primary nic to be used later. NT)rzLIgnoring failure while tearing down networking, NIC was likely unplugged: %rr)rcreate_bound_netlink_socketr/r rrr+rrprrrNetlinkCreateSocketErrorrrclose)rrrOs rDr.z(DataSourceAzure._wait_for_all_nics_readysg 9;;G  & & & = = = 0335555- 0 0 0'3567 # ,0((((((  0  % %g . . .  3 3G < < < </    #CFF D D D D   =     w   sR)B/AB/B%A<7B/<B-B/.D /C,>)C''C,,D D#c dtjjt}ddi}d}t t jj  }d_ d_ d}d}fd}|r s d  j jjt!d jj}t#j}t(d |t-jd d t05 t#j||n5#t4$r(} t7d| zt(jYd} ~ nd} ~ wwxYwdddn #1swxYwYn#t"j$r8} t7d| zt(jt?j d| d} ~ wtB$r5} t7dt(jt?j d| d} ~ wwxYw|r|"n#|r|"wwxYw#|sȉ s-|dz } d n#tB$rY?wxYwt-jddt05 tI|tJ||ddj&}n/#tN$r"#YdddwxYw dddn #1swxYwY|t7d|zt(jt7dj zt(j|S)ztPoll IMDS for the new provisioning data until we get a valid response. Then return the returned JSON object.{}?api-version={}MetadatatrueNrYrct|tr|jdvrjjkr^xjdzc_t djtd|d|jd|jt jxjdz c_d Std|d|jd|jt j d Std |zt j d S) N)r4r5r3z:Backing off logging threshold for the same exception to %drrrrrYTFz1poll IMDS failed with an unexpected exception: %s) rr-rsimds_poll_counterimds_logging_thresholdrrr+rr)rH exceptionrs rDrkz*DataSourceAzure._poll_imds..exc_cbs4)X.. !>Z//-1LLL33q833 . 7 0/ #ssIOOOY^^E),  **a/**4,+33 A$'K !5 #CK     5rCrrzMissing ephemeral contextz#Wait for vnetswitch to happen on %sz!wait-for-media-disconnect-connectzwait for vnet switchrz'Error while waiting for vnet switch: %srz)Failed to create bound netlink socket: %sz2Failed to report ready while in provisioning pool.z&DHCP failed while in provisioning poolrzget-reprovision-data-from-imdszget reprovision data from imdsTF)rheaders exception_cbrl log_req_respz#attempted dhcp %d times after reusez polled imds %d times after reuse)(r=r9rAvaluertr+rrisfilerrrr rrrrrrr/rrrrr!!wait_for_media_disconnect_connectrr+rrrrr*rrr r.IMDS_TIMEOUT_IN_SECONDSrNr-) rurlrr report_ready dhcp_attemptsreprovision_datarkrrOs ` rD _poll_imdszDataSourceAzure._poll_imdss "((  ) /  v&t?@@ @  '(#!" " " " " " H : 2 3355 E000DDD/ $,4/5=&'BCCC06!=??**,,, 9,< 6,   A#U*/EI(+                3   '?!C # 6H$   '< # 6H  $MMOOO$MMOOOO$  / / 1 1 1" 3355 " 44Q4GGGG'H(5<(   '. 7 '%+!%%* (((%$ 77999!       %                # 4 1M A      .1G G      s)B F5F7E  F E?E:5F:E??F FFFFFH8H)3G H)0HHH88IJ J('J(L% K)(L%)LL%LL%%L),L)rcJ|ri tdtjt |j|dS#t $r(}td|ztjYd}~nd}~wwxYw tdtj| | d n#t$rYnwxYwt |j|dS#t $r(}td |ztjYd}~nd}~wwxYwd S) zTells the Azure fabric that provisioning has failed. @param description: A description of the error encountered. @return: The success status of sending the failure signal. z>Using cached ephemeral dhcp context to report failure to Azurer)endpointrTz@Failed to report failure using cached ephemeral dhcp context: %sNz3Using new ephemeral dhcp to report failure to Azurerrz5Failed to report failure using new ephemeral dhcp: %sF) r r+rrr,rr7rr rr)rrrOs rDrazDataSourceAzure._report_failurePs  + + - -  '1 #  )!6 +t   '8:;< #    #EI      / / 1 1 1 000DDDD#     %2     4    #G!KI           usS1A A;A66A;?/C./CC. CC.CC.. D 8DD r"r#c t|j|j|}n1#t$r$}t d|zt jd}~wwxYwd|_|S)zTells the fabric provisioning has completed. :param pubkey_info: Fingerprints of keys to request from Wireserver. :raises Exception: if failed to report. :returns: List of SSH keys, if requested. )riso_devr#zQError communicating with Azure fabric; You may experience connectivity issues: %srN)r'rrr7r+rr)rr#rrOs rDr?zDataSourceAzure._report_readys +2 'DD     #*,-.K         s A AA c |dddS#t$r)}td|ztjYd}~dSd}~wwxYw)NextendedrppsTypez2Could not retrieve pps configuration from IMDS: %sr)r7r+rr)rrrOs rD_ppstype_from_imdsz"DataSourceAzure._ppstype_from_imdssn :&y1)< <    #DqHI    44444  s A AA ovf_cfgc*tj|jrtj}n=|ddtjjks(| |tjjkr tj}n|ddtj jks(| |tj jkr tj }n|ddusQ|ddtj jks(| |tj jkr tj }n tj }td|jztj|S)z@Determine PPS type using OVF, IMDS data, and reprovision marker.PreprovisionedVMTypeNPreprovisionedVmTz PPS type: %sr)rrrrrFrPrbrOrrrMrNrLr+rrp)rrrrJs rDr-z#DataSourceAzure._determine_pps_typesF 7>>$: ; ; $HH KK. 5 59N N N&&w//7?3HHHHH KK. 5 59N N N&&w//7?3HHHHH KK* + +t 3 3{{1488$%%&&w//7?3HHHHH|H X^ +    rCc|}tjddt5t |\}}}|||d|ifcdddS#1swxYwYdS)zrInitiate the reprovisioning workflow. Ephemeral networking is up upon successful reprovisioning. zreprovisioning-read-azure-ovfz$read azure ovf during reprovisioningrrN)rrrr!read_azure_ovf)rrNrEudrs rDr1zDataSourceAzure._reprovisions ??$$  $0>$    < < )22KBCC-!:;  < < < < < < < < < < < < < < < < < z1DataSourceAzure._determine_wireserver_pubkey_infos,0  D  + +G 4 4 4 4*% D D D''*d33K:AA$/$;K   G $G C C C C C C  D sA(BBc8tj|jdS)zCleanup any marker files.N)rdel_filerr s rDr@z DataSourceAzure._cleanup_markerss d677777rCc|j} t|||jt dt |jdn#t |jdwxYwdS)NF)is_new_instance preserve_ntfs def_log_file)r get_ipath_curaddress_ephemeral_resizerrbDS_CFG_KEY_PRESERVE_NTFSr*r)rrr instance_dirs rDactivatezDataSourceAzure.activatesz//11  : $ /"koo.FNN     DL8 9 9 9 9ODL8 9 9 9 9s 0A&&Bc|jdididS)NrrplatformFaultDomainrrbr s rDavailability_zonez!DataSourceAzure.availability_zones; M  fb ) ) SB   S& ' ' rCc|jr|jtjkrt|jdrZ t |jdS#t $r2}tdt|Yd}~nd}~wwxYw tS#t $r2}tdt|Yd}~nd}~wwxYwiS)z:Generate network configuration according to configuration.rnetworkz?Failed generating network config from IMDS network metadata: %sNz-Failed generating fallback network config: %s) rVrrUrrb6generate_network_config_from_instance_network_metadatar7rrr-_generate_network_config_from_fallback_config)rrOs rD_generate_network_configz(DataSourceAzure._generate_network_configs   #w}44  6775 M' 2    5FF  O@BB B O O O IIEs1vv N N N N N N N N O s/A B(B  B B C*(CCc|jr|jtjkr|jS||_|jS)z,Provide network configuration v2 dictionary.)rrrUrr s rDnetwork_configzDataSourceAzure.network_configsD   (D$8GM$I$I' '#<<>>##rCc|jdididS)Nrrlocationrr s rDregionzDataSourceAzure.region's8}  ,,00B??CCJOOOrCcFt} |d}d|dDnB#t$r5td|dztjYdSwxYwfd|D}|sdStd |d |tj|jr |jjsdStj |jj}|rt|tsdSt|}||vr!td |d |tjdS) z=Validate IMDS network config and report telemetry for errors.rc8g|]}t|dS) macAddressr)rrs rDrzBDataSourceAzure.validate_imds_network_metadata..2s4&a o66rCrz6IMDS network metadata has incomplete configuration: %rrFcg|]}|v| SrBrB)rm imds_macss rDrzBDataSourceAzure.validate_imds_network_metadata..>s#DDDa)1C1C1C1C1CrCTz8IMDS network metadata is missing configuration for NICs z: z-IMDS network metadata is missing primary NIC ) rr|r+rbrrrrr get_interface_macrrr})rr local_macsr missing_macs primary_macrs @rDr2z.DataSourceAzure.validate_imds_network_metadata+s344  $Y/N' 4II    #H++i(()K     55  EDDD:DDD  4||^^ -     ' t/G/M 5+D,D,JKK  *[#">"> 5+K88 , & & # #;;0K     us,;A+*A+)rmN)rBr)rr)Fr:r;r<dsnamerr@rBOOT_NEW_INSTANCEBOOTdefault_update_eventsr=rrUrV_ci_pkl_versionrintrrrr"r rrr r+r rRrTrir9r?imds_readurl_exception_callbackdictr,rwryr rr{r~rrr<rfloatrrr/r0rrr.rrar?rrFr-r1r>r@rpropertyrrrr r2 __classcell__)rs@rDrrEsA F  ' N  K]NO           222 9 9 9! $ XXX}X X  X  XXX! Xt!(((! ( T    !KK! KZ,,,,,, !OO! Ob! !- 0. ---- -  - ---! -^111 555! 0T#Y 0 0 0!  0$49649 OOO.!! >!DG$'#K0AA tt  $$cB |ddS#t$rYdSwxYw)NruserDatar#r$s rDr8r8cs9#J// tts  cN |dddS#t$rYdSwxYw)Nrr! computerNamer#r$s rDr5r5js>#K0@@ ttr&cV |ddddkS#t$rYdSwxYw)Nrr!disablePasswordAuthenticationrr#r$s rDr6r6qsK i  -.M N   tts  ((cd|vrdStj} ||}n#t$rYdSwxYw|jduS)z? Validate whether or not the key is OpenSSH-formatted. z FN)rrAuthKeyLineParserparse TypeErrorkeytype)rparserakls rDrr{ss u  ' ) )Fll3 uu ;d ""sA AAcdD]}g}td|D]j}||zt|z}tj|r4||tj|fk|r|cSgS)N)z-partprrY)rrrrrrrealpath)rhmaxnumsufffoundpnumppaths rD_partitions_on_devicer=s"!V$$ > >DdNSYY.Ew~~e$$ > dBG$4$4U$;$;<===  LLL  IrCctjdd}td|tj||vS)Nz TYPE=ntfsT)no_cachezntfs_devices found = %s)rfind_devs_withrrrrr7)rh ntfs_devicess rD_has_ntfs_filesystemrBsG&{TBBBLII'666 7  G $ $ 44rCc|r*ddtdtd}d|fStj|sdd|zfSt d|tj|t|}t|dkrdd|zfSt|d kr)d |d d d |D}d|fSt|d kr |d\}}n |d\}}t|sd|d|d|d}d|fStd}d|d|d|d}tjddt5} t!j||dddi} ne#t j$rS} d|_dt)| vrd|dzfcYd} ~ cdddSd|d |d!| zfcYd} ~ cdddSd} ~ wwxYw| dkrYd"| z|_t d#dttd|d$| zzfcdddS dddn #1swxYwYd|d%zfS)&aDetermine if the ephemeral drive at devpath should be reformatted. A fresh ephemeral disk is formatted by Azure and will: a.) have a partition table (dos or gpt) b.) have 1 partition that is ntfs formatted, or have 2 partitions with the second partition ntfs formatted. (larger instances with >2TB ephemeral disk have gpt, and will have a microsoft reserved partition as part 1. LP: #1686514) c.) the ntfs partition will have no files other than possibly 'dataloss_warning_readme.txt' User can indicate that NTFS should never be destroyed by setting DS_CFG_KEY_PRESERVE_NTFS in dscfg. If data is found on NTFS, user is warned to set DS_CFG_KEY_PRESERVE_NTFS to make sure cloud-init does not accidentally wipe their data. If cloud-init cannot mount the disk to check for data, destruction will be allowed, unless the dscfg key is set.z#config says to never destroy NTFS (rZz), skipping checksFzdevice %s does not existzResolving realpath of %s -> %srzdevice %s was not partitionedr3zdevice z had 3 or more partitions: rcg|] }|d S)rYrB)rr6s rDrz*can_dev_be_reformatted..s///qad///rCrYz partition rz ) on device z was not ntfs formattedc~tdgtfdtj|DS)Nzdataloss_warning_readme.txtc@g|]}|v|SrB)r|)rfignoreds rDrz?can_dev_be_reformatted..count_files..s+JJJ!'1I1IA1I1I1IrC)setr_rlistdir)mprHs @rD count_filesz+can_dev_be_reformatted..count_filess?4566JJJJrz"~~JJJKKKrCz was ntfs formattedzmount-ntfs-and-countrntfsLANGC)rupdate_env_for_mountzcannot mount ntfszunknown filesystem type 'ntfs'Tz^ but this system cannot mount NTFS, assuming there are no important files. Formatting allowed.Nz but mount of z failed: zmounted and counted %d fileszxit looks like you're using NTFS on the ephemeral disk, to ensure that filesystem does not get wiped, set %s.%s in configz but had %d files on it.z3 and had no important files. Safe for reformatting.)r{rrrrrrrr7r=r_rBr"rrr!rr'r)rrr) rhrrH partitions cand_part cand_pathrLbmsgevt file_countrOs rDcan_dev_be_reformattedrWs& HH[ ! ! ! ! $ $ $ cz 7>>' " ";07:::II('273C3CG3L3L 'w//J :!5??? Z1    GG HH//J/// 0 0 0 cz ZA  )!} 99)!} 9  * * II II GG  cz LL! LL    D  #*    "I  P&,c] JJ $ P P P1CO/3q6699 //"I"I"I"I"I"I"I"I.$$)))QQ!OOO O O O O O/"I"I"I"I"I"I"I"I P ??>' " "   :W D       2W <     F CE4 ,WmDD II$fc222 ' 1 1',,|UIODD07= 7>>' " " 1 @ '""" -....$ @ @ @ 5tQ???????? @ II)4 0 0 0 0 Fs./D E(E  Ecd}|sdS|si}tj|||D]L\}}tj||}d|vr |||}tj||dMdS)Nc& tj|}|D]'}d|jvr|jt kr t |_(tj|S#t$r t d||cYSwxYw)z>Azure provides the UserPassword in plain text. So we redact it UserPasswordz#failed to redact userpassword in %s) ET fromstringitertagtextDEF_PASSWD_REDACTIONtostringr7rcritical)cntfnamerelems rD_redact_passwordz%write_files.._redact_password9s =%%D  5 5"dh.. %999 4DI;t$$ $    LL> F F FJJJ sA#A&&'BBri)filenamecontentmode)r ensure_dirrjrrr{r)datadirrr\rprrrrns rDrgrg7s     OGW%%% ;;==EEw Wd++ D &&w66G eDDDDD EErCc"tj|}i}i}|jpd}|jr |j|d<|jr |j|d<|j |j |d<n |jrd|d<i}|jr |j|d<|jr,d|d <t|jkrt|j|d <|rd |i|d <|j |d <td|j ztj |j|d<td|jztj |||fS)zParse OVF XML contents. :return: Tuple of metadata, configuration, userdata dicts. :raises NonAzureDataSource: if XML is not in Azure's format. :raises BrokenAzureDataSource: if XML is unparseable or invalid. rrrN ssh_pwauthTrF lock_passwd hashed_passwdrrrzPreprovisionedVm: %srrzPreprovisionedVMType: %s)r parse_text custom_datar public_keysdisable_ssh_password_authpasswordrrj encrypt_passpreprovisioned_vmr+rrppreprovisioned_vm_type)rNovf_envrErrdefusers rDrrTsr"8,,GB C   "B0&/ .!-J(4 ' AAL  ! LG+!*F!&  7#3 3 3'3G4D'E'EGO $7,g6M%7C!::H #*"@C"W%CCH C=rC$6$cXtj||tjdzS)Nr4)strlen)cryptrrand_str)r~salt_ids rDrrs& ;x4=+C+C+C!C D DDrCc t|5}|d ddddS#1swxYwYn+#t$rtd|YnwxYwdS)z;Return boolean indicating path to cdrom device has content.iNTzcdrom (%s) is not configuredF)openreadIOErrorrr) cdrom_devfps rD_check_freebsd_cdromrs= )__  GGDMMM                  === 0)<<<<<= 5s,A5 A9A9A%A)(A)c|dStj|dd}tj|S)zIReturn content random seed file if available, otherwise, return None.NTF)quietdecode)rrr9 b64encoder)sourcers rDr;r;sC ~t >&U ; ; ;D  D ! ! ( ( * **rCc#K|VtVtjrd}t|r|Vn"dD]}tjd|zEd{V |r|VdSdS)Nz/dev/cd0)iso9660rzTYPE=%s)DEFAULT_PROVISIONING_ISO_DEVrr&rr@)r cache_dirrfstypes rDr%r%s JJJ &&&& ?  * * OOO( ? ?F*9v+=>> > > > > > > > >rCcLtj|d}tj|st dt |d5}|}dddn #1swxYwYt|\}}}|||d|ifS)NrzNo ovf-env file foundrb)rrr{rrrrr) source_dirovf_filerrNrErrs rDr(r(sw||J 66H 7>>( # #: !8999 h  7799!**KBC C-2 33sBBBnetwork_metadatac did}t|dD]\}}d}d|}d|dzd zi}d |dd }d D]}||id g} | std||Kd }|dkrd} nd} | r d |d<||d<| ddD]|} ||ddd| } | d} |dsg|d<|dd| | }|rr|rpt |d}|d|i|dt|}|r|dkr ||d d!<||d"|<td#||||S)$zConvert imds network metadata dictionary to network v2 configuration. :param: network_metadata: Dict of "network" key from instance metdata. :return: Dictionary containing network version 2 standard configuration. r3)version ethernetsrFzeth{idx})idxz route-metricrYrT)dhcp4zdhcp4-overridesdhcp6)ipv4ipv6 ipAddresszNo %s addresses found for: %rr24128rzdhcp6-overridesNsubnetrprefixprivateIpAddress addressesz {ip}/{prefix})iprr  macaddress)matchzset-namerrdriverrz>CCC//D$4&DD$cr|st}d}|D]}tj|r|s=tdt jjt j jgd}tj |rtj |tj |dS)a(Remove Azure-specific ubuntu network config for non-primary nics. @param paths: List of networking scripts or directories to remove when present. In certain supported ubuntu images, static udev rules or netplan yaml config is delivered in the base ubuntu image to support dhcp on any additional interfaces which get attached by a customer at some point after initial boot. Since the Azure datasource can now regenerate network configuration as metadata reports these new devices, we no longer want the udev rules or netplan's 90-hotplug-azure.yaml to configure networking on eth1 or greater as it might collide with cloud-init's configuration. Remove the any existing extended network scripts if the datasource is enabled to write network per-boot. Fz|Removing Ubuntu extended network scripts because cloud-init updates Azure network configuration on the following events: %s.TN)UBUNTU_EXTENDED_NETWORK_SCRIPTSrrrrrprrr BOOT_LEGACYisdirrdel_dirr)rloggedrs rDrcrc{s& 0/ F $ $ 7>>$   $ -^)9+@+FG  w}}T"" $ T"""" d### $ $rCc6tj|tSr)rlist_from_depends datasources)dependss rDget_datasource_listrs  $Wk : ::rCr)r4)r)r9r functoolsros.pathr\xml.etree.ElementTreeetree ElementTreereenumrpathlibrrrtypingrrr r r cloudinitr r loggingr rrrrcloudinit.eventrr cloudinit.netrcloudinit.net.dhcprrrcloudinit.net.ephemeralrcloudinit.reportingrcloudinit.sources.helpersrcloudinit.sources.helpers.azurerrrrrr r!r"r#r$r%r&r'r(r)r*r+r,cloudinit.url_helperr-r.r/ getLoggerr:rDS_NAMErfrd DEFAULT_FSAGENT_SEED_DIRrrr>rtrqrIMDS_RETRY_CODESpartialrrr9rFrQr__annotations__rr]rfrkrrr}rrrrrrr&res_diskrrrerrDEF_EPHEMERAL_LABELrjr+rrrr4r8r5r6rr=rBrWrrgrrrr;r%r(rrrr?rrrrcDataSourceAzureNetDEP_FILESYSTEMrrrBrCrDrs   """"""""",,,,,,,,,,,,$$$$$$8888888888888811111111'''''' 433333&&&&&&------(EDDDDDDDDDg!! !#346  #) ,  $ #4)"3 %'###=====4=== d*J#III###0!+.,&chsm"sstCyCDDD===777'Xc]''''V4? #J++A..H -...$x/ )***"!#56  e  !+nEEF ' '#W% /)" /$ /D / / / /TTTTTg(TTTn(###"    555 gNgNgNT&! ( ( ( ( (  ( ( ( ( VEEEE8...bEEEE3++++(    4 4 4GG GGGGT t       *     F    2222j"$"$"$"$L%w-/0 ;;;;;rC