Skip to content

Commit ef5b7c1

Browse files
committed
dxcli-1234 change everything
Change-Id: I0b6b664b6d4b911858e9b1f73f12125b6c92bdf2
1 parent 770062f commit ef5b7c1

34 files changed

+226
-304
lines changed

openstackclient/network/common.py

Lines changed: 115 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
from cliff import lister
2222
from cliff import show
2323

24+
from openstackclient.common import exceptions
25+
2426

2527
class BaseCommand(object):
2628
json_indent = None
@@ -34,28 +36,72 @@ def dumps(self, value, indent=None):
3436
pass
3537
return json.dumps(to_primitive(value))
3638

37-
def format_data(self, data):
38-
# Modify data to make it more readable
39+
def format_row(self, data):
40+
row = []
3941
for k, v in data.iteritems():
4042
if k in self.matters:
41-
data[k] = self.matters[k](v)
43+
row.append(self.matters[k](v))
4244
elif isinstance(v, list):
4345
value = '\n'.join(self.dumps(
4446
i, indent=self.json_indent) if isinstance(i, dict)
4547
else str(i) for i in v)
46-
data[k] = value
48+
row.append(value)
49+
elif isinstance(v, dict):
50+
row.append(self.dumps(v, indent=self.json_indent))
51+
elif v is None:
52+
row.append('')
53+
else:
54+
row.append(v)
55+
return row
56+
57+
def data_formatter(self, data):
58+
d = {}
59+
for k, v in data.iteritems():
60+
if k in self.matters:
61+
d[k] = self.matters[k](v)
62+
elif isinstance(v, list):
63+
d[k] = ','.join(self.dumps(
64+
i, indent=self.json_indent) if isinstance(i, dict)
65+
else str(i) for i in v)
4766
elif isinstance(v, dict):
48-
value = self.dumps(v, indent=self.json_indent)
49-
data[k] = value
67+
d[k] = self.dumps(v, indent=self.json_indent)
5068
elif v is None:
51-
data[k] = ''
52-
return data
69+
d[k] = ''
70+
else:
71+
d[k] = v
72+
return d
73+
74+
def get_list_method(self):
75+
return getattr(self.app.client_manager.network,
76+
"list_%s" % self.resources)
77+
78+
def find_resource(self, name):
79+
client = self.app.client_manager.network
80+
list_method = self.get_list_method()
81+
data = list_method(name=name, fields='id')
82+
info = data[self.resources]
83+
if len(info) == 1:
84+
return info[0]['id']
85+
if len(info) > 1:
86+
msg = "More than one %s exists with the name '%s'." % \
87+
(self.resource, name)
88+
raise exceptions.CommandError(msg)
89+
data = list_method(id=name, fields='id')
90+
info = data[self.resources]
91+
if len(info) == 1:
92+
return info[0]['id']
93+
msg = "No %s with a name or ID of '%s' exists." % \
94+
(self.resource, name)
95+
raise exceptions.CommandError(msg)
5396

5497

5598
class CreateCommand(show.ShowOne, BaseCommand):
5699

57100
log = logging.getLogger(__name__ + '.CreateCommand')
58101

