�
܍~cS� � �| � d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm Z m
Z
mZ d dlm
Z
d dlmZmZ d dlmZmZ ej e� � ZdZdZg d�Zg d �Z ej d
� � fd�Zd� Zd[d�Z d\d�Zd]d�Z d� Z!d� Z"d� Z#d� Z$d� Z%d� Z&d� Z' ej( d�� � de)fd�� � Z* ej( d�� � de+fd�� � Z,de-de)fd�Z.d]d�Z/d� Z0d � Z1d]de)fd!�Z2d]d"�Z3d]d#�Z4d$� Z5d%� Z6d&� Z7d'� Z8d(� Z9 G d)� d*e:� � Z;d+� Z< d]d,ee
e- de
e- fd-�Z= d]d,ee
e- dee- fd.�Z> d]d,ee
e- de
e- fd/�Z? d]d,ee
e- dee- fd0�Z@ d]d,ee
e- de
e- fd1�ZA d]d,ee
e- dee- fd2�ZB d]d,ee
e- de
e- fd3�ZC d]d,ee
e- dee- fd4�ZDd^d5�ZEd6� ZFd_d8�ZGd`d:�ZH dad;�ZId<� ZJd=� ZKd]deLfd>�ZMd?e-dee- fd@�ZNd]deLfdA�ZOd]deLfdB�ZPd]deLfdC�ZQd]deLfdD�ZRd]de+fdE�ZSdF� ZTdGe e-ef de)fdH�ZUdIedJe-fdK�ZVdJe-de)fdL�ZWdJe-de)fdM�ZXdJe-de)fdN�ZYdJe-de)fdO�ZZdJe-de)fdP�Z[dJe-de)fdQ�Z\de)fdR�Z]de-fdS�Z^de_fdT�Z`de_fdU�ZadVe-dWe-de-fdX�Zb G dY� dZec� � ZddS )b� N)�Any�Callable�Dict�List�Optional)�urlparse)�subp�util)�UrlError�readurlz/sys/class/net/�eth0)�dhcp6�
ipv6_slaaczipv6_dhcpv6-statelesszipv6_dhcpv6-stateful)� ovs-vsctlz--format�csvz
--no-headingsz --timeout�10z --columns�name�find� interfacez
type=internalz([0-9]+)c �@ � d� t j || � � D � � S )aD Sorting for Humans: natural sort order. Can be use as the key to sort
functions.
This will sort ['eth0', 'ens3', 'ens10', 'ens12', 'ens8', 'ens0'] as
['ens0', 'ens3', 'ens8', 'ens10', 'ens12', 'eth0'] instead of the simple
python way which will produce ['ens0', 'ens10', 'ens12', 'ens3', 'ens8',
'eth0'].c �| � g | ]9}|� � � rt |� � n|� � � ��:S � )�isdigit�int�lower)�.0�texts �8/usr/lib/python3/dist-packages/cloudinit/net/__init__.py�
<listcomp>z$natural_sort_key.<locals>.<listcomp>3 sG � � � � �� �\�\�^�^�5��D� � � ������� � � )�re�split)�s�_nsres r �natural_sort_keyr% , s/ � �� ��H�U�A�&�&�� � � r c � � t S )z3Simple function to return the global SYS_CLASS_NET.)�
SYS_CLASS_NETr r r �get_sys_class_pathr( 9 s � ��r � c �0 � t � � | z dz |z S )N�/)r( ��devname�paths r �sys_dev_pathr/ > |