L2gateway CLI Enhancement

L2gateway create command is enhanced to create l2gateway with
devices having multiple interfaces and segmentation id.
Some other changes are also made to syn it with rest-apis
in spec.

Change-Id: Ia5175f8887353de906c7abcbfa44dd7d0c65e72b
stable/ocata
preeti-mirji 8 years ago
parent abd4d52525
commit 682abfbd14

@ -19,8 +19,9 @@ from neutronclient.i18n import _
from neutronclient.neutron import v2_0 as l2gatewayV20
from oslo.serialization import jsonutils
L2_GW = 'l2_gateway'
meta = ('name=name,interface_names=<interface_name1>;'
'<interface_name2>[:<seg-id1>[#<seg-id3>]')
def _format_devices(l2_gateway):
@ -31,8 +32,64 @@ def _format_devices(l2_gateway):
return ''
def get_interface(interfaces):
interface_dict = []
for interface in interfaces:
if ":" in interface:
int_name = interface.split(":")[0]
segid = interface.split(":")[1]
if "#" in segid:
segid = segid.split("#")
else:
segid = [segid]
interface_detail = {'name': int_name, 'segmentation_id': segid}
else:
interface_detail = {'name': interface}
interface_dict.append(interface_detail)
return interface_dict
def add_known_arguments(self, parser):
parser.add_argument(
'--device',
metavar=meta,
action='append', dest='devices', type=utils.str2dict,
help=_('names or identifiers of the L2 gateways.'
'(This option can be repeated)'))
def args2body(self, parsed_args):
if parsed_args.devices:
devices = parsed_args.devices
interfaces = []
else:
devices = []
device_dict = []
for device in devices:
if 'interface_names' in device.keys():
interface = device['interface_names']
if ";" in interface:
interface_dict = interface.split(";")
interfaces = get_interface(interface_dict)
else:
interfaces = get_interface([interface])
if 'name' in device.keys():
device = {'device_name': device['name'],
'interfaces': interfaces}
else:
device = {'interfaces': interfaces}
device_dict.append(device)
if parsed_args.name:
l2gw_name = parsed_args.name
body = {'l2_gateway': {'name': l2gw_name,
'devices': device_dict}, }
else:
body = {'l2_gateway': {'devices': device_dict}, }
return body
class Listl2gateway(l2gatewayV20.ListCommand):
"""List l2gateways that belongs to a given tenant."""
"""List l2gateway that belongs to a given tenant."""
resource = L2_GW
_formatters = {'devices': _format_devices, }
@ -62,16 +119,12 @@ class Createl2gateway(l2gatewayV20.CreateCommand):
parser.add_argument(
'name', metavar='<GATEWAY-NAME>',
help=_('Descriptive name for logical gateway.'))
parser.add_argument(
'--device', metavar='name=name,interface_name=interface_name',
action='append', dest='devices', type=utils.str2dict,
help=_('names or identifiers of the L2 gateways.'
'(This option can be repeated)'))
add_known_arguments(self, parser)
def args2body(self, parsed_args):
body = {'l2_gateway': {'name': parsed_args.name,
'devices': parsed_args.devices}, }
body = args2body(self, parsed_args)
if parsed_args.tenant_id:
body['l2_gateway']['tenant_id'] = parsed_args.tenant_id
return body
@ -79,3 +132,16 @@ class Updatel2gateway(l2gatewayV20.UpdateCommand):
"""Update a given l2gateway."""
resource = L2_GW
def add_known_arguments(self, parser):
parser.add_argument(
'--name', metavar='name',
help=_('Descriptive name for logical gateway.'))
add_known_arguments(self, parser)
def args2body(self, parsed_args):
if parsed_args.devices:
body = args2body(self, parsed_args)
else:
body = {'l2_gateway': {'name': parsed_args.name}}
return body

