|
25 | 25 | from openstackclient.network import common |
26 | 26 |
|
27 | 27 |
|
28 | | -def filters(data): |
29 | | - if 'subnets' in data: |
30 | | - data['subnets'] = utils.format_list(data['subnets']) |
31 | | - return data |
| 28 | +def _prep_network_detail(net): |
| 29 | + """Prepare network object for output""" |
| 30 | + |
| 31 | + if 'subnets' in net: |
| 32 | + net['subnets'] = utils.format_list(net['subnets']) |
| 33 | + if 'admin_state_up' in net: |
| 34 | + net['state'] = 'UP' if net['admin_state_up'] else 'DOWN' |
| 35 | + net.pop('admin_state_up') |
| 36 | + if 'router:external' in net: |
| 37 | + net['router_type'] = 'External' if net['router:external'] \ |
| 38 | + else 'Internal' |
| 39 | + net.pop('router:external') |
| 40 | + if 'tenant_id' in net: |
| 41 | + net['project_id'] = net.pop('tenant_id') |
| 42 | + return net |
32 | 43 |
|
33 | 44 |
|
34 | 45 | class CreateNetwork(show.ShowOne): |
@@ -80,7 +91,7 @@ def take_action(self, parsed_args): |
80 | 91 | create_method = getattr(client, "create_network") |
81 | 92 | data = create_method(body)['network'] |
82 | 93 | if data: |
83 | | - data = filters(data) |
| 94 | + data = _prep_network_detail(data) |
84 | 95 | else: |
85 | 96 | data = {'': ''} |
86 | 97 | return zip(*sorted(six.iteritems(data))) |
@@ -133,40 +144,63 @@ def get_parser(self, prog_name): |
133 | 144 | ) |
134 | 145 | parser.add_argument( |
135 | 146 | '--dhcp', |
136 | | - help='ID of the DHCP agent') |
| 147 | + metavar='<dhcp-id>', |
| 148 | + help='DHCP agent ID') |
137 | 149 | parser.add_argument( |
138 | 150 | '--long', |
139 | 151 | action='store_true', |
140 | 152 | default=False, |
141 | | - help='Long listing', |
| 153 | + help='List additional fields in output', |
142 | 154 | ) |
143 | 155 | return parser |
144 | 156 |
|
145 | 157 | def take_action(self, parsed_args): |
146 | 158 | self.log.debug('take_action(%s)' % parsed_args) |
147 | 159 | client = self.app.client_manager.network |
| 160 | + |
148 | 161 | if parsed_args.dhcp: |
149 | | - list_method = getattr(client, 'list_networks_on_dhcp_agent') |
150 | | - resources = 'networks_on_dhcp_agent' |
151 | | - report_filter = {'dhcp_agent': parsed_args.dhcp} |
152 | | - data = list_method(**report_filter)[resources] |
153 | | - else: |
154 | | - list_method = getattr(client, "list_networks") |
155 | | - report_filter = {} |
156 | | - if parsed_args.external: |
157 | | - report_filter = {'router:external': True} |
158 | | - data = list_method(**report_filter)['networks'] |
159 | | - columns = len(data) > 0 and sorted(data[0].keys()) or [] |
160 | | - if parsed_args.columns: |
161 | | - list_columns = parsed_args.columns |
| 162 | + data = client.api.dhcp_agent_list(dhcp_id=parsed_args.dhcp) |
| 163 | + |
| 164 | + columns = ('ID',) |
| 165 | + column_headers = columns |
162 | 166 | else: |
163 | | - list_columns = ['id', 'name', 'subnets'] |
164 | | - if not parsed_args.long and not parsed_args.dhcp: |
165 | | - columns = [x for x in list_columns if x in columns] |
166 | | - formatters = {'subnets': utils.format_list} |
167 | | - return (columns, |
168 | | - (utils.get_dict_properties(s, columns, formatters=formatters) |
169 | | - for s in data)) |
| 167 | + data = client.api.network_list(external=parsed_args.external) |
| 168 | + |
| 169 | + if parsed_args.long: |
| 170 | + columns = ( |
| 171 | + 'ID', |
| 172 | + 'Name', |
| 173 | + 'Status', |
| 174 | + 'project_id', |
| 175 | + 'state', |
| 176 | + 'Shared', |
| 177 | + 'Subnets', |
| 178 | + 'provider:network_type', |
| 179 | + 'router_type', |
| 180 | + ) |
| 181 | + column_headers = ( |
| 182 | + 'ID', |
| 183 | + 'Name', |
| 184 | + 'Status', |
| 185 | + 'Project', |
| 186 | + 'State', |
| 187 | + 'Shared', |
| 188 | + 'Subnets', |
| 189 | + 'Network Type', |
| 190 | + 'Router Type', |
| 191 | + ) |
| 192 | + else: |
| 193 | + columns = ('ID', 'Name', 'Subnets') |
| 194 | + column_headers = columns |
| 195 | + |
| 196 | + for d in data: |
| 197 | + d = _prep_network_detail(d) |
| 198 | + |
| 199 | + return (column_headers, |
| 200 | + (utils.get_dict_properties( |
| 201 | + s, columns, |
| 202 | + formatters={'subnets': utils.format_list}, |
| 203 | + ) for s in data)) |
170 | 204 |
|
171 | 205 |
|
172 | 206 | class SetNetwork(command.Command): |
@@ -253,9 +287,9 @@ def get_parser(self, prog_name): |
253 | 287 | def take_action(self, parsed_args): |
254 | 288 | self.log.debug('take_action(%s)' % parsed_args) |
255 | 289 | client = self.app.client_manager.network |
256 | | - _id = common.find(client, 'network', 'networks', |
257 | | - parsed_args.identifier) |
258 | | - show_method = getattr(client, "show_network") |
259 | | - data = show_method(_id)['network'] |
260 | | - data = filters(data) |
| 290 | + net = client.api.find_attr( |
| 291 | + 'networks', |
| 292 | + parsed_args.identifier, |
| 293 | + ) |
| 294 | + data = _prep_network_detail(net) |
261 | 295 | return zip(*sorted(six.iteritems(data))) |
0 commit comments