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
@@ -70,6 +70,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
70
70
  'provider:network_type',
71
71
  'provider:physical_network',
72
72
  'provider:segmentation_id',
73
+ 'pvlan',
73
74
  'qos_policy_id',
74
75
  'router:external',
75
76
  'shared',
@@ -99,6 +100,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
99
100
  _network.provider_network_type,
100
101
  _network.provider_physical_network,
101
102
  _network.provider_segmentation_id,
103
+ _network.pvlan,
102
104
  _network.qos_policy_id,
103
105
  network.RouterExternalColumn(_network.is_router_external),
104
106
  _network.is_shared,
@@ -189,6 +191,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
189
191
  self.qos_policy.id,
190
192
  "--transparent-vlan",
191
193
  "--no-qinq-vlan",
194
+ "--no-pvlan",
192
195
  "--enable-port-security",
193
196
  "--dns-domain",
194
197
  "example.org.",
@@ -210,6 +213,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
210
213
  ('qos_policy', self.qos_policy.id),
211
214
  ('transparent_vlan', True),
212
215
  ('qinq_vlan', False),
216
+ ('pvlan', False),
213
217
  ('enable_port_security', True),
214
218
  ('name', self._network.name),
215
219
  ('dns_domain', 'example.org.'),
@@ -235,6 +239,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
235
239
  'qos_policy_id': self.qos_policy.id,
236
240
  'vlan_transparent': True,
237
241
  'vlan_qinq': False,
242
+ 'pvlan': False,
238
243
  'port_security_enabled': True,
239
244
  'dns_domain': 'example.org.',
240
245
  }
@@ -326,6 +331,19 @@ class TestCreateNetworkIdentityV3(TestNetwork):
326
331
  exceptions.CommandError, self.cmd.take_action, parsed_args
327
332
  )
328
333
 
334
+ def test_create_with_pvlan_and_port_security_disabled(self):
335
+ arglist = [
336
+ "--disable-port-security",
337
+ "--pvlan",
338
+ self._network.name,
339
+ ]
340
+ verifylist = [('disable_port_security', True), ('pvlan', True)]
341
+
342
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
343
+ self.assertRaises(
344
+ exceptions.CommandError, self.cmd.take_action, parsed_args
345
+ )
346
+
329
347
  def test_create_with_provider_segment_without_provider_type(self):
