Merge "SDK refactor: Prepare network commands"
This commit is contained in:
commit
60370b46f5
@ -19,6 +19,7 @@ from osc_lib import utils
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
from openstackclient.network import common
|
||||
from openstackclient.network import sdk_utils
|
||||
|
||||
|
||||
def _format_admin_state(item):
|
||||
@ -31,13 +32,33 @@ def _format_router_external(item):
|
||||
|
||||
_formatters = {
|
||||
'subnets': utils.format_list,
|
||||
'subnet_ids': utils.format_list,
|
||||
'admin_state_up': _format_admin_state,
|
||||
'is_admin_state_up': _format_admin_state,
|
||||
'router:external': _format_router_external,
|
||||
'is_router_external': _format_router_external,
|
||||
'availability_zones': utils.format_list,
|
||||
'availability_zone_hints': utils.format_list,
|
||||
}
|
||||
|
||||
|
||||
def _get_network_columns(item):
|
||||
column_map = {
|
||||
'subnet_ids': 'subnets',
|
||||
'is_admin_state_up': 'admin_state_up',
|
||||
'is_router_external': 'router:external',
|
||||
'is_port_security_enabled': 'port_security_enabled',
|
||||
'provider_network_type': 'provider:network_type',
|
||||
'provider_physical_network': 'provider:physical_network',
|
||||
'provider_segmentation_id': 'provider:segmentation_id',
|
||||
'is_shared': 'shared',
|
||||
'ipv4_address_scope_id': 'ipv4_address_scope',
|
||||
'ipv6_address_scope_id': 'ipv6_address_scope',
|
||||
'tenant_id': 'project_id',
|
||||
}
|
||||
return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map)
|
||||
|
||||
|
||||
def _get_columns(item):
|
||||
columns = list(item.keys())
|
||||
if 'tenant_id' in columns:
|
||||
@ -162,6 +183,8 @@ def _get_attrs_compute(client_manager, parsed_args):
|
||||
return attrs
|
||||
|
||||
|
||||
# TODO(sindhu): Use the SDK resource mapped attribute names once the
|
||||
# OSC minimum requirements include SDK 1.0.
|
||||
class CreateNetwork(common.NetworkAndComputeShowOne):
|
||||
_description = _("Create new network")
|
||||
|
||||
@ -275,9 +298,9 @@ class CreateNetwork(common.NetworkAndComputeShowOne):
|
||||
def take_action_network(self, client, parsed_args):
|
||||
attrs = _get_attrs(self.app.client_manager, parsed_args)
|
||||
obj = client.create_network(**attrs)
|
||||
columns = _get_columns(obj)
|
||||
display_columns, columns = _get_network_columns(obj)
|
||||
data = utils.get_item_properties(obj, columns, formatters=_formatters)
|
||||
return (columns, data)
|
||||
return (display_columns, data)
|
||||
|
||||
def take_action_compute(self, client, parsed_args):
|
||||
attrs = _get_attrs_compute(self.app.client_manager, parsed_args)
|
||||
@ -313,6 +336,8 @@ class DeleteNetwork(common.NetworkAndComputeDelete):
|
||||
client.networks.delete(network.id)
|
||||
|
||||
|
||||
# TODO(sindhu): Use the SDK resource mapped attribute names once the
|
||||
# OSC minimum requirements include SDK 1.0.
|
||||
class ListNetwork(common.NetworkAndComputeLister):
|
||||
_description = _("List networks")
|
||||
|
||||
@ -405,12 +430,12 @@ class ListNetwork(common.NetworkAndComputeLister):
|
||||
'id',
|
||||
'name',
|
||||
'status',
|
||||
'tenant_id',
|
||||
'admin_state_up',
|
||||
'shared',
|
||||
'subnets',
|
||||
'project_id',
|
||||
'is_admin_state_up',
|
||||
'is_shared',
|
||||
'subnet_ids',
|
||||
'provider_network_type',
|
||||
'router:external',
|
||||
'is_router_external',
|
||||
'availability_zones',
|
||||
)
|
||||
column_headers = (
|
||||
@ -429,7 +454,7 @@ class ListNetwork(common.NetworkAndComputeLister):
|
||||
columns = (
|
||||
'id',
|
||||
'name',
|
||||
'subnets'
|
||||
'subnet_ids'
|
||||
)
|
||||
column_headers = (
|
||||
'ID',
|
||||
@ -441,16 +466,20 @@ class ListNetwork(common.NetworkAndComputeLister):
|
||||
|
||||
if parsed_args.external:
|
||||
args['router:external'] = True
|
||||
args['is_router_external'] = True
|
||||
elif parsed_args.internal:
|
||||
args['router:external'] = False
|
||||
args['is_router_external'] = False
|
||||
|
||||
if parsed_args.name is not None:
|
||||
args['name'] = parsed_args.name
|
||||
|
||||
if parsed_args.enable:
|
||||
args['admin_state_up'] = True
|
||||
args['is_admin_state_up'] = True
|
||||
elif parsed_args.disable:
|
||||
args['admin_state_up'] = False
|
||||
args['is_admin_state_up'] = False
|
||||
|
||||
if parsed_args.project:
|
||||
project = identity_common.find_project(
|
||||
@ -459,21 +488,27 @@ class ListNetwork(common.NetworkAndComputeLister):
|
||||
parsed_args.project_domain,
|
||||
)
|
||||
args['tenant_id'] = project.id
|
||||
args['project_id'] = project.id
|
||||
|
||||
if parsed_args.share:
|
||||
args['shared'] = True
|
||||
args['is_shared'] = True
|
||||
elif parsed_args.no_share:
|
||||
args['shared'] = False
|
||||
args['is_shared'] = False
|
||||
|
||||
if parsed_args.status:
|
||||
args['status'] = parsed_args.status
|
||||
|
||||
if parsed_args.provider_network_type:
|
||||
args['provider:network_type'] = parsed_args.provider_network_type
|
||||
args['provider_network_type'] = parsed_args.provider_network_type
|
||||
if parsed_args.physical_network:
|
||||
args['provider:physical_network'] = parsed_args.physical_network
|
||||
args['provider_physical_network'] = parsed_args.physical_network
|
||||
if parsed_args.segmentation_id:
|
||||
args['provider:segmentation_id'] = parsed_args.segmentation_id
|
||||
args['provider_segmentation_id'] = parsed_args.segmentation_id
|
||||
|
||||
data = client.networks(**args)
|
||||
|
||||
@ -504,6 +539,8 @@ class ListNetwork(common.NetworkAndComputeLister):
|
||||
) for s in data))
|
||||
|
||||
|
||||
# TODO(sindhu): Use the SDK resource mapped attribute names once the
|
||||
# OSC minimum requirements include SDK 1.0.
|
||||
class SetNetwork(command.Command):
|
||||
_description = _("Set network properties")
|
||||
|
||||
@ -619,9 +656,9 @@ class ShowNetwork(common.NetworkAndComputeShowOne):
|
||||
|
||||
def take_action_network(self, client, parsed_args):
|
||||
obj = client.find_network(parsed_args.network, ignore_missing=False)
|
||||
columns = _get_columns(obj)
|
||||
display_columns, columns = _get_network_columns(obj)
|
||||
data = utils.get_item_properties(obj, columns, formatters=_formatters)
|
||||
return (columns, data)
|
||||
return (display_columns, data)
|
||||
|
||||
def take_action_compute(self, client, parsed_args):
|
||||
obj = utils.find_resource(
|
||||
|
@ -297,15 +297,17 @@ class FakeNetwork(object):
|
||||
'admin_state_up': True,
|
||||
'shared': False,
|
||||
'subnets': ['a', 'b'],
|
||||
'provider_network_type': 'vlan',
|
||||
'provider_physical_network': 'physnet1',
|
||||
'provider_segmentation_id': "400",
|
||||
'provider:network_type': 'vlan',
|
||||
'provider:physical_network': 'physnet1',
|
||||
'provider:segmentation_id': "400",
|
||||
'router:external': True,
|
||||
'availability_zones': [],
|
||||
'availability_zone_hints': [],
|
||||
'is_default': False,
|
||||
'port_security_enabled': True,
|
||||
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
|
||||
'ipv4_address_scope': 'ipv4' + uuid.uuid4().hex,
|
||||
'ipv6_address_scope': 'ipv6' + uuid.uuid4().hex,
|
||||
}
|
||||
|
||||
# Overwrite default attributes.
|
||||
@ -317,8 +319,21 @@ class FakeNetwork(object):
|
||||
# Set attributes with special mapping in OpenStack SDK.
|
||||
network.project_id = network_attrs['tenant_id']
|
||||
network.is_router_external = network_attrs['router:external']
|
||||
network.is_admin_state_up = network_attrs['admin_state_up']
|
||||
network.is_port_security_enabled = \
|
||||
network_attrs['port_security_enabled']
|
||||
network.subnet_ids = network_attrs['subnets']
|
||||
network.is_shared = network_attrs['shared']
|
||||
network.provider_network_type = \
|
||||
network_attrs['provider:network_type']
|
||||
network.provider_physical_network = \
|
||||
network_attrs['provider:physical_network']
|
||||
network.provider_segmentation_id = \
|
||||
network_attrs['provider:segmentation_id']
|
||||
network.ipv4_address_scope_id = \
|
||||
network_attrs['ipv4_address_scope']
|
||||
network.ipv6_address_scope_id = \
|
||||
network_attrs['ipv6_address_scope']
|
||||
|
||||
return network
|
||||
|
||||
|
@ -62,13 +62,15 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
||||
'availability_zones',
|
||||
'description',
|
||||
'id',
|
||||
'ipv4_address_scope',
|
||||
'ipv6_address_scope',
|
||||
'is_default',
|
||||
'name',
|
||||
'port_security_enabled',
|
||||
'project_id',
|
||||
'provider_network_type',
|
||||
'provider_physical_network',
|
||||
'provider_segmentation_id',
|
||||
'provider:network_type',
|
||||
'provider:physical_network',
|
||||
'provider:segmentation_id',
|
||||
'qos_policy_id',
|
||||
'router:external',
|
||||
'shared',
|
||||
@ -82,6 +84,8 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
||||
utils.format_list(_network.availability_zones),
|
||||
_network.description,
|
||||
_network.id,
|
||||
_network.ipv4_address_scope_id,
|
||||
_network.ipv6_address_scope_id,
|
||||
_network.is_default,
|
||||
_network.name,
|
||||
_network.is_port_security_enabled,
|
||||
@ -236,13 +240,15 @@ class TestCreateNetworkIdentityV2(TestNetwork):
|
||||
'availability_zones',
|
||||
'description',
|
||||
'id',
|
||||
'ipv4_address_scope',
|
||||
'ipv6_address_scope',
|
||||
'is_default',
|
||||
'name',
|
||||
'port_security_enabled',
|
||||
'project_id',
|
||||
'provider_network_type',
|
||||
'provider_physical_network',
|
||||
'provider_segmentation_id',
|
||||
'provider:network_type',
|
||||
'provider:physical_network',
|
||||
'provider:segmentation_id',
|
||||
'qos_policy_id',
|
||||
'router:external',
|
||||
'shared',
|
||||
@ -256,6 +262,8 @@ class TestCreateNetworkIdentityV2(TestNetwork):
|
||||
utils.format_list(_network.availability_zones),
|
||||
_network.description,
|
||||
_network.id,
|
||||
_network.ipv4_address_scope_id,
|
||||
_network.ipv6_address_scope_id,
|
||||
_network.is_default,
|
||||
_network.name,
|
||||
_network.is_port_security_enabled,
|
||||
@ -512,7 +520,7 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'router:external': True}
|
||||
**{'router:external': True, 'is_router_external': True}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -529,7 +537,7 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'router:external': False}
|
||||
**{'router:external': False, 'is_router_external': False}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -585,7 +593,7 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'admin_state_up': True}
|
||||
**{'admin_state_up': True, 'is_admin_state_up': True}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -603,7 +611,7 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'admin_state_up': False}
|
||||
**{'admin_state_up': False, 'is_admin_state_up': False}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -621,7 +629,7 @@ class TestListNetwork(TestNetwork):
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'tenant_id': project.id}
|
||||
**{'tenant_id': project.id, 'project_id': project.id}
|
||||
)
|
||||
|
||||
self.assertEqual(self.columns, columns)
|
||||
@ -640,7 +648,7 @@ class TestListNetwork(TestNetwork):
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
filters = {'tenant_id': project.id}
|
||||
filters = {'tenant_id': project.id, 'project_id': project.id}
|
||||
|
||||
self.network.networks.assert_called_once_with(**filters)
|
||||
self.assertEqual(self.columns, columns)
|
||||
@ -658,7 +666,7 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'shared': True}
|
||||
**{'shared': True, 'is_shared': True}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -675,7 +683,7 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'shared': False}
|
||||
**{'shared': False, 'is_shared': False}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -711,7 +719,8 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'provider:network_type': network_type}
|
||||
**{'provider:network_type': network_type,
|
||||
'provider_network_type': network_type}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -728,7 +737,8 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'provider:physical_network': physical_network}
|
||||
**{'provider:physical_network': physical_network,
|
||||
'provider_physical_network': physical_network}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -745,7 +755,8 @@ class TestListNetwork(TestNetwork):
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.network.networks.assert_called_once_with(
|
||||
**{'provider:segmentation_id': segmentation_id}
|
||||
**{'provider:segmentation_id': segmentation_id,
|
||||
'provider_segmentation_id': segmentation_id}
|
||||
)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, list(data))
|
||||
@ -878,13 +889,15 @@ class TestShowNetwork(TestNetwork):
|
||||
'availability_zones',
|
||||
'description',
|
||||
'id',
|
||||
'ipv4_address_scope',
|
||||
'ipv6_address_scope',
|
||||
'is_default',
|
||||
'name',
|
||||
'port_security_enabled',
|
||||
'project_id',
|
||||
'provider_network_type',
|
||||
'provider_physical_network',
|
||||
'provider_segmentation_id',
|
||||
'provider:network_type',
|
||||
'provider:physical_network',
|
||||
'provider:segmentation_id',
|
||||
'qos_policy_id',
|
||||
'router:external',
|
||||
'shared',
|
||||
@ -898,6 +911,8 @@ class TestShowNetwork(TestNetwork):
|
||||
utils.format_list(_network.availability_zones),
|
||||
_network.description,
|
||||
_network.id,
|
||||
_network.ipv4_address_scope_id,
|
||||
_network.ipv6_address_scope_id,
|
||||
_network.is_default,
|
||||
_network.name,
|
||||
_network.is_port_security_enabled,
|
||||
|
Loading…
Reference in New Issue
Block a user