f+FddlZddlZddlmZmZmZddlmZmZddl m Z ddl m Z ddl mZejeZdZdZd eiZd Zd Zd Zed eDZGddej4ej6ZdZdZddZdZ ddZ!eZ"eejFffgZ$dZ%y)N)sourcessubputil) EventScope EventType)eni)get_ibm_platform) openstackziid-dsconfigdrivepass instance-id)vfatiso9660)zconfig-2zCONFIG-2)srcdc#JK|]}tdD] }d|| yw)z/dev/N)range).0zis I/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceConfigDrive.py rs&EaE!HEqAqEEs!#ceZdZdZej ejejejejhiZ fdZ dZ dZdZedZedZdZxZS) DataSourceConfigDrive ConfigDrivectt| |||d|_tj j |jd|_d|_d|_ d|_ tj|_ d|_d|_i|_y)N config_drive)superr__init__sourceospathjoinseed_dirversion ec2_metadata_network_configrUNSET network_json network_eni known_macsfiles)selfsys_cfgdistropaths __class__s rrzDataSourceConfigDrive.__init__/sq #T3GVUK  U^^^D   ##MM ctjj|}|d|jd|jd}|d|j zz }|S)Nz [z,ver=]z [source=%s])r DataSource__str__dsmoder%r )r-rootmstrs rr6zDataSourceConfigDrive.__str__;sD!!))$/#'dllC -- r2cd}i}i}|jdfD]1}tjj|s# t |}|}n|sx|jjd}t|D]N}d}tjr|jdrd} tj|t|}|}|sNn|sy |jd i}tj$|t&g}|j)|jd |j*jd |d d k(rt,j.ndg|_|j0t,j2k(ry t5|j6}|d} || k7r3t9||j:|j0t,j.k(|j0t,j.k(r"tj=d||j0y ||_||_ |jd|_!|jd|_"|d |_#|jHjK|jdi|jd} | |_& t-jN| |_(|jd} | |_+ t-jN| |_,|jd|_-|jd|_.y#t j $rtjtd|YwxYw#t j $rYtj $rYt j"$rtjtd|YwxYw#tR$r(} tjUd| d|_(Yd} ~  d} ~ wwxYw#tR$r(} tjUd| d|_,Yd} ~ !d} ~ wwxYw)Nz /config-drivez#Failed reading config drive from %sdatasource_list)dslistz/dev/cdcd9660)mtypezBroken config drive: %sFmetadatar7r%r )r/networkz&%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 NonReadablerlogexcLOGr.getfind_candidate_devsis_BSD startswithmount_cbMountFailedErrorBrokenMetadata mergemanydictDEFAULT_METADATA_determine_dsmodeds_cfgr DSMODE_PASSr7DSMODE_DISABLEDget_previous_iidr0 on_first_bootr/debugr r?r& userdata_rawr%r,updatevendordata_pureconvert_vendordatavendordata_raw ValueErrorwarningvendordata2_purevendordata2_rawr*r)) r-foundmdresultssdirr<devr>prev_iidcur_iidvdevd2s r _get_datazDataSourceConfigDrive._get_dataAs ]]O4 ND77==& N+D1  N\\%%&78F*&9 ;;=~~i0 ( E"mm.eG E# $ [[R (   %5 6 7,, H% )'.y'9Q'>##D    ;;'11 1#DJJ/]# w  {{ w':'::  ;;'-- - II8$    #KK7#KK 3y)  '++gr23 [[ &! '")"<"DEj ' KK?###r2cy)Nr rxs rplatformzDataSourceConfigDrive.platformsr2cf|jjdrd}nd}|d|jdS)z/Return the subplatform metadata source details.z/devz config-diskzseed-dirz ())r rO)r-subplatform_types r_get_subplatformz&DataSourceConfigDrive._get_subplatforms/ ;; ! !& ), ) ,dkk::r2)__name__ __module__ __qualname__dsnamerNETWORKrBOOT_NEW_INSTANCEBOOT BOOT_LEGACYHOTPLUGsupported_update_eventsrr6rortpropertyrEr{r __classcell__)r1s@rrr"s F   ' ' NN  ! !       dLO $ $;r2rctj|}|jgif|jgifg}g}|D]\}}} ||i|cS|d#tj$r}|j |Yd}~Ad}~wwxYw)N)r ConfigDriveReaderread_v2read_v1rIappend) source_dirreaderfindersexcpsfunctorargskwargsrms rrHrHs  ( ( 4F R R G E#*$ D+F+ + )O$$  LLOO sAA>#A99A>ctjj|jdd} t j |j dS#t$rYywxYw)Ndatar  )r!r"r# get_cpathrload_text_filerstripIOError)r0fnames rrYrYsT GGLL0- @E""5)0066 s#A A! A!c(t|tstdt|z|rO|j dd}|r;|r9t j d|jtj|t|j dy)zDPerforms any first-boot actions using data read from a config-drive.z/Config-drive data expected to be a dict; not %srEz-Updating network interfaces from config driver,N) isinstancedict TypeErrortyperLrKrbapply_network_configrrwwrite_injected_files)rr/rAnet_confs rrZrZsw dD ! =d L  88,b1  KKG H  ' '(<(  F  F C!:HE Fs+B$B.-B.c|g}|r"tD]} tj|g}t D])}|j tjd|z+g}tD])}|j tjd|z+|jd|jd||Dcgc] }||vs| c}z}|Dcgc]}||vstj|r| } }tjd| || r=d|vr9t\} } | | vr(| j| tjd| | | S#tj$rYWwxYwcc}wcc}w) 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' )r"zTYPE=%szLABEL=%sT)reversezdevices=%s dslist=%sIBMCloudz5IBMCloud device '%s' (%s) removed from candidate list)OPTICAL_DEVICESrfind_devs_withrProcessExecutionErrorFS_TYPESextend LABEL_TYPESsort is_partitionrKr[r remove) probe_opticalr<device by_fstypefs_typeby_labellabeld candidatesdevices ibm_platformibm_paths rrMrMs ~% F ##0  IE,,Y'-BCDEHC++J%,@ABC NN4N  MM$M G1Qh5FQGGJ hd6G6G6JGII$gv6:'!1!3 h w  NN8 $ IIG  NM--  $Hs)E: E(E(E-0E-E%$E%c6tj|tSrq)rlist_from_depends datasources)dependss rget_datasource_listrFs  $ $Wk ::r2)NT)TN)&loggingr! cloudinitrrrcloudinit.eventrr cloudinit.netr$cloudinit.sources.DataSourceIBMCloudr cloudinit.sources.helpersr getLoggerrrK DEFAULT_IID DEFAULT_MODErTrrPOSSIBLE_MOUNTStupler SourceMixinr5rrHrYrZrrMDataSourceConfigDriveNetDEP_FILESYSTEMrrrzr2rrs ))1A/g!"  ; & E?E b;I1173E3Eb;J  , F>D1W3356 ;r2