diff options
| author | Tang Chen <chen.tang@easystack.cn> | 2015-12-15 11:40:23 +0800 |
|---|---|---|
| committer | Tang Chen <chen.tang@easystack.cn> | 2016-02-02 13:58:43 +0800 |
| commit | a83c1f0a4244d6c422a68cf5bf2bbaa3e4617b78 (patch) | |
| tree | f498e3510ab17be8717900e6afc6c66342ce05b4 /openstackclient/network | |
| parent | ceb17e11a9ca0a2dc6c6d72466ad2c7b31a29878 (diff) | |
| download | python-openstackclient-a83c1f0a4244d6c422a68cf5bf2bbaa3e4617b78.tar.gz | |
Network: Abstract get_body() out to be a private helper.
get_body() is needed in each network files to construct a dict
to pass to sdk proxy. And it is also used by several functions
in each file. So define it as a file level private helper function.
The unified prototype should be:
def _get_attrs(client_manager, parsed_args):
1. The name, in sdk, the parameter passed to proxy is named "attrs".
And it is a private method. So let's call it _get_attrs().
2. The parameters, besides parsed_args, when we deal with project
and project_domain, we have to make use of identity_client. So
let's pass in the client manager.
Change-Id: Ib044ebd4ddedbcd805f46334a7fe99e4ebb5b249
Diffstat (limited to 'openstackclient/network')
| -rw-r--r-- | openstackclient/network/v2/network.py | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py index fc94fd82..61237219 100644 --- a/openstackclient/network/v2/network.py +++ b/openstackclient/network/v2/network.py @@ -47,6 +47,33 @@ def _get_columns(item): return tuple(sorted(columns)) +def _get_attrs(client_manager, parsed_args): + attrs = {} + if parsed_args.name is not None: + attrs['name'] = str(parsed_args.name) + if parsed_args.admin_state is not None: + attrs['admin_state_up'] = parsed_args.admin_state + if parsed_args.shared is not None: + attrs['shared'] = parsed_args.shared + + # "network set" command doesn't support setting project. + if 'project' in parsed_args and parsed_args.project is not None: + identity_client = client_manager.identity + project_id = identity_common.find_project( + identity_client, + parsed_args.project, + parsed_args.project_domain, + ).id + attrs['tenant_id'] = project_id + + # "network set" command doesn't support setting availability zone hints. + if 'availability_zone_hints' in parsed_args and \ + parsed_args.availability_zone_hints is not None: + attrs['availability_zone_hints'] = parsed_args.availability_zone_hints + + return attrs + + class CreateNetwork(command.ShowOne): """Create new network""" @@ -105,31 +132,14 @@ class CreateNetwork(command.ShowOne): def take_action(self, parsed_args): client = self.app.client_manager.network - body = self.get_body(parsed_args) - obj = client.create_network(**body) + + 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 get_body(self, parsed_args): - body = {'name': str(parsed_args.name), - 'admin_state_up': parsed_args.admin_state} - if parsed_args.shared is not None: - body['shared'] = parsed_args.shared - if parsed_args.project is not None: - identity_client = self.app.client_manager.identity - project_id = identity_common.find_project( - identity_client, - parsed_args.project, - parsed_args.project_domain, - ).id - body['tenant_id'] = project_id - if parsed_args.availability_zone_hints is not None: - body['availability_zone_hints'] = \ - parsed_args.availability_zone_hints - - return body - class DeleteNetwork(command.Command): """Delete network(s)""" @@ -271,18 +281,13 @@ class SetNetwork(command.Command): client = self.app.client_manager.network obj = client.find_network(parsed_args.identifier, ignore_missing=False) - if parsed_args.name is not None: - obj.name = str(parsed_args.name) - if parsed_args.admin_state is not None: - obj.admin_state_up = parsed_args.admin_state - if parsed_args.shared is not None: - obj.shared = parsed_args.shared - - if not obj.is_dirty: + attrs = _get_attrs(self.app.client_manager, parsed_args) + if attrs == {}: msg = "Nothing specified to be set" raise exceptions.CommandError(msg) - client.update_network(obj) + client.update_network(obj, **attrs) + return class ShowNetwork(command.ShowOne): |
