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
@@ -13,22 +13,62 @@
13
13
 
14
14
  """Identity v3 Assignment action implementations"""
15
15
 
16
+ from openstack import exceptions as sdk_exceptions
16
17
  from osc_lib.command import command
17
- from osc_lib import utils
18
18
 
19
19
  from openstackclient.i18n import _
20
20
  from openstackclient.identity import common
21
21
 
22
22
 
23
+ def _format_role_assignment_(assignment, include_names):
24
+ def _get_names(attr):
25
+ return (
26
+ (
27
+ attr['name']
28
+ + (
29
+ "@" + domain['name']
30
+ if (domain := attr.get('domain'))
31
+ else ''
32
+ )
33
+ )
34
+ or ''
35
+ if attr
36
+ else ''
37
+ )
38
+
39
+ def _get_ids(attr):
40
+ return attr['id'] or '' if attr else ''
41
+
42
+ func = _get_names if include_names else _get_ids
43
+ return (
44
+ func(assignment.role),
45
+ func(assignment.user),
46
+ func(assignment.group),
47
+ func(assignment.scope.get('project')),
48
+ func(assignment.scope.get('domain')),
49
+ 'all' if assignment.scope.get("system") else '',
50
+ assignment.scope.get("OS-INHERIT:inherited_to") == 'projects',
51
+ )
52
+
53
+
54
+ def _find_sdk_id(find_command, name_or_id, **kwargs):
55
+ try:
56
+ return find_command(
57
+ name_or_id=name_or_id, ignore_missing=False, **kwargs
58
+ ).id
59
+ except sdk_exceptions.ForbiddenException:
60
+ return name_or_id
61
+
62
+
23
63
  class ListRoleAssignment(command.Lister):
24
64
  _description = _("List role assignments")
25
65
 
26
66
  def get_parser(self, prog_name):
27
- parser = super(ListRoleAssignment, self).get_parser(prog_name)
67
+ parser = super().get_parser(prog_name)
28
68
  parser.add_argument(
29
69
  '--effective',
30
70
  action="store_true",
31
- default=False,
71
+ default=None,
32
72
  help=_('Returns only effective role assignments'),
33
73
  )
34
74
  parser.add_argument(
@@ -88,81 +128,74 @@ class ListRoleAssignment(command.Lister):
88
128
  )
89
129
  return parser
90
130
 
91
- def _as_tuple(self, assignment):
92
- return (
93
- assignment.role,
94
- assignment.user,
95
- assignment.group,
96
- assignment.project,
97
- assignment.domain,
98
- assignment.system,
99
- assignment.inherited,
100
- )
101
-
102
131
  def take_action(self, parsed_args):
103
- identity_client = self.app.client_manager.identity
132
+ identity_client = self.app.client_manager.sdk_connection.identity
104
133
  auth_ref = self.app.client_manager.auth_ref
105
134
 
106
- role = None
135
+ role_id = None
107
136
  role_domain_id = None
108
137
  if parsed_args.role_domain:
109
- role_domain_id = common.find_domain(
110
- identity_client, parsed_args.role_domain
111
- ).id
138
+ role_domain_id = _find_sdk_id(
139
+ identity_client.find_domain,
140
+ name_or_id=parsed_args.role_domain,
141
+ )
112
142
  if parsed_args.role:
