@@ -47,6 +47,33 @@ def _get_columns(item):
4747 return tuple (sorted (columns ))
4848
4949
50+ def _get_attrs (client_manager , parsed_args ):
51+ attrs = {}
52+ if parsed_args .name is not None :
53+ attrs ['name' ] = str (parsed_args .name )
54+ if parsed_args .admin_state is not None :
55+ attrs ['admin_state_up' ] = parsed_args .admin_state
56+ if parsed_args .shared is not None :
57+ attrs ['shared' ] = parsed_args .shared
58+
59+ # "network set" command doesn't support setting project.
60+ if 'project' in parsed_args and parsed_args .project is not None :
61+ identity_client = client_manager .identity
62+ project_id = identity_common .find_project (
63+ identity_client ,
64+ parsed_args .project ,
65+ parsed_args .project_domain ,
66+ ).id
67+ attrs ['tenant_id' ] = project_id
68+
69+ # "network set" command doesn't support setting availability zone hints.
70+ if 'availability_zone_hints' in parsed_args and \
71+ parsed_args .availability_zone_hints is not None :
72+ attrs ['availability_zone_hints' ] = parsed_args .availability_zone_hints
73+
74+ return attrs
75+
76+
5077class CreateNetwork (command .ShowOne ):
5178 """Create new network"""
5279
@@ -105,31 +132,14 @@ def get_parser(self, prog_name):
105132
106133 def take_action (self , parsed_args ):
107134 client = self .app .client_manager .network
108- body = self .get_body (parsed_args )
109- obj = client .create_network (** body )
135+
136+ attrs = _get_attrs (self .app .client_manager , parsed_args )
137+ obj = client .create_network (** attrs )
110138 columns = _get_columns (obj )
139+
111140 data = utils .get_item_properties (obj , columns , formatters = _formatters )
112141 return (columns , data )
113142
114- def get_body (self , parsed_args ):
115- body = {'name' : str (parsed_args .name ),
116- 'admin_state_up' : parsed_args .admin_state }
117- if parsed_args .shared is not None :
118- body ['shared' ] = parsed_args .shared
119- if parsed_args .project is not None :
120- identity_client = self .app .client_manager .identity
121- project_id = identity_common .find_project (
122- identity_client ,
123- parsed_args .project ,
124- parsed_args .project_domain ,
125- ).id
126- body ['tenant_id' ] = project_id
127- if parsed_args .availability_zone_hints is not None :
128- body ['availability_zone_hints' ] = \
129- parsed_args .availability_zone_hints
130-
131- return body
132-
133143
134144class DeleteNetwork (command .Command ):
135145 """Delete network(s)"""
@@ -271,18 +281,13 @@ def take_action(self, parsed_args):
271281 client = self .app .client_manager .network
272282 obj = client .find_network (parsed_args .identifier , ignore_missing = False )
273283
274- if parsed_args .name is not None :
275- obj .name = str (parsed_args .name )
276- if parsed_args .admin_state is not None :
277- obj .admin_state_up = parsed_args .admin_state
278- if parsed_args .shared is not None :
279- obj .shared = parsed_args .shared
280-
281- if not obj .is_dirty :
284+ attrs = _get_attrs (self .app .client_manager , parsed_args )
285+ if attrs == {}:
282286 msg = "Nothing specified to be set"
283287 raise exceptions .CommandError (msg )
284288
285- client .update_network (obj )
289+ client .update_network (obj , ** attrs )
290+ return
286291
287292
288293class ShowNetwork (command .ShowOne ):
0 commit comments