python-openstackclient 6.6.1__py3-none-any.whl → 7.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 (336) hide show
  1. openstackclient/api/api.py +4 -4
  2. openstackclient/api/compute_v2.py +352 -638
  3. openstackclient/api/image_v1.py +1 -1
  4. openstackclient/api/object_store_v1.py +3 -4
  5. openstackclient/common/availability_zone.py +1 -1
  6. openstackclient/common/clientmanager.py +24 -20
  7. openstackclient/common/configuration.py +1 -1
  8. openstackclient/common/extension.py +1 -1
  9. openstackclient/common/limits.py +67 -34
  10. openstackclient/common/module.py +3 -3
  11. openstackclient/common/progressbar.py +2 -2
  12. openstackclient/common/project_cleanup.py +5 -2
  13. openstackclient/common/quota.py +299 -423
  14. openstackclient/common/versions.py +1 -1
  15. openstackclient/compute/client.py +7 -116
  16. openstackclient/compute/v2/agent.py +75 -49
  17. openstackclient/compute/v2/aggregate.py +38 -32
  18. openstackclient/compute/v2/console.py +2 -2
  19. openstackclient/compute/v2/flavor.py +6 -6
  20. openstackclient/compute/v2/host.py +38 -33
  21. openstackclient/compute/v2/hypervisor.py +9 -6
  22. openstackclient/compute/v2/keypair.py +7 -8
  23. openstackclient/compute/v2/server.py +479 -396
  24. openstackclient/compute/v2/server_backup.py +1 -1
  25. openstackclient/compute/v2/server_group.py +4 -4
  26. openstackclient/compute/v2/server_image.py +1 -1
  27. openstackclient/compute/v2/server_migration.py +3 -4
  28. openstackclient/compute/v2/service.py +4 -4
  29. openstackclient/compute/v2/usage.py +3 -3
  30. openstackclient/identity/common.py +34 -0
  31. openstackclient/identity/v2_0/catalog.py +2 -2
  32. openstackclient/identity/v2_0/ec2creds.py +4 -4
  33. openstackclient/identity/v2_0/endpoint.py +4 -4
  34. openstackclient/identity/v2_0/project.py +6 -6
  35. openstackclient/identity/v2_0/role.py +5 -5
  36. openstackclient/identity/v2_0/role_assignment.py +1 -1
  37. openstackclient/identity/v2_0/service.py +4 -4
  38. openstackclient/identity/v2_0/token.py +2 -2
  39. openstackclient/identity/v2_0/user.py +7 -7
  40. openstackclient/identity/v3/access_rule.py +3 -3
  41. openstackclient/identity/v3/application_credential.py +125 -43
  42. openstackclient/identity/v3/catalog.py +2 -2
  43. openstackclient/identity/v3/consumer.py +4 -4
  44. openstackclient/identity/v3/credential.py +5 -5
  45. openstackclient/identity/v3/domain.py +5 -5
  46. openstackclient/identity/v3/ec2creds.py +4 -4
  47. openstackclient/identity/v3/endpoint.py +7 -7
  48. openstackclient/identity/v3/endpoint_group.py +8 -10
  49. openstackclient/identity/v3/federation_protocol.py +5 -5
  50. openstackclient/identity/v3/group.py +8 -8
  51. openstackclient/identity/v3/identity_provider.py +5 -5
  52. openstackclient/identity/v3/implied_role.py +3 -3
  53. openstackclient/identity/v3/limit.py +5 -5
  54. openstackclient/identity/v3/mapping.py +5 -5
  55. openstackclient/identity/v3/policy.py +5 -5
  56. openstackclient/identity/v3/project.py +5 -5
  57. openstackclient/identity/v3/region.py +5 -5
  58. openstackclient/identity/v3/registered_limit.py +5 -5
  59. openstackclient/identity/v3/role.py +7 -7
  60. openstackclient/identity/v3/role_assignment.py +92 -140
  61. openstackclient/identity/v3/service.py +64 -34
  62. openstackclient/identity/v3/service_provider.py +4 -4
  63. openstackclient/identity/v3/tag.py +2 -2
  64. openstackclient/identity/v3/token.py +5 -5
  65. openstackclient/identity/v3/trust.py +3 -3
  66. openstackclient/identity/v3/user.py +144 -80
  67. openstackclient/image/client.py +4 -4
  68. openstackclient/image/v1/image.py +8 -9
  69. openstackclient/image/v2/cache.py +12 -10
  70. openstackclient/image/v2/metadef_objects.py +44 -0
  71. openstackclient/image/v2/metadef_resource_type_association.py +189 -0
  72. openstackclient/image/v2/task.py +1 -1
  73. openstackclient/network/common.py +6 -5
  74. openstackclient/network/utils.py +2 -2
  75. openstackclient/network/v2/address_group.py +6 -6
  76. openstackclient/network/v2/address_scope.py +5 -5
  77. openstackclient/network/v2/default_security_group_rule.py +1 -1
  78. openstackclient/network/v2/floating_ip.py +8 -10
  79. openstackclient/network/v2/floating_ip_pool.py +6 -15
  80. openstackclient/network/v2/floating_ip_port_forwarding.py +5 -13
  81. openstackclient/network/v2/ip_availability.py +2 -2
  82. openstackclient/network/v2/l3_conntrack_helper.py +5 -5
  83. openstackclient/network/v2/network.py +8 -8
  84. openstackclient/network/v2/network_agent.py +8 -8
  85. openstackclient/network/v2/network_auto_allocated_topology.py +2 -2
  86. openstackclient/network/v2/network_flavor.py +6 -8
  87. openstackclient/network/v2/network_flavor_profile.py +4 -4
  88. openstackclient/network/v2/network_meter.py +3 -3
  89. openstackclient/network/v2/network_meter_rule.py +3 -3
  90. openstackclient/network/v2/network_qos_policy.py +5 -5
  91. openstackclient/network/v2/network_qos_rule.py +9 -9
  92. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  93. openstackclient/network/v2/network_rbac.py +5 -5
  94. openstackclient/network/v2/network_segment.py +5 -5
  95. openstackclient/network/v2/network_segment_range.py +7 -7
  96. openstackclient/network/v2/network_trunk.py +7 -7
  97. openstackclient/network/v2/port.py +26 -12
  98. openstackclient/network/v2/router.py +403 -54
  99. openstackclient/network/v2/security_group.py +18 -14
  100. openstackclient/network/v2/security_group_rule.py +18 -15
  101. openstackclient/network/v2/subnet.py +15 -8
  102. openstackclient/network/v2/subnet_pool.py +6 -6
  103. openstackclient/object/v1/account.py +2 -2
  104. openstackclient/object/v1/container.py +7 -7
  105. openstackclient/object/v1/object.py +7 -7
  106. openstackclient/releasenotes/notes/volume-backup-created-at-list-b49ec893ae1f6b0d.yaml +4 -0
  107. openstackclient/shell.py +4 -6
  108. openstackclient/tests/functional/base.py +1 -1
  109. openstackclient/tests/functional/common/test_extension.py +1 -1
  110. openstackclient/tests/functional/common/test_help.py +2 -2
  111. openstackclient/tests/functional/common/test_module.py +1 -1
  112. openstackclient/tests/functional/common/test_quota.py +43 -61
  113. openstackclient/tests/functional/compute/v2/common.py +2 -2
  114. openstackclient/tests/functional/compute/v2/test_flavor.py +2 -2
  115. openstackclient/tests/functional/compute/v2/test_keypair.py +1 -1
  116. openstackclient/tests/functional/compute/v2/test_server.py +5 -5
  117. openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
  118. openstackclient/tests/functional/identity/v2/common.py +3 -3
  119. openstackclient/tests/functional/identity/v3/common.py +12 -4
  120. openstackclient/tests/functional/identity/v3/test_application_credential.py +6 -12
  121. openstackclient/tests/functional/identity/v3/test_domain.py +1 -3
  122. openstackclient/tests/functional/identity/v3/test_endpoint.py +1 -1
  123. openstackclient/tests/functional/identity/v3/test_idp.py +1 -1
  124. openstackclient/tests/functional/identity/v3/test_region.py +1 -3
  125. openstackclient/tests/functional/identity/v3/test_role.py +2 -2
  126. openstackclient/tests/functional/identity/v3/test_role_assignment.py +210 -0
  127. openstackclient/tests/functional/identity/v3/test_service.py +1 -3
  128. openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -3
  129. openstackclient/tests/functional/image/base.py +1 -1
  130. openstackclient/tests/functional/image/v2/test_image.py +1 -1
  131. openstackclient/tests/functional/image/v2/test_info.py +1 -1
  132. openstackclient/tests/functional/network/v2/common.py +4 -6
  133. openstackclient/tests/functional/network/v2/test_network.py +5 -3
  134. openstackclient/tests/functional/network/v2/test_network_agent.py +7 -5
  135. openstackclient/tests/functional/network/v2/test_network_qos_rule.py +4 -4
  136. openstackclient/tests/functional/network/v2/test_port.py +11 -7
  137. openstackclient/tests/functional/network/v2/test_router.py +2 -2
  138. openstackclient/tests/functional/object/v1/common.py +1 -1
  139. openstackclient/tests/functional/object/v1/test_container.py +3 -3
  140. openstackclient/tests/functional/object/v1/test_object.py +9 -13
  141. openstackclient/tests/functional/volume/base.py +1 -1
  142. openstackclient/tests/functional/volume/v1/test_service.py +1 -1
  143. openstackclient/tests/functional/volume/v1/test_snapshot.py +2 -2
  144. openstackclient/tests/functional/volume/v1/test_transfer_request.py +2 -2
  145. openstackclient/tests/functional/volume/v1/test_volume_type.py +1 -1
  146. openstackclient/tests/functional/volume/v2/test_service.py +2 -2
  147. openstackclient/tests/functional/volume/v2/test_volume_backup.py +2 -2
  148. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +2 -2
  149. openstackclient/tests/functional/volume/v2/test_volume_type.py +1 -1
  150. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +2 -2
  151. openstackclient/tests/functional/volume/v3/test_volume_type.py +1 -1
  152. openstackclient/tests/unit/api/fakes.py +1 -1
  153. openstackclient/tests/unit/api/test_api.py +2 -2
  154. openstackclient/tests/unit/api/test_compute_v2.py +522 -707
  155. openstackclient/tests/unit/api/test_image_v1.py +1 -1
  156. openstackclient/tests/unit/api/test_image_v2.py +1 -1
  157. openstackclient/tests/unit/api/test_object_store_v1.py +4 -4
  158. openstackclient/tests/unit/common/test_limits.py +73 -35
  159. openstackclient/tests/unit/common/test_logs.py +2 -2
  160. openstackclient/tests/unit/common/test_module.py +4 -2
  161. openstackclient/tests/unit/common/test_project_cleanup.py +31 -6
  162. openstackclient/tests/unit/common/test_quota.py +490 -630
  163. openstackclient/tests/unit/compute/v2/fakes.py +37 -286
  164. openstackclient/tests/unit/compute/v2/test_agent.py +189 -147
  165. openstackclient/tests/unit/compute/v2/test_aggregate.py +87 -57
  166. openstackclient/tests/unit/compute/v2/test_console.py +4 -5
  167. openstackclient/tests/unit/compute/v2/test_flavor.py +59 -68
  168. openstackclient/tests/unit/compute/v2/test_host.py +83 -54
  169. openstackclient/tests/unit/compute/v2/test_hypervisor.py +57 -34
  170. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
  171. openstackclient/tests/unit/compute/v2/test_keypair.py +65 -50
  172. openstackclient/tests/unit/compute/v2/test_server.py +2850 -2453
  173. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
  174. openstackclient/tests/unit/compute/v2/test_server_event.py +14 -39
  175. openstackclient/tests/unit/compute/v2/test_server_group.py +28 -29
  176. openstackclient/tests/unit/compute/v2/test_server_migration.py +43 -68
  177. openstackclient/tests/unit/compute/v2/test_server_volume.py +17 -34
  178. openstackclient/tests/unit/compute/v2/test_service.py +34 -52
  179. openstackclient/tests/unit/compute/v2/test_usage.py +4 -4
  180. openstackclient/tests/unit/fakes.py +12 -12
  181. openstackclient/tests/unit/identity/v2_0/fakes.py +27 -10
  182. openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -3
  183. openstackclient/tests/unit/identity/v2_0/test_endpoint.py +7 -7
  184. openstackclient/tests/unit/identity/v2_0/test_project.py +8 -8
  185. openstackclient/tests/unit/identity/v2_0/test_role.py +10 -10
  186. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +4 -4
  187. openstackclient/tests/unit/identity/v2_0/test_service.py +6 -6
  188. openstackclient/tests/unit/identity/v2_0/test_token.py +4 -4
  189. openstackclient/tests/unit/identity/v2_0/test_user.py +8 -8
  190. openstackclient/tests/unit/identity/v3/fakes.py +59 -20
  191. openstackclient/tests/unit/identity/v3/test_access_rule.py +5 -5
  192. openstackclient/tests/unit/identity/v3/test_application_credential.py +207 -230
  193. openstackclient/tests/unit/identity/v3/test_catalog.py +3 -3
  194. openstackclient/tests/unit/identity/v3/test_consumer.py +7 -8
  195. openstackclient/tests/unit/identity/v3/test_credential.py +9 -9
  196. openstackclient/tests/unit/identity/v3/test_domain.py +8 -8
  197. openstackclient/tests/unit/identity/v3/test_endpoint.py +13 -13
  198. openstackclient/tests/unit/identity/v3/test_endpoint_group.py +12 -14
  199. openstackclient/tests/unit/identity/v3/test_group.py +12 -12
  200. openstackclient/tests/unit/identity/v3/test_identity_provider.py +8 -8
  201. openstackclient/tests/unit/identity/v3/test_implied_role.py +5 -5
  202. openstackclient/tests/unit/identity/v3/test_limit.py +7 -7
  203. openstackclient/tests/unit/identity/v3/test_mappings.py +7 -7
  204. openstackclient/tests/unit/identity/v3/test_oauth.py +5 -5
  205. openstackclient/tests/unit/identity/v3/test_project.py +16 -16
  206. openstackclient/tests/unit/identity/v3/test_protocol.py +7 -7
  207. openstackclient/tests/unit/identity/v3/test_region.py +7 -7
  208. openstackclient/tests/unit/identity/v3/test_registered_limit.py +12 -13
  209. openstackclient/tests/unit/identity/v3/test_role.py +13 -13
  210. openstackclient/tests/unit/identity/v3/test_role_assignment.py +410 -331
  211. openstackclient/tests/unit/identity/v3/test_service.py +90 -94
  212. openstackclient/tests/unit/identity/v3/test_service_provider.py +7 -7
  213. openstackclient/tests/unit/identity/v3/test_token.py +4 -4
  214. openstackclient/tests/unit/identity/v3/test_trust.py +9 -9
  215. openstackclient/tests/unit/identity/v3/test_unscoped_saml.py +4 -4
  216. openstackclient/tests/unit/identity/v3/test_user.py +299 -327
  217. openstackclient/tests/unit/image/v1/test_image.py +6 -6
  218. openstackclient/tests/unit/image/v2/fakes.py +46 -9
  219. openstackclient/tests/unit/image/v2/test_cache.py +2 -2
  220. openstackclient/tests/unit/image/v2/test_image.py +3 -3
  221. openstackclient/tests/unit/image/v2/test_metadef_objects.py +62 -0
  222. openstackclient/tests/unit/image/v2/test_metadef_resource_type_association.py +131 -0
  223. openstackclient/tests/unit/integ/base.py +1 -1
  224. openstackclient/tests/unit/integ/cli/test_project.py +4 -4
  225. openstackclient/tests/unit/integ/cli/test_shell.py +7 -7
  226. openstackclient/tests/unit/network/test_common.py +12 -21
  227. openstackclient/tests/unit/network/v2/fakes.py +64 -130
  228. openstackclient/tests/unit/network/v2/test_address_group.py +15 -15
  229. openstackclient/tests/unit/network/v2/test_address_scope.py +13 -13
  230. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +49 -27
  231. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +40 -38
  232. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +15 -15
  233. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +4 -7
  234. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +3 -5
  235. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +11 -11
  236. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -6
  237. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +11 -21
  238. openstackclient/tests/unit/network/v2/test_local_ip.py +7 -7
  239. openstackclient/tests/unit/network/v2/test_local_ip_association.py +3 -5
  240. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -13
  241. openstackclient/tests/unit/network/v2/test_network.py +23 -28
  242. openstackclient/tests/unit/network/v2/test_network_agent.py +17 -21
  243. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +8 -8
  244. openstackclient/tests/unit/network/v2/test_network_compute.py +66 -65
  245. openstackclient/tests/unit/network/v2/test_network_flavor.py +17 -19
  246. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +13 -13
  247. openstackclient/tests/unit/network/v2/test_network_meter.py +11 -11
  248. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +11 -11
  249. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +11 -21
  250. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +51 -77
  251. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +5 -9
  252. openstackclient/tests/unit/network/v2/test_network_rbac.py +12 -12
  253. openstackclient/tests/unit/network/v2/test_network_segment.py +11 -15
  254. openstackclient/tests/unit/network/v2/test_network_segment_range.py +11 -13
  255. openstackclient/tests/unit/network/v2/test_network_service_provider.py +3 -5
  256. openstackclient/tests/unit/network/v2/test_network_trunk.py +11 -11
  257. openstackclient/tests/unit/network/v2/test_port.py +22 -25
  258. openstackclient/tests/unit/network/v2/test_router.py +721 -51
  259. openstackclient/tests/unit/network/v2/test_security_group_compute.py +65 -49
  260. openstackclient/tests/unit/network/v2/test_security_group_network.py +15 -15
  261. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +57 -45
  262. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +11 -19
  263. openstackclient/tests/unit/network/v2/test_subnet.py +29 -25
  264. openstackclient/tests/unit/network/v2/test_subnet_pool.py +15 -15
  265. openstackclient/tests/unit/object/v1/fakes.py +1 -1
  266. openstackclient/tests/unit/object/v1/test_container.py +5 -5
  267. openstackclient/tests/unit/object/v1/test_container_all.py +6 -6
  268. openstackclient/tests/unit/object/v1/test_object.py +3 -3
  269. openstackclient/tests/unit/object/v1/test_object_all.py +5 -5
  270. openstackclient/tests/unit/test_shell.py +5 -5
  271. openstackclient/tests/unit/utils.py +4 -1
  272. openstackclient/tests/unit/volume/test_find_resource.py +2 -2
  273. openstackclient/tests/unit/volume/v1/fakes.py +5 -6
  274. openstackclient/tests/unit/volume/v1/test_volume.py +5 -4
  275. openstackclient/tests/unit/volume/v2/fakes.py +39 -259
  276. openstackclient/tests/unit/volume/v2/test_consistency_group_snapshot.py +5 -5
  277. openstackclient/tests/unit/volume/v2/test_qos_specs.py +9 -9
  278. openstackclient/tests/unit/volume/v2/test_volume.py +21 -87
  279. openstackclient/tests/unit/volume/v2/test_volume_backup.py +10 -368
  280. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +1 -1
  281. openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +0 -44
  282. openstackclient/tests/unit/volume/v2/test_volume_type.py +6 -87
  283. openstackclient/tests/unit/volume/v3/fakes.py +505 -22
  284. openstackclient/tests/unit/volume/v3/test_block_storage_cleanup.py +2 -3
  285. openstackclient/tests/unit/volume/v3/test_block_storage_cluster.py +10 -11
  286. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +10 -6
  287. openstackclient/tests/unit/volume/v3/test_block_storage_manage.py +25 -17
  288. openstackclient/tests/unit/volume/v3/test_block_storage_resource_filter.py +6 -32
  289. openstackclient/tests/unit/volume/v3/test_service.py +271 -0
  290. openstackclient/tests/unit/volume/v3/test_volume.py +2177 -33
  291. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +48 -52
  292. openstackclient/tests/unit/volume/v3/test_volume_backup.py +892 -0
  293. openstackclient/tests/unit/volume/v3/test_volume_group.py +19 -20
  294. openstackclient/tests/unit/volume/v3/test_volume_group_snapshot.py +14 -34
  295. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +13 -16
  296. openstackclient/tests/unit/volume/v3/test_volume_message.py +10 -11
  297. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +161 -0
  298. openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +425 -0
  299. openstackclient/tests/unit/volume/v3/test_volume_type.py +1109 -0
  300. openstackclient/volume/v1/qos_specs.py +7 -7
  301. openstackclient/volume/v1/service.py +2 -2
  302. openstackclient/volume/v1/volume.py +12 -12
  303. openstackclient/volume/v1/volume_backup.py +7 -7
  304. openstackclient/volume/v1/volume_snapshot.py +8 -8
  305. openstackclient/volume/v1/volume_transfer_request.py +5 -5
  306. openstackclient/volume/v1/volume_type.py +7 -7
  307. openstackclient/volume/v2/backup_record.py +2 -2
  308. openstackclient/volume/v2/consistency_group.py +7 -9
  309. openstackclient/volume/v2/consistency_group_snapshot.py +4 -12
  310. openstackclient/volume/v2/qos_specs.py +7 -7
  311. openstackclient/volume/v2/service.py +2 -2
  312. openstackclient/volume/v2/volume.py +80 -80
  313. openstackclient/volume/v2/volume_backend.py +2 -2
  314. openstackclient/volume/v2/volume_backup.py +9 -217
  315. openstackclient/volume/v2/volume_host.py +2 -2
  316. openstackclient/volume/v2/volume_snapshot.py +8 -8
  317. openstackclient/volume/v2/volume_transfer_request.py +5 -37
  318. openstackclient/volume/v2/volume_type.py +7 -89
  319. openstackclient/volume/v3/service.py +56 -0
  320. openstackclient/volume/v3/volume.py +971 -0
  321. openstackclient/volume/v3/volume_attachment.py +31 -29
  322. openstackclient/volume/v3/volume_backup.py +670 -0
  323. openstackclient/volume/v3/volume_message.py +1 -1
  324. openstackclient/volume/v3/volume_snapshot.py +97 -0
  325. openstackclient/volume/v3/volume_transfer_request.py +233 -0
  326. openstackclient/volume/v3/volume_type.py +967 -0
  327. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/AUTHORS +6 -0
  328. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/METADATA +4 -4
  329. python_openstackclient-7.1.0.dist-info/RECORD +503 -0
  330. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/entry_points.txt +33 -27
  331. python_openstackclient-7.1.0.dist-info/pbr.json +1 -0
  332. python_openstackclient-6.6.1.dist-info/RECORD +0 -489
  333. python_openstackclient-6.6.1.dist-info/pbr.json +0 -1
  334. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/LICENSE +0 -0
  335. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/WHEEL +0 -0
  336. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/top_level.txt +0 -0
