pdb.set_trace()
+def find_in_list(the_list, condition_lambda):
+ for item in the_list:
+ if condition_lambda(item):
+ return item
+ else:
+ return None
+
+
class vimconnector(vimconn.VimConnector):
# Translate azure provisioning state to OSM provision state
else:
raise vimconn.VimConnException("Subscription not specified")
- # REGION
- if "region_name" in config:
- self.region = config.get("region_name")
- else:
- raise vimconn.VimConnException(
- "Azure region_name is not specified at config"
- )
-
# RESOURCE_GROUP
if "resource_group" in config:
self.resource_group = config.get("resource_group")
"Azure resource_group is not specified at config"
)
+ # REGION
+ if "region_name" in config:
+ self.region = config.get("region_name")
+ else:
+ raise vimconn.VimConnException(
+ "Azure region_name is not specified at config"
+ )
+
# VNET_NAME
if "vnet_name" in config:
self.vnet_name = config["vnet_name"]
if "flavors_pattern" in config:
self._config["flavors_pattern"] = config["flavors_pattern"]
+ def _find_in_capabilities(self, capabilities, name):
+ cap = find_in_list(capabilities, lambda c: c["name"] == name)
+ if cap:
+ return cap.get("value")
+ else:
+ return None
+
def _reload_connection(self):
"""
Called before any operation, checks python azure clients
return name
- def _create_nic(self, net, nic_name, static_ip=None, created_items={}):
+ def _create_nic(self, net, nic_name, region=None, static_ip=None, created_items={}):
self.logger.debug("create nic name %s, net_name %s", nic_name, net)
self._reload_connection()
subnet_id = net["net_id"]
- location = self._get_location_from_resource_group(self.resource_group)
+ location = self.region or self._get_location_from_resource_group(
+ self.resource_group
+ )
try:
net_ifz = {"location": location}
net_ip_config = {
# subnet_id=net["net_id"]
nic_name = vm_name + "-nic-" + str(idx)
vm_nic, nic_items = self._create_nic(
- net, nic_name, net.get("ip_address"), created_items
+ net, nic_name, self.region, net.get("ip_address"), created_items
)
vm_nics.append({"id": str(vm_nic.id)})
net["vim_id"] = vm_nic.id
try:
self._reload_connection()
vm_sizes_list = [
- vm_size.serialize()
+ vm_size.as_dict()
for vm_size in self.conn_compute.resource_skus.list(
- "location={}".format(self.region)
+ "location eq '{}'".format(self.region)
)
]
numberInterfaces = len(filter_dict.get("interfaces", [])) or 0
# Filter
- if self._config.get("flavors_pattern"):
- filtered_sizes = [
- size
- for size in vm_sizes_list
- if size["capabilities"]["vCPUs"] >= cpus
- and size["capabilities"]["MemoryGB"] >= memMB / 1024
- and size["capabilities"]["MaxNetworkInterfaces"] >= numberInterfaces
- and re.search(self._config.get("flavors_pattern"), size["name"])
- ]
- else:
- filtered_sizes = [
- size
- for size in vm_sizes_list
- if size["capabilities"]["vCPUs"] >= cpus
- and size["capabilities"]["MemoryGB"] >= memMB / 1024
- and size["capabilities"]["MaxNetworkInterfaces"] >= numberInterfaces
- ]
+ filtered_sizes = []
+ for size in vm_sizes_list:
+ if size["resource_type"] == "virtualMachines":
+ size_cpus = int(
+ self._find_in_capabilities(size["capabilities"], "vCPUs")
+ )
+ size_memory = float(
+ self._find_in_capabilities(size["capabilities"], "MemoryGB")
+ )
+ size_interfaces = self._find_in_capabilities(
+ size["capabilities"], "MaxNetworkInterfaces"
+ )
+ if size_interfaces:
+ size_interfaces = int(size_interfaces)
+ else:
+ self.logger.debug(
+ "Flavor with no defined MaxNetworkInterfaces: {}".format(
+ size["name"]
+ )
+ )
+ continue
+ if (
+ size_cpus >= cpus
+ and size_memory >= memMB / 1024
+ and size_interfaces >= numberInterfaces
+ ):
+ if self._config.get("flavors_pattern"):
+ if re.search(
+ self._config.get("flavors_pattern"), size["name"]
+ ):
+ new_size = {
+ e["name"]: e["value"] for e in size["capabilities"]
+ }
+ new_size["name"] = size["name"]
+ filtered_sizes.append(new_size)
+ else:
+ new_size = {
+ e["name"]: e["value"] for e in size["capabilities"]
+ }
+ new_size["name"] = size["name"]
+ filtered_sizes.append(new_size)
# Sort
listedFilteredSizes = sorted(
filtered_sizes,
key=lambda k: (
- k["numberOfCores"],
- k["memoryInMB"],
- k["resourceDiskSizeInMB"],
+ int(k["vCPUs"]),
+ float(k["MemoryGB"]),
+ int(k["MaxNetworkInterfaces"]),
+ int(k["MaxResourceVolumeMB"]),
),
)
try:
self._reload_connection()
vm_sizes_list = [
- vm_size.serialize()
+ vm_size.as_dict()
for vm_size in self.conn_compute.resource_skus.list(
- "location={}".format(self.region)
+ "location eq '{}'".format(self.region)
)
]
logger.debug("Network_list: {}".format(network_list))
logger.debug("List flavors")
- flavors = azure.get_flavor_id_from_data({"vcpu": "2"})
+ flavors = azure.get_flavor_id_from_data({"vcpus": 2})
logger.debug("flavors: {}".format(flavors))
"""
logger.debug("Vmachine: {}".format(vmachine))
"""
+ """
logger.debug("List images")
image = azure.get_image_list({"name": "Canonical:UbuntuServer:16.04"})
# image = azure.get_image_list({"name": "Canonical:UbuntuServer:18.04-LTS"})
logger.debug("image: {}".format(image))
+ """
"""
# Create network and test machine