import httplib2
import json
-from azure.pub.config.config import AAI_SCHEMA_VERSION
-from azure.pub.config.config import AAI_SERVICE_URL
-from azure.pub.config.config import AAI_USERNAME
-from azure.pub.config.config import AAI_PASSWORD
-from azure.pub.config.config import MSB_SERVICE_IP, MSB_SERVICE_PORT
+from multicloud_azure.pub.config.config import AAI_SCHEMA_VERSION
+from multicloud_azure.pub.config.config import AAI_SERVICE_URL
+from multicloud_azure.pub.config.config import AAI_USERNAME
+from multicloud_azure.pub.config.config import AAI_PASSWORD
+from multicloud_azure.pub.config.config import MSB_SERVICE_IP, MSB_SERVICE_PORT
-from azure.pub.exceptions import VimDriverAzureException
+from multicloud_azure.pub.exceptions import VimDriverAzureException
rest_no_auth, rest_oneway_auth, rest_bothway_auth = 0, 1, 2
HTTP_200_OK, HTTP_201_CREATED = '200', '201'
self.username = AAI_USERNAME
self.password = AAI_PASSWORD
self.default_headers = {
- 'X-FromAppId': 'multicloud-openstack-vmware',
+ 'X-FromAppId': 'multicloud-azure',
'X-TransactionId': '9004',
'content-type': 'application/json',
'accept': 'application/json'
def delete_vim(self):
resp = self.get_vim(get_all=True)
- logger.debug('Delete tenants')
- self._del_tenants(resp)
- logger.debug('Delete images')
- self._del_images(resp)
- logger.debug('Delete flavors')
- self._del_flavors(resp)
- logger.debug('Delete networks')
- self._del_networks(resp)
- logger.debug('Delete availability zones')
- self._del_azs(resp)
logger.debug('Delete cloud region')
resource = ("/cloud-infrastructure/cloud-regions/cloud-region"
"/%s/%s?resource-version=%s" %
self.cloud_owner, self.cloud_region, resp[1]))
def update_vim(self, content):
- # update identity url
- self.update_identity_url()
- # update tenants
- self.add_tenants(content)
- # update flavors
- self.add_images(content)
- # update images
self.add_flavors(content)
- # update networks
- self.add_networks(content)
- # update pservers
- self.add_pservers(content)
def update_identity_url(self):
vim = self.get_vim()
content=json.dumps(vim),
headers=self.default_headers)
- def add_tenants(self, content):
- for tenant in content['tenants']:
- resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/tenants/tenant/%s" % (
- self.cloud_owner, self.cloud_region, tenant['id']))
- body = {'tenant-name': tenant['name']}
- logger.debug("Adding tenants to cloud region")
- call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "PUT",
- content=json.dumps(body),
- headers=self.default_headers)
-
def add_flavors(self, content):
for flavor in content['flavors']:
resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
"%s/%s/flavors/flavor/%s" % (
- self.cloud_owner, self.cloud_region, flavor['id']))
+ self.cloud_owner, self.cloud_region,
+ flavor['name']))
body = {
'flavor-name': flavor['name'],
'flavor-vcpus': flavor['vcpus'],
'flavor-ram': flavor['ram'],
'flavor-disk': flavor['disk'],
- 'flavor-ephemeral': flavor['ephemeral'],
- 'flavor-swap': flavor['swap'],
- 'flavor-is-public': flavor['is_public'],
- 'flavor-selflink': flavor['links'][0]['href'],
- 'flavor-disabled': flavor['is_disabled']
+ 'flavor-selflink': ""
}
# Handle extra specs
if flavor['name'].startswith("onap."):
content=json.dumps(body),
headers=self.default_headers)
- def add_images(self, content):
- for image in content['images']:
- resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/images/image/%s" % (
- self.cloud_owner, self.cloud_region, image['id']))
- split_image_name = image['name'].split("-")
- os_distro = split_image_name[0]
- os_version = split_image_name[1] if \
- len(split_image_name) > 1 else ""
- body = {
- 'image-name': image['name'],
- # 'image-architecture': image[''],
- 'image-os-distro': os_distro,
- 'image-os-version': os_version,
- # 'application': image[''],
- # 'application-vendor': image[''],
- # 'application-version': image[''],
- # TODO replace this with image proxy endpoint
- 'image-selflink': "",
- }
- logger.debug("Adding images to cloud region")
- call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "PUT",
- content=json.dumps(body),
- headers=self.default_headers)
-
- def add_networks(self, content):
- for network in content['networks']:
- resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/oam-networks/oam-network/%s" % (
- self.cloud_owner, self.cloud_region,
- network['id']))
- body = {
- 'network-uuid': network['id'],
- 'network-name': network['name'],
- 'cvlan-tag': network['segmentationId'] or 0,
- }
- logger.debug("Adding networks to cloud region")
- call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "PUT",
- content=json.dumps(body),
- headers=self.default_headers)
-
- def add_pservers(self, content):
- for hypervisor in content['hypervisors']:
- resource = ("/cloud-infrastructure/pservers/pserver/%s" % (
- hypervisor['name']))
- body = {
- # 'ptnii-equip-name'
- 'number-of-cpus': hypervisor['vcpus'],
- 'disk-in-gigabytes': hypervisor['local_disk_size'],
- 'ram-in-megabytes': hypervisor['memory_size'],
- # 'equip-type'
- # 'equip-vendor'
- # 'equip-model'
- # 'fqdn'
- # 'pserver-selflink'
- 'ipv4-oam-address': hypervisor['host_ip'],
- # 'serial-number'
- # 'ipaddress-v4-loopback-0'
- # 'ipaddress-v6-loopback-0'
- # 'ipaddress-v4-aim'
- # 'ipaddress-v6-aim'
- # 'ipaddress-v6-oam'
- # 'inv-status'
- 'pserver-id': hypervisor['id'],
- # 'internet-topology'
- }
- logger.debug("Adding pservers")
- call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "PUT",
- content=json.dumps(body),
- headers=self.default_headers)
- # update relationship
- resource = ("/cloud-infrastructure/pservers/pserver/%s/"
- "relationship-list/relationship" %
- hypervisor['name'])
- related_link = ("%s/cloud-infrastructure/cloud-regions/"
- "cloud-region/%s/%s" % (
- self.base_url, self.cloud_owner,
- self.cloud_region))
- body = {
- 'related-to': 'cloud-region',
- 'related-link': related_link,
- 'relationship-data': [
- {
- 'relationship-key': 'cloud-region.cloud-owner',
- 'relationship-value': self.cloud_owner
- },
- {
- 'relationship-key': 'cloud-region.cloud-region-id',
- 'relationship-value': self.cloud_region
- }
- ]
- }
- logger.debug("Connecting pservers and cloud region")
- call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "PUT",
- content=json.dumps(body),
- headers=self.default_headers)
-
- def _del_tenants(self, rsp):
- tenants = rsp.get("tenants", [])
- if not tenants:
- return
- for tenant in tenants["tenant"]:
- resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/tenants/tenant/%s?resource-version=%s" % (
- self.cloud_owner, self.cloud_region,
- tenant['tenant-id'], tenant['resource-version']))
- resp = call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "DELETE",
- headers=self.default_headers)
- if resp[0] != 0:
- raise VimDriverAzureException(
- status_code=400,
- content="Failed to delete tenant %s: %s." % (
- tenant['tenant-id'], resp[1]))
-
- def _del_hpa(self, flavor):
- hpas = flavor.get("hpa-capabilities", {}).get("hpa-capability", [])
- for hpa in hpas:
- resource = (
- "/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/flavors/flavor/%s/hpa-capabilities/hpa-capability/%s"
- "?resource-version=%s" % (
- self.cloud_owner, self.cloud_region,
- flavor['flavor-id'], hpa['hpa-capability-id'],
- hpa['resource-version']))
- resp = call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "DELETE",
- headers=self.default_headers)
- if resp[0] != 0:
- raise VimDriverAzureException(
- status_code=400,
- content="Failed to delete flavor %s on hpa %s: %s." % (
- flavor['flavor-id'], hpa['hpa-capability-id'],
- resp[1]))
-
- def _del_flavors(self, rsp):
- flavors = rsp.get("flavors", [])
- if not flavors:
- return
- for flavor in flavors["flavor"]:
- self._del_hpa(flavor)
- resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/flavors/flavor/%s?resource-version=%s" % (
- self.cloud_owner, self.cloud_region,
- flavor['flavor-id'], flavor['resource-version']))
- resp = call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "DELETE",
- headers=self.default_headers)
- if resp[0] != 0:
- raise VimDriverAzureException(
- status_code=400,
- content="Failed to delete flavor %s: %s." % (
- flavor['flavor-id'], resp[1]))
-
- def _del_images(self, rsp):
- tenants = rsp.get("images", [])
- if not tenants:
- return
- for tenant in tenants["image"]:
- resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/images/image/%s?resource-version=%s" % (
- self.cloud_owner, self.cloud_region,
- tenant['image-id'], tenant['resource-version']))
- resp = call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "DELETE",
- headers=self.default_headers)
- if resp[0] != 0:
- raise VimDriverAzureException(
- status_code=400,
- content="Failed to delete image %s: %s." % (
- tenant['image-id'], resp[1]))
-
- def _del_networks(self, rsp):
- networks = rsp.get("oam-networks", [])
- if not networks:
- return
- for network in networks["oam-network"]:
- resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/oam-networks/oam-network/%s?"
- "resource-version=%s" % (
- self.cloud_owner, self.cloud_region,
- network['network-uuid'],
- network['resource-version']))
- resp = call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "DELETE",
- headers=self.default_headers)
- if resp[0] != 0:
- raise VimDriverAzureException(
- status_code=400,
- content="Failed to delete network %s: %s." % (
- network['network-uuid'], resp[1]))
-
- def _del_azs(self, rsp):
- azs = rsp.get("availability-zones", [])
- if not azs:
- return
- for az in azs["availability-zone"]:
- resource = ("/cloud-infrastructure/cloud-regions/cloud-region/"
- "%s/%s/availability-zones/availability-zone/%s?"
- "resource-version=%s" % (
- self.cloud_owner, self.cloud_region,
- az['availability-zone-name'],
- az['resource-version']))
- resp = call_req(self.base_url, self.username, self.password,
- rest_no_auth, resource, "DELETE",
- headers=self.default_headers)
- if resp[0] != 0:
- raise VimDriverAzureException(
- status_code=400,
- content="Failed to delete availability zone %s: %s." % (
- az['availability-zone-name'], resp[1]))
-
def _get_hpa_capabilities(self, flavor):
hpa_caps = []
basic_capability['hpa-feature-attributes'].append({
'hpa-attribute-key': 'virtualMemSize',
'hpa-attribute-value': json.dumps({'value': str(
- flavor['ram']), 'unit': 'MB'})})
+ flavor['ram']), 'unit': 'GB'})})
return basic_capability
storage_capability['hpa-feature-attributes'].append({
'hpa-attribute-key': 'diskSize',
'hpa-attribute-value': json.dumps({'value': str(
- flavor['disk']), 'unit': 'GB'})
+ flavor['disk']), 'unit': 'MB'})
})
storage_capability['hpa-feature-attributes'].append({
'hpa-attribute-key': 'swapMemSize',