܍~c: ~dZddlZddlZddlmZddlmZmZddlm Z ddlm Z ddlm Z m Z mZddlmZdd lmZmZmZmZdd lmZmZe jeZd d iZd ZdZedzZdZ ddiZ!eddZ"Gddej#Z$deddfdZ%Gdde j&Z'dee(fdZ)de*fdZ+d+de,d e(d!e,de-fd"Z.d d#d$e*de"fd%Z/e'e j0ffgZ1d&Z2ed'krYddl3Z3d(Z4e3j5e4)Z6e67e8ej9e/e+d*dSdS),a3Datasource for Oracle (OCI/Oracle Cloud Infrastructure) Notes: * This datasource does not support OCI Classic. OCI Classic provides an EC2 lookalike metadata service. * The UUID provided in DMI data is not the same as the meta-data provided instance-id, but has an equivalent lifespan. * We do need to support upgrade from an instance that cloud-init identified as OpenStack. * Bare metal instances use iSCSI root, virtual machine instances do not. * Both bare metal and virtual machine instances provide a chassis-asset-tag of OracleCloud.com. N) namedtuple)OptionalTuple)dmi)log)netsourcesutil) NetworkConfig)cmdline ephemeralget_interfaces_by_macis_netfail_master)UrlErrorreadurlconfigure_secondary_nicsFzOracleCloud.comz&http://169.254.169.254/opc/v{version}/z{path}/i(# Authorizationz Bearer Oracle OpcMetadataz version instance_data vnics_dataceZdZdZdefdZdS)KlibcOracleNetworkConfigSourcezOverride super class to lower the applicability conditions. If any `/run/net-*.cfg` files exist, then it is applicable. Even if `/run/initramfs/open-iscsi.interface` does not exist. returnc*t|jS)zOverride is_applicable)bool_filesselfs D/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOracle.py is_applicablez,KlibcOracleNetworkConfigSource.is_applicable9sDK   N)__name__ __module__ __qualname____doc__rrrrrr2s9 !t!!!!!!rrnetwork_configrcd|vrdS|ddvr#td|ddSt}|ddkrYd|dDD]D}|dd kr6d |vr2|d }||}|s2t |r|d =EdS|dd kr|d iD]t\}}d |vri|d id}|r>||}|sLt |r|d d=|d=||d d<sdSdS)aP Search network config physical interfaces to see if any of them are a netfailover master. If found, we prevent matching by MAC as the other failover devices have the same MAC but need to be ignored. Note: we rely on cloudinit.net changes which prevent netfailover devices from being present in the provided network config. For more details about netfailover devices, refer to cloudinit.net module. :param network_config A v1 or v2 network config dict with the primary NIC, and possibly secondary nic configured. This dict will be mutated. versionN)z+Ignoring unknown network config version: %sr(cg|]}d|v| S)typer$).0cs r z,_ensure_netfailover_safe..ZsGGG!6Q;;A;;;rconfigr+physical mac_addressr) ethernetsmatch macaddresszset-namename)LOGdebugrgetritems)r% mac_to_namecfgmaccur_name_macaddrs r_ensure_netfailover_safer@>s &&i .. 9 9 %    '))Ki A%%GG~h7GGG / /C6{j(( C''m,C*s33H#/ *844/ . / /  "a ' '$((b99??AA 8 8FAs#~~'''2..22<@@8*w77H#8 *8448L6 O/7G V, ( ' 8 8rc,eZdZUdZdZdZejjejj ejj ejj fZ e ejdfed<gddZeed<fdZd efd Zd efd Zd Zd efd ZdZd efdZd efdZedZddefdZxZS)DataSourceOracleOracleN.network_config_sourcesr()r/r'_network_configctt|j|g|Ri|d|_t jt j|d|jgitg|_ t|_ dS)N datasource) superrB__init__ _vnics_datar mergemanydictget_cfg_by_pathdsnameBUILTIN_DS_CONFIGds_cfgr_network_config_source)rsys_cfgargskwargs __class__s rrIzDataSourceOracle.__init__s.%%.wHHHHHHH($W|T[.I2NN!    'E&F&F###rrcRt|jdgS)Nr/)rrEr8rs r_has_network_configz$DataSourceOracle._has_network_configs#D(,,Xr::;;;rctS)z@Check platform environment to report if this datasource may run.)_is_platform_viablers rrXz$DataSourceOracle._is_platform_viables"$$$rcj|sdSt|_tjt jtddtd|j }| }|j dtd}|5t!|p|}dddn #1swxYwY|jx}|_t&|j |_|j|_|d |d d |d |dd|_d|vrY|dd}|rt3j||_|dd|jd<dS)NFr)instancer'path)urlheaders)ifaceconnectivity_url_datatmp_dirrfetch_vnics_data)r' ociAdNameidrhostname displayName)zavailability-zonez instance-idz launch-indexzlocal-hostnamer5metadata user_datassh_authorized_keys public_keysT)rX_read_system_uuid system_uuidr EphemeralDHCPv4rfind_fallback_nicMETADATA_PATTERNformat V2_HEADERSdistroget_tmp_exec_path_is_iscsi_rootrOr8rNread_opc_metadata instance_data_crawled_metadata METADATA_ROOTr'metadata_address vnics_datarJrhbase64 b64decode userdata_raw)rnetwork_contextfetch_primary_nicfetch_secondary_nicsfetched_metadatadataris r _get_datazDataSourceOracle._get_datas'')) 5,..#3'))'..qz.JJ%##K1133    !% 3 3 5 55#{ & 8 9    0!2!J6J                    )9(FFt% - 4 4$,!5! ! ,6"&k!2:":.'       Z(,,[99I @$*$4Y$?$?!+/ +;+?+?%,,DM- (tsC''C+.C+c4tj|jS)zquickly check (local only) if self.instance_id is still valid On Oracle, the dmi-provided system uuid differs from the instance-id but has the same life-span.)r instance_id_matches_system_uuidrm)rrQs rcheck_instance_idz"DataSourceOracle.check_instance_ids 6t7GHHHrcZtj|jdS)Nrk)r normalize_pubkey_datarhr8rs rget_public_ssh_keysz$DataSourceOracle.get_public_ssh_keyss#,T]->->}-M-MNNNrc4|jS)z)Return whether we are on a iscsi machine.)rPrrs rruzDataSourceOracle._is_iscsi_roots*88:::rc4|jSN)rP render_configrs r_get_iscsi_configz"DataSourceOracle._get_iscsi_configs*88:::rc|r|jSd}|r||_|stdd}|jdtd}|s|rA | |n*#t$rtj tdYnwxYwt|j|jS)zNetwork config is read from initramfs provided files Priority for primary network_config selection: - iscsi - imds If none is present, then we fall back to fallback configuration. FzLCould not obtain network configuration from initramfs. Falling back to IMDS.Trz+Failed to parse IMDS network configuration!)rVrErurr6warningrOr8rN!_add_network_config_from_opc_imds Exceptionr logexcr@)r set_primary set_secondarys rr%zDataSourceOracle.network_configs/  # # % % (' '     <#'#9#9#;#;D ''))  KK(   K  & 8 9    -  66{CCCC    A  !!5666##s&B<<$C#"C#Frc.|jtddS|s+d|jdvrtddSt}|r|jn|jdd}t |D] \}}|o|dk}|d}||vrtd|H||}t j|d } |jd dkrK|rd d i} nd |dd| j d} |d|t| gd} |jd | |jd dkr6td|id|d} |s|dd| j g| d<| |jd|<dS)aGenerate primary and/or secondary NIC config from IMDS and merge it. It will mutate the network config to include the secondary VNICs. :param set_primary: If True set primary interface. :raises: Exceptions are not handled within this function. Likely exceptions are KeyError/IndexError (if the IMDS returns valid JSON with unexpected contents). Nz#NIC data is UNSET but should not benicIndexrz\VNIC metadata indicates this is a bare metal machine; skipping secondary VNIC configuration.r(macAddrz)Interface with MAC %s not found; skippingsubnetCidrBlockr'r+dhcpstatic privateIp/)r+addressr0)r5r+r1mtusubnetsr/r)r4F)rr3dhcp6dhcp4 addressesr2) rJr6rr enumeratelower ipaddress ip_networkrE prefixlenMTUappend) rrinterfaces_by_macr{index vnic_dict is_primaryr1r5networksubnetinterface_configs rrz2DataSourceOracle._add_network_config_from_opc_imdss5   # KK= > > > F  d.>q.A A A KK9    F133)4NT%%$:J122:N )* 5 5+ K+ K E9$3!J#I.4466K"333 ?$[1D*95F+GHHG#I.!33$f-FF!)(5KK8IKKF!&#. &x $$ $X.556FGGGG%i0A55*K8"' $$ "$[1GGG4EGG5$[1;K$[1$7W+ K+ Kr)F)r r!r"rMrmvendordata_purer NetworkConfigSourceCMD_LINEDS INITRAMFS SYSTEM_CFGrDr__annotations__rEdictrIrrVrXrrrrurpropertyr%r __classcell__)rTs@rrBrBrs FKO#,#&#-#. GE'"=s"BC(*a88OT888 G G G G GrsR   """"""""""""""$$$$$$((((((((((666666 32222222g!!&8  9,  / j(JKK  ! ! ! ! !W%E ! ! !18]18t18181818h\K\K\K\K\Kw)\K\K\K~:8C=:::: *T**** Sc$38DDD4DKDDDD@.01 ;;; zOOO K %X $ = = =F  E%6%6%8%8':':'<'<    r