@ -33,12 +33,14 @@ class Showl2gatewayConnection(l2gatewayV20.ShowCommand):
"""Show information of a given l2gateway-connection."""
resource = L2_GW_CONNECTION
allow_names = False
class Deletel2gatewayConnection(l2gatewayV20.DeleteCommand):
"""Delete a given l2gateway-connection."""
resource = L2_GW_CONNECTION
allow_names = False
class Createl2gatewayConnection(l2gatewayV20.CreateCommand):
@ -46,7 +48,16 @@ class Createl2gatewayConnection(l2gatewayV20.CreateCommand):
resource = L2_GW_CONNECTION
def add_known_arguments(self, parser):
def retrieve_ids(self, client, args):
gateway_id = l2gatewayV20.find_resourceid_by_name_or_id(
client, 'l2_gateway', args.gateway_name)
network_id = l2gatewayV20.find_resourceid_by_name_or_id(
client, 'network', args.network)
return (gateway_id, network_id)
def get_parser(self, parser):
parser = super(l2gatewayV20.CreateCommand,
self).get_parser(parser)
parser.add_argument(
'gateway_name', metavar='<GATEWAY-NAME/UUID>',
help=_('Descriptive name for logical gateway.'))
@ -56,21 +67,22 @@ class Createl2gatewayConnection(l2gatewayV20.CreateCommand):
parser.add_argument(
'--default-segmentation-id',
dest='seg_id',
help=_('default segmentation-id that will '
'be applied to the interfaces for which '
'segmentation id was not specified '
help=_('default segmentation-id that will'
'be applied to the interfaces for which'
'segmentation id was not specified'
'in l2-gateway-create command.'))
return parser
def args2body(self, parsed_args):
body = {'l2_gateway_connection':
{'l2_gateway_id': parsed_args.gateway_name,
'network_id': parsed_args.network,
'segmentation_id': parsed_args.seg_id}}
return body
def args2body(self, args):
neutron_client = self.get_client()
(gateway_id, network_id) = self.retrieve_ids(neutron_client,
args)
class Updatel2gatewayConnection(l2gatewayV20.UpdateCommand):
"""Update a given l2gateway-connection."""
body = {'l2_gateway_connection':
{'l2_gateway_id': gateway_id,
'network_id': network_id}}
if args.seg_id:
body['l2_gateway_connection']['segmentation_id'] = args.seg_id
resource = L2_GW_CONNECTION
return body

@ -50,8 +50,6 @@ COMMAND_V2 = {
Showl2gatewayConnection),
'l2-gateway-connection-delete': (l2gateway_connection.
Deletel2gatewayConnection),
'l2-gateway-connection-update': (l2gateway_connection.
Updatel2gatewayConnection),
}
COMMANDS = {'2.0': COMMAND_V2}

@ -128,13 +128,6 @@ class Client(V2_Client.Client):
return self.delete(self.l2_gateway_connection_path % (con_id))
@APIParamsCall
def update_l2_gateway_connection(self, l2gateway_conn, body):
"""Updates the specified l2gateway-connection."""
return self.put(self.l2_gateway_connection_path % (l2gateway_conn),
body=body)
def __init__(self, **kwargs):
"""Initialize a new client for the L2gateway v2.0 API."""

@ -30,8 +30,8 @@ class CLITestV20L2gatewayJSON(test_cli20.CLITestV20Base):
resource = 'l2_gateway'
cmd = l2gateway.Createl2gateway(test_cli20.MyApp(sys.stdout), None)
name = 'l2gw'
args = [name, '--device', 'name=d1,interface_name=i1']
device = [{'name': 'd1', 'interface_name': 'i1'}]
args = [name, '--device', 'name=d1,interface_names=i1']
device = [{'device_name': 'd1', 'interfaces': [{'name': 'i1'}]}]
position_names = ['name', 'devices']
position_values = [name, device]
self._test_create_resource(resource, cmd, name, 'myid', args,
@ -66,8 +66,11 @@ class CLITestV20L2gatewayJSON(test_cli20.CLITestV20Base):
"""Test Update l2gateway."""
resource = 'l2_gateway'
args = ['myid', '--name', 'myname', '--device',
'name=d1,interface_names=i1']
values = {'name': 'myname',
'devices': [{'device_name': 'd1',
'interfaces': [{'name': 'i1'}]}]}
cmd = l2gateway.Updatel2gateway(test_cli20.MyApp(sys.stdout), None)
self._test_update_resource(resource, cmd, 'myid',
['myid', '--name', 'myname', ],
{'name': 'myname', }
)
args, values)

@ -66,14 +66,3 @@ class CLITestV20L2gatewayConnectionJSON(test_cli20.CLITestV20Base):
args = ['--fields', 'id', '--fields', 'name', self.test_id]
self._test_show_resource(resource, cmd, self.test_id, args,
['id', 'name'])
def test_update_l2gateway_connection(self):
"""Test Update l2gateway-connection."""
resource = 'l2_gateway_connection'
cmd = l2gateway_connection.Updatel2gatewayConnection(test_cli20.MyApp(
sys.stdout), None)
self._test_update_resource(resource, cmd, 'myid',
['myid', '--segmentation_id', 'seg-id', ],
{'segmentation_id': 'seg-id', }
)

Loading…
Cancel
Save