330
348
  arglist = [
331
349
  "--provider-segment",
@@ -371,6 +389,7 @@ class TestCreateNetworkIdentityV2(
371
389
  'name',
372
390
  'port_security_enabled',
373
391
  'project_id',
392
+ 'pvlan',
374
393
  'provider:network_type',
375
394
  'provider:physical_network',
376
395
  'provider:segmentation_id',
@@ -400,6 +419,7 @@ class TestCreateNetworkIdentityV2(
400
419
  _network.name,
401
420
  _network.is_port_security_enabled,
402
421
  _network.project_id,
422
+ _network.pvlan,
403
423
  _network.provider_network_type,
404
424
  _network.provider_physical_network,
405
425
  _network.provider_segmentation_id,
@@ -576,7 +596,7 @@ class TestDeleteNetwork(TestNetwork):
576
596
 
577
597
  class TestListNetwork(TestNetwork):
578
598
  # The networks going to be listed up.
579
- _network = network_fakes.create_networks(count=3)
599
+ _networks = network_fakes.create_networks(count=3)
580
600
 
581
601
  columns = (
582
602
  'ID',
@@ -598,7 +618,7 @@ class TestListNetwork(TestNetwork):
598
618
  )
599
619
 
600
620
  data = []
601
- for net in _network:
621
+ for net in _networks:
602
622
  data.append(
603
623
  (
604
624
  net.id,
@@ -608,7 +628,7 @@ class TestListNetwork(TestNetwork):
608
628
  )
609
629
 
610
630
  data_long = []
611
- for net in _network:
631
+ for net in _networks:
612
632
  data_long.append(
613
633
  (
614
634
  net.id,
@@ -631,13 +651,13 @@ class TestListNetwork(TestNetwork):
631
651
  # Get the command object to test
632
652
  self.cmd = network.ListNetwork(self.app, None)
633
653
 
634
- self.network_client.networks.return_value = self._network
654
+ self.network_client.networks.return_value = self._networks
635
655
 
636
656
  self._agent = network_fakes.create_one_network_agent()
637
657
  self.network_client.get_agent.return_value = self._agent
638
658
 
639
659
  self.network_client.dhcp_agent_hosting_networks.return_value = (
640
- self._network
660
+ self._networks
641
661
  )
642
662
 
643
663
  # TestListTagMixin
@@ -660,7 +680,31 @@ class TestListNetwork(TestNetwork):
660
680
  self.assertEqual(self.columns, columns)
661
681
  self.assertCountEqual(self.data, list(data))
662
682
 
663
- def test_list_external(self):
683
+ def test_network_list_pagination(self):
684
+ arglist = [
685
+ '--marker',
686
+ self._networks[0].id,
687
+ '--limit',
688
+ '1',
689
+ ]
690
+ verifylist = [
691
+ ('marker', self._networks[0].id),
692
+ ('limit', 1),
693
+ ]
694
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
695
+
696
+ columns, data = self.cmd.take_action(parsed_args)
697
+
698
+ self.network_client.networks.assert_called_once_with(
699
+ **{
700
+ 'marker': self._networks[0].id,
701
+ 'limit': 1,
702
+ }
703
+ )
704
+ self.assertEqual(self.columns, columns)
705
+ self.assertEqual(self.data, list(data))
706
+
707
+ def test_network_list_external(self):
664
708
  arglist = [
665
709
  '--external',
666
710
  ]
@@ -681,7 +725,7 @@ class TestListNetwork(TestNetwork):
681
725
  self.assertEqual(self.columns, columns)
682
726
  self.assertCountEqual(self.data, list(data))
683
727
 
684
- def test_list_internal(self):
728
+ def test_network_list_internal(self):
685
729
  arglist = [
686
730
  '--internal',
687
731
  ]
@@ -717,7 +761,7 @@ class TestListNetwork(TestNetwork):
717
761
  self.assertEqual(self.columns_long, columns)
718
762
  self.assertCountEqual(self.data_long, list(data))
719
763
 
720
- def test_list_name(self):
764
+ def test_network_list_name(self):
721
765
  test_name = "fakename"
722
766
  arglist = [
723
767
  '--name',
@@ -865,7 +909,7 @@ class TestListNetwork(TestNetwork):
865
909
  self.assertCountEqual(self.data, list(data))
866
910
 
867
911
  def test_network_list_provider_network_type(self):
868
- network_type = self._network[0].provider_network_type
912
+ network_type = self._networks[0].provider_network_type
869
913
  arglist = [
870
914
  '--provider-network-type',
871
915
  network_type,
@@ -886,7 +930,7 @@ class TestListNetwork(TestNetwork):
886
930
  self.assertCountEqual(self.data, list(data))
887
931
 
888
932
  def test_network_list_provider_physical_network(self):
889
- physical_network = self._network[0].provider_physical_network
933
+ physical_network = self._networks[0].provider_physical_network
890
934
  arglist = [
891
935
  '--provider-physical-network',
892
936
  physical_network,
@@ -907,7 +951,7 @@ class TestListNetwork(TestNetwork):
907
951
  self.assertCountEqual(self.data, list(data))
908
952
 
909
953
  def test_network_list_provider_segment(self):
910
- segmentation_id = self._network[0].provider_segmentation_id
954
+ segmentation_id = self._networks[0].provider_segmentation_id
911
955
  arglist = [
912
956
  '--provider-segment',
913
957
  segmentation_id,
@@ -996,6 +1040,23 @@ class TestSetNetwork(TestNetwork):
996
1040
  # Get the command object to test
997
1041
  self.cmd = network.SetNetwork(self.app, None)
998
1042
 
1043
+ def test_set_with_pvlan_and_port_security_disabled(self):
1044
+ arglist = [
1045
+ self._network.name,
1046
+ '--disable-port-security',
1047
+ '--pvlan',
1048
+ ]
1049
+ verifylist = [
1050
+ ('network', self._network.name),
1051
+ ('disable_port_security', True),
1052
+ ('pvlan', True),
1053
+ ]
1054
+
1055
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1056
+ self.assertRaises(
1057
+ exceptions.CommandError, self.cmd.take_action, parsed_args
1058
+ )
1059
+
999
1060
  def test_set_this(self):
1000
1061
  arglist = [
1001
1062
  self._network.name,
@@ -1189,6 +1250,7 @@ class TestShowNetwork(TestNetwork):
1189
1250
  'provider:network_type',
1190
1251
  'provider:physical_network',
1191
1252
  'provider:segmentation_id',
1253
+ 'pvlan',
1192
1254
  'qos_policy_id',
1193
1255
  'router:external',
1194
1256
  'shared',
@@ -1218,6 +1280,7 @@ class TestShowNetwork(TestNetwork):
1218
1280
  _network.provider_network_type,
1219
1281
  _network.provider_physical_network,
1220
1282
  _network.provider_segmentation_id,
1283
+ _network.pvlan,
1221
1284
  _network.qos_policy_id,
1222
1285
  network.RouterExternalColumn(_network.is_router_external),
1223
1286
  _network.is_shared,
@@ -1265,7 +1328,6 @@ class TestShowNetwork(TestNetwork):
1265
1328
  self.network_client.find_network.assert_called_once_with(
1266
1329
  self._network.name, ignore_missing=False
1267
1330
  )
1268
-
1269
1331
  self.assertEqual(set(self.columns), set(columns))
1270
1332
  self.assertCountEqual(self.data, data)
1271
1333
 
@@ -109,7 +109,32 @@ class TestAddRouterAgent(TestNetworkAgent):
109
109
  result = self.cmd.take_action(parsed_args)
110
110
 
111
111
  self.network_client.add_router_to_agent.assert_called_with(
112
- self._agent, self._router
112
+ self._agent, self._router, ha_chassis_priority=None
113
+ )
114
+ self.assertIsNone(result)
115
+
116
+ def test_add_router_with_ha_chassis_priority(self):
117
+ arglist = [
118
+ self._agent.id,
119
+ self._router.id,
120
+ '--l3',
121
+ '--ha-chassis-priority',
122
+ '100',
123
+ ]
124
+ verifylist = [
125
+ ('l3', True),
126
+ ('agent_id', self._agent.id),
127
+ ('router', self._router.id),
128
+ ('ha_chassis_priority', 100),
129
+ ]
130
+
131
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
132
+ result = self.cmd.take_action(parsed_args)
133
+
134
+ self.network_client.add_router_to_agent.assert_called_with(
135
+ self._agent,
136
+ self._router,
137
+ ha_chassis_priority=100,
113
138
  )
114
139
  self.assertIsNone(result)
115
140
 
@@ -249,6 +274,30 @@ class TestListNetworkAgent(TestNetworkAgent):
249
274
  self.assertEqual(self.columns, columns)
250
275
  self.assertCountEqual(self.data, list(data))
251
276
 
277
+ def test_network_agents_list_pagination(self):
278
+ arglist = [
279
+ '--marker',
280
+ self.network_agents[0].id,
281
+ '--limit',
282
+ '1',
283
+ ]
284
+ verifylist = [
285
+ ('marker', self.network_agents[0].id),
286
+ ('limit', 1),
287
+ ]
288
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
289
+
290
+ columns, data = self.cmd.take_action(parsed_args)
291
+
292
+ self.network_client.agents.assert_called_once_with(
293
+ **{
294
+ 'marker': self.network_agents[0].id,
295
+ 'limit': 1,
296
+ }
297
+ )
298
+ self.assertEqual(self.columns, columns)
299
+ self.assertEqual(self.data, list(data))
300
+
252
301
  def test_network_agents_list_agent_type(self):
253
302
  arglist = [
254
303
  '--agent-type',
@@ -335,6 +335,30 @@ class TestListNetworkFlavor(TestNetworkFlavor):
335
335
  self.assertEqual(set(self.columns), set(columns))
336
336
  self.assertEqual(self.data, list(data))
337
337
 
338
+ def test_network_flavor_list_pagination(self):
339
+ arglist = [
340
+ '--marker',
341
+ self._network_flavors[0].id,
342
+ '--limit',
343
+ '1',
344
+ ]
345
+ verifylist = [
346
+ ('marker', self._network_flavors[0].id),
347
+ ('limit', 1),
348
+ ]
349
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
350
+
351
+ columns, data = self.cmd.take_action(parsed_args)
352
+
353
+ self.network_client.flavors.assert_called_once_with(
354
+ **{
355
+ 'marker': self._network_flavors[0].id,
356
+ 'limit': 1,
357
+ }
358
+ )
359
+ self.assertEqual(self.columns, columns)
360
+ self.assertEqual(self.data, list(data))
361
+
338
362
 
339
363
  class TestRemoveNetworkFlavorFromProfile(TestNetworkFlavor):
340
364
  network_flavor = network_fakes.create_one_network_flavor()
@@ -332,6 +332,30 @@ class TestListFlavorProfile(TestFlavorProfile):
332
332
  self.assertEqual(self.columns, columns)
333
333
  self.assertEqual(self.data, list(data))
334
334
 
335
+ def test_network_flavor_profile_list_pagination(self):
336
+ arglist = [
337
+ '--marker',
338
+ self._network_flavor_profiles[0].id,
339
+ '--limit',
340
+ '1',
341
+ ]
342
+ verifylist = [
343
+ ('marker', self._network_flavor_profiles[0].id),
344
+ ('limit', 1),
345
+ ]
346
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
347
+
348
+ columns, data = self.cmd.take_action(parsed_args)
349
+
350
+ self.network_client.service_profiles.assert_called_once_with(
351
+ **{
352
+ 'marker': self._network_flavor_profiles[0].id,
353
+ 'limit': 1,
354
+ }
355
+ )
356
+ self.assertEqual(self.columns, columns)
357
+ self.assertEqual(self.data, list(data))
358
+
335
359
 
336
360
  class TestShowFlavorProfile(TestFlavorProfile):
337
361
  # The network flavor profile to show.
@@ -250,6 +250,30 @@ class TestListMeter(TestMeter):
250
250
  self.assertEqual(self.columns, columns)
251
251
  self.assertEqual(self.data, list(data))
252
252
 
253
+ def test_meter_list_pagination(self):
254
+ arglist = [
255
+ '--marker',
256
+ self.meter_list[0].id,
257
+ '--limit',
258
+ '1',
259
+ ]
260
+ verifylist = [
261
+ ('marker', self.meter_list[0].id),
262
+ ('limit', 1),
263
+ ]
264
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
265
+
266
+ columns, data = self.cmd.take_action(parsed_args)
267
+
268
+ self.network_client.metering_labels.assert_called_once_with(
269
+ **{
270
+ 'marker': self.meter_list[0].id,
271
+ 'limit': 1,
272
+ }
273
+ )
274
+ self.assertEqual(self.columns, columns)
275
+ self.assertEqual(self.data, list(data))
276
+
253
277
 
254
278
  class TestShowMeter(TestMeter):
255
279
  new_meter = network_fakes.FakeNetworkMeter.create_one_meter()
@@ -280,6 +280,30 @@ class TestListNetworkQosPolicy(TestQosPolicy):
280
280
  self.assertEqual(self.columns, columns)
281
281
  self.assertEqual(self.data, list(data))
282
282
 
283
+ def test_qos_policy_list_pagination(self):
284
+ arglist = [
285
+ '--marker',
286
+ self.qos_policies[0].id,
287
+ '--limit',
288
+ '1',
289
+ ]
290
+ verifylist = [
291
+ ('marker', self.qos_policies[0].id),
292
+ ('limit', 1),
293
+ ]
294
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
295
+
296
+ columns, data = self.cmd.take_action(parsed_args)
297
+
298
+ self.network_client.qos_policies.assert_called_once_with(
299
+ **{
300
+ 'marker': self.qos_policies[0].id,
301
+ 'limit': 1,
302
+ }
303
+ )
304
+ self.assertEqual(self.columns, columns)
305
+ self.assertEqual(self.data, list(data))
306
+
283
307
  def test_qos_policy_list_share(self):
284
308
  arglist = [
285
309
  '--share',
@@ -126,3 +126,27 @@ class TestListNetworkQosRuleType(TestNetworkQosRuleType):
126
126
  )
127
127
  self.assertEqual(self.columns, columns)
128
128
  self.assertEqual(self.data, list(data))
129
+
130
+ def test_qos_rule_type_list_pagination(self):
131
+ arglist = [
132
+ '--marker',
133
+ self.qos_rule_types[0].type,
134
+ '--limit',
135
+ '1',
136
+ ]
137
+ verifylist = [
138
+ ('marker', self.qos_rule_types[0].type),
139
+ ('limit', 1),
140
+ ]
141
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
142
+
143
+ columns, data = self.cmd.take_action(parsed_args)
144
+
145
+ self.network_client.qos_rule_types.assert_called_once_with(
146
+ **{
147
+ 'marker': self.qos_rule_types[0].type,
148
+ 'limit': 1,
149
+ }
150
+ )
151
+ self.assertEqual(self.columns, columns)
152
+ self.assertEqual(self.data, list(data))
@@ -469,6 +469,30 @@ class TestListNetworkRABC(TestNetworkRBAC):
469
469
  self.assertEqual(self.columns, columns)
470
470
  self.assertEqual(self.data, list(data))
471
471
 
472
+ def test_network_rbac_list_pagination(self):
473
+ arglist = [
474
+ '--marker',
475
+ self.rbac_policies[0].id,
476
+ '--limit',
477
+ '1',
478
+ ]
479
+ verifylist = [
480
+ ('marker', self.rbac_policies[0].id),
481
+ ('limit', 1),
482
+ ]
483
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
484
+
485
+ columns, data = self.cmd.take_action(parsed_args)
486
+
487
+ self.network_client.rbac_policies.assert_called_once_with(
488
+ **{
489
+ 'marker': self.rbac_policies[0].id,
490
+ 'limit': 1,
491
+ }
492
+ )
493
+ self.assertEqual(self.columns, columns)
494
+ self.assertEqual(self.data, list(data))
495
+
472
496
  def test_network_rbac_list_type_opt(self):
473
497
  arglist = [
474
498
  '--type',
@@ -333,6 +333,30 @@ class TestListNetworkSegment(TestNetworkSegment):
333
333
  self.assertEqual(self.columns, columns)
334
334
  self.assertEqual(self.data, list(data))
335
335
 
336
+ def test_list_pagination(self):
337
+ arglist = [
338
+ '--marker',
339
+ self._network_segments[0].id,
340
+ '--limit',
341
+ '1',
342
+ ]
343
+ verifylist = [
344
+ ('marker', self._network_segments[0].id),
345
+ ('limit', 1),
346
+ ]
347
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
348
+
349
+ columns, data = self.cmd.take_action(parsed_args)
350
+
351
+ self.network_client.segments.assert_called_once_with(
352
+ **{
353
+ 'marker': self._network_segments[0].id,
354
+ 'limit': 1,
355
+ }
356
+ )
357
+ self.assertEqual(self.columns, columns)
358
+ self.assertEqual(self.data, list(data))
359
+
336
360
 
337
361
  class TestSetNetworkSegment(TestNetworkSegment):
338
362
  # The network segment to show.
@@ -515,6 +515,30 @@ class TestListNetworkSegmentRange(TestNetworkSegmentRange):
515
515
  self.assertEqual(self.columns, columns)
516
516
  self.assertEqual(self.data, list(data))
517
517
 
518
+ def test_list_pagination(self):
519
+ arglist = [
520
+ '--marker',
521
+ self._network_segment_ranges[0].id,
522
+ '--limit',
523
+ '1',
524
+ ]
525
+ verifylist = [
526
+ ('marker', self._network_segment_ranges[0].id),
527
+ ('limit', 1),
528
+ ]
529
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
530
+
531
+ columns, data = self.cmd.take_action(parsed_args)
532
+
533
+ self.network_client.network_segment_ranges.assert_called_once_with(
534
+ **{
535
+ 'marker': self._network_segment_ranges[0].id,
536
+ 'limit': 1,
537
+ }
538
+ )
539
+ self.assertEqual(self.columns, columns)
540
+ self.assertEqual(self.data, list(data))
541
+
518
542
  def test_list_long(self):
519
543
  arglist = [
520
544
  '--long',