102+
def get_client(self):
103+
return self.app.client_manager.network
104+
59105
def get_parser(self, prog_name):
60106
parser = super(CreateCommand, self).get_parser(prog_name)
61107
parser.add_argument(
@@ -72,42 +118,54 @@ def take_action(self, parsed_args):
72118
return neuter.take_action(parsed_args)
73119

74120

75-
class DeleteCommand(command.Command):
121+
class DeleteCommand(command.Command, BaseCommand):
76122

77123
log = logging.getLogger(__name__ + '.DeleteCommand')
78-
name = "id"
79-
metavar = "<id>"
80-
help_text = "Identifier of object to delete"
124+
allow_names = True
125+
126+
def __init__(self, app, app_args):
127+
super(DeleteCommand, self).__init__(app, app_args)
128+
self.resources = getattr(self, 'resources', (self.resource + "s"))
129+
self.metavar = "<" + self.resource + ">"
130+
self.help_text = getattr(self, 'help_text', "Name or identifier " + \
131+
"of " + self.resource.replace('_', ' ') + " to delete")
132+
self.func = getattr(self, 'func', self.resource)
133+
self.response = self.resource
81134

82-
def get_client(self):
83-
return self.app.client_manager.network
84135

85136
def get_parser(self, prog_name):
86137
parser = super(DeleteCommand, self).get_parser(prog_name)
87138
parser.add_argument(
88-
self.name,
139+
'identifier',
89140
metavar=self.metavar,
90-
help=self.help_text,
141+
help=self.help_text
91142
)
92143
return parser
93144

94145
def take_action(self, parsed_args):
95146
self.log.debug('take_action(%s)' % parsed_args)
96-
neuter = self.clazz(self.app, self.app_args)
97-
neuter.get_client = self.get_client
98-
parsed_args.request_format = 'json'
99-
return neuter.run(parsed_args)
147+
if self.allow_names:
148+
_id = self.find_resource(parsed_args.identifier)
149+
else:
150+
_id = parsed_args.identifier
151+
delete_method = getattr(self.app.client_manager.network, "delete_" +
152+
self.func)
153+
delete_method(_id)
154+
print >>self.app.stdout, ('Deleted %(resource)s: %(id)s'
155+
% {'id': parsed_args.identifier, 'resource': self.resource})
156+
return
100157

101158

102-
class ListCommand(lister.Lister):
159+
class ListCommand(lister.Lister, BaseCommand):
103160

104161
log = logging.getLogger(__name__ + '.ListCommand')
105162
columns = []
163+
report_filter = {}
106164

107165
def __init__(self, app, app_args):
108166
super(ListCommand, self).__init__(app, app_args)
109-
self.func = self.resource
110-
self.name = self.resource
167+
self.resources = getattr(self, 'resources', (self.resource + "s"))
168+
self.func = getattr(self, 'func', self.resources)
111169

112170
def get_parser(self, prog_name):
113171
parser = super(ListCommand, self).get_parser(prog_name)
@@ -122,24 +180,26 @@ def get_parser(self, prog_name):
122180

123181
def take_action(self, parsed_args):
124182
self.log.debug('take_action(%s)' % parsed_args)
125-
method = getattr(self.app.client_manager.network, "list_" + self.func)
126-
data = method()[self.resource]
183+
list_method = self.get_list_method()
184+
data = list_method(**self.report_filter)[self.resources]
127185
if not self.columns:
128186
self.columns = len(data) > 0 and data[0].keys() or []
129187
self.columns = [w.replace(':', ' ') for w in self.columns]
130-
return (self.columns, (self.format_data(item) for item in data))
188+
return (self.columns, (self.format_row(item) for item in data))
131189

132190

133-
class SetCommand(command.Command):
191+
class SetCommand(command.Command, BaseCommand):
134192

135193
log = logging.getLogger(__name__ + '.SetCommand')
194+
allow_names = True
136195

137196
def __init__(self, app, app_args):
138197
super(SetCommand, self).__init__(app, app_args)
139-
self.metavar = "<" + self.name + ">"
140-
self.help_text = "Name or identifier of " + \
141-
self.name.replace('_', ' ') + " to set"
142-
self.func = self.name
198+
self.resources = getattr(self, 'resources', (self.resource + "s"))
199+
self.metavar = "<" + self.resource + ">"
200+
self.help_text = getattr(self, 'help_text', "Name or identifier " + \
201+
"of " + self.resource.replace('_', ' ') + " to set")
202+
self.func = getattr(self, 'func', self.resource)
143203
self.body = {}
144204

145205
def get_parser(self, prog_name):
@@ -158,21 +218,31 @@ def get_parser(self, prog_name):
158218
def take_action(self, parsed_args):
159219
self.log.debug('take_action(%s)' % parsed_args)
160220
_manager = self.app.client_manager.network
161-
method = getattr(_manager, "update_" + self.func)
162-
return method(parsed_args.identifier, self.body)
221+
if self.allow_names:
222+
_id = self.find_resource(parsed_args.identifier)
223+
else:
224+
_id = parsed_args.identifier
225+
update_method = getattr(_manager, "update_" + self.func)
226+
update_method(_id, self.body)
227+
print >>self.app.stdout, ('Updated %(resource)s: %(id)s' %
228+
{'id': parsed_args.identifier, 'resource': self.resource})
229+
return
230+
163231

164232

165233
class ShowCommand(show.ShowOne, BaseCommand):
166234

167235
log = logging.getLogger(__name__ + '.ShowCommand')
236+
allow_names = True
168237

169238
def __init__(self, app, app_args):
170239
super(ShowCommand, self).__init__(app, app_args)
171-
self.metavar = "<" + self.name + ">"
172-
self.help_text = "Name or identifier of " + \
173-
self.name.replace('_', ' ') + " to show"
174-
self.func = self.name
175-
self.response = self.name
240+
self.resources = getattr(self, 'resources', (self.resource + "s"))
241+
self.metavar = "<" + self.resource + ">"
242+
self.help_text = getattr(self, 'help_text', "Name or identifier " + \
243+
"of " + self.resource.replace('_', ' ') + " to show")
244+
self.func = getattr(self, 'func', self.resource)
245+
self.response = self.resource
176246

177247
def get_parser(self, prog_name):
178248
parser = super(ShowCommand, self).get_parser(prog_name)
@@ -185,8 +255,13 @@ def get_parser(self, prog_name):
185255

186256
def take_action(self, parsed_args):
187257
self.log.debug('take_action(%s)' % parsed_args)
188-
method = getattr(self.app.client_manager.network, "show_" + self.func)
189-
data = self.format_data(method(parsed_args.identifier))
258+
if self.allow_names:
259+
_id = self.find_resource(parsed_args.identifier)
260+
else:
261+
_id = parsed_args.identifier
262+
show_method = getattr(self.app.client_manager.network,
263+
"show_" + self.func)
264+
data = self.data_formatter(show_method(_id)[self.resource])
190265
return zip(*sorted(six.iteritems(data)))
191266

192267

openstackclient/network/v2_0/dhcp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class AddNetworkDhcpAgent(common.AddCommand):
3232

3333

3434
class RemoveNetworkDhcpAgent(common.RemoveCommand):
35-
"""Delete a gateway"""
35+
"""Remove network DHCP Agent"""
3636

3737
clazz = neu2.RemoveNetworkFromDhcpAgent
3838
container_name = "network"

openstackclient/network/v2_0/floatingip.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,20 @@ def get_parser(self, prog_name):
4343
class DeleteFloatingIp(common.DeleteCommand):
4444
"""Delete a floating IP"""
4545

46-
clazz = neu2.DeleteFloatingIP
46+
resource = 'floatingip'
47+
allow_names = False
4748
help_text = "Identifier of floating IP to delete"
4849

4950

5051
class ListFloatingIp(common.ListCommand):
5152
"""List floating IPs"""
5253

53-
resource = 'floatingips'
54+
resource = 'floatingip'
5455

5556

5657
class ShowFloatingIp(common.ShowCommand):
5758
"""Show floating IP details"""
5859

59-
name = "floatingip"
60-
61-
def __init__(self, app, app_args):
62-
super(ShowFloatingIp, self).__init__(app, app_args)
63-
self.help_text = "Identitifer of floating IP to show"
60+
resource = "floatingip"
61+
help_text = "Identitifer of floating IP to show"
62+
allow_names = False

openstackclient/network/v2_0/fw/firewall.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,28 +65,24 @@ def get_parser(self, prog_name):
6565
class DeleteFirewall(common.DeleteCommand):
6666
"""Delete a firewall"""
6767

68-
clazz = neu2.DeleteFirewall
69-
name = 'firewall'
70-
metavar = '<firewall>'
68+
resource = 'firewall'
7169
help_text = 'Name or ID of firewall to delete'
7270

7371

7472
class ListFirewall(common.ListCommand):
7573
"""List firewall"""
7674

77-
resource = 'firewalls'
75+
resource = 'firewall'
7876

7977

8078
class SetFirewall(common.SetCommand):
8179
"""Set firewall values"""
8280

83-
clazz = neu2.UpdateFirewall
84-
name = 'firewall'
85-
metavar = '<firewall>'
86-
help_text = 'ID of firewall to update'
81+
resource = 'firewall'
82+
help_text = 'ID of firewall to set'
8783

8884

8985
class ShowFirewall(common.ShowCommand):
9086
"""Show firewall details"""
9187

92-
name = 'firewall'
88+
resource = 'firewall'

openstackclient/network/v2_0/gateway.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,31 +42,31 @@ def get_parser(self, prog_name):
4242
class DeleteGateway(common.DeleteCommand):
4343
"""Delete a gateway"""
4444

45-
clazz = neu2.DeleteNetworkGateway
46-
name = 'id'
47-
metavar = '<gateway>'
48-
help_text = 'Name or ID of gateway to delete'
45+
resource = 'gateway'
46+
resources = 'network_gateways'
4947

5048

5149
class ListGateway(common.ListCommand):
5250
"""List gateways"""
5351

54-
resource = 'network_gateways'
52+
resource = 'network_gateway'
53+
resources = 'network_gateways'
5554

5655

5756
class SetGateway(common.SetCommand):
5857
"""Set gateway values"""
5958

60-
clazz = neu2.UpdateNetworkGateway
61-
name = 'gateway'
62-
metavar = '<gateway>'
63-
help_text = 'Name or ID of gateway to set'
59+
resource = 'gateway'
60+
resources = 'network_gateways'
61+
func = 'network_gateway'
6462

6563

6664
class ShowGateway(common.ShowCommand):
6765
"""Show gateway details"""
6866

69-
name = 'gateway'
67+
resource = 'gateway'
68+
resources = 'network_gateways'
69+
func = 'network_gateway'
7070

7171
def __init__(self, app, app_args):
7272
super(ShowGateway, self).__init__(app, app_args)

openstackclient/network/v2_0/lb/healthmonitor.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,31 +72,27 @@ def get_parser(self, prog_name):
7272
class DeleteHealthMonitor(common.DeleteCommand):
7373
"""Delete a load balancer health monitor"""
7474

75-
clazz = neu2.DeleteHealthMonitor
76-
name = 'id'
77-
metavar = '<healthmonitor>'
75+
resource = 'health_monitor'
7876
help_text = 'Name or ID of load balancer health monitor to delete'
7977

8078

8179
class ListHealthMonitor(common.ListCommand):
8280
"""List load balancer health monitor"""
8381

84-
resource = 'health_monitors'
82+
resource = 'health_monitor'
8583

8684

8785
class SetHealthMonitor(common.SetCommand):
8886
"""Set load balancer health monitor values"""
8987

90-
clazz = neu2.UpdateHealthMonitor
91-
name = 'id'
92-
metavar = '<healthmonitor>'
93-
help_text = 'Name or ID of load balancer health monitor to update'
88+
resource = 'health_monitor'
89+
help_text = 'Name or ID of load balancer health monitor to set'
9490

9591

9692
class ShowHealthMonitor(common.ShowCommand):
9793
"""Show load balancer health monitor details"""
9894

99-
name = 'health_monitor'
95+
resource = 'health_monitor'
10096

10197

10298
class AddPool(common.AddCommand):

0 commit comments

Comments
 (0)