diff options
Diffstat (limited to 'vnfmgr')
-rwxr-xr-x | vnfmgr/vnfmgr_main.py | 57 | ||||
-rwxr-xr-x | vnfmgr/vnfmgr_odl/vnfmgr_odl.py | 297 | ||||
-rwxr-xr-x | vnfmgr/vnfmgr_os/vnfmgr_os.py | 65 |
3 files changed, 243 insertions, 176 deletions
diff --git a/vnfmgr/vnfmgr_main.py b/vnfmgr/vnfmgr_main.py index b5ab8be1..21941b0d 100755 --- a/vnfmgr/vnfmgr_main.py +++ b/vnfmgr/vnfmgr_main.py @@ -1,11 +1,11 @@ ################################################################# -# # -# Copyright 2015 Ericsson AB # -# All Rights Reserved # -# # -# Author: Manuel Buil <Manuel.Buil@ericsson.com> # -# Version: 0.1 # -# # +# +# Copyright 2015 Ericsson AB +# All Rights Reserved +# +# Author: Manuel Buil <Manuel.Buil@ericsson.com> +# Version: 0.1 +# ################################################################# import pdb @@ -15,7 +15,7 @@ import time import json if __name__ == "__main__": - #OpenStack environment information + # OpenStack environment information authurl = "http://localhost:5000/v2.0" adminTenantName = 'admin' adminTenantUser = 'admin' @@ -30,7 +30,7 @@ if __name__ == "__main__": # Provide the file with the SFC configuration file_json = "vnfmgr_odl/sample_config/RestConf-SFCs-HttpPut.json" # Read the config files which refer to SF - json_data=open(file_json).read() + json_data = open(file_json).read() data = json.loads(json_data) pdb.set_trace() @@ -41,32 +41,37 @@ if __name__ == "__main__": for SF in SFs: sf_type = SF['type'] name = SF['name'] - #2 - Search the image in glance with that SF type + # 2 - Search the image in glance with that SF type image = openstack.find_image(sf_type) - if image == None: + if image is None: print("There is no image with that sf_name") exit(1) # 3 - Boot the VM without network flavor = 1 print("About to deploy") - vm = openstack.create_vm(name,image,flavor) - if vm == None: + vm = openstack.create_vm(name, image, flavor) + if vm is None: print("Problems to deploy the VM") exit(1) - - #Make the call to ODL to deploy SFC + + # Make the call to ODL to deploy SFC context = odlscript.Context() context.set_path_prefix_paths("vnfmgr_odl/sample_config") pdb.set_trace() - odlscript.send_rest(context, "PUT", context.rest_url_sf_sel, context.rest_path_sf_sel) - odlscript.send_rest(context, "PUT", context.rest_url_sf, context.rest_path_sf) - odlscript.send_rest(context, "PUT", context.rest_url_sff, context.rest_path_sff) - odlscript.send_rest(context, "PUT", context.rest_url_sfc, context.rest_path_sfc) - odlscript.send_rest(context, "PUT", context.rest_url_sfp, context.rest_path_sfp) - time.sleep(1); - odlscript.send_rest(context, "POST", context.rest_url_rsp_rpc, context.rest_path_rsp) - + odlscript.send_rest( + context, "PUT", context.rest_url_sf_sel, context.rest_path_sf_sel) + odlscript.send_rest( + context, "PUT", context.rest_url_sf, context.rest_path_sf) + odlscript.send_rest( + context, "PUT", context.rest_url_sff, context.rest_path_sff) + odlscript.send_rest( + context, "PUT", context.rest_url_sfc, context.rest_path_sfc) + odlscript.send_rest( + context, "PUT", context.rest_url_sfp, context.rest_path_sfp) + time.sleep(1) + odlscript.send_rest( + context, "POST", context.rest_url_rsp_rpc, context.rest_path_rsp) - #TO DO - # Check if the SF_VM already exists before creating it - # Network of the VM + # TO DO + # Check if the SF_VM already exists before creating it + # Network of the VM diff --git a/vnfmgr/vnfmgr_odl/vnfmgr_odl.py b/vnfmgr/vnfmgr_odl/vnfmgr_odl.py index 4d35aebb..6ac72b28 100755 --- a/vnfmgr/vnfmgr_odl/vnfmgr_odl.py +++ b/vnfmgr/vnfmgr_odl/vnfmgr_odl.py @@ -1,11 +1,5 @@ -#! /usr/bin/env python +#!/usr/bin/env python -__author__ = "Brady Johnson" -__copyright__ = "Copyright(c) 2015, Ericsson, Inc." -__license__ = "Apache License version 2.0" -__version__ = "0.1" -__email__ = "brady.allen.johnson@ericsson.com" -__status__ = "beta" import pdb import os import time @@ -13,63 +7,88 @@ import requests import json import argparse -PUT = 'PUT' -GET = 'GET' +__author__ = "Brady Johnson" +__copyright__ = "Copyright(c) 2015, Ericsson, Inc." +__license__ = "Apache License version 2.0" +__version__ = "0.1" +__email__ = "brady.allen.johnson@ericsson.com" +__status__ = "beta" + + +PUT = 'PUT' +GET = 'GET' POST = 'POST' + class Context(object): """ Context class to hold the configuration as specified on the command line """ + def __init__(self): - self.rest_path_prefix = 'sampleConfig' - self.rest_path_sf = 'RestConf-SFs-HttpPut.json' - self.rest_path_sf_sel = 'RestConf-SFselect-HttpPut.json' - self.rest_path_sfc = 'RestConf-SFCs-HttpPut.json' - self.rest_path_sff = 'RestConf-SFFs-HttpPut.json' - self.rest_path_sfp = 'RestConf-SFPs-HttpPut.json' - self.rest_path_acl = 'RestConf-ACLs-HttpPut.json' - self.rest_path_rsp = 'RestConf-RSP-HttpPost.json' - - self.rest_url_sf = 'config/service-function:service-functions/' - self.rest_url_sf_sel = 'config/service-function-scheduler-type:service-function-scheduler-types/' - self.rest_url_sfc = 'config/service-function-chain:service-function-chains/' - self.rest_url_sff = 'config/service-function-forwarder:service-function-forwarders/' - self.rest_url_sfp = 'config/service-function-path:service-function-paths/' - self.rest_url_rsp = 'operational/rendered-service-path:rendered-service-paths/' - self.rest_url_rsp_rpc = 'operations/rendered-service-path:create-rendered-path' - self.rest_url_acl = 'config/ietf-acl:access-lists/' - - self.http_headers = {'Content-Type' : 'application/json', 'Cache-Control' : 'no-cache'} - self.http_server = 'localhost' - self.url_base = '' - self.http_port = '8181' - self.interractive = True - self.user = 'admin' - self.pw = 'admin' - self.batch_sf = False - self.batch_sf_sel = False - self.batch_sfc = False - self.batch_sff = False - self.batch_sfp = False - self.batch_acl = False - self.batch_rsp = False - self.batch_query = False + self.rest_path_prefix = 'sampleConfig' + self.rest_path_sf = 'RestConf-SFs-HttpPut.json' + self.rest_path_sf_sel = 'RestConf-SFselect-HttpPut.json' + self.rest_path_sfc = 'RestConf-SFCs-HttpPut.json' + self.rest_path_sff = 'RestConf-SFFs-HttpPut.json' + self.rest_path_sfp = 'RestConf-SFPs-HttpPut.json' + self.rest_path_acl = 'RestConf-ACLs-HttpPut.json' + self.rest_path_rsp = 'RestConf-RSP-HttpPost.json' + + self.rest_url_sf = 'config/service-function:service-functions/' + self.rest_url_sf_sel = ('config/service-function-scheduler-type:' + 'service-function-scheduler-types/') + self.rest_url_sfc = ( + 'config/service-function-chain:service-function-chains/') + self.rest_url_sff = ( + 'config/service-function-forwarder:service-function-forwarders/') + self.rest_url_sfp = ( + 'config/service-function-path:service-function-paths/') + self.rest_url_rsp = ( + 'operational/rendered-service-path:rendered-service-paths/') + self.rest_url_rsp_rpc = ( + 'operations/rendered-service-path:create-rendered-path') + self.rest_url_acl = ('config/ietf-acl:access-lists/') + + self.http_headers = { + 'Content-Type': 'application/json', 'Cache-Control': 'no-cache'} + self.http_server = 'localhost' + self.url_base = '' + self.http_port = '8181' + self.interractive = True + self.user = 'admin' + self.pw = 'admin' + self.batch_sf = False + self.batch_sf_sel = False + self.batch_sfc = False + self.batch_sff = False + self.batch_sfp = False + self.batch_acl = False + self.batch_rsp = False + self.batch_query = False def set_path_prefix_paths(self, path_prefix): self.rest_path_prefix = path_prefix - self.rest_path_sf = os.path.join(self.rest_path_prefix, self.rest_path_sf) - self.rest_path_sf_sel = os.path.join(self.rest_path_prefix, self.rest_path_sf_sel) - self.rest_path_sfc = os.path.join(self.rest_path_prefix, self.rest_path_sfc) - self.rest_path_sff = os.path.join(self.rest_path_prefix, self.rest_path_sff) - self.rest_path_sfp = os.path.join(self.rest_path_prefix, self.rest_path_sfp) - self.rest_path_acl = os.path.join(self.rest_path_prefix, self.rest_path_acl) - self.rest_path_rsp = os.path.join(self.rest_path_prefix, self.rest_path_rsp) + self.rest_path_sf = os.path.join( + self.rest_path_prefix, self.rest_path_sf) + self.rest_path_sf_sel = os.path.join( + self.rest_path_prefix, self.rest_path_sf_sel) + self.rest_path_sfc = os.path.join( + self.rest_path_prefix, self.rest_path_sfc) + self.rest_path_sff = os.path.join( + self.rest_path_prefix, self.rest_path_sff) + self.rest_path_sfp = os.path.join( + self.rest_path_prefix, self.rest_path_sfp) + self.rest_path_acl = os.path.join( + self.rest_path_prefix, self.rest_path_acl) + self.rest_path_rsp = os.path.join( + self.rest_path_prefix, self.rest_path_rsp) def get_cmd_line(context): """ - Create a command-line parser, parse the command line args, and process them. + Create a command-line parser, parse the command line args, and process + them. Populate the Context object with the processed command-line args. """ @@ -127,7 +146,8 @@ def get_cmd_line(context): opts.add_argument('--send-all', '-7', dest='send_all', action='store_true', - help='Send all (SF, SFF, SFC, SFP, RSP, ACL) REST JSON messages') + help=('Send all (SF, SFF, SFC, SFP, RSP, ACL) ' + 'REST JSON messages')) opts.add_argument('--query-sfc', '-q', dest='query_sfc', action='store_true', @@ -141,72 +161,83 @@ def get_cmd_line(context): opts.add_argument('--rest-path-sf-sel', default=context.rest_path_sf_sel, dest='rest_path_sf_sel', - help='Name of the SF Selection REST JSON file, relative to configured prefix') + help=('Name of the SF Selection REST JSON file, ' + 'relative to configured prefix')) opts.add_argument('--rest-path-sf', '-n', default=context.rest_path_sf, dest='rest_path_sf', - help='Name of the SF REST JSON file, relative to configured prefix') + help=('Name of the SF REST JSON file, relative to ' + 'configured prefix')) opts.add_argument('--rest-path-sfc', '-c', default=context.rest_path_sfc, dest='rest_path_sfc', - help='Name of the SFC REST JSON file, relative to configured prefix') + help=('Name of the SFC REST JSON file, relative to ' + 'configured prefix')) opts.add_argument('--rest-path-sff', '-f', default=context.rest_path_sff, dest='rest_path_sff', - help='Name of the SFF REST JSON file, relative toconfigured prefix') + help=('Name of the SFF REST JSON file, relative ' + 'to configured prefix')) opts.add_argument('--rest-path-sfp', '-p', default=context.rest_path_sfp, dest='rest_path_sfp', - help='Name of the SFP REST JSON file, relative to configured prefix') + help=('Name of the SFP REST JSON file, relative ' + 'to configured prefix')) opts.add_argument('--rest-path-rsp', '-r', default=context.rest_path_rsp, dest='rest_path_rsp', - help='Name of the RSP REST JSON file, relative to configured prefix') + help=('Name of the RSP REST JSON file, relative ' + 'to configured prefix')) opts.add_argument('--rest-path-acl', '-a', default=context.rest_path_acl, dest='rest_path_acl', - help='Name of the ACL REST JSON file, relative to configured prefix') + help=('Name of the ACL REST JSON file, relative ' + 'to configured prefix')) args = opts.parse_args() - context.http_server = args.http_server - context.http_port = args.http_port - context.url_base = 'http://%s:%s/restconf/' % (context.http_server, context.http_port) + context.http_server = args.http_server + context.http_port = args.http_port + context.url_base = 'http://%s:%s/restconf/' % ( + context.http_server, context.http_port) context.rest_path_prefix = args.rest_path_prefix - context.rest_path_sf = args.rest_path_sf + context.rest_path_sf = args.rest_path_sf context.rest_path_sf_sel = args.rest_path_sf_sel - context.rest_path_sfc = args.rest_path_sfc - context.rest_path_sff = args.rest_path_sff - context.rest_path_sfp = args.rest_path_sfp - context.rest_path_acl = args.rest_path_acl - context.rest_path_rsp = args.rest_path_rsp + context.rest_path_sfc = args.rest_path_sfc + context.rest_path_sff = args.rest_path_sff + context.rest_path_sfp = args.rest_path_sfp + context.rest_path_acl = args.rest_path_acl + context.rest_path_rsp = args.rest_path_rsp context.set_path_prefix_paths(context.rest_path_prefix) - for path in [context.rest_path_sf, context.rest_path_sfc, context.rest_path_sff, context.rest_path_sfp]: + for path in [context.rest_path_sf, + context.rest_path_sfc, + context.rest_path_sff, + context.rest_path_sfp]: print '\tUsing REST file: %s' % path if args.batch: context.interractive = False if args.send_all: - context.batch_sf = True - context.batch_sf_sel = True - context.batch_sfc = True - context.batch_sff = True - context.batch_sfp = True - context.batch_rsp = True + context.batch_sf = True + context.batch_sf_sel = True + context.batch_sfc = True + context.batch_sff = True + context.batch_sfp = True + context.batch_rsp = True # TODO deactivated for now - #context.batch_acl = True + # context.batch_acl = True else: - context.batch_sf = args.send_sf - context.batch_sf_sel = args.send_sf_sel - context.batch_sfc = args.send_sfc - context.batch_sff = args.send_sff - context.batch_sfp = args.send_sfp - context.batch_rsp = args.send_rsp + context.batch_sf = args.send_sf + context.batch_sf_sel = args.send_sf_sel + context.batch_sfc = args.send_sfc + context.batch_sff = args.send_sff + context.batch_sfp = args.send_sfp + context.batch_rsp = args.send_rsp # TODO deactivated for now - #context.batch_acl = args.send_acl - context.batch_query = args.query_sfc + # context.batch_acl = args.send_acl + context.batch_query = args.query_sfc return True @@ -218,7 +249,8 @@ def send_rest(context, operation, rest_url, rest_file=None): context -- specifies the destination IP/Port and user/pw operation -- specifies if the HTTP OP is one of: GET, PUT, or POST rest_url -- the operation URL - rest_file -- for PUT and POST operations, specifies where the JSON input is found + rest_file -- for PUT and POST operations, specifies where the JSON + input is found """ complete_url = '%s%s' % (context.url_base, rest_url) @@ -230,24 +262,26 @@ def send_rest(context, operation, rest_url, rest_file=None): try: if operation == GET: - r = requests.get(url = complete_url, - headers = context.http_headers, + r = requests.get(url=complete_url, + headers=context.http_headers, auth=(context.user, context.pw)) print '\nHTTP GET %s\nresult: %s' % (rest_url, r.status_code) - #if len(r.text) > 1: + # if len(r.text) > 1: if r.status_code >= 200 and r.status_code <= 299: - print json.dumps(json.loads(r.text), indent=4, separators=(',', ': ')) + print json.dumps(json.loads(r.text), + indent=4, + separators=(',', ': ')) elif operation == PUT: if not rest_file: print 'ERROR trying to PUT with empty REST file' return False - r = requests.put(url = complete_url, + r = requests.put(url=complete_url, auth=(context.user, context.pw), - data = json.dumps(json.load(open(rest_file, 'r'))), - headers = context.http_headers) + data=json.dumps(json.load(open(rest_file, 'r'))), + headers=context.http_headers) print '\nHTTP PUT %s\nresult: %s' % (rest_url, r.status_code) elif operation == POST: @@ -259,17 +293,19 @@ def send_rest(context, operation, rest_url, rest_file=None): if len(post_list) > 1: # This allows for multiple RSPs to be sent from one JSON file for entry in post_list: - r = requests.post(url = complete_url, + r = requests.post(url=complete_url, auth=(context.user, context.pw), - data = json.dumps(entry), - headers = context.http_headers) - print '\nHTTP POST %s\nresult: %s' % (rest_url, r.status_code) + data=json.dumps(entry), + headers=context.http_headers) + print '\nHTTP POST %s\nresult: %s' % (rest_url, + r.status_code) else: - r = requests.post(url = complete_url, + r = requests.post(url=complete_url, auth=(context.user, context.pw), - data = json.dumps(post_list), - headers = context.http_headers) - print '\nHTTP POST %s\nresult: %s' % (rest_url, r.status_code) + data=json.dumps(post_list), + headers=context.http_headers) + print '\nHTTP POST %s\nresult: %s' % (rest_url, + r.status_code) else: print 'ERROR: Invalid Operation: %s' % (operation) @@ -285,6 +321,7 @@ def send_rest(context, operation, rest_url, rest_file=None): return True + def validate_rest(context): """ For each JSON input file in context, validate the JSON syntax. @@ -308,6 +345,7 @@ def validate_rest(context): return True + def batch(context): """ Launch the application in batch mode and perform @@ -317,9 +355,10 @@ def batch(context): # The order of these if's is important # If send-all was set, then each of these needs to be sent, in order if context.batch_sf_sel: - send_rest(context, PUT, context.rest_url_sf_sel, context.rest_path_sf_sel) + send_rest( + context, PUT, context.rest_url_sf_sel, context.rest_path_sf_sel) if context.batch_sf: - send_rest(context, PUT, context.rest_url_sf, context.rest_path_sf) + send_rest(context, PUT, context.rest_url_sf, context.rest_path_sf) if context.batch_sff: send_rest(context, PUT, context.rest_url_sff, context.rest_path_sff) if context.batch_sfc: @@ -327,7 +366,8 @@ def batch(context): if context.batch_sfp: send_rest(context, PUT, context.rest_url_sfp, context.rest_path_sfp) if context.batch_rsp: - send_rest(context, POST, context.rest_url_rsp_rpc, context.rest_path_rsp) + send_rest( + context, POST, context.rest_url_rsp_rpc, context.rest_path_rsp) if context.batch_acl: send_rest(context, PUT, context.rest_url_acl, context.rest_path_acl) @@ -339,7 +379,7 @@ def batch(context): send_rest(context, GET, context.rest_url_sfp) send_rest(context, GET, context.rest_url_rsp) # TODO deactivated for now - #send_rest(context, GET, context.rest_url_acl) + # send_rest(context, GET, context.rest_url_acl) def CLI(context): @@ -360,37 +400,51 @@ def CLI(context): print ' 6) Send ACL REST' print ' 7) Send all ordered: (SFsel, SF, SFF, SFC, SFP, RSP)' print ' 8) Query all: (SFsel, SF, SFF, SFC, SFP, RSP)' - print ' 9) Change config file path, currently [%s]' % (context.rest_path_prefix) + print(' 9) Change config file path, currently [%s]' % ( + context.rest_path_prefix)) print '10) Validate config files JSON syntax' option = raw_input('=> ') if option == '1': - send_rest(context, PUT, context.rest_url_sf, context.rest_path_sf) + send_rest(context, PUT, context.rest_url_sf, context.rest_path_sf) elif option == '2': - send_rest(context, PUT, context.rest_url_sfc, context.rest_path_sfc) + send_rest( + context, PUT, context.rest_url_sfc, context.rest_path_sfc) elif option == '3': - send_rest(context, PUT, context.rest_url_sff, context.rest_path_sff) + send_rest( + context, PUT, context.rest_url_sff, context.rest_path_sff) elif option == '4': - send_rest(context, PUT, context.rest_url_sfp, context.rest_path_sfp) + send_rest( + context, PUT, context.rest_url_sfp, context.rest_path_sfp) elif option == '5': - send_rest(context, POST, context.rest_url_rsp_rpc, context.rest_path_rsp) + send_rest( + context, POST, context.rest_url_rsp_rpc, context.rest_path_rsp) elif option == '6': - send_rest(context, PUT, context.rest_url_acl, context.rest_path_acl) + send_rest( + context, PUT, context.rest_url_acl, context.rest_path_acl) elif option == '7': pdb.set_trace() - send_rest(context, PUT, context.rest_url_sf_sel, context.rest_path_sf_sel) - send_rest(context, PUT, context.rest_url_sf, context.rest_path_sf) - send_rest(context, PUT, context.rest_url_sff, context.rest_path_sff) - send_rest(context, PUT, context.rest_url_sfc, context.rest_path_sfc) - send_rest(context, PUT, context.rest_url_sfp, context.rest_path_sfp) - time.sleep(1); - send_rest(context, POST, context.rest_url_rsp_rpc, context.rest_path_rsp) + send_rest( + context, PUT, context.rest_url_sf_sel, + context.rest_path_sf_sel) + send_rest(context, PUT, context.rest_url_sf, context.rest_path_sf) + send_rest( + context, PUT, context.rest_url_sff, context.rest_path_sff) + send_rest( + context, PUT, context.rest_url_sfc, context.rest_path_sfc) + send_rest( + context, PUT, context.rest_url_sfp, context.rest_path_sfp) + time.sleep(1) + send_rest( + context, POST, context.rest_url_rsp_rpc, context.rest_path_rsp) # TODO ACL deactivated for now - # Need to wait until the SFC creates the RSP internally before sending the ACL - #print 'Sleeping 2 seconds while RSP being created' - #time.sleep(2); - #send_rest(context, PUT, context.rest_url_acl, context.rest_path_acl) + # Need to wait until the SFC creates the RSP internally + # before sending the ACL + # print 'Sleeping 2 seconds while RSP being created' + # time.sleep(2); + # send_rest(context, PUT, context.rest_url_acl, + # context.rest_path_acl) elif option == '8': send_rest(context, GET, context.rest_url_sf_sel) send_rest(context, GET, context.rest_url_sf) @@ -437,4 +491,3 @@ def main(): if __name__ == '__main__': main() - diff --git a/vnfmgr/vnfmgr_os/vnfmgr_os.py b/vnfmgr/vnfmgr_os/vnfmgr_os.py index 00678503..109bc0e2 100755 --- a/vnfmgr/vnfmgr_os/vnfmgr_os.py +++ b/vnfmgr/vnfmgr_os/vnfmgr_os.py @@ -1,67 +1,76 @@ ################################################################# -# # -# Copyright 2015 Ericsson AB # -# All Rights Reserved # -# # -# Author: Manuel Buil <Manuel.Buil@ericsson.com> # -# Version: 0.1 # -# # +# +# Copyright 2015 Ericsson AB +# All Rights Reserved +# +# Author: Manuel Buil <Manuel.Buil@ericsson.com> +# Version: 0.1 +# ################################################################# -import pdb - from novaclient.v2 import client as nova -from novaclient import exceptions as novaexceptions from keystoneclient.v2_0 import client as keystone from glanceclient import client as glance class OpenStack_API: + def __init__(self, authurl, tenantName, tenantUser, tenantPass): - self.authurl=authurl - self.tenantName=tenantName - self.tenantUser=tenantUser - self.tenantPass=tenantPass + self.authurl = authurl + self.tenantName = tenantName + self.tenantUser = tenantUser + self.tenantPass = tenantPass def get_token(self): # Establish connection to Openstack controller - osconn = keystone.Client(username=self.tenantUser, password=self.tenantPass, tenant_name=self.tenantName, auth_url=self.authurl) + osconn = keystone.Client(username=self.tenantUser, + password=self.tenantPass, + tenant_name=self.tenantName, + auth_url=self.authurl) token = osconn.auth_token return token - def get_endpoint(self,service_type, endpoint_type): + def get_endpoint(self, service_type, endpoint_type): # Establish connection to Openstack controller - osconn = keystone.Client(username=self.tenantUser, password=self.tenantPass, tenant_name=self.tenantName, auth_url=self.authurl) - endpoint = osconn.service_catalog.url_for(service_type=service_type, endpoint_type=endpoint_type) + osconn = keystone.Client(username=self.tenantUser, + password=self.tenantPass, + tenant_name=self.tenantName, + auth_url=self.authurl) + endpoint = osconn.service_catalog.url_for( + service_type=service_type, endpoint_type=endpoint_type) return endpoint - - def find_image(self,SF_type): - # Find in glance the image that matches the SF we want to deploy + + def find_image(self, SF_type): + # Find in glance the image that matches the SF we want to deploy token = self.get_token() - endpoint = self.get_endpoint('image','publicURL') - osconn = glance.Client('1',endpoint=endpoint,token=token) + endpoint = self.get_endpoint('image', 'publicURL') + osconn = glance.Client('1', endpoint=endpoint, token=token) image_list = osconn.images.list() for item in image_list: try: image_type = item.properties.get('image_type', None) - image_id=None + image_id = None if (image_type == SF_type): image_id = item.id break except: print("Errrorr") - #Search image which matches the SF type + # Search image which matches the SF type return image_id def create_vm(self, name, image, flavor, nics=None): # Establish connection to Openstack controller - osconn = nova.Client(self.tenantUser, self.tenantPass, self.tenantName, self.authurl, service_type="compute") + osconn = nova.Client(self.tenantUser, + self.tenantPass, + self.tenantName, + self.authurl, + service_type="compute") try: if nics is None: - vm = osconn.servers.create(name,image,flavor) + vm = osconn.servers.create(name, image, flavor) else: - vm = osconn.servers.create(name,image,flavor,nics) + vm = osconn.servers.create(name, image, flavor, nics) except: print("Something wrong happened while creating the VM") vm = None |