�
�f{B � � � d Z ddlZddlZddlZddlZddlZddlmZ ddlm Z m
Z
mZ ddlm
Z
mZmZmZmZ ddlmZ ddlmZmZmZmZ ddlmZ ej6 e� Zd d
iZdZdZ e d
z Z!dZ"ddiZ# edd� Z$ G d� dejJ � Z&deddfd�Z' G d� dejP � Z) G d� de)� Z*de
e+ fd�Z,de-fd�Z.de+de/fd�Z0de+de
e e+e+f fd �Z1d
e)jd e)jf d!�d"e-de
e$ fd#�Z4e)ejj ffe*ejj ejl ffgZ7d$� Z8ed%k( rOddl9Z9d&Z: e9jv e:�'� Z<e<j{ � e> e
j~ e4� e.� d(�� � yy))a3 Datasource 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)�Dict�Optional�Tuple)�
atomic_helper�dmi�net�sources�util)�
NetworkConfig)�cmdline� ephemeral�get_interfaces_by_mac�is_netfail_master)�wait_for_url�configure_secondary_nicsFzOracleCloud.comz&http://169.254.169.254/opc/v{version}/z{path}/i(# �
Authorizationz
Bearer Oracle�OpcMetadataz version instance_data vnics_datac � � e Zd ZdZdefd�Zy)�KlibcOracleNetworkConfigSourcez�Override 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 | j � S )zOverride is_applicable)�bool�_files��selfs �D/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOracle.py�
is_applicablez,KlibcOracleNetworkConfigSource.is_applicable: s � ��D�K�K� � � N)�__name__�
__module__�__qualname__�__doc__r r � r r r r 3 s � ��!�t� !r r �network_configr c �< � d| vry| d dvrt j d| d � yt � }| d dk( rT| d D �cg c] }d|v s�|�� c}D ]8 }|d dk( s�d |v s�|d }|j |� }|s�*t |� s�6|d = �: y| d d
k( r�| j di � j � D ]_ \ }}d|v s�|j di � j d
� }|s�/|j |� }|s�Ct |� s�O|d d
= |d= ||d d< |