python-openstackclient 6.6.1__py3-none-any.whl → 7.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 (337) 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 +16 -4
  7. openstackclient/common/configuration.py +1 -1
  8. openstackclient/common/extension.py +1 -1
  9. openstackclient/common/limits.py +66 -32
  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 +281 -410
  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 +9 -9
  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 +4 -3
  22. openstackclient/compute/v2/keypair.py +7 -8
  23. openstackclient/compute/v2/server.py +478 -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 +127 -45
  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/shell.py +4 -6
  107. openstackclient/tests/functional/base.py +1 -1
  108. openstackclient/tests/functional/common/test_extension.py +1 -1
  109. openstackclient/tests/functional/common/test_help.py +2 -2
  110. openstackclient/tests/functional/common/test_module.py +1 -1
  111. openstackclient/tests/functional/common/test_quota.py +43 -61
  112. openstackclient/tests/functional/compute/v2/common.py +2 -2
  113. openstackclient/tests/functional/compute/v2/test_flavor.py +2 -2
  114. openstackclient/tests/functional/compute/v2/test_keypair.py +1 -1
  115. openstackclient/tests/functional/compute/v2/test_server.py +5 -5
  116. openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
  117. openstackclient/tests/functional/identity/v2/common.py +3 -3
  118. openstackclient/tests/functional/identity/v3/common.py +14 -6
  119. openstackclient/tests/functional/identity/v3/test_application_credential.py +13 -19
  120. openstackclient/tests/functional/identity/v3/test_domain.py +1 -3
  121. openstackclient/tests/functional/identity/v3/test_endpoint.py +1 -1
  122. openstackclient/tests/functional/identity/v3/test_idp.py +1 -1
  123. openstackclient/tests/functional/identity/v3/test_limit.py +2 -2
  124. openstackclient/tests/functional/identity/v3/test_region.py +1 -3
  125. openstackclient/tests/functional/identity/v3/test_registered_limit.py +1 -1
  126. openstackclient/tests/functional/identity/v3/test_role.py +2 -2
  127. openstackclient/tests/functional/identity/v3/test_role_assignment.py +210 -0
  128. openstackclient/tests/functional/identity/v3/test_service.py +4 -6
  129. openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -3
  130. openstackclient/tests/functional/image/base.py +1 -1
  131. openstackclient/tests/functional/image/v2/test_image.py +1 -1
  132. openstackclient/tests/functional/image/v2/test_info.py +1 -1
  133. openstackclient/tests/functional/network/v2/common.py +4 -6
  134. openstackclient/tests/functional/network/v2/test_network.py +5 -3
  135. openstackclient/tests/functional/network/v2/test_network_agent.py +7 -5
  136. openstackclient/tests/functional/network/v2/test_network_qos_rule.py +4 -4
  137. openstackclient/tests/functional/network/v2/test_port.py +11 -7
  138. openstackclient/tests/functional/network/v2/test_router.py +2 -2
  139. openstackclient/tests/functional/object/v1/common.py +1 -1
  140. openstackclient/tests/functional/object/v1/test_container.py +3 -3
  141. openstackclient/tests/functional/object/v1/test_object.py +9 -13
  142. openstackclient/tests/functional/volume/base.py +1 -1
  143. openstackclient/tests/functional/volume/v1/test_service.py +1 -1
  144. openstackclient/tests/functional/volume/v1/test_snapshot.py +2 -2
  145. openstackclient/tests/functional/volume/v1/test_transfer_request.py +2 -2
  146. openstackclient/tests/functional/volume/v1/test_volume_type.py +1 -1
  147. openstackclient/tests/functional/volume/v2/test_service.py +2 -2
  148. openstackclient/tests/functional/volume/v2/test_volume_backup.py +2 -2
  149. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +2 -2
  150. openstackclient/tests/functional/volume/v2/test_volume_type.py +1 -1
  151. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +2 -2
  152. openstackclient/tests/functional/volume/v3/test_volume_type.py +1 -1
  153. openstackclient/tests/unit/api/fakes.py +1 -1
  154. openstackclient/tests/unit/api/test_api.py +2 -2
  155. openstackclient/tests/unit/api/test_compute_v2.py +522 -707
  156. openstackclient/tests/unit/api/test_image_v1.py +1 -1
  157. openstackclient/tests/unit/api/test_image_v2.py +1 -1
  158. openstackclient/tests/unit/api/test_object_store_v1.py +4 -4
  159. openstackclient/tests/unit/common/test_limits.py +73 -35
  160. openstackclient/tests/unit/common/test_logs.py +2 -2
  161. openstackclient/tests/unit/common/test_module.py +4 -2
  162. openstackclient/tests/unit/common/test_project_cleanup.py +31 -6
  163. openstackclient/tests/unit/common/test_quota.py +490 -630
  164. openstackclient/tests/unit/compute/v2/fakes.py +37 -286
  165. openstackclient/tests/unit/compute/v2/test_agent.py +189 -147
  166. openstackclient/tests/unit/compute/v2/test_aggregate.py +18 -16
  167. openstackclient/tests/unit/compute/v2/test_console.py +4 -5
  168. openstackclient/tests/unit/compute/v2/test_flavor.py +59 -68
  169. openstackclient/tests/unit/compute/v2/test_host.py +83 -54
  170. openstackclient/tests/unit/compute/v2/test_hypervisor.py +28 -31
  171. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
  172. openstackclient/tests/unit/compute/v2/test_keypair.py +65 -50
  173. openstackclient/tests/unit/compute/v2/test_server.py +2895 -2459
  174. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
  175. openstackclient/tests/unit/compute/v2/test_server_event.py +14 -39
  176. openstackclient/tests/unit/compute/v2/test_server_group.py +28 -29
  177. openstackclient/tests/unit/compute/v2/test_server_migration.py +43 -68
  178. openstackclient/tests/unit/compute/v2/test_server_volume.py +17 -34
  179. openstackclient/tests/unit/compute/v2/test_service.py +34 -52
  180. openstackclient/tests/unit/compute/v2/test_usage.py +4 -4
  181. openstackclient/tests/unit/fakes.py +11 -11
  182. openstackclient/tests/unit/identity/v2_0/fakes.py +27 -10
  183. openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -3
  184. openstackclient/tests/unit/identity/v2_0/test_endpoint.py +7 -7
  185. openstackclient/tests/unit/identity/v2_0/test_project.py +8 -8
  186. openstackclient/tests/unit/identity/v2_0/test_role.py +10 -10
  187. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +4 -4
  188. openstackclient/tests/unit/identity/v2_0/test_service.py +6 -6
  189. openstackclient/tests/unit/identity/v2_0/test_token.py +4 -4
  190. openstackclient/tests/unit/identity/v2_0/test_user.py +8 -8
  191. openstackclient/tests/unit/identity/v3/fakes.py +59 -20
  192. openstackclient/tests/unit/identity/v3/test_access_rule.py +5 -5
  193. openstackclient/tests/unit/identity/v3/test_application_credential.py +212 -235
  194. openstackclient/tests/unit/identity/v3/test_catalog.py +3 -3
  195. openstackclient/tests/unit/identity/v3/test_consumer.py +7 -8
  196. openstackclient/tests/unit/identity/v3/test_credential.py +9 -9
  197. openstackclient/tests/unit/identity/v3/test_domain.py +8 -8
  198. openstackclient/tests/unit/identity/v3/test_endpoint.py +13 -13
  199. openstackclient/tests/unit/identity/v3/test_endpoint_group.py +12 -14
  200. openstackclient/tests/unit/identity/v3/test_group.py +12 -12
  201. openstackclient/tests/unit/identity/v3/test_identity_provider.py +8 -8
  202. openstackclient/tests/unit/identity/v3/test_implied_role.py +5 -5
  203. openstackclient/tests/unit/identity/v3/test_limit.py +7 -7
  204. openstackclient/tests/unit/identity/v3/test_mappings.py +7 -7
  205. openstackclient/tests/unit/identity/v3/test_oauth.py +5 -5
  206. openstackclient/tests/unit/identity/v3/test_project.py +16 -16
  207. openstackclient/tests/unit/identity/v3/test_protocol.py +7 -7
  208. openstackclient/tests/unit/identity/v3/test_region.py +7 -7
  209. openstackclient/tests/unit/identity/v3/test_registered_limit.py +12 -13
  210. openstackclient/tests/unit/identity/v3/test_role.py +13 -13
  211. openstackclient/tests/unit/identity/v3/test_role_assignment.py +410 -331
  212. openstackclient/tests/unit/identity/v3/test_service.py +93 -97
  213. openstackclient/tests/unit/identity/v3/test_service_provider.py +7 -7
  214. openstackclient/tests/unit/identity/v3/test_token.py +4 -4
  215. openstackclient/tests/unit/identity/v3/test_trust.py +9 -9
  216. openstackclient/tests/unit/identity/v3/test_unscoped_saml.py +4 -4
  217. openstackclient/tests/unit/identity/v3/test_user.py +299 -327
  218. openstackclient/tests/unit/image/v1/test_image.py +6 -6
  219. openstackclient/tests/unit/image/v2/fakes.py +46 -9
  220. openstackclient/tests/unit/image/v2/test_cache.py +2 -2
  221. openstackclient/tests/unit/image/v2/test_image.py +3 -3
  222. openstackclient/tests/unit/image/v2/test_metadef_objects.py +62 -0
  223. openstackclient/tests/unit/image/v2/test_metadef_resource_type_association.py +131 -0
  224. openstackclient/tests/unit/integ/base.py +1 -1
  225. openstackclient/tests/unit/integ/cli/test_project.py +4 -4
  226. openstackclient/tests/unit/integ/cli/test_shell.py +7 -7
  227. openstackclient/tests/unit/network/test_common.py +12 -21
  228. openstackclient/tests/unit/network/v2/fakes.py +64 -130
  229. openstackclient/tests/unit/network/v2/test_address_group.py +15 -15
  230. openstackclient/tests/unit/network/v2/test_address_scope.py +13 -13
  231. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +49 -27
  232. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +40 -38
  233. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +15 -15
  234. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +4 -7
  235. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +3 -5
  236. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +11 -11
  237. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -6
  238. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +11 -21
  239. openstackclient/tests/unit/network/v2/test_local_ip.py +7 -7
  240. openstackclient/tests/unit/network/v2/test_local_ip_association.py +3 -5
  241. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -13
  242. openstackclient/tests/unit/network/v2/test_network.py +23 -28
  243. openstackclient/tests/unit/network/v2/test_network_agent.py +17 -21
  244. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +8 -8
  245. openstackclient/tests/unit/network/v2/test_network_compute.py +66 -65
  246. openstackclient/tests/unit/network/v2/test_network_flavor.py +17 -19
  247. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +13 -13
  248. openstackclient/tests/unit/network/v2/test_network_meter.py +11 -11
  249. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +11 -11
  250. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +11 -21
  251. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +51 -77
  252. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +5 -9
  253. openstackclient/tests/unit/network/v2/test_network_rbac.py +12 -12
  254. openstackclient/tests/unit/network/v2/test_network_segment.py +11 -15
  255. openstackclient/tests/unit/network/v2/test_network_segment_range.py +11 -13
  256. openstackclient/tests/unit/network/v2/test_network_service_provider.py +3 -5
  257. openstackclient/tests/unit/network/v2/test_network_trunk.py +11 -11
  258. openstackclient/tests/unit/network/v2/test_port.py +22 -25
  259. openstackclient/tests/unit/network/v2/test_router.py +721 -51
  260. openstackclient/tests/unit/network/v2/test_security_group_compute.py +65 -49
  261. openstackclient/tests/unit/network/v2/test_security_group_network.py +15 -15
  262. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +57 -45
  263. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +11 -19
  264. openstackclient/tests/unit/network/v2/test_subnet.py +29 -25
  265. openstackclient/tests/unit/network/v2/test_subnet_pool.py +15 -15
  266. openstackclient/tests/unit/object/v1/fakes.py +1 -1
  267. openstackclient/tests/unit/object/v1/test_container.py +5 -5
  268. openstackclient/tests/unit/object/v1/test_container_all.py +6 -6
  269. openstackclient/tests/unit/object/v1/test_object.py +3 -3
  270. openstackclient/tests/unit/object/v1/test_object_all.py +5 -5
  271. openstackclient/tests/unit/test_shell.py +5 -5
  272. openstackclient/tests/unit/utils.py +4 -1
  273. openstackclient/tests/unit/volume/test_find_resource.py +2 -2
  274. openstackclient/tests/unit/volume/v1/fakes.py +5 -6
  275. openstackclient/tests/unit/volume/v1/test_volume.py +5 -4
  276. openstackclient/tests/unit/volume/v2/fakes.py +39 -259
  277. openstackclient/tests/unit/volume/v2/test_consistency_group_snapshot.py +5 -5
  278. openstackclient/tests/unit/volume/v2/test_qos_specs.py +9 -9
  279. openstackclient/tests/unit/volume/v2/test_volume.py +21 -87
  280. openstackclient/tests/unit/volume/v2/test_volume_backup.py +7 -368
  281. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +1 -1
  282. openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +0 -44
  283. openstackclient/tests/unit/volume/v2/test_volume_type.py +6 -87
  284. openstackclient/tests/unit/volume/v3/fakes.py +505 -22
  285. openstackclient/tests/unit/volume/v3/test_block_storage_cleanup.py +2 -3
  286. openstackclient/tests/unit/volume/v3/test_block_storage_cluster.py +10 -11
  287. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +10 -6
  288. openstackclient/tests/unit/volume/v3/test_block_storage_manage.py +25 -17
  289. openstackclient/tests/unit/volume/v3/test_block_storage_resource_filter.py +6 -32
  290. openstackclient/tests/unit/volume/v3/test_service.py +271 -0
  291. openstackclient/tests/unit/volume/v3/test_volume.py +2177 -33
  292. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +48 -52
  293. openstackclient/tests/unit/volume/v3/test_volume_backup.py +892 -0
  294. openstackclient/tests/unit/volume/v3/test_volume_group.py +19 -20
  295. openstackclient/tests/unit/volume/v3/test_volume_group_snapshot.py +14 -34
  296. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +13 -16
  297. openstackclient/tests/unit/volume/v3/test_volume_message.py +10 -11
  298. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +161 -0
  299. openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +425 -0
  300. openstackclient/tests/unit/volume/v3/test_volume_type.py +1109 -0
  301. openstackclient/volume/v1/qos_specs.py +7 -7
  302. openstackclient/volume/v1/service.py +2 -2
  303. openstackclient/volume/v1/volume.py +12 -12
  304. openstackclient/volume/v1/volume_backup.py +7 -7
  305. openstackclient/volume/v1/volume_snapshot.py +8 -8
  306. openstackclient/volume/v1/volume_transfer_request.py +5 -5
  307. openstackclient/volume/v1/volume_type.py +7 -7
  308. openstackclient/volume/v2/backup_record.py +2 -2
  309. openstackclient/volume/v2/consistency_group.py +7 -9
  310. openstackclient/volume/v2/consistency_group_snapshot.py +4 -12
  311. openstackclient/volume/v2/qos_specs.py +7 -7
  312. openstackclient/volume/v2/service.py +2 -2
  313. openstackclient/volume/v2/volume.py +80 -80
  314. openstackclient/volume/v2/volume_backend.py +2 -2
  315. openstackclient/volume/v2/volume_backup.py +7 -217
  316. openstackclient/volume/v2/volume_host.py +2 -2
  317. openstackclient/volume/v2/volume_snapshot.py +8 -8
  318. openstackclient/volume/v2/volume_transfer_request.py +5 -37
  319. openstackclient/volume/v2/volume_type.py +7 -89
  320. openstackclient/volume/v3/service.py +56 -0
  321. openstackclient/volume/v3/volume.py +971 -0
  322. openstackclient/volume/v3/volume_attachment.py +31 -29
  323. openstackclient/volume/v3/volume_backup.py +670 -0
  324. openstackclient/volume/v3/volume_message.py +1 -1
  325. openstackclient/volume/v3/volume_snapshot.py +97 -0
  326. openstackclient/volume/v3/volume_transfer_request.py +233 -0
  327. openstackclient/volume/v3/volume_type.py +967 -0
  328. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/AUTHORS +4 -0
  329. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/METADATA +2 -3
  330. python_openstackclient-7.0.0.dist-info/RECORD +502 -0
  331. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/entry_points.txt +33 -27
  332. python_openstackclient-7.0.0.dist-info/pbr.json +1 -0
  333. python_openstackclient-6.6.1.dist-info/RECORD +0 -489
  334. python_openstackclient-6.6.1.dist-info/pbr.json +0 -1
  335. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/LICENSE +0 -0
  336. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/WHEEL +0 -0
  337. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/top_level.txt +0 -0
