3 \me+@sddlZddlZddlmZmZmZddlmZmZddl m Z ddl m Z ddl mZejeZdZdZd eiZd!Zd"Zd#ZeddeDZGdddejejZddZddZd$ddZddZ d%ddZ!eZ"eej#ffgZ$dd Z%dS)&N)sourcessubputil) EventScope EventType)eni)get_ibm_platform) openstackziid-dsconfigdrivepassz instance-idvfatiso9660config-2CONFIG-2srcdccs*|]"}tddD]}d||fVqqdS)rz /dev/%s%sN)range).0zir+/usr/lib/python3.6/DataSourceConfigDrive.py srcsreZdZdZejejejej ej hiZ fddZ ddZ ddZdd Zed d Zed d ZddZZS)DataSourceConfigDriveZ ConfigDrivecs\tt|j|||d|_tjj|jd|_d|_d|_ d|_ t j |_ d|_d|_i|_dS)NZ config_drive)superr__init__sourceospathjoinseed_dirversion ec2_metadata_network_configrUNSET network_json network_eni known_macsfiles)selfsys_cfgdistropaths) __class__rrr/szDataSourceConfigDrive.__init__cCs0tjj|}d||j|jf}|d|j7}|S)Nz%s [%s,ver=%s]z [source=%s])r DataSource__str__dsmoder!r)r)rootZmstrrrrr/;s zDataSourceConfigDrive.__str__c Csd}i}i}xX|jdfD]J}tjj|s*qyt|}|}PWqtjk r`tjt d|YqXqW|s|j j d}xt |dD]}d}tj r|jdrd}ytj|t|d}|}WnNtjk rYn:tjk rYn&tjk rtjt d|YnX|rPqW|sd S|j d i}tj|tg}|j|j d |jj d |d d krbtjndg|_|jtjkr~d St|j}|d} || krt||j|jtjkd|jtjkrt jd||jd S||_||_ |j d|_!|j d|_"|d |_#|j$j%|j di|j d} | |_&ytj'| |_(Wn6t)k rl} zt j*d| d|_(WYdd} ~ XnX|j d} | |_+ytj'| |_,Wn6t)k r} zt j*d| d|_,WYdd} ~ XnX|j d|_-|j d|_.dS)Nz /config-drivez#Failed reading config drive from %sZdatasource_list)dslistz/dev/cdZcd9660)mtypezBroken config drive: %sFmetadatar0r!z instance-id)r+networkz&%s: not claiming datasource, dsmode=%sz ec2-metadataZuserdatar(Z vendordataz"Invalid content in vendor-data: %sZ vendordata2z#Invalid content in vendor-data2: %snetwork_configZ networkdataT)/r rrisdirread_config_driver NonReadablerlogexcLOGr*getfind_candidate_devsZis_BSD startswithZmount_cbZMountFailedErrorZBrokenMetadataZ mergemanydictDEFAULT_METADATAZ_determine_dsmodeZds_cfgrZ DSMODE_PASSr0ZDSMODE_DISABLEDget_previous_iidr, on_first_bootr+debugrr4r"Z userdata_rawr!r(updateZvendordata_pureZconvert_vendordataZvendordata_raw ValueErrorwarningZvendordata2_pureZvendordata2_rawr&r%) r)foundZmdresultsZsdirr2Zdevr3Zprev_iidZcur_iidZvdeZvd2rrr _get_dataAs                  zDataSourceConfigDrive._get_datacCstj|jS)N)rZinstance_id_matches_system_uuidZget_instance_id)r)r*rrrcheck_instance_idsz'DataSourceConfigDrive.check_instance_idcCsn|jdkrh|jdtjfkr:tjdtj|j|jd|_n.|j dk r^t j |j |_tjdn tjd|jS)Nz(network config provided via network_json)r'z.network config provided via converted eni dataz"no network configuration available) r#r%rr$r<rCr Zconvert_net_jsonr'r&rconvert_eni_data)r)rrrr7s     z$DataSourceConfigDrive.network_configcCsdS)Nr r)r)rrrplatformszDataSourceConfigDrive.platformcCs$|jjdrd}nd}d||jfS)z/Return the subplatform metadata source details.z/devz config-diskzseed-dirz%s (%s))rr?)r)Zsubplatform_typerrr_get_subplatforms z&DataSourceConfigDrive._get_subplatform)__name__ __module__ __qualname__ZdsnamerZNETWORKrZBOOT_NEW_INSTANCEZBOOTZ BOOT_LEGACYZHOTPLUGZsupported_update_eventsrr/rJrKpropertyr7rMrN __classcell__rr)r-rr"s  f  rcCstj|}|jgif|jgifg}g}xL|D]D\}}}y |||Stjk rn}z|j|WYdd}~Xq,Xq,W|ddS)Nr5)r ZConfigDriveReaderZread_v2Zread_v1r:append)Z source_dirreaderZfindersZexcpsZfunctorargskwargsrIrrrr9s    r9c Cs>tjj|jdd}ytj|jdStk r8dSXdS)Ndataz instance-id )rrrZ get_cpathrZ load_filerstripIOError)r,ZfnamerrrrAs rATcCs^t|tstdt||rL|jdd}|rL|rLtjd|jtj |t |jddS)zDPerforms any first-boot actions using data read from a config-drive.z/Config-drive data expected to be a dict; not %sr7z-Updating network interfaces from config driver(N) isinstancedict TypeErrortyper=r<rFZapply_network_configrrLwrite_injected_files)rYr+r6Znet_confrrrrBs   rBc Cs||rxtjdt|xb|jD]V\}}|jtjs%sz'find_candidate_devs..cs$g|]}|kstj| r|qSr)rZ is_partition)rri)rjrrrk*szdevices=%s dslist=%sZIBMCloudz5IBMCloud device '%s' (%s) removed from candidate list) OPTICAL_DEVICESrZfind_devs_withrZProcessExecutionErrorFS_TYPESextend LABEL_TYPESsortr<rCrremove) Z probe_opticalr2ZdeviceZ by_fstypeZfs_typeZlabelZ candidatesZdevicesZ ibm_platformZibm_pathr)rjrr>s8         r>cCs tj|tS)N)rZlist_from_depends datasources)Zdependsrrrget_datasource_listFsrs)r r )r r)rr)NT)TN)&ZloggingrZ cloudinitrrrZcloudinit.eventrrZ cloudinit.netrZ$cloudinit.sources.DataSourceIBMCloudrZcloudinit.sources.helpersr Z getLoggerrOr<Z DEFAULT_IIDZ DEFAULT_MODEr@rmroZPOSSIBLE_MOUNTStuplerlZ SourceMixinr.rr9rArBrbr>ZDataSourceConfigDriveNetZDEP_FILESYSTEMrrrsrrrr s2    &  B