python-openstackclient 8.3.0__py3-none-any.whl → 10.0.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 (292) hide show
  1. openstackclient/__init__.py +2 -6
  2. openstackclient/api/api.py +41 -23
  3. openstackclient/api/compute_v2.py +44 -25
  4. openstackclient/api/object_store_v1.py +75 -97
  5. openstackclient/api/volume_v2.py +2 -1
  6. openstackclient/api/volume_v3.py +2 -1
  7. openstackclient/common/availability_zone.py +58 -42
  8. openstackclient/common/clientmanager.py +56 -29
  9. openstackclient/common/configuration.py +10 -3
  10. openstackclient/common/envvars.py +2 -2
  11. openstackclient/common/extension.py +14 -5
  12. openstackclient/common/limits.py +10 -5
  13. openstackclient/common/module.py +14 -6
  14. openstackclient/common/pagination.py +8 -2
  15. openstackclient/common/progressbar.py +7 -6
  16. openstackclient/common/project_cleanup.py +13 -7
  17. openstackclient/common/quota.py +126 -114
  18. openstackclient/common/versions.py +8 -2
  19. openstackclient/compute/client.py +7 -3
  20. openstackclient/compute/v2/agent.py +17 -10
  21. openstackclient/compute/v2/aggregate.py +36 -22
  22. openstackclient/compute/v2/console.py +14 -8
  23. openstackclient/compute/v2/console_connection.py +11 -3
  24. openstackclient/compute/v2/flavor.py +39 -21
  25. openstackclient/compute/v2/host.py +14 -6
  26. openstackclient/compute/v2/hypervisor.py +14 -5
  27. openstackclient/compute/v2/hypervisor_stats.py +10 -2
  28. openstackclient/compute/v2/keypair.py +29 -14
  29. openstackclient/compute/v2/server.py +251 -171
  30. openstackclient/compute/v2/server_backup.py +10 -4
  31. openstackclient/compute/v2/server_event.py +21 -12
  32. openstackclient/compute/v2/server_group.py +21 -11
  33. openstackclient/compute/v2/server_image.py +19 -10
  34. openstackclient/compute/v2/server_migration.py +24 -10
  35. openstackclient/compute/v2/server_share.py +274 -0
  36. openstackclient/compute/v2/server_volume.py +10 -4
  37. openstackclient/compute/v2/service.py +14 -7
  38. openstackclient/compute/v2/usage.py +26 -21
  39. openstackclient/identity/client.py +8 -3
  40. openstackclient/identity/common.py +103 -41
  41. openstackclient/identity/v2_0/catalog.py +14 -7
  42. openstackclient/identity/v2_0/ec2creds.py +21 -10
  43. openstackclient/identity/v2_0/endpoint.py +23 -11
  44. openstackclient/identity/v2_0/project.py +25 -14
  45. openstackclient/identity/v2_0/role.py +28 -14
  46. openstackclient/identity/v2_0/role_assignment.py +9 -3
  47. openstackclient/identity/v2_0/service.py +26 -12
  48. openstackclient/identity/v2_0/token.py +12 -5
  49. openstackclient/identity/v2_0/user.py +26 -15
  50. openstackclient/identity/v3/access_rule.py +26 -12
  51. openstackclient/identity/v3/application_credential.py +59 -24
  52. openstackclient/identity/v3/catalog.py +14 -7
  53. openstackclient/identity/v3/consumer.py +22 -11
  54. openstackclient/identity/v3/credential.py +36 -16
  55. openstackclient/identity/v3/domain.py +37 -18
  56. openstackclient/identity/v3/ec2creds.py +25 -12
  57. openstackclient/identity/v3/endpoint.py +42 -20
  58. openstackclient/identity/v3/endpoint_group.py +28 -17
  59. openstackclient/identity/v3/federation_protocol.py +71 -50
  60. openstackclient/identity/v3/group.py +55 -32
  61. openstackclient/identity/v3/identity_provider.py +92 -57
  62. openstackclient/identity/v3/implied_role.py +21 -9
  63. openstackclient/identity/v3/limit.py +115 -92
  64. openstackclient/identity/v3/mapping.py +26 -13
  65. openstackclient/identity/v3/policy.py +23 -12
  66. openstackclient/identity/v3/project.py +211 -122
  67. openstackclient/identity/v3/region.py +36 -16
  68. openstackclient/identity/v3/registered_limit.py +116 -109
  69. openstackclient/identity/v3/role.py +61 -31
  70. openstackclient/identity/v3/role_assignment.py +23 -6
  71. openstackclient/identity/v3/service.py +36 -16
  72. openstackclient/identity/v3/service_provider.py +37 -15
  73. openstackclient/identity/v3/tag.py +23 -17
  74. openstackclient/identity/v3/token.py +30 -14
  75. openstackclient/identity/v3/trust.py +32 -14
  76. openstackclient/identity/v3/unscoped_saml.py +10 -2
  77. openstackclient/identity/v3/user.py +49 -26
  78. openstackclient/image/client.py +7 -3
  79. openstackclient/image/v1/image.py +33 -26
  80. openstackclient/image/v2/cache.py +14 -9
  81. openstackclient/image/v2/image.py +76 -49
  82. openstackclient/image/v2/info.py +7 -1
  83. openstackclient/image/v2/metadef_namespaces.py +109 -13
  84. openstackclient/image/v2/metadef_objects.py +28 -15
  85. openstackclient/image/v2/metadef_properties.py +24 -13
  86. openstackclient/image/v2/metadef_resource_type_association.py +14 -7
  87. openstackclient/image/v2/metadef_resource_types.py +7 -1
  88. openstackclient/image/v2/task.py +15 -6
  89. openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
  90. openstackclient/network/client.py +7 -2
  91. openstackclient/network/common.py +16 -241
  92. openstackclient/network/utils.py +36 -22
  93. openstackclient/network/v2/address_group.py +27 -16
  94. openstackclient/network/v2/address_scope.py +24 -13
  95. openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
  96. openstackclient/network/v2/bgpvpn/constants.py +30 -0
  97. openstackclient/network/v2/bgpvpn/network_association.py +214 -0
  98. openstackclient/network/v2/bgpvpn/port_association.py +490 -0
  99. openstackclient/network/v2/bgpvpn/router_association.py +288 -0
  100. openstackclient/network/v2/default_security_group_rule.py +19 -10
  101. openstackclient/network/v2/floating_ip.py +110 -159
  102. openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
  103. openstackclient/network/v2/fwaas/__init__.py +0 -0
  104. openstackclient/network/v2/fwaas/group.py +466 -0
  105. openstackclient/network/v2/fwaas/policy.py +518 -0
  106. openstackclient/network/v2/fwaas/rule.py +574 -0
  107. openstackclient/network/v2/ip_availability.py +13 -5
  108. openstackclient/network/v2/l3_conntrack_helper.py +22 -13
  109. openstackclient/network/v2/local_ip.py +24 -13
  110. openstackclient/network/v2/local_ip_association.py +14 -7
  111. openstackclient/network/v2/ndp_proxy.py +20 -11
  112. openstackclient/network/v2/network.py +129 -196
  113. openstackclient/network/v2/network_agent.py +46 -25
  114. openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
  115. openstackclient/network/v2/network_flavor.py +27 -16
  116. openstackclient/network/v2/network_flavor_profile.py +23 -12
  117. openstackclient/network/v2/network_meter.py +21 -10
  118. openstackclient/network/v2/network_meter_rule.py +21 -11
  119. openstackclient/network/v2/network_qos_policy.py +25 -15
  120. openstackclient/network/v2/network_qos_rule.py +32 -17
  121. openstackclient/network/v2/network_qos_rule_type.py +13 -5
  122. openstackclient/network/v2/network_rbac.py +23 -12
  123. openstackclient/network/v2/network_segment.py +20 -11
  124. openstackclient/network/v2/network_segment_range.py +56 -29
  125. openstackclient/network/v2/network_service_provider.py +7 -1
  126. openstackclient/network/v2/network_trunk.py +38 -22
  127. openstackclient/network/v2/port.py +54 -29
  128. openstackclient/network/v2/router.py +75 -52
  129. openstackclient/network/v2/security_group.py +87 -157
  130. openstackclient/network/v2/security_group_rule.py +100 -280
  131. openstackclient/network/v2/subnet.py +49 -28
  132. openstackclient/network/v2/subnet_pool.py +30 -17
  133. openstackclient/network/v2/taas/tap_flow.py +22 -11
  134. openstackclient/network/v2/taas/tap_mirror.py +22 -11
  135. openstackclient/network/v2/taas/tap_service.py +23 -12
  136. openstackclient/object/client.py +7 -2
  137. openstackclient/object/v1/account.py +13 -6
  138. openstackclient/object/v1/container.py +25 -15
  139. openstackclient/object/v1/object.py +25 -15
  140. openstackclient/py.typed +0 -0
  141. openstackclient/shell.py +46 -10
  142. openstackclient/tests/functional/base.py +55 -20
  143. openstackclient/tests/functional/common/test_extension.py +4 -0
  144. openstackclient/tests/functional/common/test_quota.py +3 -1
  145. openstackclient/tests/functional/compute/v2/common.py +14 -13
  146. openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
  147. openstackclient/tests/functional/compute/v2/test_server.py +3 -0
  148. openstackclient/tests/functional/identity/v2/common.py +10 -6
  149. openstackclient/tests/functional/identity/v2/test_role.py +4 -4
  150. openstackclient/tests/functional/identity/v3/common.py +25 -19
  151. openstackclient/tests/functional/identity/v3/test_group.py +20 -20
  152. openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
  153. openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
  154. openstackclient/tests/functional/identity/v3/test_project.py +10 -10
  155. openstackclient/tests/functional/identity/v3/test_role.py +18 -18
  156. openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
  157. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  158. openstackclient/tests/functional/image/base.py +1 -6
  159. openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
  160. openstackclient/tests/functional/network/v2/common.py +5 -2
  161. openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
  162. openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
  163. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
  164. openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
  165. openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
  166. openstackclient/tests/functional/object/v1/common.py +4 -0
  167. openstackclient/tests/functional/volume/v2/common.py +4 -0
  168. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
  169. openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
  170. openstackclient/tests/functional/volume/v3/common.py +4 -0
  171. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +56 -138
  172. openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
  173. openstackclient/tests/unit/common/test_availability_zone.py +35 -49
  174. openstackclient/tests/unit/common/test_extension.py +2 -2
  175. openstackclient/tests/unit/common/test_module.py +12 -7
  176. openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
  177. openstackclient/tests/unit/common/test_quota.py +62 -23
  178. openstackclient/tests/unit/compute/v2/fakes.py +25 -0
  179. openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
  180. openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
  181. openstackclient/tests/unit/compute/v2/test_server.py +17 -104
  182. openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
  183. openstackclient/tests/unit/identity/v3/fakes.py +3 -0
  184. openstackclient/tests/unit/identity/v3/test_group.py +4 -14
  185. openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
  186. openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
  187. openstackclient/tests/unit/identity/v3/test_project.py +831 -512
  188. openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
  189. openstackclient/tests/unit/identity/v3/test_registered_limit.py +355 -220
  190. openstackclient/tests/unit/identity/v3/test_user.py +4 -4
  191. openstackclient/tests/unit/image/v2/test_image.py +16 -16
  192. openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
  193. openstackclient/tests/unit/network/test_common.py +0 -155
  194. openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
  195. openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
  196. openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
  197. openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
  198. openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
  199. openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
  200. openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
  201. openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
  202. openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
  203. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
  204. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
  205. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
  206. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
  207. openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
  208. openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
  209. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
  210. openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
  211. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
  212. openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
  213. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
  214. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
  215. openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
  216. openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
  217. openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
  218. openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
  219. openstackclient/tests/unit/network/v2/test_router.py +8 -9
  220. openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
  221. openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
  222. openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
  223. openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
  224. openstackclient/tests/unit/object/v1/fakes.py +8 -7
  225. openstackclient/tests/unit/object/v1/test_container.py +65 -101
  226. openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
  227. openstackclient/tests/unit/object/v1/test_object.py +44 -84
  228. openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
  229. openstackclient/tests/unit/test_hacking.py +108 -0
  230. openstackclient/tests/unit/volume/v2/fakes.py +1 -0
  231. openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
  232. openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
  233. openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
  234. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
  235. openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
  236. openstackclient/tests/unit/volume/v3/fakes.py +1 -0
  237. openstackclient/tests/unit/volume/v3/test_volume.py +94 -15
  238. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
  239. openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
  240. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
  241. openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
  242. openstackclient/volume/client.py +7 -3
  243. openstackclient/volume/v2/backup_record.py +15 -6
  244. openstackclient/volume/v2/consistency_group.py +37 -25
  245. openstackclient/volume/v2/consistency_group_snapshot.py +27 -12
  246. openstackclient/volume/v2/qos_specs.py +30 -19
  247. openstackclient/volume/v2/service.py +17 -6
  248. openstackclient/volume/v2/volume.py +69 -34
  249. openstackclient/volume/v2/volume_backend.py +19 -6
  250. openstackclient/volume/v2/volume_backup.py +48 -22
  251. openstackclient/volume/v2/volume_host.py +6 -4
  252. openstackclient/volume/v2/volume_snapshot.py +52 -26
  253. openstackclient/volume/v2/volume_transfer_request.py +33 -15
  254. openstackclient/volume/v2/volume_type.py +46 -27
  255. openstackclient/volume/v3/block_storage_cleanup.py +11 -3
  256. openstackclient/volume/v3/block_storage_cluster.py +19 -7
  257. openstackclient/volume/v3/block_storage_log_level.py +15 -6
  258. openstackclient/volume/v3/block_storage_manage.py +10 -4
  259. openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
  260. openstackclient/volume/v3/service.py +16 -6
  261. openstackclient/volume/v3/volume.py +103 -46
  262. openstackclient/volume/v3/volume_attachment.py +43 -21
  263. openstackclient/volume/v3/volume_backup.py +55 -26
  264. openstackclient/volume/v3/volume_group.py +23 -13
  265. openstackclient/volume/v3/volume_group_snapshot.py +32 -13
  266. openstackclient/volume/v3/volume_group_type.py +26 -13
  267. openstackclient/volume/v3/volume_message.py +15 -7
  268. openstackclient/volume/v3/volume_snapshot.py +71 -34
  269. openstackclient/volume/v3/volume_transfer_request.py +33 -15
  270. openstackclient/volume/v3/volume_type.py +45 -27
  271. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
  272. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +279 -267
  273. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
  274. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
  275. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +9 -0
  276. python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
  277. openstackclient/api/image_v1.py +0 -69
  278. openstackclient/api/image_v2.py +0 -79
  279. openstackclient/network/v2/floating_ip_pool.py +0 -38
  280. openstackclient/tests/functional/image/v1/test_image.py +0 -97
  281. openstackclient/tests/unit/api/test_image_v1.py +0 -96
  282. openstackclient/tests/unit/api/test_image_v2.py +0 -96
  283. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
  284. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
  285. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
  286. openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
  287. openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
  288. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
  289. python_openstackclient-8.3.0.dist-info/pbr.json +0 -1
  290. /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
  291. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
  292. {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
@@ -128,11 +128,6 @@ class TestCommandList(utils.TestCommand):
128
128
  self.assertEqual(datalist, tuple(data))
129
129
 
130
130
 
131
- @mock.patch.dict(
132
- 'openstackclient.common.module.sys.modules',
133
- values=MODULES,
134
- clear=True,
135
- )
136
131
  class TestModuleList(utils.TestCommand):
137
132
  def setUp(self):
138
133
  super().setUp()
@@ -150,7 +145,12 @@ class TestModuleList(utils.TestCommand):
150
145
  # In base command class Lister in cliff, abstract method take_action()
151
146
  # returns a tuple containing the column names and an iterable
152
147
  # containing the data to be listed.
153
- columns, data = self.cmd.take_action(parsed_args)
148
+ with mock.patch.dict(
149
+ 'openstackclient.common.module.sys.modules',
150
+ values=MODULES,
151
+ clear=True,
152
+ ):
153
+ columns, data = self.cmd.take_action(parsed_args)
154
154
 
155
155
  # Output xxxclient and openstacksdk, but not regular module, like: zlib
156
156
  self.assertIn(module_name_1, columns)
@@ -177,7 +177,12 @@ class TestModuleList(utils.TestCommand):
177
177
  # In base command class Lister in cliff, abstract method take_action()
178
178
  # returns a tuple containing the column names and an iterable
179
179
  # containing the data to be listed.
180
- columns, data = self.cmd.take_action(parsed_args)
180
+ with mock.patch.dict(
181
+ 'openstackclient.common.module.sys.modules',
182
+ values=MODULES,
183
+ clear=True,
184
+ ):
185
+ columns, data = self.cmd.take_action(parsed_args)
181
186
 
182
187
  # Output xxxclient, openstacksdk and regular module, like: zlib
183
188
  self.assertIn(module_name_1, columns)
@@ -17,7 +17,9 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
17
17
  from openstackclient.tests.unit import utils as test_utils
18
18
 
19
19
 
20
- class TestProjectCleanup(test_utils.TestCommand):
20
+ class TestProjectCleanup(
21
+ identity_fakes.FakeClientMixin, test_utils.TestCommand
22
+ ):
21
23
  project = identity_fakes.FakeProject.create_one_project()
22
24
 
23
25
  def setUp(self):
@@ -10,6 +10,7 @@
10
10
  # License for the specific language governing permissions and limitations
11
11
  # under the License.
12
12
 
13
+ import copy
13
14
  from unittest import mock
14
15
 
15
16
  from openstack.block_storage.v3 import quota_set as _volume_quota_set
@@ -381,8 +382,6 @@ class TestQuotaSet(TestQuota):
381
382
  self.cmd = quota.SetQuota(self.app, None)
382
383
 
383
384
  def test_quota_set(self):
384
- floating_ip_num = 100
385
- fix_ip_num = 100
386
385
  injected_file_num = 100
387
386
  injected_file_size_num = 10240
388
387
  injected_path_size_num = 255
@@ -391,16 +390,10 @@ class TestQuotaSet(TestQuota):
391
390
  ram_num = 51200
392
391
  instance_num = 10
393
392
  property_num = 128
394
- secgroup_rule_num = 20
395
- secgroup_num = 10
396
393
  servgroup_num = 10
397
394
  servgroup_members_num = 10
398
395
 
399
396
  arglist = [
400
- '--floating-ips',
401
- str(floating_ip_num),
402
- '--fixed-ips',
403
- str(fix_ip_num),
404
397
  '--injected-files',
405
398
  str(injected_file_num),
406
399
  '--injected-file-size',
@@ -417,10 +410,6 @@ class TestQuotaSet(TestQuota):
417
410
  str(instance_num),
418
411
  '--properties',
419
412
  str(property_num),
420
- '--secgroup-rules',
421
- str(secgroup_rule_num),
422
- '--secgroups',
423
- str(secgroup_num),
424
413
  '--server-groups',
425
414
  str(servgroup_num),
426
415
  '--server-group-members',
@@ -428,8 +417,6 @@ class TestQuotaSet(TestQuota):
428
417
  self.projects[0].name,
429
418
  ]
430
419
  verifylist = [
431
- ('floating_ips', floating_ip_num),
432
- ('fixed_ips', fix_ip_num),
433
420
  ('injected_files', injected_file_num),
434
421
  (
435
422
  'injected_file_content_bytes',
@@ -441,8 +428,6 @@ class TestQuotaSet(TestQuota):
441
428
  ('ram', ram_num),
442
429
  ('instances', instance_num),
443
430
  ('metadata_items', property_num),
444
- ('security_group_rules', secgroup_rule_num),
445
- ('security_groups', secgroup_num),
446
431
  ('server_groups', servgroup_num),
447
432
  ('server_group_members', servgroup_members_num),
448
433
  ('force', False),
@@ -454,18 +439,14 @@ class TestQuotaSet(TestQuota):
454
439
  result = self.cmd.take_action(parsed_args)
455
440
 
456
441
  kwargs = {
457
- 'floating_ips': floating_ip_num,
458
- 'fixed_ips': fix_ip_num,
459
442
  'injected_files': injected_file_num,
460
- 'injected_file_content_bytes': injected_file_size_num, # noqa: E501
443
+ 'injected_file_content_bytes': injected_file_size_num,
461
444
  'injected_file_path_bytes': injected_path_size_num,
462
445
  'key_pairs': key_pair_num,
463
446
  'cores': core_num,
464
447
  'ram': ram_num,
465
448
  'instances': instance_num,
466
449
  'metadata_items': property_num,
467
- 'security_group_rules': secgroup_rule_num,
468
- 'security_groups': secgroup_num,
469
450
  'server_groups': servgroup_num,
470
451
  'server_group_members': servgroup_members_num,
471
452
  }
@@ -728,7 +709,7 @@ class TestQuotaSet(TestQuota):
728
709
 
729
710
  kwargs_compute = {
730
711
  'injected_files': injected_file_num,
731
- 'injected_file_content_bytes': injected_file_size_num, # noqa: E501
712
+ 'injected_file_content_bytes': injected_file_size_num,
732
713
  'injected_file_path_bytes': injected_path_size_num,
733
714
  'key_pairs': key_pair_num,
734
715
  'cores': core_num,
@@ -826,7 +807,7 @@ class TestQuotaSet(TestQuota):
826
807
 
827
808
  kwargs_compute = {
828
809
  'injected_files': injected_file_num,
829
- 'injected_file_content_bytes': injected_file_size_num, # noqa: E501
810
+ 'injected_file_content_bytes': injected_file_size_num,
830
811
  'injected_file_path_bytes': injected_path_size_num,
831
812
  'key_pairs': key_pair_num,
832
813
  'cores': core_num,
@@ -1122,6 +1103,64 @@ class TestQuotaShow(TestQuota):
1122
1103
  )
1123
1104
  self.assertNotCalled(self.network_client.get_quota_default)
1124
1105
 
1106
+ def test_quota_show__with_network_and_usage(self):
1107
+ # ensure we do not interfere with other tests
1108
+ self._network_quota_details = copy.deepcopy(
1109
+ self._network_quota_details
1110
+ )
1111
+ # set a couple of resources
1112
+ self._network_quota_details["floating_ips"].update(
1113
+ limit=30, reserved=20, used=7
1114
+ )
1115
+ self._network_quota_details["security_group_rules"].update(
1116
+ limit=9, reserved=7, used=5
1117
+ )
1118
+
1119
+ arglist = [
1120
+ '--network',
1121
+ '--usage',
1122
+ self.projects[0].name,
1123
+ ]
1124
+ verifylist = [
1125
+ ('service', 'network'),
1126
+ ('project', self.projects[0].name),
1127
+ ]
1128
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1129
+
1130
+ headers, result_gen = self.cmd.take_action(parsed_args)
1131
+
1132
+ self.assertEqual(('Resource', 'Limit', 'In Use', 'Reserved'), headers)
1133
+
1134
+ result = sorted(result_gen)
1135
+
1136
+ self.assertEqual(
1137
+ [
1138
+ ('floating_ips', 30, 7, 20),
1139
+ ('health_monitors', 0, 0, 0),
1140
+ ('l7_policies', 0, 0, 0),
1141
+ ('listeners', 0, 0, 0),
1142
+ ('load_balancers', 0, 0, 0),
1143
+ ('networks', 0, 0, 0),
1144
+ ('pools', 0, 0, 0),
1145
+ ('ports', 0, 0, 0),
1146
+ ('rbac_policies', 0, 0, 0),
1147
+ ('routers', 0, 0, 0),
1148
+ ('security_group_rules', 9, 5, 7),
1149
+ ('security_groups', 0, 0, 0),
1150
+ ('subnet_pools', 0, 0, 0),
1151
+ ('subnets', 0, 0, 0),
1152
+ ],
1153
+ result,
1154
+ )
1155
+
1156
+ self.compute_client.get_quota_set.assert_not_called()
1157
+ self.volume_sdk_client.get_quota_set.assert_not_called()
1158
+ self.network_client.get_quota.assert_called_once_with(
1159
+ self.projects[0].id,
1160
+ details=True,
1161
+ )
1162
+ self.assertNotCalled(self.network_client.get_quota_default)
1163
+
1125
1164
  def test_quota_show__with_default(self):
1126
1165
  arglist = [
1127
1166
  '--default',
@@ -29,7 +29,9 @@ from openstack.compute.v2 import server as _server
29
29
  from openstack.compute.v2 import server_action as _server_action
30
30
  from openstack.compute.v2 import server_interface as _server_interface
31
31
  from openstack.compute.v2 import server_migration as _server_migration
32
+ from openstack.compute.v2 import server_share as _server_share
32
33
  from openstack.compute.v2 import volume_attachment as _volume_attachment
34
+ from openstack.test import fakes as sdk_fakes
33
35
 
34
36
  from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
35
37
  from openstackclient.tests.unit.image.v2 import fakes as image_fakes
@@ -788,6 +790,29 @@ def create_volume_attachments(attrs=None, count=2):
788
790
  return volume_attachments
789
791
 
790
792
 
793
+ def create_one_share(attrs=None):
794
+ """Create a fake share attachment.
795
+
796
+ :param dict attrs: A dictionary with all attributes
797
+ :return: A fake openstack.compute.v2.server_share.ShareMapping
798
+ object
799
+ """
800
+ return sdk_fakes.generate_fake_resource(
801
+ _server_share.ShareMapping, **(attrs or {})
802
+ )
803
+
804
+
805
+ def create_shares(attrs=None, count=2):
806
+ """Create multiple fake share attachments.
807
+
808
+ :param dict attrs: A dictionary with all attributes
809
+ :param int count: The number of share attachments to fake
810
+ :return: A list of fake
811
+ openstack.compute.v2.server_share.ShareMapping objects
812
+ """
813
+ return [create_one_share(attrs) for _ in range(count)]
814
+
815
+
791
816
  def create_one_server_interface(attrs=None):
792
817
  """Create a fake ServerInterface.
793
818
 
@@ -106,7 +106,6 @@ class TestFlavorCreate(TestFlavor):
106
106
  'id': None,
107
107
  'ephemeral': 0,
108
108
  'swap': 0,
109
- 'rxtx_factor': 1.0,
110
109
  'is_public': True,
111
110
  }
112
111
 
@@ -395,6 +394,32 @@ class TestFlavorCreate(TestFlavor):
395
394
  exceptions.CommandError, self.cmd.take_action, parsed_args
396
395
  )
397
396
 
397
+ def test_flavor_create_with_rxtx_factor_post_v2102(self):
398
+ self.set_compute_api_version('2.102')
399
+
400
+ arglist = [
401
+ '--id',
402
+ self.flavor.id,
403
+ '--ram',
404
+ str(self.flavor.ram),
405
+ '--vcpus',
406
+ str(self.flavor.vcpus),
407
+ '--rxtx-factor',
408
+ '1.0',
409
+ self.flavor.name,
410
+ ]
411
+ verifylist = [
412
+ ('ram', self.flavor.ram),
413
+ ('vcpus', self.flavor.vcpus),
414
+ ('rxtx_factor', 1.0),
415
+ ('name', self.flavor.name),
416
+ ]
417
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
418
+
419
+ self.assertRaises(
420
+ exceptions.CommandError, self.cmd.take_action, parsed_args
421
+ )
422
+
398
423
 
399
424
  class TestFlavorDelete(TestFlavor):
400
425
  def setUp(self):
@@ -494,7 +519,8 @@ class TestFlavorList(TestFlavor):
494
519
  'VCPUs',
495
520
  'Is Public',
496
521
  )
497
- self.columns_long = self.columns + (
522
+ self.columns_long = (
523
+ *self.columns,
498
524
  'Swap',
499
525
  'RXTX Factor',
500
526
  'Properties',
@@ -90,8 +90,8 @@ class TestKeypairCreate(TestKeypair):
90
90
  public_key=mock_generate.return_value.public_key,
91
91
  )
92
92
 
93
- self.assertEqual({}, columns)
94
- self.assertEqual({}, data)
93
+ self.assertEqual((), columns)
94
+ self.assertEqual((), data)
95
95
 
96
96
  def test_keypair_create_public_key(self):
97
97
  self.data = (
@@ -279,8 +279,8 @@ class TestKeypairCreate(TestKeypair):
279
279
  public_key=mock_generate.return_value.public_key,
280
280
  )
281
281
 
282
- self.assertEqual({}, columns)
283
- self.assertEqual({}, data)
282
+ self.assertEqual((), columns)
283
+ self.assertEqual((), data)
284
284
 
285
285
  def test_key_pair_create_with_user_pre_v210(self):
286
286
  self.set_compute_api_version('2.9')
@@ -740,8 +740,8 @@ class TestKeypairShow(TestKeypair):
740
740
 
741
741
  columns, data = self.cmd.take_action(parsed_args)
742
742
 
743
- self.assertEqual({}, columns)
744
- self.assertEqual({}, data)
743
+ self.assertEqual((), columns)
744
+ self.assertEqual((), data)
745
745
 
746
746
  def test_keypair_show_with_user(self):
747
747
  self.set_compute_api_version('2.10')
@@ -341,61 +341,7 @@ class TestServerAddFixedIP(TestServer):
341
341
  )
342
342
 
343
343
 
344
- class TestServerAddFloatingIPCompute(compute_fakes.TestComputev2):
345
- def setUp(self):
346
- super().setUp()
347
-
348
- self.app.client_manager.network_endpoint_enabled = False
349
- self.server = compute_fakes.create_one_server()
350
- self.compute_client.find_server.return_value = self.server
351
-
352
- self.cmd = server.AddFloatingIP(self.app, None)
353
-
354
- def test_server_add_floating_ip_default(self):
355
- arglist = [
356
- self.server.name,
357
- '1.2.3.4',
358
- ]
359
- verifylist = [
360
- ('server', self.server.name),
361
- ('ip_address', '1.2.3.4'),
362
- ]
363
-
364
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
365
- self.cmd.take_action(parsed_args)
366
-
367
- self.compute_client.find_server.assert_called_once_with(
368
- self.server.name, ignore_missing=False
369
- )
370
- self.compute_client.add_floating_ip_to_server.assert_called_once_with(
371
- self.server, '1.2.3.4', fixed_address=None
372
- )
373
-
374
- def test_server_add_floating_ip_fixed(self):
375
- arglist = [
376
- '--fixed-ip-address',
377
- '5.6.7.8',
378
- self.server.name,
379
- '1.2.3.4',
380
- ]
381
- verifylist = [
382
- ('fixed_ip_address', '5.6.7.8'),
383
- ('server', self.server.name),
384
- ('ip_address', '1.2.3.4'),
385
- ]
386
-
387
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
388
- self.cmd.take_action(parsed_args)
389
-
390
- self.compute_client.find_server.assert_called_once_with(
391
- self.server.name, ignore_missing=False
392
- )
393
- self.compute_client.add_floating_ip_to_server.assert_called_once_with(
394
- self.server, '1.2.3.4', fixed_address='5.6.7.8'
395
- )
396
-
397
-
398
- class TestServerAddFloatingIPNetwork(
344
+ class TestServerAddFloatingIP(
399
345
  TestServer,
400
346
  network_fakes.TestNetworkV2,
401
347
  ):
@@ -1608,8 +1554,8 @@ class TestServerCreate(TestServer):
1608
1554
  port_port2.id: port_port2,
1609
1555
  }[name_or_id]
1610
1556
 
1611
- self.app.client_manager.network.find_network.side_effect = find_network
1612
- self.app.client_manager.network.find_port.side_effect = find_port
1557
+ self.network_client.find_network.side_effect = find_network
1558
+ self.network_client.find_port.side_effect = find_port
1613
1559
 
1614
1560
  arglist = [
1615
1561
  '--image',
@@ -1728,7 +1674,7 @@ class TestServerCreate(TestServer):
1728
1674
  self.set_compute_api_version('2.43')
1729
1675
 
1730
1676
  network = network_fakes.create_one_network()
1731
- self.app.client_manager.network.find_network.return_value = network
1677
+ self.network_client.find_network.return_value = network
1732
1678
 
1733
1679
  arglist = [
1734
1680
  '--image',
@@ -4865,7 +4811,7 @@ class TestServerList(_TestServerList):
4865
4811
  ]
4866
4812
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
4867
4813
 
4868
- columns, data = self.cmd.take_action(parsed_args)
4814
+ columns, _data = self.cmd.take_action(parsed_args)
4869
4815
 
4870
4816
  self.compute_client.servers.assert_called_with(**self.kwargs)
4871
4817
  self.assertIn('Project ID', columns)
@@ -5329,7 +5275,7 @@ class TestServerList(_TestServerList):
5329
5275
  ]
5330
5276
 
5331
5277
  # Add the expected host_status column and data.
5332
- columns_long = self.columns_long + ('Host Status',)
5278
+ columns_long = (*self.columns_long, 'Host Status')
5333
5279
  self.data2 = tuple(
5334
5280
  (
5335
5281
  s.id,
@@ -5560,7 +5506,7 @@ class TestServerListV273(_TestServerList):
5560
5506
  }
5561
5507
  fake_server = _server.Server(**server_dict)
5562
5508
  self.servers.append(fake_server)
5563
- columns, data = self.cmd.take_action(parsed_args)
5509
+ _columns, data = self.cmd.take_action(parsed_args)
5564
5510
  # get the first three servers out since our interest is in the partial
5565
5511
  # server.
5566
5512
  next(data)
@@ -5708,7 +5654,7 @@ class TestServerListV296(_TestServerList):
5708
5654
  ]
5709
5655
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5710
5656
 
5711
- columns, data = self.cmd.take_action(parsed_args)
5657
+ columns, _data = self.cmd.take_action(parsed_args)
5712
5658
 
5713
5659
  self.compute_client.servers.assert_called_with(**self.kwargs)
5714
5660
  self.assertIn('Project ID', columns)
@@ -5860,7 +5806,7 @@ class TestServerListV2100(_TestServerList):
5860
5806
  ]
5861
5807
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5862
5808
 
5863
- columns, data = self.cmd.take_action(parsed_args)
5809
+ columns, _data = self.cmd.take_action(parsed_args)
5864
5810
 
5865
5811
  self.compute_client.servers.assert_called_with(**self.kwargs)
5866
5812
  self.assertIn('Project ID', columns)
@@ -7648,38 +7594,7 @@ class TestServerRescue(compute_fakes.TestComputev2):
7648
7594
  self.assertIsNone(result)
7649
7595
 
7650
7596
 
7651
- class TestServerRemoveFloatingIPCompute(compute_fakes.TestComputev2):
7652
- def setUp(self):
7653
- super().setUp()
7654
-
7655
- self.app.client_manager.network_endpoint_enabled = False
7656
- self.server = compute_fakes.create_one_server()
7657
- self.compute_client.find_server.return_value = self.server
7658
-
7659
- self.cmd = server.RemoveFloatingIP(self.app, None)
7660
-
7661
- def test_server_remove_floating_ip(self):
7662
- arglist = [
7663
- self.server.name,
7664
- '1.2.3.4',
7665
- ]
7666
- verifylist = [
7667
- ('server', self.server.name),
7668
- ('ip_address', '1.2.3.4'),
7669
- ]
7670
-
7671
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
7672
- self.cmd.take_action(parsed_args)
7673
-
7674
- self.compute_client.find_server.assert_called_once_with(
7675
- self.server.name, ignore_missing=False
7676
- )
7677
- self.compute_client.remove_floating_ip_from_server.assert_called_once_with(
7678
- self.server, '1.2.3.4'
7679
- )
7680
-
7681
-
7682
- class TestServerRemoveFloatingIPNetwork(network_fakes.TestNetworkV2):
7597
+ class TestServerRemoveFloatingIP(network_fakes.TestNetworkV2):
7683
7598
  def setUp(self):
7684
7599
  super().setUp()
7685
7600
 
@@ -7896,15 +7811,13 @@ class TestServerResize(compute_fakes.TestComputev2):
7896
7811
  ('server', self.server.id),
7897
7812
  ]
7898
7813
 
7899
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
7900
- result = self.cmd.take_action(parsed_args)
7901
-
7902
- self.compute_client.find_server.assert_called_once_with(
7903
- self.server.id, ignore_missing=False
7814
+ self.assertRaises(
7815
+ test_utils.ParserException,
7816
+ self.check_parser,
7817
+ self.cmd,
7818
+ arglist,
7819
+ verifylist,
7904
7820
  )
7905
- self.compute_client.find_flavor.assert_not_called()
7906
- self.compute_client.resize_server.assert_not_called()
7907
- self.assertIsNone(result)
7908
7821
 
7909
7822
  def test_server_resize(self):
7910
7823
  arglist = [
@@ -8898,7 +8811,7 @@ class TestServerShow(TestServer):
8898
8811
  None, # OS-EXT-SRV-ATTR:user_data
8899
8812
  server.PowerStateColumn(
8900
8813
  self.server.power_state
8901
- ), # OS-EXT-STS:power_state # noqa: E501
8814
+ ), # OS-EXT-STS:power_state
8902
8815
  None, # OS-EXT-STS:task_state
8903
8816
  None, # OS-EXT-STS:vm_state
8904
8817
  None, # OS-SRV-USG:launched_at