aboutsummaryrefslogtreecommitdiffstats
path: root/sfc/lib/openstack_tacker.py
diff options
context:
space:
mode:
Diffstat (limited to 'sfc/lib/openstack_tacker.py')
-rw-r--r--sfc/lib/openstack_tacker.py169
1 files changed, 165 insertions, 4 deletions
diff --git a/sfc/lib/openstack_tacker.py b/sfc/lib/openstack_tacker.py
index 7b0f79a2..df112c39 100644
--- a/sfc/lib/openstack_tacker.py
+++ b/sfc/lib/openstack_tacker.py
@@ -1,6 +1,8 @@
import logging
import os
import time
+import json
+import yaml
from tackerclient.tacker import client as tackerclient
from functest.utils import openstack_utils as os_utils
@@ -41,6 +43,10 @@ def get_vnfd_id(tacker_client, vnfd_name):
return get_id_from_name(tacker_client, 'vnfd', vnfd_name)
+def get_vim_id(tacker_client, vim_name):
+ return get_id_from_name(tacker_client, 'vim', vim_name)
+
+
def get_vnf_id(tacker_client, vnf_name, timeout=5):
vnf_id = None
while vnf_id is None and timeout >= 0:
@@ -53,6 +59,22 @@ def get_vnf_id(tacker_client, vnf_name, timeout=5):
return vnf_id
+def get_vnffg_id(tacker_client, vnffg_name, timeout=5):
+ vnffg_id = None
+ while vnffg_id is None and timeout >= 0:
+ vnffg_id = get_id_from_name(tacker_client, 'vnffg', vnffg_name)
+ if vnffg_id is None:
+ logger.info("Could not retrieve ID for vnffg with name [%s]."
+ " Retrying." % vnffg_name)
+ time.sleep(1)
+ timeout -= 1
+ return vnffg_id
+
+
+def get_vnffgd_id(tacker_client, vnffgd_name):
+ return get_id_from_name(tacker_client, 'vnffgd', vnffgd_name)
+
+
def list_vnfds(tacker_client, verbose=False):
try:
vnfds = tacker_client.list_vnfds(retrieve_all=True)
@@ -64,7 +86,7 @@ def list_vnfds(tacker_client, verbose=False):
return None
-def create_vnfd(tacker_client, tosca_file=None):
+def create_vnfd(tacker_client, tosca_file=None, vnfd_name=None):
try:
vnfd_body = {}
if tosca_file is not None:
@@ -72,7 +94,8 @@ def create_vnfd(tacker_client, tosca_file=None):
vnfd_body = tosca_fd.read()
logger.info('VNFD template:\n{0}'.format(vnfd_body))
return tacker_client.create_vnfd(
- body={"vnfd": {"attributes": {"vnfd": vnfd_body}}})
+ body={"vnfd": {"attributes": {"vnfd": vnfd_body},
+ "name": vnfd_name}})
except Exception, e:
logger.error("Error [create_vnfd(tacker_client, '%s')]: %s"
% (tosca_file, e))
@@ -105,7 +128,7 @@ def list_vnfs(tacker_client, verbose=False):
def create_vnf(tacker_client, vnf_name, vnfd_id=None,
- vnfd_name=None, param_file=None):
+ vnfd_name=None, vim_id=None, vim_name=None, param_file=None):
try:
vnf_body = {
'vnf': {
@@ -120,10 +143,15 @@ def create_vnf(tacker_client, vnf_name, vnfd_id=None,
vnf_body['vnf']['attributes']['param_values'] = params
if vnfd_id is not None:
vnf_body['vnf']['vnfd_id'] = vnfd_id
+ if vim_id is not None:
+ vnf_body['vnf']['vim_id'] = vim_id
else:
if vnfd_name is None:
raise Exception('vnfd id or vnfd name is required')
vnf_body['vnf']['vnfd_id'] = get_vnfd_id(tacker_client, vnfd_name)
+ if vim_name is None:
+ raise Exception('vim id or vim name is required')
+ vnf_body['vnf']['vim_id'] = get_vim_id(tacker_client, vim_name)
return tacker_client.create_vnf(body=vnf_body)
except Exception, e:
logger.error("error [create_vnf(tacker_client,"
@@ -151,7 +179,7 @@ def get_vnf(tacker_client, vnf_id=None, vnf_name=None):
return None
-def wait_for_vnf(tacker_client, vnf_id=None, vnf_name=None, timeout=60):
+def wait_for_vnf(tacker_client, vnf_id=None, vnf_name=None, timeout=100):
try:
vnf = get_vnf(tacker_client, vnf_id, vnf_name)
if vnf is None:
@@ -188,3 +216,136 @@ def delete_vnf(tacker_client, vnf_id=None, vnf_name=None):
logger.error("Error [delete_vnf(tacker_client, '%s', '%s')]: %s"
% (vnf_id, vnf_name, e))
return None
+
+
+def create_vim(tacker_client, vim_file=None):
+ try:
+ vim_body = {}
+ if vim_file is not None:
+ with open(vim_file) as vim_fd:
+ vim_body = json.load(vim_fd)
+ logger.info('VIM template:\n{0}'.format(vim_body))
+ return tacker_client.create_vim(body=vim_body)
+ except Exception, e:
+ logger.error("Error [create_vim(tacker_client, '%s')]: %s"
+ % (vim_file, e))
+ return None
+
+
+def create_vnffgd(tacker_client, tosca_file=None, vnffgd_name=None):
+ try:
+ vnffgd_body = {}
+ if tosca_file is not None:
+ with open(tosca_file) as tosca_fd:
+ vnffgd_body = yaml.load(tosca_fd)
+ logger.info('VNFFGD template:\n{0}'.format(vnffgd_body))
+ return tacker_client.create_vnffgd(
+ body={'vnffgd': {'name': vnffgd_name,
+ 'template': {'vnffgd': vnffgd_body}}})
+ except Exception, e:
+ logger.error("Error [create_vnffgd(tacker_client, '%s')]: %s"
+ % (tosca_file, e))
+ return None
+
+
+def create_vnffg(tacker_client, vnffg_name=None, vnffgd_id=None,
+ vnffgd_name=None):
+ '''
+ Tacker doesn't support Symmetrical chain and parameter file
+ in Openstack/Ocata
+ '''
+ try:
+ vnffg_body = {
+ 'vnffg': {
+ 'attributes': {},
+ 'name': vnffg_name
+ }
+ }
+ if vnffgd_id is not None:
+ vnffg_body['vnffg']['vnffgd_id'] = vnffgd_id
+ else:
+ if vnffgd_name is None:
+ raise Exception('vnffgd id or vnffgd name is required')
+ vnffg_body['vnffg']['vnffgd_id'] = get_vnffgd_id(tacker_client,
+ vnffgd_name)
+ return tacker_client.create_vnffg(body=vnffg_body)
+ except Exception, e:
+ logger.error("error [create_vnffg(tacker_client,"
+ " '%s', '%s', '%s')]: %s"
+ % (vnffg_name, vnffgd_id, vnffgd_name, e))
+ return None
+
+
+def list_vnffgds(tacker_client, verbose=False):
+ try:
+ vnffgds = tacker_client.list_vnffgds(retrieve_all=True)
+ if not verbose:
+ vnffgds = [vnffgd['id'] for vnffgd in vnffgds['vnffgds']]
+ return vnffgds
+ except Exception, e:
+ logger.error("Error [list_vnffgds(tacker_client)]: %s" % e)
+ return None
+
+
+def list_vnffgs(tacker_client, verbose=False):
+ try:
+ vnffgs = tacker_client.list_vnffgs(retrieve_all=True)
+ if not verbose:
+ vnffgs = [vnffg['id'] for vnffg in vnffgs['vnffgs']]
+ return vnffgs
+ except Exception, e:
+ logger.error("Error [list_vnffgs(tacker_client)]: %s" % e)
+ return None
+
+
+def delete_vnffg(tacker_client, vnffg_id=None, vnffg_name=None):
+ try:
+ vnffg = vnffg_id
+ if vnffg is None:
+ if vnffg_name is None:
+ raise Exception('You need to provide a VNFFG id or name')
+ vnffg = get_vnffg_id(tacker_client, vnffg_name)
+ return tacker_client.delete_vnffg(vnffg)
+ except Exception, e:
+ logger.error("Error [delete_vnffg(tacker_client, '%s', '%s')]: %s"
+ % (vnffg_id, vnffg_name, e))
+ return None
+
+
+def delete_vnffgd(tacker_client, vnffgd_id=None, vnffgd_name=None):
+ try:
+ vnffgd = vnffgd_id
+ if vnffgd is None:
+ if vnffgd_name is None:
+ raise Exception('You need to provide VNFFGD id or VNFFGD name')
+ vnffgd = get_vnffgd_id(tacker_client, vnffgd_name)
+ return tacker_client.delete_vnffgd(vnffgd)
+ except Exception, e:
+ logger.error("Error [delete_vnffgd(tacker_client, '%s', '%s')]: %s"
+ % (vnffgd_id, vnffgd_name, e))
+ return None
+
+
+def list_vims(tacker_client, verbose=False):
+ try:
+ vims = tacker_client.list_vims(retrieve_all=True)
+ if not verbose:
+ vims = [vim['id'] for vim in vims['vims']]
+ return vims
+ except Exception, e:
+ logger.error("Error [list_vims(tacker_client)]: %s" % e)
+ return None
+
+
+def delete_vim(tacker_client, vim_id=None, vim_name=None):
+ try:
+ vim = vim_id
+ if vim is None:
+ if vim_name is None:
+ raise Exception('You need to provide VIM id or VIM name')
+ vim = get_vim_id(tacker_client, vim_name)
+ return tacker_client.delete_vim(vim)
+ except Exception, e:
+ logger.error("Error [delete_vim(tacker_client, '%s', '%s')]: %s"
+ % (vim_id, vim_name, e))
+ return None