summaryrefslogtreecommitdiffstats
path: root/vnfmgr
diff options
context:
space:
mode:
Diffstat (limited to 'vnfmgr')
-rwxr-xr-xvnfmgr/vnfmgr_main.py57
-rwxr-xr-xvnfmgr/vnfmgr_odl/vnfmgr_odl.py297
-rwxr-xr-xvnfmgr/vnfmgr_os/vnfmgr_os.py65
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