113
- role = utils.find_resource(
114
- identity_client.roles,
115
- parsed_args.role,
143
+ role_id = _find_sdk_id(
144
+ identity_client.find_role,
145
+ name_or_id=parsed_args.role,
116
146
  domain_id=role_domain_id,
117
147
  )
118
148
 
119
- user = None
149
+ user_id = None
120
150
  if parsed_args.user:
121
- user = common.find_user(
122
- identity_client,
123
- parsed_args.user,
124
- parsed_args.user_domain,
151
+ user_id = _find_sdk_id(
152
+ identity_client.find_user,
153
+ name_or_id=parsed_args.user,
154
+ domain_id=parsed_args.user_domain,
125
155
  )
126
156
  elif parsed_args.authuser:
127
157
  if auth_ref:
128
- user = common.find_user(identity_client, auth_ref.user_id)
158
+ user_id = _find_sdk_id(
159
+ identity_client.find_user,
160
+ name_or_id=auth_ref.user_id,
161
+ )
129
162
 
130
163
  system = None
131
164
  if parsed_args.system:
132
165
  system = parsed_args.system
133
166
 
134
- domain = None
167
+ domain_id = None
135
168
  if parsed_args.domain:
136
- domain = common.find_domain(
137
- identity_client,
138
- parsed_args.domain,
169
+ domain_id = _find_sdk_id(
170
+ identity_client.find_domain,
171
+ name_or_id=parsed_args.domain,
139
172
  )
140
173
 
141
- project = None
174
+ project_id = None
142
175
  if parsed_args.project:
143
- project = common.find_project(
144
- identity_client,
145
- common._get_token_resource(
176
+ project_id = _find_sdk_id(
177
+ identity_client.find_project,
178
+ name_or_id=common._get_token_resource(
146
179
  identity_client, 'project', parsed_args.project
147
180
  ),
148
- parsed_args.project_domain,
181
+ domain_id=parsed_args.project_domain,
149
182
  )
150
183
  elif parsed_args.authproject:
151
184
  if auth_ref:
152
- project = common.find_project(
153
- identity_client, auth_ref.project_id
185
+ project_id = _find_sdk_id(
186
+ identity_client.find_project,
187
+ name_or_id=auth_ref.project_id,
154
188
  )
155
189
 
156
- group = None
190
+ group_id = None
157
191
  if parsed_args.group:
158
- group = common.find_group(
159
- identity_client,
160
- parsed_args.group,
161
- parsed_args.group_domain,
192
+ group_id = _find_sdk_id(
193
+ identity_client.find_group,
194
+ name_or_id=parsed_args.group,
195
+ domain_id=parsed_args.group_domain,
162
196
  )
163
197
 
164
- include_names = True if parsed_args.names else False
165
- effective = True if parsed_args.effective else False
198
+ include_names = True if parsed_args.names else None
166
199
  columns = (
167
200
  'Role',
168
201
  'User',
@@ -174,104 +207,23 @@ class ListRoleAssignment(command.Lister):
174
207
  )
175
208
 
176
209
  inherited_to = 'projects' if parsed_args.inherited else None
177
- data = identity_client.role_assignments.list(
178
- domain=domain,
179
- user=user,
180
- group=group,
181
- project=project,
182
- system=system,
183
- role=role,
184
- effective=effective,
185
- os_inherit_extension_inherited_to=inherited_to,
210
+
211
+ data = identity_client.role_assignments(
212
+ role_id=role_id,
213
+ user_id=user_id,
214
+ group_id=group_id,
215
+ scope_project_id=project_id,
216
+ scope_domain_id=domain_id,
217
+ scope_system=system,
218
+ effective=parsed_args.effective,
186
219
  include_names=include_names,
220
+ inherited_to=inherited_to,
187
221
  )
188
222
 
189
223
  data_parsed = []
190
224
  for assignment in data:
191
- # Removing the extra "scope" layer in the assignment json
192
- scope = assignment.scope
193
- if 'project' in scope:
194
- if include_names:
195
- prj = '@'.join(
196
- [
197
- scope['project']['name'],
198
- scope['project']['domain']['name'],
199
- ]
200
- )
201
- setattr(assignment, 'project', prj)
202
- else:
203
- setattr(assignment, 'project', scope['project']['id'])
204
- assignment.domain = ''
205
- assignment.system = ''
206
- elif 'domain' in scope:
207
- if include_names:
208
- setattr(assignment, 'domain', scope['domain']['name'])
209
- else:
210
- setattr(assignment, 'domain', scope['domain']['id'])
211
- assignment.project = ''
212
- assignment.system = ''
213
- elif 'system' in scope:
214
- # NOTE(lbragstad): If, or when, keystone supports role
215
- # assignments on subsets of a system, this will have to evolve
216
- # to handle that case instead of hardcoding to the entire
217
- # system.
218
- setattr(assignment, 'system', 'all')
219
- assignment.domain = ''
220
- assignment.project = ''
221
- else:
222
- assignment.system = ''
223
- assignment.domain = ''
224
- assignment.project = ''
225
-
226
- inherited = scope.get('OS-INHERIT:inherited_to') == 'projects'
227
- assignment.inherited = inherited
228
-
229
- del assignment.scope
230
-
231
- if hasattr(assignment, 'user'):
232
- if include_names:
233
- usr = '@'.join(
234
- [
235
- assignment.user['name'],
236
- assignment.user['domain']['name'],
237
- ]
238
- )
239
- setattr(assignment, 'user', usr)
240
- else:
241
- setattr(assignment, 'user', assignment.user['id'])
242
- assignment.group = ''
243
- elif hasattr(assignment, 'group'):
244
- if include_names:
245
- grp = '@'.join(
246
- [
247
- assignment.group['name'],
248
- assignment.group['domain']['name'],
249
- ]
250
- )
251
- setattr(assignment, 'group', grp)
252
- else:
253
- setattr(assignment, 'group', assignment.group['id'])
254
- assignment.user = ''
255
- else:
256
- assignment.user = ''
257
- assignment.group = ''
258
-
259
- if hasattr(assignment, 'role'):
260
- if include_names:
261
- # TODO(henry-nash): If this is a domain specific role it
262
- # would be good show this as role@domain, although this
263
- # domain info is not yet included in the response from the
264
- # server. Although we could get it by re-reading the role
265
- # from the ID, let's wait until the server does the right
266
- # thing.
267
- setattr(assignment, 'role', assignment.role['name'])
268
- else:
269
- setattr(assignment, 'role', assignment.role['id'])
270
- else:
271
- assignment.role = ''
272
-
273
- # Creating a tuple from data object fields
274
- # (including the blank ones)
275
- data_parsed.append(self._as_tuple(assignment))
225
+ data_parsed.append(
226
+ _format_role_assignment_(assignment, include_names)
227
+ )
276
228
 
277
229
  return columns, tuple(data_parsed)
@@ -28,11 +28,36 @@ from openstackclient.identity import common
28
28
  LOG = logging.getLogger(__name__)
29
29
 
30
30
 
31
+ def _format_service(service):
32
+ columns = (
33
+ 'id',
34
+ 'name',
35
+ 'type',
36
+ 'is_enabled',
37
+ 'description',
38
+ )
39
+ column_headers = (
40
+ 'ID',
41
+ 'Name',
42
+ 'Type',
43
+ 'Enabled',
44
+ 'Description',
45
+ )
46
+
47
+ return (
48
+ column_headers,
49
+ utils.get_item_properties(
50
+ service,
51
+ columns,
52
+ ),
53
+ )
54
+
55
+
31
56
  class CreateService(command.ShowOne):
32
57
  _description = _("Create new service")
33
58
 
34
59
  def get_parser(self, prog_name):
35
- parser = super(CreateService, self).get_parser(prog_name)
60
+ parser = super().get_parser(prog_name)
36
61
  parser.add_argument(
37
62
  'type',
38
63
  metavar='<type>',
@@ -52,38 +77,37 @@ class CreateService(command.ShowOne):
52
77
  enable_group.add_argument(
53
78
  '--enable',
54
79
  action='store_true',
80
+ dest='is_enabled',
81
+ default=True,
55
82
  help=_('Enable service (default)'),
56
83
  )
57
84
  enable_group.add_argument(
58
85
  '--disable',
59
- action='store_true',
86
+ action='store_false',
87
+ dest='is_enabled',
88
+ default=True,
60
89
  help=_('Disable service'),
61
90
  )
62
91
  return parser
63
92
 
64
93
  def take_action(self, parsed_args):
65
- identity_client = self.app.client_manager.identity
66
-
67
- enabled = True
68
- if parsed_args.disable:
69
- enabled = False
94
+ identity_client = self.app.client_manager.sdk_connection.identity
70
95
 
71
- service = identity_client.services.create(
96
+ service = identity_client.create_service(
72
97
  name=parsed_args.name,
73
98
  type=parsed_args.type,
74
99
  description=parsed_args.description,
75
- enabled=enabled,
100
+ is_enabled=parsed_args.is_enabled,
76
101
  )
77
102
 
78
- service._info.pop('links')
79
- return zip(*sorted(service._info.items()))
103
+ return _format_service(service)
80
104
 
81
105
 
82
106
  class DeleteService(command.Command):
83
107
  _description = _("Delete service(s)")
84
108
 
85
109
  def get_parser(self, prog_name):
86
- parser = super(DeleteService, self).get_parser(prog_name)
110
+ parser = super().get_parser(prog_name)
87
111
  parser.add_argument(
88
112
  'service',
89
113
  metavar='<service>',
@@ -93,12 +117,12 @@ class DeleteService(command.Command):
93
117
  return parser
94
118
 
95
119
  def take_action(self, parsed_args):
96
- identity_client = self.app.client_manager.identity
120
+ identity_client = self.app.client_manager.sdk_connection.identity
97
121
  result = 0
98
122
  for i in parsed_args.service:
99
123
  try:
100
- service = common.find_service(identity_client, i)
101
- identity_client.services.delete(service.id)
124
+ service = common.find_service_sdk(identity_client, i)
125
+ identity_client.delete_service(service.id)
102
126
  except Exception as e:
103
127
  result += 1
104
128
  LOG.error(
@@ -121,7 +145,7 @@ class ListService(command.Lister):
121
145
  _description = _("List services")
122
146
 
123
147
  def get_parser(self, prog_name):
124
- parser = super(ListService, self).get_parser(prog_name)
148
+ parser = super().get_parser(prog_name)
125
149
  parser.add_argument(
126
150
  '--long',
127
151
  action='store_true',
@@ -131,13 +155,19 @@ class ListService(command.Lister):
131
155
  return parser
132
156
 
133
157
  def take_action(self, parsed_args):
158
+ identity_client = self.app.client_manager.sdk_connection.identity
159
+
134
160
  if parsed_args.long:
135
- columns = ('ID', 'Name', 'Type', 'Description', 'Enabled')
161
+ columns = ('id', 'name', 'type', 'description', 'is_enabled')
162
+ column_headers = ('ID', 'Name', 'Type', 'Description', 'Enabled')
136
163
  else:
137
- columns = ('ID', 'Name', 'Type')
138
- data = self.app.client_manager.identity.services.list()
164
+ columns = ('id', 'name', 'type')
165
+ column_headers = ('ID', 'Name', 'Type')
166
+
167
+ data = identity_client.services()
168
+
139
169
  return (
140
- columns,
170
+ column_headers,
141
171
  (utils.get_item_properties(s, columns) for s in data),
142
172
  )
143
173
 
@@ -146,7 +176,7 @@ class SetService(command.Command):
146
176
  _description = _("Set service properties")
147
177
 
148
178
  def get_parser(self, prog_name):
149
- parser = super(SetService, self).get_parser(prog_name)
179
+ parser = super().get_parser(prog_name)
150
180
  parser.add_argument(
151
181
  'service',
152
182
  metavar='<service>',
@@ -171,19 +201,23 @@ class SetService(command.Command):
171
201
  enable_group.add_argument(
172
202
  '--enable',
173
203
  action='store_true',
204
+ dest='is_enabled',
205
+ default=None,
174
206
  help=_('Enable service'),
175
207
  )
176
208
  enable_group.add_argument(
177
209
  '--disable',
178
- action='store_true',
210
+ action='store_false',
211
+ dest='is_enabled',
212
+ default=None,
179
213
  help=_('Disable service'),
180
214
  )
181
215
  return parser
182
216
 
183
217
  def take_action(self, parsed_args):
184
- identity_client = self.app.client_manager.identity
218
+ identity_client = self.app.client_manager.sdk_connection.identity
185
219
 
186
- service = common.find_service(identity_client, parsed_args.service)
220
+ service = common.find_service_sdk(identity_client, parsed_args.service)
187
221
  kwargs = {}
188
222
  if parsed_args.type:
189
223
  kwargs['type'] = parsed_args.type
@@ -191,19 +225,16 @@ class SetService(command.Command):
191
225
  kwargs['name'] = parsed_args.name
192
226
  if parsed_args.description:
193
227
  kwargs['description'] = parsed_args.description
194
- if parsed_args.enable:
195
- kwargs['enabled'] = True
196
- if parsed_args.disable:
197
- kwargs['enabled'] = False
228
+ kwargs['is_enabled'] = parsed_args.is_enabled
198
229
 
199
- identity_client.services.update(service.id, **kwargs)
230
+ identity_client.update_service(service.id, **kwargs)
200
231
 
201
232
 
202
233
  class ShowService(command.ShowOne):
203
234
  _description = _("Display service details")
204
235
 
205
236
  def get_parser(self, prog_name):
206
- parser = super(ShowService, self).get_parser(prog_name)
237
+ parser = super().get_parser(prog_name)
207
238
  parser.add_argument(
208
239
  'service',
209
240
  metavar='<service>',
@@ -212,9 +243,8 @@ class ShowService(command.ShowOne):
212
243
  return parser
213
244
 
214
245
  def take_action(self, parsed_args):
215
- identity_client = self.app.client_manager.identity
246
+ identity_client = self.app.client_manager.sdk_connection.identity
216
247
 
217
- service = common.find_service(identity_client, parsed_args.service)
248
+ service = common.find_service_sdk(identity_client, parsed_args.service)
218
249
 
219
- service._info.pop('links')
220
- return zip(*sorted(service._info.items()))
250
+ return _format_service(service)
@@ -29,7 +29,7 @@ class CreateServiceProvider(command.ShowOne):
29
29
  _description = _("Create new service provider")
30
30
 
31
31
  def get_parser(self, prog_name):
32
- parser = super(CreateServiceProvider, self).get_parser(prog_name)
32
+ parser = super().get_parser(prog_name)
33
33
  parser.add_argument(
34
34
  'service_provider_id',
35
35
  metavar='<name>',
@@ -94,7 +94,7 @@ class DeleteServiceProvider(command.Command):
94
94
  _description = _("Delete service provider(s)")
95
95
 
96
96
  def get_parser(self, prog_name):
97
- parser = super(DeleteServiceProvider, self).get_parser(prog_name)
97
+ parser = super().get_parser(prog_name)
98
98
  parser.add_argument(
99
99
  'service_provider',
100
100
  metavar='<service-provider>',
@@ -153,7 +153,7 @@ class SetServiceProvider(command.Command):
153
153
  _description = _("Set service provider properties")
154
154
 
155
155
  def get_parser(self, prog_name):
156
- parser = super(SetServiceProvider, self).get_parser(prog_name)
156
+ parser = super().get_parser(prog_name)
157
157
  parser.add_argument(
158
158
  'service_provider',
159
159
  metavar='<service-provider>',
@@ -213,7 +213,7 @@ class ShowServiceProvider(command.ShowOne):
213
213
  _description = _("Display service provider details")
214
214
 
215
215
  def get_parser(self, prog_name):
216
- parser = super(ShowServiceProvider, self).get_parser(prog_name)
216
+ parser = super().get_parser(prog_name)
217
217
  parser.add_argument(
218
218
  'service_provider',
219
219
  metavar='<service-provider>',
@@ -129,7 +129,7 @@ def update_tags_in_args(parsed_args, obj, args):
129
129
  args['tags'] = []
130
130
  obj.tags = []
131
131
  if parsed_args.remove_tag:
132
- args['tags'] = list(set(obj.tags) - set(parsed_args.remove_tag))
132
+ args['tags'] = sorted(set(obj.tags) - set(parsed_args.remove_tag))
133
133
  return
134
134
  if parsed_args.tags:
135
- args['tags'] = list(set(obj.tags).union(set(parsed_args.tags)))
135
+ args['tags'] = sorted(set(obj.tags).union(set(parsed_args.tags)))
@@ -27,7 +27,7 @@ class AuthorizeRequestToken(command.ShowOne):
27
27
  _description = _("Authorize a request token")
28
28
 
29
29
  def get_parser(self, prog_name):
30
- parser = super(AuthorizeRequestToken, self).get_parser(prog_name)
30
+ parser = super().get_parser(prog_name)
31
31
  parser.add_argument(
32
32
  '--request-key',
33
33
  metavar='<request-key>',
@@ -70,7 +70,7 @@ class CreateAccessToken(command.ShowOne):
70
70
  _description = _("Create an access token")
71
71
 
72
72
  def get_parser(self, prog_name):
73
- parser = super(CreateAccessToken, self).get_parser(prog_name)
73
+ parser = super().get_parser(prog_name)
74
74
  parser.add_argument(
75
75
  '--consumer-key',
76
76
  metavar='<consumer-key>',
@@ -119,7 +119,7 @@ class CreateRequestToken(command.ShowOne):
119
119
  _description = _("Create a request token")
120
120
 
121
121
  def get_parser(self, prog_name):
122
- parser = super(CreateRequestToken, self).get_parser(prog_name)
122
+ parser = super().get_parser(prog_name)
123
123
  parser.add_argument(
124
124
  '--consumer-key',
125
125
  metavar='<consumer-key>',
@@ -178,7 +178,7 @@ class IssueToken(command.ShowOne):
178
178
  required_scope = False
179
179
 
180
180
  def get_parser(self, prog_name):
181
- parser = super(IssueToken, self).get_parser(prog_name)
181
+ parser = super().get_parser(prog_name)
182
182
  return parser
183
183
 
184
184
  def take_action(self, parsed_args):
@@ -214,7 +214,7 @@ class RevokeToken(command.Command):
214
214
  _description = _("Revoke existing token")
215
215
 
216
216
  def get_parser(self, prog_name):
217
- parser = super(RevokeToken, self).get_parser(prog_name)
217
+ parser = super().get_parser(prog_name)
218
218
  parser.add_argument(
219
219
  'token',
220
220
  metavar='<token>',
@@ -32,7 +32,7 @@ class CreateTrust(command.ShowOne):
32
32
  _description = _("Create new trust")
33
33
 
34
34
  def get_parser(self, prog_name):
35
- parser = super(CreateTrust, self).get_parser(prog_name)
35
+ parser = super().get_parser(prog_name)
36
36
  parser.add_argument(
37
37
  'trustor',
38
38
  metavar='<trustor-user>',
@@ -150,7 +150,7 @@ class DeleteTrust(command.Command):
150
150
  _description = _("Delete trust(s)")
151
151
 
152
152
  def get_parser(self, prog_name):
153
- parser = super(DeleteTrust, self).get_parser(prog_name)
153
+ parser = super().get_parser(prog_name)
154
154
  parser.add_argument(
155
155
  'trust',
156
156
  metavar='<trust>',
@@ -300,7 +300,7 @@ class ShowTrust(command.ShowOne):
300
300
  _description = _("Display trust details")
301
301
 
302
302
  def get_parser(self, prog_name):
303
- parser = super(ShowTrust, self).get_parser(prog_name)
303
+ parser = super().get_parser(prog_name)
304
304
  parser.add_argument(
305
305
  'trust',
306
306
  metavar='<trust>',