tackerclient: api for vnfd, vnd
Change-Id: I5c8c1f768471ead9c09c0cac8e90241a702c63b4
This commit is contained in:
@@ -19,33 +19,30 @@
|
||||
#
|
||||
# @author: Isaku Yamahata, Intel
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
from tackerclient.common import exceptions
|
||||
from tackerclient.openstack.common.gettextutils import _
|
||||
from tackerclient.tacker import v1_0 as tackerV10
|
||||
|
||||
|
||||
_DEVICE = 'device'
|
||||
_VNF = 'vnf'
|
||||
|
||||
|
||||
class ListVNF(tackerV10.ListCommand):
|
||||
"""List device that belong to a given tenant."""
|
||||
|
||||
resource = _DEVICE
|
||||
resource = _VNF
|
||||
|
||||
|
||||
class ShowVNF(tackerV10.ShowCommand):
|
||||
"""show information of a given VNF."""
|
||||
|
||||
resource = _DEVICE
|
||||
resource = _VNF
|
||||
|
||||
|
||||
class CreateVNF(tackerV10.CreateCommand):
|
||||
"""create a VNF."""
|
||||
|
||||
resource = _DEVICE
|
||||
resource = _VNF
|
||||
|
||||
def add_known_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
@@ -60,48 +57,45 @@ class CreateVNF(tackerV10.CreateCommand):
|
||||
help='specify config yaml file')
|
||||
|
||||
def args2body(self, parsed_args):
|
||||
body = {
|
||||
self.resource: {
|
||||
'template_id': parsed_args.vnfd_id,
|
||||
}
|
||||
}
|
||||
body = {self.resource: {}}
|
||||
if parsed_args.config_file:
|
||||
with open(parsed_args.config_file) as f:
|
||||
config_yaml = f.read()
|
||||
body[self.resource]['attributes'] = {'config': config_yaml}
|
||||
body[self.resource]['config'] = config_yaml
|
||||
if parsed_args.config:
|
||||
body[self.resource]['attributes'] = {'config': parsed_args.config}
|
||||
body[self.resource]['config'] = parsed_args.config
|
||||
|
||||
tackerV10.update_dict(parsed_args, body[self.resource], ['tenant_id'])
|
||||
tackerV10.update_dict(parsed_args, body[self.resource],
|
||||
['tenant_id', 'vnfd_id'])
|
||||
return body
|
||||
|
||||
|
||||
class UpdateVNF(tackerV10.UpdateCommand):
|
||||
"""Update a given VNF."""
|
||||
|
||||
resource = _DEVICE
|
||||
resource = _VNF
|
||||
|
||||
def add_known_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'--attributes',
|
||||
'--configs',
|
||||
metavar='<key>=<value>',
|
||||
action='append',
|
||||
dest='attributes',
|
||||
dest='configs',
|
||||
default=[],
|
||||
help='instance specific argument')
|
||||
help='vnf specific config')
|
||||
|
||||
def args2body(self, parsed_args):
|
||||
body = {self.resource: {}}
|
||||
if parsed_args.attributes:
|
||||
if parsed_args.configs:
|
||||
try:
|
||||
attributes = dict(key_value.split('=', 1)
|
||||
for key_value in parsed_args.attributes)
|
||||
configs = dict(key_value.split('=', 1)
|
||||
for key_value in parsed_args.attributes)
|
||||
except ValueError:
|
||||
msg = (_('invalid argument for --attributes %s') %
|
||||
parsed_args.attributes)
|
||||
msg = (_('invalid argument for --configs %s') %
|
||||
parsed_args.configs)
|
||||
raise exceptions.TackerCLIError(msg)
|
||||
if attributes:
|
||||
body[self.resource]['attributes'] = attributes
|
||||
if configs:
|
||||
body[self.resource]['configs'] = configs
|
||||
tackerV10.update_dict(parsed_args, body[self.resource], ['tenant_id'])
|
||||
return body
|
||||
|
||||
@@ -109,46 +103,4 @@ class UpdateVNF(tackerV10.UpdateCommand):
|
||||
class DeleteVNF(tackerV10.DeleteCommand):
|
||||
"""Delete a given VNF."""
|
||||
|
||||
resource = _DEVICE
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class _XtachInterface(tackerV10.UpdateCommand):
|
||||
resource = _DEVICE
|
||||
|
||||
@abc.abstractmethod
|
||||
def call_api(self, tacker_client, device_id, body):
|
||||
pass
|
||||
|
||||
def args2body(self, parsed_args):
|
||||
body = {
|
||||
'port_id': parsed_args.port_id,
|
||||
}
|
||||
tackerV10.update_dict(parsed_args, body, [])
|
||||
return body
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(AttachInterface, self).get_parser(prog_name)
|
||||
parser.add_argument('port_id', metavar='PORT',
|
||||
help=_('port to attach/detach'))
|
||||
self.add_known_arguments(parser)
|
||||
return parser
|
||||
|
||||
def run(self, parsed_args):
|
||||
tacker_client = self.get_client()
|
||||
tacker_client.format = parsed_args.request_format
|
||||
body = self.args2body(parsed_args)
|
||||
_id = tackerV10.find_resourceid_by_name_or_id(tacker_client,
|
||||
self.resource,
|
||||
parsed_args.id)
|
||||
self.call_api(tacker_client, _id, body)
|
||||
|
||||
|
||||
class AttachInterface(_XtachInterface):
|
||||
def call_api(self, tacker_client, device_id, body):
|
||||
return tacker_client.attach_interface(device_id, body)
|
||||
|
||||
|
||||
class DetachInterface(_XtachInterface):
|
||||
def call_api(self, tacker_client, device_id, body):
|
||||
return tacker_client.detach_interface(device_id, body)
|
||||
resource = _VNF
|
||||
|
@@ -22,25 +22,25 @@
|
||||
from tackerclient.tacker import v1_0 as tackerV10
|
||||
|
||||
|
||||
_DEVICE_TEMPLATE = "device_template"
|
||||
_VNFD = "vnfd"
|
||||
|
||||
|
||||
class ListVNFD(tackerV10.ListCommand):
|
||||
"""List VNFD that belong to a given tenant."""
|
||||
|
||||
resource = _DEVICE_TEMPLATE
|
||||
resource = _VNFD
|
||||
|
||||
|
||||
class ShowVNFD(tackerV10.ShowCommand):
|
||||
"""show information of a given VNFD."""
|
||||
|
||||
resource = _DEVICE_TEMPLATE
|
||||
resource = _VNFD
|
||||
|
||||
|
||||
class CreateVNFD(tackerV10.CreateCommand):
|
||||
"""create a VNFD."""
|
||||
|
||||
resource = _DEVICE_TEMPLATE
|
||||
resource = _VNFD
|
||||
|
||||
def add_known_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
@@ -57,19 +57,13 @@ class CreateVNFD(tackerV10.CreateCommand):
|
||||
help='specify vnfd')
|
||||
|
||||
def args2body(self, parsed_args):
|
||||
body = {
|
||||
self.resource: {
|
||||
'service_types': [{'service_type': 'vnfd'}],
|
||||
'infra_driver': 'heat',
|
||||
'mgmt_driver': 'noop',
|
||||
}
|
||||
}
|
||||
body = {self.resource: {}}
|
||||
if parsed_args.vnfd_file:
|
||||
with open(parsed_args.vnfd_file) as f:
|
||||
vnfd = f.read()
|
||||
if parsed_args.vnfd:
|
||||
vnfd = parsed_args.vnfd
|
||||
body[self.resource]['attributes'] = {'vnfd': vnfd}
|
||||
body[self.resource]['vnfd'] = vnfd
|
||||
tackerV10.update_dict(parsed_args, body[self.resource],
|
||||
['tenant_id', 'name', 'description'])
|
||||
return body
|
||||
@@ -77,4 +71,4 @@ class CreateVNFD(tackerV10.CreateCommand):
|
||||
|
||||
class DeleteVNFD(tackerV10.DeleteCommand):
|
||||
"""Delete a given VNFD."""
|
||||
resource = _DEVICE_TEMPLATE
|
||||
resource = _VNFD
|
||||
|
@@ -401,3 +401,83 @@ class Client(ClientBase):
|
||||
@APIParamsCall
|
||||
def detach_interface(self, device, body=None):
|
||||
return self.put(self.detach_interface_path % device, body)
|
||||
|
||||
# VNFD
|
||||
_DEVICE_TEMPLATE = "device_template"
|
||||
_VNFD = "vnfd"
|
||||
|
||||
@APIParamsCall
|
||||
def list_vnfds(self, retrieve_all=True, **_params):
|
||||
ret = self.list_device_templates(retrieve_all, **_params)
|
||||
return {self._VNFD + 's': ret[self._DEVICE_TEMPLATE + 's']}
|
||||
|
||||
@APIParamsCall
|
||||
def show_vnfd(self, vnfd, **_params):
|
||||
ret = self.show_device_template(vnfd, **_params)
|
||||
return {self._VNFD: ret[self._DEVICE_TEMPLATE]}
|
||||
|
||||
@APIParamsCall
|
||||
def create_vnfd(self, body=None):
|
||||
# e.g.
|
||||
# body = {'vnfd': {'vnfd': 'yaml vnfd definition strings...'}}
|
||||
if body is not None:
|
||||
args = body[self._VNFD]
|
||||
|
||||
args_ = {
|
||||
'service_types': [{'service_type': 'vnfd'}],
|
||||
'infra_driver': 'heat',
|
||||
'mgmt_driver': 'noop',
|
||||
}
|
||||
body_ = {self._DEVICE_TEMPLATE: args_}
|
||||
if 'vnfd' in args:
|
||||
args_['attributes'] = {'vnfd': args['vnfd']}
|
||||
else:
|
||||
body_ = None
|
||||
|
||||
ret = self.create_device_template(body_)
|
||||
return {self._VNFD: ret[self._DEVICE_TEMPLATE]}
|
||||
|
||||
@APIParamsCall
|
||||
def delete_vnfd(self, vnfd):
|
||||
return self.delete_device_template(vnfd)
|
||||
|
||||
# vnf
|
||||
_DEVICE = "device"
|
||||
_VNF = "vnf"
|
||||
|
||||
@APIParamsCall
|
||||
def list_vnfs(self, retrieve_all=True, **_params):
|
||||
ret = self.list_devices(retrieve_all, **_params)
|
||||
return {self._VNF + 's': ret[self._DEVICE + 's']}
|
||||
|
||||
@APIParamsCall
|
||||
def show_vnf(self, vnf, **_params):
|
||||
ret = self.show_device(vnf, **_params)
|
||||
return {self._VNF: ret[self._DEVICE]}
|
||||
|
||||
@APIParamsCall
|
||||
def create_vnf(self, body=None):
|
||||
arg = body[self._VNF]
|
||||
arg_ = {
|
||||
'tenant_id': arg['tenant_id'],
|
||||
'template_id': arg['vnfd_id'],
|
||||
}
|
||||
if 'config' in arg:
|
||||
arg_['attributes'] = {'config': arg['config']}
|
||||
body_ = {self._DEVICE: arg_}
|
||||
ret = self.create_device(body_)
|
||||
return {self._VNF: ret[self._DEVICE]}
|
||||
|
||||
@APIParamsCall
|
||||
def delete_vnf(self, vnf):
|
||||
return self.delete_device(vnf)
|
||||
|
||||
@APIParamsCall
|
||||
def update_vnf(self, vnf, body=None):
|
||||
args = body[self._VNF]
|
||||
args_ = {'tenant_id': args['tenant_id']}
|
||||
if 'configs' in args:
|
||||
args_['attributes'] = args['configs']
|
||||
body_ = {self._DEVICE: body[self._VNF]}
|
||||
ret = self.update_device(vnf, body_)
|
||||
return {self._VNF: ret[self._DEVICE]}
|
||||
|
Reference in New Issue
Block a user