python-openstackclient 10.0.0__py3-none-any.whl → 10.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. openstackclient/common/availability_zone.py +1 -1
  2. openstackclient/common/module.py +21 -27
  3. openstackclient/common/pagination.py +42 -4
  4. openstackclient/common/project_cleanup.py +1 -2
  5. openstackclient/common/quota.py +9 -5
  6. openstackclient/compute/v2/flavor.py +3 -1
  7. openstackclient/compute/v2/hypervisor.py +2 -0
  8. openstackclient/compute/v2/keypair.py +6 -2
  9. openstackclient/compute/v2/server.py +21 -12
  10. openstackclient/compute/v2/server_event.py +8 -1
  11. openstackclient/compute/v2/server_group.py +2 -0
  12. openstackclient/compute/v2/server_migration.py +3 -0
  13. openstackclient/compute/v2/server_volume.py +3 -1
  14. openstackclient/compute/v2/service.py +3 -1
  15. openstackclient/compute/v2/usage.py +2 -2
  16. openstackclient/identity/common.py +5 -1
  17. openstackclient/identity/v3/access_rule.py +6 -0
  18. openstackclient/identity/v3/application_credential.py +10 -3
  19. openstackclient/identity/v3/credential.py +4 -2
  20. openstackclient/identity/v3/domain.py +4 -2
  21. openstackclient/identity/v3/endpoint.py +57 -45
  22. openstackclient/identity/v3/federation_protocol.py +7 -5
  23. openstackclient/identity/v3/group.py +11 -10
  24. openstackclient/identity/v3/identity_provider.py +4 -1
  25. openstackclient/identity/v3/limit.py +5 -2
  26. openstackclient/identity/v3/mapping.py +36 -19
  27. openstackclient/identity/v3/project.py +18 -5
  28. openstackclient/identity/v3/region.py +4 -2
  29. openstackclient/identity/v3/registered_limit.py +3 -2
  30. openstackclient/identity/v3/role.py +2 -1
  31. openstackclient/identity/v3/role_assignment.py +3 -2
  32. openstackclient/identity/v3/service.py +4 -2
  33. openstackclient/identity/v3/service_provider.py +4 -2
  34. openstackclient/identity/v3/trust.py +8 -5
  35. openstackclient/identity/v3/user.py +38 -11
  36. openstackclient/image/v2/cache.py +2 -2
  37. openstackclient/image/v2/image.py +15 -9
  38. openstackclient/image/v2/metadef_namespaces.py +11 -10
  39. openstackclient/image/v2/metadef_objects.py +5 -5
  40. openstackclient/image/v2/metadef_properties.py +7 -4
  41. openstackclient/image/v2/task.py +11 -22
  42. openstackclient/network/utils.py +0 -41
  43. openstackclient/network/v2/address_group.py +13 -1
  44. openstackclient/network/v2/address_scope.py +13 -8
  45. openstackclient/network/v2/bgpvpn/bgpvpn.py +33 -19
  46. openstackclient/network/v2/bgpvpn/network_association.py +25 -13
  47. openstackclient/network/v2/bgpvpn/port_association.py +35 -21
  48. openstackclient/network/v2/bgpvpn/router_association.py +27 -14
  49. openstackclient/network/v2/default_security_group_rule.py +14 -6
  50. openstackclient/network/v2/floating_ip.py +12 -4
  51. openstackclient/network/v2/floating_ip_port_forwarding.py +12 -2
  52. openstackclient/network/v2/fwaas/group.py +34 -1
  53. openstackclient/network/v2/fwaas/rule.py +39 -3
  54. openstackclient/network/v2/ip_availability.py +13 -4
  55. openstackclient/network/v2/l3_conntrack_helper.py +14 -1
  56. openstackclient/network/v2/local_ip.py +4 -1
  57. openstackclient/network/v2/local_ip_association.py +4 -1
  58. openstackclient/network/v2/ndp_proxy.py +4 -1
  59. openstackclient/network/v2/network.py +87 -20
  60. openstackclient/network/v2/network_agent.py +32 -10
  61. openstackclient/network/v2/network_auto_allocated_topology.py +6 -5
  62. openstackclient/network/v2/network_flavor.py +19 -6
  63. openstackclient/network/v2/network_flavor_profile.py +20 -6
  64. openstackclient/network/v2/network_meter.py +19 -6
  65. openstackclient/network/v2/network_meter_rule.py +20 -2
  66. openstackclient/network/v2/network_qos_policy.py +15 -7
  67. openstackclient/network/v2/network_qos_rule.py +16 -1
  68. openstackclient/network/v2/network_qos_rule_type.py +16 -5
  69. openstackclient/network/v2/network_rbac.py +12 -5
  70. openstackclient/network/v2/network_segment.py +13 -1
  71. openstackclient/network/v2/network_segment_range.py +15 -3
  72. openstackclient/network/v2/network_trunk.py +4 -1
  73. openstackclient/network/v2/port.py +88 -12
  74. openstackclient/network/v2/router.py +27 -16
  75. openstackclient/network/v2/security_group.py +18 -49
  76. openstackclient/network/v2/security_group_rule.py +18 -5
  77. openstackclient/network/v2/subnet.py +15 -7
  78. openstackclient/network/v2/subnet_pool.py +13 -8
  79. openstackclient/network/v2/taas/tap_flow.py +13 -3
  80. openstackclient/network/v2/taas/tap_mirror.py +7 -4
  81. openstackclient/network/v2/taas/tap_service.py +4 -1
  82. openstackclient/object/v1/container.py +3 -1
  83. openstackclient/object/v1/object.py +3 -1
  84. openstackclient/tests/functional/identity/v3/common.py +34 -0
  85. openstackclient/tests/functional/identity/v3/test_application_credential.py +1 -1
  86. openstackclient/tests/functional/identity/v3/test_mapping.py +81 -0
  87. openstackclient/tests/functional/volume/v3/test_volume_group.py +163 -0
  88. openstackclient/tests/unit/common/test_limits.py +1 -1
  89. openstackclient/tests/unit/common/test_module.py +77 -44
  90. openstackclient/tests/unit/common/test_quota.py +9 -0
  91. openstackclient/tests/unit/compute/v2/fakes.py +1 -57
  92. openstackclient/tests/unit/compute/v2/test_agent.py +4 -4
  93. openstackclient/tests/unit/compute/v2/test_aggregate.py +1 -1
  94. openstackclient/tests/unit/compute/v2/test_console.py +2 -2
  95. openstackclient/tests/unit/compute/v2/test_console_connection.py +1 -1
  96. openstackclient/tests/unit/compute/v2/test_flavor.py +1 -1
  97. openstackclient/tests/unit/compute/v2/test_host.py +3 -3
  98. openstackclient/tests/unit/compute/v2/test_hypervisor.py +2 -2
  99. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -1
  100. openstackclient/tests/unit/compute/v2/test_keypair.py +1 -1
  101. openstackclient/tests/unit/compute/v2/test_server.py +15 -15
  102. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
  103. openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
  104. openstackclient/tests/unit/compute/v2/test_server_group.py +1 -1
  105. openstackclient/tests/unit/compute/v2/test_server_image.py +1 -1
  106. openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
  107. openstackclient/tests/unit/compute/v2/test_server_share.py +4 -4
  108. openstackclient/tests/unit/compute/v2/test_server_volume.py +2 -2
  109. openstackclient/tests/unit/compute/v2/test_service.py +3 -3
  110. openstackclient/tests/unit/compute/v2/test_usage.py +1 -1
  111. openstackclient/tests/unit/identity/v2_0/fakes.py +3 -7
  112. openstackclient/tests/unit/identity/v2_0/test_endpoint.py +1 -1
  113. openstackclient/tests/unit/identity/v2_0/test_project.py +1 -1
  114. openstackclient/tests/unit/identity/v2_0/test_role.py +1 -1
  115. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +1 -1
  116. openstackclient/tests/unit/identity/v2_0/test_service.py +1 -1
  117. openstackclient/tests/unit/identity/v2_0/test_token.py +2 -2
  118. openstackclient/tests/unit/identity/v2_0/test_user.py +1 -1
  119. openstackclient/tests/unit/identity/v3/fakes.py +5 -38
  120. openstackclient/tests/unit/identity/v3/test_access_rule.py +3 -3
  121. openstackclient/tests/unit/identity/v3/test_application_credential.py +4 -4
  122. openstackclient/tests/unit/identity/v3/test_credential.py +5 -5
  123. openstackclient/tests/unit/identity/v3/test_domain.py +5 -5
  124. openstackclient/tests/unit/identity/v3/test_endpoint.py +6 -6
  125. openstackclient/tests/unit/identity/v3/test_endpoint_group.py +1 -1
  126. openstackclient/tests/unit/identity/v3/test_group.py +8 -8
  127. openstackclient/tests/unit/identity/v3/test_implied_role.py +1 -1
  128. openstackclient/tests/unit/identity/v3/test_limit.py +5 -5
  129. openstackclient/tests/unit/identity/v3/test_mappings.py +163 -79
  130. openstackclient/tests/unit/identity/v3/test_project.py +28 -5
  131. openstackclient/tests/unit/identity/v3/test_protocol.py +3 -3
  132. openstackclient/tests/unit/identity/v3/test_region.py +5 -5
  133. openstackclient/tests/unit/identity/v3/test_registered_limit.py +5 -5
  134. openstackclient/tests/unit/identity/v3/test_role.py +8 -8
  135. openstackclient/tests/unit/identity/v3/test_role_assignment.py +1 -1
  136. openstackclient/tests/unit/identity/v3/test_service.py +5 -5
  137. openstackclient/tests/unit/identity/v3/test_token.py +2 -2
  138. openstackclient/tests/unit/identity/v3/test_trust.py +4 -4
  139. openstackclient/tests/unit/identity/v3/test_user.py +73 -6
  140. openstackclient/tests/unit/network/v2/fakes.py +5 -77
  141. openstackclient/tests/unit/network/v2/fwaas/test_group.py +28 -2
  142. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +28 -3
  143. openstackclient/tests/unit/network/v2/test_address_group.py +24 -0
  144. openstackclient/tests/unit/network/v2/test_address_scope.py +24 -0
  145. openstackclient/tests/unit/network/v2/test_floating_ip.py +24 -0
  146. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +24 -0
  147. openstackclient/tests/unit/network/v2/test_ip_availability.py +25 -0
  148. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +29 -3
  149. openstackclient/tests/unit/network/v2/test_network.py +74 -12
  150. openstackclient/tests/unit/network/v2/test_network_agent.py +50 -1
  151. openstackclient/tests/unit/network/v2/test_network_flavor.py +24 -0
  152. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +24 -0
  153. openstackclient/tests/unit/network/v2/test_network_meter.py +24 -0
  154. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +24 -0
  155. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +24 -0
  156. openstackclient/tests/unit/network/v2/test_network_rbac.py +24 -0
  157. openstackclient/tests/unit/network/v2/test_network_segment.py +24 -0
  158. openstackclient/tests/unit/network/v2/test_network_segment_range.py +24 -0
  159. openstackclient/tests/unit/network/v2/test_port.py +166 -0
  160. openstackclient/tests/unit/network/v2/test_router.py +28 -7
  161. openstackclient/tests/unit/network/v2/test_security_group.py +22 -0
  162. openstackclient/tests/unit/network/v2/test_security_group_rule.py +25 -0
  163. openstackclient/tests/unit/network/v2/test_subnet.py +28 -4
  164. openstackclient/tests/unit/network/v2/test_subnet_pool.py +24 -0
  165. openstackclient/tests/unit/volume/v2/fakes.py +20 -140
  166. openstackclient/tests/unit/volume/v2/test_volume_backup.py +5 -9
  167. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +6 -0
  168. openstackclient/tests/unit/volume/v3/fakes.py +204 -100
  169. openstackclient/tests/unit/volume/v3/test_backup_record.py +114 -0
  170. openstackclient/tests/unit/volume/v3/test_consistency_group.py +720 -0
  171. openstackclient/tests/unit/volume/v3/test_consistency_group_snapshot.py +354 -0
  172. openstackclient/tests/unit/volume/v3/test_qos_specs.py +455 -0
  173. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +2 -0
  174. openstackclient/tests/unit/volume/v3/test_volume_backend.py +158 -0
  175. openstackclient/tests/unit/volume/v3/test_volume_backup.py +5 -9
  176. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +65 -0
  177. openstackclient/tests/unit/volume/v3/test_volume_host.py +115 -0
  178. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +6 -0
  179. openstackclient/volume/v2/volume.py +4 -2
  180. openstackclient/volume/v2/volume_backup.py +2 -3
  181. openstackclient/volume/v2/volume_snapshot.py +3 -4
  182. openstackclient/volume/v3/backup_record.py +94 -0
  183. openstackclient/volume/v3/consistency_group.py +400 -0
  184. openstackclient/volume/v3/consistency_group_snapshot.py +225 -0
  185. openstackclient/volume/v3/qos_specs.py +389 -0
  186. openstackclient/volume/v3/volume.py +4 -2
  187. openstackclient/volume/v3/volume_attachment.py +5 -1
  188. openstackclient/volume/v3/volume_backend.py +130 -0
  189. openstackclient/volume/v3/volume_backup.py +2 -3
  190. openstackclient/volume/v3/volume_group_snapshot.py +4 -6
  191. openstackclient/volume/v3/volume_group_type.py +1 -1
  192. openstackclient/volume/v3/volume_host.py +74 -0
  193. openstackclient/volume/v3/volume_message.py +3 -1
  194. openstackclient/volume/v3/volume_snapshot.py +2 -1
  195. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/METADATA +3 -4
  196. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/RECORD +202 -188
  197. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/entry_points.txt +24 -24
  198. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/AUTHORS +5 -0
  199. python_openstackclient-10.1.0.dist-info/pbr.json +1 -0
  200. python_openstackclient-10.0.0.dist-info/pbr.json +0 -1
  201. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/WHEEL +0 -0
  202. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/LICENSE +0 -0
  203. {python_openstackclient-10.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/top_level.txt +0 -0
@@ -19,11 +19,13 @@ from collections.abc import Iterable, Sequence
19
19
  from typing import Any
20
20
 
21
21
  from cliff import columns as cliff_columns
22
+ from openstack.network.v2 import agent as _agent
22
23
  from osc_lib.cli import format_columns
23
24
  from osc_lib import exceptions
24
25
  from osc_lib import utils
25
26
 
26
27
  from openstackclient import command
28
+ from openstackclient.common import pagination
27
29
  from openstackclient.i18n import _
28
30
 
29
31
  LOG = logging.getLogger(__name__)
@@ -48,7 +50,9 @@ _formatters = {
48
50
  }
49
51
 
50
52
 
51
- def _get_network_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
53
+ def _get_network_columns(
54
+ item: _agent.Agent,
55
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
52
56
  column_data_mapping = {
53
57
  'admin_state_up': 'is_admin_state_up',
54
58
  'agent_type': 'agent_type',
@@ -118,6 +122,15 @@ class AddRouterToAgent(command.Command):
118
122
  parser.add_argument(
119
123
  '--l3', action='store_true', help=_('Add router to an L3 agent')
120
124
  )
125
+ parser.add_argument(
126
+ '--ha-chassis-priority',
127
+ metavar='<ha-chassis-priority>',
128
+ type=int,
129
+ help=_(
130
+ "HA Chassis priority, ranging from [0, 32767]. "
131
+ "Only used with --l3 and for ML2/OVN L3 agents"
132
+ ),
133
+ )
121
134
  parser.add_argument(
122
135
  'agent_id',
123
136
  metavar='<agent-id>',
@@ -136,7 +149,11 @@ class AddRouterToAgent(command.Command):
136
149
  agent = client.get_agent(parsed_args.agent_id)
137
150
  router = client.find_router(parsed_args.router, ignore_missing=False)
138
151
  if parsed_args.l3:
139
- client.add_router_to_agent(agent, router)
152
+ client.add_router_to_agent(
153
+ agent,
154
+ router,
155
+ ha_chassis_priority=parsed_args.ha_chassis_priority,
156
+ )
140
157
 
141
158
 
142
159
  class DeleteNetworkAgent(command.Command):
@@ -177,8 +194,6 @@ class DeleteNetworkAgent(command.Command):
177
194
  raise exceptions.CommandError(msg)
178
195
 
179
196
 
180
- # TODO(huanxuan): Use the SDK resource mapped attribute names once the
181
- # OSC minimum requirements include SDK 1.0.
182
197
  class ListNetworkAgent(command.Lister):
183
198
  _description = _("List network agents")
184
199
  _supported_agents = {
@@ -235,6 +250,7 @@ class ListNetworkAgent(command.Lister):
235
250
  default=False,
236
251
  help=_("List additional fields in output"),
237
252
  )
253
+ pagination.add_marker_pagination_option_to_parser(parser)
238
254
 
239
255
  return parser
240
256
 
@@ -262,12 +278,19 @@ class ListNetworkAgent(command.Lister):
262
278
  )
263
279
 
264
280
  filters = {}
265
-
281
+ if parsed_args.marker is not None:
282
+ filters['marker'] = parsed_args.marker
283
+ if parsed_args.limit is not None:
284
+ filters['limit'] = parsed_args.limit
285
+ if parsed_args.max_items is not None:
286
+ filters['max_items'] = parsed_args.max_items
287
+
288
+ data: list[_agent.Agent]
266
289
  if parsed_args.network is not None:
267
290
  network = client.find_network(
268
291
  parsed_args.network, ignore_missing=False
269
292
  )
270
- data = client.network_hosting_dhcp_agents(network)
293
+ data = list(client.network_hosting_dhcp_agents(network))
271
294
  elif parsed_args.router is not None:
272
295
  if parsed_args.long:
273
296
  columns += ('ha_state',)
@@ -275,7 +298,7 @@ class ListNetworkAgent(command.Lister):
275
298
  router = client.find_router(
276
299
  parsed_args.router, ignore_missing=False
277
300
  )
278
- data = client.routers_hosting_l3_agents(router)
301
+ data = list(client.routers_hosting_l3_agents(router))
279
302
  else:
280
303
  if parsed_args.agent_type is not None:
281
304
  filters['agent_type'] = self._supported_agents[
@@ -284,7 +307,8 @@ class ListNetworkAgent(command.Lister):
284
307
  if parsed_args.host is not None:
285
308
  filters['host'] = parsed_args.host
286
309
 
287
- data = client.agents(**filters)
310
+ data = list(client.agents(**filters))
311
+
288
312
  return (
289
313
  column_headers,
290
314
  (
@@ -365,8 +389,6 @@ class RemoveRouterFromAgent(command.Command):
365
389
  client.remove_router_from_agent(agent, router)
366
390
 
367
391
 
368
- # TODO(huanxuan): Use the SDK resource mapped attribute names once the
369
- # OSC minimum requirements include SDK 1.0.
370
392
  class SetNetworkAgent(command.Command):
371
393
  _description = _("Set network agent properties")
372
394
 
@@ -18,6 +18,9 @@ import logging
18
18
  from collections.abc import Iterable, Sequence
19
19
  from typing import Any
20
20
 
21
+ from openstack.network.v2 import (
22
+ auto_allocated_topology as _auto_allocated_topology,
23
+ )
21
24
  from osc_lib import utils
22
25
 
23
26
  from openstackclient import command
@@ -27,7 +30,9 @@ from openstackclient.identity import common as identity_common
27
30
  LOG = logging.getLogger(__name__)
28
31
 
29
32
 
30
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
33
+ def _get_columns(
34
+ item: _auto_allocated_topology.AutoAllocatedTopology,
35
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
31
36
  hidden_columns = ['name', 'location', 'tenant_id']
32
37
  return utils.get_osc_show_columns_for_sdk_resource(
33
38
  item, {}, hidden_columns
@@ -63,8 +68,6 @@ def _get_attrs(
63
68
  return attrs
64
69
 
65
70
 
66
- # TODO(ankur-gupta-f): Use the SDK resource mapped attribute names once the
67
- # OSC minimum requirements include SDK 1.0.
68
71
  class CreateAutoAllocatedTopology(command.ShowOne):
69
72
  _description = _("Create the auto allocated topology for project")
70
73
 
@@ -130,8 +133,6 @@ class CreateAutoAllocatedTopology(command.ShowOne):
130
133
  return (columns, data)
131
134
 
132
135
 
133
- # TODO(ankur-gupta-f): Use the SDK resource mapped attribute names once the
134
- # OSC minimum requirements include SDK 1.0.
135
136
  class DeleteAutoAllocatedTopology(command.Command):
136
137
  _description = _("Delete auto allocated topology for project")
137
138
 
@@ -18,10 +18,12 @@ import logging
18
18
  from collections.abc import Iterable, Sequence
19
19
  from typing import Any
20
20
 
21
+ from openstack.network.v2 import flavor as _flavor
21
22
  from osc_lib import exceptions
22
23
  from osc_lib import utils
23
24
 
24
25
  from openstackclient import command
26
+ from openstackclient.common import pagination
25
27
  from openstackclient.i18n import _
26
28
  from openstackclient.identity import common as identity_common
27
29
  from openstackclient.network import common
@@ -29,7 +31,9 @@ from openstackclient.network import common
29
31
  LOG = logging.getLogger(__name__)
30
32
 
31
33
 
32
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
34
+ def _get_columns(
35
+ item: _flavor.Flavor,
36
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
33
37
  column_map = {
34
38
  'is_enabled': 'enabled',
35
39
  }
@@ -92,8 +96,6 @@ class AddNetworkFlavorToProfile(command.Command):
92
96
  )
93
97
 
94
98
 
95
- # TODO(dasanind): Use the SDK resource mapped attribute names once the
96
- # OSC minimum requirements include SDK 1.0.
97
99
  class CreateNetworkFlavor(command.ShowOne, common.NeutronCommandWithExtraArgs):
98
100
  _description = _("Create new network flavor")
99
101
 
@@ -192,6 +194,11 @@ class DeleteNetworkFlavor(command.Command):
192
194
  class ListNetworkFlavor(command.Lister):
193
195
  _description = _("List network flavors")
194
196
 
197
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
198
+ parser = super().get_parser(prog_name)
199
+ pagination.add_marker_pagination_option_to_parser(parser)
200
+ return parser
201
+
195
202
  def take_action(
196
203
  self, parsed_args: argparse.Namespace
197
204
  ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
@@ -206,7 +213,15 @@ class ListNetworkFlavor(command.Lister):
206
213
  'Description',
207
214
  )
208
215
 
209
- data = client.flavors()
216
+ filters = {}
217
+ if parsed_args.marker is not None:
218
+ filters['marker'] = parsed_args.marker
219
+ if parsed_args.limit is not None:
220
+ filters['limit'] = parsed_args.limit
221
+ if parsed_args.max_items is not None:
222
+ filters['max_items'] = parsed_args.max_items
223
+
224
+ data = client.flavors(**filters)
210
225
  return (
211
226
  column_headers,
212
227
  (
@@ -247,8 +262,6 @@ class RemoveNetworkFlavorFromProfile(command.Command):
247
262
  )
248
263
 
249
264
 
250
- # TODO(dasanind): Use only the SDK resource mapped attribute names once the
251
- # OSC minimum requirements include SDK 1.0.
252
265
  class SetNetworkFlavor(common.NeutronCommandWithExtraArgs):
253
266
  _description = _("Set network flavor properties")
254
267
 
@@ -16,17 +16,21 @@ import logging
16
16
  from collections.abc import Iterable, Sequence
17
17
  from typing import Any
18
18
 
19
+ from openstack.network.v2 import service_profile as _service_profile
19
20
  from osc_lib import exceptions
20
21
  from osc_lib import utils
21
22
 
22
23
  from openstackclient import command
24
+ from openstackclient.common import pagination
23
25
  from openstackclient.i18n import _
24
26
  from openstackclient.network import common
25
27
 
26
28
  LOG = logging.getLogger(__name__)
27
29
 
28
30
 
29
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
31
+ def _get_columns(
32
+ item: _service_profile.ServiceProfile,
33
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
30
34
  column_map = {
31
35
  'is_enabled': 'enabled',
32
36
  }
@@ -55,8 +59,6 @@ def _get_attrs(
55
59
  return attrs
56
60
 
57
61
 
58
- # TODO(ndahiwade): Use the SDK resource mapped attribute names once the
59
- # OSC minimum requirements include SDK 1.0.
60
62
  class CreateNetworkFlavorProfile(
61
63
  command.ShowOne, common.NeutronCommandWithExtraArgs
62
64
  ):
@@ -161,6 +163,11 @@ class DeleteNetworkFlavorProfile(command.Command):
161
163
  class ListNetworkFlavorProfile(command.Lister):
162
164
  _description = _("List network flavor profile(s)")
163
165
 
166
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
167
+ parser = super().get_parser(prog_name)
168
+ pagination.add_marker_pagination_option_to_parser(parser)
169
+ return parser
170
+
164
171
  def take_action(
165
172
  self, parsed_args: argparse.Namespace
166
173
  ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
@@ -181,7 +188,16 @@ class ListNetworkFlavorProfile(command.Lister):
181
188
  'Description',
182
189
  )
183
190
 
184
- data = client.service_profiles()
191
+ filters = {}
192
+ if parsed_args.marker is not None:
193
+ filters['marker'] = parsed_args.marker
194
+ if parsed_args.limit is not None:
195
+ filters['limit'] = parsed_args.limit
196
+ if parsed_args.max_items is not None:
197
+ filters['max_items'] = parsed_args.max_items
198
+
199
+ data = client.service_profiles(**filters)
200
+
185
201
  return (
186
202
  column_headers,
187
203
  (
@@ -194,8 +210,6 @@ class ListNetworkFlavorProfile(command.Lister):
194
210
  )
195
211
 
196
212
 
197
- # TODO(ndahiwade): Use the SDK resource mapped attribute names once the
198
- # OSC minimum requirements include SDK 1.0.
199
213
  class SetNetworkFlavorProfile(common.NeutronCommandWithExtraArgs):
200
214
  _description = _("Set network flavor profile properties")
201
215
 
@@ -18,10 +18,12 @@ import logging
18
18
  from collections.abc import Iterable, Sequence
19
19
  from typing import Any
20
20
 
21
+ from openstack.network.v2 import metering_label as _metering_label
21
22
  from osc_lib import exceptions
22
23
  from osc_lib import utils
23
24
 
24
25
  from openstackclient import command
26
+ from openstackclient.common import pagination
25
27
  from openstackclient.i18n import _
26
28
  from openstackclient.identity import common as identity_common
27
29
  from openstackclient.network import common
@@ -29,7 +31,9 @@ from openstackclient.network import common
29
31
  LOG = logging.getLogger(__name__)
30
32
 
31
33
 
32
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
34
+ def _get_columns(
35
+ item: _metering_label.MeteringLabel,
36
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
33
37
  column_map = {
34
38
  'is_shared': 'shared',
35
39
  }
@@ -64,8 +68,6 @@ def _get_attrs(
64
68
  return attrs
65
69
 
66
70
 
67
- # TODO(ankur-gupta-f): Use the SDK resource mapped attribute names once the
68
- # OSC minimum requirements include SDK 1.0.
69
71
  class CreateMeter(command.ShowOne, common.NeutronCommandWithExtraArgs):
70
72
  _description = _("Create network meter")
71
73
 
@@ -119,8 +121,6 @@ class CreateMeter(command.ShowOne, common.NeutronCommandWithExtraArgs):
119
121
  return (display_columns, data)
120
122
 
121
123
 
122
- # TODO(ankur-gupta-f): Use the SDK resource mapped attribute names once the
123
- # OSC minimum requirements include SDK 1.0.
124
124
  class DeleteMeter(command.Command):
125
125
  _description = _("Delete network meter")
126
126
 
@@ -161,6 +161,11 @@ class DeleteMeter(command.Command):
161
161
  class ListMeter(command.Lister):
162
162
  _description = _("List network meters")
163
163
 
164
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
165
+ parser = super().get_parser(prog_name)
166
+ pagination.add_marker_pagination_option_to_parser(parser)
167
+ return parser
168
+
164
169
  def take_action(
165
170
  self, parsed_args: argparse.Namespace
166
171
  ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
@@ -179,7 +184,15 @@ class ListMeter(command.Lister):
179
184
  'Shared',
180
185
  )
181
186
 
182
- data = client.metering_labels()
187
+ filters = {}
188
+ if parsed_args.marker is not None:
189
+ filters['marker'] = parsed_args.marker
190
+ if parsed_args.limit is not None:
191
+ filters['limit'] = parsed_args.limit
192
+ if parsed_args.max_items is not None:
193
+ filters['max_items'] = parsed_args.max_items
194
+
195
+ data = client.metering_labels(**filters)
183
196
  return (
184
197
  column_headers,
185
198
  (
@@ -18,10 +18,12 @@ import logging
18
18
  from collections.abc import Iterable, Sequence
19
19
  from typing import Any
20
20
 
21
+ from openstack.network.v2 import metering_label_rule as _metering_label_rule
21
22
  from osc_lib import exceptions
22
23
  from osc_lib import utils
23
24
 
24
25
  from openstackclient import command
26
+ from openstackclient.common import pagination
25
27
  from openstackclient.i18n import _
26
28
  from openstackclient.identity import common as identity_common
27
29
  from openstackclient.network import common
@@ -29,7 +31,9 @@ from openstackclient.network import common
29
31
  LOG = logging.getLogger(__name__)
30
32
 
31
33
 
32
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
34
+ def _get_columns(
35
+ item: _metering_label_rule.MeteringLabelRule,
36
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
33
37
  hidden_columns = ['location', 'tenant_id']
34
38
  return utils.get_osc_show_columns_for_sdk_resource(
35
39
  item, {}, hidden_columns
@@ -189,6 +193,11 @@ class DeleteMeterRule(command.Command):
189
193
  class ListMeterRule(command.Lister):
190
194
  _description = _("List meter rules")
191
195
 
196
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
197
+ parser = super().get_parser(prog_name)
198
+ pagination.add_marker_pagination_option_to_parser(parser)
199
+ return parser
200
+
192
201
  def take_action(
193
202
  self, parsed_args: argparse.Namespace
194
203
  ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
@@ -210,7 +219,16 @@ class ListMeterRule(command.Lister):
210
219
  'Source IP Prefix',
211
220
  'Destination IP Prefix',
212
221
  )
213
- data = client.metering_label_rules()
222
+
223
+ filters = {}
224
+ if parsed_args.marker is not None:
225
+ filters['marker'] = parsed_args.marker
226
+ if parsed_args.limit is not None:
227
+ filters['limit'] = parsed_args.limit
228
+ if parsed_args.max_items is not None:
229
+ filters['max_items'] = parsed_args.max_items
230
+
231
+ data = client.metering_label_rules(**filters)
214
232
  return (
215
233
  column_headers,
216
234
  (
@@ -19,10 +19,12 @@ import logging
19
19
  from typing import Any
20
20
 
21
21
  from cliff import columns as cliff_columns
22
+ from openstack.network.v2 import qos_policy as _qos_policy
22
23
  from osc_lib import exceptions
23
24
  from osc_lib import utils
24
25
 
25
26
  from openstackclient import command
27
+ from openstackclient.common import pagination
26
28
  from openstackclient.i18n import _
27
29
  from openstackclient.identity import common as identity_common
28
30
  from openstackclient.network import common
@@ -40,7 +42,9 @@ _formatters = {
40
42
  }
41
43
 
42
44
 
43
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
45
+ def _get_columns(
46
+ item: _qos_policy.QoSPolicy,
47
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
44
48
  column_map = {
45
49
  'is_shared': 'shared',
46
50
  }
@@ -82,8 +86,6 @@ def _get_attrs(
82
86
  return attrs
83
87
 
84
88
 
85
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
86
- # OSC minimum requirements include SDK 1.0.
87
89
  class CreateNetworkQosPolicy(
88
90
  command.ShowOne, common.NeutronCommandWithExtraArgs
89
91
  ):
@@ -186,8 +188,6 @@ class DeleteNetworkQosPolicy(command.Command):
186
188
  raise exceptions.CommandError(msg)
187
189
 
188
190
 
189
- # TODO(abhiraut): Use only the SDK resource mapped attribute names once the
190
- # OSC minimum requirements include SDK 1.0.
191
191
  class ListNetworkQosPolicy(command.Lister):
192
192
  _description = _("List QoS policies")
193
193
 
@@ -213,6 +213,7 @@ class ListNetworkQosPolicy(command.Lister):
213
213
  action='store_true',
214
214
  help=_("List only QoS policies not shared between projects"),
215
215
  )
216
+ pagination.add_marker_pagination_option_to_parser(parser)
216
217
  return parser
217
218
 
218
219
  def take_action(
@@ -233,7 +234,16 @@ class ListNetworkQosPolicy(command.Lister):
233
234
  'Default',
234
235
  'Project',
235
236
  )
237
+
236
238
  attrs = _get_attrs(self.app.client_manager, parsed_args)
239
+
240
+ if parsed_args.marker is not None:
241
+ attrs['marker'] = parsed_args.marker
242
+ if parsed_args.limit is not None:
243
+ attrs['limit'] = parsed_args.limit
244
+ if parsed_args.max_items is not None:
245
+ attrs['max_items'] = parsed_args.max_items
246
+
237
247
  data = client.qos_policies(**attrs)
238
248
  return (
239
249
  column_headers,
@@ -248,8 +258,6 @@ class ListNetworkQosPolicy(command.Lister):
248
258
  )
249
259
 
250
260
 
251
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
252
- # OSC minimum requirements include SDK 1.0.
253
261
  class SetNetworkQosPolicy(common.NeutronCommandWithExtraArgs):
254
262
  _description = _("Set QoS policy properties")
255
263
 
@@ -18,6 +18,13 @@ from collections.abc import Iterable, Sequence
18
18
  import itertools
19
19
  from typing import Any, cast
20
20
 
21
+ from openstack.network.v2 import (
22
+ qos_bandwidth_limit_rule as _qos_bandwidth_limit_rule,
23
+ qos_dscp_marking_rule as _qos_dscp_marking_rule,
24
+ qos_minimum_bandwidth_rule as _qos_minimum_bandwidth_rule,
25
+ qos_minimum_packet_rate_rule as _qos_minimum_packet_rate_rule,
26
+ qos_packet_rate_limit_rule as _qos_packet_rate_limit_rule,
27
+ )
21
28
  from osc_lib import exceptions
22
29
  from osc_lib import utils
23
30
 
@@ -75,7 +82,15 @@ ACTION_SET = 'update'
75
82
  ACTION_SHOW = 'get'
76
83
 
77
84
 
78
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
85
+ def _get_columns(
86
+ item: (
87
+ _qos_bandwidth_limit_rule.QoSBandwidthLimitRule
88
+ | _qos_dscp_marking_rule.QoSDSCPMarkingRule
89
+ | _qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule
90
+ | _qos_minimum_packet_rate_rule.QoSMinimumPacketRateRule
91
+ | _qos_packet_rate_limit_rule.QoSPacketRateLimitRule
92
+ ),
93
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
79
94
  hidden_columns = ['location', 'name', 'tenant_id']
80
95
  return utils.get_osc_show_columns_for_sdk_resource(
81
96
  item, {}, hidden_columns
@@ -17,13 +17,17 @@ import argparse
17
17
  from collections.abc import Iterable, Sequence
18
18
  from typing import Any
19
19
 
20
+ from openstack.network.v2 import qos_rule_type as _qos_rule_type
20
21
  from osc_lib import utils
21
22
 
22
23
  from openstackclient import command
24
+ from openstackclient.common import pagination
23
25
  from openstackclient.i18n import _
24
26
 
25
27
 
26
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
28
+ def _get_columns(
29
+ item: _qos_rule_type.QoSRuleType,
30
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
27
31
  column_map = {
28
32
  "type": "rule_type_name",
29
33
  "drivers": "drivers",
@@ -56,6 +60,7 @@ class ListNetworkQosRuleType(command.Lister):
56
60
  "List all QoS rule types implemented in Neutron QoS driver"
57
61
  ),
58
62
  )
63
+ pagination.add_marker_pagination_option_to_parser(parser)
59
64
  return parser
60
65
 
61
66
  def take_action(
@@ -65,12 +70,18 @@ class ListNetworkQosRuleType(command.Lister):
65
70
  columns = ('type',)
66
71
  column_headers = ('Type',)
67
72
 
68
- args = {}
73
+ filters = {}
74
+ if parsed_args.marker is not None:
75
+ filters['marker'] = parsed_args.marker
76
+ if parsed_args.limit is not None:
77
+ filters['limit'] = parsed_args.limit
78
+ if parsed_args.max_items is not None:
79
+ filters['max_items'] = parsed_args.max_items
69
80
  if parsed_args.all_supported:
70
- args['all_supported'] = True
81
+ filters['all_supported'] = True
71
82
  elif parsed_args.all_rules:
72
- args['all_rules'] = True
73
- data = client.qos_rule_types(**args)
83
+ filters['all_rules'] = True
84
+ data = client.qos_rule_types(**filters)
74
85
 
75
86
  return (
76
87
  column_headers,
@@ -18,10 +18,12 @@ from collections.abc import Iterable, Sequence
18
18
  import logging
19
19
  from typing import Any
20
20
 
21
+ from openstack.network.v2 import rbac_policy as _rbac_policy
21
22
  from osc_lib import exceptions
22
23
  from osc_lib import utils
23
24
 
24
25
  from openstackclient import command
26
+ from openstackclient.common import pagination
25
27
  from openstackclient.i18n import _
26
28
  from openstackclient.identity import common as identity_common
27
29
  from openstackclient.network import common
@@ -29,7 +31,9 @@ from openstackclient.network import common
29
31
  LOG = logging.getLogger(__name__)
30
32
 
31
33
 
32
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
34
+ def _get_columns(
35
+ item: _rbac_policy.RBACPolicy,
36
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
33
37
  column_map = {
34
38
  'target_tenant': 'target_project_id',
35
39
  }
@@ -95,8 +99,6 @@ def _get_attrs(
95
99
  return attrs
96
100
 
97
101
 
98
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
99
- # OSC minimum requirements include SDK 1.0.
100
102
  class CreateNetworkRBAC(command.ShowOne, common.NeutronCommandWithExtraArgs):
101
103
  _description = _("Create network RBAC policy")
102
104
 
@@ -270,6 +272,7 @@ class ListNetworkRBAC(command.Lister):
270
272
  default=False,
271
273
  help=_("List additional fields in output"),
272
274
  )
275
+ pagination.add_marker_pagination_option_to_parser(parser)
273
276
  return parser
274
277
 
275
278
  def take_action(
@@ -306,6 +309,12 @@ class ListNetworkRBAC(command.Lister):
306
309
  parsed_args.target_project,
307
310
  ).id
308
311
  query['target_project_id'] = project_id
312
+ if parsed_args.marker is not None:
313
+ query['marker'] = parsed_args.marker
314
+ if parsed_args.limit is not None:
315
+ query['limit'] = parsed_args.limit
316
+ if parsed_args.max_items is not None:
317
+ query['max_items'] = parsed_args.max_items
309
318
 
310
319
  data = client.rbac_policies(**query)
311
320
 
@@ -321,8 +330,6 @@ class ListNetworkRBAC(command.Lister):
321
330
  )
322
331
 
323
332
 
324
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
325
- # OSC minimum requirements include SDK 1.0.
326
333
  class SetNetworkRBAC(common.NeutronCommandWithExtraArgs):
327
334
  _description = _("Set network RBAC policy properties")
328
335
 
@@ -18,17 +18,21 @@ from collections.abc import Iterable, Sequence
18
18
  import logging
19
19
  from typing import Any
20
20
 
21
+ from openstack.network.v2 import segment as _segment
21
22
  from osc_lib import exceptions
22
23
  from osc_lib import utils
23
24
 
24
25
  from openstackclient import command
26
+ from openstackclient.common import pagination
25
27
  from openstackclient.i18n import _
26
28
  from openstackclient.network import common
27
29
 
28
30
  LOG = logging.getLogger(__name__)
29
31
 
30
32
 
31
- def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
33
+ def _get_columns(
34
+ item: _segment.Segment,
35
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
32
36
  hidden_columns = ['location', 'tenant_id']
33
37
  return utils.get_osc_show_columns_for_sdk_resource(
34
38
  item, {}, hidden_columns
@@ -169,6 +173,7 @@ class ListNetworkSegment(command.Lister):
169
173
  'network (name or ID)'
170
174
  ),
171
175
  )
176
+ pagination.add_marker_pagination_option_to_parser(parser)
172
177
  return parser
173
178
 
174
179
  def take_action(
@@ -182,6 +187,13 @@ class ListNetworkSegment(command.Lister):
182
187
  parsed_args.network, ignore_missing=False
183
188
  )
184
189
  filters = {'network_id': _network.id}
190
+ if parsed_args.marker is not None:
191
+ filters['marker'] = parsed_args.marker
192
+ if parsed_args.limit is not None:
193
+ filters['limit'] = parsed_args.limit
194
+ if parsed_args.max_items is not None:
195
+ filters['max_items'] = parsed_args.max_items
196
+
185
197
  data = network_client.segments(**filters)
186
198
 
187
199
  headers: tuple[str, ...] = (