Add set action to network groups CLI v1
Example: fuel network-group --set --network 1 --name new_name Change-Id: I9335e23465ebd05a99929e0de6d110d6ff64c014 Closes-Bug: #1480259
This commit is contained in:
parent
ec5c02b384
commit
3033de90af
|
@ -17,6 +17,7 @@ from fuelclient.cli.actions.base import check_all
|
|||
import fuelclient.cli.arguments as Args
|
||||
from fuelclient.cli.arguments import group
|
||||
from fuelclient.cli.formatting import format_table
|
||||
from fuelclient.commands.network_group import get_args_for_update
|
||||
from fuelclient.objects.network_group import NetworkGroup
|
||||
from fuelclient.objects.network_group import NetworkGroupCollection
|
||||
|
||||
|
@ -47,13 +48,15 @@ class NetworkGroupAction(Action):
|
|||
" node group."
|
||||
),
|
||||
Args.get_delete_arg("Delete specified network groups."),
|
||||
Args.get_list_arg("List all network groups.")
|
||||
Args.get_list_arg("List all network groups."),
|
||||
Args.get_set_arg("Set network group parameters.")
|
||||
)
|
||||
)
|
||||
self.flag_func_map = (
|
||||
("create", self.create),
|
||||
("delete", self.delete),
|
||||
(None, self.list)
|
||||
("set", self.set),
|
||||
(None, self.list),
|
||||
)
|
||||
|
||||
@check_all('nodegroup', 'name', 'cidr')
|
||||
|
@ -98,6 +101,29 @@ class NetworkGroupAction(Action):
|
|||
','.join(params.network))
|
||||
)
|
||||
|
||||
@check_all('network')
|
||||
def set(self, params):
|
||||
"""Set parameters for the specified network group:
|
||||
fuel network-group --set --network 1 --name new_name
|
||||
"""
|
||||
# Since network has set type and we cannot update multiple network
|
||||
# groups at once, we pick first network group id from set.
|
||||
ng_id = next(iter(params.network))
|
||||
|
||||
if len(params.network) > 1:
|
||||
msg = ("Warning: Only first network with id={0}"
|
||||
" will be updated.".format(ng_id))
|
||||
self.serializer.print_to_output({}, msg)
|
||||
|
||||
ng = NetworkGroup(ng_id)
|
||||
|
||||
update_params = get_args_for_update(params, self.serializer)
|
||||
data = ng.set(update_params)
|
||||
|
||||
self.serializer.print_to_output(
|
||||
data,
|
||||
"Network group id={0} has been updated".format(ng_id))
|
||||
|
||||
def list(self, params):
|
||||
"""To list all available network groups:
|
||||
fuel network-group list
|
||||
|
|
|
@ -19,6 +19,24 @@ from fuelclient.commands import base
|
|||
from fuelclient.common import data_utils
|
||||
|
||||
|
||||
_updatable_keys = (
|
||||
'name', 'vlan', 'cidr', 'gateway', 'group_id', 'meta')
|
||||
|
||||
|
||||
def get_args_for_update(params, serializer=None):
|
||||
result = {}
|
||||
for attr in _updatable_keys:
|
||||
value = getattr(params, attr, None)
|
||||
if value is not None:
|
||||
result[attr] = value
|
||||
|
||||
if 'meta' in result:
|
||||
serializer = serializer or Serializer.from_params(params)
|
||||
result['meta'] = serializer.deserialize(result['meta'])
|
||||
|
||||
return result
|
||||
|
||||
|
||||
class NetworkGroupMixin(object):
|
||||
entity_name = 'network-group'
|
||||
|
||||
|
@ -143,15 +161,7 @@ class NetworkGroupUpdate(NetworkGroupMixin, base.BaseShowCommand):
|
|||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
to_update = {}
|
||||
for attr in self.client.updatable_attributes:
|
||||
value = getattr(parsed_args, attr, None)
|
||||
if value is not None:
|
||||
to_update[attr] = value
|
||||
|
||||
if 'meta' in to_update:
|
||||
serializer = Serializer.from_params(parsed_args)
|
||||
to_update['meta'] = serializer.deserialize(to_update['meta'])
|
||||
to_update = get_args_for_update(parsed_args)
|
||||
|
||||
network_group = self.client.update(parsed_args.id, **to_update)
|
||||
network_group = data_utils.get_display_data_single(
|
||||
|
|
|
@ -112,3 +112,26 @@ class TestNetworkGroupActions(base.UnitTestCase):
|
|||
self.assertIn("409 Client Error", m_stderr.write.call_args[0][0])
|
||||
self.assertEqual(mreq.last_request.method, 'POST')
|
||||
self.assertEqual(mreq.last_request.path, self.req_base_path)
|
||||
|
||||
def test_set_network_group(self, mreq):
|
||||
path = self.req_base_path + str(self.env_id) + '/'
|
||||
mreq.put(path)
|
||||
self.execute([
|
||||
'fuel', 'network-group', '--set', '--network', '42',
|
||||
'--name', 'new name'])
|
||||
|
||||
self.assertEqual(mreq.last_request.method, 'PUT')
|
||||
self.assertEqual(mreq.last_request.path, path)
|
||||
|
||||
def test_set_network_group_meta(self, mreq):
|
||||
path = self.req_base_path + str(self.env_id) + '/'
|
||||
mreq.put(path)
|
||||
self.execute([
|
||||
'fuel', 'network-group', '--set', '--network', '42',
|
||||
'--meta', '{"ip_ranges": ["10.0.0.2", "10.0.0.254"]}'])
|
||||
|
||||
self.assertEqual(mreq.last_request.method, 'PUT')
|
||||
self.assertEqual(mreq.last_request.path, path)
|
||||
|
||||
meta = mreq.last_request.json()['meta']
|
||||
self.assertEqual(meta['ip_ranges'], ["10.0.0.2", "10.0.0.254"])
|
||||
|
|
Loading…
Reference in New Issue