665f50b36d
This decorator is no longer supported by the Neutron Client, so we can safely remove it. Change-Id: Ib12f18a4430725e703c7a680324d948fee306758 Closes-Bug:1570423
117 lines
3.4 KiB
Python
Executable File
117 lines
3.4 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# Copyright (c) 2016 Akanda, Inc. All Rights Reserved.
|
|
#
|
|
# 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 pprint
|
|
import argparse
|
|
import os
|
|
import sys
|
|
|
|
from prettytable import PrettyTable
|
|
|
|
from keystoneclient.auth.identity import v3 as ksv3
|
|
from keystoneclient import session as kssession
|
|
from neutronclient.v2_0 import client
|
|
from neutronclient.common import exceptions as neutron_exc
|
|
|
|
class ByoExtClientWrapper(client.Client):
|
|
byonf_path = '/byonf'
|
|
byonfs_path = '/byonfs'
|
|
|
|
|
|
def create_byonf(self, byonf):
|
|
return self.post(
|
|
self.byonf_path,
|
|
body={'byonf': byonf}
|
|
)
|
|
|
|
def update_byonf(self, byonf):
|
|
if not byonf.get('id'):
|
|
print 'ERROR: must specify id of byonf assocation to update'
|
|
sys.exit(1)
|
|
|
|
path = self.byonf_path + '/' + byonf.pop('id')
|
|
return self.put(
|
|
path,
|
|
body={'byonf': byonf}
|
|
)
|
|
|
|
def list_byonfs(self, retrieve_all=True, **_params):
|
|
return self.list('byonfs', self.byonf_path, retrieve_all, **_params)
|
|
|
|
def delete_byonf(self, byonf_id):
|
|
return self.delete('%s/%s' % (self.byonf_path, byonf_id))
|
|
|
|
ks_args = {
|
|
'auth_url': os.getenv('OS_AUTH_URL', 'http://127.0.0.1:5000/v3'),
|
|
'username': os.getenv('OS_USERNAME', 'demo'),
|
|
'password': os.getenv('OS_PASSWORD', 'secrete'),
|
|
'project_name': os.getenv('OS_PROJECT_NAME', 'demo'),
|
|
'user_domain_id': 'default',
|
|
'project_domain_id': 'default',
|
|
}
|
|
|
|
auth = ksv3.Password(**ks_args)
|
|
ks_session = kssession.Session(auth=auth)
|
|
api_client = ByoExtClientWrapper(
|
|
session=ks_session,
|
|
)
|
|
|
|
|
|
parser = argparse.ArgumentParser(description="Script to manage user network functions")
|
|
parser.add_argument('action', default='list')
|
|
parser.add_argument('--function', default='')
|
|
parser.add_argument('--image_id')
|
|
parser.add_argument('--driver')
|
|
parser.add_argument('--id')
|
|
parser.add_argument('--tenant_id')
|
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
def print_table(byonfs):
|
|
if not isinstance(byonfs, list):
|
|
byonfs = [byonfs]
|
|
|
|
columns = ['id', 'tenant_id', 'function_type', 'driver', 'image_id']
|
|
table = PrettyTable(columns)
|
|
for byonf in byonfs:
|
|
table.add_row([byonf.get(k) for k in columns])
|
|
print table
|
|
|
|
if args.action in ['create', 'update']:
|
|
req_args = {
|
|
'image_id': args.image_id,
|
|
'function_type': args.function,
|
|
'driver': args.driver,
|
|
}
|
|
if args.tenant_id:
|
|
req_args['tenant_id'] = args.tenant_id
|
|
if args.id:
|
|
req_args['id'] = args.id
|
|
|
|
f = getattr(api_client, '%s_byonf' % args.action)
|
|
result = f(req_args)
|
|
print_table(result['byonf'])
|
|
|
|
elif args.action == 'delete':
|
|
api_client.delete_byonf(args.id)
|
|
print 'deleted byonf assocation with id %s' % args.id
|
|
else:
|
|
arg2 = {}
|
|
if args.function:
|
|
arg2['function_type'] = args.function
|
|
print_table(api_client.list_byonfs(**arg2)['byonfs'])
|