
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me                 @   sd   d dl Z d dlZd dlmZ d dlmZ d dlmZ ejeZ	dd Z
dd ZdddZdd ZdS )    N)dmi)net)
url_helperc             C   s  dd }g }t j }tjd| x| jdD ]}tjd| |jd}||kr^td||f |jd}|j|}tjd	||||jd
 d||d}g }	x,|jdD ]}
||
| jd}|	j| qW |	|d< |j| q,W | jdrtjd| jd |jd| jdd d|dS )aC
  
    Convert the UpCloud network metadata description into
    Cloud-init's version 1 netconfig format.

    Example JSON:
    {
      "interfaces": [
        {
          "index": 1,
          "ip_addresses": [
            {
              "address": "94.237.105.53",
              "dhcp": true,
              "dns": [
                "94.237.127.9",
                "94.237.40.9"
              ],
              "family": "IPv4",
              "floating": false,
              "gateway": "94.237.104.1",
              "network": "94.237.104.0/22"
            },
            {
              "address": "94.237.105.50",
              "dhcp": false,
              "dns": [],
              "family": "IPv4",
              "floating": true,
              "gateway": "",
              "network": "94.237.105.50/32"
            }
          ],
          "mac": "32:d5:ba:4a:36:e7",
          "network_id": "031457f4-0f8c-483c-96f2-eccede02909c",
          "type": "public"
        },
        {
          "index": 2,
          "ip_addresses": [
            {
              "address": "10.6.3.27",
              "dhcp": true,
              "dns": [],
              "family": "IPv4",
              "floating": false,
              "gateway": "10.6.0.1",
              "network": "10.6.0.0/22"
            }
          ],
          "mac": "32:d5:ba:4a:84:cc",
          "network_id": "03d82553-5bea-4132-b29a-e1cf67ec2dd1",
          "type": "utility"
        },
        {
          "index": 3,
          "ip_addresses": [
            {
              "address": "2a04:3545:1000:720:38d6:baff:fe4a:63e7",
              "dhcp": true,
              "dns": [
                "2a04:3540:53::1",
                "2a04:3544:53::1"
              ],
              "family": "IPv6",
              "floating": false,
              "gateway": "2a04:3545:1000:720::1",
              "network": "2a04:3545:1000:720::/64"
            }
          ],
          "mac": "32:d5:ba:4a:63:e7",
          "network_id": "03000000-0000-4000-8046-000000000000",
          "type": "public"
        },
        {
          "index": 4,
          "ip_addresses": [
            {
              "address": "172.30.1.10",
              "dhcp": true,
              "dns": [],
              "family": "IPv4",
              "floating": false,
              "gateway": "172.30.1.1",
              "network": "172.30.1.0/24"
            }
          ],
          "mac": "32:d5:ba:4a:8a:e1",
          "network_id": "035a0a4a-77b4-4de5-820d-189fc8135714",
          "type": "private"
        }
      ],
      "dns": [
        "94.237.127.9",
        "94.237.40.9"
      ]
    }
    c             S   s   | j dr(d}| j ddkr d}d|iS d}| j ddkr>d}|d| j d	d
}| j drh| j d|d< d| j dkr| j djdd |d< || j dkr| j dr| j d|d< |S )NZdhcpZfamilyZIPv6zipv6_dhcpv6-statelesstypeZstaticZstatic6autoaddress)r   Zcontrolr   Zgateway/Znetwork   ZnetmaskdnsZdns_nameservers)getsplit)Zip_addrr
   Z	dhcp_typeZstatic_typeZsubpart r   /usr/lib/python3.6/upcloud.py_get_subnet_configr   s$    

z8convert_to_network_config_v1.<locals>._get_subnet_configzNIC mapping: %sZ
interfaceszConsidering %sZmaczVDid not find network interface on system with mac '%s'. Cannot apply configuration: %sr   z4Found %s interface '%s' with address '%s' (index %d)indexZphysical)r   namemac_addressZip_addressesr
   subnetszSetting DNS nameservers to %sZ
nameserver)r   r   r	   )versionconfig)cloudnetZget_interfaces_by_macLOGdebugr   RuntimeErrorappend)r   r   Znic_configsZmacs_to_interfacesZ	raw_ifacer   Z
iface_typeZ
sysfs_nameZ	interfacer   Z
ip_addressZsub_partr   r   r   convert_to_network_config_v1   sB    c


r   c             C   s   t | S )N)r   )r   r   r   r   convert_network_config   s    r         c             C   s6   t j| |||d}|j s&td|  tj|jj S )N)timeoutsec_betweenretrieszunable to read metadata at %s)r   Zreadurlokr   jsonloadscontentsdecode)Zurlr   r    r!   Zresponser   r   r   read_metadata   s
    r'   c              C   sP   t jd} | dkrdS t jd}|r2tjd| nd}tj| t|d|fS )	Nzsystem-manufacturerZUpCloudFzsystem-uuidz2system identified via SMBIOS as UpCloud server: %szsystem identified via SMBIOS as a UpCloud server, but did not provide an ID. Please contact support viahttps://hub.upcloud.com or via email with support@upcloud.comT)FN)r   Zread_dmi_datar   r   Zcriticalr   )Zvendor_nameZserver_uuidmsgr   r   r   read_sysinfo   s    



r)   )r   r   r   )r#   ZloggingZ	cloudinitr   r   r   r   Z	getLogger__name__r   r   r   r'   r)   r   r   r   r   <module>   s   
 2
	