@@ -23,7 +23,7 @@ class ShowVersions(command.Lister):
23
23
  _description = _("Show available versions of services")
24
24
 
25
25
  def get_parser(self, prog_name):
26
- parser = super(ShowVersions, self).get_parser(prog_name)
26
+ parser = super().get_parser(prog_name)
27
27
  interface_group = parser.add_mutually_exclusive_group()
28
28
  interface_group.add_argument(
29
29
  "--all-interfaces",
@@ -15,96 +15,28 @@
15
15
 
16
16
  import logging
17
17
 
18
- from osc_lib import exceptions
19
18
  from osc_lib import utils
20
19
 
21
20
  from openstackclient.i18n import _
22
21
 
23
-
24
22
  LOG = logging.getLogger(__name__)
25
23
 
26
24
  DEFAULT_API_VERSION = '2.1'
27
25
  API_VERSION_OPTION = 'os_compute_api_version'
28
26
  API_NAME = 'compute'
29
27
  API_VERSIONS = {
30
- "2": "novaclient.client",
31
- "2.1": "novaclient.client",
32
- }
33
-
34
- COMPUTE_API_TYPE = 'compute'
35
- COMPUTE_API_VERSIONS = {
36
- '2': 'openstackclient.api.compute_v2.APIv2',
28
+ '2': 'openstack.connection.Connection',
29
+ '2.1': 'openstack.connection.Connection',
37
30
  }
38
31
 
39
- # Save the microversion if in use
40
- _compute_api_version = None
41
-
42
32
 
43
33
  def make_client(instance):
44
34
  """Returns a compute service client."""
45
-
46
- # Defer client import until we actually need them
47
- from novaclient import client as nova_client
48
-
49
- if _compute_api_version is not None:
50
- version = _compute_api_version
51
- else:
52
- version = instance._api_version[API_NAME]
53
- from novaclient import api_versions
54
-
55
- # convert to APIVersion object
56
- version = api_versions.get_api_version(version)
57
-
58
- if version.is_latest():
59
- import novaclient
60
-
61
- # NOTE(RuiChen): executing version discovery make sense, but that need
62
- # an initialized REST client, it's not available now,
63
- # fallback to use the max version of novaclient side.
64
- version = novaclient.API_MAX_VERSION
65
-
66
- LOG.debug('Instantiating compute client for %s', version)
67
-
68
- compute_api = utils.get_client_class(
69
- API_NAME,
70
- version.ver_major,
71
- COMPUTE_API_VERSIONS,
72
- )
73
- LOG.debug('Instantiating compute api: %s', compute_api)
74
-
75
- # Set client http_log_debug to True if verbosity level is high enough
76
- http_log_debug = utils.get_effective_log_level() <= logging.DEBUG
77
-
78
- extensions = [
79
- ext
80
- for ext in nova_client.discover_extensions(version)
81
- if ext.name == "list_extensions"
82
- ]
83
-
84
- # Remember interface only if it is set
85
- kwargs = utils.build_kwargs_dict('endpoint_type', instance.interface)
86
-
87
- client = nova_client.Client(
88
- version,
89
- session=instance.session,
90
- extensions=extensions,
91
- http_log_debug=http_log_debug,
92
- timings=instance.timing,
93
- region_name=instance.region_name,
94
- **kwargs
95
- )
96
-
97
- client.api = compute_api(
98
- session=instance.session,
99
- service_type=COMPUTE_API_TYPE,
100
- endpoint=instance.get_endpoint_for_service_type(
101
- COMPUTE_API_TYPE,
102
- region_name=instance.region_name,
103
- interface=instance.interface,
104
- ),
35
+ LOG.debug(
36
+ 'Compute client initialized using OpenStack SDK: %s',
37
+ instance.sdk_connection.compute,
105
38
  )
106
-
107
- return client
39
+ return instance.sdk_connection.compute
108
40
 
109
41
 
110
42
  def build_option_parser(parser):
@@ -113,48 +45,7 @@ def build_option_parser(parser):
113
45
  '--os-compute-api-version',
114
46
  metavar='<compute-api-version>',
115
47
  default=utils.env('OS_COMPUTE_API_VERSION'),
116
- help=_(
117
- "Compute API version, default=%s " "(Env: OS_COMPUTE_API_VERSION)"
118
- )
48
+ help=_("Compute API version, default=%s (Env: OS_COMPUTE_API_VERSION)")
119
49
  % DEFAULT_API_VERSION,
120
50
  )
121
51
  return parser
122
-
123
-
124
- def check_api_version(check_version):
125
- """Validate version supplied by user
126
-
127
- Returns:
128
-
129
- * True if version is OK
130
- * False if the version has not been checked and the previous plugin
131
- check should be performed
132
- * throws an exception if the version is no good
133
-
134
- TODO(dtroyer): make the exception thrown a version-related one
135
- """
136
-
137
- # Defer client imports until we actually need them
138
- import novaclient
139
- from novaclient import api_versions
140
-
141
- global _compute_api_version
142
-
143
- # Copy some logic from novaclient 3.3.0 for basic version detection
144
- # NOTE(dtroyer): This is only enough to resume operations using API
145
- # version 2.0 or any valid version supplied by the user.
146
- _compute_api_version = api_versions.get_api_version(check_version)
147
-
148
- # Bypass X.latest format microversion
149
- if not _compute_api_version.is_latest():
150
- if _compute_api_version > api_versions.APIVersion("2.0"):
151
- if not _compute_api_version.matches(
152
- novaclient.API_MIN_VERSION,
153
- novaclient.API_MAX_VERSION,
154
- ):
155
- msg = _("versions supported by client: %(min)s - %(max)s") % {
156
- "min": novaclient.API_MIN_VERSION.get_string(),
157
- "max": novaclient.API_MAX_VERSION.get_string(),
158
- }
159
- raise exceptions.CommandError(msg)
160
- return True
@@ -17,6 +17,7 @@
17
17
 
18
18
  import logging
19
19
 
20
+ from openstack import exceptions as sdk_exceptions
20
21
  from osc_lib.command import command
21
22
  from osc_lib import exceptions
22
23
  from osc_lib import utils
@@ -36,7 +37,7 @@ class CreateAgent(command.ShowOne):
36
37
  """
37
38
 
38
39
  def get_parser(self, prog_name):
39
- parser = super(CreateAgent, self).get_parser(prog_name)
40
+ parser = super().get_parser(prog_name)
40
41
  parser.add_argument("os", metavar="<os>", help=_("Type of OS"))
41
42
  parser.add_argument(
42
43
  "architecture",
@@ -55,16 +56,26 @@ class CreateAgent(command.ShowOne):
55
56
  return parser
56
57
 
57
58
  def take_action(self, parsed_args):
58
- compute_client = self.app.client_manager.compute
59
- args = (
60
- parsed_args.os,
61
- parsed_args.architecture,
62
- parsed_args.version,
63
- parsed_args.url,
64
- parsed_args.md5hash,
65
- parsed_args.hypervisor,
59
+ compute_client = self.app.client_manager.sdk_connection.compute
60
+
61
+ # doing this since openstacksdk has decided not to support this
62
+ # deprecated command
63
+ data = {
64
+ 'agent': {
65
+ 'hypervisor': parsed_args.hypervisor,
66
+ 'os': parsed_args.os,
67
+ 'architecture': parsed_args.architecture,
68
+ 'version': parsed_args.version,
69
+ 'url': parsed_args.url,
70
+ 'md5hash': parsed_args.md5hash,
71
+ },
72
+ }
73
+ response = compute_client.post(
74
+ '/os-agents', json=data, microversion='2.1'
66
75
  )
67
- agent = compute_client.agents.create(*args)._info.copy()
76
+ sdk_exceptions.raise_from_response(response)
77
+ agent = response.json().get('agent')
78
+
68
79
  return zip(*sorted(agent.items()))
69
80
 
70
81
 
@@ -77,18 +88,23 @@ class DeleteAgent(command.Command):
77
88
  """
78
89
 
79
90
  def get_parser(self, prog_name):
80
- parser = super(DeleteAgent, self).get_parser(prog_name)
91
+ parser = super().get_parser(prog_name)
81
92
  parser.add_argument(
82
93
  "id", metavar="<id>", nargs='+', help=_("ID of agent(s) to delete")
83
94
  )
84
95
  return parser
85
96
 
86
97
  def take_action(self, parsed_args):
87
- compute_client = self.app.client_manager.compute
98
+ compute_client = self.app.client_manager.sdk_connection.compute
88
99
  result = 0
89
100
  for id in parsed_args.id:
90
101
  try:
91
- compute_client.agents.delete(id)
102
+ # doing this since openstacksdk has decided not to support this
103
+ # deprecated command
104
+ response = compute_client.delete(
105
+ f'/os-agents/{id}', microversion='2.1'
106
+ )
107
+ sdk_exceptions.raise_from_response(response)
92
108
  except Exception as e:
93
109
  result += 1
94
110
  LOG.error(
@@ -114,7 +130,7 @@ class ListAgent(command.Lister):
114
130
  """
115
131
 
116
132
  def get_parser(self, prog_name):
117
- parser = super(ListAgent, self).get_parser(prog_name)
133
+ parser = super().get_parser(prog_name)
118
134
  parser.add_argument(
119
135
  "--hypervisor",
120
136
  metavar="<hypervisor>",
@@ -123,7 +139,7 @@ class ListAgent(command.Lister):
123
139
  return parser
124
140
 
125
141
  def take_action(self, parsed_args):
126
- compute_client = self.app.client_manager.compute
142
+ compute_client = self.app.client_manager.sdk_connection.compute
127
143
  columns = (
128
144
  "Agent ID",
129
145
  "Hypervisor",
@@ -133,30 +149,36 @@ class ListAgent(command.Lister):
133
149
  "Md5Hash",
134
150
  "URL",
135
151
  )
136
- data = compute_client.agents.list(parsed_args.hypervisor)
137
- return (
138
- columns,
139
- (
140
- utils.get_item_properties(
141
- s,
142
- columns,
143
- )
144
- for s in data
145
- ),
146
- )
152
+
153
+ # doing this since openstacksdk has decided not to support this
154
+ # deprecated command
155
+ path = '/os-agents'
156
+ if parsed_args.hypervisor:
157
+ path += f'?hypervisor={parsed_args.hypervisor}'
158
+
159
+ response = compute_client.get(path, microversion='2.1')
160
+ sdk_exceptions.raise_from_response(response)
161
+ agents = response.json().get('agents')
162
+
163
+ return columns, (utils.get_dict_properties(s, columns) for s in agents)
147
164
 
148
165
 
149
166
  class SetAgent(command.Command):
150
167
  """Set compute agent properties.
151
168
 
152
- The compute agent functionality is hypervisor specific and is only
169
+ The compute agent functionality is hypervisor-specific and is only
153
170
  supported by the XenAPI hypervisor driver. It was removed from nova in the
154
171
  23.0.0 (Wallaby) release.
155
172
  """
156
173
 
157
174
  def get_parser(self, prog_name):
158
- parser = super(SetAgent, self).get_parser(prog_name)
159
- parser.add_argument("id", metavar="<id>", help=_("ID of the agent"))
175
+ parser = super().get_parser(prog_name)
176
+ parser.add_argument(
177
+ "id",
178
+ metavar="<id>",
179
+ type=int,
180
+ help=_("ID of the agent"),
181
+ )
160
182
  parser.add_argument(
161
183
  "--agent-version",
162
184
  dest="version",
@@ -172,30 +194,34 @@ class SetAgent(command.Command):
172
194
  return parser
173
195
 
174
196
  def take_action(self, parsed_args):
175
- compute_client = self.app.client_manager.compute
176
- data = compute_client.agents.list(hypervisor=None)
177
- agent = {}
178
-
179
- for s in data:
180
- if s.agent_id == int(parsed_args.id):
181
- agent['version'] = s.version
182
- agent['url'] = s.url
183
- agent['md5hash'] = s.md5hash
184
- if agent == {}:
197
+ compute_client = self.app.client_manager.sdk_connection.compute
198
+
199
+ response = compute_client.get('/os-agents', microversion='2.1')
200
+ sdk_exceptions.raise_from_response(response)
201
+ agents = response.json().get('agents')
202
+ data = {}
203
+ for agent in agents:
204
+ if agent['agent_id'] == parsed_args.id:
205
+ data['version'] = agent['version']
206
+ data['url'] = agent['url']
207
+ data['md5hash'] = agent['md5hash']
208
+ break
209
+ else:
185
210
  msg = _("No agent with a ID of '%(id)s' exists.")
186
- raise exceptions.CommandError(msg % parsed_args.id)
211
+ raise exceptions.CommandError(msg % {'id': parsed_args.id})
187
212
 
188
213
  if parsed_args.version:
189
- agent['version'] = parsed_args.version
214
+ data['version'] = parsed_args.version
190
215
  if parsed_args.url:
191
- agent['url'] = parsed_args.url
216
+ data['url'] = parsed_args.url
192
217
  if parsed_args.md5hash:
193
- agent['md5hash'] = parsed_args.md5hash
218
+ data['md5hash'] = parsed_args.md5hash
219
+
220
+ data = {'para': data}
194
221
 
195
- args = (
196
- parsed_args.id,
197
- agent['version'],
198
- agent['url'],
199
- agent['md5hash'],
222
+ # doing this since openstacksdk has decided not to support this
223
+ # deprecated command
224
+ response = compute_client.put(
225
+ f'/os-agents/{parsed_args.id}', json=data, microversion='2.1'
200
226
  )
201
- compute_client.agents.update(*args)
227
+ sdk_exceptions.raise_from_response(response)
@@ -55,7 +55,7 @@ class AddAggregateHost(command.ShowOne):
55
55
  _description = _("Add host to aggregate")
56
56
 
57
57
  def get_parser(self, prog_name):
58
- parser = super(AddAggregateHost, self).get_parser(prog_name)
58
+ parser = super().get_parser(prog_name)
59
59
  parser.add_argument(
60
60
  'aggregate',
61
61
  metavar='<aggregate>',
@@ -88,7 +88,7 @@ class CreateAggregate(command.ShowOne):
88
88
  _description = _("Create a new aggregate")
89
89
 
90
90
  def get_parser(self, prog_name):
91
- parser = super(CreateAggregate, self).get_parser(prog_name)
91
+ parser = super().get_parser(prog_name)
92
92
  parser.add_argument(
93
93
  "name", metavar="<name>", help=_("New aggregate name")
94
94
  )
@@ -136,7 +136,7 @@ class DeleteAggregate(command.Command):
136
136
  _description = _("Delete existing aggregate(s)")
137
137
 
138
138
  def get_parser(self, prog_name):
139
- parser = super(DeleteAggregate, self).get_parser(prog_name)
139
+ parser = super().get_parser(prog_name)
140
140
  parser.add_argument(
141
141
  'aggregate',
142
142
  metavar='<aggregate>',
@@ -178,7 +178,7 @@ class ListAggregate(command.Lister):
178
178
  _description = _("List all aggregates")
179
179
 
180
180
  def get_parser(self, prog_name):
181
- parser = super(ListAggregate, self).get_parser(prog_name)
181
+ parser = super().get_parser(prog_name)
182
182
  parser.add_argument(
183
183
  '--long',
184
184
  action='store_true',
@@ -192,47 +192,53 @@ class ListAggregate(command.Lister):
192
192
 
193
193
  aggregates = list(compute_client.aggregates())
194
194
 
195
+ if sdk_utils.supports_microversion(compute_client, '2.41'):
196
+ column_headers = ("ID", "UUID")
197
+ columns = ("id", "uuid")
198
+ else:
199
+ column_headers = ("ID",)
200
+ columns = ("id",)
201
+
202
+ column_headers += (
203
+ "Name",
204
+ "Availability Zone",
205
+ )
206
+ columns += (
207
+ "name",
208
+ "availability_zone",
209
+ )
210
+
195
211
  if parsed_args.long:
196
212
  # Remove availability_zone from metadata because Nova doesn't
197
213
  for aggregate in aggregates:
198
214
  if 'availability_zone' in aggregate.metadata:
199
215
  aggregate.metadata.pop('availability_zone')
200
- # This is the easiest way to change column headers
201
- column_headers = (
202
- "ID",
203
- "Name",
204
- "Availability Zone",
216
+
217
+ column_headers += (
205
218
  "Properties",
206
219
  "Hosts",
207
220
  )
208
- columns = (
209
- "ID",
210
- "Name",
211
- "Availability Zone",
212
- "Metadata",
213
- "Hosts",
214
- )
215
- else:
216
- column_headers = columns = (
217
- "ID",
218
- "Name",
219
- "Availability Zone",
221
+ columns += (
222
+ "metadata",
223
+ "hosts",
220
224
  )
221
225
 
222
- data = (
223
- utils.get_item_properties(
224
- s, columns, formatters=_aggregate_formatters
225
- )
226
- for s in aggregates
226
+ return (
227
+ column_headers,
228
+ (
229
+ utils.get_item_properties(
230
+ s, columns, formatters=_aggregate_formatters
231
+ )
232
+ for s in aggregates
233
+ ),
227
234
  )
228
- return (column_headers, data)
229
235
 
230
236
 
231
237
  class RemoveAggregateHost(command.ShowOne):
232
238
  _description = _("Remove host from aggregate")
233
239
 
234
240
  def get_parser(self, prog_name):
235
- parser = super(RemoveAggregateHost, self).get_parser(prog_name)
241
+ parser = super().get_parser(prog_name)
236
242
  parser.add_argument(
237
243
  'aggregate',
238
244
  metavar='<aggregate>',
@@ -265,7 +271,7 @@ class SetAggregate(command.Command):
265
271
  _description = _("Set aggregate properties")
266
272
 
267
273
  def get_parser(self, prog_name):
268
- parser = super(SetAggregate, self).get_parser(prog_name)
274
+ parser = super().get_parser(prog_name)
269
275
  parser.add_argument(
270
276
  'aggregate',
271
277
  metavar='<aggregate>',
@@ -337,7 +343,7 @@ class ShowAggregate(command.ShowOne):
337
343
  _description = _("Display aggregate details")
338
344
 
339
345
  def get_parser(self, prog_name):
340
- parser = super(ShowAggregate, self).get_parser(prog_name)
346
+ parser = super().get_parser(prog_name)
341
347
  parser.add_argument(
342
348
  'aggregate',
343
349
  metavar='<aggregate>',
@@ -366,7 +372,7 @@ class UnsetAggregate(command.Command):
366
372
  _description = _("Unset aggregate properties")
367
373
 
368
374
  def get_parser(self, prog_name):
369
- parser = super(UnsetAggregate, self).get_parser(prog_name)
375
+ parser = super().get_parser(prog_name)
370
376
  parser.add_argument(
371
377
  "aggregate",
372
378
  metavar="<aggregate>",
@@ -403,7 +409,7 @@ class CacheImageForAggregate(command.Command):
403
409
  # not be anything to return.
404
410
 
405
411
  def get_parser(self, prog_name):
406
- parser = super(CacheImageForAggregate, self).get_parser(prog_name)
412
+ parser = super().get_parser(prog_name)
407
413
  parser.add_argument(
408
414
  'aggregate',
409
415
  metavar='<aggregate>',
@@ -36,7 +36,7 @@ class ShowConsoleLog(command.Command):
36
36
  _description = _("Show server's console output")
37
37
 
38
38
  def get_parser(self, prog_name):
39
- parser = super(ShowConsoleLog, self).get_parser(prog_name)
39
+ parser = super().get_parser(prog_name)
40
40
  parser.add_argument(
41
41
  'server',
42
42
  metavar='<server>',
@@ -78,7 +78,7 @@ class ShowConsoleURL(command.ShowOne):
78
78
  _description = _("Show server's remote console URL")
79
79
 
80
80
  def get_parser(self, prog_name):
81
- parser = super(ShowConsoleURL, self).get_parser(prog_name)
81
+ parser = super().get_parser(prog_name)
82
82
  parser.add_argument(
83
83
  'server',
84
84
  metavar='<server>',
@@ -58,7 +58,7 @@ class CreateFlavor(command.ShowOne):
58
58
  _description = _("Create new flavor")
59
59
 
60
60
  def get_parser(self, prog_name):
61
- parser = super(CreateFlavor, self).get_parser(prog_name)
61
+ parser = super().get_parser(prog_name)
62
62
  parser.add_argument(
63
63
  "name", metavar="<flavor-name>", help=_("New flavor name")
64
64
  )
@@ -214,7 +214,7 @@ class DeleteFlavor(command.Command):
214
214
  _description = _("Delete flavor(s)")
215
215
 
216
216
  def get_parser(self, prog_name):
217
- parser = super(DeleteFlavor, self).get_parser(prog_name)
217
+ parser = super().get_parser(prog_name)
218
218
  parser.add_argument(
219
219
  "flavor",
220
220
  metavar="<flavor>",
@@ -253,7 +253,7 @@ class ListFlavor(command.Lister):
253
253
  _description = _("List flavors")
254
254
 
255
255
  def get_parser(self, prog_name):
256
- parser = super(ListFlavor, self).get_parser(prog_name)
256
+ parser = super().get_parser(prog_name)
257
257
  public_group = parser.add_mutually_exclusive_group()
258
258
  public_group.add_argument(
259
259
  "--public",
@@ -375,7 +375,7 @@ class SetFlavor(command.Command):
375
375
  _description = _("Set flavor properties")
376
376
 
377
377
  def get_parser(self, prog_name):
378
- parser = super(SetFlavor, self).get_parser(prog_name)
378
+ parser = super().get_parser(prog_name)
379
379
  parser.add_argument(
380
380
  "flavor",
381
381
  metavar="<flavor>",
@@ -491,7 +491,7 @@ class ShowFlavor(command.ShowOne):
491
491
  _description = _("Display flavor details")
492
492
 
493
493
  def get_parser(self, prog_name):
494
- parser = super(ShowFlavor, self).get_parser(prog_name)
494
+ parser = super().get_parser(prog_name)
495
495
  parser.add_argument(
496
496
  "flavor",
497
497
  metavar="<flavor>",
@@ -540,7 +540,7 @@ class UnsetFlavor(command.Command):
540
540
  _description = _("Unset flavor properties")
541
541
 
542
542
  def get_parser(self, prog_name):
543
- parser = super(UnsetFlavor, self).get_parser(prog_name)
543
+ parser = super().get_parser(prog_name)
544
544
  parser.add_argument(
545
545
  "flavor",
546
546
  metavar="<flavor>",