blob: 87d11a2ad56055d57815ac08d5c8496b8c845e2e [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2016 RIFT.IO Inc
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import asyncio
import logging
import os
import sys
import types
import unittest
import uuid
import random
import xmlrunner
import gi
gi.require_version('CF', '1.0')
gi.require_version('RwDts', '1.0')
gi.require_version('RwMain', '1.0')
gi.require_version('RwManifestYang', '1.0')
gi.require_version('RwResourceMgrYang', '1.0')
gi.require_version('RwcalYang', '1.0')
gi.require_version('RwTypes', '1.0')
gi.require_version('RwCal', '1.0')
import gi.repository.CF as cf
import gi.repository.RwDts as rwdts
import gi.repository.RwMain as rwmain
import gi.repository.RwManifestYang as rwmanifest
import gi.repository.RwResourceMgrYang as rmgryang
from gi.repository import RwcalYang
from gi.repository import RwCloudYang
from gi.repository.RwTypes import RwStatus
import rw_peas
import rift.tasklets
import rift.test.dts
if sys.version_info < (3, 4, 4):
asyncio.ensure_future = asyncio.async
openstack_info = {
'username' : 'pluto',
'password' : 'mypasswd',
'auth_url' : 'http://10.66.4.14:5000/v3/',
'project_name' : 'demo',
'mgmt_network' : 'private',
'image_id' : '5cece2b1-1a49-42c5-8029-833c56574652',
'vms' : ['res-test-1', 'res-test-2'],
'networks' : ['testnet1', 'testnet2']}
def create_mock_resource_temaplate():
### Resource to be reuqested for 'mock'
resource_requests = {'compute': {}, 'network': {}}
###### mycompute-0
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = str(uuid.uuid3(uuid.NAMESPACE_DNS, 'image-0'))
msg.vm_flavor.vcpu_count = 4
msg.vm_flavor.memory_mb = 8192
msg.vm_flavor.storage_gb = 40
resource_requests['compute']['mycompute-0'] = msg
###### mycompute-1
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = str(uuid.uuid3(uuid.NAMESPACE_DNS, 'image-1'))
msg.vm_flavor.vcpu_count = 2
msg.vm_flavor.memory_mb = 8192
msg.vm_flavor.storage_gb = 20
resource_requests['compute']['mycompute-1'] = msg
####### mynet-0
msg = rmgryang.VirtualLinkEventData_RequestInfo()
resource_requests['network']['mynet-0'] = msg
####### mynet-1
msg = rmgryang.VirtualLinkEventData_RequestInfo()
resource_requests['network']['mynet-1'] = msg
return resource_requests
def create_cloudsim_resource_template():
### Resource to be reuqested for 'cloudsim'
resource_requests = {'compute': {}, 'network': {}}
###### mycompute-0
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = "1"
msg.vm_flavor.vcpu_count = 4
msg.vm_flavor.memory_mb = 8192
msg.vm_flavor.storage_gb = 40
resource_requests['compute']['mycompute-0'] = msg
###### mycompute-1
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = "1"
msg.vm_flavor.vcpu_count = 2
msg.vm_flavor.memory_mb = 8192
msg.vm_flavor.storage_gb = 20
resource_requests['compute']['mycompute-1'] = msg
####### mynet-0
msg = rmgryang.VirtualLinkEventData_RequestInfo()
resource_requests['network']['mynet-0'] = msg
####### mynet-1
msg = rmgryang.VirtualLinkEventData_RequestInfo()
resource_requests['network']['mynet-1'] = msg
return resource_requests
def create_mock_resource_temaplate():
### Resource to be reuqested for 'mock'
resource_requests = {'compute': {}, 'network': {}}
###### mycompute-0
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = str(uuid.uuid3(uuid.NAMESPACE_DNS, 'image-0'))
msg.vm_flavor.vcpu_count = 4
msg.vm_flavor.memory_mb = 8192
msg.vm_flavor.storage_gb = 40
resource_requests['compute']['mycompute-0'] = msg
###### mycompute-1
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = str(uuid.uuid3(uuid.NAMESPACE_DNS, 'image-1'))
msg.vm_flavor.vcpu_count = 2
msg.vm_flavor.memory_mb = 8192
msg.vm_flavor.storage_gb = 20
resource_requests['compute']['mycompute-1'] = msg
####### mynet-0
msg = rmgryang.VirtualLinkEventData_RequestInfo()
resource_requests['network']['mynet-0'] = msg
####### mynet-1
msg = rmgryang.VirtualLinkEventData_RequestInfo()
resource_requests['network']['mynet-1'] = msg
return resource_requests
def create_openstack_static_template():
### Resource to be reuqested for 'openstack_static'
resource_requests = {'compute': {}, 'network': {}}
###### mycompute-0
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = openstack_info['image_id']
msg.vm_flavor.vcpu_count = 4
msg.vm_flavor.memory_mb = 8192
msg.vm_flavor.storage_gb = 80
resource_requests['compute']['mycompute-0'] = msg
###### mycompute-1
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = openstack_info['image_id']
msg.vm_flavor.vcpu_count = 2
msg.vm_flavor.memory_mb = 4096
msg.vm_flavor.storage_gb = 40
resource_requests['compute']['mycompute-1'] = msg
####### mynet-0
msg = rmgryang.VirtualLinkEventData_RequestInfo()
msg.provider_network.physical_network = 'PHYSNET1'
msg.provider_network.overlay_type = 'VLAN'
msg.provider_network.segmentation_id = 17
resource_requests['network']['mynet-0'] = msg
####### mynet-1
msg = rmgryang.VirtualLinkEventData_RequestInfo()
msg.provider_network.physical_network = 'PHYSNET1'
msg.provider_network.overlay_type = 'VLAN'
msg.provider_network.segmentation_id = 18
resource_requests['network']['mynet-1'] = msg
return resource_requests
def create_openstack_dynamic_template():
### Resource to be reuqested for 'openstack_dynamic'
resource_requests = {'compute': {}, 'network': {}}
###### mycompute-0
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = openstack_info['image_id']
msg.vm_flavor.vcpu_count = 2
msg.vm_flavor.memory_mb = 4096
msg.vm_flavor.storage_gb = 40
msg.guest_epa.mempage_size = 'LARGE'
msg.guest_epa.cpu_pinning_policy = 'DEDICATED'
msg.allocate_public_address = True
resource_requests['compute']['mycompute-0'] = msg
###### mycompute-1
msg = rmgryang.VDUEventData_RequestInfo()
msg.image_id = openstack_info['image_id']
msg.vm_flavor.vcpu_count = 4
msg.vm_flavor.memory_mb = 8192
msg.vm_flavor.storage_gb = 40
msg.guest_epa.mempage_size = 'LARGE'
msg.guest_epa.cpu_pinning_policy = 'DEDICATED'
msg.allocate_public_address = True
resource_requests['compute']['mycompute-1'] = msg
####### mynet-0
msg = rmgryang.VirtualLinkEventData_RequestInfo()
#msg.provider_network.overlay_type = 'VXLAN'
#msg.provider_network.segmentation_id = 71
resource_requests['network']['mynet-0'] = msg
####### mynet-1
msg = rmgryang.VirtualLinkEventData_RequestInfo()
#msg.provider_network.overlay_type = 'VXLAN'
#msg.provider_network.segmentation_id = 73
resource_requests['network']['mynet-1'] = msg
return resource_requests
resource_requests = {
'mock' : create_mock_resource_temaplate(),
'openstack_static': create_openstack_static_template(),
'openstack_dynamic': create_openstack_dynamic_template(),
'cloudsim': create_cloudsim_resource_template(),
}
def get_cal_account(account_type):
"""
Creates an object for class RwcalYang.CloudAccount()
"""
account = RwcalYang.CloudAccount()
if account_type == 'mock':
account.name = 'mock_account'
account.account_type = "mock"
account.mock.username = "mock_user"
elif ((account_type == 'openstack_static') or (account_type == 'openstack_dynamic')):
account.name = 'openstack_cal'
account.account_type = 'openstack'
account.openstack.key = openstack_info['username']
account.openstack.secret = openstack_info['password']
account.openstack.auth_url = openstack_info['auth_url']
account.openstack.tenant = openstack_info['project_name']
account.openstack.mgmt_network = openstack_info['mgmt_network']
elif account_type == 'cloudsim':
account.name = 'cloudsim'
account.account_type = "cloudsim_proxy"
return account
def create_cal_plugin(account, log_hdl):
plugin_name = getattr(account, account.account_type).plugin_name
plugin = rw_peas.PeasPlugin(plugin_name, 'RwCal-1.0')
engine, info, extension = plugin()
rwcal = plugin.get_interface("Cloud")
try:
rc = rwcal.init(log_hdl)
assert rc == RwStatus.SUCCESS
except Exception as e:
raise
return rwcal
class RMMgrTestCase(rift.test.dts.AbstractDTSTest):
rwcal = None
rwcal_acct_info = None
@classmethod
def configure_suite(cls, rwmain):
rm_dir = os.environ.get('RM_DIR')
cnt_mgr_dir = os.environ.get('CNTR_MGR_DIR')
cal_proxy_dir = os.environ.get('CAL_PROXY_DIR')
cls.rwmain.add_tasklet(cal_proxy_dir, 'rwcalproxytasklet')
cls.rwmain.add_tasklet(rm_dir, 'rwresmgrtasklet')
cls.rwmain.add_tasklet(cnt_mgr_dir, 'rwcntmgrtasklet')
@classmethod
def configure_schema(cls):
return rmgryang.get_schema()
@asyncio.coroutine
def wait_tasklets(self):
yield from asyncio.sleep(1, loop=self.loop)
@classmethod
def configure_timeout(cls):
return 360
def get_cloud_account_msg(self, acct_type):
cloud_account = RwCloudYang.CloudAccount()
acct = get_cal_account(acct_type)
cloud_account.from_dict(acct.as_dict())
cloud_account.name = acct.name
return cloud_account
def get_compute_pool_msg(self, name, pool_type, cloud_type):
pool_config = rmgryang.ResourcePools()
pool = pool_config.pools.add()
pool.name = name
pool.resource_type = "compute"
if pool_type == "static":
pool.pool_type = 'static'
acct = get_cal_account(cloud_type)
rwcal = create_cal_plugin(acct, self.tinfo.get_rwlog_ctx())
rc, rsp = rwcal.get_vdu_list(acct)
assert rc == RwStatus.SUCCESS
if cloud_type == 'openstack_static':
for vdu in rsp.vdu_info_list:
if vdu.name in openstack_info['vms']:
self.log.info("Adding the static compute resource: %s to compute pool", vdu.name)
r = pool.resources.add()
r.resource_id = vdu.vdu_id
else:
# 'mock', 'cloudsim' 'openstack_dynamic' etc
for vdu in rsp.vdu_info_list:
self.log.info("Adding the static compute resource: %s to compute pool", vdu.name)
r = pool.resources.add()
r.resource_id = vdu.vdu_id
else:
pool.pool_type = 'dynamic'
pool.max_size = 10
return pool_config
def get_network_pool_msg(self, name, pool_type, cloud_type):
pool_config = rmgryang.ResourcePools()
pool = pool_config.pools.add()
pool.name = name
pool.resource_type = "network"
if pool_type == "static":
pool.pool_type = 'static'
acct = get_cal_account(cloud_type)
rwcal = create_cal_plugin(acct, self.tinfo.get_rwlog_ctx())
rc, rsp = rwcal.get_virtual_link_list(acct)
assert rc == RwStatus.SUCCESS
if cloud_type == 'openstack_static':
for vlink in rsp.virtual_link_info_list:
if vlink.name in openstack_info['networks']:
self.log.info("Adding the static network resource: %s to network pool", vlink.name)
r = pool.resources.add()
r.resource_id = vlink.virtual_link_id
else:
# 'mock', 'cloudsim', 'openstack_dynamic' etc
for vlink in rsp.virtual_link_info_list:
self.log.info("Adding the static network resource: %s to network pool", vlink.name)
r = pool.resources.add()
r.resource_id = vlink.virtual_link_id
else:
pool.pool_type = 'dynamic'
pool.max_size = 4
return pool_config
def get_network_reserve_msg(self, name, cloud_type, xpath):
event_id = str(uuid.uuid4())
msg = rmgryang.VirtualLinkEventData()
msg.event_id = event_id
msg.request_info.name = name
attributes = ['physical_network', 'name', 'overlay_type', 'segmentation_id']
for attr in attributes:
if resource_requests[cloud_type]['network'][name].has_field('provider_network'):
if resource_requests[cloud_type]['network'][name].provider_network.has_field(attr):
setattr(msg.request_info.provider_network, attr,
getattr(resource_requests[cloud_type]['network'][name].provider_network ,attr))
return msg, xpath.format(event_id)
def get_compute_reserve_msg(self, name, cloud_type, xpath, vlinks):
event_id = str(uuid.uuid4())
msg = rmgryang.VDUEventData()
msg.event_id = event_id
msg.request_info.name = name
msg.request_info.image_id = resource_requests[cloud_type]['compute'][name].image_id
attributes = ['image_id', 'vcpu_count', 'memory_mb', 'storage_gb']
if resource_requests[cloud_type]['compute'][name].has_field('vm_flavor'):
for attr in attributes:
if resource_requests[cloud_type]['compute'][name].vm_flavor.has_field(attr):
setattr(msg.request_info.vm_flavor,
attr,
getattr(resource_requests[cloud_type]['compute'][name].vm_flavor , attr))
attributes = ['mempage_size', 'cpu_pinning_policy']
if resource_requests[cloud_type]['compute'][name].has_field('guest_epa'):
for attr in attributes:
if resource_requests[cloud_type]['compute'][name].guest_epa.has_field(attr):
setattr(msg.request_info.guest_epa,
attr,
getattr(resource_requests[cloud_type]['compute'][name].guest_epa , attr))
if resource_requests[cloud_type]['compute'][name].has_field('allocate_public_address'):
msg.request_info.allocate_public_address = resource_requests[cloud_type]['compute'][name].allocate_public_address
cnt = 0
for link in vlinks:
c1 = msg.request_info.connection_points.add()
c1.name = name+"-port-"+str(cnt)
cnt += 1
c1.virtual_link_id = link
self.log.info("Sending message :%s", msg)
return msg, xpath.format(event_id)
@asyncio.coroutine
def configure_cloud_account(self, dts, acct_type):
account_xpath = "C,/rw-cloud:cloud/account"
msg = self.get_cloud_account_msg(acct_type)
self.log.info("Configuring cloud-account: %s",msg)
yield from dts.query_create(account_xpath,
rwdts.XactFlag.ADVISE,
msg)
@asyncio.coroutine
def configure_compute_resource_pools(self, dts, resource_type, cloud_type):
pool_xpath = "C,/rw-resource-mgr:resource-mgr-config/rw-resource-mgr:resource-pools"
msg = self.get_compute_pool_msg("virtual-compute", resource_type, cloud_type)
self.log.info("Configuring compute-resource-pool: %s",msg)
yield from dts.query_create(pool_xpath,
rwdts.XactFlag.ADVISE,
msg)
@asyncio.coroutine
def configure_network_resource_pools(self, dts, resource_type, cloud_type):
pool_xpath = "C,/rw-resource-mgr:resource-mgr-config/rw-resource-mgr:resource-pools"
msg = self.get_network_pool_msg("virtual-network", resource_type, cloud_type)
self.log.info("Configuring network-resource-pool: %s",msg)
yield from dts.query_create(pool_xpath,
rwdts.XactFlag.ADVISE,
msg)
@asyncio.coroutine
def verify_resource_pools_config(self, dts):
pool_records_xpath = "D,/rw-resource-mgr:resource-pool-records"
self.log.debug("Verifying test_create_resource_pools results")
res_iter = yield from dts.query_read(pool_records_xpath,)
for result in res_iter:
response = yield from result
records = response.result.records
#self.assertEqual(len(records), 2)
#names = [i.name for i in records]
#self.assertTrue('virtual-compute' in names)
#self.assertTrue('virtual-network' in names)
for record in records:
self.log.debug("Received Pool Record, Name: %s, Resource Type: %s, Pool Status: %s, Pool Size: %d, Allocated Resources: %d, Free Resources: %d",
record.name,
record.resource_type,
record.pool_status,
record.total_resources,
record.allocated_resources,
record.free_resources)
@asyncio.coroutine
def read_resource(self, dts, xpath):
self.log.debug("Reading data for XPATH:%s", xpath)
result = yield from dts.query_read(xpath, rwdts.XactFlag.MERGE)
msg = None
for r in result:
msg = yield from r
self.log.debug("Received data: %s", msg.result)
return msg.result
@asyncio.coroutine
def reserve_network_resources(self, name, dts, cloud_type):
network_xpath = "D,/rw-resource-mgr:resource-mgmt/vlink-event/vlink-event-data[event-id='{}']"
msg,xpath = self.get_network_reserve_msg(name, cloud_type, network_xpath)
self.log.debug("Sending create event to network-event xpath %s with msg: %s" % (xpath, msg))
yield from dts.query_create(xpath, 0, msg)
return xpath
@asyncio.coroutine
def reserve_compute_resources(self, name, dts, cloud_type, vlinks = []):
compute_xpath = "D,/rw-resource-mgr:resource-mgmt/vdu-event/vdu-event-data[event-id='{}']"
msg,xpath = self.get_compute_reserve_msg(name, cloud_type, compute_xpath, vlinks)
self.log.debug("Sending create event to compute-event xpath %s with msg: %s" % (xpath, msg))
yield from dts.query_create(xpath, 0, msg)
return xpath
@asyncio.coroutine
def release_network_resources(self, dts, xpath):
self.log.debug("Initiating network resource release for : %s ", xpath)
yield from dts.query_delete(xpath, 0)
@asyncio.coroutine
def release_compute_resources(self, dts, xpath):
self.log.debug("Initiating compute resource release for : %s ", xpath)
yield from dts.query_delete(xpath, 0)
@unittest.skip("Skipping test_static_pool_resource_allocation")
def test_static_pool_resource_allocation(self):
self.log.debug("STARTING - test_static_pool_resource_allocation")
tinfo = self.new_tinfo('static_mock')
dts = rift.tasklets.DTS(tinfo, self.schema, self.loop)
@asyncio.coroutine
def run_test():
networks = []
computes = []
cloud_type = 'mock'
yield from self.wait_tasklets()
yield from self.configure_cloud_account(dts, cloud_type)
yield from self.configure_network_resource_pools(dts, "static", cloud_type)
yield from self.configure_compute_resource_pools(dts, "static", cloud_type)
yield from self.verify_resource_pools_config(dts)
r_xpath = yield from self.reserve_network_resources('mynet-0', dts, cloud_type)
r_info = yield from self.read_resource(dts,r_xpath)
networks.append((r_xpath, r_info.resource_info))
for i in range(2):
r_xpath = yield from self.reserve_compute_resources("mycompute-"+str(i),
dts,
cloud_type,
[networks[0][1].virtual_link_id])
r_info = yield from self.read_resource(dts,r_xpath)
computes.append((r_xpath, r_info))
yield from self.verify_resource_pools_config(dts)
for r in computes:
yield from self.release_compute_resources(dts, r[0])
yield from self.release_network_resources(dts,networks[0][0])
yield from self.verify_resource_pools_config(dts)
future = asyncio.ensure_future(run_test(), loop=self.loop)
self.run_until(future.done)
if future.exception() is not None:
self.log.error("Caught exception during test")
raise future.exception()
self.log.debug("DONE - test_static_pool_resource_allocation")
@unittest.skip("Skipping test_dynamic_pool_resource_allocation")
def test_dynamic_pool_resource_allocation(self):
self.log.debug("STARTING - test_dynamic_pool_resource_allocation")
tinfo = self.new_tinfo('dynamic_mock')
dts = rift.tasklets.DTS(tinfo, self.schema, self.loop)
@asyncio.coroutine
def run_test():
networks = []
computes = []
cloud_type = 'mock'
yield from self.wait_tasklets()
yield from self.configure_cloud_account(dts, cloud_type)
yield from self.configure_network_resource_pools(dts, "dynamic", cloud_type)
yield from self.configure_compute_resource_pools(dts, "dynamic", cloud_type)
yield from self.verify_resource_pools_config(dts)
r_xpath = yield from self.reserve_network_resources('mynet-0', dts, cloud_type)
r_info = yield from self.read_resource(dts,r_xpath)
networks.append((r_xpath, r_info.resource_info))
for i in range(2):
r_xpath = yield from self.reserve_compute_resources("mycompute-"+str(i),
dts,
cloud_type,
[networks[0][1].virtual_link_id])
r_info = yield from self.read_resource(dts,r_xpath)
computes.append((r_xpath, r_info))
yield from self.verify_resource_pools_config(dts)
for r in computes:
self.log.debug("Releasing compute resource with id: %s", r[1].resource_info.vdu_id)
yield from self.release_compute_resources(dts, r[0])
yield from self.release_network_resources(dts,networks[0][0])
yield from self.verify_resource_pools_config(dts)
future = asyncio.ensure_future(run_test(), loop=self.loop)
self.run_until(future.done)
if future.exception() is not None:
self.log.error("Caught exception during test")
raise future.exception()
self.log.debug("DONE - test_dynamic_pool_resource_allocation")
@unittest.skip("Skipping test_dynamic_pool_resource_allocation")
def test_dynamic_cloudsim_pool_resource_allocation(self):
self.log.debug("STARTING - test_dynamic_pool_resource_allocation")
tinfo = self.new_tinfo('dynamic_mock')
dts = rift.tasklets.DTS(tinfo, self.schema, self.loop)
@asyncio.coroutine
def run_test():
networks = []
computes = []
cloud_type = 'cloudsim'
yield from asyncio.sleep(120, loop=self.loop)
yield from self.configure_cloud_account(dts, cloud_type)
yield from self.configure_network_resource_pools(dts, "dynamic", cloud_type)
yield from self.configure_compute_resource_pools(dts, "dynamic", cloud_type)
yield from self.verify_resource_pools_config(dts)
r_xpath = yield from self.reserve_network_resources('mynet-0', dts, cloud_type)
r_info = yield from self.read_resource(dts,r_xpath)
networks.append((r_xpath, r_info.resource_info))
for i in range(2):
r_xpath = yield from self.reserve_compute_resources("mycompute-"+str(i),
dts,
cloud_type,
[networks[0][1].virtual_link_id])
r_info = yield from self.read_resource(dts,r_xpath)
computes.append((r_xpath, r_info))
yield from self.verify_resource_pools_config(dts)
for r in computes:
self.log.debug("Releasing compute resource with id: %s", r[1].resource_info.vdu_id)
yield from self.release_compute_resources(dts, r[0])
yield from self.release_network_resources(dts,networks[0][0])
yield from self.verify_resource_pools_config(dts)
future = asyncio.ensure_future(run_test(), loop=self.loop)
self.run_until(future.done)
if future.exception() is not None:
self.log.error("Caught exception during test")
raise future.exception()
self.log.debug("DONE - test_dynamic_pool_resource_allocation")
@unittest.skip("Skipping test_static_pool_openstack_resource_allocation")
def test_static_pool_openstack_resource_allocation(self):
self.log.debug("STARTING - test_static_pool_openstack_resource_allocation")
tinfo = self.new_tinfo('static_openstack')
dts = rift.tasklets.DTS(tinfo, self.schema, self.loop)
@asyncio.coroutine
def run_test():
networks = []
computes = []
cloud_type = 'openstack_static'
yield from self.wait_tasklets()
yield from self.configure_cloud_account(dts, cloud_type)
yield from self.configure_network_resource_pools(dts, "static", cloud_type)
yield from self.configure_compute_resource_pools(dts, "static", cloud_type)
yield from self.verify_resource_pools_config(dts)
self.log.debug("Creating virtual-network-resources in openstack")
r_xpath = yield from self.reserve_network_resources('mynet-0', dts, cloud_type)
r_info = yield from self.read_resource(dts,r_xpath)
networks.append((r_xpath, r_info.resource_info))
self.log.debug("virtual-network-resources successfully created in openstack")
self.log.debug("Creating virtual-network-compute in openstack")
for i in range(2):
r_xpath = yield from self.reserve_compute_resources("mycompute-" + str(i),
dts,
cloud_type,
[networks[0][1].virtual_link_id])
r_info = yield from self.read_resource(dts,r_xpath)
computes.append((r_xpath, r_info))
yield from self.verify_resource_pools_config(dts)
for r in computes:
self.log.debug("Releasing compute resource with id: %s", r[1].resource_info.vdu_id)
yield from self.release_compute_resources(dts, r[0])
yield from self.release_network_resources(dts,networks[0][0])
yield from self.verify_resource_pools_config(dts)
self.log.debug("Openstack static resource allocation completed")
future = asyncio.ensure_future(run_test(), loop=self.loop)
self.run_until(future.done)
if future.exception() is not None:
self.log.error("Caught exception during test")
raise future.exception()
self.log.debug("DONE - test_static_pool_openstack_resource_allocation")
#@unittest.skip("Skipping test_dynamic_pool_openstack_resource_allocation")
def test_dynamic_pool_openstack_resource_allocation(self):
self.log.debug("STARTING - test_dynamic_pool_openstack_resource_allocation")
tinfo = self.new_tinfo('dynamic_openstack')
dts = rift.tasklets.DTS(tinfo, self.schema, self.loop)
@asyncio.coroutine
def run_test():
networks = []
computes = []
cloud_type = 'openstack_dynamic'
yield from self.wait_tasklets()
yield from self.configure_cloud_account(dts, cloud_type)
yield from self.configure_network_resource_pools(dts, "dynamic", cloud_type)
yield from self.configure_compute_resource_pools(dts, "dynamic", cloud_type)
yield from self.verify_resource_pools_config(dts)
self.log.debug("Creating virtual-network-resources in openstack")
r_xpath = yield from self.reserve_network_resources('mynet-0', dts, cloud_type)
r_info = yield from self.read_resource(dts,r_xpath)
networks.append((r_xpath, r_info.resource_info))
self.log.debug("virtual-network-resources successfully created in openstack")
self.log.debug("Creating virtual-network-compute in openstack")
for i in range(2):
r_xpath = yield from self.reserve_compute_resources("mycompute-" + str(i),
dts,
cloud_type,
[networks[0][1].virtual_link_id])
r_info = yield from self.read_resource(dts,r_xpath)
computes.append((r_xpath, r_info))
yield from self.verify_resource_pools_config(dts)
for r in computes:
self.log.debug("Releasing compute resource with id: %s", r[1].resource_info.vdu_id)
#yield from self.release_compute_resources(dts, r[0])
self.log.debug("Releasing network resource with id: %s", r[1].resource_info.vdu_id)
#yield from self.release_network_resources(dts,networks[0][0])
#yield from self.verify_resource_pools_config(dts)
self.log.debug("Openstack dynamic resource allocation completed")
future = asyncio.ensure_future(run_test(), loop=self.loop)
self.run_until(future.done)
if future.exception() is not None:
self.log.error("Caught exception during test")
raise future.exception()
self.log.debug("DONE - test_dynamic_pool_openstack_resource_allocation")
def main():
plugin_dir = os.path.join(os.environ["RIFT_INSTALL"], "usr/lib/rift/plugins")
if 'MESSAGE_BROKER_DIR' not in os.environ:
os.environ['MESSAGE_BROKER_DIR'] = os.path.join(plugin_dir, 'rwmsgbroker-c')
if 'ROUTER_DIR' not in os.environ:
os.environ['ROUTER_DIR'] = os.path.join(plugin_dir, 'rwdtsrouter-c')
if 'RM_DIR' not in os.environ:
os.environ['RM_DIR'] = os.path.join(plugin_dir, 'rwresmgrtasklet')
if 'CAL_PROXY_DIR' not in os.environ:
os.environ['CAL_PROXY_DIR'] = os.path.join(plugin_dir, 'rwcalproxytasklet')
if 'CNTR_MGR_DIR' not in os.environ:
os.environ['CNTR_MGR_DIR'] = os.path.join(plugin_dir, 'rwcntmgrtasklet')
runner = xmlrunner.XMLTestRunner(output=os.environ["RIFT_MODULE_TEST"])
unittest.main(testRunner=runner)
if __name__ == '__main__':
main()