x[h5ddlZddlZddlZddlmZddlmZmZmZm Z m Z ddl m Z ddl mZmZddlmZddlmZddlmZej,eZd Zd eiZd Zd Zd diZdZGddZGddej@Z!Gdde!Z"dZ#dZ$d1dZ%d2dZ&dZ'e"ejPffe!ejPejRffgZ*dZ+edk(rddl,Z,ddl-Z-ddlm.Z.e,j^d Z0e0jcd!d"d#e$e0jcd%d&d'd(d)e0jeZ3e&e3jhe3jj*Z6d+e6vr e6d+joe6d+<e;ejxe6d.dd/0yy#e8$r=e-jrjud,e6d+=e.e6d+joe6d-<Y_wxYw)3N) b64decode)dminetsources url_helperutil)ug_util) EventScope EventType)NoDHCPLeaseError)EphemeralDHCPv4)DataSourceHostnamez3http://metadata.google.internal/computeMetadata/v1/ metadata_urlzLhttp://metadata.google.internal/computeMetadata/v1/instance/guest-attributeshostkeyszMetadata-FlavorGoogleens4ceZdZdZddZy)GoogleMetadataFetcherc.||_||_||_yN)metadata_address num_retriessec_between_retries)selfrrrs A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceGCE.py__init__zGoogleMetadataFetcher.__init__s 0&#6 cd} |j|z}|r|dz }tj|t|j|j }|j dk(r@|r!tj|j}|S|jjd}|Stjd||j |S#tj$r$}d}tj|||Yd}~|Sd}~wwxYw)Nz/?recursive=True)urlheadersretries sec_betweenutf-8zurl %s returned code %szurl %s raised exception %s)rrreadurlHEADERSrrcoder decode_binarycontentsdecodeLOGdebugUrlError) rpathis_text is_recursivevaluerrespexcmsgs r get_valuezGoogleMetadataFetcher.get_value$s F''$.C))%%(( 44 DyyC ..t}}=E  !MM009E  3T499E "" &.C IIc4 % %  &sAB==C4C//C4N)F)__name__ __module__ __qualname__rr5rrrrs 7 rrceZdZdZdZej ejejhiZ dZ dZ e dZdZdZdZd d Ze d Ze d Zy ) DataSourceGCEGCEFcztjj||||d|_|r6t j ||\}}t j |\|_}t|_tjtj|ddgitg|_ |jd|_y)N datasourcer<r)r DataSourcer default_userr normalize_users_groupsextract_defaultdictmetadatar mergemanydictget_cfg_by_pathBUILTIN_DS_CONFIGds_cfgr)rsys_cfgdistropathsusers_groups _user_configs rrzDataSourceGCE.__init__Is##D'65A  &==gvN UG070G0G0N -T   (($$W|U.CRH!   !% N ;rc|j}i}|jrtj}t|vr+|j t|j dttjd|t|dk\sJd|D]l}t|j|} |5 t|j|} ddd|d sE||j_tjd |n|jj 8tj#d |j$nt|j|}|j'd s[|j'd r%tj#|j'd ytj|j'd y|j'd|_|j'd|_y#t$r*}tjd||Yd}~dddd}~wwxYw#1swYWxYw#t$rtjd|YwxYw)Nrz"Looking for the primary NIC in: %sz3The instance has to have at least one candidate NIC)iface)address url_paramsz,Error fetching IMD with candidate NIC %s: %sz$Unable to obtain a DHCP lease for %ssuccesszPrimary NIC found: %s.z(Did not find a fallback interface on %s.platform_reports_gcereasonF meta-data user-dataT)get_url_paramsperform_dhcp_setuprfind_candidate_nicsDEFAULT_PRIMARY_INTERFACEremoveinsertr+r,lenr rJread_mdr Exceptionr fallback_interfacewarning cloud_namegetrD userdata_raw)rrSretcandidate_nics candidate_nicnetwork_contextes r _get_datazDataSourceGCE._get_dataXs ((*   " " 446N(N:%%&?@%%a)BC II:N KN#q( ED E(!/  "1KK'#( % %")(,(=(=+5#C %$y>5BDKK2II6 F7 8{{--5 >$"7"7JOCwwy!ww-. CGGH-. #''(+, , GGK0? )%II N - ! % % % % % %(II>  sT/H-1H 3G* H-* H3H H H-HH  H* %H--IIcyrr9rs r launch_indexzDataSourceGCE.launch_indexsrc |jdS)N instance-idrDrns rget_instance_idzDataSourceGCE.get_instance_ids}}]++rcL|jd}t||jS)Npublic-keys-data)rD_parse_public_keysr@)rpublic_keys_datas rget_public_ssh_keysz!DataSourceGCE.get_public_ssh_keyss&==);<!"2D4E4EFFrc"|D] }t| yr)#_write_host_key_to_guest_attributes)rrkeys rpublish_host_keyszDataSourceGCE.publish_host_keyss 6C / 5 6rcXt|jdjdddS)Nlocal-hostname.rF)rrDsplit)rfqdn resolve_ip metadata_onlys r get_hostnamezDataSourceGCE.get_hostnames.! MM* + 1 1# 6q 95  rc |jdS)Navailability-zonerrrns ravailability_zonezDataSourceGCE.availability_zones}}011rc@|jjdddS)N-rPr)rrsplitrns rregionzDataSourceGCE.regions %%,,S!4Q77rN)FFF)r6r7r8dsnamerZr NETWORKr BOOT_NEW_INSTANCEBOOTdefault_update_eventsrrlpropertyrorsrxr|rrrr9rrr;r;>s F  ' ' NN  <7r,G6 2288rr;ceZdZdZy)DataSourceGCELocalTN)r6r7r8rZr9rrrrsrrctdtd|}|jd}tj||t dd}|j rtjd|ytjd|y)N/r$PUTF)rdatar request_method check_statusz&Wrote %s host key to guest attributes.z0Unable to write %s host key to guest attributes.) GUEST_ATTRIBUTES_URLHOSTKEY_NAMESPACEencoderr%r&okr+r,)key_type key_valuerr2s rrzrzsg,.? JC  )I       D wwy :HE DhOrc |jdddd\}}|dk7ry tj|}d|vry|d}d} t j j ||}t j jt jj|kDS#ttf$rYywxYw#t$rYywxYw#t$rYywxYw)NFz google-sshexpireOnz%Y-%m-%dT%H:%M:%S%z) r ValueErrorAttributeErrorjsonloadsdatetimestrptimenowtimezoneutc) public_keyschemajson_strjson_obj expire_str format_str expire_times r _has_expiredrs%++D!4QR8 ::h' !*%J&J''00ZH    !2!2!6!6 7+ EE1  '  s4BB2 CB/.B/2 B>=B> C  C cg}|s|S|D]a}|rtd|Ds|jdd}t|dk7r9|\}}|d|fvsEt|rQ|j |c|S)Nc38K|]}t|dkyw)N)ord).0cs r z%_parse_public_keys..s$FaSVc\$Fs:rPr cloudinit)allrr_rappend)rwr@ public_keysrsplit_public_keyuserr{s rrvrvs K &$ $F:$F!F %++C3  A % $ c K. .|C7H   s #$ rTc|t}ddddd}t|d<|r |dsd|d<|Stj|s tj d|d|z|d<|Sgd}t ||j|j}i}|D]@\}}} } } d} |D]} |j| | | }||} | r| d }||z|d<|cS| ||<Btj|d xsd }tj|d xsd }|jd |jdg}|jddj}|dk7rQ|jd s@|j|jd|j|jd dj|Dcgc]}|s| c}}|j!|d<|dr|dj#dd|d<d|vrS|dj%d}|jd}|dk(r t'|}n|rtj)d|||d<||d<d|d<|Scc}w)NF)rWrXrTrVrUzNot running on GCE.rVz%s is not resolvablezaddress "%s" is not resolvable))rq)z instance/idTTF)r)z instance/zoneTTF)r~)zinstance/hostnameTTF) instance-data)zinstance/attributesFFT) project-data)zproject/attributesFFTz)required key %s returned nothing. not GCErz{}rsshKeyszssh-keyszblock-project-ssh-keystrue rurrrXr$zuser-data-encodingbase64z(unknown user-data-encoding: %s, ignoringrWTrT) MD_V1_URLrUris_resolvable_urlr+r,rrrr5rrrelowerrjoin splitlinesrrrrc)rRrSplatform_checkrgurl_mapmetadata_fetchermdmkeyrKrequiredr/r0r1r. new_valuer4 instance_data project_data valid_keys block_projectr{rwudencodings rr`r`s  C #7"8Cc"89-H    ! !' * ('287BH  G-'')G)G B8? 4eXw  "D(224,OI$! "  =C$JCMJ4 JJr/2:d;M::b08D9L##I. 0A0A*0MNJ!%%&>CIIKM}'8'8'C,**:67,**956yy!C#s#!CD-88:B "$%8"9"?"?"DR"H m# ; ' . .w 7 $$%9: x 2B  KKBH MKC C N J'"Ds +I3Ictjdxsd}|dk(s|dk(rytjdxsd}|jdrytj d||y ) Nzsystem-product-namezN/AzGoogle Compute EnginerTzsystem-serial-numberz GoogleCloud-z6Not running on google cloud. product-name=%s serial=%sF)r read_dmi_data startswithr+r,)pnameserials rrUrUGsl   3 4 =E ''5H+<  5 6 ?%F (II@% rc6tj|tSr)rlist_from_depends datasources)dependss rget_datasource_listr_s  $ $Wk ::r__main__) b64encodezQuery GCE Metadata Service) descriptionz --endpointURLz The url of the metadata service.)metavarhelpdefaultz--no-platform-checkrzIgnore smbios platform check store_false)destractionr)rRrrXz/User-data cannot be decoded. Writing as base64 z user-data-b64rP),z: )indent sort_keys separatorsr)NNT)=rrloggingrrrrrrrrcloudinit.distrosr cloudinit.eventr r cloudinit.net.dhcpr cloudinit.net.ephemeralr cloudinit.sourcesr getLoggerr6r+rrGrrr&r\rr?r;rrzrrvr`rUDEP_FILESYSTEM DEP_NETWORKrrargparsesysrArgumentParserparser add_argument parse_argsargsendpointrrr*UnicodeDecodeErrorstderrwriteprintdumpsr9rrr s  99%1/30g! A #Y/# h '"@o8G&&o8d P FD(JZ $'0023W++W-@-@AB ; z $X $ $1M NF  /     +     D 4==9L9L MDd J $[ 1 8 8 :D  *$**T!t LMG6" J JJ  B [!$-d;.?$@$G$G$ID !  JsF?GG