܍~c ,<ddlZddlmZddlmZmZmZddlmZm Z ddl m Z ddl m Z ddlmZejeZdZd Zd eiZd Zd Zd ZedeDZGddejejZdZdZddZ dZ!ddZ"eZ#eej$ffgZ%dZ&dS)N)log)sourcessubputil) EventScope EventType)eni)get_ibm_platform) openstackziid-dsconfigdrivepass instance-id)vfatiso9660)zconfig-2zCONFIG-2)srcdc#JK|]}tddD] }d||V dS)rz/dev/N)range).0zis I/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceConfigDrive.py rsBHHaE!QKKHHqqAAqqHHHHHHHceZdZdZejejejej ej hiZ fdZ dZ dZdZedZedZdZxZS) DataSourceConfigDrive ConfigDrivec4tt||||d|_tj|jd|_d|_d|_ d|_ tj |_ d|_d|_i|_dS)N config_drive)superr__init__sourceospathjoinseed_dirversion ec2_metadata_network_configrUNSET network_json network_eni known_macsfiles)selfsys_cfgdistropaths __class__s rr!zDataSourceConfigDrive.__init__/s #T**33GVUKKK  U^^DD   ##M rctj|}|d|jd|jd}|d|jzz }|S)Nz [z,ver=]z [source=%s])r DataSource__str__dsmoder'r")r/rootmstrs rr7zDataSourceConfigDrive.__str__;sJ!))$//#'44dlllC -- rcd}i}i}|jdfD]e}tj|s" t |}|}n0#t j$rtjtd|YbwxYw|s|j d}t|D]}d}tj r|drd} tj|t|}|}nP#t j$rYn?tj$rYn/t j$rtjtd|YnwxYw|rn|sd S| d i}tj|t&g}|| d |j d |d d kr t,jndg|_|jt,jkrd St5|j}|d} || kr*t9||j|jt,jk|jt,jkr#td||jd S||_||_ | d|_!| d|_"|d |_#|j$%| di| d} | |_& t-j'| |_(n9#tR$r,} t*d| d|_(Yd} ~ nd} ~ wwxYw| d} | |_+ t-j'| |_,n9#tR$r,} t*d| d|_,Yd} ~ nd} ~ wwxYw| d|_-| d|_.dS)Nz /config-drivez#Failed reading config drive from %sdatasource_list)dslistz/dev/cdcd9660)mtypezBroken config drive: %sFmetadatar8r'r )r1networkz&%s: not claiming datasource, dsmode=%sz ec2-metadatauserdatar. vendordataz"Invalid content in vendor-data: %s vendordata2z#Invalid content in vendor-data2: %snetwork_config networkdataT)/r&r#r$isdirread_config_driver NonReadablerlogexcLOGr0getfind_candidate_devsis_BSD startswithmount_cbMountFailedErrorBrokenMetadata mergemanydictDEFAULT_METADATA_determine_dsmodeds_cfgr DSMODE_PASSr8DSMODE_DISABLEDget_previous_iidr2 on_first_bootr1debugr"r@r( userdata_rawr'r.updatevendordata_pureconvert_vendordatavendordata_raw ValueErrorwarningvendordata2_purevendordata2_rawr,r+) r/foundmdresultssdirr=devr?prev_iidcur_iidvdevd2s r _get_datazDataSourceConfigDrive._get_dataAsu ]O4 N ND7==&&  N+D11( N N N C!FMMMMM N \%%&788F*&999  ;==)~~i00) ( E"m.eG EE ,D,D /EEEK%>DDDDDEE 5 [[R ( (  %5 6 7 7,, H%% ))'.y'9Q'>'>##D     ;'1 1 15#DJ//]# w   { w'::     ;'- - - II8$    5  #KK77#KK 33y)  '++gr22333 [[ & &! '")"???##rcdS)Nr rys rplatformzDataSourceConfigDrive.platforms{rcZ|jdrd}nd}|d|jdS)z/Return the subplatform metadata source details.z/devz config-diskzseed-dirz ())r"rP)r/subplatform_types r_get_subplatformz&DataSourceConfigDrive._get_subplatforms@ ; ! !& ) ) *,  ) ,,,dkkk::r)__name__ __module__ __qualname__dsnamerNETWORKrBOOT_NEW_INSTANCEBOOT BOOT_LEGACYHOTPLUGsupported_update_eventsr!r7rprupropertyrFr|r __classcell__)r3s@rrr"s F   ' N  !          dddLOOO $ $X $X;;;;;;;rrctj|}|jgif|jgifg}g}|D]A\}}} ||i|cS#tj$r}||Yd}~:d}~wwxYw|d)N)r ConfigDriveReaderread_v2read_v1rJappend) source_dirreaderfindersexcpsfunctorargskwargsrns rrIrIs  ( 4 4F R R G E#*$ 7D+F++ + + +$    LLOOOOOOOO  )Os>A, A''A,ctj|dd} t j|dS#t$rYdSwxYw)Ndatar  )r#r$r% get_cpathr load_filerstripIOError)r2fnames rrZrZsj GLL00- @ @E~e$$++D111 tts&A A*)A*Tclt|tstdt|z|r[|dd}|rC|rAt d|tj |t|ddS)zDPerforms any first-boot actions using data read from a config-drive.z/Config-drive data expected to be a dict; not %srFz-Updating network interfaces from config driver.N) isinstancedict TypeErrortyperMrLrcapply_network_configr rxwrite_injected_files)rr1rBnet_confs rr[r[s dD ! !  =d L   H88,b11  H H KKG H H H  ' '(>>>> F F F C!:HEEEEE FFF F Fs3B  %B32B3c |g}|r5tD]-} tj|#tj$rY*wxYwg}t D],}|tjd|z-g tD],} tjd|z-|d d fd|Dz} fd|D}t d |||rJd |vrFt\}} | |vr1| | t d | ||S) aReturn a list of devices that may contain the config drive. The returned list is sorted by search order where the first item has should be searched first (highest priority) config drive v1: Per documentation, this is "associated as the last available disk on the instance", and should be VFAT. Currently, we do not restrict search list to "last available disk" config drive v2: Disk should be: * either vfat or iso9660 formatted * labeled with 'config-2' or 'CONFIG-2' N)r$zTYPE=%szLABEL=%sT)reversecg|]}|v| Sr{r{rdby_labels r z'find_candidate_devs..%s#GGG1Qh5F5FQ5F5F5FrcDg|]}|vstj||Sr{)r is_partitionrs rrz'find_candidate_devs..)s4hd6G6J6Jrzdevices=%s dslist=%sIBMCloudz5IBMCloud device '%s' (%s) removed from candidate list) OPTICAL_DEVICESrfind_devs_withrProcessExecutionErrorFS_TYPESextend LABEL_TYPESsortrLr\r remove) probe_opticalr=device by_fstypefs_typelabel candidatesdevices ibm_platformibm_pathrs @rrNrNs ~%  F #00000-    IEE,Y'-BCCDDDDHCC+J%,@AABBBBNN4N    MM$MGGGG GGGGJGII$gv666 :''!1!3!3 h w   NN8 $ $ $ IIG    Ns (::c6tj|tSrr)rlist_from_depends datasources)dependss rget_datasource_listrFs  $Wk : ::r)NT)TN)'r# cloudinitrloggingrrrcloudinit.eventrr cloudinit.netr $cloudinit.sources.DataSourceIBMCloudr cloudinit.sources.helpersr getLoggerrrL DEFAULT_IID DEFAULT_MODErUrrPOSSIBLE_MOUNTStupler SourceMixinr6rrIrZr[rrNDataSourceConfigDriveNetDEP_FILESYSTEMrrr{rrrs $$$$$$))))))))))11111111AAAAAA//////g!!"  ; & %HH?HHH b;b;b;b;b;I173Eb;b;b;J    , , , , F F F>>>>D1W356 ;;;;;r