fy# UddlZddlZddlZddlZddlZddlZddlZddlmcm Z ddl m Z ddl mZddlmZmZddlmZmZmZmZddlZddlmZmZmZmZmZddlmZmZddl m!Z!dd l"m#Z#m$Z$m%Z%dd l&m'Z'm(Z(dd l)m*Z*dd l+m,Z,m-Z-m.Z.m/Z/dd l0m1Z1ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?ddl@mAZA ddlBZBejeBjdejdZEeeFd<ejeNZOdZPddiZQdZRdZSdZTdZUGdde ZVdZWeeXeFd <gd!ZYd"ZZd#Z[d$eXd%eXd&eeXfd'Z\d(eXd&eXfd)Z]e7d&eeXfd*Z^e7d(eXd&eeXfd+Z_d`d&eXfd,Z`d-Zad.Zbd/Zcd&eeXfd0Zdejr6d1ZSedd2ZfefeOjd3d4efzZRneOjd5dZWeTd6eRid7d7d8Zhd6d9d:gd7d;ieSdZid?ePgZjd@ZkdAZldBZmGdCdDejZodEZpdFZqdGZrdHZsdIZtdadJZue7dKZve7dLZwe7eRdMdMfdNeXdOeXdPexdQexfdRZye7d`dSZze7dTZ{dUZ|e7dVZ}e7eWfdWZ~e7dXZe7dYZe7dZed[exd&efd\Ze7d&efd]Ze7d`d^ZeoZeoej ffgZd_Zy#eGeHf$r8 ddlIZJeJjjjZEn#eG$rdZEYnwxYwYwxYw)bN)Enum)Path)sleeptime)AnyDictListOptional)netsourcesssh_utilsubputil) EventScope EventType) device_driver)NoDHCPLeaseErrorNoDHCPLeaseInterfaceErrorNoDHCPLeaseMissingDhclientError)EphemeralDHCPv4EphemeralIPv4Network)events)errorsidentityimdskvp)netlink) DEFAULT_WIRESERVER_ENDPOINTNonAzureDataSource OvfEnvXmlazure_ds_reporterazure_ds_telemetry_reporterbuild_minimal_ovf dhcp_log_cbget_boot_telemetryget_metadata_from_fabricget_system_inforeport_diagnostic_eventreport_dmesg_to_kvpreport_failure_to_fabric)UrlErrorz$6$)strlen)salt blowfish_hashctd)zRaise when called so that importing this module doesn't throw ImportError when ds_detect() returns false. In this case, crypt and passlib are not needed. z/crypt and passlib not found, missing dependency) ImportError)_s C/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceAzure.pyr/r/@s A Azure instance-idziid-AZURE-NODEz/dev/disk/cloud/azure_resourceext4z/var/lib/waagentz/dev/sr0c eZdZdZdZdZdZdZy)PPSTypeNonePreprovisionedOSDiskRunningSavableUnknownN)__name__ __module__ __qualname__NONEOS_DISKRUNNINGSAVABLEUNKNOWNr4r3r9r9Ws D$GGGGr4r9z/sys/firmware/acpi/tables/OEM0PLATFORM_ENTROPY_SOURCE)z"/etc/netplan/90-hotplug-azure.yamlz /usr/local/sbin/ephemeral_eth.shz+/etc/udev/rules.d/10-net-device-added.rulesz#/run/network/interfaces.ephemeral.dcP|jD]}tjd|s|j}t |dk\s9|djd}t |dk\s\|ddk(se|dj |sz|djd}|dcSy ) z dev.storvsc.1.%pnpinfo: classid=32412632-86cb-44a2-9b5c-50d1417354f5 deviceid=00000000-0001-8899-0000-000000000000 pnpinfo=rdeviceid.N) splitlinesresearchsplitlen startswith) sysctl_outrNlinefieldscolumnscompss r3"find_storvscid_from_sysctl_pnpinfor\ks%%' $ 99Z &ZZ\F6{a )//#.LA% j0 --h7"1IOOC0E 8O $ r4c|jD]/}tj||s|j}|dcSy)z scbus0 on ata0 bus 0 scbus1 on ata1 bus 0 scbus2 on blkvsc0 bus 0 scbus3 on blkvsc1 bus 0 scbus4 on storvsc2 bus 0 scbus5 on storvsc3 bus 0 scbus-1 on xpt0 bus 0 rN)rQrRrSrT)camcontrol_outdisk_drvrXitemss r3find_busdev_from_diskrasC))+ 99Xt $JJLE8O r4r^busdevreturnc|jD]S}tj||s|jd}t |dk(s:|djd}|dcSy)z at scbus1 target 0 lun 0 (cd0,pass0) at scbus2 target 0 lun 0 (da0,pass1) at scbus3 target 1 lun 0 (da1,pass2) (rLrO,rN)rQrRrSrTrU)r^rbrXr`dev_passs r3find_dev_from_busdevrhsc))+# 99VT "JJsOE5zQ 8>>#.{" # r4macc t|dk(r)dj|dd|dd|dd|dd|dd|ddg}|jS) z1Normalize mac address with colons and lower-case. :rrL )rUjoinlower)ris r3normalize_mac_addressrss] 3x2~hh 1Xs1QxQq3q8S2YBr K  99;r4cxtjDcgc]}|ddk(rt|dc}Scc}w)z-Get Hyper-V NICs as normalized MAC addresses.rL hv_netvscrO)r get_interfacesrs)ns r3get_hv_netvsc_macs_normalizedrxsB ##%  Q4;  ad#  s7c,tjDcgc]}|t|dk(r|d}}d|vryt|dk(r&t d|d|t j |dSt d|d|t jy cc}w) z0Determine the device driver to match on, if any.rOrLruz'Assuming driver for interface with mac=z drivers= logger_funcrz0Unable to specify driver for interface with mac=N)r rvrsrUr(LOGdebugwarning)riidriverss r3determine_device_driver_for_macrs ##% '!- - !G g 7|qG   qz  KK +sBc tj|jS#tj$r*tj ddj ||cYSwxYw)NzFailed to execute: %s )rstdoutProcessExecutionErrorr|r}rq)cmdfail_rets r3execute_or_debugrsLyy~$$$  % % )388C=9s!:AAc tddgdS)Nsysctlz dev.storvsc)rrrGr4r3get_dev_storvsc_sysctlrs X}5 CCr4ctgdS)N) camcontroldevlistz-brrGr4r3get_camcontrol_dev_busrs ; < ? II- .!!),G "#3W =F &~v> ? II- . r4z freebsd-ufsrOzresource disk is not None/dev/zresource disk is None ephemeral0T)data_dir disk_aliasesapply_network_config&apply_network_config_for_secondary_ipsgptd) table_typelayout overwritez ephemeral0.1) filesystemdevice) disk_setupfs_setup datasourcenever_destroy_ntfszTemporary StorageREDACTEDc eZdZdZej ejejhiZ dZ e jZ dZdZdeddffd Zd Zd Zed edefd Zedd ddddeededededef dZedIdZdefdZedZededefdZdJfd Z edZ!edZ"dZ#dZ$ede%efdZ&d e'de%efd!Z(de%efd"Z)d#Z*d$Z+dKd%Z,ed&Z-e dLd'ed(ede.fd)Z/ed*Z0ed dd+d,ed-eddfd.Z1ed/Z2ede3jffd0Z4ed1Z5edId2Z6ed3Z7ed4Z8ede9fd5Z:e dMd6e;jxd7edefd8Z=edd9d:ee%edee%efd;Z>d e'deefd<Z?d=e'd e'de@fd>ZAed?ZBed@e'd e'dee%efdAZCdBZDedCZEeFdDZGedEZHeFdFZIeFdGZJed e'defdHZKxZLS)NDataSourceAzurer5FrOctjj||||tjj |j d|_i|_d|_tjtj|titg|_d|_d|_d|_d|_d|_t(|_tjj |j,dd|_y)NazureFdatareported_ready)r DataSource__init__ospathrqseed_dircfgseedr mergemanydictget_cfg_by_path DS_CFG_PATHBUILTIN_DS_CONFIGds_cfg_iso_dev_network_config_ephemeral_dhcp_ctx_route_configured_for_imds _route_configured_for_wireserverr_wireserver_endpoint cloud_dir_reported_ready_marker_file)selfsys_cfgdistropathss r3rzDataSourceAzure.__init__Es##D'65A U^^W=  ((  ! !'; ;=N O   ##' */'05-$?!+-77<< OOV%5, (r4ci_pkl_versionrcNct||d|_d|_d|_d|_t |_tjj|jjdd|_ y)NFrr)super _unpicklerrrrrrrrrqrrr)rr __class__s r3rzDataSourceAzure._unpickleWs^ .)#'  */'05-$?!+-77<< JJ &*:, (r4cdtjj|}|d|jdS)Nz [seed=])r r__str__r)rroots r3rzDataSourceAzure.__str__cs'!!))$/!%tyy11r4c|jd}n@|jjdrd}n"|jjdk(rd}nd}|d|jdS)z/Return the subplatform metadata source details.unknownz/devz config-diskrzseed-dir ())rrVrr)rsubplatform_types r3_get_subplatformz DataSourceAzure._get_subplatformgsX 99 (  YY ! !& ),  YY__ & (% ) ,dii88r4ephipv4c|jsy|jDcgc]}|djdd}}d|v|_|j|v|_|jxs |jScc}w)NFr/z169.254.169.254) static_routesrTrrr)rrrrouted_networkss r3_check_if_primaryz!DataSourceAzure._check_if_primaryss$$7>7L7LM!1Q4::c?1-MM+<*N'  % % 8 -  + + 544 NsA2T)ifacereport_failure_if_not_primary retry_sleeptimeout_minutesrrrrc|j tdtd|dtjt j t|j|t|_d}t}||dzz}tjdd t 5|= |jj}|t|z|kr t=|nn|=|d|_t-|d}||j_d|vr |d|_ tC|} |jjD} | td|jG| } td|d| d| d| jHd| jJd|d|jLd |jNd!t j |rA| s?|j#t%jP|| | jH| jJ|"d | cdddS#t$rQtd t j |j#t%j&t|z d Yt($r$tdt j*d|_t,$rUtd|zt j*|j#t%j.t|z |d Y"t0j2$rZ}td|j4d|j6d|j8d|j:t j*Yd}~d}~wwxYw#1swYyxYw)#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. :returns: True if NIC is determined to be primary. Nz/Bringing up networking when already configured.z,Bringing up ephemeral networking with iface=: rz)r dhcp_log_func<zobtain-dhcp-leasezobtain dhcp leasename descriptionparentzInterface not found for DHCP)durationT host_onlyzdhclient executable not foundz&Failed to obtain DHCP lease (iface=%s))r interfacezCommand failed: cmd=z stderr=z stdout=z exit_code=rz unknown-245zdhcp context missing ephipv4z!Obtained DHCP lease on interface z (primary=z driver=z router=z routes=z lease=z imds_routed=z wireserver_routed=r)rdriverrouterrlease))r RuntimeErrorr(r rvr|r}rrr$rrReportEventStackr! obtain_leaserr~_report_failurer$ReportableErrorDhcpInterfaceNotFoundrerrorrReportableErrorDhcpLeaserrrstderrr exit_coderrrr_ephipv4rrrrr(ReportableErrorDhcpOnNonPrimaryInterface) rrrrrr start_timedeadlinerrrprimarys r3_setup_ephemeral_networkingz+DataSourceAzure._setup_ephemeral_networkings.*  # # /A  c((* ,  $3 KK%$  V " 44  $ $$+$ h  -, 44AACE\=TVk%9H%D+&g-j}+/(&((+&E-2D $ $ *%,1-,@)"5)F..77G"#ABB,,W5G # NN))3399  II "-W$$CC"'%&~~&-&;&;# #% Qh h 1 +6CKK((CC%)Vj%8#' ) 7+7SYY04D,' +@5H$'II((77%)Vj%8E#' ) 11 +"II!LL!LL!OO %(II   Mh h sXM  G<:!M DM ' BC >>'*(7;}}!2%84L#u8<}}!284L#u%(DM3DS3I0B c5 '7*D # +' BFC  $CS[[ A"&dmm!4!J d8J 6"A   , ,_ , M  + + -111FG:-,C #C (2237 7++C9 w|| # ='C66s;;3357'C66s;;7??*002W__,002W__,335002+/+<+<+> (B c5111FG 227;LD',,*<*<#==$$==6l ++G+<(&  ..VW4E/FG ,   ,G4 +G4 ;G D  II8- H9FC ~ .v 6  II8- H9FL $%5 6 II:%  &  $"  99 |G'< ,**"7 *7(A W%/8M 89393C3C 3 3 564L0   #*T1syy  ! 6:L $] 326))+ Z /   u $)I)I)K@@AK (--+-F  3X>>FL,];%%'|E& ':S@ # (( '*S0cii  ,    l '?!C #   !+.CKK,  sfBT7VV(=5W1X7'V!0VV V%$V%( W1WW$XX XXrc4t}|dz}|jsd}nd}d}d} tj||S#t$rk}t |}t|z }t j||}|js&t|jtjrd}Yd}~n:d}~wt$r+}t |}t j|}Yd}~nd}~wwxYw|j|| td|zt j" iS) Ni, )max_connection_errorsretry_deadline) exceptionrF)rarz!Ignoring IMDS metadata due to: %srz)rrr fetch_metadata_with_api_fallbackr+rrReportableErrorImdsUrlError isinstancecauserequestsConnectionError ValueError+ReportableErrorImdsMetadataParsingExceptionrr(r|r~) rrr r`r_ error_string error_reportrrs r3r3z&DataSourceAzure.get_metadata_from_imdssV #c)..$& !$( !&* 9=  88&;-  'u:Lv *H!==(L22z X558"' u:L!MML  \5GH /, >   s"= C#A!B,, C#8!CC#cVtt| |tj|_y)z.Reset any cached class attributes to defaults.N)rrclear_cached_attrsr UNSET_metadata_imds)r attr_defaultsrs r3rmz"DataSourceAzure.clear_cached_attrs-s ot7 F%mmr4ctjj}|y|jyt |jdj S)zQCheck platform environment to report if this datasource may run. TFr()rChassisAssetTag query_systemrrexists)r chassis_tags r3 ds_detectzDataSourceAzure.ds_detect2sJ ..;;=  " == DMM=188::r4c t t  t j tjd|j} |j|jr>|jjdk(r%|j j#dr t%t&}t(j*j-|rBt/d |ztj t j0|d t2g|_n(t/d |ztj |d |_|d d|_t j0|d t8g|_|d|_t?|j d|ddy#t$r!}tjd|Yd}~d}~wwxYw#t$r!}tjd|Yd}~d}~wwxYw#tj$r+}|j|Yd}~|jyd}~wt$r@}tj|}|j|Yd}~|jyd}~wwxYw#|jwxYw)zCrawl and process datasource metadata caching metadata as attrs. @return: True on success, False on error, invalid or disabled datasource. z Failed to get boot telemetry: %sNz$Failed to get system information: %szCrawl of metadata service)logfuncrQfuncFubunturzXEphemeral resource disk '%s' exists. Merging default Azure cloud ephemeral disk configs.rzrzdEphemeral resource disk '%s' does not exist. Not merging default Azure cloud ephemeral disk configs.r"rr#rr!i)dirmodeT) r%rBr|r~r'rlog_timer}r\rReportableErrorrr!ReportableErrorUnhandledExceptionrrrget*maybe_remove_ubuntu_network_config_scriptsRESOURCE_DISK_PATHrrrtr(r#BUILTIN_CLOUD_EPHEMERAL_DISK_CONFIGrroDEFAULT_METADATAr"r# write_files)rrYrLrreportable_errordevpaths r3 _get_datazDataSourceAzure._get_dataAs4 ?   C   2== /((L  / / 1 KK   H,  67 6 8 % 77>>' " #F II   ))e$&IJDH $J II   $E*DH*:6v>** * %'7 8  )8  KK #\'%:E E ? KK:A > > ?  C KK> B B C%%    '  / / 1  %GGN   !1 2  / / 1    / / 1si F F80G% F5F00F58 G"GG"%I*8H I- I**&I%I-%I**I--I?c|jrd|jvr|jSt|jdS)Nr6)r"rGrrs r3get_instance_idzDataSourceAzure.get_instance_ids4}} T]] B99; 4==/00r4c>|jdj|S)Nr)rr)rrs r3device_name_to_devicez%DataSourceAzure.device_name_to_devices{{>*..t44r4c |j|jdS#ttf$rY|j SwxYw)z+ Retrieve public SSH keys. r)_get_public_keys_from_imdsr"KeyErrorrh_get_public_keys_from_ovfrs r3get_public_ssh_keysz#DataSourceAzure.get_public_ssh_keyssG  224==3HI I*%  --// s AArcv |ddDcgc]}|d }}t d|Dr(d}t|tjt |dj t|}t|tj|Scc}w#t$rd}t|tjwxYw) 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. compute publicKeyskeyDataz"No SSH keys found in IMDS metadatarzc36K|]}t| yw))rN)_key_is_openssh_formatted).0rs r3 z=DataSourceAzure._get_public_keys_from_imds..sJ#,55JszKey(s) not in OpenSSH formatzRetrieved {} keys from IMDS)rr(r|r}anyrhrrU)rr public_keyr[log_msgs r3rz*DataSourceAzure._get_public_keys_from_imdss #*)"4\"B9%H JJ J4G #G CW% %/66s8}ESYY?! :G #G C  s B B B B(B8cg} |jd}djt|}t|tj |S#t $r!d}t|tj Y|SwxYw)zYGet SSH keys that were fetched from wireserver. :returns: List of keys. r,zRetrieved {} keys from OVFrzzNo keys available from OVF)r"rrUr(r|r}r)rr[rs r3rz)DataSourceAzure._get_public_keys_from_ovfsq  D}}]3H299#h-HG #G C   D2G #G C  DsAA &A43A4c|jSNrrs r3get_config_objzDataSourceAzure.get_config_objs xxr4cHtj|jSr)r instance_id_matches_system_uuidr)rrs r3check_instance_idz!DataSourceAzure.check_instance_ids66t7K7K7MNNr4cztjj|jj dd}t j }tjj|rNtj|j}t j|}|j||fvr|S|S)Nrr6) rrrqr get_cpathrquery_system_uuidrtrload_text_filestripbyte_swap_system_uuidrr)rprevious prev_iid_path system_uuid swapped_ids r3rGzDataSourceAzure._iids JJ  (- 002 77>>- (**=9??AH!77 DJ ~~K#<<r4c~ d}tjddt5tj|}ddd|d}t |t jyt d|zt jy#1swYHxYw#t$r*}t t|t jd}~wwxYw)zUse the netlink socket provided to wait for nic detach event. NOTE: The function doesn't close the socket. The caller owns closing the socket and disposing it safely. Nzwait-for-nic-detachzwait for nic detachrzHPreprovisioned nic not detached as expected. Proceeding without failing.rzz%The preprovisioned nic %s is detached) rrr!rwait_for_nic_detach_eventr(r|r~r}AssertionErrorrr)rnl_sockifnamerQrs r3_wait_for_nic_detachz$DataSourceAzure._wait_for_nic_detachs  F((*1( D !::7C  D ~2(E';fD #  D D"  #CJCII F  s3B A='B B =BB B<%B77B<rretriesct|D][}|jjj|r t d|zt j y|dz|ksQt|]t d|||zfzt j y)NzThe link %s is up.rzrOz;The link %s is not up after %f seconds, continuing anyways.)ranger networkingtry_set_link_upr(r|infor)rrrrrs r3wait_for_link_upz DataSourceAzure.wait_for_link_upsw A{{%%55f='(61sxxA k"  $M7[012HH r4c|j}tjd|tj|dj t jttdtjy)Nz*Creating a marker file to report ready: %sz{pid}: {time} )pidrzRSuccessfully created reported ready marker file while in the preprovisioning pool.rz) rr|rr write_filerrgetpidrr(r})rrs r3_create_report_ready_markerz+DataSourceAzure._create_report_ready_markers\// =tD  #**ryy{*H   1  r4) create_markerexpect_url_errorrrcV |jd|_ |r|jyy#t$rr}|r3t|tr#t dt j d|_n3d}t |t jtj||Yd}~d}~wwxYw)zReport ready for PPS, creating the marker file upon completion. :raises sources.InvalidMetaDataException: On error reporting ready. z,Ignoring http call failure, it was expected.rzNz9Failed reporting ready while in the preprovisioning pool.F) rJrBrdr+r(r|r}rrr r4rHr)rrrrrQs r3_report_ready_for_ppsz%DataSourceAzure._report_ready_for_pps&s G    ,!   , , . / G  Juh$?'B #  !% P(C66s;F  Gs- B(A(B##B(ctjd g}d} d}tjddt |zt 5t j||}ddd|j|td|ztj|j||s*tjd ||j|d d }|rtjd y|j#1swYxYw#t$r.}tt|tjYd}~yd}~wwxYw) z6Wait until the primary nic for the vm is hot-attached.z*Waiting for primary nic to be hot-attachedFNzwait-for-nic-attachz4wait for nic attach after %d nics have been attachedrzDetected nic %s attached.rzz!Checking if %s is the primary nicr)rrrzFound primary nic for this VM.)r|rrrrUr!rwait_for_nic_attach_eventappendr(rr rrrr)rr nics_foundprimary_nic_foundrrs r3"_wait_for_hot_attached_primary_nicz2DataSourceAzure._wait_for_hot_attached_primary_nicMs7 =>3 GJ %  ,,.Nj/*-  %>>F !!&)'/&8chh %%f- )HH@&I(,(H(H$(*6;)I)%%HH=>779Q  P G #CJCII F F Gs6/DC:B D)D:D?D D=$D88D=c tjS#tj$r$}td|tj d}~wwxYw)Nz!Failed to create netlink socket: rz)rcreate_bound_netlink_socketNetlinkCreateSocketErrorr(r|r)rrs r3_create_bound_netlink_socketz,DataSourceAzure._create_bound_netlink_socketsJ 668 8//  #3E7;II    sA AA c|jdtdtjt dt j )z4Report ready and wait for host to initiate shutdown.F)rz"Waiting for host to shutdown VM...rzi3)rr(r|rrrReportableErrorOsDiskPpsFailurers r3r8z.DataSourceAzure._wait_for_pps_os_disk_shutdowns? """7 0  h4466r4cZ|j} |j|jj td|jj}|j t j d|tjddt5 tj||ddd|j|j!y#t$r(}td|zt jYd}~Ud}~wwxYw#1swY^xYw#|jwxYw) z9Report ready and wait for nic link to switch upon re-use.Nzmissing ephemeral contextz#Wait for vnetswitch to happen on %sz!wait-for-media-disconnect-connectzwait for vnet switchrz'Error while waiting for vnet switch: %srz)rrrrrr|r}rrr!r!wait_for_media_disconnect_connectrr(rcloser)rrrrYs r3r6z+DataSourceAzure._wait_for_pps_running_reuses335 ((0++119"#>??,,22E  & & ( II5 ((82(  ==guM  MMO ++-&+AAE$'II   MMOsHBDD C/D D !D?D D  D  DDD*c|j} |jd |j|j||j||jy#tj$r/}t d|zt jd|_Yd}~pd}~wwxYw#|jwxYw)z@Report ready and wait for nic(s) to be hot-attached upon re-use.T)rzLIgnoring failure while tearing down networking, NIC was likely unplugged: %rrzN) rrrrrr(r|rrrrr)rrrYs r3r7z+DataSourceAzure._wait_for_pps_savable_reuses335   & & & = 0335  % %g .  3 3G < MMO-- 0'3567 # ,0((  0 MMOs3B-A("B-(B*;%B% B-%B**B--B?ctjj|jry|j |j y)z0Report ready if needed for unknown/recovery PPS.N)rrisfilerrrrs r3r9z+DataSourceAzure._wait_for_pps_unknown_reuses7 77>>$:: ;  ""$ ++-r4cd}d}|sf|js|dz } |jdtjddt 5 t j} ddd|sftd |ztj |S#t$rYwxYw#t$r|jYdddwxYw#1swYbxYw) z0Poll IMDs for reprovisiondata XML document data.rNrOrrzget-reprovision-data-from-imdszget reprovision data from imdsrz#attempted dhcp %d times after reuserz) rr rrrr!rfetch_reprovision_datar+rr(r|r})r dhcp_attemptsreprovision_datas r3 _poll_imdszDataSourceAzure._poll_imdss "335" 44Q4G((5<(  '+'B'B'D$ #& 1M A   %( 779    s;B C B BBC5C?CCC rrctd|jtjt t j |}|r|S|jr; tdtjt|j|d|_ y tdtj|j |jd t|j|d|_ y#t$r(}td|ztjYd}~d}~wwxYw#t$rY^wxYw#t$r(}td |ztjYd}~y d}~wwxYw) aReport failure to Azure host and fabric. For errors that may be recoverable (e.g. DHCP), host_only provides a mechanism to report the failure that can be updated later with success. DHCP will not be attempted if host_only=True and networking is down. @param error: Error to report. @param host_only: Only report to host (error may be recoverable). @return: The success status of sending the failure signal. z#Azure datasource failure occurred: rzz>Using cached ephemeral dhcp context to report failure to Azure)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(as_encoded_reportr|rr)rreport_failure_to_hostrr}r*rrHrBrr r)rrrreportedrYs r3rzDataSourceAzure._report_failuresc 1%2I2I2K1L M   --e4 O  + + - '1 #  )!66e$(   #EII   / / 1 000D %22%  $D - '8:;< #  $    #G!KII     sT!9C9+D<D-D<9 D*D%%D*- D96D<8D99D<< E-E((E-r*r+cttj t|j|j |j |}d|_d|_ |S#t$r$}td|ztjd}~wwxYw)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. )rriso_devr+zQError communicating with Azure fabric; You may experience connectivity issues: %srzNT) r)rreport_success_to_hostr&rrrrBr(r|r~rH)rr+rrYs r3rJzDataSourceAzure._report_readyDs  ""$ +22{{ ' D    #*,-.KK    s-A B &BB c |dddS#t$r(}td|ztjYd}~yd}~wwxYw)NextendedrppsTypez2Could not retrieve pps configuration from IMDS: %srz)rBr(r|r})rrrYs r3r;z"DataSourceAzure._ppstype_from_imdsgsH :&y1)< <  #DqHII   s >9>ovf_cfgctjj|jrtj }na|j ddtjjk(s,|j|tjjk(rtj}n|j ddtjjk(s,|j|tjjk(rtj}n|j ddusY|j ddtjjk(s,|j|tjjk(rtj}ntj}td|jztj|S)z@Determine PPS type using OVF, IMDS data, and reprovision marker.PreprovisionedVMTypeNPreprovisionedVmTz PPS type: %srz)rrrrr9rFrrErr;rCrDrBr(r|r)rrrrSs r3r5z#DataSourceAzure._determine_pps_typeqs, 77>>$:: ;H KK. 59N9N N&&w/7??3H3HHH KK. 59N9N N&&w/7??3H3HHH KK* +t 3{{148$$%&&w/7??3H3HHH||H X^^ + r4c|j}tjddt5t |\}}}|||d|ifcdddS#1swYyxYw)zrInitiate the reprovisioning workflow. Ephemeral networking is up upon successful reprovisioning. zreprovisioning-read-azure-ovfz$read azure ovf during reprovisioningrr(N)rrrr!read_azure_ovf)rrXrOudrs r3r:zDataSourceAzure._reprovisions_ ??$  $ $0>$  < )2KBCC-!:;  < < ###r4cx|jjdijdijdS)Nrrlocationrrs r3regionzDataSourceAzure.regions1}}  ,00B?CCJOOr4czt} |d}|dDcgc]}t|d}}|Dcgc] }||vs| }}|sytd|d |t j |jr|jjsytj|jj}|rt|tsyt|}||vr!td |d |t j ycc}w#t$r0td|j dzt j YywxYwcc}w) z=Validate IMDS network config and report telemetry for errors.rr macAddressz6IMDS network metadata has incomplete configuration: %rrzFTz8IMDS network metadata is missing configuration for NICs rz-IMDS network metadata is missing primary NIC ) rxrsrr(rr|r~rrr get_interface_macrdr) rr local_macsrr imds_macsm missing_macs primary_macs r3r=z.DataSourceAzure.validate_imds_network_metadatas>34  $Y/N( 4&a o6I$.Da)1CD D^ -  ''t/G/G/M/M++D,D,D,J,JK *[#">+K8 , & #0KK  O  #H++i()KK    Es+ C<C7C< D8D87C<<6D54D5)rcN)rGr)rg?)F)Mr?r@rAdsnamerNETWORKrBOOT_NEW_INSTANCEBOOTdefault_update_eventsrHr rnro_ci_pkl_versionrintrrrr"rr2rr rr rrr\rr3rmrvrrrr rdictrrrrrGrfloatrrrrsocketrr8r6r7r9bytesrrr}rrJr;r9r5r:rIrKrpropertyrrrrr= __classcell__)rs@r3rr9s} F  ' ' NN  K]]NO $      2 9! )= $ ! *! $.2 O}O(, O  O  O O!Ob!(!( T !O!Ob!+T+d+!+Z, ! ;! ;!J!JX1 5! 0T#Y 0! 0$49649 O"!!>!DG$' |ddddk(S#t$rYywxYw)NrrdisablePasswordAuthenticationtruerr s r3rArA<s; i  -.M N   s  cd|jvrytj} |j|}|j duS#t$rYywxYw)z? Validate whether or not the key is OpenSSH-formatted. z FN)rr AuthKeyLineParserparse TypeErrorkeytype)rparserakls r3rrFs[   ' ' )Fll3 ;;d "" sA AAcdD]|}g}td|D]c}||zt|z}tjj |s4|j |tjj |fe|sz|cSgS)N)z-partprrO)rrrrrtrrealpath)rmaxnumsufffoundpnumppaths r3_partitions_on_devicer9Ws"!V$ >DdNSY.Eww~~e$ dBGG$4$4U$;<= > L Ir4ctjdd}tjd|tj j ||vS)Nz TYPE=ntfsT)no_cachezntfs_devices found = %s)rfind_devs_withr|r}rrr3)r ntfs_devicess r3_has_ntfs_filesystemr>ds=&&{TBLII'6 77  G $ 44r4c n|r$ddjtdtd}d|fStjj |sdd|zfSt jd|tjj|t|}t|dk(rdd|zfSt|d kDr,d |d d j|Dcgc]}|d  c}}d|fSt|d k(r |d \}}n|d\}}t|sd|d|d|d}d|fStd}d|d|d|d}tjddt5} t!j"||dddid} | dk7rKd!| z| _t j+d"djttd|d#| zzfcdddS dddd|d$zfScc}w#t j$$rI} d| _dt)| vrd|dzfcYd} ~ cdddSd|d|d | zfcYd} ~ cdddSd} ~ wwxYw#1swYtxYw)%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 (rPz), skipping checksFzdevice %s does not existzResolving realpath of %s -> %srzdevice %s was not partitionedrLzdevice z had 3 or more partitions: rrOz partition rz ) on device z was not ntfs formattedctddg}ttj|Dcgc]}|j |vs|c}Scc}w)Nzdataloss_warning_readme.txtzsystem volume information)setrUrlistdirrr)mpignoredfs r3 count_filesz+can_dev_be_reformatted..count_filessE *,G H rzz"~J!'1IAJKKJs A A z was ntfs formattedzmount-ntfs-and-countrntfsLANGC)rupdate_env_for_mount log_errorzcannot 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.)rqrrrrrtr|r}r3r9rUr>r"rrr!rr/r1rrr~) rrrQ partitionsr2 cand_part cand_pathrFbmsgevt file_countrYs r3can_dev_be_reformattedrRks& HH[ ! $ cz 77>>' "07:::II('2773C3CG3L 'w/J :!5??? Z1   HHJ/qad/ 0 cz ZA )!} 9)!} 9  *     cz L!L  D  #*  #I  P&,c] J( ?>' " :W D    2W <  F C4 ,WmD II$fc2 ' 1'',,|UIOD07= 77>>' " @ '" -. II)4 0 1 % @ 5tQ?? @s$+D)) E2EEcd}|sy|si}tj|||jD]J\}}tjj ||}d|vr |||}tj ||dLy)Nc, tj|}|jD]0}d|jvs|jt k7s&t |_2tj |S#t$rtjd||cYSwxYw)z>Azure provides the UserPassword in plain text. So we redact it UserPasswordz#failed to redact userpassword in %s) ET fromstringitertagtextDEF_PASSWD_REDACTIONtostringrBr|critical)cntfnamerelems r3_redact_passwordz%write_files.._redact_passwords~ ==%D  5"dhh. %99 4DI  5 ;;t$ $  LL> FJ s6A/A/ !A//!BBr(i)filenamecontentmode)r ensure_dirr`rrrqr)datadirr!r{rkrrmris r3rrsx   OOGW%E g Wd+ D &w6G eD Er4c4tj|}i}i}|jxsd}|jr|j|d<|jr|j|d<|j |j |d<n|j rd|d<i}|jr|j|d<|j r0d|d<t|j k7rt|j |d <|rd |i|d <|j|d <td |jztj|j|d<td|jztj|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 errors.ReportableError: if XML is unparsable or invalid. rrr ssh_pwauthTrF lock_passwd hashed_passwdrrrzPreprovisionedVm: %srzrzPreprovisionedVMType: %sProvisionGuestProxyAgentzProvisionGuestProxyAgent: %s)r parse_text custom_datar& public_keysdisable_ssh_password_authpasswordr%re encrypt_passpreprovisioned_vmr(r|rpreprovisioned_vm_typeprovision_guest_proxy_agent)rXovf_envrOrrdefusers r3rr"s""8,GB C    "B&// !--J((4 ' A AAL    LG!**!&  7#3#3 3'3G4D4D'EGO $,g6M%77C!:!::HH #*"@"@C"W%C%CCHH '.&I&IC"#&)L)LLHH C=r4ct|Sr)r/)rzs r3r{r{Zs  ""r4c t|5}|jd dddy#1swYyxYw#t$rtj d|YywxYw)z;Return boolean indicating path to cdrom device has content.iNTzcdrom (%s) is not configuredF)openreadIOErrorr|r}) cdrom_devfps r3_check_freebsd_cdromr^sZ= )_  GGDM     = 0)< =s# 5)5255AAc||ytj|d}tj|j S)zIReturn content random seed file if available, otherwise, return None.NT)quiet)rload_binary_filerD b64encodedecode)sourcers r3rFrFjs: ~  t 4D   D ! ( ( **r4c#K|ttjrd}t|r,|n'dD]"}tjd|zEd{$|r|yy7w)Nz/dev/cd0)iso9660rzTYPE=%s)DEFAULT_PROVISIONING_ISO_DEVrr.rr<)r cache_dirrfstypes r3r-r-sg J &&   *O( ?F**9v+=> > > ? ?sAA&A$A&c&tjj|d}tjj|s t dt |d5}|j }dddt\}}}|||d|ifS#1swY xYw)Nr(zNo ovf-env file foundrb)rrrqrrrrr) source_dirovf_filerrXrOrrs r3r0r0sww||J 6H 77>>( # !899 h 779!*KBC C-2 33 s BBnetwork_metadatarc did}t|dD]Z\}}d}dj|}d|dzd zi}d |dd }d D]} |j| ijd g} | stj d| |?d }| dk(rd} nd} | r d |d<||d<|sZ| ddD]]} || ddjd| } | d}|jdsg|d<|dj dj|| _|rS|rQt |d}|jd|ji|dt|}|r||dd <||d!|<Ctj d"|||]|S)#zConvert imds network metadata dictionary to network v2 configuration. :param: network_metadata: Dict of "network" key from instance metadata. :return: Dictionary containing network version 2 standard configuration. rL)version ethernetsrFzeth{idx})idxz route-metricrOrT)dhcp4zdhcp4-overridesdhcp6)ipv4ipv6 ipAddresszNo %s addresses found for: %rr24128rzdhcp6-overridesNsubnetrprefixprivateIpAddress addressesz {ip}/{prefix})iprr macaddress)matchzset-namerrrzrrr)rr netconfigrintfhas_ip_addressnicname dhcp_override dev_config addr_typerdefault_prefixaddr netPrefix privateIprirs r3rrs-.B ?I/ <== T###,'#'S9 ,& * IB/33KDI 99dK!NF"!%!&*.Jw'5BJ019!!"  OH5a8<<n !!34 !~~k2.0J{+;'..#**i *J - B .'\(:;C   '57K 5S9F06 7#H-.8Ik "7 +  J     q= | r4c:tjd}|iS|S)ztGenerate fallback network config. @return: Dictionary containing network version 2 standard configuration. T) config_driver)r generate_fallback_configrs r3rrs#  & &T :C { Jr4c|st}d}|D]}tjj|s#|sJtj dt jjt jjgd}tjj|rtj|tj|y)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_SCRIPTSrrrtr|rrrr BOOT_LEGACYisdirrdel_dirr)rloggedrs r3rrs& / F $ 77>>$ -^^))9+@+@+F+FG  ww}}T" T" d# $r4c6tj|tSr)r list_from_depends datasources)dependss r3get_datasource_listr&s  $ $Wk ::r4r)r,)rD functoolsloggingros.pathrRrxml.etree.ElementTreeetree ElementTreer`enumrpathlibrrrtypingrrr r rf cloudinitr r r rrcloudinit.eventrr cloudinit.netrcloudinit.net.dhcprrrcloudinit.net.ephemeralrrcloudinit.reportingrcloudinit.sources.azurerrrrcloudinit.sources.helpersrcloudinit.sources.helpers.azurerrr r!r"r#r$r%r&r'r(r)r*cloudinit.url_helperr+cryptpartialrand_strr/__annotations__r1AttributeError passlib.hashpasslibhash sha512_crypt getLoggerr?r|DS_NAMErr DEFAULT_FSAGENT_SEED_DIRrr9rHrrr\rarhrsrxrrrrrrr.res_diskr}rrrrDEF_EPHEMERAL_LABELrerrr?rCr@rArr9r>rRr2rrrr{rrFr-r0rrrrDataSourceAzureNetDEP_FILESYSTEMrrrGr4r3rsw  "",,881' J&??-**** C  R 89:M3(g! !#346  #)d*J#I#,&chsm"sstCy#4CD=7'Xc]'V4??J+A.H -.$x/ )*"!#56 .2  e !+nEF '#W% /)"kg((k\'#" 55 jNjNZ&! ( ( ( (  ( ( VEE844n#3++(   4 4JJ-1J JJZt"$"$L%w--/0 ;[? ^$  1166     s66;J##K"+$KK"KK"KK"!K"