@@ -18,7 +18,7 @@
18
18
  import copy
19
19
  import logging
20
20
 
21
- from keystoneauth1 import exceptions as ks_exc
21
+ from openstack import exceptions as sdk_exc
22
22
  from osc_lib.command import command
23
23
  from osc_lib import exceptions
24
24
  from osc_lib import utils
@@ -30,6 +30,33 @@ from openstackclient.identity import common
30
30
  LOG = logging.getLogger(__name__)
31
31
 
32
32
 
33
+ def _format_user(user):
34
+ columns = (
35
+ 'default_project_id',
36
+ 'domain_id',
37
+ 'email',
38
+ 'is_enabled',
39
+ 'id',
40
+ 'name',
41
+ 'description',
42
+ 'password_expires_at',
43
+ )
44
+ column_headers = (
45
+ 'default_project_id',
46
+ 'domain_id',
47
+ 'email',
48
+ 'enabled',
49
+ 'id',
50
+ 'name',
51
+ 'description',
52
+ 'password_expires_at',
53
+ )
54
+ return (
55
+ column_headers,
56
+ utils.get_item_properties(user, columns),
57
+ )
58
+
59
+
33
60
  def _get_options_for_user(identity_client, parsed_args):
34
61
  options = {}
35
62
  if parsed_args.ignore_lockout_failure_attempts:
