summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/network/v2/network.py67
-rw-r--r--openstackclient/tests/image/v1/test_image.py26
-rw-r--r--openstackclient/tests/image/v2/test_image.py54
-rw-r--r--openstackclient/tests/network/v2/test_network.py114
4 files changed, 206 insertions, 55 deletions
diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py
index fd7ab8fb..308e0e52 100644
--- a/openstackclient/network/v2/network.py
+++ b/openstackclient/network/v2/network.py
@@ -75,30 +75,27 @@ def _get_attrs(client_manager, parsed_args):
return attrs
-class CreateNetwork(command.ShowOne):
+def _get_attrs_compute(client_manager, parsed_args):
+ attrs = {}
+ if parsed_args.name is not None:
+ attrs['label'] = str(parsed_args.name)
+ if parsed_args.shared is not None:
+ attrs['share_address'] = parsed_args.shared
+ if parsed_args.subnet is not None:
+ attrs['cidr'] = parsed_args.subnet
+
+ return attrs
+
+
+class CreateNetwork(common.NetworkAndComputeShowOne):
"""Create new network"""
- def get_parser(self, prog_name):
- parser = super(CreateNetwork, self).get_parser(prog_name)
+ def update_parser_common(self, parser):
parser.add_argument(
'name',
metavar='<name>',
help='New network name',
)
- admin_group = parser.add_mutually_exclusive_group()
- admin_group.add_argument(
- '--enable',
- dest='admin_state',
- action='store_true',
- default=True,
- help='Enable network (default)',
- )
- admin_group.add_argument(
- '--disable',
- dest='admin_state',
- action='store_false',
- help='Disable network',
- )
share_group = parser.add_mutually_exclusive_group()
share_group.add_argument(
'--share',
@@ -113,13 +110,29 @@ class CreateNetwork(command.ShowOne):
action='store_false',
help='Do not share the network between projects',
)
+ return parser
+
+ def update_parser_network(self, parser):
+ admin_group = parser.add_mutually_exclusive_group()
+ admin_group.add_argument(
+ '--enable',
+ dest='admin_state',
+ action='store_true',
+ default=True,
+ help='Enable network (default)',
+ )
+ admin_group.add_argument(
+ '--disable',
+ dest='admin_state',
+ action='store_false',
+ help='Disable network',
+ )
parser.add_argument(
'--project',
metavar='<project>',
help="Owner's project (name or ID)"
)
identity_common.add_project_domain_option_to_parser(parser)
-
parser.add_argument(
'--availability-zone-hint',
action='append',
@@ -131,16 +144,28 @@ class CreateNetwork(command.ShowOne):
)
return parser
- def take_action(self, parsed_args):
- client = self.app.client_manager.network
+ def update_parser_compute(self, parser):
+ parser.add_argument(
+ '--subnet',
+ metavar='<subnet>',
+ help="IPv4 subnet for fixed IPs (in CIDR notation)"
+ )
+ return parser
+ 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)
-
data = utils.get_item_properties(obj, columns, formatters=_formatters)
return (columns, data)
+ def take_action_compute(self, client, parsed_args):
+ attrs = _get_attrs_compute(self.app.client_manager, parsed_args)
+ obj = client.networks.create(**attrs)
+ columns = tuple(sorted(obj._info.keys()))
+ data = utils.get_dict_properties(obj._info, columns)
+ return (columns, data)
+
class DeleteNetwork(common.NetworkAndComputeCommand):
"""Delete network(s)"""
diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py
index 201105a4..018e1199 100644
--- a/openstackclient/tests/image/v1/test_image.py
+++ b/openstackclient/tests/image/v1/test_image.py
@@ -236,11 +236,10 @@ class TestImageDelete(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
- self.images_mock.delete.assert_called_with(
- image_fakes.image_id,
- )
+ self.images_mock.delete.assert_called_with(image_fakes.image_id)
+ self.assertIsNone(result)
class TestImageList(TestImage):
@@ -473,10 +472,11 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
# Verify update() was not called, if it was show the args
self.assertEqual(self.images_mock.update.call_args_list, [])
+ self.assertIsNone(result)
def test_image_set_options(self):
arglist = [
@@ -501,7 +501,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'name': 'new-name',
@@ -517,6 +517,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_bools1(self):
arglist = [
@@ -533,7 +534,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'protected': True,
@@ -544,6 +545,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_bools2(self):
arglist = [
@@ -560,7 +562,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'protected': False,
@@ -571,6 +573,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_properties(self):
arglist = [
@@ -584,7 +587,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'properties': {
@@ -598,6 +601,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_update_volume(self):
# Set up VolumeManager Mock
@@ -639,7 +643,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
# VolumeManager.upload_to_image(volume, force, image_name,
# container_format, disk_format)
@@ -650,13 +654,13 @@ class TestImageSet(TestImage):
'',
'',
)
-
# ImageManager.update(image_id, remove_props=, **)
self.images_mock.update.assert_called_with(
image_fakes.image_id,
name='updated_image',
volume='volly',
)
+ self.assertIsNone(result)
class TestImageShow(TestImage):
diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py
index b8e137f8..0248f30b 100644
--- a/openstackclient/tests/image/v2/test_image.py
+++ b/openstackclient/tests/image/v2/test_image.py
@@ -445,11 +445,10 @@ class TestImageDelete(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
- self.images_mock.delete.assert_called_with(
- images[0].id,
- )
+ self.images_mock.delete.assert_called_with(images[0].id)
+ self.assertIsNone(result)
def test_image_delete_multi_images(self):
images = self.setup_images_mock(count=3)
@@ -458,14 +457,13 @@ class TestImageDelete(TestImage):
verifylist = [
('images', arglist),
]
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
calls = [mock.call(i.id) for i in images]
-
self.images_mock.delete.assert_has_calls(calls)
+ self.assertIsNone(result)
class TestImageList(TestImage):
@@ -753,11 +751,13 @@ class TestRemoveProjectImage(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
+
self.image_members_mock.delete.assert_called_with(
image_fakes.image_id,
identity_fakes.project_id,
)
+ self.assertIsNone(result)
def test_remove_project_image_with_options(self):
arglist = [
@@ -772,11 +772,13 @@ class TestRemoveProjectImage(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
+
self.image_members_mock.delete.assert_called_with(
image_fakes.image_id,
identity_fakes.project_id,
)
+ self.assertIsNone(result)
class TestImageSet(TestImage):
@@ -829,7 +831,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'name': 'new-name',
@@ -842,6 +844,7 @@ class TestImageSet(TestImage):
# ImageManager.update(image, **kwargs)
self.images_mock.update.assert_called_with(
image_fakes.image_id, **kwargs)
+ self.assertIsNone(result)
def test_image_set_with_unexist_owner(self):
self.project_mock.get.side_effect = exceptions.NotFound(None)
@@ -855,7 +858,6 @@ class TestImageSet(TestImage):
('owner', 'unexist_owner'),
('image', image_fakes.image_id),
]
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(
@@ -874,7 +876,6 @@ class TestImageSet(TestImage):
('project', 'unexist_owner'),
('image', image_fakes.image_id),
]
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(
@@ -896,7 +897,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'protected': True,
@@ -907,6 +908,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_bools2(self):
arglist = [
@@ -923,7 +925,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'protected': False,
@@ -934,6 +936,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_properties(self):
arglist = [
@@ -947,7 +950,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'Alpha': '1',
@@ -958,6 +961,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_fake_properties(self):
arglist = [
@@ -980,7 +984,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'architecture': 'z80',
@@ -995,6 +999,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_tag(self):
arglist = [
@@ -1007,7 +1012,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'tags': ['test-tag'],
@@ -1017,6 +1022,7 @@ class TestImageSet(TestImage):
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_activate(self):
arglist = [
@@ -1030,7 +1036,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'tags': ['test-tag'],
@@ -1039,12 +1045,12 @@ class TestImageSet(TestImage):
self.images_mock.reactivate.assert_called_with(
image_fakes.image_id,
)
-
# ImageManager.update(image, **kwargs)
self.images_mock.update.assert_called_with(
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_deactivate(self):
arglist = [
@@ -1058,7 +1064,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'tags': ['test-tag'],
@@ -1067,12 +1073,12 @@ class TestImageSet(TestImage):
self.images_mock.deactivate.assert_called_with(
image_fakes.image_id,
)
-
# ImageManager.update(image, **kwargs)
self.images_mock.update.assert_called_with(
image_fakes.image_id,
**kwargs
)
+ self.assertIsNone(result)
def test_image_set_tag_merge(self):
old_image = copy.copy(image_fakes.IMAGE)
@@ -1088,7 +1094,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'tags': ['old1', 'new2', 'test-tag'],
@@ -1098,6 +1104,7 @@ class TestImageSet(TestImage):
self.assertEqual(image_fakes.image_id, a[0])
self.assertTrue('tags' in k)
self.assertEqual(set(kwargs['tags']), set(k['tags']))
+ self.assertIsNone(result)
def test_image_set_tag_merge_dupe(self):
old_image = copy.copy(image_fakes.IMAGE)
@@ -1113,7 +1120,7 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- self.cmd.take_action(parsed_args)
+ result = self.cmd.take_action(parsed_args)
kwargs = {
'tags': ['new2', 'old1'],
@@ -1123,6 +1130,7 @@ class TestImageSet(TestImage):
self.assertEqual(image_fakes.image_id, a[0])
self.assertTrue('tags' in k)
self.assertEqual(set(kwargs['tags']), set(k['tags']))
+ self.assertIsNone(result)
def test_image_set_dead_options(self):
diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py
index 26a9da40..e70a66c1 100644
--- a/openstackclient/tests/network/v2/test_network.py
+++ b/openstackclient/tests/network/v2/test_network.py
@@ -576,6 +576,120 @@ class TestNetworkCompute(compute_fakes.TestComputev2):
self.compute = self.app.client_manager.compute
+class TestCreateNetworkCompute(TestNetworkCompute):
+
+ # The network to create.
+ _network = compute_fakes.FakeNetwork.create_one_network()
+
+ columns = (
+ 'bridge',
+ 'bridge_interface',
+ 'broadcast',
+ 'cidr',
+ 'cidr_v6',
+ 'created_at',
+ 'deleted',
+ 'deleted_at',
+ 'dhcp_server',
+ 'dhcp_start',
+ 'dns1',
+ 'dns2',
+ 'enable_dhcp',
+ 'gateway',
+ 'gateway_v6',
+ 'host',
+ 'id',
+ 'injected',
+ 'label',
+ 'mtu',
+ 'multi_host',
+ 'netmask',
+ 'netmask_v6',
+ 'priority',
+ 'project_id',
+ 'rxtx_base',
+ 'share_address',
+ 'updated_at',
+ 'vlan',
+ 'vpn_private_address',
+ 'vpn_public_address',
+ 'vpn_public_port',
+ )
+
+ data = (
+ _network.bridge,
+ _network.bridge_interface,
+ _network.broadcast,
+ _network.cidr,
+ _network.cidr_v6,
+ _network.created_at,
+ _network.deleted,
+ _network.deleted_at,
+ _network.dhcp_server,
+ _network.dhcp_start,
+ _network.dns1,
+ _network.dns2,
+ _network.enable_dhcp,
+ _network.gateway,
+ _network.gateway_v6,
+ _network.host,
+ _network.id,
+ _network.injected,
+ _network.label,
+ _network.mtu,
+ _network.multi_host,
+ _network.netmask,
+ _network.netmask_v6,
+ _network.priority,
+ _network.project_id,
+ _network.rxtx_base,
+ _network.share_address,
+ _network.updated_at,
+ _network.vlan,
+ _network.vpn_private_address,
+ _network.vpn_public_address,
+ _network.vpn_public_port,
+ )
+
+ def setUp(self):
+ super(TestCreateNetworkCompute, self).setUp()
+
+ self.app.client_manager.network_endpoint_enabled = False
+
+ self.compute.networks.create.return_value = self._network
+
+ # Get the command object to test
+ self.cmd = network.CreateNetwork(self.app, None)
+
+ def test_create_no_options(self):
+ arglist = []
+ verifylist = []
+
+ # Missing required args should raise exception here
+ self.assertRaises(tests_utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
+
+ def test_create_default_options(self):
+ arglist = [
+ "--subnet", self._network.cidr,
+ self._network.label,
+ ]
+ verifylist = [
+ ('subnet', self._network.cidr),
+ ('name', self._network.label),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.compute.networks.create.assert_called_with(**{
+ 'cidr': self._network.cidr,
+ 'label': self._network.label,
+ })
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
+
+
class TestDeleteNetworkCompute(TestNetworkCompute):
# The network to delete.