3 \me@sdddlZddlZddlmZddlmZddlmZejeZ ddZ ddZ dd d Z d dZ dS)N)dmi)net) url_helperc Csdd}g}tj}tjd|x|jdD]}tjd||jd}||kr^td||f|jd}|j|}tjd ||||jd d ||d }g} x,|jd D]} || |jd} | j| qW| |d<|j|q,W|jdrtjd|jd|jd|jddd|dS)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" ] } cSs|jdr(d}|jddkr d}d|iSd}|jddkr>d}|d|jd d }|jd rh|jd |d <d |jd kr|jd jd d|d<||jdkr|jdr|jd|d<|S)NZdhcpZfamilyZIPv6zipv6_dhcpv6-statelesstypeZstaticZstatic6autoaddress)rZcontrolrZgateway/ZnetworkZnetmaskdnsZdns_nameservers)getsplit)Zip_addrr Z dhcp_typeZ static_typeZsubpartr /usr/lib/python3.6/upcloud.py_get_subnet_configrs$  z8convert_to_network_config_v1.._get_subnet_configzNIC mapping: %sZ interfaceszConsidering %sZmaczVDid not find network interface on system with mac '%s'. Cannot apply configuration: %srz4Found %s interface '%s' with address '%s' (index %d)indexZphysical)rname mac_addressZ ip_addressesr subnetszSetting DNS nameservers to %sZ nameserver)rrr )versionconfig)cloudnetZget_interfaces_by_macLOGdebugr RuntimeErrorappend) rrZ nic_configsZmacs_to_interfacesZ raw_ifacerZ iface_typeZ sysfs_nameZ interfacerZ ip_addressZsub_partr r rconvert_to_network_config_v1sBc        rcCst|S)N)r)rr r rconvert_network_configsrcCs6tj||||d}|js&td|tj|jjS)N)timeout sec_betweenretrieszunable to read metadata at %s)rZreadurlokrjsonloadscontentsdecode)Zurlrr r!Zresponser r r read_metadatas  r'cCsPtjd}|dkrdStjd}|r2tjd|nd}tj|t|d|fS) Nzsystem-manufacturerZUpCloudFz 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)rZ read_dmi_datarrZcriticalr)Z vendor_nameZ server_uuidmsgr r r read_sysinfos    r))rrr)r#ZloggingZ cloudinitrrrrZ getLogger__name__rrrr'r)r r r rs    2