summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStamatis Katsaounis <mokats@intracom-telecom.com>2018-10-15 10:18:27 +0300
committernikoskarandreas <nick@intracom-telecom.com>2018-10-15 14:58:45 +0300
commit90780e7d12b9003955cfbb8ff0155baf75b26323 (patch)
treeec874d93b0a228ea0d5d56c1dfa62677c48f83e6
parentcfcb04c938abdcddd76bcdd2375b4a81ea28fa51 (diff)
Replace heat client calls with openstack sdk
JIRA: SDNVPN-220 This patch replaces all calls of heat client with openstack sdk. Change-Id: I75571e8de8c06d144204af787ce240c99faea6d3 Signed-off-by: Stamatis Katsaounis <mokats@intracom-telecom.com>
-rw-r--r--requirements.txt2
-rw-r--r--sdnvpn/lib/openstack_utils.py74
-rw-r--r--sdnvpn/lib/utils.py50
-rw-r--r--sdnvpn/test/functest/testcase_1bis.py36
4 files changed, 59 insertions, 103 deletions
diff --git a/requirements.txt b/requirements.txt
index 1979004..252b214 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,8 +6,6 @@ requests # Apache-2.0
opnfv
PyYAML # MIT
networking-bgpvpn>=7.0.0 # Apache-2.0
-python-cinderclient!=4.0.0 # Apache-2.0
-python-heatclient # Apache-2.0
python-keystoneclient!=2.1.0 # Apache-2.0
python-neutronclient # Apache-2.0
xtesting # Apache-2.0
diff --git a/sdnvpn/lib/openstack_utils.py b/sdnvpn/lib/openstack_utils.py
index 3fa17e6..cfacfa8 100644
--- a/sdnvpn/lib/openstack_utils.py
+++ b/sdnvpn/lib/openstack_utils.py
@@ -18,19 +18,17 @@ import urllib
from keystoneauth1 import loading
from keystoneauth1 import session
-from cinderclient import client as cinderclient
-from heatclient import client as heatclient
from keystoneclient import client as keystoneclient
from neutronclient.neutron import client as neutronclient
from openstack import connection
from openstack import cloud as os_cloud
+from openstack.exceptions import ResourceNotFound
from functest.utils import env
logger = logging.getLogger(__name__)
DEFAULT_API_VERSION = '2'
-DEFAULT_HEAT_API_VERSION = '1'
# *********************************************
@@ -165,20 +163,6 @@ def get_keystone_client(other_creds={}):
interface=os.getenv('OS_INTERFACE', 'admin'))
-def get_cinder_client_version():
- api_version = os.getenv('OS_VOLUME_API_VERSION')
- if api_version is not None:
- logger.info("OS_VOLUME_API_VERSION is set in env as '%s'",
- api_version)
- return api_version
- return DEFAULT_API_VERSION
-
-
-def get_cinder_client(other_creds={}):
- sess = get_session(other_creds)
- return cinderclient.Client(get_cinder_client_version(), session=sess)
-
-
def get_neutron_client_version():
api_version = os.getenv('OS_NETWORK_API_VERSION')
if api_version is not None:
@@ -193,20 +177,6 @@ def get_neutron_client(other_creds={}):
return neutronclient.Client(get_neutron_client_version(), session=sess)
-def get_heat_client_version():
- api_version = os.getenv('OS_ORCHESTRATION_API_VERSION')
- if api_version is not None:
- logger.info("OS_ORCHESTRATION_API_VERSION is set in env as '%s'",
- api_version)
- return api_version
- return DEFAULT_HEAT_API_VERSION
-
-
-def get_heat_client(other_creds={}):
- sess = get_session(other_creds)
- return heatclient.Client(get_heat_client_version(), session=sess)
-
-
def download_url(url, dest_path):
"""
Download a file to a destination path given a URL
@@ -1434,50 +1404,52 @@ def delete_user(keystone_client, user_id):
# *********************************************
# HEAT
# *********************************************
-def get_resource(heat_client, stack_id, resource):
+def get_resource(conn, stack_id, resource):
try:
- resources = heat_client.resources.get(stack_id, resource)
- return resources
+ resource = conn.orchestration.resources(stack_id, id=resource).next()
+ return resource
except Exception as e:
- logger.error("Error [get_resource]: %s" % e)
+ logger.error("Error [get_resource(orchestration)]: %s" % e)
return None
-def create_stack(heat_client, **kwargs):
+def create_stack(conn, **kwargs):
try:
- stack = heat_client.stacks.create(**kwargs)
- stack_id = stack['stack']['id']
+ stack = conn.orchestration.create_stack(**kwargs)
+ stack_id = stack.id
if stack_id is None:
logger.error("Stack create start failed")
raise SystemError("Stack create start failed")
return stack_id
except Exception as e:
- logger.error("Error [create_stack]: %s" % e)
+ logger.error("Error [create_stack(orchestration)]: %s" % e)
return None
-def delete_stack(heat_client, stack_id):
+def delete_stack(conn, stack_id):
try:
- heat_client.stacks.delete(stack_id)
+ conn.orchestration.delete_stack(stack_id)
return True
except Exception as e:
- logger.error("Error [delete_stack]: %s" % e)
+ logger.error("Error [delete_stack(orchestration)]: %s" % e)
return False
-def list_stack(heat_client, **kwargs):
+def list_stacks(conn, **kwargs):
try:
- result = heat_client.stacks.list(**kwargs)
+ result = conn.orchestration.stacks(**kwargs)
return result
except Exception as e:
- logger.error("Error [list_stack]: %s" % e)
+ logger.error("Error [list_stack(orchestration)]: %s" % e)
return None
-def get_output(heat_client, stack_id, output_key):
+def get_output(conn, stack_id, output_key):
try:
- output = heat_client.stacks.output_show(stack_id, output_key)
- return output
- except Exception as e:
- logger.error("Error [get_output]: %s" % e)
- return None
+ stack = conn.orchestration.get_stack(stack_id)
+ for output in stack.outputs:
+ if output['output_key'] == output_key:
+ return output
+ except ResourceNotFound as e:
+ logger.error("Error [get_output(orchestration)]: %s" % e)
+ return None
diff --git a/sdnvpn/lib/utils.py b/sdnvpn/lib/utils.py
index 135501c..a4bb959 100644
--- a/sdnvpn/lib/utils.py
+++ b/sdnvpn/lib/utils.py
@@ -14,9 +14,8 @@ import time
import requests
import re
import subprocess
-import yaml
from concurrent.futures import ThreadPoolExecutor
-from openstack.exceptions import ResourceNotFound
+from openstack.exceptions import ResourceNotFound, NotFoundException
from requests.auth import HTTPBasicAuth
from opnfv.deployment.factory import Factory as DeploymentFactory
@@ -990,7 +989,7 @@ def is_fib_entry_present_on_odl(controllers, ip_prefix, vrf_id):
return False
-def wait_stack_for_status(heat_client, stack_id, stack_status, limit=12):
+def wait_stack_for_status(conn, stack_id, stack_status, limit=12):
""" Waits to reach specified stack status. To be used with
CREATE_COMPLETE and UPDATE_COMPLETE.
Will try a specific number of attempts at 10sec intervals
@@ -1005,13 +1004,12 @@ def wait_stack_for_status(heat_client, stack_id, stack_status, limit=12):
stack_create_complete = False
attempts = 0
while attempts < limit:
- kwargs = {
- "filters": {
- "id": stack_id
- }
- }
- stack_st = os_utils.list_stack(
- heat_client, **kwargs).next().stack_status
+ try:
+ stack_st = conn.orchestration.get_stack(stack_id).status
+ except NotFoundException:
+ logger.error("Stack create failed")
+ raise SystemError("Stack create failed")
+ return False
if stack_st == stack_status:
stack_create_complete = True
break
@@ -1027,7 +1025,7 @@ def wait_stack_for_status(heat_client, stack_id, stack_status, limit=12):
return True
-def delete_stack_and_wait(heat_client, stack_id, limit=12):
+def delete_stack_and_wait(conn, stack_id, limit=12):
""" Starts and waits for completion of delete stack
Will try a specific number of attempts at 10sec intervals
@@ -1038,7 +1036,7 @@ def delete_stack_and_wait(heat_client, stack_id, limit=12):
"""
delete_started = False
if stack_id is not None:
- delete_started = os_utils.delete_stack(heat_client, stack_id)
+ delete_started = os_utils.delete_stack(conn, stack_id)
if delete_started is True:
logger.debug("Stack delete succesfully started")
@@ -1048,20 +1046,14 @@ def delete_stack_and_wait(heat_client, stack_id, limit=12):
stack_delete_complete = False
attempts = 0
while attempts < limit:
- kwargs = {
- "filters": {
- "id": stack_id
- }
- }
try:
- stack_st = os_utils.list_stack(
- heat_client, **kwargs).next().stack_status
+ stack_st = conn.orchestration.get_stack(stack_id).status
if stack_st == 'DELETE_COMPLETE':
stack_delete_complete = True
break
attempts += 1
time.sleep(10)
- except StopIteration:
+ except NotFoundException:
stack_delete_complete = True
break
@@ -1090,12 +1082,10 @@ def get_heat_environment(testcase, common_config):
param_dict = testcase.heat_parameters
param_dict['flavor'] = fl
env_dict = {'parameters': param_dict}
- environment = yaml.safe_dump(env_dict, default_flow_style=False)
- return environment
+ return env_dict
-def get_vms_from_stack_outputs(heat_client, conn,
- stack_id, vm_stack_output_keys):
+def get_vms_from_stack_outputs(conn, stack_id, vm_stack_output_keys):
""" Converts a vm name from a heat stack output to a nova vm object
:param stack_id: the id of the stack to fetch the vms from
@@ -1104,9 +1094,11 @@ def get_vms_from_stack_outputs(heat_client, conn,
"""
vms = []
for vmk in vm_stack_output_keys:
- vm_output = os_utils.get_output(heat_client, stack_id, vmk)
- vm_name = vm_output['output']['output_value']
- logger.debug("vm '%s' read from heat output" % vm_name)
- vm = os_utils.get_instance_by_name(conn, vm_name)
- vms.append(vm)
+ vm_output = os_utils.get_output(conn, stack_id, vmk)
+ if vm_output is not None:
+ vm_name = vm_output['output_value']
+ logger.debug("vm '%s' read from heat output" % vm_name)
+ vm = os_utils.get_instance_by_name(conn, vm_name)
+ if vm is not None:
+ vms.append(vm)
return vms
diff --git a/sdnvpn/test/functest/testcase_1bis.py b/sdnvpn/test/functest/testcase_1bis.py
index f33d247..c090182 100644
--- a/sdnvpn/test/functest/testcase_1bis.py
+++ b/sdnvpn/test/functest/testcase_1bis.py
@@ -33,7 +33,7 @@ def main():
results.add_to_summary(2, "STATUS", "SUBTEST")
results.add_to_summary(0, "=")
- heat_client = os_utils.get_heat_client()
+ conn = os_utils.get_os_connection()
# neutron client is needed as long as bgpvpn heat module
# is not yet installed by default in apex (APEX-618)
neutron_client = os_utils.get_neutron_client()
@@ -60,32 +60,26 @@ def main():
env = test_utils.get_heat_environment(TESTCASE_CONFIG, COMMON_CONFIG)
logger.debug("Environment is read: '%s'" % env)
- kwargs = {
- "stack_name": TESTCASE_CONFIG.stack_name,
- "template": templ,
- "environment": env,
- "parameters": {
- "image_n": TESTCASE_CONFIG.image_name,
- "av_zone_1": az_1,
- "av_zone_2": az_2
- }
- }
- stack_id = os_utils.create_stack(heat_client, **kwargs)
+ env['name'] = TESTCASE_CONFIG.stack_name
+ env['template'] = templ
+ env['parameters']['image_n'] = TESTCASE_CONFIG.image_name
+ env['parameters']['av_zone_1'] = az_1
+ env['parameters']['av_zone_2'] = az_2
+
+ stack_id = os_utils.create_stack(conn, **env)
if stack_id is None:
logger.error("Stack create start failed")
raise SystemError("Stack create start failed")
- test_utils.wait_stack_for_status(heat_client,
- stack_id, 'CREATE_COMPLETE')
+ test_utils.wait_stack_for_status(conn, stack_id, 'CREATE_COMPLETE')
- net_1_output = os_utils.get_output(heat_client, stack_id, 'net_1_o')
- network_1_id = net_1_output['output']['output_value']
- net_2_output = os_utils.get_output(heat_client, stack_id, 'net_2_o')
- network_2_id = net_2_output['output']['output_value']
+ net_1_output = os_utils.get_output(conn, stack_id, 'net_1_o')
+ network_1_id = net_1_output['output_value']
+ net_2_output = os_utils.get_output(conn, stack_id, 'net_2_o')
+ network_2_id = net_2_output['output_value']
vm_stack_output_keys = ['vm1_o', 'vm2_o', 'vm3_o', 'vm4_o', 'vm5_o']
- vms = test_utils.get_vms_from_stack_outputs(heat_client,
- conn,
+ vms = test_utils.get_vms_from_stack_outputs(conn,
stack_id,
vm_stack_output_keys)
@@ -203,7 +197,7 @@ def main():
[], [], [], [])
try:
- test_utils.delete_stack_and_wait(heat_client, stack_id)
+ test_utils.delete_stack_and_wait(conn, stack_id)
except Exception as e:
logger.error(
"exception occurred while executing testcase_1bis: %s", e)