@@ -161,7 +188,7 @@ class CreateUser(command.ShowOne):
161
188
  _description = _("Create new user")
162
189
 
163
190
  def get_parser(self, prog_name):
164
- parser = super(CreateUser, self).get_parser(prog_name)
191
+ parser = super().get_parser(prog_name)
165
192
  parser.add_argument(
166
193
  'name',
167
194
  metavar='<name>',
@@ -220,25 +247,26 @@ class CreateUser(command.ShowOne):
220
247
  return parser
221
248
 
222
249
  def take_action(self, parsed_args):
223
- identity_client = self.app.client_manager.identity
224
-
225
- project_id = None
226
- if parsed_args.project:
227
- project_id = common.find_project(
228
- identity_client,
229
- parsed_args.project,
230
- parsed_args.project_domain,
231
- ).id
250
+ identity_client = self.app.client_manager.sdk_connection.identity
232
251
 
233
252
  domain_id = None
234
253
  if parsed_args.domain:
235
- domain_id = common.find_domain(
236
- identity_client, parsed_args.domain
254
+ domain_id = identity_client.find_domain(
255
+ name_or_id=parsed_args.domain,
256
+ ignore_missing=False,
237
257
  ).id
238
258
 
239
- enabled = True
259
+ project_id = None
260
+ if parsed_args.project:
261
+ project_id = identity_client.find_project(
262
+ name_or_id=parsed_args.project,
263
+ ignore_missing=False,
264
+ domain_id=domain_id,
265
+ ).id
266
+
267
+ is_enabled = True
240
268
  if parsed_args.disable:
241
- enabled = False
269
+ is_enabled = False
242
270
  if parsed_args.password_prompt:
243
271
  parsed_args.password = utils.get_password(self.app.stdin)
244
272
 
@@ -252,36 +280,35 @@ class CreateUser(command.ShowOne):
252
280
  options = _get_options_for_user(identity_client, parsed_args)
253
281
 
254
282
  try:
255
- user = identity_client.users.create(
283
+ user = identity_client.create_user(
284
+ default_project_id=project_id,
285
+ description=parsed_args.description,
286
+ domain_id=domain_id,
287
+ email=parsed_args.email,
288
+ is_enabled=is_enabled,
256
289
  name=parsed_args.name,
257
- domain=domain_id,
258
- default_project=project_id,
259
290
  password=parsed_args.password,
260
- email=parsed_args.email,
261
- description=parsed_args.description,
262
- enabled=enabled,
263
291
  options=options,
264
292
  )
265
- except ks_exc.Conflict:
293
+ except sdk_exc.ConflictException:
266
294
  if parsed_args.or_show:
267
- user = utils.find_resource(
268
- identity_client.users,
269
- parsed_args.name,
295
+ user = identity_client.find_user(
296
+ name_or_id=parsed_args.name,
270
297
  domain_id=domain_id,
298
+ ignore_missing=False,
271
299
  )
272
300
  LOG.info(_('Returning existing user %s'), user.name)
273
301
  else:
274
302
  raise
275
303
 
276
- user._info.pop('links')
277
- return zip(*sorted(user._info.items()))
304
+ return _format_user(user)
278
305
 
279
306
 
280
307
  class DeleteUser(command.Command):
281
308
  _description = _("Delete user(s)")
282
309
 
283
310
  def get_parser(self, prog_name):
284
- parser = super(DeleteUser, self).get_parser(prog_name)
311
+ parser = super().get_parser(prog_name)
285
312
  parser.add_argument(
286
313
  'users',
287
314
  metavar='<user>',
@@ -296,21 +323,28 @@ class DeleteUser(command.Command):
296
323
  return parser
297
324
 
298
325
  def take_action(self, parsed_args):
299
- identity_client = self.app.client_manager.identity
326
+ identity_client = self.app.client_manager.sdk_connection.identity
300
327
 
301
328
  domain = None
302
329
  if parsed_args.domain:
303
- domain = common.find_domain(identity_client, parsed_args.domain)
330
+ domain = identity_client.find_domain(
331
+ name_or_id=parsed_args.domain,
332
+ ignore_missing=True,
333
+ )
304
334
  errors = 0
305
335
  for user in parsed_args.users:
306
336
  try:
307
337
  if domain is not None:
308
- user_obj = utils.find_resource(
309
- identity_client.users, user, domain_id=domain.id
338
+ user_obj = identity_client.find_user(
339
+ name_or_id=user,
340
+ domain_id=domain.id,
341
+ ignore_missing=False,
310
342
  )
311
343
  else:
312
- user_obj = utils.find_resource(identity_client.users, user)
313
- identity_client.users.delete(user_obj.id)
344
+ user_obj = identity_client.find_user(
345
+ name_or_id=user, ignore_missing=False
346
+ )
347
+ identity_client.delete_user(user_obj.id, ignore_missing=False)
314
348
  except Exception as e:
315
349
  errors += 1
316
350
  LOG.error(
@@ -334,7 +368,7 @@ class ListUser(command.Lister):
334
368
  _description = _("List users")
335
369
 
336
370
  def get_parser(self, prog_name):
337
- parser = super(ListUser, self).get_parser(prog_name)
371
+ parser = super().get_parser(prog_name)
338
372
  parser.add_argument(
339
373
  '--domain',
340
374
  metavar='<domain>',
@@ -360,32 +394,36 @@ class ListUser(command.Lister):
360
394
  return parser
361
395
 
362
396
  def take_action(self, parsed_args):
363
- identity_client = self.app.client_manager.identity
397
+ identity_client = self.app.client_manager.sdk_connection.identity
364
398
 
365
399
  domain = None
366
400
  if parsed_args.domain:
367
- domain = common.find_domain(identity_client, parsed_args.domain).id
401
+ domain = identity_client.find_domain(
402
+ name_or_id=parsed_args.domain,
403
+ ).id
368
404
 
369
405
  group = None
370
406
  if parsed_args.group:
371
- group = common.find_group(
372
- identity_client, parsed_args.group, parsed_args.domain
407
+ group = identity_client.find_group(
408
+ name_or_id=parsed_args.group,
409
+ domain_id=parsed_args.domain,
410
+ ignore_missing=False,
373
411
  ).id
374
412
 
375
413
  if parsed_args.project:
376
414
  if domain is not None:
377
- project = utils.find_resource(
378
- identity_client.projects,
379
- parsed_args.project,
415
+ project = identity_client.find_project(
416
+ name_or_id=parsed_args.project,
380
417
  domain_id=domain,
418
+ ignore_missing=False,
381
419
  ).id
382
420
  else:
383
- project = utils.find_resource(
384
- identity_client.projects,
385
- parsed_args.project,
421
+ project = identity_client.find_project(
422
+ name_or_id=parsed_args.project,
423
+ ignore_missing=False,
386
424
  ).id
387
425
 
388
- assignments = identity_client.role_assignments.list(
426
+ assignments = identity_client.role_assignments_filter(
389
427
  project=project
390
428
  )
391
429
 
@@ -394,21 +432,25 @@ class ListUser(command.Lister):
394
432
  # are looking for any role, let's just track unique user IDs.
395
433
  user_ids = set()
396
434
  for assignment in assignments:
397
- if hasattr(assignment, 'user'):
435
+ if assignment.user:
398
436
  user_ids.add(assignment.user['id'])
399
437
 
400
438
  # NOTE(stevemar): Call find_resource once we have unique IDs, so
401
439
  # it's fewer trips to the Identity API, then collect the data.
402
440
  data = []
403
441
  for user_id in user_ids:
404
- user = utils.find_resource(identity_client.users, user_id)
442
+ user = identity_client.find_user(user_id, ignore_missing=False)
405
443
  data.append(user)
406
444
 
407
- else:
408
- data = identity_client.users.list(
409
- domain=domain,
445
+ elif parsed_args.group:
446
+ data = identity_client.group_users(
447
+ domain_id=domain,
410
448
  group=group,
411
449
  )
450
+ else:
451
+ data = identity_client.users(
452
+ domain_id=domain,
453
+ )
412
454
 
413
455
  # Column handling
414
456
  if parsed_args.long:
@@ -419,11 +461,12 @@ class ListUser(command.Lister):
419
461
  'Domain Id',
420
462
  'Description',
421
463
  'Email',
422
- 'Enabled',
464
+ 'Is Enabled',
423
465
  ]
424
466
  column_headers = copy.deepcopy(columns)
425
467
  column_headers[2] = 'Project'
426
468
  column_headers[3] = 'Domain'
469
+ column_headers[6] = 'Enabled'
427
470
  else:
428
471
  columns = ['ID', 'Name']
429
472
  column_headers = columns
@@ -445,7 +488,7 @@ class SetUser(command.Command):
445
488
  _description = _("Set user properties")
446
489
 
447
490
  def get_parser(self, prog_name):
448
- parser = super(SetUser, self).get_parser(prog_name)
491
+ parser = super().get_parser(prog_name)
449
492
  parser.add_argument(
450
493
  'user',
451
494
  metavar='<user>',
@@ -507,7 +550,7 @@ class SetUser(command.Command):
507
550
  return parser
508
551
 
509
552
  def take_action(self, parsed_args):
510
- identity_client = self.app.client_manager.identity
553
+ identity_client = self.app.client_manager.sdk_connection.identity
511
554
 
512
555
  if parsed_args.password_prompt:
513
556
  parsed_args.password = utils.get_password(self.app.stdin)
@@ -524,14 +567,19 @@ class SetUser(command.Command):
524
567
  identity_client, 'user', parsed_args.user, parsed_args.domain
525
568
  )
526
569
  if parsed_args.domain:
527
- domain = common.find_domain(identity_client, parsed_args.domain)
528
- user = utils.find_resource(
529
- identity_client.users, user_str, domain_id=domain.id
570
+ domain = identity_client.find_domain(
571
+ name_or_id=parsed_args.domain,
572
+ ignore_missing=False,
573
+ )
574
+ user = identity_client.find_user(
575
+ name_or_id=user_str,
576
+ domain_id=domain.id,
577
+ ignore_missing=False,
530
578
  )
531
579
  else:
532
- user = utils.find_resource(
533
- identity_client.users,
534
- parsed_args.user,
580
+ user = identity_client.find_user(
581
+ name_or_id=parsed_args.user,
582
+ ignore_missing=False,
535
583
  )
536
584
 
537
585
  kwargs = {}
@@ -544,23 +592,27 @@ class SetUser(command.Command):
544
592
  if parsed_args.description:
545
593
  kwargs['description'] = parsed_args.description
546
594
  if parsed_args.project:
547
- project_id = common.find_project(
548
- identity_client,
549
- parsed_args.project,
550
- parsed_args.project_domain,
595
+ project_domain_id = identity_client.find_domain(
596
+ name_or_id=parsed_args.project_domain,
597
+ ignore_missing=False,
598
+ ).id
599
+ project_id = identity_client.find_project(
600
+ name_or_id=parsed_args.project,
601
+ ignore_missing=False,
602
+ domain_id=project_domain_id,
551
603
  ).id
552
- kwargs['default_project'] = project_id
553
- kwargs['enabled'] = user.enabled
604
+ kwargs['default_project_id'] = project_id
605
+ kwargs['is_enabled'] = user.is_enabled
554
606
  if parsed_args.enable:
555
- kwargs['enabled'] = True
607
+ kwargs['is_enabled'] = True
556
608
  if parsed_args.disable:
557
- kwargs['enabled'] = False
609
+ kwargs['is_enabled'] = False
558
610
 
559
611
  options = _get_options_for_user(identity_client, parsed_args)
560
612
  if options:
561
613
  kwargs['options'] = options
562
614
 
563
- identity_client.users.update(user.id, **kwargs)
615
+ identity_client.update_user(user=user, **kwargs)
564
616
 
565
617
 
566
618
  class SetPasswordUser(command.Command):
@@ -569,7 +621,7 @@ class SetPasswordUser(command.Command):
569
621
  required_scope = False
570
622
 
571
623
  def get_parser(self, prog_name):
572
- parser = super(SetPasswordUser, self).get_parser(prog_name)
624
+ parser = super().get_parser(prog_name)
573
625
  parser.add_argument(
574
626
  '--password',
575
627
  metavar='<new-password>',
@@ -583,7 +635,7 @@ class SetPasswordUser(command.Command):
583
635
  return parser
584
636
 
585
637
  def take_action(self, parsed_args):
586
- identity_client = self.app.client_manager.identity
638
+ identity_client = self.app.client_manager.sdk_connection.identity
587
639
 
588
640
  # FIXME(gyee): there are two scenarios:
589
641
  #
@@ -625,14 +677,16 @@ class SetPasswordUser(command.Command):
625
677
  )
626
678
  )
627
679
 
628
- identity_client.users.update_password(current_password, password)
680
+ identity_client.update_user(
681
+ current_password=current_password, password=password
682
+ )
629
683
 
630
684
 
631
685
  class ShowUser(command.ShowOne):
632
686
  _description = _("Display user details")
633
687
 
634
688
  def get_parser(self, prog_name):
635
- parser = super(ShowUser, self).get_parser(prog_name)
689
+ parser = super().get_parser(prog_name)
636
690
  parser.add_argument(
637
691
  'user',
638
692
  metavar='<user>',
@@ -646,18 +700,28 @@ class ShowUser(command.ShowOne):
646
700
  return parser
647
701
 
648
702
  def take_action(self, parsed_args):
649
- identity_client = self.app.client_manager.identity
703
+ identity_client = self.app.client_manager.sdk_connection.identity
650
704
 
651
705
  user_str = common._get_token_resource(
652
706
  identity_client, 'user', parsed_args.user, parsed_args.domain
653
707
  )
708
+
709
+ domain = None
654
710
  if parsed_args.domain:
655
- domain = common.find_domain(identity_client, parsed_args.domain)
656
- user = utils.find_resource(
657
- identity_client.users, user_str, domain_id=domain.id
711
+ domain = identity_client.find_domain(
712
+ name_or_id=parsed_args.domain,
713
+ ignore_missing=True,
714
+ )
715
+ if domain:
716
+ user = identity_client.find_user(
717
+ name_or_id=user_str,
718
+ domain_id=domain.id,
719
+ ignore_missing=False,
658
720
  )
659
721
  else:
660
- user = utils.find_resource(identity_client.users, user_str)
722
+ user = identity_client.find_user(
723
+ name_or_id=user_str,
724
+ ignore_missing=False,
725
+ )
661
726
 
662
- user._info.pop('links')
663
- return zip(*sorted(user._info.items()))
727
+ return _format_user(user)
@@ -19,19 +19,19 @@ from osc_lib import utils
19
19
 
20
20
  from openstackclient.i18n import _
21
21
 
22
-
23
22
  LOG = logging.getLogger(__name__)
24
23
 
25
24
  DEFAULT_API_VERSION = '2'
26
25
  API_VERSION_OPTION = 'os_image_api_version'
27
- API_NAME = "image"
26
+ API_NAME = 'image'
28
27
  API_VERSIONS = {
29
- "1": "openstack.connection.Connection",
30
- "2": "openstack.connection.Connection",
28
+ '1': 'openstack.connection.Connection',
29
+ '2': 'openstack.connection.Connection',
31
30
  }
32
31
 
33
32
 
34
33
  def make_client(instance):
34
+ """Returns an image service client."""
35
35
  LOG.debug(
36
36
  'Image client initialized using OpenStack SDK: %s',
37
37
  instance.sdk_connection.image,
@@ -16,7 +16,6 @@
16
16
  """Image V1 Action Implementations"""
17
17
 
18
18
  import argparse
19
- import io
20
19
  import logging
21
20
  import os
22
21
  import sys
@@ -110,7 +109,7 @@ class CreateImage(command.ShowOne):
110
109
  _description = _("Create/upload an image")
111
110
 
112
111
  def get_parser(self, prog_name):
113
- parser = super(CreateImage, self).get_parser(prog_name)
112
+ parser = super().get_parser(prog_name)
114
113
  parser.add_argument(
115
114
  "name",
116
115
  metavar="<image-name>",
@@ -320,7 +319,7 @@ class CreateImage(command.ShowOne):
320
319
  elif parsed_args.file:
321
320
  # Send an open file handle to glanceclient so it will
322
321
  # do a chunked transfer
323
- kwargs["data"] = io.open(parsed_args.file, "rb")
322
+ kwargs["data"] = open(parsed_args.file, "rb")
324
323
  else:
325
324
  # Read file from stdin
326
325
  if not sys.stdin.isatty():
@@ -363,7 +362,7 @@ class DeleteImage(command.Command):
363
362
  _description = _("Delete image(s)")
364
363
 
365
364
  def get_parser(self, prog_name):
366
- parser = super(DeleteImage, self).get_parser(prog_name)
365
+ parser = super().get_parser(prog_name)
367
366
  parser.add_argument(
368
367
  "images",
369
368
  metavar="<image>",
@@ -403,7 +402,7 @@ class ListImage(command.Lister):
403
402
  _description = _("List available images")
404
403
 
405
404
  def get_parser(self, prog_name):
406
- parser = super(ListImage, self).get_parser(prog_name)
405
+ parser = super().get_parser(prog_name)
407
406
  public_group = parser.add_mutually_exclusive_group()
408
407
  public_group.add_argument(
409
408
  "--public",
@@ -534,7 +533,7 @@ class SaveImage(command.Command):
534
533
  _description = _("Save an image locally")
535
534
 
536
535
  def get_parser(self, prog_name):
537
- parser = super(SaveImage, self).get_parser(prog_name)
536
+ parser = super().get_parser(prog_name)
538
537
  parser.add_argument(
539
538
  "--file",
540
539
  metavar="<filename>",
@@ -564,7 +563,7 @@ class SetImage(command.Command):
564
563
  _description = _("Set image properties")
565
564
 
566
565
  def get_parser(self, prog_name):
567
- parser = super(SetImage, self).get_parser(prog_name)
566
+ parser = super().get_parser(prog_name)
568
567
  parser.add_argument(
569
568
  "image",
570
569
  metavar="<image>",
@@ -771,7 +770,7 @@ class SetImage(command.Command):
771
770
  elif parsed_args.file:
772
771
  # Send an open file handle to glanceclient so it will
773
772
  # do a chunked transfer
774
- kwargs["data"] = io.open(parsed_args.file, "rb")
773
+ kwargs["data"] = open(parsed_args.file, "rb")
775
774
  else:
776
775
  # Read file from stdin
777
776
  if sys.stdin.isatty() is not True:
@@ -809,7 +808,7 @@ class ShowImage(command.ShowOne):
809
808
  _description = _("Display image details")
810
809
 
811
810
  def get_parser(self, prog_name):
812
- parser = super(ShowImage, self).get_parser(prog_name)
811
+ parser = super().get_parser(prog_name)
813
812
  parser.add_argument(
814
813
  "--human-readable",
815
814
  default=False,
@@ -36,16 +36,16 @@ def _format_image_cache(cached_images):
36
36
  for image in cached_images[item]:
37
37
  image_obj = copy.deepcopy(image)
38
38
  image_obj['state'] = 'cached'
39
- image_obj[
40
- 'last_accessed'
41
- ] = datetime.datetime.utcfromtimestamp(
42
- image['last_accessed']
43
- ).isoformat()
44
- image_obj[
45
- 'last_modified'
46
- ] = datetime.datetime.utcfromtimestamp(
47
- image['last_modified']
48
- ).isoformat()
39
+ image_obj['last_accessed'] = (
40
+ datetime.datetime.utcfromtimestamp(
41
+ image['last_accessed']
42
+ ).isoformat()
43
+ )
44
+ image_obj['last_modified'] = (
45
+ datetime.datetime.utcfromtimestamp(
46
+ image['last_modified']
47
+ ).isoformat()
48
+ )
49
49
  image_list.append(image_obj)
50
50
  elif item == "queued_images":
51
51
  for image in cached_images[item]:
@@ -194,6 +194,7 @@ class ClearCachedImage(command.Command):
194
194
  "--cache",
195
195
  action="store_const",
196
196
  const="cache",
197
+ default="both",
197
198
  dest="target",
198
199
  help=_("Clears all the cached images"),
199
200
  )
@@ -201,6 +202,7 @@ class ClearCachedImage(command.Command):
201
202
  "--queue",
202
203
  action="store_const",
203
204
  const="queue",
205
+ default="both",
204
206
  dest="target",
205
207
  help=_("Clears all the queued images"),
206
208
  )
@@ -223,3 +223,47 @@ class SetMetadefObject(command.Command):
223
223
  image_client.update_metadef_object(
224
224
  object, parsed_args.namespace, **kwargs
225
225
  )
226
+
227
+
228
+ class ShowMetadefObjectProperty(command.ShowOne):
229
+ _description = _(
230
+ "Describe a specific metadata definitions property inside an object."
231
+ )
232
+
233
+ def get_parser(self, prog_name):
234
+ parser = super().get_parser(prog_name)
235
+ parser.add_argument(
236
+ "namespace",
237
+ metavar="<namespace_name>",
238
+ help=_("Namespace (name) for the namespace"),
239
+ )
240
+ parser.add_argument(
241
+ "object",
242
+ metavar="<object_name>",
243
+ help=_("Name of an object."),
244
+ )
245
+ parser.add_argument(
246
+ "property",
247
+ help=_("Name of the property."),
248
+ )
249
+ return parser
250
+
251
+ def take_action(self, parsed_args):
252
+ image_client = self.app.client_manager.image
253
+
254
+ namespace_name = parsed_args.namespace
255
+ object_name = parsed_args.object
256
+
257
+ obj = image_client.get_metadef_object(object_name, namespace_name)
258
+ try:
259
+ prop = obj['properties'][parsed_args.property]
260
+ prop['name'] = parsed_args.property
261
+
262
+ except KeyError:
263
+ msg = _('Property %s not found in object %s.') % (
264
+ parsed_args.property,
265
+ parsed_args.object,
266
+ )
267
+ raise exceptions.CommandError(msg)
268
+
269
+ return zip(*sorted(prop.items()))