From 5a12532a0e758b6b3e9d6457ee3c7f28b4164886 Mon Sep 17 00:00:00 2001 From: matteo <matteo.difazio@garr.it> Date: Fri, 23 Feb 2024 18:29:13 +0100 Subject: [PATCH] update custom openstacksdk --- CONTRIBUTING.rst | 45 + HACKING.rst | 63 ++ LICENSE | 175 ++++ MANIFEST.in | 6 + README.rst | 313 +++++++ SHADE-MERGE-TODO.rst | 137 +++ babel.cfg | 1 + bindep.txt | 8 + devstack/plugin.sh | 54 ++ doc/requirements.txt | 5 + doc/source/conf.py | 98 +++ doc/source/contributor/clouds.yaml | 37 + doc/source/contributor/coding.rst | 104 +++ doc/source/contributor/contributing.rst | 1 + .../create/examples/resource/fake.py | 26 + .../create/examples/resource/fake_service.py | 12 + doc/source/contributor/create/resource.rst | 186 ++++ doc/source/contributor/history.rst | 49 ++ doc/source/contributor/index.rst | 112 +++ doc/source/contributor/layout.rst | 104 +++ doc/source/contributor/layout.txt | 12 + doc/source/contributor/setup.rst | 116 +++ doc/source/contributor/testing.rst | 108 +++ doc/source/glossary.rst | 104 +++ doc/source/index.rst | 45 + doc/source/install/index.rst | 17 + doc/source/releasenotes.rst | 5 + doc/source/user/config/configuration.rst | 499 +++++++++++ doc/source/user/config/index.rst | 12 + doc/source/user/config/network-config.rst | 67 ++ doc/source/user/config/reference.rst | 14 + doc/source/user/config/using.rst | 52 ++ doc/source/user/config/vendor-support.rst | 348 ++++++++ doc/source/user/connection.rst | 26 + doc/source/user/examples | 1 + doc/source/user/exceptions.rst | 15 + doc/source/user/guides/baremetal.rst | 67 ++ doc/source/user/guides/block_storage.rst | 9 + doc/source/user/guides/clustering.rst | 37 + doc/source/user/guides/clustering/action.rst | 47 + doc/source/user/guides/clustering/cluster.rst | 193 +++++ doc/source/user/guides/clustering/event.rst | 47 + doc/source/user/guides/clustering/node.rst | 120 +++ doc/source/user/guides/clustering/policy.rst | 102 +++ .../user/guides/clustering/policy_type.rst | 45 + doc/source/user/guides/clustering/profile.rst | 105 +++ .../user/guides/clustering/profile_type.rst | 44 + .../user/guides/clustering/receiver.rst | 100 +++ doc/source/user/guides/compute.rst | 89 ++ doc/source/user/guides/connect.rst | 32 + .../user/guides/connect_from_config.rst | 72 ++ doc/source/user/guides/database.rst | 8 + doc/source/user/guides/dns.rst | 18 + doc/source/user/guides/identity.rst | 111 +++ doc/source/user/guides/image.rst | 97 +++ doc/source/user/guides/intro.rst | 102 +++ doc/source/user/guides/key_manager.rst | 56 ++ doc/source/user/guides/logging.rst | 106 +++ doc/source/user/guides/message.rst | 8 + doc/source/user/guides/network.rst | 142 +++ doc/source/user/guides/object_store.rst | 211 +++++ doc/source/user/guides/orchestration.rst | 9 + doc/source/user/guides/shared_file_system.rst | 200 +++++ doc/source/user/guides/stats.rst | 88 ++ doc/source/user/index.rst | 195 +++++ doc/source/user/microversions.rst | 99 +++ doc/source/user/model.rst | 66 ++ doc/source/user/multi-cloud-demo.rst | 813 ++++++++++++++++++ doc/source/user/proxies/accelerator.rst | 43 + doc/source/user/proxies/baremetal.rst | 107 +++ .../user/proxies/baremetal_introspection.rst | 21 + doc/source/user/proxies/block_storage_v2.rst | 76 ++ doc/source/user/proxies/block_storage_v3.rst | 167 ++++ doc/source/user/proxies/clustering.rst | 119 +++ doc/source/user/proxies/compute.rst | 181 ++++ .../container_infrastructure_management.rst | 35 + doc/source/user/proxies/database.rst | 43 + doc/source/user/proxies/dns.rst | 70 ++ doc/source/user/proxies/identity_v2.rst | 42 + doc/source/user/proxies/identity_v3.rst | 124 +++ doc/source/user/proxies/image_v1.rst | 18 + doc/source/user/proxies/image_v2.rst | 110 +++ doc/source/user/proxies/key_manager.rst | 39 + doc/source/user/proxies/load_balancer_v2.rst | 123 +++ doc/source/user/proxies/message_v2.rst | 42 + doc/source/user/proxies/network.rst | 359 ++++++++ doc/source/user/proxies/object_store.rst | 37 + doc/source/user/proxies/orchestration.rst | 48 ++ doc/source/user/proxies/placement.rst | 49 ++ .../user/proxies/shared_file_system.rst | 194 +++++ doc/source/user/proxies/workflow.rst | 35 + doc/source/user/resource.rst | 22 + .../user/resources/accelerator/index.rst | 11 + .../accelerator/v2/accelerator_request.rst | 13 + .../resources/accelerator/v2/deployable.rst | 13 + .../user/resources/accelerator/v2/device.rst | 13 + .../accelerator/v2/device_profile.rst | 14 + doc/source/user/resources/baremetal/index.rst | 16 + .../resources/baremetal/v1/allocation.rst | 12 + .../user/resources/baremetal/v1/chassis.rst | 12 + .../user/resources/baremetal/v1/conductor.rst | 13 + .../baremetal/v1/deploy_templates.rst | 13 + .../user/resources/baremetal/v1/driver.rst | 12 + .../user/resources/baremetal/v1/node.rst | 35 + .../user/resources/baremetal/v1/port.rst | 12 + .../resources/baremetal/v1/port_group.rst | 12 + .../baremetal/v1/volume_connector.rst | 13 + .../resources/baremetal/v1/volume_target.rst | 13 + .../baremetal_introspection/index.rst | 8 + .../v1/introspection.rst | 13 + .../v1/introspection_rule.rst | 13 + .../user/resources/block_storage/index.rst | 20 + .../resources/block_storage/v2/backup.rst | 12 + .../block_storage/v2/capabilities.rst | 12 + .../resources/block_storage/v2/limits.rst | 37 + .../resources/block_storage/v2/quota_set.rst | 12 + .../resources/block_storage/v2/snapshot.rst | 21 + .../user/resources/block_storage/v2/stats.rst | 12 + .../user/resources/block_storage/v2/type.rst | 13 + .../resources/block_storage/v2/volume.rst | 12 + .../resources/block_storage/v3/attachment.rst | 13 + .../block_storage/v3/availability_zone.rst | 13 + .../resources/block_storage/v3/backup.rst | 12 + .../v3/block_storage_summary.rst | 14 + .../block_storage/v3/capabilities.rst | 12 + .../resources/block_storage/v3/extension.rst | 12 + .../user/resources/block_storage/v3/group.rst | 12 + .../block_storage/v3/group_snapshot.rst | 13 + .../resources/block_storage/v3/group_type.rst | 12 + .../resources/block_storage/v3/limits.rst | 37 + .../resources/block_storage/v3/quota_set.rst | 12 + .../block_storage/v3/resource_filter.rst | 13 + .../resources/block_storage/v3/service.rst | 12 + .../resources/block_storage/v3/snapshot.rst | 21 + .../user/resources/block_storage/v3/stats.rst | 12 + .../resources/block_storage/v3/transfer.rst | 13 + .../user/resources/block_storage/v3/type.rst | 21 + .../resources/block_storage/v3/volume.rst | 12 + .../user/resources/clustering/index.rst | 17 + .../user/resources/clustering/v1/action.rst | 12 + .../resources/clustering/v1/build_info.rst | 12 + .../user/resources/clustering/v1/cluster.rst | 12 + .../clustering/v1/cluster_policy.rst | 13 + .../user/resources/clustering/v1/event.rst | 12 + .../user/resources/clustering/v1/node.rst | 12 + .../user/resources/clustering/v1/policy.rst | 12 + .../resources/clustering/v1/policy_type.rst | 12 + .../user/resources/clustering/v1/profile.rst | 12 + .../resources/clustering/v1/profile_type.rst | 12 + .../user/resources/clustering/v1/receiver.rst | 12 + doc/source/user/resources/compute/index.rst | 9 + .../user/resources/compute/v2/aggregate.rst | 12 + .../compute/v2/availability_zone.rst | 13 + .../user/resources/compute/v2/extension.rst | 12 + .../user/resources/compute/v2/flavor.rst | 21 + .../user/resources/compute/v2/hypervisor.rst | 12 + .../user/resources/compute/v2/image.rst | 21 + .../user/resources/compute/v2/keypair.rst | 12 + .../user/resources/compute/v2/limits.rst | 29 + .../user/resources/compute/v2/migration.rst | 12 + .../user/resources/compute/v2/quota_set.rst | 12 + .../user/resources/compute/v2/server.rst | 12 + .../resources/compute/v2/server_action.rst | 22 + .../compute/v2/server_diagnostics.rst | 13 + .../resources/compute/v2/server_group.rst | 13 + .../resources/compute/v2/server_interface.rst | 13 + .../user/resources/compute/v2/server_ip.rst | 12 + .../resources/compute/v2/server_migration.rst | 13 + .../compute/v2/server_remote_console.rst | 13 + .../user/resources/compute/v2/service.rst | 12 + .../user/resources/compute/v2/usage.rst | 20 + .../compute/v2/volume_attachment.rst | 13 + doc/source/user/resources/compute/version.rst | 12 + .../cluster.rst | 12 + .../cluster_certificate.rst | 13 + .../cluster_template.rst | 13 + .../index.rst | 10 + .../service.rst | 12 + doc/source/user/resources/database/index.rst | 10 + .../user/resources/database/v1/database.rst | 12 + .../user/resources/database/v1/flavor.rst | 12 + .../user/resources/database/v1/instance.rst | 12 + .../user/resources/database/v1/user.rst | 12 + doc/source/user/resources/dns/index.rst | 13 + .../user/resources/dns/v2/floating_ip.rst | 12 + .../user/resources/dns/v2/recordset.rst | 12 + doc/source/user/resources/dns/v2/zone.rst | 12 + .../user/resources/dns/v2/zone_export.rst | 12 + .../user/resources/dns/v2/zone_import.rst | 12 + .../user/resources/dns/v2/zone_share.rst | 12 + .../user/resources/dns/v2/zone_transfer.rst | 20 + doc/source/user/resources/identity/index.rst | 27 + .../user/resources/identity/v2/extension.rst | 12 + .../user/resources/identity/v2/role.rst | 12 + .../user/resources/identity/v2/tenant.rst | 12 + .../user/resources/identity/v2/user.rst | 12 + .../identity/v3/application_credential.rst | 13 + .../user/resources/identity/v3/credential.rst | 12 + .../user/resources/identity/v3/domain.rst | 12 + .../resources/identity/v3/domain_config.rst | 12 + .../user/resources/identity/v3/endpoint.rst | 12 + .../identity/v3/federation_protocol.rst | 13 + .../user/resources/identity/v3/group.rst | 12 + .../identity/v3/identity_provider.rst | 13 + .../user/resources/identity/v3/limit.rst | 12 + .../user/resources/identity/v3/mapping.rst | 12 + .../user/resources/identity/v3/policy.rst | 12 + .../user/resources/identity/v3/project.rst | 12 + .../user/resources/identity/v3/region.rst | 12 + .../identity/v3/registered_limit.rst | 13 + .../user/resources/identity/v3/role.rst | 12 + .../resources/identity/v3/role_assignment.rst | 13 + .../v3/role_domain_group_assignment.rst | 13 + .../v3/role_domain_user_assignment.rst | 13 + .../v3/role_project_group_assignment.rst | 13 + .../v3/role_project_user_assignment.rst | 13 + .../v3/role_system_group_assignment.rst | 13 + .../v3/role_system_user_assignment.rst | 13 + .../user/resources/identity/v3/service.rst | 12 + .../user/resources/identity/v3/system.rst | 12 + .../user/resources/identity/v3/trust.rst | 12 + .../user/resources/identity/v3/user.rst | 12 + .../user/resources/identity/version.rst | 12 + doc/source/user/resources/image/index.rst | 26 + doc/source/user/resources/image/v1/image.rst | 12 + doc/source/user/resources/image/v2/image.rst | 12 + doc/source/user/resources/image/v2/member.rst | 12 + .../resources/image/v2/metadef_namespace.rst | 13 + .../resources/image/v2/metadef_object.rst | 13 + .../resources/image/v2/metadef_property.rst | 13 + .../image/v2/metadef_resource_type.rst | 24 + .../resources/image/v2/metadef_schema.rst | 13 + .../user/resources/image/v2/service_info.rst | 20 + doc/source/user/resources/image/v2/task.rst | 12 + .../user/resources/key_manager/index.rst | 9 + .../resources/key_manager/v1/container.rst | 12 + .../user/resources/key_manager/v1/order.rst | 12 + .../user/resources/key_manager/v1/secret.rst | 12 + .../user/resources/load_balancer/index.rst | 20 + .../resources/load_balancer/v2/amphora.rst | 30 + .../load_balancer/v2/availability_zone.rst | 13 + .../v2/availability_zone_profile.rst | 13 + .../resources/load_balancer/v2/flavor.rst | 12 + .../load_balancer/v2/flavor_profile.rst | 13 + .../load_balancer/v2/health_monitor.rst | 13 + .../resources/load_balancer/v2/l7_policy.rst | 12 + .../resources/load_balancer/v2/l7_rule.rst | 12 + .../resources/load_balancer/v2/listener.rst | 21 + .../load_balancer/v2/load_balancer.rst | 30 + .../resources/load_balancer/v2/member.rst | 12 + .../user/resources/load_balancer/v2/pool.rst | 12 + .../resources/load_balancer/v2/provider.rst | 21 + .../user/resources/load_balancer/v2/quota.rst | 12 + doc/source/user/resources/network/index.rst | 9 + .../resources/network/v2/address_group.rst | 12 + .../resources/network/v2/address_scope.rst | 12 + .../user/resources/network/v2/agent.rst | 12 + .../network/v2/auto_allocated_topology.rst | 13 + .../network/v2/availability_zone.rst | 13 + .../user/resources/network/v2/bgp_peer.rst | 12 + .../user/resources/network/v2/bgp_speaker.rst | 12 + .../user/resources/network/v2/bgpvpn.rst | 12 + .../network/v2/bgpvpn_network_association.rst | 13 + .../network/v2/bgpvpn_port_association.rst | 13 + .../network/v2/bgpvpn_router_association.rst | 13 + .../user/resources/network/v2/extension.rst | 12 + .../user/resources/network/v2/flavor.rst | 12 + .../user/resources/network/v2/floating_ip.rst | 12 + .../resources/network/v2/health_monitor.rst | 13 + .../user/resources/network/v2/listener.rst | 12 + .../resources/network/v2/load_balancer.rst | 12 + .../user/resources/network/v2/local_ip.rst | 12 + .../network/v2/local_ip_association.rst | 13 + .../resources/network/v2/metering_label.rst | 13 + .../network/v2/metering_label_rule.rst | 13 + .../user/resources/network/v2/ndp_proxy.rst | 12 + .../user/resources/network/v2/network.rst | 12 + .../network/v2/network_ip_availability.rst | 13 + .../network/v2/network_segment_range.rst | 13 + doc/source/user/resources/network/v2/pool.rst | 12 + .../user/resources/network/v2/pool_member.rst | 12 + doc/source/user/resources/network/v2/port.rst | 12 + .../network/v2/qos_bandwidth_limit_rule.rst | 13 + .../network/v2/qos_dscp_marking_rule.rst | 13 + .../network/v2/qos_minimum_bandwidth_rule.rst | 13 + .../v2/qos_minimum_packet_rate_rule.rst | 13 + .../user/resources/network/v2/qos_policy.rst | 12 + .../resources/network/v2/qos_rule_type.rst | 12 + .../user/resources/network/v2/quota.rst | 12 + .../user/resources/network/v2/rbac_policy.rst | 12 + .../user/resources/network/v2/router.rst | 12 + .../resources/network/v2/security_group.rst | 13 + .../network/v2/security_group_rule.rst | 13 + .../user/resources/network/v2/segment.rst | 12 + .../resources/network/v2/service_profile.rst | 13 + .../resources/network/v2/service_provider.rst | 13 + .../network/v2/sfc_flow_classifier.rst | 13 + .../resources/network/v2/sfc_port_chain.rst | 12 + .../resources/network/v2/sfc_port_pair.rst | 12 + .../network/v2/sfc_port_pair_group.rst | 13 + .../network/v2/sfc_service_graph.rst | 13 + .../user/resources/network/v2/subnet.rst | 12 + .../user/resources/network/v2/subnet_pool.rst | 12 + .../user/resources/network/v2/tap_flow.rst | 12 + .../user/resources/network/v2/tap_service.rst | 12 + .../network/v2/vpn/endpoint_group.rst | 13 + .../resources/network/v2/vpn/ike_policy.rst | 13 + .../user/resources/network/v2/vpn/index.rst | 8 + .../resources/network/v2/vpn/ipsec_policy.rst | 13 + .../network/v2/vpn/ipsec_site_connection.rst | 13 + .../user/resources/network/v2/vpn/service.rst | 13 + .../user/resources/object_store/index.rst | 9 + .../resources/object_store/v1/account.rst | 12 + .../resources/object_store/v1/container.rst | 12 + .../user/resources/object_store/v1/obj.rst | 12 + .../user/resources/orchestration/index.rst | 9 + .../resources/orchestration/v1/resource.rst | 12 + .../user/resources/orchestration/v1/stack.rst | 12 + .../orchestration/v1/stack_event.rst | 12 + doc/source/user/resources/placement/index.rst | 10 + .../resources/placement/v1/resource_class.rst | 13 + .../placement/v1/resource_provider.rst | 13 + .../v1/resource_provider_inventory.rst | 13 + .../user/resources/placement/v1/trait.rst | 12 + .../resources/shared_file_system/index.rst | 20 + .../v2/availability_zone.rst | 13 + .../resources/shared_file_system/v2/limit.rst | 13 + .../shared_file_system/v2/resource_locks.rst | 13 + .../resources/shared_file_system/v2/share.rst | 13 + .../v2/share_access_rule.rst | 13 + .../shared_file_system/v2/share_group.rst | 13 + .../v2/share_group_snapshot.rst | 13 + .../shared_file_system/v2/share_instance.rst | 13 + .../shared_file_system/v2/share_network.rst | 13 + .../v2/share_network_subnet.rst | 13 + .../shared_file_system/v2/share_snapshot.rst | 13 + .../v2/share_snapshot_instance.rst | 13 + .../shared_file_system/v2/storage_pool.rst | 13 + .../shared_file_system/v2/user_message.rst | 13 + doc/source/user/resources/workflow/index.rst | 9 + .../resources/workflow/v2/crontrigger.rst | 12 + .../user/resources/workflow/v2/execution.rst | 12 + .../user/resources/workflow/v2/workflow.rst | 12 + doc/source/user/service_description.rst | 10 + doc/source/user/testing/fakes.rst | 5 + doc/source/user/testing/index.rst | 8 + doc/source/user/transition_from_profile.rst | 186 ++++ doc/source/user/utils.rst | 3 + doc/source/user/warnings.rst | 20 + docs-requirements.txt | 2 + {accelerator => examples}/__init__.py | 0 examples/baremetal/list.py | 25 + examples/baremetal/provisioning.py | 33 + examples/cloud/cleanup-servers.py | 26 + examples/cloud/create-server-dict.py | 46 + examples/cloud/create-server-name-or-id.py | 41 + examples/cloud/debug-logging.py | 18 + examples/cloud/find-an-image.py | 20 + examples/cloud/http-debug-logging.py | 18 + examples/cloud/munch-dict-object.py | 20 + examples/cloud/normalization.py | 21 + examples/cloud/server-information.py | 38 + .../cloud/service-conditional-overrides.py | 18 + examples/cloud/service-conditionals.py | 19 + examples/cloud/strict-mode.py | 21 + examples/cloud/upload-large-object.py | 25 + examples/cloud/upload-object.py | 25 + examples/cloud/user-agent.py | 20 + .../v2 => examples/clustering}/__init__.py | 0 examples/clustering/action.py | 37 + examples/clustering/cluster.py | 171 ++++ examples/clustering/event.py | 37 + examples/clustering/node.py | 93 ++ examples/clustering/policy.py | 75 ++ examples/clustering/policy_type.py | 33 + examples/clustering/profile.py | 81 ++ examples/clustering/profile_type.py | 33 + examples/clustering/receiver.py | 76 ++ {baremetal => examples/compute}/__init__.py | 0 examples/compute/create.py | 78 ++ examples/compute/delete.py | 51 ++ examples/compute/find.py | 50 ++ examples/compute/list.py | 46 + examples/connect.py | 97 +++ {baremetal/v1 => examples/dns}/__init__.py | 0 examples/dns/list.py | 25 + .../identity}/__init__.py | 0 examples/identity/list.py | 109 +++ .../v1 => examples/image}/__init__.py | 0 examples/image/create.py | 37 + examples/image/delete.py | 28 + examples/image/download.py | 63 ++ examples/image/import.py | 40 + examples/image/list.py | 25 + .../key_manager}/__init__.py | 0 examples/key_manager/create.py | 27 + examples/key_manager/get.py | 26 + examples/key_manager/list.py | 31 + .../v2 => examples/network}/__init__.py | 0 examples/network/create.py | 38 + examples/network/delete.py | 30 + examples/network/find.py | 30 + examples/network/list.py | 60 ++ examples/network/security_group_rules.py | 62 ++ .../shared_file_system}/__init__.py | 0 .../shared_file_system/availability_zones.py | 24 + .../share_group_snapshots.py | 66 ++ .../shared_file_system/share_instances.py | 43 + examples/shared_file_system/share_metadata.py | 61 ++ examples/shared_file_system/shares.py | 56 ++ extras/delete-network.sh | 14 + extras/run-ansible-tests.sh | 100 +++ include-acceptance-regular-user.txt | 12 + README.md => openstack/README.md | 0 __init__.py => openstack/__init__.py | 0 __main__.py => openstack/__main__.py | 0 .../__pycache__}/__init__.cpython-310.pyc | Bin .../__pycache__}/__main__.cpython-310.pyc | Bin .../__pycache__}/_hacking.cpython-310.pyc | Bin .../__pycache__}/_log.cpython-310.pyc | Bin .../_services_mixin.cpython-310.pyc | Bin .../__pycache__}/connection.cpython-310.pyc | Bin .../__pycache__}/exceptions.cpython-310.pyc | Bin .../__pycache__}/format.cpython-310.pyc | Bin .../__pycache__}/proxy.cpython-310.pyc | Bin .../__pycache__}/resource.cpython-310.pyc | Bin .../service_description.cpython-310.pyc | Bin .../__pycache__}/utils.cpython-310.pyc | Bin .../__pycache__}/version.cpython-310.pyc | Bin .../__pycache__}/warnings.cpython-310.pyc | Bin _hacking.py => openstack/_hacking.py | 0 _log.py => openstack/_log.py | 0 .../_services_mixin.py | 0 .../cmd => openstack/accelerator}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../accelerator_service.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../accelerator}/accelerator_service.py | 0 .../accelerator/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../accelerator_request.cpython-310.pyc | Bin .../v2/__pycache__/deployable.cpython-310.pyc | Bin .../v2/__pycache__/device.cpython-310.pyc | Bin .../device_profile.cpython-310.pyc | Bin .../accelerator}/v2/_proxy.py | 0 .../accelerator}/v2/accelerator_request.py | 0 .../accelerator}/v2/deployable.py | 0 .../accelerator}/v2/device.py | 0 .../accelerator}/v2/device_profile.py | 0 .../accelerator}/version.py | 0 .../baremetal}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../baremetal_service.cpython-310.pyc | Bin .../__pycache__/configdrive.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../baremetal}/baremetal_service.py | 0 .../baremetal}/configdrive.py | 0 .../baremetal}/v1/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_common.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/allocation.cpython-310.pyc | Bin .../v1/__pycache__/chassis.cpython-310.pyc | Bin .../v1/__pycache__/conductor.cpython-310.pyc | Bin .../deploy_templates.cpython-310.pyc | Bin .../v1/__pycache__/driver.cpython-310.pyc | Bin .../v1/__pycache__/node.cpython-310.pyc | Bin .../v1/__pycache__/port.cpython-310.pyc | Bin .../v1/__pycache__/port_group.cpython-310.pyc | Bin .../volume_connector.cpython-310.pyc | Bin .../__pycache__/volume_target.cpython-310.pyc | Bin .../baremetal}/v1/_common.py | 0 .../baremetal}/v1/_proxy.py | 0 .../baremetal}/v1/allocation.py | 0 .../baremetal}/v1/chassis.py | 0 .../baremetal}/v1/conductor.py | 0 .../baremetal}/v1/deploy_templates.py | 0 .../baremetal}/v1/driver.py | 0 {baremetal => openstack/baremetal}/v1/node.py | 0 {baremetal => openstack/baremetal}/v1/port.py | 0 .../baremetal}/v1/port_group.py | 0 .../baremetal}/v1/volume_connector.py | 0 .../baremetal}/v1/volume_target.py | 0 {baremetal => openstack/baremetal}/version.py | 0 .../baremetal_introspection}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin ...etal_introspection_service.cpython-310.pyc | Bin .../baremetal_introspection_service.py | 0 .../baremetal_introspection/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../__pycache__/introspection.cpython-310.pyc | Bin .../introspection_rule.cpython-310.pyc | Bin .../baremetal_introspection}/v1/_proxy.py | 0 .../v1/introspection.py | 0 .../v1/introspection_rule.py | 0 .../block_storage}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/_base_proxy.cpython-310.pyc | Bin .../block_storage_service.cpython-310.pyc | Bin .../block_storage}/_base_proxy.py | 0 .../block_storage}/block_storage_service.py | 0 .../block_storage/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../v2/__pycache__/backup.cpython-310.pyc | Bin .../__pycache__/capabilities.cpython-310.pyc | Bin .../v2/__pycache__/extension.cpython-310.pyc | Bin .../v2/__pycache__/limits.cpython-310.pyc | Bin .../v2/__pycache__/quota_set.cpython-310.pyc | Bin .../v2/__pycache__/snapshot.cpython-310.pyc | Bin .../v2/__pycache__/stats.cpython-310.pyc | Bin .../v2/__pycache__/type.cpython-310.pyc | Bin .../v2/__pycache__/volume.cpython-310.pyc | Bin .../block_storage}/v2/_proxy.py | 0 .../block_storage}/v2/backup.py | 0 .../block_storage}/v2/capabilities.py | 0 .../block_storage}/v2/extension.py | 0 .../block_storage}/v2/limits.py | 0 .../block_storage}/v2/quota_set.py | 0 .../block_storage}/v2/snapshot.py | 0 .../block_storage}/v2/stats.py | 0 .../block_storage}/v2/type.py | 0 .../block_storage}/v2/volume.py | 0 .../block_storage/v3}/__init__.py | 0 .../v3/__pycache__/__init__.cpython-310.pyc | Bin .../v3/__pycache__/_proxy.cpython-310.pyc | Bin .../v3/__pycache__/attachment.cpython-310.pyc | Bin .../availability_zone.cpython-310.pyc | Bin .../v3/__pycache__/backup.cpython-310.pyc | Bin .../block_storage_summary.cpython-310.pyc | Bin .../__pycache__/capabilities.cpython-310.pyc | Bin .../v3/__pycache__/extension.cpython-310.pyc | Bin .../v3/__pycache__/group.cpython-310.pyc | Bin .../group_snapshot.cpython-310.pyc | Bin .../v3/__pycache__/group_type.cpython-310.pyc | Bin .../v3/__pycache__/limits.cpython-310.pyc | Bin .../v3/__pycache__/quota_set.cpython-310.pyc | Bin .../resource_filter.cpython-310.pyc | Bin .../v3/__pycache__/service.cpython-310.pyc | Bin .../v3/__pycache__/snapshot.cpython-310.pyc | Bin .../v3/__pycache__/stats.cpython-310.pyc | Bin .../v3/__pycache__/transfer.cpython-310.pyc | Bin .../v3/__pycache__/type.cpython-310.pyc | Bin .../v3/__pycache__/volume.cpython-310.pyc | Bin .../block_storage}/v3/_proxy.py | 0 .../block_storage}/v3/attachment.py | 0 .../block_storage}/v3/availability_zone.py | 0 .../block_storage}/v3/backup.py | 0 .../v3/block_storage_summary.py | 0 .../block_storage}/v3/capabilities.py | 0 .../block_storage}/v3/extension.py | 0 .../block_storage}/v3/group.py | 0 .../block_storage}/v3/group_snapshot.py | 0 .../block_storage}/v3/group_type.py | 0 .../block_storage}/v3/limits.py | 0 .../block_storage}/v3/quota_set.py | 0 .../block_storage}/v3/resource_filter.py | 0 .../block_storage}/v3/service.py | 0 .../block_storage}/v3/snapshot.py | 0 .../block_storage}/v3/stats.py | 0 .../block_storage}/v3/transfer.py | 0 .../block_storage}/v3/type.py | 0 .../block_storage}/v3/volume.py | 0 {cloud => openstack/cloud}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/_accelerator.cpython-310.pyc | Bin .../__pycache__/_baremetal.cpython-310.pyc | Bin .../_block_storage.cpython-310.pyc | Bin .../cloud}/__pycache__/_coe.cpython-310.pyc | Bin .../__pycache__/_compute.cpython-310.pyc | Bin .../cloud}/__pycache__/_dns.cpython-310.pyc | Bin .../__pycache__/_floating_ip.cpython-310.pyc | Bin .../__pycache__/_identity.cpython-310.pyc | Bin .../cloud}/__pycache__/_image.cpython-310.pyc | Bin .../__pycache__/_network.cpython-310.pyc | Bin .../_network_common.cpython-310.pyc | Bin .../__pycache__/_object_store.cpython-310.pyc | Bin .../_orchestration.cpython-310.pyc | Bin .../_security_group.cpython-310.pyc | Bin .../_shared_file_system.cpython-310.pyc | Bin .../cloud}/__pycache__/_utils.cpython-310.pyc | Bin .../cloud}/__pycache__/exc.cpython-310.pyc | Bin .../__pycache__/inventory.cpython-310.pyc | Bin .../cloud}/__pycache__/meta.cpython-310.pyc | Bin .../openstackcloud.cpython-310.pyc | Bin {cloud => openstack/cloud}/_accelerator.py | 0 {cloud => openstack/cloud}/_baremetal.py | 0 {cloud => openstack/cloud}/_block_storage.py | 0 {cloud => openstack/cloud}/_coe.py | 0 {cloud => openstack/cloud}/_compute.py | 0 {cloud => openstack/cloud}/_dns.py | 0 {cloud => openstack/cloud}/_floating_ip.py | 0 {cloud => openstack/cloud}/_identity.py | 0 {cloud => openstack/cloud}/_image.py | 0 {cloud => openstack/cloud}/_network.py | 0 {cloud => openstack/cloud}/_network_common.py | 0 {cloud => openstack/cloud}/_object_store.py | 0 {cloud => openstack/cloud}/_orchestration.py | 0 {cloud => openstack/cloud}/_security_group.py | 0 .../cloud}/_shared_file_system.py | 0 {cloud => openstack/cloud}/_utils.py | 0 {database => openstack/cloud/cmd}/__init__.py | 0 .../cmd/__pycache__/__init__.cpython-310.pyc | Bin .../cmd/__pycache__/inventory.cpython-310.pyc | Bin {cloud => openstack/cloud}/cmd/inventory.py | 0 {cloud => openstack/cloud}/exc.py | 0 {cloud => openstack/cloud}/inventory.py | 0 {cloud => openstack/cloud}/meta.py | 0 {cloud => openstack/cloud}/openstackcloud.py | 0 .../v1 => openstack/cloud/tests}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin {dns => openstack/clustering}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../clustering_service.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../clustering}/clustering_service.py | 0 .../clustering/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../_async_resource.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/action.cpython-310.pyc | Bin .../v1/__pycache__/build_info.cpython-310.pyc | Bin .../v1/__pycache__/cluster.cpython-310.pyc | Bin .../__pycache__/cluster_attr.cpython-310.pyc | Bin .../cluster_policy.cpython-310.pyc | Bin .../v1/__pycache__/event.cpython-310.pyc | Bin .../v1/__pycache__/node.cpython-310.pyc | Bin .../v1/__pycache__/policy.cpython-310.pyc | Bin .../__pycache__/policy_type.cpython-310.pyc | Bin .../v1/__pycache__/profile.cpython-310.pyc | Bin .../__pycache__/profile_type.cpython-310.pyc | Bin .../v1/__pycache__/receiver.cpython-310.pyc | Bin .../v1/__pycache__/service.cpython-310.pyc | Bin .../clustering}/v1/_async_resource.py | 0 .../clustering}/v1/_proxy.py | 0 .../clustering}/v1/action.py | 0 .../clustering}/v1/build_info.py | 0 .../clustering}/v1/cluster.py | 0 .../clustering}/v1/cluster_attr.py | 0 .../clustering}/v1/cluster_policy.py | 0 .../clustering}/v1/event.py | 0 .../clustering}/v1/node.py | 0 .../clustering}/v1/policy.py | 0 .../clustering}/v1/policy_type.py | 0 .../clustering}/v1/profile.py | 0 .../clustering}/v1/profile_type.py | 0 .../clustering}/v1/receiver.py | 0 .../clustering}/v1/service.py | 0 .../clustering}/version.py | 0 {fixture => openstack/common}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/metadata.cpython-310.pyc | Bin .../__pycache__/quota_set.cpython-310.pyc | Bin .../common}/__pycache__/tag.cpython-310.pyc | Bin {common => openstack/common}/metadata.py | 0 {common => openstack/common}/quota_set.py | 0 {common => openstack/common}/tag.py | 0 {identity => openstack/compute}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../compute_service.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../compute}/compute_service.py | 0 .../compute}/v2/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../v2/__pycache__/aggregate.cpython-310.pyc | Bin .../availability_zone.cpython-310.pyc | Bin .../v2/__pycache__/extension.cpython-310.pyc | Bin .../v2/__pycache__/flavor.cpython-310.pyc | Bin .../v2/__pycache__/hypervisor.cpython-310.pyc | Bin .../v2/__pycache__/image.cpython-310.pyc | Bin .../v2/__pycache__/keypair.cpython-310.pyc | Bin .../v2/__pycache__/limits.cpython-310.pyc | Bin .../v2/__pycache__/migration.cpython-310.pyc | Bin .../v2/__pycache__/quota_set.cpython-310.pyc | Bin .../v2/__pycache__/server.cpython-310.pyc | Bin .../__pycache__/server_action.cpython-310.pyc | Bin .../server_diagnostics.cpython-310.pyc | Bin .../__pycache__/server_group.cpython-310.pyc | Bin .../server_interface.cpython-310.pyc | Bin .../v2/__pycache__/server_ip.cpython-310.pyc | Bin .../server_migration.cpython-310.pyc | Bin .../server_remote_console.cpython-310.pyc | Bin .../v2/__pycache__/service.cpython-310.pyc | Bin .../v2/__pycache__/usage.cpython-310.pyc | Bin .../volume_attachment.cpython-310.pyc | Bin {compute => openstack/compute}/v2/_proxy.py | 0 .../compute}/v2/aggregate.py | 0 .../compute}/v2/availability_zone.py | 0 .../compute}/v2/extension.py | 0 {compute => openstack/compute}/v2/flavor.py | 0 .../compute}/v2/hypervisor.py | 0 {compute => openstack/compute}/v2/image.py | 0 {compute => openstack/compute}/v2/keypair.py | 0 {compute => openstack/compute}/v2/limits.py | 0 .../compute}/v2/migration.py | 0 .../compute}/v2/quota_set.py | 0 {compute => openstack/compute}/v2/server.py | 0 .../compute}/v2/server_action.py | 0 .../compute}/v2/server_diagnostics.py | 0 .../compute}/v2/server_group.py | 0 .../compute}/v2/server_interface.py | 0 .../compute}/v2/server_ip.py | 0 .../compute}/v2/server_migration.py | 0 .../compute}/v2/server_remote_console.py | 0 {compute => openstack/compute}/v2/service.py | 0 {compute => openstack/compute}/v2/usage.py | 0 .../compute}/v2/volume_attachment.py | 0 {compute => openstack/compute}/version.py | 0 {config => openstack/config}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../config}/__pycache__/_util.cpython-310.pyc | Bin .../__pycache__/cloud_config.cpython-310.pyc | Bin .../__pycache__/cloud_region.cpython-310.pyc | Bin .../__pycache__/defaults.cpython-310.pyc | Bin .../__pycache__/exceptions.cpython-310.pyc | Bin .../__pycache__/loader.cpython-310.pyc | Bin {config => openstack/config}/_util.py | 0 {config => openstack/config}/cloud_config.py | 0 {config => openstack/config}/cloud_region.py | 0 {config => openstack/config}/defaults.json | 0 {config => openstack/config}/defaults.py | 0 {config => openstack/config}/exceptions.py | 0 {config => openstack/config}/loader.py | 0 {config => openstack/config}/schema.json | 0 .../config}/vendor-schema.json | 0 .../config}/vendors/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../config}/vendors/auro.json | 0 .../config}/vendors/betacloud.json | 0 .../config}/vendors/bluebox.json | 0 .../config}/vendors/catalyst.json | 0 .../config}/vendors/citycloud.json | 0 .../config}/vendors/conoha.json | 0 .../config}/vendors/dreamcompute.json | 0 .../config}/vendors/elastx.json | 0 .../config}/vendors/entercloudsuite.json | 0 .../config}/vendors/fuga.json | 0 .../config}/vendors/ibmcloud.json | 0 .../config}/vendors/internap.json | 0 .../config}/vendors/limestonenetworks.yaml | 0 .../config}/vendors/otc-swiss.json | 0 {config => openstack/config}/vendors/otc.json | 0 .../config}/vendors/ovh-us.json | 0 {config => openstack/config}/vendors/ovh.json | 0 .../config}/vendors/rackspace.json | 0 .../config}/vendors/switchengines.json | 0 .../config}/vendors/ultimum.json | 0 .../config}/vendors/unitedstack.json | 0 .../config}/vendors/vexxhost.json | 0 .../config}/vendors/zetta.json | 0 connection.py => openstack/connection.py | 0 .../__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin ...ructure_management_service.cpython-310.pyc | Bin ...ainer_infrastructure_management_service.py | 0 .../v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/cluster.cpython-310.pyc | Bin .../cluster_certificate.cpython-310.pyc | Bin .../cluster_template.cpython-310.pyc | Bin .../v1/__pycache__/service.cpython-310.pyc | Bin .../v1/_proxy.py | 0 .../v1/cluster.py | 0 .../v1/cluster_certificate.py | 0 .../v1/cluster_template.py | 0 .../v1/service.py | 0 {image/v1 => openstack/database}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../database_service.cpython-310.pyc | Bin .../database}/database_service.py | 0 .../v2 => openstack/database/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/database.cpython-310.pyc | Bin .../v1/__pycache__/flavor.cpython-310.pyc | Bin .../v1/__pycache__/instance.cpython-310.pyc | Bin .../v1/__pycache__/user.cpython-310.pyc | Bin {database => openstack/database}/v1/_proxy.py | 0 .../database}/v1/database.py | 0 {database => openstack/database}/v1/flavor.py | 0 .../database}/v1/instance.py | 0 {database => openstack/database}/v1/user.py | 0 {instance_ha => openstack/dns}/__init__.py | 0 .../dns}/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/dns_service.cpython-310.pyc | Bin .../dns}/__pycache__/version.cpython-310.pyc | Bin {dns => openstack/dns}/dns_service.py | 0 .../v1 => openstack/dns/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../dns}/v2/__pycache__/_base.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../__pycache__/floating_ip.cpython-310.pyc | Bin .../v2/__pycache__/recordset.cpython-310.pyc | Bin .../dns}/v2/__pycache__/zone.cpython-310.pyc | Bin .../__pycache__/zone_export.cpython-310.pyc | Bin .../__pycache__/zone_import.cpython-310.pyc | Bin .../v2/__pycache__/zone_share.cpython-310.pyc | Bin .../__pycache__/zone_transfer.cpython-310.pyc | Bin {dns => openstack/dns}/v2/_base.py | 0 {dns => openstack/dns}/v2/_proxy.py | 0 {dns => openstack/dns}/v2/floating_ip.py | 0 {dns => openstack/dns}/v2/recordset.py | 0 {dns => openstack/dns}/v2/zone.py | 0 {dns => openstack/dns}/v2/zone_export.py | 0 {dns => openstack/dns}/v2/zone_import.py | 0 {dns => openstack/dns}/v2/zone_share.py | 0 {dns => openstack/dns}/v2/zone_transfer.py | 0 {dns => openstack/dns}/version.py | 0 exceptions.py => openstack/exceptions.py | 0 .../fixture}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/connection.cpython-310.pyc | Bin {fixture => openstack/fixture}/connection.py | 0 format.py => openstack/format.py | 0 .../v1 => openstack/identity}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../identity_service.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../identity}/identity_service.py | 0 .../identity/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../v2/__pycache__/extension.cpython-310.pyc | Bin .../v2/__pycache__/role.cpython-310.pyc | Bin .../v2/__pycache__/tenant.cpython-310.pyc | Bin .../v2/__pycache__/user.cpython-310.pyc | Bin {identity => openstack/identity}/v2/_proxy.py | 0 .../identity}/v2/extension.py | 0 {identity => openstack/identity}/v2/role.py | 0 {identity => openstack/identity}/v2/tenant.py | 0 {identity => openstack/identity}/v2/user.py | 0 .../v2 => openstack/identity/v3}/__init__.py | 0 .../v3/__pycache__/__init__.cpython-310.pyc | Bin .../v3/__pycache__/_proxy.cpython-310.pyc | Bin .../application_credential.cpython-310.pyc | Bin .../v3/__pycache__/credential.cpython-310.pyc | Bin .../v3/__pycache__/domain.cpython-310.pyc | Bin .../__pycache__/domain_config.cpython-310.pyc | Bin .../v3/__pycache__/endpoint.cpython-310.pyc | Bin .../federation_protocol.cpython-310.pyc | Bin .../v3/__pycache__/group.cpython-310.pyc | Bin .../identity_provider.cpython-310.pyc | Bin .../v3/__pycache__/limit.cpython-310.pyc | Bin .../v3/__pycache__/mapping.cpython-310.pyc | Bin .../v3/__pycache__/policy.cpython-310.pyc | Bin .../v3/__pycache__/project.cpython-310.pyc | Bin .../v3/__pycache__/region.cpython-310.pyc | Bin .../registered_limit.cpython-310.pyc | Bin .../v3/__pycache__/role.cpython-310.pyc | Bin .../role_assignment.cpython-310.pyc | Bin ...le_domain_group_assignment.cpython-310.pyc | Bin ...ole_domain_user_assignment.cpython-310.pyc | Bin ...e_project_group_assignment.cpython-310.pyc | Bin ...le_project_user_assignment.cpython-310.pyc | Bin ...le_system_group_assignment.cpython-310.pyc | Bin ...ole_system_user_assignment.cpython-310.pyc | Bin .../v3/__pycache__/service.cpython-310.pyc | Bin .../v3/__pycache__/system.cpython-310.pyc | Bin .../v3/__pycache__/trust.cpython-310.pyc | Bin .../v3/__pycache__/user.cpython-310.pyc | Bin {identity => openstack/identity}/v3/_proxy.py | 0 .../identity}/v3/application_credential.py | 0 .../identity}/v3/credential.py | 0 {identity => openstack/identity}/v3/domain.py | 0 .../identity}/v3/domain_config.py | 0 .../identity}/v3/endpoint.py | 0 .../identity}/v3/federation_protocol.py | 0 {identity => openstack/identity}/v3/group.py | 0 .../identity}/v3/identity_provider.py | 0 {identity => openstack/identity}/v3/limit.py | 0 .../identity}/v3/mapping.py | 0 {identity => openstack/identity}/v3/policy.py | 0 .../identity}/v3/project.py | 0 {identity => openstack/identity}/v3/region.py | 0 .../identity}/v3/registered_limit.py | 0 {identity => openstack/identity}/v3/role.py | 0 .../identity}/v3/role_assignment.py | 0 .../v3/role_domain_group_assignment.py | 0 .../v3/role_domain_user_assignment.py | 0 .../v3/role_project_group_assignment.py | 0 .../v3/role_project_user_assignment.py | 0 .../v3/role_system_group_assignment.py | 0 .../v3/role_system_user_assignment.py | 0 .../identity}/v3/service.py | 0 {identity => openstack/identity}/v3/system.py | 0 {identity => openstack/identity}/v3/trust.py | 0 {identity => openstack/identity}/v3/user.py | 0 {identity => openstack/identity}/version.py | 0 {message => openstack/image}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/_download.cpython-310.pyc | Bin .../__pycache__/image_service.cpython-310.pyc | Bin .../__pycache__/image_signer.cpython-310.pyc | Bin .../iterable_chunked_file.cpython-310.pyc | Bin {image => openstack/image}/_download.py | 0 {image => openstack/image}/image_service.py | 0 {image => openstack/image}/image_signer.py | 0 .../image}/iterable_chunked_file.py | 0 .../v2 => openstack/image/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/image.cpython-310.pyc | Bin {image => openstack/image}/v1/_proxy.py | 0 {image => openstack/image}/v1/image.py | 0 {network => openstack/image/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../v2/__pycache__/cache.cpython-310.pyc | Bin .../v2/__pycache__/image.cpython-310.pyc | Bin .../v2/__pycache__/member.cpython-310.pyc | Bin .../metadef_namespace.cpython-310.pyc | Bin .../metadef_object.cpython-310.pyc | Bin .../metadef_property.cpython-310.pyc | Bin .../metadef_resource_type.cpython-310.pyc | Bin .../metadef_schema.cpython-310.pyc | Bin .../v2/__pycache__/schema.cpython-310.pyc | Bin .../__pycache__/service_info.cpython-310.pyc | Bin .../v2/__pycache__/task.cpython-310.pyc | Bin {image => openstack/image}/v2/_proxy.py | 0 {image => openstack/image}/v2/cache.py | 0 {image => openstack/image}/v2/image.py | 0 {image => openstack/image}/v2/member.py | 0 .../image}/v2/metadef_namespace.py | 0 .../image}/v2/metadef_object.py | 0 .../image}/v2/metadef_property.py | 0 .../image}/v2/metadef_resource_type.py | 0 .../image}/v2/metadef_schema.py | 0 {image => openstack/image}/v2/schema.py | 0 {image => openstack/image}/v2/service_info.py | 0 {image => openstack/image}/v2/task.py | 0 .../v2 => openstack/instance_ha}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../instance_ha_service.cpython-310.pyc | Bin .../instance_ha}/instance_ha_service.py | 0 .../instance_ha/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/host.cpython-310.pyc | Bin .../__pycache__/notification.cpython-310.pyc | Bin .../v1/__pycache__/segment.cpython-310.pyc | Bin .../v1/__pycache__/vmove.cpython-310.pyc | Bin .../instance_ha}/v1/_proxy.py | 0 .../instance_ha}/v1/host.py | 0 .../instance_ha}/v1/notification.py | 0 .../instance_ha}/v1/segment.py | 0 .../instance_ha}/v1/vmove.py | 0 .../v1 => openstack/key_manager}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../key_manager_service.cpython-310.pyc | Bin .../key_manager}/key_manager_service.py | 0 .../key_manager/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_format.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/container.cpython-310.pyc | Bin .../v1/__pycache__/order.cpython-310.pyc | Bin .../v1/__pycache__/secret.cpython-310.pyc | Bin .../key_manager}/v1/_format.py | 0 .../key_manager}/v1/_proxy.py | 0 .../key_manager}/v1/container.py | 0 .../key_manager}/v1/order.py | 0 .../key_manager}/v1/secret.py | 0 .../load_balancer}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../load_balancer_service.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../load_balancer}/load_balancer_service.py | 0 .../load_balancer/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../v2/__pycache__/amphora.cpython-310.pyc | Bin .../availability_zone.cpython-310.pyc | Bin .../availability_zone_profile.cpython-310.pyc | Bin .../v2/__pycache__/flavor.cpython-310.pyc | Bin .../flavor_profile.cpython-310.pyc | Bin .../health_monitor.cpython-310.pyc | Bin .../v2/__pycache__/l7_policy.cpython-310.pyc | Bin .../v2/__pycache__/l7_rule.cpython-310.pyc | Bin .../v2/__pycache__/listener.cpython-310.pyc | Bin .../__pycache__/load_balancer.cpython-310.pyc | Bin .../v2/__pycache__/member.cpython-310.pyc | Bin .../v2/__pycache__/pool.cpython-310.pyc | Bin .../v2/__pycache__/provider.cpython-310.pyc | Bin .../v2/__pycache__/quota.cpython-310.pyc | Bin .../load_balancer}/v2/_proxy.py | 0 .../load_balancer}/v2/amphora.py | 0 .../load_balancer}/v2/availability_zone.py | 0 .../v2/availability_zone_profile.py | 0 .../load_balancer}/v2/flavor.py | 0 .../load_balancer}/v2/flavor_profile.py | 0 .../load_balancer}/v2/health_monitor.py | 0 .../load_balancer}/v2/l7_policy.py | 0 .../load_balancer}/v2/l7_rule.py | 0 .../load_balancer}/v2/listener.py | 0 .../load_balancer}/v2/load_balancer.py | 0 .../load_balancer}/v2/member.py | 0 .../load_balancer}/v2/pool.py | 0 .../load_balancer}/v2/provider.py | 0 .../load_balancer}/v2/quota.py | 0 .../load_balancer}/version.py | 0 {placement => openstack/message}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../message_service.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../message}/message_service.py | 0 .../v1 => openstack/message/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../v2/__pycache__/claim.cpython-310.pyc | Bin .../v2/__pycache__/message.cpython-310.pyc | Bin .../v2/__pycache__/queue.cpython-310.pyc | Bin .../__pycache__/subscription.cpython-310.pyc | Bin {message => openstack/message}/v2/_proxy.py | 0 {message => openstack/message}/v2/claim.py | 0 {message => openstack/message}/v2/message.py | 0 {message => openstack/message}/v2/queue.py | 0 .../message}/v2/subscription.py | 0 {message => openstack/message}/version.py | 0 .../network}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../network_service.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../network}/network_service.py | 0 .../network}/v2/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_base.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../__pycache__/address_group.cpython-310.pyc | Bin .../__pycache__/address_scope.cpython-310.pyc | Bin .../v2/__pycache__/agent.cpython-310.pyc | Bin .../auto_allocated_topology.cpython-310.pyc | Bin .../availability_zone.cpython-310.pyc | Bin .../v2/__pycache__/bgp_peer.cpython-310.pyc | Bin .../__pycache__/bgp_speaker.cpython-310.pyc | Bin .../v2/__pycache__/bgpvpn.cpython-310.pyc | Bin ...bgpvpn_network_association.cpython-310.pyc | Bin .../bgpvpn_port_association.cpython-310.pyc | Bin .../bgpvpn_router_association.cpython-310.pyc | Bin ...efault_security_group_rule.cpython-310.pyc | Bin .../v2/__pycache__/extension.cpython-310.pyc | Bin .../firewall_group.cpython-310.pyc | Bin .../firewall_policy.cpython-310.pyc | Bin .../__pycache__/firewall_rule.cpython-310.pyc | Bin .../v2/__pycache__/flavor.cpython-310.pyc | Bin .../__pycache__/floating_ip.cpython-310.pyc | Bin .../health_monitor.cpython-310.pyc | Bin .../l3_conntrack_helper.cpython-310.pyc | Bin .../v2/__pycache__/listener.cpython-310.pyc | Bin .../__pycache__/load_balancer.cpython-310.pyc | Bin .../v2/__pycache__/local_ip.cpython-310.pyc | Bin .../local_ip_association.cpython-310.pyc | Bin .../metering_label.cpython-310.pyc | Bin .../metering_label_rule.cpython-310.pyc | Bin .../v2/__pycache__/ndp_proxy.cpython-310.pyc | Bin .../v2/__pycache__/network.cpython-310.pyc | Bin .../network_ip_availability.cpython-310.pyc | Bin .../network_segment_range.cpython-310.pyc | Bin .../v2/__pycache__/pool.cpython-310.pyc | Bin .../__pycache__/pool_member.cpython-310.pyc | Bin .../v2/__pycache__/port.cpython-310.pyc | Bin .../port_forwarding.cpython-310.pyc | Bin .../qos_bandwidth_limit_rule.cpython-310.pyc | Bin .../qos_dscp_marking_rule.cpython-310.pyc | Bin ...qos_minimum_bandwidth_rule.cpython-310.pyc | Bin ...s_minimum_packet_rate_rule.cpython-310.pyc | Bin .../v2/__pycache__/qos_policy.cpython-310.pyc | Bin .../__pycache__/qos_rule_type.cpython-310.pyc | Bin .../v2/__pycache__/quota.cpython-310.pyc | Bin .../__pycache__/rbac_policy.cpython-310.pyc | Bin .../v2/__pycache__/router.cpython-310.pyc | Bin .../security_group.cpython-310.pyc | Bin .../security_group_rule.cpython-310.pyc | Bin .../v2/__pycache__/segment.cpython-310.pyc | Bin .../service_profile.cpython-310.pyc | Bin .../service_provider.cpython-310.pyc | Bin .../sfc_flow_classifier.cpython-310.pyc | Bin .../sfc_port_chain.cpython-310.pyc | Bin .../__pycache__/sfc_port_pair.cpython-310.pyc | Bin .../sfc_port_pair_group.cpython-310.pyc | Bin .../sfc_service_graph.cpython-310.pyc | Bin .../v2/__pycache__/subnet.cpython-310.pyc | Bin .../__pycache__/subnet_pool.cpython-310.pyc | Bin .../v2/__pycache__/tap_flow.cpython-310.pyc | Bin .../__pycache__/tap_service.cpython-310.pyc | Bin .../v2/__pycache__/trunk.cpython-310.pyc | Bin .../vpn_endpoint_group.cpython-310.pyc | Bin .../vpn_ike_policy.cpython-310.pyc | Bin .../vpn_ipsec_policy.cpython-310.pyc | Bin .../vpn_ipsec_site_connection.cpython-310.pyc | Bin .../__pycache__/vpn_service.cpython-310.pyc | Bin {network => openstack/network}/v2/_base.py | 0 {network => openstack/network}/v2/_proxy.py | 0 .../network}/v2/address_group.py | 0 .../network}/v2/address_scope.py | 0 {network => openstack/network}/v2/agent.py | 0 .../network}/v2/auto_allocated_topology.py | 0 .../network}/v2/availability_zone.py | 0 {network => openstack/network}/v2/bgp_peer.py | 0 .../network}/v2/bgp_speaker.py | 0 {network => openstack/network}/v2/bgpvpn.py | 0 .../network}/v2/bgpvpn_network_association.py | 0 .../network}/v2/bgpvpn_port_association.py | 0 .../network}/v2/bgpvpn_router_association.py | 0 .../v2/default_security_group_rule.py | 0 .../network}/v2/extension.py | 0 .../network}/v2/firewall_group.py | 0 .../network}/v2/firewall_policy.py | 0 .../network}/v2/firewall_rule.py | 0 {network => openstack/network}/v2/flavor.py | 0 .../network}/v2/floating_ip.py | 0 .../network}/v2/health_monitor.py | 0 .../network}/v2/l3_conntrack_helper.py | 0 {network => openstack/network}/v2/listener.py | 0 .../network}/v2/load_balancer.py | 0 {network => openstack/network}/v2/local_ip.py | 0 .../network}/v2/local_ip_association.py | 0 .../network}/v2/metering_label.py | 0 .../network}/v2/metering_label_rule.py | 0 .../network}/v2/ndp_proxy.py | 0 {network => openstack/network}/v2/network.py | 0 .../network}/v2/network_ip_availability.py | 0 .../network}/v2/network_segment_range.py | 0 {network => openstack/network}/v2/pool.py | 0 .../network}/v2/pool_member.py | 0 {network => openstack/network}/v2/port.py | 0 .../network}/v2/port_forwarding.py | 0 .../network}/v2/qos_bandwidth_limit_rule.py | 0 .../network}/v2/qos_dscp_marking_rule.py | 0 .../network}/v2/qos_minimum_bandwidth_rule.py | 0 .../v2/qos_minimum_packet_rate_rule.py | 0 .../network}/v2/qos_policy.py | 0 .../network}/v2/qos_rule_type.py | 0 {network => openstack/network}/v2/quota.py | 0 .../network}/v2/rbac_policy.py | 0 {network => openstack/network}/v2/router.py | 0 .../network}/v2/security_group.py | 0 .../network}/v2/security_group_rule.py | 0 {network => openstack/network}/v2/segment.py | 0 .../network}/v2/service_profile.py | 0 .../network}/v2/service_provider.py | 0 .../network}/v2/sfc_flow_classifier.py | 0 .../network}/v2/sfc_port_chain.py | 0 .../network}/v2/sfc_port_pair.py | 0 .../network}/v2/sfc_port_pair_group.py | 0 .../network}/v2/sfc_service_graph.py | 0 {network => openstack/network}/v2/subnet.py | 0 .../network}/v2/subnet_pool.py | 0 {network => openstack/network}/v2/tap_flow.py | 0 .../network}/v2/tap_service.py | 0 {network => openstack/network}/v2/trunk.py | 0 .../network}/v2/vpn_endpoint_group.py | 0 .../network}/v2/vpn_ike_policy.py | 0 .../network}/v2/vpn_ipsec_policy.py | 0 .../network}/v2/vpn_ipsec_site_connection.py | 0 .../network}/v2/vpn_service.py | 0 {network => openstack/network}/version.py | 0 {test => openstack/object_store}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../object_store_service.cpython-310.pyc | Bin .../object_store}/object_store_service.py | 0 .../object_store/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_base.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/account.cpython-310.pyc | Bin .../v1/__pycache__/container.cpython-310.pyc | Bin .../v1/__pycache__/info.cpython-310.pyc | Bin .../v1/__pycache__/obj.cpython-310.pyc | Bin .../object_store}/v1/_base.py | 0 .../object_store}/v1/_proxy.py | 0 .../object_store}/v1/account.py | 0 .../object_store}/v1/container.py | 0 .../object_store}/v1/info.py | 0 .../object_store}/v1/obj.py | 0 .../orchestration}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../orchestration_service.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../orchestration}/orchestration_service.py | 0 .../orchestration/util}/__init__.py | 0 .../util/__pycache__/__init__.cpython-310.pyc | Bin .../environment_format.cpython-310.pyc | Bin .../__pycache__/event_utils.cpython-310.pyc | Bin .../template_format.cpython-310.pyc | Bin .../template_utils.cpython-310.pyc | Bin .../util/__pycache__/utils.cpython-310.pyc | Bin .../orchestration}/util/environment_format.py | 0 .../orchestration}/util/event_utils.py | 0 .../orchestration}/util/template_format.py | 0 .../orchestration}/util/template_utils.py | 0 .../orchestration}/util/utils.py | 0 .../orchestration/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../v1/__pycache__/resource.cpython-310.pyc | Bin .../software_config.cpython-310.pyc | Bin .../software_deployment.cpython-310.pyc | Bin .../v1/__pycache__/stack.cpython-310.pyc | Bin .../stack_environment.cpython-310.pyc | Bin .../__pycache__/stack_event.cpython-310.pyc | Bin .../__pycache__/stack_files.cpython-310.pyc | Bin .../stack_template.cpython-310.pyc | Bin .../v1/__pycache__/template.cpython-310.pyc | Bin .../orchestration}/v1/_proxy.py | 0 .../orchestration}/v1/resource.py | 0 .../orchestration}/v1/software_config.py | 0 .../orchestration}/v1/software_deployment.py | 0 .../orchestration}/v1/stack.py | 0 .../orchestration}/v1/stack_environment.py | 0 .../orchestration}/v1/stack_event.py | 0 .../orchestration}/v1/stack_files.py | 0 .../orchestration}/v1/stack_template.py | 0 .../orchestration}/v1/template.py | 0 .../orchestration}/version.py | 0 .../v2 => openstack/placement}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../placement_service.cpython-310.pyc | Bin .../placement}/placement_service.py | 0 .../v3 => openstack/placement/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../resource_class.cpython-310.pyc | Bin .../resource_provider.cpython-310.pyc | Bin ...esource_provider_inventory.cpython-310.pyc | Bin .../v1/__pycache__/trait.cpython-310.pyc | Bin .../placement}/v1/_proxy.py | 0 .../placement}/v1/resource_class.py | 0 .../placement}/v1/resource_provider.py | 0 .../v1/resource_provider_inventory.py | 0 .../placement}/v1/trait.py | 0 proxy.py => openstack/proxy.py | 0 py.typed => openstack/py.typed | 0 resource.py => openstack/resource.py | 0 .../service_description.py | 0 .../shared_file_system}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin ...shared_file_system_service.cpython-310.pyc | Bin .../shared_file_system_service.py | 0 .../shared_file_system/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../availability_zone.cpython-310.pyc | Bin .../v2/__pycache__/limit.cpython-310.pyc | Bin .../v2/__pycache__/share.cpython-310.pyc | Bin .../share_access_rule.cpython-310.pyc | Bin .../share_export_locations.cpython-310.pyc | Bin .../__pycache__/share_group.cpython-310.pyc | Bin .../share_group_snapshot.cpython-310.pyc | Bin .../share_instance.cpython-310.pyc | Bin .../__pycache__/share_network.cpython-310.pyc | Bin .../share_network_subnet.cpython-310.pyc | Bin .../share_snapshot.cpython-310.pyc | Bin .../share_snapshot_instance.cpython-310.pyc | Bin .../__pycache__/storage_pool.cpython-310.pyc | Bin .../__pycache__/user_message.cpython-310.pyc | Bin .../shared_file_system}/v2/_proxy.py | 0 .../v2/availability_zone.py | 0 .../shared_file_system}/v2/limit.py | 0 .../shared_file_system}/v2/share.py | 0 .../v2/share_access_rule.py | 0 .../v2/share_export_locations.py | 0 .../shared_file_system}/v2/share_group.py | 0 .../v2/share_group_snapshot.py | 0 .../shared_file_system}/v2/share_instance.py | 0 .../shared_file_system}/v2/share_network.py | 0 .../v2/share_network_subnet.py | 0 .../shared_file_system}/v2/share_snapshot.py | 0 .../v2/share_snapshot_instance.py | 0 .../shared_file_system}/v2/storage_pool.py | 0 .../shared_file_system}/v2/user_message.py | 0 .../compute => openstack/test}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../test}/__pycache__/fakes.cpython-310.pyc | Bin {test => openstack/test}/fakes.py | 0 {tests => openstack/tests}/README.rst | 0 .../v2 => openstack/tests}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests}/__pycache__/base.cpython-310.pyc | Bin .../tests}/__pycache__/fakes.cpython-310.pyc | Bin .../__pycache__/fixtures.cpython-310.pyc | Bin {tests => openstack/tests}/ansible/README.txt | 0 .../tests}/ansible/hooks/post_test_hook.sh | 0 .../tests}/ansible/roles/auth/tasks/main.yml | 0 .../roles/client_config/tasks/main.yml | 0 .../ansible/roles/group/defaults/main.yml | 0 .../tests}/ansible/roles/group/tasks/main.yml | 0 .../ansible/roles/image/defaults/main.yml | 0 .../tests}/ansible/roles/image/tasks/main.yml | 0 .../ansible/roles/keypair/defaults/main.yml | 0 .../ansible/roles/keypair/tasks/main.yml | 0 .../roles/keystone_domain/defaults/main.yml | 0 .../roles/keystone_domain/tasks/main.yml | 0 .../roles/keystone_role/defaults/main.yml | 0 .../roles/keystone_role/tasks/main.yml | 0 .../ansible/roles/network/defaults/main.yml | 0 .../ansible/roles/network/tasks/main.yml | 0 .../ansible/roles/nova_flavor/tasks/main.yml | 0 .../ansible/roles/object/tasks/main.yml | 0 .../ansible/roles/port/defaults/main.yml | 0 .../tests}/ansible/roles/port/tasks/main.yml | 0 .../ansible/roles/router/defaults/main.yml | 0 .../ansible/roles/router/tasks/main.yml | 0 .../roles/security_group/defaults/main.yml | 0 .../roles/security_group/tasks/main.yml | 0 .../ansible/roles/server/defaults/main.yaml | 0 .../ansible/roles/server/tasks/main.yml | 0 .../ansible/roles/subnet/defaults/main.yml | 0 .../ansible/roles/subnet/tasks/main.yml | 0 .../tests}/ansible/roles/user/tasks/main.yml | 0 .../ansible/roles/user_group/tasks/main.yml | 0 .../ansible/roles/volume/tasks/main.yml | 0 {tests => openstack/tests}/ansible/run.yml | 0 {tests => openstack/tests}/base.py | 0 {tests => openstack/tests}/fakes.py | 0 {tests => openstack/tests}/fixtures.py | 0 .../tests}/functional/README.rst | 0 .../tests/functional}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/base.cpython-310.pyc | Bin .../tests/functional/baremetal}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/base.cpython-310.pyc | Bin .../test_baremetal_allocation.cpython-310.pyc | Bin .../test_baremetal_chassis.cpython-310.pyc | Bin .../test_baremetal_conductor.cpython-310.pyc | Bin ...baremetal_deploy_templates.cpython-310.pyc | Bin .../test_baremetal_driver.cpython-310.pyc | Bin .../test_baremetal_node.cpython-310.pyc | Bin .../test_baremetal_port.cpython-310.pyc | Bin .../test_baremetal_port_group.cpython-310.pyc | Bin ...baremetal_volume_connector.cpython-310.pyc | Bin ...st_baremetal_volume_target.cpython-310.pyc | Bin .../tests}/functional/baremetal/base.py | 0 .../baremetal/test_baremetal_allocation.py | 0 .../baremetal/test_baremetal_chassis.py | 0 .../baremetal/test_baremetal_conductor.py | 0 .../test_baremetal_deploy_templates.py | 0 .../baremetal/test_baremetal_driver.py | 0 .../baremetal/test_baremetal_node.py | 0 .../baremetal/test_baremetal_port.py | 0 .../baremetal/test_baremetal_port_group.py | 0 .../test_baremetal_volume_connector.py | 0 .../baremetal/test_baremetal_volume_target.py | 0 {tests => openstack/tests}/functional/base.py | 0 .../functional/block_storage}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../functional/block_storage/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/base.cpython-310.pyc | Bin .../__pycache__/test_backup.cpython-310.pyc | Bin .../__pycache__/test_snapshot.cpython-310.pyc | Bin .../v2/__pycache__/test_stats.cpython-310.pyc | Bin .../v2/__pycache__/test_type.cpython-310.pyc | Bin .../__pycache__/test_volume.cpython-310.pyc | Bin .../functional/block_storage/v2/base.py | 0 .../block_storage/v2/test_backup.py | 0 .../block_storage/v2/test_snapshot.py | 0 .../functional/block_storage/v2/test_stats.py | 0 .../functional/block_storage/v2/test_type.py | 0 .../block_storage/v2/test_volume.py | 0 .../functional/block_storage}/v3/__init__.py | 0 .../v3/__pycache__/__init__.cpython-310.pyc | Bin .../v3/__pycache__/base.cpython-310.pyc | Bin .../test_attachment.cpython-310.pyc | Bin .../test_availability_zone.cpython-310.pyc | Bin .../__pycache__/test_backup.cpython-310.pyc | Bin ...test_block_storage_summary.cpython-310.pyc | Bin .../test_capabilities.cpython-310.pyc | Bin .../test_extension.cpython-310.pyc | Bin .../v3/__pycache__/test_group.cpython-310.pyc | Bin .../__pycache__/test_limits.cpython-310.pyc | Bin .../test_resource_filters.cpython-310.pyc | Bin .../__pycache__/test_service.cpython-310.pyc | Bin .../__pycache__/test_snapshot.cpython-310.pyc | Bin .../__pycache__/test_transfer.cpython-310.pyc | Bin .../v3/__pycache__/test_type.cpython-310.pyc | Bin .../__pycache__/test_volume.cpython-310.pyc | Bin .../functional/block_storage/v3/base.py | 0 .../block_storage/v3/test_attachment.py | 0 .../v3/test_availability_zone.py | 0 .../block_storage/v3/test_backup.py | 0 .../v3/test_block_storage_summary.py | 0 .../block_storage/v3/test_capabilities.py | 0 .../block_storage/v3/test_extension.py | 0 .../functional/block_storage/v3/test_group.py | 0 .../block_storage/v3/test_limits.py | 0 .../block_storage/v3/test_resource_filters.py | 0 .../block_storage/v3/test_service.py | 0 .../block_storage/v3/test_snapshot.py | 0 .../block_storage/v3/test_transfer.py | 0 .../functional/block_storage/v3/test_type.py | 0 .../block_storage/v3/test_volume.py | 0 .../tests/functional/cloud}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../test_aggregate.cpython-310.pyc | Bin .../test_cluster_templates.cpython-310.pyc | Bin .../test_clustering.cpython-310.pyc | Bin .../test_coe_clusters.cpython-310.pyc | Bin .../__pycache__/test_compute.cpython-310.pyc | Bin .../__pycache__/test_devstack.cpython-310.pyc | Bin .../__pycache__/test_domain.cpython-310.pyc | Bin .../test_endpoints.cpython-310.pyc | Bin .../__pycache__/test_flavor.cpython-310.pyc | Bin .../test_floating_ip.cpython-310.pyc | Bin .../test_floating_ip_pool.cpython-310.pyc | Bin .../__pycache__/test_groups.cpython-310.pyc | Bin .../__pycache__/test_identity.cpython-310.pyc | Bin .../__pycache__/test_image.cpython-310.pyc | Bin .../test_inventory.cpython-310.pyc | Bin .../__pycache__/test_keypairs.cpython-310.pyc | Bin .../__pycache__/test_limits.cpython-310.pyc | Bin .../test_magnum_services.cpython-310.pyc | Bin .../__pycache__/test_network.cpython-310.pyc | Bin .../__pycache__/test_object.cpython-310.pyc | Bin .../__pycache__/test_port.cpython-310.pyc | Bin .../__pycache__/test_project.cpython-310.pyc | Bin .../test_project_cleanup.cpython-310.pyc | Bin ...t_qos_bandwidth_limit_rule.cpython-310.pyc | Bin ...test_qos_dscp_marking_rule.cpython-310.pyc | Bin ...qos_minimum_bandwidth_rule.cpython-310.pyc | Bin .../test_qos_policy.cpython-310.pyc | Bin .../__pycache__/test_quotas.cpython-310.pyc | Bin .../test_range_search.cpython-310.pyc | Bin .../test_recordset.cpython-310.pyc | Bin .../__pycache__/test_router.cpython-310.pyc | Bin .../test_security_groups.cpython-310.pyc | Bin .../test_server_group.cpython-310.pyc | Bin .../__pycache__/test_services.cpython-310.pyc | Bin .../__pycache__/test_stack.cpython-310.pyc | Bin .../__pycache__/test_users.cpython-310.pyc | Bin .../__pycache__/test_volume.cpython-310.pyc | Bin .../test_volume_backup.cpython-310.pyc | Bin .../test_volume_type.cpython-310.pyc | Bin .../__pycache__/test_zone.cpython-310.pyc | Bin .../tests}/functional/cloud/test_aggregate.py | 0 .../cloud/test_cluster_templates.py | 0 .../functional/cloud/test_clustering.py | 0 .../functional/cloud/test_coe_clusters.py | 0 .../tests}/functional/cloud/test_compute.py | 0 .../tests}/functional/cloud/test_devstack.py | 0 .../tests}/functional/cloud/test_domain.py | 0 .../tests}/functional/cloud/test_endpoints.py | 0 .../tests}/functional/cloud/test_flavor.py | 0 .../functional/cloud/test_floating_ip.py | 0 .../functional/cloud/test_floating_ip_pool.py | 0 .../tests}/functional/cloud/test_groups.py | 0 .../tests}/functional/cloud/test_identity.py | 0 .../tests}/functional/cloud/test_image.py | 0 .../tests}/functional/cloud/test_inventory.py | 0 .../tests}/functional/cloud/test_keypairs.py | 0 .../tests}/functional/cloud/test_limits.py | 0 .../functional/cloud/test_magnum_services.py | 0 .../tests}/functional/cloud/test_network.py | 0 .../tests}/functional/cloud/test_object.py | 0 .../tests}/functional/cloud/test_port.py | 0 .../tests}/functional/cloud/test_project.py | 0 .../functional/cloud/test_project_cleanup.py | 0 .../cloud/test_qos_bandwidth_limit_rule.py | 0 .../cloud/test_qos_dscp_marking_rule.py | 0 .../cloud/test_qos_minimum_bandwidth_rule.py | 0 .../functional/cloud/test_qos_policy.py | 0 .../tests}/functional/cloud/test_quotas.py | 0 .../functional/cloud/test_range_search.py | 0 .../tests}/functional/cloud/test_recordset.py | 0 .../tests}/functional/cloud/test_router.py | 0 .../functional/cloud/test_security_groups.py | 0 .../functional/cloud/test_server_group.py | 0 .../tests}/functional/cloud/test_services.py | 0 .../tests}/functional/cloud/test_stack.py | 0 .../tests}/functional/cloud/test_users.py | 0 .../tests}/functional/cloud/test_volume.py | 0 .../functional/cloud/test_volume_backup.py | 0 .../functional/cloud/test_volume_type.py | 0 .../tests}/functional/cloud/test_zone.py | 0 .../tests/functional/clustering}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_cluster.cpython-310.pyc | Bin .../functional/clustering/test_cluster.py | 0 .../tests/functional/compute}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../compute/__pycache__/base.cpython-310.pyc | Bin .../tests}/functional/compute/base.py | 0 .../tests/functional/compute/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_extension.cpython-310.pyc | Bin .../__pycache__/test_flavor.cpython-310.pyc | Bin .../test_hypervisor.cpython-310.pyc | Bin .../v2/__pycache__/test_image.cpython-310.pyc | Bin .../__pycache__/test_keypair.cpython-310.pyc | Bin .../__pycache__/test_limits.cpython-310.pyc | Bin .../test_quota_set.cpython-310.pyc | Bin .../__pycache__/test_server.cpython-310.pyc | Bin .../__pycache__/test_service.cpython-310.pyc | Bin .../test_volume_attachment.cpython-310.pyc | Bin .../functional/compute/v2/test_extension.py | 0 .../functional/compute/v2/test_flavor.py | 0 .../functional/compute/v2/test_hypervisor.py | 0 .../functional/compute/v2/test_image.py | 0 .../functional/compute/v2/test_keypair.py | 0 .../functional/compute/v2/test_limits.py | 0 .../functional/compute/v2/test_quota_set.py | 0 .../functional/compute/v2/test_server.py | 0 .../functional/compute/v2/test_service.py | 0 .../compute/v2/test_volume_attachment.py | 0 .../tests/functional/dns}/__init__.py | 0 .../dns/__pycache__/__init__.cpython-310.pyc | Bin .../tests/functional/dns/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/test_zone.cpython-310.pyc | Bin .../test_zone_share.cpython-310.pyc | Bin .../tests}/functional/dns/v2/test_zone.py | 0 .../functional/dns/v2/test_zone_share.py | 0 .../tests/functional/examples}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_compute.cpython-310.pyc | Bin .../__pycache__/test_identity.cpython-310.pyc | Bin .../__pycache__/test_image.cpython-310.pyc | Bin .../__pycache__/test_network.cpython-310.pyc | Bin .../functional/examples/test_compute.py | 0 .../functional/examples/test_identity.py | 0 .../tests}/functional/examples/test_image.py | 0 .../functional/examples/test_network.py | 0 .../tests/functional/identity}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/functional/identity/v3}/__init__.py | 0 .../v3/__pycache__/__init__.cpython-310.pyc | Bin ...est_application_credential.cpython-310.pyc | Bin .../test_domain_config.cpython-310.pyc | Bin .../v3/test_application_credential.py | 0 .../identity/v3/test_domain_config.py | 0 .../tests/functional/image}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/functional/image/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../image/v2/__pycache__/base.cpython-310.pyc | Bin .../v2/__pycache__/test_image.cpython-310.pyc | Bin .../test_metadef_namespace.cpython-310.pyc | Bin .../test_metadef_object.cpython-310.pyc | Bin .../test_metadef_property.cpython-310.pyc | Bin ...test_metadef_resource_type.cpython-310.pyc | Bin .../test_metadef_schema.cpython-310.pyc | Bin .../__pycache__/test_schema.cpython-310.pyc | Bin .../v2/__pycache__/test_task.cpython-310.pyc | Bin .../tests}/functional/image/v2/base.py | 0 .../tests}/functional/image/v2/test_image.py | 0 .../image/v2/test_metadef_namespace.py | 0 .../image/v2/test_metadef_object.py | 0 .../image/v2/test_metadef_property.py | 0 .../image/v2/test_metadef_resource_type.py | 0 .../image/v2/test_metadef_schema.py | 0 .../tests}/functional/image/v2/test_schema.py | 0 .../tests}/functional/image/v2/test_task.py | 0 .../tests/functional/instance_ha}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_host.cpython-310.pyc | Bin .../__pycache__/test_segment.cpython-310.pyc | Bin .../functional/instance_ha/test_host.py | 0 .../functional/instance_ha/test_segment.py | 0 .../functional/load_balancer}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../functional/load_balancer/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_load_balancer.cpython-310.pyc | Bin .../load_balancer/v2/test_load_balancer.py | 0 .../tests/functional/network}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/functional/network/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_address_group.cpython-310.pyc | Bin .../test_address_scope.cpython-310.pyc | Bin .../v2/__pycache__/test_agent.cpython-310.pyc | Bin ...t_agent_add_remove_network.cpython-310.pyc | Bin ...st_agent_add_remove_router.cpython-310.pyc | Bin ...st_auto_allocated_topology.cpython-310.pyc | Bin .../test_availability_zone.cpython-310.pyc | Bin .../v2/__pycache__/test_bgp.cpython-310.pyc | Bin .../__pycache__/test_bgpvpn.cpython-310.pyc | Bin ...efault_security_group_rule.cpython-310.pyc | Bin .../test_dvr_router.cpython-310.pyc | Bin .../test_extension.cpython-310.pyc | Bin .../test_firewall_group.cpython-310.pyc | Bin .../test_firewall_policy.cpython-310.pyc | Bin .../test_firewall_rule.cpython-310.pyc | Bin ..._rule_insert_remove_policy.cpython-310.pyc | Bin .../__pycache__/test_flavor.cpython-310.pyc | Bin .../test_floating_ip.cpython-310.pyc | Bin .../test_l3_conntrack_helper.cpython-310.pyc | Bin .../__pycache__/test_local_ip.cpython-310.pyc | Bin .../test_local_ip_association.cpython-310.pyc | Bin .../test_ndp_proxy.cpython-310.pyc | Bin .../__pycache__/test_network.cpython-310.pyc | Bin ...st_network_ip_availability.cpython-310.pyc | Bin ...test_network_segment_range.cpython-310.pyc | Bin .../v2/__pycache__/test_port.cpython-310.pyc | Bin .../test_port_forwarding.cpython-310.pyc | Bin ...t_qos_bandwidth_limit_rule.cpython-310.pyc | Bin ...test_qos_dscp_marking_rule.cpython-310.pyc | Bin ...qos_minimum_bandwidth_rule.cpython-310.pyc | Bin ...s_minimum_packet_rate_rule.cpython-310.pyc | Bin .../test_qos_policy.cpython-310.pyc | Bin .../test_qos_rule_type.cpython-310.pyc | Bin .../v2/__pycache__/test_quota.cpython-310.pyc | Bin .../test_rbac_policy.cpython-310.pyc | Bin .../__pycache__/test_router.cpython-310.pyc | Bin ...outer_add_remove_interface.cpython-310.pyc | Bin .../test_security_group.cpython-310.pyc | Bin .../test_security_group_rule.cpython-310.pyc | Bin .../__pycache__/test_segment.cpython-310.pyc | Bin .../test_service_profile.cpython-310.pyc | Bin .../test_service_provider.cpython-310.pyc | Bin .../v2/__pycache__/test_sfc.cpython-310.pyc | Bin .../__pycache__/test_subnet.cpython-310.pyc | Bin ...st_subnet_from_subnet_pool.cpython-310.pyc | Bin .../test_subnet_pool.cpython-310.pyc | Bin .../v2/__pycache__/test_taas.cpython-310.pyc | Bin .../v2/__pycache__/test_trunk.cpython-310.pyc | Bin .../__pycache__/test_vpnaas.cpython-310.pyc | Bin .../network/v2/test_address_group.py | 0 .../network/v2/test_address_scope.py | 0 .../functional/network/v2/test_agent.py | 0 .../v2/test_agent_add_remove_network.py | 0 .../v2/test_agent_add_remove_router.py | 0 .../v2/test_auto_allocated_topology.py | 0 .../network/v2/test_availability_zone.py | 0 .../tests}/functional/network/v2/test_bgp.py | 0 .../functional/network/v2/test_bgpvpn.py | 0 .../v2/test_default_security_group_rule.py | 0 .../functional/network/v2/test_dvr_router.py | 0 .../functional/network/v2/test_extension.py | 0 .../network/v2/test_firewall_group.py | 0 .../network/v2/test_firewall_policy.py | 0 .../network/v2/test_firewall_rule.py | 0 ...test_firewall_rule_insert_remove_policy.py | 0 .../functional/network/v2/test_flavor.py | 0 .../functional/network/v2/test_floating_ip.py | 0 .../network/v2/test_l3_conntrack_helper.py | 0 .../functional/network/v2/test_local_ip.py | 0 .../network/v2/test_local_ip_association.py | 0 .../functional/network/v2/test_ndp_proxy.py | 0 .../functional/network/v2/test_network.py | 0 .../v2/test_network_ip_availability.py | 0 .../network/v2/test_network_segment_range.py | 0 .../tests}/functional/network/v2/test_port.py | 0 .../network/v2/test_port_forwarding.py | 0 .../v2/test_qos_bandwidth_limit_rule.py | 0 .../network/v2/test_qos_dscp_marking_rule.py | 0 .../v2/test_qos_minimum_bandwidth_rule.py | 0 .../v2/test_qos_minimum_packet_rate_rule.py | 0 .../functional/network/v2/test_qos_policy.py | 0 .../network/v2/test_qos_rule_type.py | 0 .../functional/network/v2/test_quota.py | 0 .../functional/network/v2/test_rbac_policy.py | 0 .../functional/network/v2/test_router.py | 0 .../v2/test_router_add_remove_interface.py | 0 .../network/v2/test_security_group.py | 0 .../network/v2/test_security_group_rule.py | 0 .../functional/network/v2/test_segment.py | 0 .../network/v2/test_service_profile.py | 0 .../network/v2/test_service_provider.py | 0 .../tests}/functional/network/v2/test_sfc.py | 0 .../functional/network/v2/test_subnet.py | 0 .../v2/test_subnet_from_subnet_pool.py | 0 .../functional/network/v2/test_subnet_pool.py | 0 .../tests}/functional/network/v2/test_taas.py | 0 .../functional/network/v2/test_trunk.py | 0 .../functional/network/v2/test_vpnaas.py | 0 .../functional/object_store}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../functional/object_store/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_account.cpython-310.pyc | Bin .../test_container.cpython-310.pyc | Bin .../v1/__pycache__/test_obj.cpython-310.pyc | Bin .../object_store/v1/test_account.py | 0 .../object_store/v1/test_container.py | 0 .../functional/object_store/v1/test_obj.py | 0 .../functional/orchestration}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../functional/orchestration/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/test_stack.cpython-310.pyc | Bin .../orchestration/v1/hello_world.yaml | 0 .../functional/orchestration/v1/test_stack.py | 0 .../tests/functional/placement}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../functional/placement/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../test_resource_provider.cpython-310.pyc | Bin ...esource_provider_inventory.cpython-310.pyc | Bin .../v1/__pycache__/test_trait.cpython-310.pyc | Bin .../placement/v1/test_resource_provider.py | 0 .../v1/test_resource_provider_inventory.py | 0 .../functional/placement/v1/test_trait.py | 0 .../shared_file_system}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/base.cpython-310.pyc | Bin .../test_availability_zone.cpython-310.pyc | Bin .../test_export_locations.cpython-310.pyc | Bin .../__pycache__/test_limit.cpython-310.pyc | Bin .../__pycache__/test_share.cpython-310.pyc | Bin .../test_share_access_rule.cpython-310.pyc | Bin .../test_share_group.cpython-310.pyc | Bin .../test_share_group_snapshot.cpython-310.pyc | Bin .../test_share_instance.cpython-310.pyc | Bin .../test_share_metadata.cpython-310.pyc | Bin .../test_share_network.cpython-310.pyc | Bin .../test_share_network_subnet.cpython-310.pyc | Bin .../test_share_snapshot.cpython-310.pyc | Bin ...st_share_snapshot_instance.cpython-310.pyc | Bin .../test_storage_pool.cpython-310.pyc | Bin .../test_user_message.cpython-310.pyc | Bin .../functional/shared_file_system/base.py | 0 .../test_availability_zone.py | 0 .../test_export_locations.py | 0 .../shared_file_system/test_limit.py | 0 .../shared_file_system/test_share.py | 0 .../test_share_access_rule.py | 0 .../shared_file_system/test_share_group.py | 0 .../test_share_group_snapshot.py | 0 .../shared_file_system/test_share_instance.py | 0 .../shared_file_system/test_share_metadata.py | 0 .../shared_file_system/test_share_network.py | 0 .../test_share_network_subnet.py | 0 .../shared_file_system/test_share_snapshot.py | 0 .../test_share_snapshot_instance.py | 0 .../shared_file_system/test_storage_pool.py | 0 .../shared_file_system/test_user_message.py | 0 {tests => openstack/tests}/unit/README.rst | 0 .../v3 => openstack/tests/unit}/__init__.py | 0 .../unit/__pycache__/__init__.cpython-310.pyc | Bin .../unit/__pycache__/base.cpython-310.pyc | Bin .../unit/__pycache__/fakes.cpython-310.pyc | Bin .../test_connection.cpython-310.pyc | Bin .../test_exceptions.cpython-310.pyc | Bin .../__pycache__/test_fakes.cpython-310.pyc | Bin .../__pycache__/test_format.cpython-310.pyc | Bin .../__pycache__/test_hacking.cpython-310.pyc | Bin .../test_microversions.cpython-310.pyc | Bin .../test_missing_version.cpython-310.pyc | Bin .../test_placement_rest.cpython-310.pyc | Bin .../__pycache__/test_proxy.cpython-310.pyc | Bin .../test_proxy_base.cpython-310.pyc | Bin .../__pycache__/test_resource.cpython-310.pyc | Bin .../__pycache__/test_stats.cpython-310.pyc | Bin .../__pycache__/test_utils.cpython-310.pyc | Bin .../tests/unit/accelerator}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/accelerator/test_version.py | 0 .../tests/unit/accelerator/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_accelerator_request.cpython-310.pyc | Bin .../test_deployable.cpython-310.pyc | Bin .../__pycache__/test_device.cpython-310.pyc | Bin .../test_device_profile.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../v2/test_accelerator_request.py | 0 .../unit/accelerator/v2/test_deployable.py | 0 .../tests}/unit/accelerator/v2/test_device.py | 0 .../accelerator/v2/test_device_profile.py | 0 .../tests}/unit/accelerator/v2/test_proxy.py | 0 .../tests/unit/baremetal}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../test_configdrive.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/baremetal/test_configdrive.py | 0 .../tests}/unit/baremetal/test_version.py | 0 .../tests/unit/baremetal/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../test_allocation.cpython-310.pyc | Bin .../__pycache__/test_chassis.cpython-310.pyc | Bin .../test_conductor.cpython-310.pyc | Bin .../test_deploy_templates.cpython-310.pyc | Bin .../__pycache__/test_driver.cpython-310.pyc | Bin .../v1/__pycache__/test_node.cpython-310.pyc | Bin .../v1/__pycache__/test_port.cpython-310.pyc | Bin .../test_port_group.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../test_volume_connector.cpython-310.pyc | Bin .../test_volume_target.cpython-310.pyc | Bin .../unit/baremetal/v1/test_allocation.py | 0 .../tests}/unit/baremetal/v1/test_chassis.py | 0 .../unit/baremetal/v1/test_conductor.py | 0 .../baremetal/v1/test_deploy_templates.py | 0 .../tests}/unit/baremetal/v1/test_driver.py | 0 .../tests}/unit/baremetal/v1/test_node.py | 0 .../tests}/unit/baremetal/v1/test_port.py | 0 .../unit/baremetal/v1/test_port_group.py | 0 .../tests}/unit/baremetal/v1/test_proxy.py | 0 .../baremetal/v1/test_volume_connector.py | 0 .../unit/baremetal/v1/test_volume_target.py | 0 .../unit/baremetal_introspection}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../baremetal_introspection/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../test_introspection_rule.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../v1/test_introspection_rule.py | 0 .../baremetal_introspection/v1/test_proxy.py | 0 {tests => openstack/tests}/unit/base.py | 0 .../tests/unit/block_storage}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/unit/block_storage/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_backup.cpython-310.pyc | Bin .../test_capabilities.cpython-310.pyc | Bin .../test_extension.cpython-310.pyc | Bin .../__pycache__/test_limits.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_snapshot.cpython-310.pyc | Bin .../v2/__pycache__/test_stats.cpython-310.pyc | Bin .../v2/__pycache__/test_type.cpython-310.pyc | Bin .../__pycache__/test_volume.cpython-310.pyc | Bin .../unit/block_storage/v2/test_backup.py | 0 .../block_storage/v2/test_capabilities.py | 0 .../unit/block_storage/v2/test_extension.py | 0 .../unit/block_storage/v2/test_limits.py | 0 .../unit/block_storage/v2/test_proxy.py | 0 .../unit/block_storage/v2/test_snapshot.py | 0 .../unit/block_storage/v2/test_stats.py | 0 .../tests}/unit/block_storage/v2/test_type.py | 0 .../unit/block_storage/v2/test_volume.py | 0 .../tests/unit/block_storage/v3}/__init__.py | 0 .../v3/__pycache__/__init__.cpython-310.pyc | Bin .../test_attachment.cpython-310.pyc | Bin .../test_availability_zone.cpython-310.pyc | Bin .../__pycache__/test_backup.cpython-310.pyc | Bin ...test_block_storage_summary.cpython-310.pyc | Bin .../test_capabilities.cpython-310.pyc | Bin .../test_extension.cpython-310.pyc | Bin .../v3/__pycache__/test_group.cpython-310.pyc | Bin .../test_group_snapshot.cpython-310.pyc | Bin .../test_group_type.cpython-310.pyc | Bin .../__pycache__/test_limits.cpython-310.pyc | Bin .../v3/__pycache__/test_proxy.cpython-310.pyc | Bin .../test_resource_filter.cpython-310.pyc | Bin .../__pycache__/test_service.cpython-310.pyc | Bin .../__pycache__/test_snapshot.cpython-310.pyc | Bin .../__pycache__/test_transfer.cpython-310.pyc | Bin .../v3/__pycache__/test_type.cpython-310.pyc | Bin .../test_type_encryption.cpython-310.pyc | Bin .../__pycache__/test_volume.cpython-310.pyc | Bin .../unit/block_storage/v3/test_attachment.py | 0 .../v3/test_availability_zone.py | 0 .../unit/block_storage/v3/test_backup.py | 0 .../v3/test_block_storage_summary.py | 0 .../block_storage/v3/test_capabilities.py | 0 .../unit/block_storage/v3/test_extension.py | 0 .../unit/block_storage/v3/test_group.py | 0 .../block_storage/v3/test_group_snapshot.py | 0 .../unit/block_storage/v3/test_group_type.py | 0 .../unit/block_storage/v3/test_limits.py | 0 .../unit/block_storage/v3/test_proxy.py | 0 .../block_storage/v3/test_resource_filter.py | 0 .../unit/block_storage/v3/test_service.py | 0 .../unit/block_storage/v3/test_snapshot.py | 0 .../unit/block_storage/v3/test_transfer.py | 0 .../tests}/unit/block_storage/v3/test_type.py | 0 .../block_storage/v3/test_type_encryption.py | 0 .../unit/block_storage/v3/test_volume.py | 0 .../tests/unit/cloud}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test__utils.cpython-310.pyc | Bin .../test_accelerator.cpython-310.pyc | Bin .../test_aggregate.cpython-310.pyc | Bin .../test_availability_zones.cpython-310.pyc | Bin .../test_baremetal_node.cpython-310.pyc | Bin .../test_baremetal_ports.cpython-310.pyc | Bin .../__pycache__/test_cloud.cpython-310.pyc | Bin .../test_cluster_templates.cpython-310.pyc | Bin .../test_clustering.cpython-310.pyc | Bin .../test_coe_clusters.cpython-310.pyc | Bin ...t_coe_clusters_certificate.cpython-310.pyc | Bin .../__pycache__/test_compute.cpython-310.pyc | Bin .../test_create_server.cpython-310.pyc | Bin ...est_create_volume_snapshot.cpython-310.pyc | Bin .../test_delete_server.cpython-310.pyc | Bin ...est_delete_volume_snapshot.cpython-310.pyc | Bin .../test_domain_params.cpython-310.pyc | Bin .../__pycache__/test_domains.cpython-310.pyc | Bin .../test_endpoints.cpython-310.pyc | Bin .../__pycache__/test_flavors.cpython-310.pyc | Bin .../test_floating_ip_common.cpython-310.pyc | Bin .../test_floating_ip_neutron.cpython-310.pyc | Bin .../test_floating_ip_nova.cpython-310.pyc | Bin .../test_floating_ip_pool.cpython-310.pyc | Bin .../__pycache__/test_fwaas.cpython-310.pyc | Bin .../__pycache__/test_groups.cpython-310.pyc | Bin .../test_identity_roles.cpython-310.pyc | Bin .../test_identity_users.cpython-310.pyc | Bin .../__pycache__/test_image.cpython-310.pyc | Bin .../test_image_snapshot.cpython-310.pyc | Bin .../test_inventory.cpython-310.pyc | Bin .../__pycache__/test_keypair.cpython-310.pyc | Bin .../__pycache__/test_limits.cpython-310.pyc | Bin .../test_magnum_services.cpython-310.pyc | Bin .../__pycache__/test_meta.cpython-310.pyc | Bin .../__pycache__/test_network.cpython-310.pyc | Bin .../__pycache__/test_object.cpython-310.pyc | Bin .../test_openstackcloud.cpython-310.pyc | Bin .../__pycache__/test_operator.cpython-310.pyc | Bin .../test_operator_noauth.cpython-310.pyc | Bin .../__pycache__/test_port.cpython-310.pyc | Bin .../__pycache__/test_project.cpython-310.pyc | Bin ...t_qos_bandwidth_limit_rule.cpython-310.pyc | Bin ...test_qos_dscp_marking_rule.cpython-310.pyc | Bin ...qos_minimum_bandwidth_rule.cpython-310.pyc | Bin .../test_qos_policy.cpython-310.pyc | Bin .../test_qos_rule_type.cpython-310.pyc | Bin .../__pycache__/test_quotas.cpython-310.pyc | Bin .../test_rebuild_server.cpython-310.pyc | Bin .../test_recordset.cpython-310.pyc | Bin .../test_role_assignment.cpython-310.pyc | Bin .../__pycache__/test_router.cpython-310.pyc | Bin .../test_security_groups.cpython-310.pyc | Bin .../test_server_console.cpython-310.pyc | Bin ...est_server_delete_metadata.cpython-310.pyc | Bin .../test_server_group.cpython-310.pyc | Bin .../test_server_set_metadata.cpython-310.pyc | Bin .../__pycache__/test_services.cpython-310.pyc | Bin .../test_shared_file_system.cpython-310.pyc | Bin .../__pycache__/test_stack.cpython-310.pyc | Bin .../__pycache__/test_subnet.cpython-310.pyc | Bin .../test_update_server.cpython-310.pyc | Bin .../__pycache__/test_usage.cpython-310.pyc | Bin .../__pycache__/test_users.cpython-310.pyc | Bin .../__pycache__/test_volume.cpython-310.pyc | Bin .../test_volume_access.cpython-310.pyc | Bin .../test_volume_backups.cpython-310.pyc | Bin .../__pycache__/test_zone.cpython-310.pyc | Bin .../tests}/unit/cloud/test__utils.py | 0 .../tests}/unit/cloud/test_accelerator.py | 0 .../tests}/unit/cloud/test_aggregate.py | 0 .../unit/cloud/test_availability_zones.py | 0 .../tests}/unit/cloud/test_baremetal_node.py | 0 .../tests}/unit/cloud/test_baremetal_ports.py | 0 .../tests}/unit/cloud/test_cloud.py | 0 .../unit/cloud/test_cluster_templates.py | 0 .../tests}/unit/cloud/test_clustering.py | 0 .../tests}/unit/cloud/test_coe_clusters.py | 0 .../cloud/test_coe_clusters_certificate.py | 0 .../tests}/unit/cloud/test_compute.py | 0 .../tests}/unit/cloud/test_create_server.py | 0 .../unit/cloud/test_create_volume_snapshot.py | 0 .../tests}/unit/cloud/test_delete_server.py | 0 .../unit/cloud/test_delete_volume_snapshot.py | 0 .../tests}/unit/cloud/test_domain_params.py | 0 .../tests}/unit/cloud/test_domains.py | 0 .../tests}/unit/cloud/test_endpoints.py | 0 .../tests}/unit/cloud/test_flavors.py | 0 .../unit/cloud/test_floating_ip_common.py | 0 .../unit/cloud/test_floating_ip_neutron.py | 0 .../unit/cloud/test_floating_ip_nova.py | 0 .../unit/cloud/test_floating_ip_pool.py | 0 .../tests}/unit/cloud/test_fwaas.py | 0 .../tests}/unit/cloud/test_groups.py | 0 .../tests}/unit/cloud/test_identity_roles.py | 0 .../tests}/unit/cloud/test_identity_users.py | 0 .../tests}/unit/cloud/test_image.py | 0 .../tests}/unit/cloud/test_image_snapshot.py | 0 .../tests}/unit/cloud/test_inventory.py | 0 .../tests}/unit/cloud/test_keypair.py | 0 .../tests}/unit/cloud/test_limits.py | 0 .../tests}/unit/cloud/test_magnum_services.py | 0 .../tests}/unit/cloud/test_meta.py | 0 .../tests}/unit/cloud/test_network.py | 0 .../tests}/unit/cloud/test_object.py | 0 .../tests}/unit/cloud/test_openstackcloud.py | 0 .../tests}/unit/cloud/test_operator.py | 0 .../tests}/unit/cloud/test_operator_noauth.py | 0 .../tests}/unit/cloud/test_port.py | 0 .../tests}/unit/cloud/test_project.py | 0 .../cloud/test_qos_bandwidth_limit_rule.py | 0 .../unit/cloud/test_qos_dscp_marking_rule.py | 0 .../cloud/test_qos_minimum_bandwidth_rule.py | 0 .../tests}/unit/cloud/test_qos_policy.py | 0 .../tests}/unit/cloud/test_qos_rule_type.py | 0 .../tests}/unit/cloud/test_quotas.py | 0 .../tests}/unit/cloud/test_rebuild_server.py | 0 .../tests}/unit/cloud/test_recordset.py | 0 .../tests}/unit/cloud/test_role_assignment.py | 0 .../tests}/unit/cloud/test_router.py | 0 .../tests}/unit/cloud/test_security_groups.py | 0 .../tests}/unit/cloud/test_server_console.py | 0 .../unit/cloud/test_server_delete_metadata.py | 0 .../tests}/unit/cloud/test_server_group.py | 0 .../unit/cloud/test_server_set_metadata.py | 0 .../tests}/unit/cloud/test_services.py | 0 .../unit/cloud/test_shared_file_system.py | 0 .../tests}/unit/cloud/test_stack.py | 0 .../tests}/unit/cloud/test_subnet.py | 0 .../tests}/unit/cloud/test_update_server.py | 0 .../tests}/unit/cloud/test_usage.py | 0 .../tests}/unit/cloud/test_users.py | 0 .../tests}/unit/cloud/test_volume.py | 0 .../tests}/unit/cloud/test_volume_access.py | 0 .../tests}/unit/cloud/test_volume_backups.py | 0 .../tests}/unit/cloud/test_zone.py | 0 .../tests/unit/clustering}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/clustering/test_version.py | 0 .../tests/unit/clustering/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_action.cpython-310.pyc | Bin .../test_build_info.cpython-310.pyc | Bin .../__pycache__/test_cluster.cpython-310.pyc | Bin .../test_cluster_attr.cpython-310.pyc | Bin .../test_cluster_policy.cpython-310.pyc | Bin .../v1/__pycache__/test_event.cpython-310.pyc | Bin .../v1/__pycache__/test_node.cpython-310.pyc | Bin .../__pycache__/test_policy.cpython-310.pyc | Bin .../test_policy_type.cpython-310.pyc | Bin .../__pycache__/test_profile.cpython-310.pyc | Bin .../test_profile_type.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_receiver.cpython-310.pyc | Bin .../__pycache__/test_service.cpython-310.pyc | Bin .../tests}/unit/clustering/v1/test_action.py | 0 .../unit/clustering/v1/test_build_info.py | 0 .../tests}/unit/clustering/v1/test_cluster.py | 0 .../unit/clustering/v1/test_cluster_attr.py | 0 .../unit/clustering/v1/test_cluster_policy.py | 0 .../tests}/unit/clustering/v1/test_event.py | 0 .../tests}/unit/clustering/v1/test_node.py | 0 .../tests}/unit/clustering/v1/test_policy.py | 0 .../unit/clustering/v1/test_policy_type.py | 0 .../tests}/unit/clustering/v1/test_profile.py | 0 .../unit/clustering/v1/test_profile_type.py | 0 .../tests}/unit/clustering/v1/test_proxy.py | 0 .../unit/clustering/v1/test_receiver.py | 0 .../tests}/unit/clustering/v1/test_service.py | 0 .../tests/unit/common}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_metadata.cpython-310.pyc | Bin .../test_quota_set.cpython-310.pyc | Bin .../__pycache__/test_tag.cpython-310.pyc | Bin .../tests}/unit/common/test_metadata.py | 0 .../tests}/unit/common/test_quota_set.py | 0 .../tests}/unit/common/test_tag.py | 0 .../tests/unit/compute}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/compute/test_version.py | 0 .../tests/unit/compute/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_aggregate.cpython-310.pyc | Bin .../test_availability_zone.cpython-310.pyc | Bin .../test_extension.cpython-310.pyc | Bin .../__pycache__/test_flavor.cpython-310.pyc | Bin .../test_hypervisor.cpython-310.pyc | Bin .../v2/__pycache__/test_image.cpython-310.pyc | Bin .../__pycache__/test_keypair.cpython-310.pyc | Bin .../__pycache__/test_limits.cpython-310.pyc | Bin .../test_migration.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_server.cpython-310.pyc | Bin .../test_server_actions.cpython-310.pyc | Bin .../test_server_diagnostics.cpython-310.pyc | Bin .../test_server_group.cpython-310.pyc | Bin .../test_server_interface.cpython-310.pyc | Bin .../test_server_ip.cpython-310.pyc | Bin .../test_server_migration.cpython-310.pyc | Bin ...test_server_remote_console.cpython-310.pyc | Bin .../__pycache__/test_service.cpython-310.pyc | Bin .../v2/__pycache__/test_usage.cpython-310.pyc | Bin .../test_volume_attachment.cpython-310.pyc | Bin .../tests}/unit/compute/v2/test_aggregate.py | 0 .../unit/compute/v2/test_availability_zone.py | 0 .../tests}/unit/compute/v2/test_extension.py | 0 .../tests}/unit/compute/v2/test_flavor.py | 0 .../tests}/unit/compute/v2/test_hypervisor.py | 0 .../tests}/unit/compute/v2/test_image.py | 0 .../tests}/unit/compute/v2/test_keypair.py | 0 .../tests}/unit/compute/v2/test_limits.py | 0 .../tests}/unit/compute/v2/test_migration.py | 0 .../tests}/unit/compute/v2/test_proxy.py | 0 .../tests}/unit/compute/v2/test_server.py | 0 .../unit/compute/v2/test_server_actions.py | 0 .../compute/v2/test_server_diagnostics.py | 0 .../unit/compute/v2/test_server_group.py | 0 .../unit/compute/v2/test_server_interface.py | 0 .../tests}/unit/compute/v2/test_server_ip.py | 0 .../unit/compute/v2/test_server_migration.py | 0 .../compute/v2/test_server_remote_console.py | 0 .../tests}/unit/compute/v2/test_service.py | 0 .../tests}/unit/compute/v2/test_usage.py | 0 .../unit/compute/v2/test_volume_attachment.py | 0 .../tests/unit/config}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../config/__pycache__/base.cpython-310.pyc | Bin .../test_cloud_config.cpython-310.pyc | Bin .../__pycache__/test_config.cpython-310.pyc | Bin .../__pycache__/test_environ.cpython-310.pyc | Bin .../test_from_conf.cpython-310.pyc | Bin .../test_from_session.cpython-310.pyc | Bin .../__pycache__/test_init.cpython-310.pyc | Bin .../__pycache__/test_json.cpython-310.pyc | Bin .../__pycache__/test_loader.cpython-310.pyc | Bin .../tests}/unit/config/base.py | 0 .../tests}/unit/config/test_cloud_config.py | 0 .../tests}/unit/config/test_config.py | 0 .../tests}/unit/config/test_environ.py | 0 .../tests}/unit/config/test_from_conf.py | 0 .../tests}/unit/config/test_from_session.py | 0 .../tests}/unit/config/test_init.py | 0 .../tests}/unit/config/test_json.py | 0 .../tests}/unit/config/test_loader.py | 0 .../__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_cluster.cpython-310.pyc | Bin .../test_cluster_certificate.cpython-310.pyc | Bin .../test_cluster_template.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_service.cpython-310.pyc | Bin .../v1/test_cluster.py | 0 .../v1/test_cluster_certificate.py | 0 .../v1/test_cluster_template.py | 0 .../v1/test_proxy.py | 0 .../v1/test_service.py | 0 .../tests/unit/database}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/unit/database/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_database.cpython-310.pyc | Bin .../__pycache__/test_flavor.cpython-310.pyc | Bin .../__pycache__/test_instance.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../v1/__pycache__/test_user.cpython-310.pyc | Bin .../tests}/unit/database/v1/test_database.py | 0 .../tests}/unit/database/v1/test_flavor.py | 0 .../tests}/unit/database/v1/test_instance.py | 0 .../tests}/unit/database/v1/test_proxy.py | 0 .../tests}/unit/database/v1/test_user.py | 0 .../tests/unit/dns}/__init__.py | 0 .../dns/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/dns/test_version.py | 0 .../tests/unit/dns}/v2/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_floating_ip.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../test_recordset.cpython-310.pyc | Bin .../v2/__pycache__/test_zone.cpython-310.pyc | Bin .../test_zone_export.cpython-310.pyc | Bin .../test_zone_import.cpython-310.pyc | Bin .../test_zone_share.cpython-310.pyc | Bin .../test_zone_transfer.cpython-310.pyc | Bin .../tests}/unit/dns/v2/test_floating_ip.py | 0 .../tests}/unit/dns/v2/test_proxy.py | 0 .../tests}/unit/dns/v2/test_recordset.py | 0 .../tests}/unit/dns/v2/test_zone.py | 0 .../tests}/unit/dns/v2/test_zone_export.py | 0 .../tests}/unit/dns/v2/test_zone_import.py | 0 .../tests}/unit/dns/v2/test_zone_share.py | 0 .../tests}/unit/dns/v2/test_zone_transfer.py | 0 .../tests/unit/fake}/__init__.py | 0 .../fake/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/fake_service.cpython-310.pyc | Bin .../tests}/unit/fake/fake_service.py | 0 .../tests/unit/fake}/v1/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/_proxy.cpython-310.pyc | Bin .../fake/v1/__pycache__/fake.cpython-310.pyc | Bin .../tests}/unit/fake/v1/_proxy.py | 0 .../tests}/unit/fake/v1/fake.py | 0 .../tests/unit/fake/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../fake/v2/__pycache__/fake.cpython-310.pyc | Bin .../tests}/unit/fake/v2/_proxy.py | 0 .../tests}/unit/fake/v2/fake.py | 0 {tests => openstack/tests}/unit/fakes.py | 0 .../tests}/unit/fixtures/accelerator.json | 0 .../unit/fixtures/bad-glance-version.json | 0 .../tests}/unit/fixtures/bad-placement.json | 0 .../tests}/unit/fixtures/baremetal.json | 0 .../unit/fixtures/block-storage-version.json | 0 .../tests}/unit/fixtures/clouds/clouds.yaml | 0 .../unit/fixtures/clouds/clouds_cache.yaml | 0 .../tests}/unit/fixtures/clustering.json | 0 .../tests}/unit/fixtures/compute-version.json | 0 .../tests}/unit/fixtures/discovery.json | 0 .../tests}/unit/fixtures/dns.json | 0 .../unit/fixtures/image-version-broken.json | 0 .../unit/fixtures/image-version-suburl.json | 0 .../unit/fixtures/image-version-v1.json | 0 .../unit/fixtures/image-version-v2.json | 0 .../tests}/unit/fixtures/image-version.json | 0 .../unit/fixtures/old-compute-version.json | 0 .../tests}/unit/fixtures/placement.json | 0 .../unit/fixtures/shared-file-system.json | 0 .../tests/unit/identity}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/identity/test_version.py | 0 .../tests/unit/identity/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_extension.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../v2/__pycache__/test_role.cpython-310.pyc | Bin .../__pycache__/test_tenant.cpython-310.pyc | Bin .../v2/__pycache__/test_user.cpython-310.pyc | Bin .../tests}/unit/identity/v2/test_extension.py | 0 .../tests}/unit/identity/v2/test_proxy.py | 0 .../tests}/unit/identity/v2/test_role.py | 0 .../tests}/unit/identity/v2/test_tenant.py | 0 .../tests}/unit/identity/v2/test_user.py | 0 .../tests/unit/identity/v3}/__init__.py | 0 .../v3/__pycache__/__init__.cpython-310.pyc | Bin ...est_application_credential.cpython-310.pyc | Bin .../test_credential.cpython-310.pyc | Bin .../__pycache__/test_domain.cpython-310.pyc | Bin .../test_domain_config.cpython-310.pyc | Bin .../__pycache__/test_endpoint.cpython-310.pyc | Bin .../test_federation_protocol.cpython-310.pyc | Bin .../v3/__pycache__/test_group.cpython-310.pyc | Bin .../test_identity_provider.cpython-310.pyc | Bin .../v3/__pycache__/test_limit.cpython-310.pyc | Bin .../__pycache__/test_mapping.cpython-310.pyc | Bin .../__pycache__/test_policy.cpython-310.pyc | Bin .../__pycache__/test_project.cpython-310.pyc | Bin .../v3/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_region.cpython-310.pyc | Bin .../test_registered_limit.cpython-310.pyc | Bin .../v3/__pycache__/test_role.cpython-310.pyc | Bin .../test_role_assignment.cpython-310.pyc | Bin ...le_domain_group_assignment.cpython-310.pyc | Bin ...ole_domain_user_assignment.cpython-310.pyc | Bin ...e_project_group_assignment.cpython-310.pyc | Bin ...le_project_user_assignment.cpython-310.pyc | Bin ...le_system_group_assignment.cpython-310.pyc | Bin ...ole_system_user_assignment.cpython-310.pyc | Bin .../__pycache__/test_service.cpython-310.pyc | Bin .../v3/__pycache__/test_trust.cpython-310.pyc | Bin .../v3/__pycache__/test_user.cpython-310.pyc | Bin .../v3/test_application_credential.py | 0 .../unit/identity/v3/test_credential.py | 0 .../tests}/unit/identity/v3/test_domain.py | 0 .../unit/identity/v3/test_domain_config.py | 0 .../tests}/unit/identity/v3/test_endpoint.py | 0 .../identity/v3/test_federation_protocol.py | 0 .../tests}/unit/identity/v3/test_group.py | 0 .../identity/v3/test_identity_provider.py | 0 .../tests}/unit/identity/v3/test_limit.py | 0 .../tests}/unit/identity/v3/test_mapping.py | 0 .../tests}/unit/identity/v3/test_policy.py | 0 .../tests}/unit/identity/v3/test_project.py | 0 .../tests}/unit/identity/v3/test_proxy.py | 0 .../tests}/unit/identity/v3/test_region.py | 0 .../unit/identity/v3/test_registered_limit.py | 0 .../tests}/unit/identity/v3/test_role.py | 0 .../unit/identity/v3/test_role_assignment.py | 0 .../v3/test_role_domain_group_assignment.py | 0 .../v3/test_role_domain_user_assignment.py | 0 .../v3/test_role_project_group_assignment.py | 0 .../v3/test_role_project_user_assignment.py | 0 .../v3/test_role_system_group_assignment.py | 0 .../v3/test_role_system_user_assignment.py | 0 .../tests}/unit/identity/v3/test_service.py | 0 .../tests}/unit/identity/v3/test_trust.py | 0 .../tests}/unit/identity/v3/test_user.py | 0 .../tests/unit/image}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/unit/image/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/test_image.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../tests}/unit/image/v1/test_image.py | 0 .../tests}/unit/image/v1/test_proxy.py | 0 .../tests/unit/image/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/test_cache.cpython-310.pyc | Bin .../v2/__pycache__/test_image.cpython-310.pyc | Bin .../__pycache__/test_member.cpython-310.pyc | Bin .../test_metadef_namespace.cpython-310.pyc | Bin .../test_metadef_object.cpython-310.pyc | Bin .../test_metadef_property.cpython-310.pyc | Bin ...test_metadef_resource_type.cpython-310.pyc | Bin ..._resource_type_association.cpython-310.pyc | Bin .../test_metadef_schema.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_schema.cpython-310.pyc | Bin .../test_service_info.cpython-310.pyc | Bin .../v2/__pycache__/test_task.cpython-310.pyc | Bin .../tests}/unit/image/v2/test_cache.py | 0 .../tests}/unit/image/v2/test_image.py | 0 .../tests}/unit/image/v2/test_member.py | 0 .../unit/image/v2/test_metadef_namespace.py | 0 .../unit/image/v2/test_metadef_object.py | 0 .../unit/image/v2/test_metadef_property.py | 0 .../image/v2/test_metadef_resource_type.py | 0 .../test_metadef_resource_type_association.py | 0 .../unit/image/v2/test_metadef_schema.py | 0 .../tests}/unit/image/v2/test_proxy.py | 0 .../tests}/unit/image/v2/test_schema.py | 0 .../tests}/unit/image/v2/test_service_info.py | 0 .../tests}/unit/image/v2/test_task.py | 0 .../tests/unit/instance_ha}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/unit/instance_ha/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/test_host.cpython-310.pyc | Bin .../test_notification.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_segment.cpython-310.pyc | Bin .../v1/__pycache__/test_vmove.cpython-310.pyc | Bin .../tests}/unit/instance_ha/v1/test_host.py | 0 .../unit/instance_ha/v1/test_notification.py | 0 .../tests}/unit/instance_ha/v1/test_proxy.py | 0 .../unit/instance_ha/v1/test_segment.py | 0 .../tests}/unit/instance_ha/v1/test_vmove.py | 0 .../tests/unit/key_manager}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/unit/key_manager/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../test_container.cpython-310.pyc | Bin .../v1/__pycache__/test_order.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_secret.cpython-310.pyc | Bin .../unit/key_manager/v1/test_container.py | 0 .../tests}/unit/key_manager/v1/test_order.py | 0 .../tests}/unit/key_manager/v1/test_proxy.py | 0 .../tests}/unit/key_manager/v1/test_secret.py | 0 .../tests/unit/load_balancer}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_amphora.cpython-310.pyc | Bin .../test_availability_zone.cpython-310.pyc | Bin ..._availability_zone_profile.cpython-310.pyc | Bin .../__pycache__/test_flavor.cpython-310.pyc | Bin .../test_flavor_profile.cpython-310.pyc | Bin .../test_health_monitor.cpython-310.pyc | Bin .../__pycache__/test_l7policy.cpython-310.pyc | Bin .../__pycache__/test_l7rule.cpython-310.pyc | Bin .../__pycache__/test_listener.cpython-310.pyc | Bin .../test_load_balancer.cpython-310.pyc | Bin .../__pycache__/test_member.cpython-310.pyc | Bin .../__pycache__/test_pool.cpython-310.pyc | Bin .../__pycache__/test_provider.cpython-310.pyc | Bin .../__pycache__/test_quota.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/load_balancer/test_amphora.py | 0 .../load_balancer/test_availability_zone.py | 0 .../test_availability_zone_profile.py | 0 .../tests}/unit/load_balancer/test_flavor.py | 0 .../unit/load_balancer/test_flavor_profile.py | 0 .../unit/load_balancer/test_health_monitor.py | 0 .../unit/load_balancer/test_l7policy.py | 0 .../tests}/unit/load_balancer/test_l7rule.py | 0 .../unit/load_balancer/test_listener.py | 0 .../unit/load_balancer/test_load_balancer.py | 0 .../tests}/unit/load_balancer/test_member.py | 0 .../tests}/unit/load_balancer/test_pool.py | 0 .../unit/load_balancer/test_provider.py | 0 .../tests}/unit/load_balancer/test_quota.py | 0 .../tests}/unit/load_balancer/test_version.py | 0 .../tests/unit/load_balancer/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../unit/load_balancer/v2/test_proxy.py | 0 .../tests/unit/message}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/message/test_version.py | 0 .../tests/unit/message/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/test_claim.cpython-310.pyc | Bin .../__pycache__/test_message.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../v2/__pycache__/test_queue.cpython-310.pyc | Bin .../test_subscription.cpython-310.pyc | Bin .../tests}/unit/message/v2/test_claim.py | 0 .../tests}/unit/message/v2/test_message.py | 0 .../tests}/unit/message/v2/test_proxy.py | 0 .../tests}/unit/message/v2/test_queue.py | 0 .../unit/message/v2/test_subscription.py | 0 .../tests/unit/network}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/network/test_version.py | 0 .../tests/unit/network/v2}/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_address_group.cpython-310.pyc | Bin .../test_address_scope.cpython-310.pyc | Bin .../v2/__pycache__/test_agent.cpython-310.pyc | Bin ...st_auto_allocated_topology.cpython-310.pyc | Bin .../test_availability_zone.cpython-310.pyc | Bin .../__pycache__/test_bgp_peer.cpython-310.pyc | Bin .../test_bgp_speaker.cpython-310.pyc | Bin .../__pycache__/test_bgpvpn.cpython-310.pyc | Bin ...efault_security_group_rule.cpython-310.pyc | Bin .../test_extension.cpython-310.pyc | Bin .../test_firewall_group.cpython-310.pyc | Bin .../test_firewall_policy.cpython-310.pyc | Bin .../test_firewall_rule.cpython-310.pyc | Bin .../__pycache__/test_flavor.cpython-310.pyc | Bin .../test_floating_ip.cpython-310.pyc | Bin .../test_health_monitor.cpython-310.pyc | Bin .../test_l3_conntrack_helper.cpython-310.pyc | Bin .../__pycache__/test_listener.cpython-310.pyc | Bin .../test_load_balancer.cpython-310.pyc | Bin .../__pycache__/test_local_ip.cpython-310.pyc | Bin .../test_local_ip_association.cpython-310.pyc | Bin .../test_metering_label.cpython-310.pyc | Bin .../test_metering_label_rule.cpython-310.pyc | Bin .../test_ndp_proxy.cpython-310.pyc | Bin .../__pycache__/test_network.cpython-310.pyc | Bin ...st_network_ip_availability.cpython-310.pyc | Bin ...test_network_segment_range.cpython-310.pyc | Bin .../v2/__pycache__/test_pool.cpython-310.pyc | Bin .../test_pool_member.cpython-310.pyc | Bin .../v2/__pycache__/test_port.cpython-310.pyc | Bin .../test_port_forwarding.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin ...t_qos_bandwidth_limit_rule.cpython-310.pyc | Bin ...test_qos_dscp_marking_rule.cpython-310.pyc | Bin ...qos_minimum_bandwidth_rule.cpython-310.pyc | Bin ...s_minimum_packet_rate_rule.cpython-310.pyc | Bin .../test_qos_policy.cpython-310.pyc | Bin .../test_qos_rule_type.cpython-310.pyc | Bin .../v2/__pycache__/test_quota.cpython-310.pyc | Bin .../test_rbac_policy.cpython-310.pyc | Bin .../__pycache__/test_router.cpython-310.pyc | Bin .../test_security_group.cpython-310.pyc | Bin .../test_security_group_rule.cpython-310.pyc | Bin .../__pycache__/test_segment.cpython-310.pyc | Bin .../test_service_profile.cpython-310.pyc | Bin .../test_service_provider.cpython-310.pyc | Bin .../test_sfc_flow_classifier.cpython-310.pyc | Bin .../test_sfc_port_chain.cpython-310.pyc | Bin .../test_sfc_port_pair.cpython-310.pyc | Bin .../test_sfc_port_pair_group.cpython-310.pyc | Bin .../test_sfc_service_graph.cpython-310.pyc | Bin .../__pycache__/test_subnet.cpython-310.pyc | Bin .../test_subnet_pool.cpython-310.pyc | Bin .../__pycache__/test_tap_flow.cpython-310.pyc | Bin .../test_tap_service.cpython-310.pyc | Bin .../v2/__pycache__/test_trunk.cpython-310.pyc | Bin .../test_vpn_endpoint_group.cpython-310.pyc | Bin .../test_vpn_ikepolicy.cpython-310.pyc | Bin ..._vpn_ipsec_site_connection.cpython-310.pyc | Bin .../test_vpn_ipsecpolicy.cpython-310.pyc | Bin .../test_vpn_service.cpython-310.pyc | Bin .../unit/network/v2/test_address_group.py | 0 .../unit/network/v2/test_address_scope.py | 0 .../tests}/unit/network/v2/test_agent.py | 0 .../v2/test_auto_allocated_topology.py | 0 .../unit/network/v2/test_availability_zone.py | 0 .../tests}/unit/network/v2/test_bgp_peer.py | 0 .../unit/network/v2/test_bgp_speaker.py | 0 .../tests}/unit/network/v2/test_bgpvpn.py | 0 .../v2/test_default_security_group_rule.py | 0 .../tests}/unit/network/v2/test_extension.py | 0 .../unit/network/v2/test_firewall_group.py | 0 .../unit/network/v2/test_firewall_policy.py | 0 .../unit/network/v2/test_firewall_rule.py | 0 .../tests}/unit/network/v2/test_flavor.py | 0 .../unit/network/v2/test_floating_ip.py | 0 .../unit/network/v2/test_health_monitor.py | 0 .../network/v2/test_l3_conntrack_helper.py | 0 .../tests}/unit/network/v2/test_listener.py | 0 .../unit/network/v2/test_load_balancer.py | 0 .../tests}/unit/network/v2/test_local_ip.py | 0 .../network/v2/test_local_ip_association.py | 0 .../unit/network/v2/test_metering_label.py | 0 .../network/v2/test_metering_label_rule.py | 0 .../tests}/unit/network/v2/test_ndp_proxy.py | 0 .../tests}/unit/network/v2/test_network.py | 0 .../v2/test_network_ip_availability.py | 0 .../network/v2/test_network_segment_range.py | 0 .../tests}/unit/network/v2/test_pool.py | 0 .../unit/network/v2/test_pool_member.py | 0 .../tests}/unit/network/v2/test_port.py | 0 .../unit/network/v2/test_port_forwarding.py | 0 .../tests}/unit/network/v2/test_proxy.py | 0 .../v2/test_qos_bandwidth_limit_rule.py | 0 .../network/v2/test_qos_dscp_marking_rule.py | 0 .../v2/test_qos_minimum_bandwidth_rule.py | 0 .../v2/test_qos_minimum_packet_rate_rule.py | 0 .../tests}/unit/network/v2/test_qos_policy.py | 0 .../unit/network/v2/test_qos_rule_type.py | 0 .../tests}/unit/network/v2/test_quota.py | 0 .../unit/network/v2/test_rbac_policy.py | 0 .../tests}/unit/network/v2/test_router.py | 0 .../unit/network/v2/test_security_group.py | 0 .../network/v2/test_security_group_rule.py | 0 .../tests}/unit/network/v2/test_segment.py | 0 .../unit/network/v2/test_service_profile.py | 0 .../unit/network/v2/test_service_provider.py | 0 .../network/v2/test_sfc_flow_classifier.py | 0 .../unit/network/v2/test_sfc_port_chain.py | 0 .../unit/network/v2/test_sfc_port_pair.py | 0 .../network/v2/test_sfc_port_pair_group.py | 0 .../unit/network/v2/test_sfc_service_graph.py | 0 .../tests}/unit/network/v2/test_subnet.py | 0 .../unit/network/v2/test_subnet_pool.py | 0 .../tests}/unit/network/v2/test_tap_flow.py | 0 .../unit/network/v2/test_tap_service.py | 0 .../tests}/unit/network/v2/test_trunk.py | 0 .../network/v2/test_vpn_endpoint_group.py | 0 .../unit/network/v2/test_vpn_ikepolicy.py | 0 .../v2/test_vpn_ipsec_site_connection.py | 0 .../unit/network/v2/test_vpn_ipsecpolicy.py | 0 .../unit/network/v2/test_vpn_service.py | 0 .../tests/unit/object_store}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../tests/unit/object_store/v1}/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_account.cpython-310.pyc | Bin .../test_container.cpython-310.pyc | Bin .../v1/__pycache__/test_info.cpython-310.pyc | Bin .../v1/__pycache__/test_obj.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../unit/object_store/v1/test_account.py | 0 .../unit/object_store/v1/test_container.py | 0 .../tests}/unit/object_store/v1/test_info.py | 0 .../tests}/unit/object_store/v1/test_obj.py | 0 .../tests}/unit/object_store/v1/test_proxy.py | 0 .../tests/unit/orchestration}/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../tests}/unit/orchestration/test_version.py | 0 .../tests/unit/orchestration/v1/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../__pycache__/test_resource.cpython-310.pyc | Bin .../test_software_config.cpython-310.pyc | Bin .../test_software_deployment.cpython-310.pyc | Bin .../v1/__pycache__/test_stack.cpython-310.pyc | Bin .../test_stack_environment.cpython-310.pyc | Bin .../test_stack_event.cpython-310.pyc | Bin .../test_stack_files.cpython-310.pyc | Bin .../test_stack_template.cpython-310.pyc | Bin .../__pycache__/test_template.cpython-310.pyc | Bin .../unit/orchestration/v1/hello_world.yaml | 0 .../unit/orchestration/v1/helloworld.txt | 0 .../unit/orchestration/v1/test_proxy.py | 0 .../unit/orchestration/v1/test_resource.py | 0 .../orchestration/v1/test_software_config.py | 0 .../v1/test_software_deployment.py | 0 .../unit/orchestration/v1/test_stack.py | 0 .../v1/test_stack_environment.py | 0 .../unit/orchestration/v1/test_stack_event.py | 0 .../unit/orchestration/v1/test_stack_files.py | 0 .../orchestration/v1/test_stack_template.py | 0 .../unit/orchestration/v1/test_template.py | 0 openstack/tests/unit/placement/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin openstack/tests/unit/placement/v1/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin .../v1/__pycache__/test_proxy.cpython-310.pyc | Bin .../test_resource_class.cpython-310.pyc | Bin .../test_resource_provider.cpython-310.pyc | Bin ...esource_provider_inventory.cpython-310.pyc | Bin .../v1/__pycache__/test_trait.cpython-310.pyc | Bin .../tests}/unit/placement/v1/test_proxy.py | 0 .../unit/placement/v1/test_resource_class.py | 0 .../placement/v1/test_resource_provider.py | 0 .../v1/test_resource_provider_inventory.py | 0 .../tests}/unit/placement/v1/test_trait.py | 0 .../tests/unit/shared_file_system/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../unit/shared_file_system/v2/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../test_availability_zone.cpython-310.pyc | Bin .../v2/__pycache__/test_limit.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../v2/__pycache__/test_share.cpython-310.pyc | Bin .../test_share_access_rule.cpython-310.pyc | Bin ...est_share_export_locations.cpython-310.pyc | Bin .../test_share_group.cpython-310.pyc | Bin .../test_share_group_snapshot.cpython-310.pyc | Bin .../test_share_instance.cpython-310.pyc | Bin .../test_share_network.cpython-310.pyc | Bin .../test_share_network_subnet.cpython-310.pyc | Bin .../test_share_snapshot.cpython-310.pyc | Bin ...st_share_snapshot_instance.cpython-310.pyc | Bin .../test_storage_pool.cpython-310.pyc | Bin .../test_user_message.cpython-310.pyc | Bin .../v2/test_availability_zone.py | 0 .../unit/shared_file_system/v2/test_limit.py | 0 .../unit/shared_file_system/v2/test_proxy.py | 0 .../unit/shared_file_system/v2/test_share.py | 0 .../v2/test_share_access_rule.py | 0 .../v2/test_share_export_locations.py | 0 .../shared_file_system/v2/test_share_group.py | 0 .../v2/test_share_group_snapshot.py | 0 .../v2/test_share_instance.py | 0 .../v2/test_share_network.py | 0 .../v2/test_share_network_subnet.py | 0 .../v2/test_share_snapshot.py | 0 .../v2/test_share_snapshot_instance.py | 0 .../v2/test_storage_pool.py | 0 .../v2/test_user_message.py | 0 .../tests}/unit/test_connection.py | 0 .../tests}/unit/test_exceptions.py | 0 {tests => openstack/tests}/unit/test_fakes.py | 0 .../tests}/unit/test_format.py | 0 .../tests}/unit/test_hacking.py | 0 .../tests}/unit/test_microversions.py | 0 .../tests}/unit/test_missing_version.py | 0 .../tests}/unit/test_placement_rest.py | 0 {tests => openstack/tests}/unit/test_proxy.py | 0 .../tests}/unit/test_proxy_base.py | 0 .../tests}/unit/test_resource.py | 0 {tests => openstack/tests}/unit/test_stats.py | 0 {tests => openstack/tests}/unit/test_utils.py | 0 openstack/tests/unit/workflow/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../test_cron_trigger.cpython-310.pyc | Bin .../test_execution.cpython-310.pyc | Bin .../__pycache__/test_version.cpython-310.pyc | Bin .../__pycache__/test_workflow.cpython-310.pyc | Bin .../tests}/unit/workflow/test_cron_trigger.py | 0 .../tests}/unit/workflow/test_execution.py | 0 .../tests}/unit/workflow/test_version.py | 0 .../tests}/unit/workflow/test_workflow.py | 0 openstack/tests/unit/workflow/v2/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/test_proxy.cpython-310.pyc | Bin .../tests}/unit/workflow/v2/test_proxy.py | 0 utils.py => openstack/utils.py | 0 version.py => openstack/version.py | 0 warnings.py => openstack/warnings.py | 0 openstack/workflow/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin .../__pycache__/version.cpython-310.pyc | Bin .../workflow_service.cpython-310.pyc | Bin openstack/workflow/v2/__init__.py | 0 .../v2/__pycache__/__init__.cpython-310.pyc | Bin .../v2/__pycache__/_proxy.cpython-310.pyc | Bin .../__pycache__/cron_trigger.cpython-310.pyc | Bin .../v2/__pycache__/execution.cpython-310.pyc | Bin .../v2/__pycache__/workflow.cpython-310.pyc | Bin {workflow => openstack/workflow}/v2/_proxy.py | 0 .../workflow}/v2/cron_trigger.py | 0 .../workflow}/v2/execution.py | 0 .../workflow}/v2/workflow.py | 0 {workflow => openstack/workflow}/version.py | 0 .../workflow}/workflow_service.py | 0 playbooks/acceptance/post.yaml | 42 + playbooks/acceptance/pre.yaml | 69 ++ playbooks/acceptance/run-with-devstack.yaml | 19 + playbooks/devstack/legacy-git.yaml | 11 + playbooks/devstack/post.yaml | 9 + post_test_hook.sh | 35 + .../add-aggregates-fc563e237755112e.yaml | 5 + ...lication-credentials-abab9106dea10c11.yaml | 5 + ...d-az-to-loadbalancer-da9bf1baaedc89a4.yaml | 5 + ...rage-group-snapshots-954cc869227317c3.yaml | 4 + ...oup-type-group-specs-d07047167224ec83.yaml | 5 + ...block-storage-groups-bf5f1af714c9e505.yaml | 4 + ...rage-service-support-ce03092ce2d7e7b9.yaml | 4 + ...rage-summary-support-dd00d424c4e6a3b1.yaml | 5 + ...ulk-create-resources-12192ec9d76c7716.yaml | 5 + ...t-support-to-octavia-b6b2b0053ca6b184.yaml | 6 + ...d-compute-flavor-ops-12149e58299c413e.yaml | 5 + .../add-current-user-id-49b6463e6bcc3b31.yaml | 4 + .../add-cyborg-support-b9afca69f709c048.yaml | 3 + .../notes/add-dns-606cc018e01d40fa.yaml | 5 + ...ain-support-for-port-3fa4568330dda07e.yaml | 5 + ...d-dns-zone-share-api-374e71cac504917f.yaml | 4 + .../add-fakes-generator-72c53d34c995fcb2.yaml | 5 + ...kup-find-snapshot-v2-756a05ccd150db82.yaml | 6 + ...rtforwarding-methods-cffc14a6283cedfb.yaml | 4 + ...domain-configuration-2e8bcaa20736b379.yaml | 5 + ...p-users-proxy-method-e37f8983b2406819.yaml | 4 + ...add-image-attributes-05b820a85cd09806.yaml | 3 + ...-image-cache-support-3f8c13550a84d749.yaml | 4 + ...-image-cache-support-78477e1686c52e56.yaml | 4 + ...ef-namespace-support-b93557afdcf4272c.yaml | 4 + ...age-metadef-property-fb87e5a7090e73ac.yaml | 4 + ...image-metadef-schema-b463825481bdf954.yaml | 3 + .../add-image-schema-9c07c2789490718a.yaml | 3 + ...d-image-service-info-90d6063b5ba0735d.yaml | 3 + .../add-image-stage-1dbc3844a042fd26.yaml | 4 + ...add-jmespath-support-f47b7a503dbbfda1.yaml | 4 + ...limit-to-shared-file-2b443c2a00c75e6e.yaml | 5 + ...d-list_flavor_access-e038253e953e6586.yaml | 4 + ...-balancer-flavor-api-d2598e30347a19fc.yaml | 4 + ...r-flavor-profile-api-e5a15157563eb75f.yaml | 4 + ...tener-alpn-protocols-ded816c78bf2080c.yaml | 3 + ...-pool-alpn-protocols-77f0c7015f176369.yaml | 3 + ...alancer-provider-api-08bcfb72ddf5b247.yaml | 4 + ...gnum-cluster-support-843fe2709b8f4789.yaml | 4 + ...anage-volume-support-a4fd90e3ff2fa0d0.yaml | 4 + ...add-masakara-support-3f7df4436ac869cf.yaml | 5 + ...i-enabled-to-segment-0e83da869d2ab03f.yaml | 4 + .../add-masakari-vmoves-873ad67830c92254.yaml | 4 + .../add-metadef-object-5eec168baf039e80.yaml | 4 + .../add-migrations-946adf16674d4b2a.yaml | 5 + ...otification-resource-f7871acb6ffd46dc.yaml | 7 + .../add-node-boot-mode-5f49882fdd86f35b.yaml | 5 + ...d-node-boot-mode-set-5718a8d6511b4826.yaml | 5 + .../add-node-inventory-52f54e16777814e7.yaml | 5 + ...node-vendor_passthru-29b384cadf795b48.yaml | 4 + ...-octavia-amphora-api-7f3586f6a4f31de4.yaml | 4 + ...-octavia-lb-failover-9a34c9577d78ad34.yaml | 4 + ...ia-lb-listener-stats-1538cc6e4f734353.yaml | 4 + ...listener-hsts-fields-50c621b71e56dc13.yaml | 5 + ...octavia-tags-support-1c1cf94184e6ebb7.yaml | 10 + ...ement-resource-class-e1c644d978b886bc.yaml | 4 + ...-provider-aggregates-1310c0be6a4097d3.yaml | 4 + ...e-provider-inventory-8714cafefae74810.yaml | 4 + ...dd-placement-support-a2011eb1e900804d.yaml | 7 + .../add-placement-trait-29957d2c03edbfb9.yaml | 4 + ...ardware-offload-type-1232c5ae3f62d7df.yaml | 7 + ...numa-affinity-policy-b42a85dbe26560d2.yaml | 6 + ...plink_status-to-port-0152d476c65979e3.yaml | 12 + .../add-server-console-078ed2696e5b04d9.yaml | 6 + ...dd-server-migrations-6e31183196f14deb.yaml | 6 + .../notes/add-service-0bcc16eb026eade3.yaml | 5 + .../add-sg-rules-bulk-f36a3e2326d74867.yaml | 5 + ...rules-to-shared-file-362bee34f7331186.yaml | 5 + ...ubnet-to-shared-file-b5de3ce6ca723209.yaml | 5 + ...twork-to-shared-file-c5c9a6b8ccf1d958.yaml | 5 + ...tance-to-shared-file-4d935f12d67bf59d.yaml | 5 + ...pshot-to-shared-file-82ecedbdbed2e3c5.yaml | 5 + ...group-to-shared-file-8cee20d8aa2afbb7.yaml | 5 + ...syste-share_instance-fffaea2d3a77ba24.yaml | 6 + ...system-locks-support-4859ca93f93a1056.yaml | 8 + ...anage-unmanage-share-830e313f96e5fd2b.yaml | 5 + ...share-group-snapshot-c5099e6c8accf077.yaml | 5 + ...ystem-share-metadata-e0415bb71d8a0a48.yaml | 6 + ...-system-share-resize-ddd650c2e32fed34.yaml | 4 + ...d-file-system-shares-2e1d44a1bb882d6d.yaml | 5 + ...d-file-system-shares-e9f356a318045607.yaml | 5 + ...-shared-file-systems-83a3767429fd5e8c.yaml | 8 + ...tems-export-location-a27c1741880c384b.yaml | 5 + .../add-shelve_offload-427f6550fc55e622.yaml | 4 + ...show-all-images-flag-352748b6c3d99f3f.yaml | 9 + .../add-stack-events-b8674d7bb657e789.yaml | 5 + .../add-stack-export-3ace746a8c80d766.yaml | 4 + ...k-suspend-and-resume-26d4fc5904291d5d.yaml | 4 + ...-pool-to-shared-file-ad45da1b2510b412.yaml | 5 + ...oadbalancer-listener-809e523a8bd6a7d5.yaml | 3 + ...ty_zone-loadbalancer-a18aa1708d7859e2.yaml | 3 + ...etting-static-routes-b3ce6cac2c5e9e51.yaml | 9 + ...stem-role-assignment-693dd3e1da33a54d.yaml | 11 + ...ms-for-octavia-pools-76f295cd2daa7f53.yaml | 6 + ...-support-for-octavia-7ecb372e6fb58101.yaml | 6 + ...er-for-octavia-pools-f0a23436d826b313.yaml | 5 + .../add-unified-limit-5ac334a08e137a70.yaml | 5 + ...ser-group-assignment-9c419b6c6bfe392c.yaml | 4 + ...ssage-to-shared-file-85d7bbccf8347c4f.yaml | 5 + ...e-attachment-support-b5f9a9e78ba88355.yaml | 11 + ...olume-extend-support-86e5c8cff5d6874e.yaml | 3 + ...age-unmanage-support-fc0be2a3fb4427d1.yaml | 5 + ...ume-transfer-support-28bf34a243d96e1b.yaml | 5 + ...d-volume-type-update-b84f50b7fa3b061d.yaml | 3 + ...cription_create_user-0ddc9a0ef4da840d.yaml | 3 + ...e_recordsets_support-69af0a6b317073e7.yaml | 4 + ...ignate_zones_support-35fa9b8b09995b43.yaml | 4 + ...add_heat_tag_support-135aa43ba1dce3bb.yaml | 7 + ...st_aggregate_support-471623faf45ec3c3.yaml | 4 + ...image_import_support-6cea2e7d7a781071.yaml | 7 + .../add_influxdb_stats-665714d715302ad5.yaml | 4 + ...num_baymodel_support-e35e5aab0b14ff75.yaml | 7 + ...num_services_support-3d95f9dcc60b5573.yaml | 3 + .../add_project_cleanup-39c3517b25a5372e.yaml | 8 + ...server_group_support-dfa472e3dae7d34d.yaml | 3 + ...t_port_binding_attrs-c70966724eb970f3.yaml | 5 + .../add_update_server-8761059d6de7e68b.yaml | 3 + .../add_update_service-28e590a7a7524053.yaml | 6 + .../add_vendor_hook-e87b6afb7f215a30.yaml | 8 + ...d-federation-support-3b65e531e57211f5.yaml | 5 + ...added-senlin-support-1eb4e47c31258f66.yaml | 3 + .../allocation-api-04f6b3b7a0ccc850.yaml | 4 + .../allocation-update-910c36c1290e5121.yaml | 4 + ...ternate-auth-context-3939f1492a0e1355.yaml | 5 + ...il-cluster-templates-3eb4b5744ba327ac.yaml | 5 + .../auth-url-vexxhost-8d63cd17bde21320.yaml | 9 + ...il-on-failed-service-cf299c37d5647b08.yaml | 6 + ...ve-mkisofs-xorrisofs-075db4d7d80e5a13.yaml | 8 + .../baremetal-details-09b27fba82111cfb.yaml | 12 + .../baremetal-errors-5cc871e8df4c9d95.yaml | 4 + .../baremetal-fields-1f6fbcd8bd1ea2aa.yaml | 4 + .../baremetal-fields-624546fa533a8287.yaml | 5 + ...metal-fields-convert-857b8804327f1e86.yaml | 5 + ...emetal-introspection-973351b3ee76309e.yaml | 4 + ...aremetal-maintenance-5cb95c6d898d4d72.yaml | 4 + .../baremetal-patch-feebd96b1b92f3b9.yaml | 13 + .../baremetal-ports-cc0f56ae0d192aba.yaml | 5 + ...aremetal-reservation-40327923092e9647.yaml | 10 + ...metal-retired-fields-f56a4632ad4797d7.yaml | 4 + .../baremetal-retries-804f553b4e22b3bf.yaml | 8 + .../baremetal-retries-ff8aa8f73fb97415.yaml | 6 + .../baremetal-traits-d1137318db33b8d1.yaml | 4 + .../baremetal-update-80effb38aae8e02d.yaml | 5 + .../baremetal-validate-ccce2a37d2a20d96.yaml | 4 + .../notes/baremetal-vif-122457118c722a9b.yaml | 4 + .../baremetal-wait-e4571cdb150b188a.yaml | 7 + .../basic-api-cache-4ad8cf2754b004d1.yaml | 4 + ...block-storage-backup-5886e91fd6e423bf.yaml | 3 + ...-storage-init-return-95b465b4755f03ca.yaml | 7 + .../block-storage-qs-0e3b69be2e709b65.yaml | 4 + .../block-storage-v3-9798d584d088c048.yaml | 4 + ...rage-type_encryption-121f8a222c822fb5.yaml | 3 + ...boot-on-server-group-a80e51850db24b3d.yaml | 4 + .../notes/bug-2001080-de52ead3c5466792.yaml | 7 + .../notes/bug-2010898-430da335e4df0efe.yaml | 5 + ...ache-auth-in-keyring-773dd5f682cd1610.yaml | 5 + ...cache-in-use-volumes-c7fa8bb378106fe3.yaml | 4 + ...tch-up-release-notes-e385fad34e9f3d6e.yaml | 15 + ...ach-vol-return-value-4834a1f78392abb1.yaml | 8 + ...lume_backups_support-6f7ceab440853833.yaml | 4 + .../cinderv2-norm-fix-037189c60b43089f.yaml | 3 + .../cleanup-objects-f99aeecf22ac13dd.yaml | 6 + ...cloud-profile-status-e0d29b5e2f10e95c.yaml | 6 + ...ng-resource-deletion-bed869ba47c2aac1.yaml | 13 + ...-aggregate-functions-45d5f2beeeac2b48.yaml | 6 + ...te-microversion-2-17-b05cb87580b8d56a.yaml | 6 + ...te-microversion-2-73-abae1d0c3740f76e.yaml | 5 + ...te-microversion-2-89-8c5187cc3bf6bd02.yaml | 7 + .../compute-quota-set-e664412d089945d2.yaml | 4 + .../compute-quotas-b07a0f24dfac8444.yaml | 3 + ...mpute-restore-server-020bf091acc9f8df.yaml | 6 + ...compute-service-zone-2b25ec705b0156c4.yaml | 7 + ...mpute-usage-defaults-5f5b2936f17ff400.yaml | 9 + ...-proxy-method-rework-dc35fe9ca3af1c16.yaml | 13 + .../conf-object-ctr-c0e1da0a67dad841.yaml | 6 + .../config-aliases-0f6297eafd05c07c.yaml | 7 + .../config-flavor-specs-ca712e17971482b6.yaml | 4 + .../notes/configdrive-f8ca9f94b2981db7.yaml | 5 + .../container-search-b0f4253ce2deeda5.yaml | 6 + .../create-object-data-870cb543543aa983.yaml | 5 + ...ate-object-directory-98e2cae175cc5082.yaml | 7 + .../create-stack-fix-12dbb59a48ac7442.yaml | 4 + ...subnet-by-subnetpool-eba1129c67ed4d96.yaml | 5 + ...e_server_network_fix-c4a56b31d2850a4b.yaml | 6 + .../create_service_norm-319a97433d68fa6a.yaml | 3 + .../cron_triggers_proxy-51aa89e91bbb9798.yaml | 4 + .../notes/data-model-cf50d86982646370.yaml | 8 + .../notes/default-cloud-7ee0bcb9e5dd24b9.yaml | 7 + ...default-microversion-b2401727cb591002.yaml | 7 + .../delete-autocreated-1839187b0aa35022.yaml | 5 + ...delete-image-objects-9d4b4e0fff36a23f.yaml | 18 + .../delete-obj-return-a3ecf0415b7a2989.yaml | 5 + .../delete_project-399f9b3107014dde.yaml | 5 + ...metering-label-rules-843d5a962e4e428c.yaml | 7 + ...ute-image-proxy-apis-986263f6aa1b1b25.yaml | 12 + .../deprecated-profile-762afdef0e8fc9e8.yaml | 6 + .../disable-service-39df96ef8a817785.yaml | 12 + ...dns-domain-parameter-d3acfc3287a9d632.yaml | 5 + ...perations_name_or_id-baba4cac5b67234d.yaml | 4 + ...-allow_get-attribute-fec75b551fb79465.yaml | 5 + ...ormatter-deserialize-30b19956fb79bb8d.yaml | 5 + .../notes/drop-python27-b824f9ce51cb1ab7.yaml | 3 + ...p-senlin-cloud-layer-c06d496acc70b014.yaml | 4 + .../dropped-python-3.5-b154887cce87947c.yaml | 4 + .../dual-stack-networks-8a81941c97d28deb.yaml | 8 + ...ndpoint-from-catalog-bad36cb0409a4e6a.yaml | 4 + ...ient-side-rate-limit-ddb82df7cb92091c.yaml | 8 + ...-not-attribute-error-49484d0fdc61f75d.yaml | 6 + ...ture-server-metadata-50caf18cec532160.yaml | 3 + ...d_server-use-details-9a22e83ec6540c98.yaml | 4 + .../notes/fip_timeout-035c4bb3ff92fa1f.yaml | 4 + .../firewall-resources-c7589d288dd57e35.yaml | 5 + ...ith-old-keystoneauth-66e11ee9d008b962.yaml | 7 + .../fix-config-drive-a148b7589f7e1022.yaml | 6 + .../fix-delete-ips-1d4eebf7bc4d4733.yaml | 6 + .../fix-dns-return-c810d5e6736322f1.yaml | 7 + ...ix-endpoint-override-ac41baeec9549ab3.yaml | 5 + ...-ip-private-matching-84e369eee380a185.yaml | 6 + ...fix-for-microversion-70cd686b6d6e3fd0.yaml | 14 + ...-hw_qemu_guest_agent-bf1147e52c84b5e8.yaml | 5 + .../fix-image-task-ae79502dd5c7ecba.yaml | 6 + .../fix-list-networks-a592725df64c306e.yaml | 3 + .../fix-microversion-354dc70deb2b2f0b.yaml | 8 + .../fix-missing-futures-a0617a1c1ce6e659.yaml | 5 + ...on-endpoint-mangling-a9dd89dd09bc71ec.yaml | 5 + ...h_type-v3multifactor-049cf52573d9e00e.yaml | 12 + ...perties-key-conflict-2161ca1faaad6731.yaml | 4 + ...ix-supplemental-fips-c9cd58aac12eb30e.yaml | 7 + .../fix-task-timing-048afea680adc62e.yaml | 5 + .../fix-update-domain-af47b066ac52eb7f.yaml | 3 + .../notes/fix-yaml-load-3e6bd852afe549b4.yaml | 5 + .../fixed-magnum-type-7406f0a60525f858.yaml | 6 + .../flavor-cloud-layer-0b4d130ac1c5e7c4.yaml | 4 + .../notes/flavor_fix-a53c6b326dc34a2c.yaml | 7 + ...ing_ip_normalization-41e0edcdb0c98aee.yaml | 10 + .../fnmatch-name-or-id-f658fe26f84086c8.yaml | 5 + ...ipv4_no_ipv6_address-9842168b5d05d262.yaml | 6 + .../notes/futurist-b54b0f449d410997.yaml | 8 + ...erate-form-signature-294ca46812f291d6.yaml | 5 + .../notes/get-limits-c383c512f8e01873.yaml | 3 + .../get-object-raw-e58284e59c81c8ef.yaml | 5 + ...et-server-by-id-none-3e8538800fa09d82.yaml | 7 + .../notes/get-usage-72d249ff790d1b8f.yaml | 3 + .../get_compute_usage-01811dccd60dc92a.yaml | 5 + .../get_object_api-968483adb016bce1.yaml | 3 + ...nce-image-pagination-0b4dfef22b25852b.yaml | 4 + .../glance-image-stores-2baa66e6743a2f2d.yaml | 4 + .../global-request-id-d7c0736f43929165.yaml | 11 + ...t-revoke-assignments-231d3f9596a1ae75.yaml | 3 + .../identity-auth-url-f3ae8ef22d2bcab6.yaml | 7 + ...image-flavor-by-name-54865b00ebbf1004.yaml | 9 + .../image-from-volume-9acf7379f5995b5b.yaml | 3 + .../image-id-filter-key-b9b6b52139a27cbe.yaml | 7 + ...-import-proxy-params-f19d8b6166104ebe.yaml | 12 + ...image-import-support-97052cdbc8ce449b.yaml | 6 + ...kwarg-only-arguments-94c9b2033d386160.yaml | 5 + .../notes/image-update-76bd3bf24c1c1380.yaml | 5 + .../improve-metrics-5d7ce70ce4021d72.yaml | 5 + ...nfer-secgroup-source-58d840aaf1a1f485.yaml | 9 + ...metering-label-rules-e04b797adac5d0d0.yaml | 5 + .../introspection-node-6a3b7d55839ef82c.yaml | 4 + ...c-conductors-support-3bf27e8b2f0299ba.yaml | 4 + .../ironic-deploy-steps-2c0f39d7d2a13289.yaml | 4 + ...loy-template-support-fa56005365ed6e4d.yaml | 4 + ...ection_rules_support-18b0488a76800122.yaml | 3 + .../ironic-microversion-ba5b0f36f11196a6.yaml | 4 + .../ironic-node-shard-35f2557c3dbfff1d.yaml | 4 + ...olume_target-support-8130361804366787.yaml | 4 + .../notes/ksa-discovery-86a4ef00d85ea87f.yaml | 5 + .../less-file-hashing-d2497337da5acbef.yaml | 5 + ...-all_projects-filter-27f1d471a7848507.yaml | 33 + .../notes/list-az-names-a38c277d1192471b.yaml | 3 + ...resources-empty-list-6aa760c01e7d97d7.yaml | 5 + ...ignments-keystone-v2-b127b12b4860f50c.yaml | 3 + ...servers-all-projects-349e6dc665ba2e8d.yaml | 6 + .../notes/load-yaml-3177efca78e5c67a.yaml | 7 + ...tion-server-resource-af77fdab5d35d421.yaml | 6 + .../log-request-ids-37507cb6eed9a7da.yaml | 5 + ...update-microversions-4b910e63cebd65e2.yaml | 11 + .../notes/magic-fixes-dca4ae4dac2441a8.yaml | 6 + ...ud-region-standalone-848a2c4b5f3ebc29.yaml | 6 + .../make-rest-client-dd3d365632a26fa0.yaml | 4 + ...nt-version-discovery-84125700f159491a.yaml | 6 + ...metadata_easier.yaml-e9751723e002e06f.yaml | 5 + ...ade-os-client-config-29878734ad643e33.yaml | 4 + .../meta-passthrough-d695bff4f9366b65.yaml | 7 + ...data-key-name-bugfix-77612a825c5145d7.yaml | 4 + ...n-max-legacy-version-301242466ddefa93.yaml | 15 + .../notes/mtu-settings-8ce8b54d096580a2.yaml | 6 + .../multiple-updates-b48cc2f6db2e526d.yaml | 14 + .../munch-sub-dict-e1619c71c26879cb.yaml | 5 + .../nat-source-field-7c7db2a724616d59.yaml | 6 + .../nat-source-support-92aaf6b336d0b848.yaml | 4 + .../notes/net_provider-dd64b697476b7094.yaml | 3 + .../notes/network-data-bd94e4a499ba3e0d.yaml | 5 + .../notes/network-data-deb5772edc111428.yaml | 6 + .../notes/network-list-e6e9dafdd8446263.yaml | 10 + ...qos-rule-filter-keys-324e3222510fd362.yaml | 7 + .../network-quotas-b98cce9ffeffdbf4.yaml | 3 + ...p-query-parameter-id-f6dda45b2c09dbaa.yaml | 9 + ...rk_add_bgp_resources-c182dc2873d6db18.yaml | 10 + ...add_bgpvpn_resources-b3bd0b568c3c99db.yaml | 7 + ...rk_add_sfc_resources-8a52c0c8c1f8e932.yaml | 6 + ...k_add_taas_resources-86a947265e11ce84.yaml | 5 + .../neutron-discovery-54399116d5f810ee.yaml | 5 + ...ility_zone_extension-675c2460ebb50a09.yaml | 8 + ...-floating-attributes-213cdf5681d337e1.yaml | 4 + .../no-import-fallback-a09b5d5a11299933.yaml | 5 + ...o-inspect-associated-563e272785bb6016.yaml | 5 + .../no-more-troveclient-0a4739c21432ac63.yaml | 6 + ...o-start-task-manager-56773f3ea5eb3a59.yaml | 6 + .../node-boot-devices-2ab4991d75a2ab52.yaml | 8 + .../notes/node-consoles-63589f22da98a689.yaml | 8 + .../notes/node-create-027ea99193f344ef.yaml | 9 + .../node-inject-nmi-53d12681026e0b6c.yaml | 6 + .../notes/node-owner-7f4b083ff9da8cce.yaml | 7 + ...-set-provision-state-3472cbd81c47458f.yaml | 11 + ...orm_role_assignments-a13f41768e62d40c.yaml | 4 + .../normalize-images-1331bea7bfffa36a.yaml | 6 + .../normalize-machine-290d9f2a3b3a7ef0.yaml | 4 + .../nova-flavor-to-rest-0a5757e35714a690.yaml | 5 + ...ova-old-microversion-5e4b8e239ba44096.yaml | 5 + ...-checksum-generation-ea1c1e47d2290054.yaml | 4 + .../object-chunked-data-ee619b7d4759b8d2.yaml | 6 + .../notes/object-search-a5f5ec4b2df3e045.yaml | 6 + .../notes/old-placement-4b3c34abb8fe7b81.yaml | 6 + ...imize-server-console-1d27c107b9a1cdc3.yaml | 6 + .../option-precedence-1fecab21fdfb2c33.yaml | 7 + .../port-device-profile-af91e25c45321691.yaml | 5 + .../notes/power-wait-751083852f958cb4.yaml | 4 + ...eanup-exclude-option-65cba962eaa5b61a.yaml | 6 + ...roject-cleanup-swift-f67615e5c3ab8fd8.yaml | 6 + ...on-state-negotiation-0155b4d0e932054c.yaml | 12 + .../notes/python-3.5-629817cec092d528.yaml | 8 + .../qos-min-pps-rule-52df1b150b1d3f68.yaml | 5 + ...-port-network-policy-cab43faa0f8bc036.yaml | 5 + releasenotes/notes/r1-cab94ae7d749a1ec.yaml | 31 + releasenotes/notes/r1-d4efe289ebf0cbcd.yaml | 40 + ...ace-block-storage-v2-fe0dd69b9e037599.yaml | 6 + .../register-machine-72ac3e65a1ed55b1.yaml | 6 + ...ote-address-group-id-6291816888cb3de7.yaml | 6 + .../remote-profile-100218d08b25019d.yaml | 7 + ...emove-auto-container-527f1807605b42c0.yaml | 6 + ...tore-details-classes-158ab1f46655320a.yaml | 6 + ...-cloud-caching-layer-2b0384870a45e8a3.yaml | 7 + .../remove-magnumclient-875b3e513f98f57c.yaml | 4 + .../notes/remove-metric-fe5ddfd52b43c852.yaml | 5 + .../remove-novaclient-3f8d4db20d5f9582.yaml | 5 + ...rverdetails-resource-f66cb278b224627d.yaml | 5 + ...ed-deprecated-things-8700fe3592c3bf18.yaml | 5 + ...removed-glanceclient-105c7fba9481b9be.yaml | 28 + .../notes/removed-meter-6f6651b6e452e000.yaml | 5 + .../removed-profile-437f3038025b0fb3.yaml | 8 + .../removed-profile-b033d870937868a1.yaml | 5 + .../removed-swiftclient-aff22bfaeee5f59f.yaml | 5 + .../rename-base-proxy-b9fcb22d373864a2.yaml | 5 + ...ame-resource-methods-5f2a716b08156765.yaml | 12 + ...e-service-force-down-6f462d62959a5315.yaml | 9 + .../renamed-bare-metal-b1cdbc52af14e042.yaml | 4 + .../renamed-block-store-bc5e0a7315bfeb67.yaml | 4 + .../renamed-cluster-743da6d321fffcba.yaml | 4 + .../renamed-telemetry-c08ae3e72afca24f.yaml | 4 + ...rs-with-platformdirs-d3f5bcbe726b7829.yaml | 8 + .../notes/request-stats-9d70480bebbdb4d6.yaml | 5 + ...-find-filter-by-name-e647e5c507ff4b6c.yaml | 7 + .../resource2-migration-835590b300bef621.yaml | 11 + ...r-find-proxy-methods-947a3280732c448a.yaml | 25 + .../revert-futurist-34acc42fd3f0e7f3.yaml | 8 + ...k-compute-hypervisor-a62f275a0fd1f074.yaml | 5 + ...er-extraroute-atomic-1a0c84c3fd90ceb1.yaml | 4 + .../notes/router_ext_gw-b86582317bca8b39.yaml | 4 + .../notes/sdk-helper-41f8d815cfbcfb00.yaml | 4 + .../search_resource-b9c2f772e01d3b2c.yaml | 7 + ...microversion-support-f14b293d9c3d3d5e.yaml | 5 + ...rver-create-error-id-66c698c7e633fb8b.yaml | 4 + ...rver-security-groups-840ab28c04f359de.yaml | 4 + ...service_enabled_flag-c917b305d3f2e8fd.yaml | 5 + .../session-client-b581a6e5d18c8f04.yaml | 6 + .../set-bootable-volume-454a7a41e7e77d08.yaml | 4 + .../notes/shade-helper-568f8cb372eef6d9.yaml | 4 + ...hade-into-connection-81191fb3d0ddaf6e.yaml | 5 + .../shade-location-b0d2e5cae743b738.yaml | 8 + .../snap-updated_at-a46711b6160e3a26.yaml | 3 + .../notes/stack-update-5886e91fd6e423bf.yaml | 4 + .../started-using-reno-242e2b0cd27f9480.yaml | 3 + ...teful-security-group-f32a78b9bbb49874.yaml | 4 + ...stop-using-tenant-id-42eb35139ba9eeff.yaml | 4 + .../notes/story-2010784-21d23043155497f5.yaml | 33 + .../notes/stream-object-6ecd43511dca726b.yaml | 4 + .../stream-to-file-91f48d6dcea399c6.yaml | 3 + .../notes/strict-mode-d493abc0c3e87945.yaml | 6 + .../strict-proxies-4a315f68f387ee89.yaml | 8 + ...t_stdin_image_upload-305c04fb2daeb32c.yaml | 4 + .../swift-set-metadata-c18c60e440f9e4a7.yaml | 5 + .../swift-upload-lock-d18f3d42b3a0719a.yaml | 5 + .../switch-coe-to-proxy-c18789ed27cc1d95.yaml | 5 + ...h-nova-to-created_at-45b7b50af6a2d59e.yaml | 5 + .../switch-to-warnings-333955d19afc99ca.yaml | 7 + ...sk-manager-parameter-c6606653532248f2.yaml | 6 + ...toggle-port-security-f5bc606e82141feb.yaml | 9 + .../notes/unprocessed-2d75133911945869.yaml | 5 + ...lve-to-specific-host-84666d440dce4a73.yaml | 7 + ...update-role-property-b16e902e913c7b25.yaml | 5 + .../update_endpoint-f87c1f42d0c0d1ef.yaml | 8 + .../update_workflow-ecdef6056ef2687b.yaml | 3 + .../use-interface-ip-c5cb3e7c91150096.yaml | 13 + .../use-proxy-layer-dfc3764d52bc1f2a.yaml | 7 + .../notes/v4-fixed-ip-325740fdae85ffa9.yaml | 7 + .../validate-machine-dcf528b8f587e3f0.yaml | 5 + ...vendor-add-betacloud-03872c3485104853.yaml | 3 + ...dd-limestonenetworks-99b2ffab9fc23b08.yaml | 4 + ...dor-update-betacloud-37dac22d8d91a3c5.yaml | 3 + .../vendor-updates-f11184ba56bb27cf.yaml | 4 + .../version-command-70c37dd7f880e9ae.yaml | 4 + .../version-discovery-a501c4e9e9869f77.yaml | 13 + .../vol-updated_at-274c3a2bb94c8939.yaml | 3 + .../notes/volume-quotas-5b674ee8c1f71eb6.yaml | 3 + .../notes/volume-types-a07a14ae668e7dd2.yaml | 4 + .../notes/volume-update-876e6540c8471440.yaml | 4 + ...volume_connector-api-f001e6f5fc4d1688.yaml | 4 + ...it-on-image-snapshot-27cd2eacab2fabd8.yaml | 7 + ...vision-state-no-fail-efa74dd39f687df8.yaml | 6 + .../wait_for_server-8dc8446b7c673d36.yaml | 3 + ...elete_callback_param-68d30161e23340bb.yaml | 8 + .../wire-in-retries-10898f7bc81e2269.yaml | 7 + ...ound-transitive-deps-1e7a214f3256b77e.yaml | 9 + .../xenapi-use-agent-ecc33e520da81ffa.yaml | 7 + releasenotes/source/2023.1.rst | 6 + releasenotes/source/2023.2.rst | 6 + releasenotes/source/_static/.placeholder | 0 releasenotes/source/_templates/.placeholder | 0 releasenotes/source/conf.py | 278 ++++++ releasenotes/source/index.rst | 22 + releasenotes/source/ocata.rst | 6 + releasenotes/source/pike.rst | 6 + releasenotes/source/queens.rst | 6 + releasenotes/source/rocky.rst | 6 + releasenotes/source/stein.rst | 6 + releasenotes/source/train.rst | 6 + releasenotes/source/unreleased.rst | 5 + releasenotes/source/ussuri.rst | 6 + releasenotes/source/victoria.rst | 6 + releasenotes/source/wallaby.rst | 6 + releasenotes/source/xena.rst | 6 + releasenotes/source/yoga.rst | 6 + releasenotes/source/zed.rst | 6 + requirements.txt | 13 + roles/deploy-clouds-config/README.rst | 0 roles/deploy-clouds-config/defaults/main.yaml | 1 + roles/deploy-clouds-config/tasks/main.yaml | 11 + .../templates/clouds.yaml.j2 | 2 + setup.cfg | 55 ++ setup.py | 19 + test-requirements.txt | 13 + tools/keystone_version.py | 92 ++ tools/nova_version.py | 61 ++ tools/print-services.py | 135 +++ tox.ini | 166 ++++ zuul.d/acceptance-jobs.yaml | 156 ++++ zuul.d/functional-jobs.yaml | 469 ++++++++++ zuul.d/metal-jobs.yaml | 32 + zuul.d/project.yaml | 48 ++ 3114 files changed, 18925 insertions(+) create mode 100644 CONTRIBUTING.rst create mode 100644 HACKING.rst create mode 100644 LICENSE create mode 100644 MANIFEST.in create mode 100644 README.rst create mode 100644 SHADE-MERGE-TODO.rst create mode 100644 babel.cfg create mode 100644 bindep.txt create mode 100644 devstack/plugin.sh create mode 100644 doc/requirements.txt create mode 100644 doc/source/conf.py create mode 100644 doc/source/contributor/clouds.yaml create mode 100644 doc/source/contributor/coding.rst create mode 100644 doc/source/contributor/contributing.rst create mode 100644 doc/source/contributor/create/examples/resource/fake.py create mode 100644 doc/source/contributor/create/examples/resource/fake_service.py create mode 100644 doc/source/contributor/create/resource.rst create mode 100644 doc/source/contributor/history.rst create mode 100644 doc/source/contributor/index.rst create mode 100644 doc/source/contributor/layout.rst create mode 100644 doc/source/contributor/layout.txt create mode 100644 doc/source/contributor/setup.rst create mode 100644 doc/source/contributor/testing.rst create mode 100644 doc/source/glossary.rst create mode 100644 doc/source/index.rst create mode 100644 doc/source/install/index.rst create mode 100644 doc/source/releasenotes.rst create mode 100644 doc/source/user/config/configuration.rst create mode 100644 doc/source/user/config/index.rst create mode 100644 doc/source/user/config/network-config.rst create mode 100644 doc/source/user/config/reference.rst create mode 100644 doc/source/user/config/using.rst create mode 100644 doc/source/user/config/vendor-support.rst create mode 100644 doc/source/user/connection.rst create mode 120000 doc/source/user/examples create mode 100644 doc/source/user/exceptions.rst create mode 100644 doc/source/user/guides/baremetal.rst create mode 100644 doc/source/user/guides/block_storage.rst create mode 100644 doc/source/user/guides/clustering.rst create mode 100644 doc/source/user/guides/clustering/action.rst create mode 100644 doc/source/user/guides/clustering/cluster.rst create mode 100644 doc/source/user/guides/clustering/event.rst create mode 100644 doc/source/user/guides/clustering/node.rst create mode 100644 doc/source/user/guides/clustering/policy.rst create mode 100644 doc/source/user/guides/clustering/policy_type.rst create mode 100644 doc/source/user/guides/clustering/profile.rst create mode 100644 doc/source/user/guides/clustering/profile_type.rst create mode 100644 doc/source/user/guides/clustering/receiver.rst create mode 100644 doc/source/user/guides/compute.rst create mode 100644 doc/source/user/guides/connect.rst create mode 100644 doc/source/user/guides/connect_from_config.rst create mode 100644 doc/source/user/guides/database.rst create mode 100644 doc/source/user/guides/dns.rst create mode 100644 doc/source/user/guides/identity.rst create mode 100644 doc/source/user/guides/image.rst create mode 100644 doc/source/user/guides/intro.rst create mode 100644 doc/source/user/guides/key_manager.rst create mode 100644 doc/source/user/guides/logging.rst create mode 100644 doc/source/user/guides/message.rst create mode 100644 doc/source/user/guides/network.rst create mode 100644 doc/source/user/guides/object_store.rst create mode 100644 doc/source/user/guides/orchestration.rst create mode 100644 doc/source/user/guides/shared_file_system.rst create mode 100644 doc/source/user/guides/stats.rst create mode 100644 doc/source/user/index.rst create mode 100644 doc/source/user/microversions.rst create mode 100644 doc/source/user/model.rst create mode 100644 doc/source/user/multi-cloud-demo.rst create mode 100644 doc/source/user/proxies/accelerator.rst create mode 100644 doc/source/user/proxies/baremetal.rst create mode 100644 doc/source/user/proxies/baremetal_introspection.rst create mode 100644 doc/source/user/proxies/block_storage_v2.rst create mode 100644 doc/source/user/proxies/block_storage_v3.rst create mode 100644 doc/source/user/proxies/clustering.rst create mode 100644 doc/source/user/proxies/compute.rst create mode 100644 doc/source/user/proxies/container_infrastructure_management.rst create mode 100644 doc/source/user/proxies/database.rst create mode 100644 doc/source/user/proxies/dns.rst create mode 100644 doc/source/user/proxies/identity_v2.rst create mode 100644 doc/source/user/proxies/identity_v3.rst create mode 100644 doc/source/user/proxies/image_v1.rst create mode 100644 doc/source/user/proxies/image_v2.rst create mode 100644 doc/source/user/proxies/key_manager.rst create mode 100644 doc/source/user/proxies/load_balancer_v2.rst create mode 100644 doc/source/user/proxies/message_v2.rst create mode 100644 doc/source/user/proxies/network.rst create mode 100644 doc/source/user/proxies/object_store.rst create mode 100644 doc/source/user/proxies/orchestration.rst create mode 100644 doc/source/user/proxies/placement.rst create mode 100644 doc/source/user/proxies/shared_file_system.rst create mode 100644 doc/source/user/proxies/workflow.rst create mode 100644 doc/source/user/resource.rst create mode 100644 doc/source/user/resources/accelerator/index.rst create mode 100644 doc/source/user/resources/accelerator/v2/accelerator_request.rst create mode 100644 doc/source/user/resources/accelerator/v2/deployable.rst create mode 100644 doc/source/user/resources/accelerator/v2/device.rst create mode 100644 doc/source/user/resources/accelerator/v2/device_profile.rst create mode 100644 doc/source/user/resources/baremetal/index.rst create mode 100644 doc/source/user/resources/baremetal/v1/allocation.rst create mode 100644 doc/source/user/resources/baremetal/v1/chassis.rst create mode 100644 doc/source/user/resources/baremetal/v1/conductor.rst create mode 100644 doc/source/user/resources/baremetal/v1/deploy_templates.rst create mode 100644 doc/source/user/resources/baremetal/v1/driver.rst create mode 100644 doc/source/user/resources/baremetal/v1/node.rst create mode 100644 doc/source/user/resources/baremetal/v1/port.rst create mode 100644 doc/source/user/resources/baremetal/v1/port_group.rst create mode 100644 doc/source/user/resources/baremetal/v1/volume_connector.rst create mode 100644 doc/source/user/resources/baremetal/v1/volume_target.rst create mode 100644 doc/source/user/resources/baremetal_introspection/index.rst create mode 100644 doc/source/user/resources/baremetal_introspection/v1/introspection.rst create mode 100644 doc/source/user/resources/baremetal_introspection/v1/introspection_rule.rst create mode 100644 doc/source/user/resources/block_storage/index.rst create mode 100644 doc/source/user/resources/block_storage/v2/backup.rst create mode 100644 doc/source/user/resources/block_storage/v2/capabilities.rst create mode 100644 doc/source/user/resources/block_storage/v2/limits.rst create mode 100644 doc/source/user/resources/block_storage/v2/quota_set.rst create mode 100644 doc/source/user/resources/block_storage/v2/snapshot.rst create mode 100644 doc/source/user/resources/block_storage/v2/stats.rst create mode 100644 doc/source/user/resources/block_storage/v2/type.rst create mode 100644 doc/source/user/resources/block_storage/v2/volume.rst create mode 100644 doc/source/user/resources/block_storage/v3/attachment.rst create mode 100644 doc/source/user/resources/block_storage/v3/availability_zone.rst create mode 100644 doc/source/user/resources/block_storage/v3/backup.rst create mode 100644 doc/source/user/resources/block_storage/v3/block_storage_summary.rst create mode 100644 doc/source/user/resources/block_storage/v3/capabilities.rst create mode 100644 doc/source/user/resources/block_storage/v3/extension.rst create mode 100644 doc/source/user/resources/block_storage/v3/group.rst create mode 100644 doc/source/user/resources/block_storage/v3/group_snapshot.rst create mode 100644 doc/source/user/resources/block_storage/v3/group_type.rst create mode 100644 doc/source/user/resources/block_storage/v3/limits.rst create mode 100644 doc/source/user/resources/block_storage/v3/quota_set.rst create mode 100644 doc/source/user/resources/block_storage/v3/resource_filter.rst create mode 100644 doc/source/user/resources/block_storage/v3/service.rst create mode 100644 doc/source/user/resources/block_storage/v3/snapshot.rst create mode 100644 doc/source/user/resources/block_storage/v3/stats.rst create mode 100644 doc/source/user/resources/block_storage/v3/transfer.rst create mode 100644 doc/source/user/resources/block_storage/v3/type.rst create mode 100644 doc/source/user/resources/block_storage/v3/volume.rst create mode 100644 doc/source/user/resources/clustering/index.rst create mode 100644 doc/source/user/resources/clustering/v1/action.rst create mode 100644 doc/source/user/resources/clustering/v1/build_info.rst create mode 100644 doc/source/user/resources/clustering/v1/cluster.rst create mode 100644 doc/source/user/resources/clustering/v1/cluster_policy.rst create mode 100644 doc/source/user/resources/clustering/v1/event.rst create mode 100644 doc/source/user/resources/clustering/v1/node.rst create mode 100644 doc/source/user/resources/clustering/v1/policy.rst create mode 100644 doc/source/user/resources/clustering/v1/policy_type.rst create mode 100644 doc/source/user/resources/clustering/v1/profile.rst create mode 100644 doc/source/user/resources/clustering/v1/profile_type.rst create mode 100644 doc/source/user/resources/clustering/v1/receiver.rst create mode 100644 doc/source/user/resources/compute/index.rst create mode 100644 doc/source/user/resources/compute/v2/aggregate.rst create mode 100644 doc/source/user/resources/compute/v2/availability_zone.rst create mode 100644 doc/source/user/resources/compute/v2/extension.rst create mode 100644 doc/source/user/resources/compute/v2/flavor.rst create mode 100644 doc/source/user/resources/compute/v2/hypervisor.rst create mode 100644 doc/source/user/resources/compute/v2/image.rst create mode 100644 doc/source/user/resources/compute/v2/keypair.rst create mode 100644 doc/source/user/resources/compute/v2/limits.rst create mode 100644 doc/source/user/resources/compute/v2/migration.rst create mode 100644 doc/source/user/resources/compute/v2/quota_set.rst create mode 100644 doc/source/user/resources/compute/v2/server.rst create mode 100644 doc/source/user/resources/compute/v2/server_action.rst create mode 100644 doc/source/user/resources/compute/v2/server_diagnostics.rst create mode 100644 doc/source/user/resources/compute/v2/server_group.rst create mode 100644 doc/source/user/resources/compute/v2/server_interface.rst create mode 100644 doc/source/user/resources/compute/v2/server_ip.rst create mode 100644 doc/source/user/resources/compute/v2/server_migration.rst create mode 100644 doc/source/user/resources/compute/v2/server_remote_console.rst create mode 100644 doc/source/user/resources/compute/v2/service.rst create mode 100644 doc/source/user/resources/compute/v2/usage.rst create mode 100644 doc/source/user/resources/compute/v2/volume_attachment.rst create mode 100644 doc/source/user/resources/compute/version.rst create mode 100644 doc/source/user/resources/container_infrastructure_management/cluster.rst create mode 100644 doc/source/user/resources/container_infrastructure_management/cluster_certificate.rst create mode 100644 doc/source/user/resources/container_infrastructure_management/cluster_template.rst create mode 100644 doc/source/user/resources/container_infrastructure_management/index.rst create mode 100644 doc/source/user/resources/container_infrastructure_management/service.rst create mode 100644 doc/source/user/resources/database/index.rst create mode 100644 doc/source/user/resources/database/v1/database.rst create mode 100644 doc/source/user/resources/database/v1/flavor.rst create mode 100644 doc/source/user/resources/database/v1/instance.rst create mode 100644 doc/source/user/resources/database/v1/user.rst create mode 100644 doc/source/user/resources/dns/index.rst create mode 100644 doc/source/user/resources/dns/v2/floating_ip.rst create mode 100644 doc/source/user/resources/dns/v2/recordset.rst create mode 100644 doc/source/user/resources/dns/v2/zone.rst create mode 100644 doc/source/user/resources/dns/v2/zone_export.rst create mode 100644 doc/source/user/resources/dns/v2/zone_import.rst create mode 100644 doc/source/user/resources/dns/v2/zone_share.rst create mode 100644 doc/source/user/resources/dns/v2/zone_transfer.rst create mode 100644 doc/source/user/resources/identity/index.rst create mode 100644 doc/source/user/resources/identity/v2/extension.rst create mode 100644 doc/source/user/resources/identity/v2/role.rst create mode 100644 doc/source/user/resources/identity/v2/tenant.rst create mode 100644 doc/source/user/resources/identity/v2/user.rst create mode 100644 doc/source/user/resources/identity/v3/application_credential.rst create mode 100644 doc/source/user/resources/identity/v3/credential.rst create mode 100644 doc/source/user/resources/identity/v3/domain.rst create mode 100644 doc/source/user/resources/identity/v3/domain_config.rst create mode 100644 doc/source/user/resources/identity/v3/endpoint.rst create mode 100644 doc/source/user/resources/identity/v3/federation_protocol.rst create mode 100644 doc/source/user/resources/identity/v3/group.rst create mode 100644 doc/source/user/resources/identity/v3/identity_provider.rst create mode 100644 doc/source/user/resources/identity/v3/limit.rst create mode 100644 doc/source/user/resources/identity/v3/mapping.rst create mode 100644 doc/source/user/resources/identity/v3/policy.rst create mode 100644 doc/source/user/resources/identity/v3/project.rst create mode 100644 doc/source/user/resources/identity/v3/region.rst create mode 100644 doc/source/user/resources/identity/v3/registered_limit.rst create mode 100644 doc/source/user/resources/identity/v3/role.rst create mode 100644 doc/source/user/resources/identity/v3/role_assignment.rst create mode 100644 doc/source/user/resources/identity/v3/role_domain_group_assignment.rst create mode 100644 doc/source/user/resources/identity/v3/role_domain_user_assignment.rst create mode 100644 doc/source/user/resources/identity/v3/role_project_group_assignment.rst create mode 100644 doc/source/user/resources/identity/v3/role_project_user_assignment.rst create mode 100644 doc/source/user/resources/identity/v3/role_system_group_assignment.rst create mode 100644 doc/source/user/resources/identity/v3/role_system_user_assignment.rst create mode 100644 doc/source/user/resources/identity/v3/service.rst create mode 100644 doc/source/user/resources/identity/v3/system.rst create mode 100644 doc/source/user/resources/identity/v3/trust.rst create mode 100644 doc/source/user/resources/identity/v3/user.rst create mode 100644 doc/source/user/resources/identity/version.rst create mode 100644 doc/source/user/resources/image/index.rst create mode 100644 doc/source/user/resources/image/v1/image.rst create mode 100644 doc/source/user/resources/image/v2/image.rst create mode 100644 doc/source/user/resources/image/v2/member.rst create mode 100644 doc/source/user/resources/image/v2/metadef_namespace.rst create mode 100644 doc/source/user/resources/image/v2/metadef_object.rst create mode 100644 doc/source/user/resources/image/v2/metadef_property.rst create mode 100644 doc/source/user/resources/image/v2/metadef_resource_type.rst create mode 100644 doc/source/user/resources/image/v2/metadef_schema.rst create mode 100644 doc/source/user/resources/image/v2/service_info.rst create mode 100644 doc/source/user/resources/image/v2/task.rst create mode 100644 doc/source/user/resources/key_manager/index.rst create mode 100644 doc/source/user/resources/key_manager/v1/container.rst create mode 100644 doc/source/user/resources/key_manager/v1/order.rst create mode 100644 doc/source/user/resources/key_manager/v1/secret.rst create mode 100644 doc/source/user/resources/load_balancer/index.rst create mode 100644 doc/source/user/resources/load_balancer/v2/amphora.rst create mode 100644 doc/source/user/resources/load_balancer/v2/availability_zone.rst create mode 100644 doc/source/user/resources/load_balancer/v2/availability_zone_profile.rst create mode 100644 doc/source/user/resources/load_balancer/v2/flavor.rst create mode 100644 doc/source/user/resources/load_balancer/v2/flavor_profile.rst create mode 100644 doc/source/user/resources/load_balancer/v2/health_monitor.rst create mode 100644 doc/source/user/resources/load_balancer/v2/l7_policy.rst create mode 100644 doc/source/user/resources/load_balancer/v2/l7_rule.rst create mode 100644 doc/source/user/resources/load_balancer/v2/listener.rst create mode 100644 doc/source/user/resources/load_balancer/v2/load_balancer.rst create mode 100644 doc/source/user/resources/load_balancer/v2/member.rst create mode 100644 doc/source/user/resources/load_balancer/v2/pool.rst create mode 100644 doc/source/user/resources/load_balancer/v2/provider.rst create mode 100644 doc/source/user/resources/load_balancer/v2/quota.rst create mode 100644 doc/source/user/resources/network/index.rst create mode 100644 doc/source/user/resources/network/v2/address_group.rst create mode 100644 doc/source/user/resources/network/v2/address_scope.rst create mode 100644 doc/source/user/resources/network/v2/agent.rst create mode 100644 doc/source/user/resources/network/v2/auto_allocated_topology.rst create mode 100644 doc/source/user/resources/network/v2/availability_zone.rst create mode 100644 doc/source/user/resources/network/v2/bgp_peer.rst create mode 100644 doc/source/user/resources/network/v2/bgp_speaker.rst create mode 100644 doc/source/user/resources/network/v2/bgpvpn.rst create mode 100644 doc/source/user/resources/network/v2/bgpvpn_network_association.rst create mode 100644 doc/source/user/resources/network/v2/bgpvpn_port_association.rst create mode 100644 doc/source/user/resources/network/v2/bgpvpn_router_association.rst create mode 100644 doc/source/user/resources/network/v2/extension.rst create mode 100644 doc/source/user/resources/network/v2/flavor.rst create mode 100644 doc/source/user/resources/network/v2/floating_ip.rst create mode 100644 doc/source/user/resources/network/v2/health_monitor.rst create mode 100644 doc/source/user/resources/network/v2/listener.rst create mode 100644 doc/source/user/resources/network/v2/load_balancer.rst create mode 100644 doc/source/user/resources/network/v2/local_ip.rst create mode 100644 doc/source/user/resources/network/v2/local_ip_association.rst create mode 100644 doc/source/user/resources/network/v2/metering_label.rst create mode 100644 doc/source/user/resources/network/v2/metering_label_rule.rst create mode 100644 doc/source/user/resources/network/v2/ndp_proxy.rst create mode 100644 doc/source/user/resources/network/v2/network.rst create mode 100644 doc/source/user/resources/network/v2/network_ip_availability.rst create mode 100644 doc/source/user/resources/network/v2/network_segment_range.rst create mode 100644 doc/source/user/resources/network/v2/pool.rst create mode 100644 doc/source/user/resources/network/v2/pool_member.rst create mode 100644 doc/source/user/resources/network/v2/port.rst create mode 100644 doc/source/user/resources/network/v2/qos_bandwidth_limit_rule.rst create mode 100644 doc/source/user/resources/network/v2/qos_dscp_marking_rule.rst create mode 100644 doc/source/user/resources/network/v2/qos_minimum_bandwidth_rule.rst create mode 100644 doc/source/user/resources/network/v2/qos_minimum_packet_rate_rule.rst create mode 100644 doc/source/user/resources/network/v2/qos_policy.rst create mode 100644 doc/source/user/resources/network/v2/qos_rule_type.rst create mode 100644 doc/source/user/resources/network/v2/quota.rst create mode 100644 doc/source/user/resources/network/v2/rbac_policy.rst create mode 100644 doc/source/user/resources/network/v2/router.rst create mode 100644 doc/source/user/resources/network/v2/security_group.rst create mode 100644 doc/source/user/resources/network/v2/security_group_rule.rst create mode 100644 doc/source/user/resources/network/v2/segment.rst create mode 100644 doc/source/user/resources/network/v2/service_profile.rst create mode 100644 doc/source/user/resources/network/v2/service_provider.rst create mode 100644 doc/source/user/resources/network/v2/sfc_flow_classifier.rst create mode 100644 doc/source/user/resources/network/v2/sfc_port_chain.rst create mode 100644 doc/source/user/resources/network/v2/sfc_port_pair.rst create mode 100644 doc/source/user/resources/network/v2/sfc_port_pair_group.rst create mode 100644 doc/source/user/resources/network/v2/sfc_service_graph.rst create mode 100644 doc/source/user/resources/network/v2/subnet.rst create mode 100644 doc/source/user/resources/network/v2/subnet_pool.rst create mode 100644 doc/source/user/resources/network/v2/tap_flow.rst create mode 100644 doc/source/user/resources/network/v2/tap_service.rst create mode 100644 doc/source/user/resources/network/v2/vpn/endpoint_group.rst create mode 100644 doc/source/user/resources/network/v2/vpn/ike_policy.rst create mode 100644 doc/source/user/resources/network/v2/vpn/index.rst create mode 100644 doc/source/user/resources/network/v2/vpn/ipsec_policy.rst create mode 100644 doc/source/user/resources/network/v2/vpn/ipsec_site_connection.rst create mode 100644 doc/source/user/resources/network/v2/vpn/service.rst create mode 100644 doc/source/user/resources/object_store/index.rst create mode 100644 doc/source/user/resources/object_store/v1/account.rst create mode 100644 doc/source/user/resources/object_store/v1/container.rst create mode 100644 doc/source/user/resources/object_store/v1/obj.rst create mode 100644 doc/source/user/resources/orchestration/index.rst create mode 100644 doc/source/user/resources/orchestration/v1/resource.rst create mode 100644 doc/source/user/resources/orchestration/v1/stack.rst create mode 100644 doc/source/user/resources/orchestration/v1/stack_event.rst create mode 100644 doc/source/user/resources/placement/index.rst create mode 100644 doc/source/user/resources/placement/v1/resource_class.rst create mode 100644 doc/source/user/resources/placement/v1/resource_provider.rst create mode 100644 doc/source/user/resources/placement/v1/resource_provider_inventory.rst create mode 100644 doc/source/user/resources/placement/v1/trait.rst create mode 100644 doc/source/user/resources/shared_file_system/index.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/availability_zone.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/limit.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/resource_locks.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share_access_rule.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share_group.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share_group_snapshot.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share_instance.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share_network.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share_network_subnet.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share_snapshot.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/share_snapshot_instance.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/storage_pool.rst create mode 100644 doc/source/user/resources/shared_file_system/v2/user_message.rst create mode 100644 doc/source/user/resources/workflow/index.rst create mode 100644 doc/source/user/resources/workflow/v2/crontrigger.rst create mode 100644 doc/source/user/resources/workflow/v2/execution.rst create mode 100644 doc/source/user/resources/workflow/v2/workflow.rst create mode 100644 doc/source/user/service_description.rst create mode 100644 doc/source/user/testing/fakes.rst create mode 100644 doc/source/user/testing/index.rst create mode 100644 doc/source/user/transition_from_profile.rst create mode 100644 doc/source/user/utils.rst create mode 100644 doc/source/user/warnings.rst create mode 100644 docs-requirements.txt rename {accelerator => examples}/__init__.py (100%) create mode 100644 examples/baremetal/list.py create mode 100644 examples/baremetal/provisioning.py create mode 100644 examples/cloud/cleanup-servers.py create mode 100644 examples/cloud/create-server-dict.py create mode 100644 examples/cloud/create-server-name-or-id.py create mode 100644 examples/cloud/debug-logging.py create mode 100644 examples/cloud/find-an-image.py create mode 100644 examples/cloud/http-debug-logging.py create mode 100644 examples/cloud/munch-dict-object.py create mode 100644 examples/cloud/normalization.py create mode 100644 examples/cloud/server-information.py create mode 100644 examples/cloud/service-conditional-overrides.py create mode 100644 examples/cloud/service-conditionals.py create mode 100644 examples/cloud/strict-mode.py create mode 100644 examples/cloud/upload-large-object.py create mode 100644 examples/cloud/upload-object.py create mode 100644 examples/cloud/user-agent.py rename {accelerator/v2 => examples/clustering}/__init__.py (100%) create mode 100644 examples/clustering/action.py create mode 100644 examples/clustering/cluster.py create mode 100644 examples/clustering/event.py create mode 100644 examples/clustering/node.py create mode 100644 examples/clustering/policy.py create mode 100644 examples/clustering/policy_type.py create mode 100644 examples/clustering/profile.py create mode 100644 examples/clustering/profile_type.py create mode 100644 examples/clustering/receiver.py rename {baremetal => examples/compute}/__init__.py (100%) create mode 100644 examples/compute/create.py create mode 100644 examples/compute/delete.py create mode 100644 examples/compute/find.py create mode 100644 examples/compute/list.py create mode 100644 examples/connect.py rename {baremetal/v1 => examples/dns}/__init__.py (100%) create mode 100644 examples/dns/list.py rename {baremetal_introspection => examples/identity}/__init__.py (100%) create mode 100644 examples/identity/list.py rename {baremetal_introspection/v1 => examples/image}/__init__.py (100%) create mode 100644 examples/image/create.py create mode 100644 examples/image/delete.py create mode 100644 examples/image/download.py create mode 100644 examples/image/import.py create mode 100644 examples/image/list.py rename {block_storage => examples/key_manager}/__init__.py (100%) create mode 100644 examples/key_manager/create.py create mode 100644 examples/key_manager/get.py create mode 100644 examples/key_manager/list.py rename {block_storage/v2 => examples/network}/__init__.py (100%) create mode 100644 examples/network/create.py create mode 100644 examples/network/delete.py create mode 100644 examples/network/find.py create mode 100644 examples/network/list.py create mode 100644 examples/network/security_group_rules.py rename {block_storage/v3 => examples/shared_file_system}/__init__.py (100%) create mode 100644 examples/shared_file_system/availability_zones.py create mode 100644 examples/shared_file_system/share_group_snapshots.py create mode 100644 examples/shared_file_system/share_instances.py create mode 100644 examples/shared_file_system/share_metadata.py create mode 100644 examples/shared_file_system/shares.py create mode 100644 extras/delete-network.sh create mode 100755 extras/run-ansible-tests.sh create mode 100644 include-acceptance-regular-user.txt rename README.md => openstack/README.md (100%) rename __init__.py => openstack/__init__.py (100%) rename __main__.py => openstack/__main__.py (100%) rename {__pycache__ => openstack/__pycache__}/__init__.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/__main__.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/_hacking.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/_log.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/_services_mixin.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/connection.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/exceptions.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/format.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/proxy.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/resource.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/service_description.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/utils.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/version.cpython-310.pyc (100%) rename {__pycache__ => openstack/__pycache__}/warnings.cpython-310.pyc (100%) rename _hacking.py => openstack/_hacking.py (100%) rename _log.py => openstack/_log.py (100%) rename _services_mixin.py => openstack/_services_mixin.py (100%) rename {cloud/cmd => openstack/accelerator}/__init__.py (100%) rename {accelerator => openstack/accelerator}/__pycache__/__init__.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/__pycache__/accelerator_service.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/__pycache__/version.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/accelerator_service.py (100%) rename {cloud/tests => openstack/accelerator/v2}/__init__.py (100%) rename {accelerator => openstack/accelerator}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/v2/__pycache__/accelerator_request.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/v2/__pycache__/deployable.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/v2/__pycache__/device.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/v2/__pycache__/device_profile.cpython-310.pyc (100%) rename {accelerator => openstack/accelerator}/v2/_proxy.py (100%) rename {accelerator => openstack/accelerator}/v2/accelerator_request.py (100%) rename {accelerator => openstack/accelerator}/v2/deployable.py (100%) rename {accelerator => openstack/accelerator}/v2/device.py (100%) rename {accelerator => openstack/accelerator}/v2/device_profile.py (100%) rename {accelerator => openstack/accelerator}/version.py (100%) rename {clustering => openstack/baremetal}/__init__.py (100%) rename {baremetal => openstack/baremetal}/__pycache__/__init__.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/__pycache__/baremetal_service.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/__pycache__/configdrive.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/__pycache__/version.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/baremetal_service.py (100%) rename {baremetal => openstack/baremetal}/configdrive.py (100%) rename {clustering => openstack/baremetal}/v1/__init__.py (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/_common.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/allocation.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/chassis.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/conductor.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/deploy_templates.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/driver.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/node.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/port.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/port_group.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/volume_connector.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/__pycache__/volume_target.cpython-310.pyc (100%) rename {baremetal => openstack/baremetal}/v1/_common.py (100%) rename {baremetal => openstack/baremetal}/v1/_proxy.py (100%) rename {baremetal => openstack/baremetal}/v1/allocation.py (100%) rename {baremetal => openstack/baremetal}/v1/chassis.py (100%) rename {baremetal => openstack/baremetal}/v1/conductor.py (100%) rename {baremetal => openstack/baremetal}/v1/deploy_templates.py (100%) rename {baremetal => openstack/baremetal}/v1/driver.py (100%) rename {baremetal => openstack/baremetal}/v1/node.py (100%) rename {baremetal => openstack/baremetal}/v1/port.py (100%) rename {baremetal => openstack/baremetal}/v1/port_group.py (100%) rename {baremetal => openstack/baremetal}/v1/volume_connector.py (100%) rename {baremetal => openstack/baremetal}/v1/volume_target.py (100%) rename {baremetal => openstack/baremetal}/version.py (100%) rename {common => openstack/baremetal_introspection}/__init__.py (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/__pycache__/__init__.cpython-310.pyc (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/__pycache__/baremetal_introspection_service.cpython-310.pyc (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/baremetal_introspection_service.py (100%) rename {compute => openstack/baremetal_introspection/v1}/__init__.py (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/v1/__pycache__/introspection.cpython-310.pyc (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/v1/__pycache__/introspection_rule.cpython-310.pyc (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/v1/_proxy.py (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/v1/introspection.py (100%) rename {baremetal_introspection => openstack/baremetal_introspection}/v1/introspection_rule.py (100%) rename {compute/v2 => openstack/block_storage}/__init__.py (100%) rename {block_storage => openstack/block_storage}/__pycache__/__init__.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/__pycache__/_base_proxy.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/__pycache__/block_storage_service.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/_base_proxy.py (100%) rename {block_storage => openstack/block_storage}/block_storage_service.py (100%) rename {container_infrastructure_management => openstack/block_storage/v2}/__init__.py (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/backup.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/capabilities.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/extension.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/limits.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/quota_set.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/snapshot.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/stats.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/type.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/__pycache__/volume.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v2/_proxy.py (100%) rename {block_storage => openstack/block_storage}/v2/backup.py (100%) rename {block_storage => openstack/block_storage}/v2/capabilities.py (100%) rename {block_storage => openstack/block_storage}/v2/extension.py (100%) rename {block_storage => openstack/block_storage}/v2/limits.py (100%) rename {block_storage => openstack/block_storage}/v2/quota_set.py (100%) rename {block_storage => openstack/block_storage}/v2/snapshot.py (100%) rename {block_storage => openstack/block_storage}/v2/stats.py (100%) rename {block_storage => openstack/block_storage}/v2/type.py (100%) rename {block_storage => openstack/block_storage}/v2/volume.py (100%) rename {container_infrastructure_management/v1 => openstack/block_storage/v3}/__init__.py (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/__init__.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/_proxy.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/attachment.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/availability_zone.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/backup.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/block_storage_summary.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/capabilities.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/extension.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/group.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/group_snapshot.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/group_type.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/limits.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/quota_set.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/resource_filter.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/service.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/snapshot.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/stats.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/transfer.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/type.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/__pycache__/volume.cpython-310.pyc (100%) rename {block_storage => openstack/block_storage}/v3/_proxy.py (100%) rename {block_storage => openstack/block_storage}/v3/attachment.py (100%) rename {block_storage => openstack/block_storage}/v3/availability_zone.py (100%) rename {block_storage => openstack/block_storage}/v3/backup.py (100%) rename {block_storage => openstack/block_storage}/v3/block_storage_summary.py (100%) rename {block_storage => openstack/block_storage}/v3/capabilities.py (100%) rename {block_storage => openstack/block_storage}/v3/extension.py (100%) rename {block_storage => openstack/block_storage}/v3/group.py (100%) rename {block_storage => openstack/block_storage}/v3/group_snapshot.py (100%) rename {block_storage => openstack/block_storage}/v3/group_type.py (100%) rename {block_storage => openstack/block_storage}/v3/limits.py (100%) rename {block_storage => openstack/block_storage}/v3/quota_set.py (100%) rename {block_storage => openstack/block_storage}/v3/resource_filter.py (100%) rename {block_storage => openstack/block_storage}/v3/service.py (100%) rename {block_storage => openstack/block_storage}/v3/snapshot.py (100%) rename {block_storage => openstack/block_storage}/v3/stats.py (100%) rename {block_storage => openstack/block_storage}/v3/transfer.py (100%) rename {block_storage => openstack/block_storage}/v3/type.py (100%) rename {block_storage => openstack/block_storage}/v3/volume.py (100%) rename {cloud => openstack/cloud}/__init__.py (100%) rename {cloud => openstack/cloud}/__pycache__/__init__.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_accelerator.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_baremetal.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_block_storage.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_coe.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_compute.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_dns.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_floating_ip.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_identity.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_image.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_network.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_network_common.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_object_store.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_orchestration.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_security_group.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_shared_file_system.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/_utils.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/exc.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/inventory.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/meta.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/__pycache__/openstackcloud.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/_accelerator.py (100%) rename {cloud => openstack/cloud}/_baremetal.py (100%) rename {cloud => openstack/cloud}/_block_storage.py (100%) rename {cloud => openstack/cloud}/_coe.py (100%) rename {cloud => openstack/cloud}/_compute.py (100%) rename {cloud => openstack/cloud}/_dns.py (100%) rename {cloud => openstack/cloud}/_floating_ip.py (100%) rename {cloud => openstack/cloud}/_identity.py (100%) rename {cloud => openstack/cloud}/_image.py (100%) rename {cloud => openstack/cloud}/_network.py (100%) rename {cloud => openstack/cloud}/_network_common.py (100%) rename {cloud => openstack/cloud}/_object_store.py (100%) rename {cloud => openstack/cloud}/_orchestration.py (100%) rename {cloud => openstack/cloud}/_security_group.py (100%) rename {cloud => openstack/cloud}/_shared_file_system.py (100%) rename {cloud => openstack/cloud}/_utils.py (100%) rename {database => openstack/cloud/cmd}/__init__.py (100%) rename {cloud => openstack/cloud}/cmd/__pycache__/__init__.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/cmd/__pycache__/inventory.cpython-310.pyc (100%) rename {cloud => openstack/cloud}/cmd/inventory.py (100%) rename {cloud => openstack/cloud}/exc.py (100%) rename {cloud => openstack/cloud}/inventory.py (100%) rename {cloud => openstack/cloud}/meta.py (100%) rename {cloud => openstack/cloud}/openstackcloud.py (100%) rename {database/v1 => openstack/cloud/tests}/__init__.py (100%) rename {cloud => openstack/cloud}/tests/__pycache__/__init__.cpython-310.pyc (100%) rename {dns => openstack/clustering}/__init__.py (100%) rename {clustering => openstack/clustering}/__pycache__/__init__.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/__pycache__/clustering_service.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/__pycache__/version.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/clustering_service.py (100%) rename {dns/v2 => openstack/clustering/v1}/__init__.py (100%) rename {clustering => openstack/clustering}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/_async_resource.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/action.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/build_info.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/cluster.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/cluster_attr.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/cluster_policy.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/event.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/node.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/policy.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/policy_type.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/profile.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/profile_type.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/receiver.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/__pycache__/service.cpython-310.pyc (100%) rename {clustering => openstack/clustering}/v1/_async_resource.py (100%) rename {clustering => openstack/clustering}/v1/_proxy.py (100%) rename {clustering => openstack/clustering}/v1/action.py (100%) rename {clustering => openstack/clustering}/v1/build_info.py (100%) rename {clustering => openstack/clustering}/v1/cluster.py (100%) rename {clustering => openstack/clustering}/v1/cluster_attr.py (100%) rename {clustering => openstack/clustering}/v1/cluster_policy.py (100%) rename {clustering => openstack/clustering}/v1/event.py (100%) rename {clustering => openstack/clustering}/v1/node.py (100%) rename {clustering => openstack/clustering}/v1/policy.py (100%) rename {clustering => openstack/clustering}/v1/policy_type.py (100%) rename {clustering => openstack/clustering}/v1/profile.py (100%) rename {clustering => openstack/clustering}/v1/profile_type.py (100%) rename {clustering => openstack/clustering}/v1/receiver.py (100%) rename {clustering => openstack/clustering}/v1/service.py (100%) rename {clustering => openstack/clustering}/version.py (100%) rename {fixture => openstack/common}/__init__.py (100%) rename {common => openstack/common}/__pycache__/__init__.cpython-310.pyc (100%) rename {common => openstack/common}/__pycache__/metadata.cpython-310.pyc (100%) rename {common => openstack/common}/__pycache__/quota_set.cpython-310.pyc (100%) rename {common => openstack/common}/__pycache__/tag.cpython-310.pyc (100%) rename {common => openstack/common}/metadata.py (100%) rename {common => openstack/common}/quota_set.py (100%) rename {common => openstack/common}/tag.py (100%) rename {identity => openstack/compute}/__init__.py (100%) rename {compute => openstack/compute}/__pycache__/__init__.cpython-310.pyc (100%) rename {compute => openstack/compute}/__pycache__/compute_service.cpython-310.pyc (100%) rename {compute => openstack/compute}/__pycache__/version.cpython-310.pyc (100%) rename {compute => openstack/compute}/compute_service.py (100%) rename {identity => openstack/compute}/v2/__init__.py (100%) rename {compute => openstack/compute}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/aggregate.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/availability_zone.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/extension.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/flavor.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/hypervisor.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/image.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/keypair.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/limits.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/migration.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/quota_set.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/server.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/server_action.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/server_diagnostics.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/server_group.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/server_interface.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/server_ip.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/server_migration.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/server_remote_console.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/service.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/usage.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/__pycache__/volume_attachment.cpython-310.pyc (100%) rename {compute => openstack/compute}/v2/_proxy.py (100%) rename {compute => openstack/compute}/v2/aggregate.py (100%) rename {compute => openstack/compute}/v2/availability_zone.py (100%) rename {compute => openstack/compute}/v2/extension.py (100%) rename {compute => openstack/compute}/v2/flavor.py (100%) rename {compute => openstack/compute}/v2/hypervisor.py (100%) rename {compute => openstack/compute}/v2/image.py (100%) rename {compute => openstack/compute}/v2/keypair.py (100%) rename {compute => openstack/compute}/v2/limits.py (100%) rename {compute => openstack/compute}/v2/migration.py (100%) rename {compute => openstack/compute}/v2/quota_set.py (100%) rename {compute => openstack/compute}/v2/server.py (100%) rename {compute => openstack/compute}/v2/server_action.py (100%) rename {compute => openstack/compute}/v2/server_diagnostics.py (100%) rename {compute => openstack/compute}/v2/server_group.py (100%) rename {compute => openstack/compute}/v2/server_interface.py (100%) rename {compute => openstack/compute}/v2/server_ip.py (100%) rename {compute => openstack/compute}/v2/server_migration.py (100%) rename {compute => openstack/compute}/v2/server_remote_console.py (100%) rename {compute => openstack/compute}/v2/service.py (100%) rename {compute => openstack/compute}/v2/usage.py (100%) rename {compute => openstack/compute}/v2/volume_attachment.py (100%) rename {compute => openstack/compute}/version.py (100%) rename {config => openstack/config}/__init__.py (100%) rename {config => openstack/config}/__pycache__/__init__.cpython-310.pyc (100%) rename {config => openstack/config}/__pycache__/_util.cpython-310.pyc (100%) rename {config => openstack/config}/__pycache__/cloud_config.cpython-310.pyc (100%) rename {config => openstack/config}/__pycache__/cloud_region.cpython-310.pyc (100%) rename {config => openstack/config}/__pycache__/defaults.cpython-310.pyc (100%) rename {config => openstack/config}/__pycache__/exceptions.cpython-310.pyc (100%) rename {config => openstack/config}/__pycache__/loader.cpython-310.pyc (100%) rename {config => openstack/config}/_util.py (100%) rename {config => openstack/config}/cloud_config.py (100%) rename {config => openstack/config}/cloud_region.py (100%) rename {config => openstack/config}/defaults.json (100%) rename {config => openstack/config}/defaults.py (100%) rename {config => openstack/config}/exceptions.py (100%) rename {config => openstack/config}/loader.py (100%) rename {config => openstack/config}/schema.json (100%) rename {config => openstack/config}/vendor-schema.json (100%) rename {config => openstack/config}/vendors/__init__.py (100%) rename {config => openstack/config}/vendors/__pycache__/__init__.cpython-310.pyc (100%) rename {config => openstack/config}/vendors/auro.json (100%) rename {config => openstack/config}/vendors/betacloud.json (100%) rename {config => openstack/config}/vendors/bluebox.json (100%) rename {config => openstack/config}/vendors/catalyst.json (100%) rename {config => openstack/config}/vendors/citycloud.json (100%) rename {config => openstack/config}/vendors/conoha.json (100%) rename {config => openstack/config}/vendors/dreamcompute.json (100%) rename {config => openstack/config}/vendors/elastx.json (100%) rename {config => openstack/config}/vendors/entercloudsuite.json (100%) rename {config => openstack/config}/vendors/fuga.json (100%) rename {config => openstack/config}/vendors/ibmcloud.json (100%) rename {config => openstack/config}/vendors/internap.json (100%) rename {config => openstack/config}/vendors/limestonenetworks.yaml (100%) rename {config => openstack/config}/vendors/otc-swiss.json (100%) rename {config => openstack/config}/vendors/otc.json (100%) rename {config => openstack/config}/vendors/ovh-us.json (100%) rename {config => openstack/config}/vendors/ovh.json (100%) rename {config => openstack/config}/vendors/rackspace.json (100%) rename {config => openstack/config}/vendors/switchengines.json (100%) rename {config => openstack/config}/vendors/ultimum.json (100%) rename {config => openstack/config}/vendors/unitedstack.json (100%) rename {config => openstack/config}/vendors/vexxhost.json (100%) rename {config => openstack/config}/vendors/zetta.json (100%) rename connection.py => openstack/connection.py (100%) rename {identity/v3 => openstack/container_infrastructure_management}/__init__.py (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/__pycache__/__init__.cpython-310.pyc (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/__pycache__/container_infrastructure_management_service.cpython-310.pyc (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/container_infrastructure_management_service.py (100%) rename {image => openstack/container_infrastructure_management/v1}/__init__.py (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/__pycache__/cluster.cpython-310.pyc (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/__pycache__/cluster_certificate.cpython-310.pyc (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/__pycache__/cluster_template.cpython-310.pyc (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/__pycache__/service.cpython-310.pyc (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/_proxy.py (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/cluster.py (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/cluster_certificate.py (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/cluster_template.py (100%) rename {container_infrastructure_management => openstack/container_infrastructure_management}/v1/service.py (100%) rename {image/v1 => openstack/database}/__init__.py (100%) rename {database => openstack/database}/__pycache__/__init__.cpython-310.pyc (100%) rename {database => openstack/database}/__pycache__/database_service.cpython-310.pyc (100%) rename {database => openstack/database}/database_service.py (100%) rename {image/v2 => openstack/database/v1}/__init__.py (100%) rename {database => openstack/database}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {database => openstack/database}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {database => openstack/database}/v1/__pycache__/database.cpython-310.pyc (100%) rename {database => openstack/database}/v1/__pycache__/flavor.cpython-310.pyc (100%) rename {database => openstack/database}/v1/__pycache__/instance.cpython-310.pyc (100%) rename {database => openstack/database}/v1/__pycache__/user.cpython-310.pyc (100%) rename {database => openstack/database}/v1/_proxy.py (100%) rename {database => openstack/database}/v1/database.py (100%) rename {database => openstack/database}/v1/flavor.py (100%) rename {database => openstack/database}/v1/instance.py (100%) rename {database => openstack/database}/v1/user.py (100%) rename {instance_ha => openstack/dns}/__init__.py (100%) rename {dns => openstack/dns}/__pycache__/__init__.cpython-310.pyc (100%) rename {dns => openstack/dns}/__pycache__/dns_service.cpython-310.pyc (100%) rename {dns => openstack/dns}/__pycache__/version.cpython-310.pyc (100%) rename {dns => openstack/dns}/dns_service.py (100%) rename {instance_ha/v1 => openstack/dns/v2}/__init__.py (100%) rename {dns => openstack/dns}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/_base.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/floating_ip.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/recordset.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/zone.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/zone_export.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/zone_import.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/zone_share.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/__pycache__/zone_transfer.cpython-310.pyc (100%) rename {dns => openstack/dns}/v2/_base.py (100%) rename {dns => openstack/dns}/v2/_proxy.py (100%) rename {dns => openstack/dns}/v2/floating_ip.py (100%) rename {dns => openstack/dns}/v2/recordset.py (100%) rename {dns => openstack/dns}/v2/zone.py (100%) rename {dns => openstack/dns}/v2/zone_export.py (100%) rename {dns => openstack/dns}/v2/zone_import.py (100%) rename {dns => openstack/dns}/v2/zone_share.py (100%) rename {dns => openstack/dns}/v2/zone_transfer.py (100%) rename {dns => openstack/dns}/version.py (100%) rename exceptions.py => openstack/exceptions.py (100%) rename {key_manager => openstack/fixture}/__init__.py (100%) rename {fixture => openstack/fixture}/__pycache__/__init__.cpython-310.pyc (100%) rename {fixture => openstack/fixture}/__pycache__/connection.cpython-310.pyc (100%) rename {fixture => openstack/fixture}/connection.py (100%) rename format.py => openstack/format.py (100%) rename {key_manager/v1 => openstack/identity}/__init__.py (100%) rename {identity => openstack/identity}/__pycache__/__init__.cpython-310.pyc (100%) rename {identity => openstack/identity}/__pycache__/identity_service.cpython-310.pyc (100%) rename {identity => openstack/identity}/__pycache__/version.cpython-310.pyc (100%) rename {identity => openstack/identity}/identity_service.py (100%) rename {load_balancer => openstack/identity/v2}/__init__.py (100%) rename {identity => openstack/identity}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {identity => openstack/identity}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {identity => openstack/identity}/v2/__pycache__/extension.cpython-310.pyc (100%) rename {identity => openstack/identity}/v2/__pycache__/role.cpython-310.pyc (100%) rename {identity => openstack/identity}/v2/__pycache__/tenant.cpython-310.pyc (100%) rename {identity => openstack/identity}/v2/__pycache__/user.cpython-310.pyc (100%) rename {identity => openstack/identity}/v2/_proxy.py (100%) rename {identity => openstack/identity}/v2/extension.py (100%) rename {identity => openstack/identity}/v2/role.py (100%) rename {identity => openstack/identity}/v2/tenant.py (100%) rename {identity => openstack/identity}/v2/user.py (100%) rename {load_balancer/v2 => openstack/identity/v3}/__init__.py (100%) rename {identity => openstack/identity}/v3/__pycache__/__init__.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/_proxy.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/application_credential.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/credential.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/domain.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/domain_config.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/endpoint.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/federation_protocol.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/group.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/identity_provider.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/limit.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/mapping.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/policy.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/project.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/region.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/registered_limit.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/role.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/role_assignment.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/role_domain_group_assignment.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/role_domain_user_assignment.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/role_project_group_assignment.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/role_project_user_assignment.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/role_system_group_assignment.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/role_system_user_assignment.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/service.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/system.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/trust.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/__pycache__/user.cpython-310.pyc (100%) rename {identity => openstack/identity}/v3/_proxy.py (100%) rename {identity => openstack/identity}/v3/application_credential.py (100%) rename {identity => openstack/identity}/v3/credential.py (100%) rename {identity => openstack/identity}/v3/domain.py (100%) rename {identity => openstack/identity}/v3/domain_config.py (100%) rename {identity => openstack/identity}/v3/endpoint.py (100%) rename {identity => openstack/identity}/v3/federation_protocol.py (100%) rename {identity => openstack/identity}/v3/group.py (100%) rename {identity => openstack/identity}/v3/identity_provider.py (100%) rename {identity => openstack/identity}/v3/limit.py (100%) rename {identity => openstack/identity}/v3/mapping.py (100%) rename {identity => openstack/identity}/v3/policy.py (100%) rename {identity => openstack/identity}/v3/project.py (100%) rename {identity => openstack/identity}/v3/region.py (100%) rename {identity => openstack/identity}/v3/registered_limit.py (100%) rename {identity => openstack/identity}/v3/role.py (100%) rename {identity => openstack/identity}/v3/role_assignment.py (100%) rename {identity => openstack/identity}/v3/role_domain_group_assignment.py (100%) rename {identity => openstack/identity}/v3/role_domain_user_assignment.py (100%) rename {identity => openstack/identity}/v3/role_project_group_assignment.py (100%) rename {identity => openstack/identity}/v3/role_project_user_assignment.py (100%) rename {identity => openstack/identity}/v3/role_system_group_assignment.py (100%) rename {identity => openstack/identity}/v3/role_system_user_assignment.py (100%) rename {identity => openstack/identity}/v3/service.py (100%) rename {identity => openstack/identity}/v3/system.py (100%) rename {identity => openstack/identity}/v3/trust.py (100%) rename {identity => openstack/identity}/v3/user.py (100%) rename {identity => openstack/identity}/version.py (100%) rename {message => openstack/image}/__init__.py (100%) rename {image => openstack/image}/__pycache__/__init__.cpython-310.pyc (100%) rename {image => openstack/image}/__pycache__/_download.cpython-310.pyc (100%) rename {image => openstack/image}/__pycache__/image_service.cpython-310.pyc (100%) rename {image => openstack/image}/__pycache__/image_signer.cpython-310.pyc (100%) rename {image => openstack/image}/__pycache__/iterable_chunked_file.cpython-310.pyc (100%) rename {image => openstack/image}/_download.py (100%) rename {image => openstack/image}/image_service.py (100%) rename {image => openstack/image}/image_signer.py (100%) rename {image => openstack/image}/iterable_chunked_file.py (100%) rename {message/v2 => openstack/image/v1}/__init__.py (100%) rename {image => openstack/image}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {image => openstack/image}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {image => openstack/image}/v1/__pycache__/image.cpython-310.pyc (100%) rename {image => openstack/image}/v1/_proxy.py (100%) rename {image => openstack/image}/v1/image.py (100%) rename {network => openstack/image/v2}/__init__.py (100%) rename {image => openstack/image}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/cache.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/image.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/member.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/metadef_namespace.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/metadef_object.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/metadef_property.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/metadef_resource_type.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/metadef_schema.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/schema.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/service_info.cpython-310.pyc (100%) rename {image => openstack/image}/v2/__pycache__/task.cpython-310.pyc (100%) rename {image => openstack/image}/v2/_proxy.py (100%) rename {image => openstack/image}/v2/cache.py (100%) rename {image => openstack/image}/v2/image.py (100%) rename {image => openstack/image}/v2/member.py (100%) rename {image => openstack/image}/v2/metadef_namespace.py (100%) rename {image => openstack/image}/v2/metadef_object.py (100%) rename {image => openstack/image}/v2/metadef_property.py (100%) rename {image => openstack/image}/v2/metadef_resource_type.py (100%) rename {image => openstack/image}/v2/metadef_schema.py (100%) rename {image => openstack/image}/v2/schema.py (100%) rename {image => openstack/image}/v2/service_info.py (100%) rename {image => openstack/image}/v2/task.py (100%) rename {network/v2 => openstack/instance_ha}/__init__.py (100%) rename {instance_ha => openstack/instance_ha}/__pycache__/__init__.cpython-310.pyc (100%) rename {instance_ha => openstack/instance_ha}/__pycache__/instance_ha_service.cpython-310.pyc (100%) rename {instance_ha => openstack/instance_ha}/instance_ha_service.py (100%) rename {object_store => openstack/instance_ha/v1}/__init__.py (100%) rename {instance_ha => openstack/instance_ha}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {instance_ha => openstack/instance_ha}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {instance_ha => openstack/instance_ha}/v1/__pycache__/host.cpython-310.pyc (100%) rename {instance_ha => openstack/instance_ha}/v1/__pycache__/notification.cpython-310.pyc (100%) rename {instance_ha => openstack/instance_ha}/v1/__pycache__/segment.cpython-310.pyc (100%) rename {instance_ha => openstack/instance_ha}/v1/__pycache__/vmove.cpython-310.pyc (100%) rename {instance_ha => openstack/instance_ha}/v1/_proxy.py (100%) rename {instance_ha => openstack/instance_ha}/v1/host.py (100%) rename {instance_ha => openstack/instance_ha}/v1/notification.py (100%) rename {instance_ha => openstack/instance_ha}/v1/segment.py (100%) rename {instance_ha => openstack/instance_ha}/v1/vmove.py (100%) rename {object_store/v1 => openstack/key_manager}/__init__.py (100%) rename {key_manager => openstack/key_manager}/__pycache__/__init__.cpython-310.pyc (100%) rename {key_manager => openstack/key_manager}/__pycache__/key_manager_service.cpython-310.pyc (100%) rename {key_manager => openstack/key_manager}/key_manager_service.py (100%) rename {orchestration => openstack/key_manager/v1}/__init__.py (100%) rename {key_manager => openstack/key_manager}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {key_manager => openstack/key_manager}/v1/__pycache__/_format.cpython-310.pyc (100%) rename {key_manager => openstack/key_manager}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {key_manager => openstack/key_manager}/v1/__pycache__/container.cpython-310.pyc (100%) rename {key_manager => openstack/key_manager}/v1/__pycache__/order.cpython-310.pyc (100%) rename {key_manager => openstack/key_manager}/v1/__pycache__/secret.cpython-310.pyc (100%) rename {key_manager => openstack/key_manager}/v1/_format.py (100%) rename {key_manager => openstack/key_manager}/v1/_proxy.py (100%) rename {key_manager => openstack/key_manager}/v1/container.py (100%) rename {key_manager => openstack/key_manager}/v1/order.py (100%) rename {key_manager => openstack/key_manager}/v1/secret.py (100%) rename {orchestration/util => openstack/load_balancer}/__init__.py (100%) rename {load_balancer => openstack/load_balancer}/__pycache__/__init__.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/__pycache__/load_balancer_service.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/__pycache__/version.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/load_balancer_service.py (100%) rename {orchestration/v1 => openstack/load_balancer/v2}/__init__.py (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/amphora.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/availability_zone.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/availability_zone_profile.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/flavor.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/flavor_profile.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/health_monitor.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/l7_policy.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/l7_rule.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/listener.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/load_balancer.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/member.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/pool.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/provider.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/__pycache__/quota.cpython-310.pyc (100%) rename {load_balancer => openstack/load_balancer}/v2/_proxy.py (100%) rename {load_balancer => openstack/load_balancer}/v2/amphora.py (100%) rename {load_balancer => openstack/load_balancer}/v2/availability_zone.py (100%) rename {load_balancer => openstack/load_balancer}/v2/availability_zone_profile.py (100%) rename {load_balancer => openstack/load_balancer}/v2/flavor.py (100%) rename {load_balancer => openstack/load_balancer}/v2/flavor_profile.py (100%) rename {load_balancer => openstack/load_balancer}/v2/health_monitor.py (100%) rename {load_balancer => openstack/load_balancer}/v2/l7_policy.py (100%) rename {load_balancer => openstack/load_balancer}/v2/l7_rule.py (100%) rename {load_balancer => openstack/load_balancer}/v2/listener.py (100%) rename {load_balancer => openstack/load_balancer}/v2/load_balancer.py (100%) rename {load_balancer => openstack/load_balancer}/v2/member.py (100%) rename {load_balancer => openstack/load_balancer}/v2/pool.py (100%) rename {load_balancer => openstack/load_balancer}/v2/provider.py (100%) rename {load_balancer => openstack/load_balancer}/v2/quota.py (100%) rename {load_balancer => openstack/load_balancer}/version.py (100%) rename {placement => openstack/message}/__init__.py (100%) rename {message => openstack/message}/__pycache__/__init__.cpython-310.pyc (100%) rename {message => openstack/message}/__pycache__/message_service.cpython-310.pyc (100%) rename {message => openstack/message}/__pycache__/version.cpython-310.pyc (100%) rename {message => openstack/message}/message_service.py (100%) rename {placement/v1 => openstack/message/v2}/__init__.py (100%) rename {message => openstack/message}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {message => openstack/message}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {message => openstack/message}/v2/__pycache__/claim.cpython-310.pyc (100%) rename {message => openstack/message}/v2/__pycache__/message.cpython-310.pyc (100%) rename {message => openstack/message}/v2/__pycache__/queue.cpython-310.pyc (100%) rename {message => openstack/message}/v2/__pycache__/subscription.cpython-310.pyc (100%) rename {message => openstack/message}/v2/_proxy.py (100%) rename {message => openstack/message}/v2/claim.py (100%) rename {message => openstack/message}/v2/message.py (100%) rename {message => openstack/message}/v2/queue.py (100%) rename {message => openstack/message}/v2/subscription.py (100%) rename {message => openstack/message}/version.py (100%) rename {shared_file_system => openstack/network}/__init__.py (100%) rename {network => openstack/network}/__pycache__/__init__.cpython-310.pyc (100%) rename {network => openstack/network}/__pycache__/network_service.cpython-310.pyc (100%) rename {network => openstack/network}/__pycache__/version.cpython-310.pyc (100%) rename {network => openstack/network}/network_service.py (100%) rename {shared_file_system => openstack/network}/v2/__init__.py (100%) rename {network => openstack/network}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/_base.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/address_group.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/address_scope.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/agent.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/auto_allocated_topology.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/availability_zone.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/bgp_peer.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/bgp_speaker.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/bgpvpn.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/bgpvpn_network_association.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/bgpvpn_port_association.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/bgpvpn_router_association.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/default_security_group_rule.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/extension.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/firewall_group.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/firewall_policy.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/firewall_rule.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/flavor.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/floating_ip.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/health_monitor.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/l3_conntrack_helper.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/listener.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/load_balancer.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/local_ip.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/local_ip_association.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/metering_label.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/metering_label_rule.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/ndp_proxy.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/network.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/network_ip_availability.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/network_segment_range.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/pool.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/pool_member.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/port.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/port_forwarding.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/qos_bandwidth_limit_rule.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/qos_dscp_marking_rule.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/qos_minimum_bandwidth_rule.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/qos_minimum_packet_rate_rule.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/qos_policy.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/qos_rule_type.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/quota.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/rbac_policy.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/router.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/security_group.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/security_group_rule.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/segment.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/service_profile.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/service_provider.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/sfc_flow_classifier.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/sfc_port_chain.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/sfc_port_pair.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/sfc_port_pair_group.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/sfc_service_graph.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/subnet.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/subnet_pool.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/tap_flow.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/tap_service.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/trunk.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/vpn_endpoint_group.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/vpn_ike_policy.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/vpn_ipsec_policy.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/vpn_ipsec_site_connection.cpython-310.pyc (100%) rename {network => openstack/network}/v2/__pycache__/vpn_service.cpython-310.pyc (100%) rename {network => openstack/network}/v2/_base.py (100%) rename {network => openstack/network}/v2/_proxy.py (100%) rename {network => openstack/network}/v2/address_group.py (100%) rename {network => openstack/network}/v2/address_scope.py (100%) rename {network => openstack/network}/v2/agent.py (100%) rename {network => openstack/network}/v2/auto_allocated_topology.py (100%) rename {network => openstack/network}/v2/availability_zone.py (100%) rename {network => openstack/network}/v2/bgp_peer.py (100%) rename {network => openstack/network}/v2/bgp_speaker.py (100%) rename {network => openstack/network}/v2/bgpvpn.py (100%) rename {network => openstack/network}/v2/bgpvpn_network_association.py (100%) rename {network => openstack/network}/v2/bgpvpn_port_association.py (100%) rename {network => openstack/network}/v2/bgpvpn_router_association.py (100%) rename {network => openstack/network}/v2/default_security_group_rule.py (100%) rename {network => openstack/network}/v2/extension.py (100%) rename {network => openstack/network}/v2/firewall_group.py (100%) rename {network => openstack/network}/v2/firewall_policy.py (100%) rename {network => openstack/network}/v2/firewall_rule.py (100%) rename {network => openstack/network}/v2/flavor.py (100%) rename {network => openstack/network}/v2/floating_ip.py (100%) rename {network => openstack/network}/v2/health_monitor.py (100%) rename {network => openstack/network}/v2/l3_conntrack_helper.py (100%) rename {network => openstack/network}/v2/listener.py (100%) rename {network => openstack/network}/v2/load_balancer.py (100%) rename {network => openstack/network}/v2/local_ip.py (100%) rename {network => openstack/network}/v2/local_ip_association.py (100%) rename {network => openstack/network}/v2/metering_label.py (100%) rename {network => openstack/network}/v2/metering_label_rule.py (100%) rename {network => openstack/network}/v2/ndp_proxy.py (100%) rename {network => openstack/network}/v2/network.py (100%) rename {network => openstack/network}/v2/network_ip_availability.py (100%) rename {network => openstack/network}/v2/network_segment_range.py (100%) rename {network => openstack/network}/v2/pool.py (100%) rename {network => openstack/network}/v2/pool_member.py (100%) rename {network => openstack/network}/v2/port.py (100%) rename {network => openstack/network}/v2/port_forwarding.py (100%) rename {network => openstack/network}/v2/qos_bandwidth_limit_rule.py (100%) rename {network => openstack/network}/v2/qos_dscp_marking_rule.py (100%) rename {network => openstack/network}/v2/qos_minimum_bandwidth_rule.py (100%) rename {network => openstack/network}/v2/qos_minimum_packet_rate_rule.py (100%) rename {network => openstack/network}/v2/qos_policy.py (100%) rename {network => openstack/network}/v2/qos_rule_type.py (100%) rename {network => openstack/network}/v2/quota.py (100%) rename {network => openstack/network}/v2/rbac_policy.py (100%) rename {network => openstack/network}/v2/router.py (100%) rename {network => openstack/network}/v2/security_group.py (100%) rename {network => openstack/network}/v2/security_group_rule.py (100%) rename {network => openstack/network}/v2/segment.py (100%) rename {network => openstack/network}/v2/service_profile.py (100%) rename {network => openstack/network}/v2/service_provider.py (100%) rename {network => openstack/network}/v2/sfc_flow_classifier.py (100%) rename {network => openstack/network}/v2/sfc_port_chain.py (100%) rename {network => openstack/network}/v2/sfc_port_pair.py (100%) rename {network => openstack/network}/v2/sfc_port_pair_group.py (100%) rename {network => openstack/network}/v2/sfc_service_graph.py (100%) rename {network => openstack/network}/v2/subnet.py (100%) rename {network => openstack/network}/v2/subnet_pool.py (100%) rename {network => openstack/network}/v2/tap_flow.py (100%) rename {network => openstack/network}/v2/tap_service.py (100%) rename {network => openstack/network}/v2/trunk.py (100%) rename {network => openstack/network}/v2/vpn_endpoint_group.py (100%) rename {network => openstack/network}/v2/vpn_ike_policy.py (100%) rename {network => openstack/network}/v2/vpn_ipsec_policy.py (100%) rename {network => openstack/network}/v2/vpn_ipsec_site_connection.py (100%) rename {network => openstack/network}/v2/vpn_service.py (100%) rename {network => openstack/network}/version.py (100%) rename {test => openstack/object_store}/__init__.py (100%) rename {object_store => openstack/object_store}/__pycache__/__init__.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/__pycache__/object_store_service.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/object_store_service.py (100%) rename {tests => openstack/object_store/v1}/__init__.py (100%) rename {object_store => openstack/object_store}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/v1/__pycache__/_base.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/v1/__pycache__/account.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/v1/__pycache__/container.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/v1/__pycache__/info.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/v1/__pycache__/obj.cpython-310.pyc (100%) rename {object_store => openstack/object_store}/v1/_base.py (100%) rename {object_store => openstack/object_store}/v1/_proxy.py (100%) rename {object_store => openstack/object_store}/v1/account.py (100%) rename {object_store => openstack/object_store}/v1/container.py (100%) rename {object_store => openstack/object_store}/v1/info.py (100%) rename {object_store => openstack/object_store}/v1/obj.py (100%) rename {tests/functional => openstack/orchestration}/__init__.py (100%) rename {orchestration => openstack/orchestration}/__pycache__/__init__.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/__pycache__/orchestration_service.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/__pycache__/version.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/orchestration_service.py (100%) rename {tests/functional/baremetal => openstack/orchestration/util}/__init__.py (100%) rename {orchestration => openstack/orchestration}/util/__pycache__/__init__.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/util/__pycache__/environment_format.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/util/__pycache__/event_utils.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/util/__pycache__/template_format.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/util/__pycache__/template_utils.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/util/__pycache__/utils.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/util/environment_format.py (100%) rename {orchestration => openstack/orchestration}/util/event_utils.py (100%) rename {orchestration => openstack/orchestration}/util/template_format.py (100%) rename {orchestration => openstack/orchestration}/util/template_utils.py (100%) rename {orchestration => openstack/orchestration}/util/utils.py (100%) rename {tests/functional/block_storage => openstack/orchestration/v1}/__init__.py (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/resource.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/software_config.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/software_deployment.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/stack.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/stack_environment.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/stack_event.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/stack_files.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/stack_template.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/__pycache__/template.cpython-310.pyc (100%) rename {orchestration => openstack/orchestration}/v1/_proxy.py (100%) rename {orchestration => openstack/orchestration}/v1/resource.py (100%) rename {orchestration => openstack/orchestration}/v1/software_config.py (100%) rename {orchestration => openstack/orchestration}/v1/software_deployment.py (100%) rename {orchestration => openstack/orchestration}/v1/stack.py (100%) rename {orchestration => openstack/orchestration}/v1/stack_environment.py (100%) rename {orchestration => openstack/orchestration}/v1/stack_event.py (100%) rename {orchestration => openstack/orchestration}/v1/stack_files.py (100%) rename {orchestration => openstack/orchestration}/v1/stack_template.py (100%) rename {orchestration => openstack/orchestration}/v1/template.py (100%) rename {orchestration => openstack/orchestration}/version.py (100%) rename {tests/functional/block_storage/v2 => openstack/placement}/__init__.py (100%) rename {placement => openstack/placement}/__pycache__/__init__.cpython-310.pyc (100%) rename {placement => openstack/placement}/__pycache__/placement_service.cpython-310.pyc (100%) rename {placement => openstack/placement}/placement_service.py (100%) rename {tests/functional/block_storage/v3 => openstack/placement/v1}/__init__.py (100%) rename {placement => openstack/placement}/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {placement => openstack/placement}/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {placement => openstack/placement}/v1/__pycache__/resource_class.cpython-310.pyc (100%) rename {placement => openstack/placement}/v1/__pycache__/resource_provider.cpython-310.pyc (100%) rename {placement => openstack/placement}/v1/__pycache__/resource_provider_inventory.cpython-310.pyc (100%) rename {placement => openstack/placement}/v1/__pycache__/trait.cpython-310.pyc (100%) rename {placement => openstack/placement}/v1/_proxy.py (100%) rename {placement => openstack/placement}/v1/resource_class.py (100%) rename {placement => openstack/placement}/v1/resource_provider.py (100%) rename {placement => openstack/placement}/v1/resource_provider_inventory.py (100%) rename {placement => openstack/placement}/v1/trait.py (100%) rename proxy.py => openstack/proxy.py (100%) rename py.typed => openstack/py.typed (100%) rename resource.py => openstack/resource.py (100%) rename service_description.py => openstack/service_description.py (100%) rename {tests/functional/cloud => openstack/shared_file_system}/__init__.py (100%) rename {shared_file_system => openstack/shared_file_system}/__pycache__/__init__.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/__pycache__/shared_file_system_service.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/shared_file_system_service.py (100%) rename {tests/functional/clustering => openstack/shared_file_system/v2}/__init__.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/availability_zone.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/limit.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_access_rule.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_export_locations.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_group.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_group_snapshot.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_instance.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_network.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_network_subnet.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_snapshot.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/share_snapshot_instance.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/storage_pool.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/__pycache__/user_message.cpython-310.pyc (100%) rename {shared_file_system => openstack/shared_file_system}/v2/_proxy.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/availability_zone.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/limit.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_access_rule.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_export_locations.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_group.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_group_snapshot.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_instance.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_network.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_network_subnet.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_snapshot.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/share_snapshot_instance.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/storage_pool.py (100%) rename {shared_file_system => openstack/shared_file_system}/v2/user_message.py (100%) rename {tests/functional/compute => openstack/test}/__init__.py (100%) rename {test => openstack/test}/__pycache__/__init__.cpython-310.pyc (100%) rename {test => openstack/test}/__pycache__/fakes.cpython-310.pyc (100%) rename {test => openstack/test}/fakes.py (100%) rename {tests => openstack/tests}/README.rst (100%) rename {tests/functional/compute/v2 => openstack/tests}/__init__.py (100%) rename {tests => openstack/tests}/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/__pycache__/fakes.cpython-310.pyc (100%) rename {tests => openstack/tests}/__pycache__/fixtures.cpython-310.pyc (100%) rename {tests => openstack/tests}/ansible/README.txt (100%) rename {tests => openstack/tests}/ansible/hooks/post_test_hook.sh (100%) rename {tests => openstack/tests}/ansible/roles/auth/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/client_config/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/group/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/group/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/image/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/image/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/keypair/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/keypair/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/keystone_domain/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/keystone_domain/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/keystone_role/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/keystone_role/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/network/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/network/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/nova_flavor/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/object/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/port/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/port/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/router/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/router/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/security_group/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/security_group/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/server/defaults/main.yaml (100%) rename {tests => openstack/tests}/ansible/roles/server/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/subnet/defaults/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/subnet/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/user/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/user_group/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/roles/volume/tasks/main.yml (100%) rename {tests => openstack/tests}/ansible/run.yml (100%) rename {tests => openstack/tests}/base.py (100%) rename {tests => openstack/tests}/fakes.py (100%) rename {tests => openstack/tests}/fixtures.py (100%) rename {tests => openstack/tests}/functional/README.rst (100%) rename {tests/functional/dns => openstack/tests/functional}/__init__.py (100%) rename {tests => openstack/tests}/functional/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/__pycache__/base.cpython-310.pyc (100%) rename {tests/functional/dns/v2 => openstack/tests/functional/baremetal}/__init__.py (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_allocation.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_chassis.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_conductor.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_deploy_templates.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_driver.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_node.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_port.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_port_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_volume_connector.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/__pycache__/test_baremetal_volume_target.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/baremetal/base.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_allocation.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_chassis.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_conductor.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_deploy_templates.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_driver.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_node.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_port.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_port_group.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_volume_connector.py (100%) rename {tests => openstack/tests}/functional/baremetal/test_baremetal_volume_target.py (100%) rename {tests => openstack/tests}/functional/base.py (100%) rename {tests/functional/examples => openstack/tests/functional/block_storage}/__init__.py (100%) rename {tests => openstack/tests}/functional/block_storage/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/functional/identity => openstack/tests/functional/block_storage/v2}/__init__.py (100%) rename {tests => openstack/tests}/functional/block_storage/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v2/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v2/__pycache__/test_backup.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v2/__pycache__/test_stats.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v2/__pycache__/test_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v2/__pycache__/test_volume.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v2/base.py (100%) rename {tests => openstack/tests}/functional/block_storage/v2/test_backup.py (100%) rename {tests => openstack/tests}/functional/block_storage/v2/test_snapshot.py (100%) rename {tests => openstack/tests}/functional/block_storage/v2/test_stats.py (100%) rename {tests => openstack/tests}/functional/block_storage/v2/test_type.py (100%) rename {tests => openstack/tests}/functional/block_storage/v2/test_volume.py (100%) rename {tests/functional/identity => openstack/tests/functional/block_storage}/v3/__init__.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_backup.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_extension.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_limits.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_resource_filters.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/__pycache__/test_volume.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/block_storage/v3/base.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_attachment.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_availability_zone.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_backup.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_block_storage_summary.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_capabilities.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_extension.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_group.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_limits.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_resource_filters.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_service.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_snapshot.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_transfer.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_type.py (100%) rename {tests => openstack/tests}/functional/block_storage/v3/test_volume.py (100%) rename {tests/functional/image => openstack/tests/functional/cloud}/__init__.py (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_aggregate.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_cluster_templates.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_clustering.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_coe_clusters.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_compute.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_devstack.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_domain.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_endpoints.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_flavor.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_floating_ip.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_groups.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_identity.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_image.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_inventory.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_keypairs.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_limits.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_magnum_services.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_network.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_object.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_port.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_project.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_project_cleanup.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_qos_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_quotas.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_range_search.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_recordset.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_router.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_security_groups.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_server_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_services.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_stack.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_users.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_volume.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_volume_backup.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_volume_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/__pycache__/test_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/cloud/test_aggregate.py (100%) rename {tests => openstack/tests}/functional/cloud/test_cluster_templates.py (100%) rename {tests => openstack/tests}/functional/cloud/test_clustering.py (100%) rename {tests => openstack/tests}/functional/cloud/test_coe_clusters.py (100%) rename {tests => openstack/tests}/functional/cloud/test_compute.py (100%) rename {tests => openstack/tests}/functional/cloud/test_devstack.py (100%) rename {tests => openstack/tests}/functional/cloud/test_domain.py (100%) rename {tests => openstack/tests}/functional/cloud/test_endpoints.py (100%) rename {tests => openstack/tests}/functional/cloud/test_flavor.py (100%) rename {tests => openstack/tests}/functional/cloud/test_floating_ip.py (100%) rename {tests => openstack/tests}/functional/cloud/test_floating_ip_pool.py (100%) rename {tests => openstack/tests}/functional/cloud/test_groups.py (100%) rename {tests => openstack/tests}/functional/cloud/test_identity.py (100%) rename {tests => openstack/tests}/functional/cloud/test_image.py (100%) rename {tests => openstack/tests}/functional/cloud/test_inventory.py (100%) rename {tests => openstack/tests}/functional/cloud/test_keypairs.py (100%) rename {tests => openstack/tests}/functional/cloud/test_limits.py (100%) rename {tests => openstack/tests}/functional/cloud/test_magnum_services.py (100%) rename {tests => openstack/tests}/functional/cloud/test_network.py (100%) rename {tests => openstack/tests}/functional/cloud/test_object.py (100%) rename {tests => openstack/tests}/functional/cloud/test_port.py (100%) rename {tests => openstack/tests}/functional/cloud/test_project.py (100%) rename {tests => openstack/tests}/functional/cloud/test_project_cleanup.py (100%) rename {tests => openstack/tests}/functional/cloud/test_qos_bandwidth_limit_rule.py (100%) rename {tests => openstack/tests}/functional/cloud/test_qos_dscp_marking_rule.py (100%) rename {tests => openstack/tests}/functional/cloud/test_qos_minimum_bandwidth_rule.py (100%) rename {tests => openstack/tests}/functional/cloud/test_qos_policy.py (100%) rename {tests => openstack/tests}/functional/cloud/test_quotas.py (100%) rename {tests => openstack/tests}/functional/cloud/test_range_search.py (100%) rename {tests => openstack/tests}/functional/cloud/test_recordset.py (100%) rename {tests => openstack/tests}/functional/cloud/test_router.py (100%) rename {tests => openstack/tests}/functional/cloud/test_security_groups.py (100%) rename {tests => openstack/tests}/functional/cloud/test_server_group.py (100%) rename {tests => openstack/tests}/functional/cloud/test_services.py (100%) rename {tests => openstack/tests}/functional/cloud/test_stack.py (100%) rename {tests => openstack/tests}/functional/cloud/test_users.py (100%) rename {tests => openstack/tests}/functional/cloud/test_volume.py (100%) rename {tests => openstack/tests}/functional/cloud/test_volume_backup.py (100%) rename {tests => openstack/tests}/functional/cloud/test_volume_type.py (100%) rename {tests => openstack/tests}/functional/cloud/test_zone.py (100%) rename {tests/functional/image/v2 => openstack/tests/functional/clustering}/__init__.py (100%) rename {tests => openstack/tests}/functional/clustering/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/clustering/__pycache__/test_cluster.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/clustering/test_cluster.py (100%) rename {tests/functional/instance_ha => openstack/tests/functional/compute}/__init__.py (100%) rename {tests => openstack/tests}/functional/compute/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/base.py (100%) rename {tests/functional/load_balancer => openstack/tests/functional/compute/v2}/__init__.py (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_extension.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_flavor.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_image.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_keypair.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_limits.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_quota_set.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_server.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/compute/v2/test_extension.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_flavor.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_hypervisor.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_image.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_keypair.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_limits.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_quota_set.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_server.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_service.py (100%) rename {tests => openstack/tests}/functional/compute/v2/test_volume_attachment.py (100%) rename {tests/functional/load_balancer/v2 => openstack/tests/functional/dns}/__init__.py (100%) rename {tests => openstack/tests}/functional/dns/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/functional/network => openstack/tests/functional/dns/v2}/__init__.py (100%) rename {tests => openstack/tests}/functional/dns/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/dns/v2/__pycache__/test_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/dns/v2/__pycache__/test_zone_share.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/dns/v2/test_zone.py (100%) rename {tests => openstack/tests}/functional/dns/v2/test_zone_share.py (100%) rename {tests/functional/network/v2 => openstack/tests/functional/examples}/__init__.py (100%) rename {tests => openstack/tests}/functional/examples/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/examples/__pycache__/test_compute.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/examples/__pycache__/test_identity.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/examples/__pycache__/test_image.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/examples/__pycache__/test_network.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/examples/test_compute.py (100%) rename {tests => openstack/tests}/functional/examples/test_identity.py (100%) rename {tests => openstack/tests}/functional/examples/test_image.py (100%) rename {tests => openstack/tests}/functional/examples/test_network.py (100%) rename {tests/functional/object_store => openstack/tests/functional/identity}/__init__.py (100%) rename {tests => openstack/tests}/functional/identity/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/functional/object_store/v1 => openstack/tests/functional/identity/v3}/__init__.py (100%) rename {tests => openstack/tests}/functional/identity/v3/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/identity/v3/__pycache__/test_application_credential.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/identity/v3/__pycache__/test_domain_config.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/identity/v3/test_application_credential.py (100%) rename {tests => openstack/tests}/functional/identity/v3/test_domain_config.py (100%) rename {tests/functional/orchestration => openstack/tests/functional/image}/__init__.py (100%) rename {tests => openstack/tests}/functional/image/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/functional/orchestration/v1 => openstack/tests/functional/image/v2}/__init__.py (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/test_image.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/test_metadef_object.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/test_metadef_property.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/test_schema.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/__pycache__/test_task.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/image/v2/base.py (100%) rename {tests => openstack/tests}/functional/image/v2/test_image.py (100%) rename {tests => openstack/tests}/functional/image/v2/test_metadef_namespace.py (100%) rename {tests => openstack/tests}/functional/image/v2/test_metadef_object.py (100%) rename {tests => openstack/tests}/functional/image/v2/test_metadef_property.py (100%) rename {tests => openstack/tests}/functional/image/v2/test_metadef_resource_type.py (100%) rename {tests => openstack/tests}/functional/image/v2/test_metadef_schema.py (100%) rename {tests => openstack/tests}/functional/image/v2/test_schema.py (100%) rename {tests => openstack/tests}/functional/image/v2/test_task.py (100%) rename {tests/functional/placement => openstack/tests/functional/instance_ha}/__init__.py (100%) rename {tests => openstack/tests}/functional/instance_ha/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/instance_ha/__pycache__/test_host.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/instance_ha/__pycache__/test_segment.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/instance_ha/test_host.py (100%) rename {tests => openstack/tests}/functional/instance_ha/test_segment.py (100%) rename {tests/functional/placement/v1 => openstack/tests/functional/load_balancer}/__init__.py (100%) rename {tests => openstack/tests}/functional/load_balancer/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/functional/shared_file_system => openstack/tests/functional/load_balancer/v2}/__init__.py (100%) rename {tests => openstack/tests}/functional/load_balancer/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/load_balancer/v2/__pycache__/test_load_balancer.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/load_balancer/v2/test_load_balancer.py (100%) rename {tests/unit => openstack/tests/functional/network}/__init__.py (100%) rename {tests => openstack/tests}/functional/network/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/accelerator => openstack/tests/functional/network/v2}/__init__.py (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_address_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_address_scope.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_agent.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_agent_add_remove_network.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_agent_add_remove_router.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_availability_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_bgp.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_dvr_router.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_extension.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_firewall_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_firewall_rule_insert_remove_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_flavor.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_floating_ip.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_local_ip.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_network.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_port.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_qos_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_quota.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_router.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_router_add_remove_interface.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_security_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_segment.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_service_profile.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_service_provider.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_sfc.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_subnet.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_subnet_from_subnet_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_taas.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_trunk.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/__pycache__/test_vpnaas.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/network/v2/test_address_group.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_address_scope.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_agent.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_agent_add_remove_network.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_agent_add_remove_router.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_auto_allocated_topology.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_availability_zone.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_bgp.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_bgpvpn.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_default_security_group_rule.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_dvr_router.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_extension.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_firewall_group.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_firewall_policy.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_firewall_rule.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_firewall_rule_insert_remove_policy.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_flavor.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_floating_ip.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_l3_conntrack_helper.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_local_ip.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_local_ip_association.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_ndp_proxy.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_network.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_network_ip_availability.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_network_segment_range.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_port.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_port_forwarding.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_qos_bandwidth_limit_rule.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_qos_dscp_marking_rule.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_qos_minimum_bandwidth_rule.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_qos_minimum_packet_rate_rule.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_qos_policy.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_qos_rule_type.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_quota.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_rbac_policy.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_router.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_router_add_remove_interface.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_security_group.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_security_group_rule.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_segment.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_service_profile.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_service_provider.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_sfc.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_subnet.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_subnet_from_subnet_pool.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_subnet_pool.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_taas.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_trunk.py (100%) rename {tests => openstack/tests}/functional/network/v2/test_vpnaas.py (100%) rename {tests/unit/accelerator/v2 => openstack/tests/functional/object_store}/__init__.py (100%) rename {tests => openstack/tests}/functional/object_store/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/baremetal => openstack/tests/functional/object_store/v1}/__init__.py (100%) rename {tests => openstack/tests}/functional/object_store/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/object_store/v1/__pycache__/test_account.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/object_store/v1/__pycache__/test_container.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/object_store/v1/__pycache__/test_obj.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/object_store/v1/test_account.py (100%) rename {tests => openstack/tests}/functional/object_store/v1/test_container.py (100%) rename {tests => openstack/tests}/functional/object_store/v1/test_obj.py (100%) rename {tests/unit/baremetal/v1 => openstack/tests/functional/orchestration}/__init__.py (100%) rename {tests => openstack/tests}/functional/orchestration/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/baremetal_introspection => openstack/tests/functional/orchestration/v1}/__init__.py (100%) rename {tests => openstack/tests}/functional/orchestration/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/orchestration/v1/__pycache__/test_stack.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/orchestration/v1/hello_world.yaml (100%) rename {tests => openstack/tests}/functional/orchestration/v1/test_stack.py (100%) rename {tests/unit/baremetal_introspection/v1 => openstack/tests/functional/placement}/__init__.py (100%) rename {tests => openstack/tests}/functional/placement/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/block_storage => openstack/tests/functional/placement/v1}/__init__.py (100%) rename {tests => openstack/tests}/functional/placement/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/placement/v1/__pycache__/test_trait.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/placement/v1/test_resource_provider.py (100%) rename {tests => openstack/tests}/functional/placement/v1/test_resource_provider_inventory.py (100%) rename {tests => openstack/tests}/functional/placement/v1/test_trait.py (100%) rename {tests/unit/block_storage/v2 => openstack/tests/functional/shared_file_system}/__init__.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_availability_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_export_locations.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_limit.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_access_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_group_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_instance.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_metadata.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_network.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_network_subnet.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_share_snapshot_instance.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_storage_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/__pycache__/test_user_message.cpython-310.pyc (100%) rename {tests => openstack/tests}/functional/shared_file_system/base.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_availability_zone.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_export_locations.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_limit.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_access_rule.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_group.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_group_snapshot.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_instance.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_metadata.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_network.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_network_subnet.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_snapshot.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_share_snapshot_instance.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_storage_pool.py (100%) rename {tests => openstack/tests}/functional/shared_file_system/test_user_message.py (100%) rename {tests => openstack/tests}/unit/README.rst (100%) rename {tests/unit/block_storage/v3 => openstack/tests/unit}/__init__.py (100%) rename {tests => openstack/tests}/unit/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/fakes.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_connection.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_exceptions.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_fakes.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_format.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_hacking.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_microversions.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_missing_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_placement_rest.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_proxy_base.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_resource.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_stats.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/__pycache__/test_utils.cpython-310.pyc (100%) rename {tests/unit/cloud => openstack/tests/unit/accelerator}/__init__.py (100%) rename {tests => openstack/tests}/unit/accelerator/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/accelerator/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/accelerator/test_version.py (100%) rename {tests/unit/clustering => openstack/tests/unit/accelerator/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/accelerator/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/accelerator/v2/__pycache__/test_accelerator_request.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/accelerator/v2/__pycache__/test_deployable.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/accelerator/v2/__pycache__/test_device.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/accelerator/v2/__pycache__/test_device_profile.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/accelerator/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/accelerator/v2/test_accelerator_request.py (100%) rename {tests => openstack/tests}/unit/accelerator/v2/test_deployable.py (100%) rename {tests => openstack/tests}/unit/accelerator/v2/test_device.py (100%) rename {tests => openstack/tests}/unit/accelerator/v2/test_device_profile.py (100%) rename {tests => openstack/tests}/unit/accelerator/v2/test_proxy.py (100%) rename {tests/unit/clustering/v1 => openstack/tests/unit/baremetal}/__init__.py (100%) rename {tests => openstack/tests}/unit/baremetal/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/__pycache__/test_configdrive.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/test_configdrive.py (100%) rename {tests => openstack/tests}/unit/baremetal/test_version.py (100%) rename {tests/unit/common => openstack/tests/unit/baremetal/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_allocation.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_chassis.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_conductor.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_deploy_templates.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_driver.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_node.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_port.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_port_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_volume_connector.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/__pycache__/test_volume_target.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_allocation.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_chassis.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_conductor.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_deploy_templates.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_driver.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_node.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_port.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_port_group.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_volume_connector.py (100%) rename {tests => openstack/tests}/unit/baremetal/v1/test_volume_target.py (100%) rename {tests/unit/compute => openstack/tests/unit/baremetal_introspection}/__init__.py (100%) rename {tests => openstack/tests}/unit/baremetal_introspection/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/compute/v2 => openstack/tests/unit/baremetal_introspection/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal_introspection/v1/__pycache__/test_introspection_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal_introspection/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/baremetal_introspection/v1/test_introspection_rule.py (100%) rename {tests => openstack/tests}/unit/baremetal_introspection/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/base.py (100%) rename {tests/unit/config => openstack/tests/unit/block_storage}/__init__.py (100%) rename {tests => openstack/tests}/unit/block_storage/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/container_infrastructure_management => openstack/tests/unit/block_storage/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_backup.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_capabilities.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_extension.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_limits.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_stats.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/__pycache__/test_volume.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_backup.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_capabilities.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_extension.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_limits.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_proxy.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_snapshot.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_stats.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_type.py (100%) rename {tests => openstack/tests}/unit/block_storage/v2/test_volume.py (100%) rename {tests/unit/container_infrastructure_management/v1 => openstack/tests/unit/block_storage/v3}/__init__.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_backup.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_extension.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_group_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_group_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_limits.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_resource_filter.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_type_encryption.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/__pycache__/test_volume.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_attachment.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_availability_zone.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_backup.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_block_storage_summary.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_capabilities.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_extension.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_group.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_group_snapshot.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_group_type.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_limits.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_proxy.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_resource_filter.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_service.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_snapshot.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_transfer.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_type.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_type_encryption.py (100%) rename {tests => openstack/tests}/unit/block_storage/v3/test_volume.py (100%) rename {tests/unit/database => openstack/tests/unit/cloud}/__init__.py (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test__utils.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_accelerator.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_aggregate.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_availability_zones.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_baremetal_node.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_baremetal_ports.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_cloud.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_cluster_templates.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_clustering.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_coe_clusters.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_coe_clusters_certificate.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_compute.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_create_server.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_create_volume_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_delete_server.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_delete_volume_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_domain_params.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_domains.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_endpoints.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_flavors.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_floating_ip_common.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_floating_ip_neutron.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_floating_ip_nova.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_fwaas.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_groups.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_identity_roles.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_identity_users.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_image.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_image_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_inventory.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_keypair.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_limits.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_magnum_services.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_meta.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_network.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_object.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_openstackcloud.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_operator.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_operator_noauth.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_port.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_project.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_qos_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_qos_rule_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_quotas.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_rebuild_server.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_recordset.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_role_assignment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_router.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_security_groups.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_server_console.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_server_delete_metadata.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_server_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_server_set_metadata.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_services.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_shared_file_system.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_stack.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_subnet.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_update_server.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_usage.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_users.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_volume.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_volume_access.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_volume_backups.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/__pycache__/test_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/cloud/test__utils.py (100%) rename {tests => openstack/tests}/unit/cloud/test_accelerator.py (100%) rename {tests => openstack/tests}/unit/cloud/test_aggregate.py (100%) rename {tests => openstack/tests}/unit/cloud/test_availability_zones.py (100%) rename {tests => openstack/tests}/unit/cloud/test_baremetal_node.py (100%) rename {tests => openstack/tests}/unit/cloud/test_baremetal_ports.py (100%) rename {tests => openstack/tests}/unit/cloud/test_cloud.py (100%) rename {tests => openstack/tests}/unit/cloud/test_cluster_templates.py (100%) rename {tests => openstack/tests}/unit/cloud/test_clustering.py (100%) rename {tests => openstack/tests}/unit/cloud/test_coe_clusters.py (100%) rename {tests => openstack/tests}/unit/cloud/test_coe_clusters_certificate.py (100%) rename {tests => openstack/tests}/unit/cloud/test_compute.py (100%) rename {tests => openstack/tests}/unit/cloud/test_create_server.py (100%) rename {tests => openstack/tests}/unit/cloud/test_create_volume_snapshot.py (100%) rename {tests => openstack/tests}/unit/cloud/test_delete_server.py (100%) rename {tests => openstack/tests}/unit/cloud/test_delete_volume_snapshot.py (100%) rename {tests => openstack/tests}/unit/cloud/test_domain_params.py (100%) rename {tests => openstack/tests}/unit/cloud/test_domains.py (100%) rename {tests => openstack/tests}/unit/cloud/test_endpoints.py (100%) rename {tests => openstack/tests}/unit/cloud/test_flavors.py (100%) rename {tests => openstack/tests}/unit/cloud/test_floating_ip_common.py (100%) rename {tests => openstack/tests}/unit/cloud/test_floating_ip_neutron.py (100%) rename {tests => openstack/tests}/unit/cloud/test_floating_ip_nova.py (100%) rename {tests => openstack/tests}/unit/cloud/test_floating_ip_pool.py (100%) rename {tests => openstack/tests}/unit/cloud/test_fwaas.py (100%) rename {tests => openstack/tests}/unit/cloud/test_groups.py (100%) rename {tests => openstack/tests}/unit/cloud/test_identity_roles.py (100%) rename {tests => openstack/tests}/unit/cloud/test_identity_users.py (100%) rename {tests => openstack/tests}/unit/cloud/test_image.py (100%) rename {tests => openstack/tests}/unit/cloud/test_image_snapshot.py (100%) rename {tests => openstack/tests}/unit/cloud/test_inventory.py (100%) rename {tests => openstack/tests}/unit/cloud/test_keypair.py (100%) rename {tests => openstack/tests}/unit/cloud/test_limits.py (100%) rename {tests => openstack/tests}/unit/cloud/test_magnum_services.py (100%) rename {tests => openstack/tests}/unit/cloud/test_meta.py (100%) rename {tests => openstack/tests}/unit/cloud/test_network.py (100%) rename {tests => openstack/tests}/unit/cloud/test_object.py (100%) rename {tests => openstack/tests}/unit/cloud/test_openstackcloud.py (100%) rename {tests => openstack/tests}/unit/cloud/test_operator.py (100%) rename {tests => openstack/tests}/unit/cloud/test_operator_noauth.py (100%) rename {tests => openstack/tests}/unit/cloud/test_port.py (100%) rename {tests => openstack/tests}/unit/cloud/test_project.py (100%) rename {tests => openstack/tests}/unit/cloud/test_qos_bandwidth_limit_rule.py (100%) rename {tests => openstack/tests}/unit/cloud/test_qos_dscp_marking_rule.py (100%) rename {tests => openstack/tests}/unit/cloud/test_qos_minimum_bandwidth_rule.py (100%) rename {tests => openstack/tests}/unit/cloud/test_qos_policy.py (100%) rename {tests => openstack/tests}/unit/cloud/test_qos_rule_type.py (100%) rename {tests => openstack/tests}/unit/cloud/test_quotas.py (100%) rename {tests => openstack/tests}/unit/cloud/test_rebuild_server.py (100%) rename {tests => openstack/tests}/unit/cloud/test_recordset.py (100%) rename {tests => openstack/tests}/unit/cloud/test_role_assignment.py (100%) rename {tests => openstack/tests}/unit/cloud/test_router.py (100%) rename {tests => openstack/tests}/unit/cloud/test_security_groups.py (100%) rename {tests => openstack/tests}/unit/cloud/test_server_console.py (100%) rename {tests => openstack/tests}/unit/cloud/test_server_delete_metadata.py (100%) rename {tests => openstack/tests}/unit/cloud/test_server_group.py (100%) rename {tests => openstack/tests}/unit/cloud/test_server_set_metadata.py (100%) rename {tests => openstack/tests}/unit/cloud/test_services.py (100%) rename {tests => openstack/tests}/unit/cloud/test_shared_file_system.py (100%) rename {tests => openstack/tests}/unit/cloud/test_stack.py (100%) rename {tests => openstack/tests}/unit/cloud/test_subnet.py (100%) rename {tests => openstack/tests}/unit/cloud/test_update_server.py (100%) rename {tests => openstack/tests}/unit/cloud/test_usage.py (100%) rename {tests => openstack/tests}/unit/cloud/test_users.py (100%) rename {tests => openstack/tests}/unit/cloud/test_volume.py (100%) rename {tests => openstack/tests}/unit/cloud/test_volume_access.py (100%) rename {tests => openstack/tests}/unit/cloud/test_volume_backups.py (100%) rename {tests => openstack/tests}/unit/cloud/test_zone.py (100%) rename {tests/unit/database/v1 => openstack/tests/unit/clustering}/__init__.py (100%) rename {tests => openstack/tests}/unit/clustering/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/test_version.py (100%) rename {tests/unit/dns => openstack/tests/unit/clustering/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_action.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_build_info.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_cluster.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_cluster_attr.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_cluster_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_event.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_node.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_policy_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_profile.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_profile_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_receiver.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/__pycache__/test_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_action.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_build_info.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_cluster.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_cluster_attr.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_cluster_policy.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_event.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_node.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_policy.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_policy_type.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_profile.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_profile_type.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_receiver.py (100%) rename {tests => openstack/tests}/unit/clustering/v1/test_service.py (100%) rename {tests/unit/dns/v2 => openstack/tests/unit/common}/__init__.py (100%) rename {tests => openstack/tests}/unit/common/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/common/__pycache__/test_metadata.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/common/__pycache__/test_quota_set.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/common/__pycache__/test_tag.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/common/test_metadata.py (100%) rename {tests => openstack/tests}/unit/common/test_quota_set.py (100%) rename {tests => openstack/tests}/unit/common/test_tag.py (100%) rename {tests/unit/fake => openstack/tests/unit/compute}/__init__.py (100%) rename {tests => openstack/tests}/unit/compute/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/test_version.py (100%) rename {tests/unit/fake/v1 => openstack/tests/unit/compute/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_aggregate.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_availability_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_extension.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_flavor.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_image.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_keypair.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_limits.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_migration.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_server.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_server_actions.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_server_diagnostics.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_server_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_server_interface.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_server_ip.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_server_migration.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_server_remote_console.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_usage.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/compute/v2/test_aggregate.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_availability_zone.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_extension.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_flavor.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_hypervisor.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_image.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_keypair.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_limits.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_migration.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_proxy.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_server.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_server_actions.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_server_diagnostics.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_server_group.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_server_interface.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_server_ip.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_server_migration.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_server_remote_console.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_service.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_usage.py (100%) rename {tests => openstack/tests}/unit/compute/v2/test_volume_attachment.py (100%) rename {tests/unit/fake/v2 => openstack/tests/unit/config}/__init__.py (100%) rename {tests => openstack/tests}/unit/config/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/base.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/test_cloud_config.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/test_config.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/test_environ.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/test_from_conf.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/test_from_session.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/test_init.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/test_json.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/__pycache__/test_loader.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/config/base.py (100%) rename {tests => openstack/tests}/unit/config/test_cloud_config.py (100%) rename {tests => openstack/tests}/unit/config/test_config.py (100%) rename {tests => openstack/tests}/unit/config/test_environ.py (100%) rename {tests => openstack/tests}/unit/config/test_from_conf.py (100%) rename {tests => openstack/tests}/unit/config/test_from_session.py (100%) rename {tests => openstack/tests}/unit/config/test_init.py (100%) rename {tests => openstack/tests}/unit/config/test_json.py (100%) rename {tests => openstack/tests}/unit/config/test_loader.py (100%) rename {tests/unit/identity => openstack/tests/unit/container_infrastructure_management}/__init__.py (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/identity/v2 => openstack/tests/unit/container_infrastructure_management/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/__pycache__/test_cluster.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/__pycache__/test_cluster_certificate.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/__pycache__/test_cluster_template.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/__pycache__/test_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/test_cluster.py (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/test_cluster_certificate.py (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/test_cluster_template.py (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/container_infrastructure_management/v1/test_service.py (100%) rename {tests/unit/identity/v3 => openstack/tests/unit/database}/__init__.py (100%) rename {tests => openstack/tests}/unit/database/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/image => openstack/tests/unit/database/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/database/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/database/v1/__pycache__/test_database.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/database/v1/__pycache__/test_flavor.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/database/v1/__pycache__/test_instance.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/database/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/database/v1/__pycache__/test_user.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/database/v1/test_database.py (100%) rename {tests => openstack/tests}/unit/database/v1/test_flavor.py (100%) rename {tests => openstack/tests}/unit/database/v1/test_instance.py (100%) rename {tests => openstack/tests}/unit/database/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/database/v1/test_user.py (100%) rename {tests/unit/image/v1 => openstack/tests/unit/dns}/__init__.py (100%) rename {tests => openstack/tests}/unit/dns/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/test_version.py (100%) rename {tests/unit/image => openstack/tests/unit/dns}/v2/__init__.py (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/test_floating_ip.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/test_recordset.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/test_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/test_zone_export.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/test_zone_import.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/test_zone_share.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/__pycache__/test_zone_transfer.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/dns/v2/test_floating_ip.py (100%) rename {tests => openstack/tests}/unit/dns/v2/test_proxy.py (100%) rename {tests => openstack/tests}/unit/dns/v2/test_recordset.py (100%) rename {tests => openstack/tests}/unit/dns/v2/test_zone.py (100%) rename {tests => openstack/tests}/unit/dns/v2/test_zone_export.py (100%) rename {tests => openstack/tests}/unit/dns/v2/test_zone_import.py (100%) rename {tests => openstack/tests}/unit/dns/v2/test_zone_share.py (100%) rename {tests => openstack/tests}/unit/dns/v2/test_zone_transfer.py (100%) rename {tests/unit/instance_ha => openstack/tests/unit/fake}/__init__.py (100%) rename {tests => openstack/tests}/unit/fake/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/fake/__pycache__/fake_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/fake/fake_service.py (100%) rename {tests/unit/instance_ha => openstack/tests/unit/fake}/v1/__init__.py (100%) rename {tests => openstack/tests}/unit/fake/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/fake/v1/__pycache__/_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/fake/v1/__pycache__/fake.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/fake/v1/_proxy.py (100%) rename {tests => openstack/tests}/unit/fake/v1/fake.py (100%) rename {tests/unit/key_manager => openstack/tests/unit/fake/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/fake/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/fake/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/fake/v2/__pycache__/fake.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/fake/v2/_proxy.py (100%) rename {tests => openstack/tests}/unit/fake/v2/fake.py (100%) rename {tests => openstack/tests}/unit/fakes.py (100%) rename {tests => openstack/tests}/unit/fixtures/accelerator.json (100%) rename {tests => openstack/tests}/unit/fixtures/bad-glance-version.json (100%) rename {tests => openstack/tests}/unit/fixtures/bad-placement.json (100%) rename {tests => openstack/tests}/unit/fixtures/baremetal.json (100%) rename {tests => openstack/tests}/unit/fixtures/block-storage-version.json (100%) rename {tests => openstack/tests}/unit/fixtures/clouds/clouds.yaml (100%) rename {tests => openstack/tests}/unit/fixtures/clouds/clouds_cache.yaml (100%) rename {tests => openstack/tests}/unit/fixtures/clustering.json (100%) rename {tests => openstack/tests}/unit/fixtures/compute-version.json (100%) rename {tests => openstack/tests}/unit/fixtures/discovery.json (100%) rename {tests => openstack/tests}/unit/fixtures/dns.json (100%) rename {tests => openstack/tests}/unit/fixtures/image-version-broken.json (100%) rename {tests => openstack/tests}/unit/fixtures/image-version-suburl.json (100%) rename {tests => openstack/tests}/unit/fixtures/image-version-v1.json (100%) rename {tests => openstack/tests}/unit/fixtures/image-version-v2.json (100%) rename {tests => openstack/tests}/unit/fixtures/image-version.json (100%) rename {tests => openstack/tests}/unit/fixtures/old-compute-version.json (100%) rename {tests => openstack/tests}/unit/fixtures/placement.json (100%) rename {tests => openstack/tests}/unit/fixtures/shared-file-system.json (100%) rename {tests/unit/key_manager/v1 => openstack/tests/unit/identity}/__init__.py (100%) rename {tests => openstack/tests}/unit/identity/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/test_version.py (100%) rename {tests/unit/load_balancer => openstack/tests/unit/identity/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/identity/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v2/__pycache__/test_extension.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v2/__pycache__/test_role.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v2/__pycache__/test_tenant.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v2/__pycache__/test_user.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v2/test_extension.py (100%) rename {tests => openstack/tests}/unit/identity/v2/test_proxy.py (100%) rename {tests => openstack/tests}/unit/identity/v2/test_role.py (100%) rename {tests => openstack/tests}/unit/identity/v2/test_tenant.py (100%) rename {tests => openstack/tests}/unit/identity/v2/test_user.py (100%) rename {tests/unit/load_balancer/v2 => openstack/tests/unit/identity/v3}/__init__.py (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_application_credential.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_credential.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_domain.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_domain_config.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_endpoint.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_federation_protocol.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_identity_provider.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_limit.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_mapping.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_project.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_region.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_registered_limit.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_role.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_role_assignment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_role_domain_group_assignment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_role_domain_user_assignment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_role_project_group_assignment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_role_project_user_assignment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_role_system_group_assignment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_role_system_user_assignment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_trust.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/__pycache__/test_user.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/identity/v3/test_application_credential.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_credential.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_domain.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_domain_config.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_endpoint.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_federation_protocol.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_group.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_identity_provider.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_limit.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_mapping.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_policy.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_project.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_proxy.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_region.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_registered_limit.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_role.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_role_assignment.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_role_domain_group_assignment.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_role_domain_user_assignment.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_role_project_group_assignment.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_role_project_user_assignment.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_role_system_group_assignment.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_role_system_user_assignment.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_service.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_trust.py (100%) rename {tests => openstack/tests}/unit/identity/v3/test_user.py (100%) rename {tests/unit/message => openstack/tests/unit/image}/__init__.py (100%) rename {tests => openstack/tests}/unit/image/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/message/v2 => openstack/tests/unit/image/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/image/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v1/__pycache__/test_image.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v1/test_image.py (100%) rename {tests => openstack/tests}/unit/image/v1/test_proxy.py (100%) rename {tests/unit/network => openstack/tests/unit/image/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_cache.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_image.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_member.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_metadef_object.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_metadef_property.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_metadef_resource_type_association.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_schema.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_service_info.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/__pycache__/test_task.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/image/v2/test_cache.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_image.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_member.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_metadef_namespace.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_metadef_object.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_metadef_property.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_metadef_resource_type.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_metadef_resource_type_association.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_metadef_schema.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_proxy.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_schema.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_service_info.py (100%) rename {tests => openstack/tests}/unit/image/v2/test_task.py (100%) rename {tests/unit/network/v2 => openstack/tests/unit/instance_ha}/__init__.py (100%) rename {tests => openstack/tests}/unit/instance_ha/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/object_store => openstack/tests/unit/instance_ha/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/__pycache__/test_host.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/__pycache__/test_notification.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/__pycache__/test_segment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/__pycache__/test_vmove.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/test_host.py (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/test_notification.py (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/test_segment.py (100%) rename {tests => openstack/tests}/unit/instance_ha/v1/test_vmove.py (100%) rename {tests/unit/object_store/v1 => openstack/tests/unit/key_manager}/__init__.py (100%) rename {tests => openstack/tests}/unit/key_manager/__pycache__/__init__.cpython-310.pyc (100%) rename {tests/unit/orchestration => openstack/tests/unit/key_manager/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/key_manager/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/key_manager/v1/__pycache__/test_container.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/key_manager/v1/__pycache__/test_order.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/key_manager/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/key_manager/v1/__pycache__/test_secret.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/key_manager/v1/test_container.py (100%) rename {tests => openstack/tests}/unit/key_manager/v1/test_order.py (100%) rename {tests => openstack/tests}/unit/key_manager/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/key_manager/v1/test_secret.py (100%) rename {tests/unit/orchestration/v1 => openstack/tests/unit/load_balancer}/__init__.py (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_amphora.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_availability_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_availability_zone_profile.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_flavor.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_flavor_profile.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_health_monitor.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_l7policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_l7rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_listener.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_load_balancer.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_member.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_provider.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_quota.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/test_amphora.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_availability_zone.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_availability_zone_profile.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_flavor.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_flavor_profile.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_health_monitor.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_l7policy.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_l7rule.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_listener.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_load_balancer.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_member.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_pool.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_provider.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_quota.py (100%) rename {tests => openstack/tests}/unit/load_balancer/test_version.py (100%) rename {tests/unit/placement => openstack/tests/unit/load_balancer/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/load_balancer/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/load_balancer/v2/test_proxy.py (100%) rename {tests/unit/placement/v1 => openstack/tests/unit/message}/__init__.py (100%) rename {tests => openstack/tests}/unit/message/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/message/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/message/test_version.py (100%) rename {tests/unit/shared_file_system => openstack/tests/unit/message/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/message/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/message/v2/__pycache__/test_claim.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/message/v2/__pycache__/test_message.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/message/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/message/v2/__pycache__/test_queue.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/message/v2/__pycache__/test_subscription.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/message/v2/test_claim.py (100%) rename {tests => openstack/tests}/unit/message/v2/test_message.py (100%) rename {tests => openstack/tests}/unit/message/v2/test_proxy.py (100%) rename {tests => openstack/tests}/unit/message/v2/test_queue.py (100%) rename {tests => openstack/tests}/unit/message/v2/test_subscription.py (100%) rename {tests/unit/shared_file_system/v2 => openstack/tests/unit/network}/__init__.py (100%) rename {tests => openstack/tests}/unit/network/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/test_version.py (100%) rename {tests/unit/workflow => openstack/tests/unit/network/v2}/__init__.py (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_address_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_address_scope.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_agent.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_availability_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_bgp_peer.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_bgp_speaker.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_extension.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_firewall_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_flavor.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_floating_ip.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_health_monitor.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_listener.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_load_balancer.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_local_ip.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_metering_label.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_metering_label_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_network.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_pool_member.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_port.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_qos_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_quota.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_router.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_security_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_segment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_service_profile.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_service_provider.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_sfc_flow_classifier.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_sfc_port_chain.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_sfc_port_pair.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_sfc_port_pair_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_sfc_service_graph.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_subnet.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_tap_flow.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_tap_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_trunk.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_vpn_endpoint_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_vpn_ikepolicy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_vpn_ipsec_site_connection.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_vpn_ipsecpolicy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/__pycache__/test_vpn_service.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/network/v2/test_address_group.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_address_scope.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_agent.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_auto_allocated_topology.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_availability_zone.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_bgp_peer.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_bgp_speaker.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_bgpvpn.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_default_security_group_rule.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_extension.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_firewall_group.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_firewall_policy.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_firewall_rule.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_flavor.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_floating_ip.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_health_monitor.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_l3_conntrack_helper.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_listener.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_load_balancer.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_local_ip.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_local_ip_association.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_metering_label.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_metering_label_rule.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_ndp_proxy.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_network.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_network_ip_availability.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_network_segment_range.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_pool.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_pool_member.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_port.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_port_forwarding.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_proxy.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_qos_bandwidth_limit_rule.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_qos_dscp_marking_rule.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_qos_minimum_bandwidth_rule.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_qos_minimum_packet_rate_rule.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_qos_policy.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_qos_rule_type.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_quota.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_rbac_policy.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_router.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_security_group.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_security_group_rule.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_segment.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_service_profile.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_service_provider.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_sfc_flow_classifier.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_sfc_port_chain.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_sfc_port_pair.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_sfc_port_pair_group.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_sfc_service_graph.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_subnet.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_subnet_pool.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_tap_flow.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_tap_service.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_trunk.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_vpn_endpoint_group.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_vpn_ikepolicy.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_vpn_ipsec_site_connection.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_vpn_ipsecpolicy.py (100%) rename {tests => openstack/tests}/unit/network/v2/test_vpn_service.py (100%) rename {tests/unit/workflow/v2 => openstack/tests/unit/object_store}/__init__.py (100%) rename {tests => openstack/tests}/unit/object_store/__pycache__/__init__.cpython-310.pyc (100%) rename {workflow => openstack/tests/unit/object_store/v1}/__init__.py (100%) rename {tests => openstack/tests}/unit/object_store/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/object_store/v1/__pycache__/test_account.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/object_store/v1/__pycache__/test_container.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/object_store/v1/__pycache__/test_info.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/object_store/v1/__pycache__/test_obj.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/object_store/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/object_store/v1/test_account.py (100%) rename {tests => openstack/tests}/unit/object_store/v1/test_container.py (100%) rename {tests => openstack/tests}/unit/object_store/v1/test_info.py (100%) rename {tests => openstack/tests}/unit/object_store/v1/test_obj.py (100%) rename {tests => openstack/tests}/unit/object_store/v1/test_proxy.py (100%) rename {workflow/v2 => openstack/tests/unit/orchestration}/__init__.py (100%) rename {tests => openstack/tests}/unit/orchestration/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/test_version.py (100%) create mode 100644 openstack/tests/unit/orchestration/v1/__init__.py rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_resource.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_software_config.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_software_deployment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_stack.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_stack_environment.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_stack_event.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_stack_files.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_stack_template.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/__pycache__/test_template.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/orchestration/v1/hello_world.yaml (100%) rename {tests => openstack/tests}/unit/orchestration/v1/helloworld.txt (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_resource.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_software_config.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_software_deployment.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_stack.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_stack_environment.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_stack_event.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_stack_files.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_stack_template.py (100%) rename {tests => openstack/tests}/unit/orchestration/v1/test_template.py (100%) create mode 100644 openstack/tests/unit/placement/__init__.py rename {tests => openstack/tests}/unit/placement/__pycache__/__init__.cpython-310.pyc (100%) create mode 100644 openstack/tests/unit/placement/v1/__init__.py rename {tests => openstack/tests}/unit/placement/v1/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/placement/v1/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/placement/v1/__pycache__/test_resource_class.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/placement/v1/__pycache__/test_trait.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/placement/v1/test_proxy.py (100%) rename {tests => openstack/tests}/unit/placement/v1/test_resource_class.py (100%) rename {tests => openstack/tests}/unit/placement/v1/test_resource_provider.py (100%) rename {tests => openstack/tests}/unit/placement/v1/test_resource_provider_inventory.py (100%) rename {tests => openstack/tests}/unit/placement/v1/test_trait.py (100%) create mode 100644 openstack/tests/unit/shared_file_system/__init__.py rename {tests => openstack/tests}/unit/shared_file_system/__pycache__/__init__.cpython-310.pyc (100%) create mode 100644 openstack/tests/unit/shared_file_system/v2/__init__.py rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_availability_zone.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_limit.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_access_rule.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_export_locations.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_group.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_group_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_instance.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_network.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_network_subnet.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_snapshot.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_share_snapshot_instance.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_storage_pool.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/__pycache__/test_user_message.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_availability_zone.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_limit.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_proxy.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_access_rule.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_export_locations.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_group.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_group_snapshot.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_instance.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_network.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_network_subnet.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_snapshot.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_share_snapshot_instance.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_storage_pool.py (100%) rename {tests => openstack/tests}/unit/shared_file_system/v2/test_user_message.py (100%) rename {tests => openstack/tests}/unit/test_connection.py (100%) rename {tests => openstack/tests}/unit/test_exceptions.py (100%) rename {tests => openstack/tests}/unit/test_fakes.py (100%) rename {tests => openstack/tests}/unit/test_format.py (100%) rename {tests => openstack/tests}/unit/test_hacking.py (100%) rename {tests => openstack/tests}/unit/test_microversions.py (100%) rename {tests => openstack/tests}/unit/test_missing_version.py (100%) rename {tests => openstack/tests}/unit/test_placement_rest.py (100%) rename {tests => openstack/tests}/unit/test_proxy.py (100%) rename {tests => openstack/tests}/unit/test_proxy_base.py (100%) rename {tests => openstack/tests}/unit/test_resource.py (100%) rename {tests => openstack/tests}/unit/test_stats.py (100%) rename {tests => openstack/tests}/unit/test_utils.py (100%) create mode 100644 openstack/tests/unit/workflow/__init__.py rename {tests => openstack/tests}/unit/workflow/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/workflow/__pycache__/test_cron_trigger.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/workflow/__pycache__/test_execution.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/workflow/__pycache__/test_version.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/workflow/__pycache__/test_workflow.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/workflow/test_cron_trigger.py (100%) rename {tests => openstack/tests}/unit/workflow/test_execution.py (100%) rename {tests => openstack/tests}/unit/workflow/test_version.py (100%) rename {tests => openstack/tests}/unit/workflow/test_workflow.py (100%) create mode 100644 openstack/tests/unit/workflow/v2/__init__.py rename {tests => openstack/tests}/unit/workflow/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/workflow/v2/__pycache__/test_proxy.cpython-310.pyc (100%) rename {tests => openstack/tests}/unit/workflow/v2/test_proxy.py (100%) rename utils.py => openstack/utils.py (100%) rename version.py => openstack/version.py (100%) rename warnings.py => openstack/warnings.py (100%) create mode 100644 openstack/workflow/__init__.py rename {workflow => openstack/workflow}/__pycache__/__init__.cpython-310.pyc (100%) rename {workflow => openstack/workflow}/__pycache__/version.cpython-310.pyc (100%) rename {workflow => openstack/workflow}/__pycache__/workflow_service.cpython-310.pyc (100%) create mode 100644 openstack/workflow/v2/__init__.py rename {workflow => openstack/workflow}/v2/__pycache__/__init__.cpython-310.pyc (100%) rename {workflow => openstack/workflow}/v2/__pycache__/_proxy.cpython-310.pyc (100%) rename {workflow => openstack/workflow}/v2/__pycache__/cron_trigger.cpython-310.pyc (100%) rename {workflow => openstack/workflow}/v2/__pycache__/execution.cpython-310.pyc (100%) rename {workflow => openstack/workflow}/v2/__pycache__/workflow.cpython-310.pyc (100%) rename {workflow => openstack/workflow}/v2/_proxy.py (100%) rename {workflow => openstack/workflow}/v2/cron_trigger.py (100%) rename {workflow => openstack/workflow}/v2/execution.py (100%) rename {workflow => openstack/workflow}/v2/workflow.py (100%) rename {workflow => openstack/workflow}/version.py (100%) rename {workflow => openstack/workflow}/workflow_service.py (100%) create mode 100644 playbooks/acceptance/post.yaml create mode 100644 playbooks/acceptance/pre.yaml create mode 100644 playbooks/acceptance/run-with-devstack.yaml create mode 100644 playbooks/devstack/legacy-git.yaml create mode 100644 playbooks/devstack/post.yaml create mode 100755 post_test_hook.sh create mode 100644 releasenotes/notes/add-aggregates-fc563e237755112e.yaml create mode 100644 releasenotes/notes/add-application-credentials-abab9106dea10c11.yaml create mode 100644 releasenotes/notes/add-az-to-loadbalancer-da9bf1baaedc89a4.yaml create mode 100644 releasenotes/notes/add-block-storage-group-snapshots-954cc869227317c3.yaml create mode 100644 releasenotes/notes/add-block-storage-group-type-group-specs-d07047167224ec83.yaml create mode 100644 releasenotes/notes/add-block-storage-groups-bf5f1af714c9e505.yaml create mode 100644 releasenotes/notes/add-block-storage-service-support-ce03092ce2d7e7b9.yaml create mode 100644 releasenotes/notes/add-block-storage-summary-support-dd00d424c4e6a3b1.yaml create mode 100644 releasenotes/notes/add-bulk-create-resources-12192ec9d76c7716.yaml create mode 100644 releasenotes/notes/add-cipher-list-support-to-octavia-b6b2b0053ca6b184.yaml create mode 100644 releasenotes/notes/add-compute-flavor-ops-12149e58299c413e.yaml create mode 100644 releasenotes/notes/add-current-user-id-49b6463e6bcc3b31.yaml create mode 100644 releasenotes/notes/add-cyborg-support-b9afca69f709c048.yaml create mode 100644 releasenotes/notes/add-dns-606cc018e01d40fa.yaml create mode 100644 releasenotes/notes/add-dns-domain-support-for-port-3fa4568330dda07e.yaml create mode 100644 releasenotes/notes/add-dns-zone-share-api-374e71cac504917f.yaml create mode 100644 releasenotes/notes/add-fakes-generator-72c53d34c995fcb2.yaml create mode 100644 releasenotes/notes/add-find-backup-find-snapshot-v2-756a05ccd150db82.yaml create mode 100644 releasenotes/notes/add-fip-portforwarding-methods-cffc14a6283cedfb.yaml create mode 100644 releasenotes/notes/add-identity-domain-configuration-2e8bcaa20736b379.yaml create mode 100644 releasenotes/notes/add-identity-group-users-proxy-method-e37f8983b2406819.yaml create mode 100644 releasenotes/notes/add-image-attributes-05b820a85cd09806.yaml create mode 100644 releasenotes/notes/add-image-cache-support-3f8c13550a84d749.yaml create mode 100644 releasenotes/notes/add-image-cache-support-78477e1686c52e56.yaml create mode 100644 releasenotes/notes/add-image-metadef-namespace-support-b93557afdcf4272c.yaml create mode 100644 releasenotes/notes/add-image-metadef-property-fb87e5a7090e73ac.yaml create mode 100644 releasenotes/notes/add-image-metadef-schema-b463825481bdf954.yaml create mode 100644 releasenotes/notes/add-image-schema-9c07c2789490718a.yaml create mode 100644 releasenotes/notes/add-image-service-info-90d6063b5ba0735d.yaml create mode 100644 releasenotes/notes/add-image-stage-1dbc3844a042fd26.yaml create mode 100644 releasenotes/notes/add-jmespath-support-f47b7a503dbbfda1.yaml create mode 100644 releasenotes/notes/add-limit-to-shared-file-2b443c2a00c75e6e.yaml create mode 100644 releasenotes/notes/add-list_flavor_access-e038253e953e6586.yaml create mode 100644 releasenotes/notes/add-load-balancer-flavor-api-d2598e30347a19fc.yaml create mode 100644 releasenotes/notes/add-load-balancer-flavor-profile-api-e5a15157563eb75f.yaml create mode 100644 releasenotes/notes/add-load-balancer-listener-alpn-protocols-ded816c78bf2080c.yaml create mode 100644 releasenotes/notes/add-load-balancer-pool-alpn-protocols-77f0c7015f176369.yaml create mode 100644 releasenotes/notes/add-load-balancer-provider-api-08bcfb72ddf5b247.yaml create mode 100644 releasenotes/notes/add-magnum-cluster-support-843fe2709b8f4789.yaml create mode 100644 releasenotes/notes/add-manage-volume-support-a4fd90e3ff2fa0d0.yaml create mode 100644 releasenotes/notes/add-masakara-support-3f7df4436ac869cf.yaml create mode 100644 releasenotes/notes/add-masakari-enabled-to-segment-0e83da869d2ab03f.yaml create mode 100644 releasenotes/notes/add-masakari-vmoves-873ad67830c92254.yaml create mode 100644 releasenotes/notes/add-metadef-object-5eec168baf039e80.yaml create mode 100644 releasenotes/notes/add-migrations-946adf16674d4b2a.yaml create mode 100644 releasenotes/notes/add-new-field-progress-details-in-notification-resource-f7871acb6ffd46dc.yaml create mode 100644 releasenotes/notes/add-node-boot-mode-5f49882fdd86f35b.yaml create mode 100644 releasenotes/notes/add-node-boot-mode-set-5718a8d6511b4826.yaml create mode 100644 releasenotes/notes/add-node-inventory-52f54e16777814e7.yaml create mode 100644 releasenotes/notes/add-node-vendor_passthru-29b384cadf795b48.yaml create mode 100644 releasenotes/notes/add-octavia-amphora-api-7f3586f6a4f31de4.yaml create mode 100644 releasenotes/notes/add-octavia-lb-failover-9a34c9577d78ad34.yaml create mode 100644 releasenotes/notes/add-octavia-lb-listener-stats-1538cc6e4f734353.yaml create mode 100644 releasenotes/notes/add-octavia-listener-hsts-fields-50c621b71e56dc13.yaml create mode 100644 releasenotes/notes/add-octavia-tags-support-1c1cf94184e6ebb7.yaml create mode 100644 releasenotes/notes/add-placement-resource-class-e1c644d978b886bc.yaml create mode 100644 releasenotes/notes/add-placement-resource-provider-aggregates-1310c0be6a4097d3.yaml create mode 100644 releasenotes/notes/add-placement-resource-provider-inventory-8714cafefae74810.yaml create mode 100644 releasenotes/notes/add-placement-support-a2011eb1e900804d.yaml create mode 100644 releasenotes/notes/add-placement-trait-29957d2c03edbfb9.yaml create mode 100644 releasenotes/notes/add-port-hardware-offload-type-1232c5ae3f62d7df.yaml create mode 100644 releasenotes/notes/add-port-numa-affinity-policy-b42a85dbe26560d2.yaml create mode 100644 releasenotes/notes/add-propagate_uplink_status-to-port-0152d476c65979e3.yaml create mode 100644 releasenotes/notes/add-server-console-078ed2696e5b04d9.yaml create mode 100644 releasenotes/notes/add-server-migrations-6e31183196f14deb.yaml create mode 100644 releasenotes/notes/add-service-0bcc16eb026eade3.yaml create mode 100644 releasenotes/notes/add-sg-rules-bulk-f36a3e2326d74867.yaml create mode 100644 releasenotes/notes/add-share-access-rules-to-shared-file-362bee34f7331186.yaml create mode 100644 releasenotes/notes/add-share-network-subnet-to-shared-file-b5de3ce6ca723209.yaml create mode 100644 releasenotes/notes/add-share-network-to-shared-file-c5c9a6b8ccf1d958.yaml create mode 100644 releasenotes/notes/add-share-snapshot-instance-to-shared-file-4d935f12d67bf59d.yaml create mode 100644 releasenotes/notes/add-share-snapshot-to-shared-file-82ecedbdbed2e3c5.yaml create mode 100644 releasenotes/notes/add-share_group-to-shared-file-8cee20d8aa2afbb7.yaml create mode 100644 releasenotes/notes/add-shared-file-syste-share_instance-fffaea2d3a77ba24.yaml create mode 100644 releasenotes/notes/add-shared-file-system-locks-support-4859ca93f93a1056.yaml create mode 100644 releasenotes/notes/add-shared-file-system-manage-unmanage-share-830e313f96e5fd2b.yaml create mode 100644 releasenotes/notes/add-shared-file-system-share-group-snapshot-c5099e6c8accf077.yaml create mode 100644 releasenotes/notes/add-shared-file-system-share-metadata-e0415bb71d8a0a48.yaml create mode 100644 releasenotes/notes/add-shared-file-system-share-resize-ddd650c2e32fed34.yaml create mode 100644 releasenotes/notes/add-shared-file-system-shares-2e1d44a1bb882d6d.yaml create mode 100644 releasenotes/notes/add-shared-file-system-shares-e9f356a318045607.yaml create mode 100644 releasenotes/notes/add-shared-file-systems-83a3767429fd5e8c.yaml create mode 100644 releasenotes/notes/add-shared-file-systems-export-location-a27c1741880c384b.yaml create mode 100644 releasenotes/notes/add-shelve_offload-427f6550fc55e622.yaml create mode 100644 releasenotes/notes/add-show-all-images-flag-352748b6c3d99f3f.yaml create mode 100644 releasenotes/notes/add-stack-events-b8674d7bb657e789.yaml create mode 100644 releasenotes/notes/add-stack-export-3ace746a8c80d766.yaml create mode 100644 releasenotes/notes/add-stack-suspend-and-resume-26d4fc5904291d5d.yaml create mode 100644 releasenotes/notes/add-storage-pool-to-shared-file-ad45da1b2510b412.yaml create mode 100644 releasenotes/notes/add-support-allowed-cidrs-loadbalancer-listener-809e523a8bd6a7d5.yaml create mode 100644 releasenotes/notes/add-support-availability_zone-loadbalancer-a18aa1708d7859e2.yaml create mode 100644 releasenotes/notes/add-support-for-setting-static-routes-b3ce6cac2c5e9e51.yaml create mode 100644 releasenotes/notes/add-system-role-assignment-693dd3e1da33a54d.yaml create mode 100644 releasenotes/notes/add-tls-container-refs-params-for-octavia-pools-76f295cd2daa7f53.yaml create mode 100644 releasenotes/notes/add-tls-version-support-for-octavia-7ecb372e6fb58101.yaml create mode 100644 releasenotes/notes/add-tls_enabled-parameter-for-octavia-pools-f0a23436d826b313.yaml create mode 100644 releasenotes/notes/add-unified-limit-5ac334a08e137a70.yaml create mode 100644 releasenotes/notes/add-user-group-assignment-9c419b6c6bfe392c.yaml create mode 100644 releasenotes/notes/add-user-message-to-shared-file-85d7bbccf8347c4f.yaml create mode 100644 releasenotes/notes/add-volume-attachment-support-b5f9a9e78ba88355.yaml create mode 100644 releasenotes/notes/add-volume-extend-support-86e5c8cff5d6874e.yaml create mode 100644 releasenotes/notes/add-volume-snapshot-manage-unmanage-support-fc0be2a3fb4427d1.yaml create mode 100644 releasenotes/notes/add-volume-transfer-support-28bf34a243d96e1b.yaml create mode 100644 releasenotes/notes/add-volume-type-update-b84f50b7fa3b061d.yaml create mode 100644 releasenotes/notes/add_description_create_user-0ddc9a0ef4da840d.yaml create mode 100644 releasenotes/notes/add_designate_recordsets_support-69af0a6b317073e7.yaml create mode 100644 releasenotes/notes/add_designate_zones_support-35fa9b8b09995b43.yaml create mode 100644 releasenotes/notes/add_heat_tag_support-135aa43ba1dce3bb.yaml create mode 100644 releasenotes/notes/add_host_aggregate_support-471623faf45ec3c3.yaml create mode 100644 releasenotes/notes/add_image_import_support-6cea2e7d7a781071.yaml create mode 100644 releasenotes/notes/add_influxdb_stats-665714d715302ad5.yaml create mode 100644 releasenotes/notes/add_magnum_baymodel_support-e35e5aab0b14ff75.yaml create mode 100644 releasenotes/notes/add_magnum_services_support-3d95f9dcc60b5573.yaml create mode 100644 releasenotes/notes/add_project_cleanup-39c3517b25a5372e.yaml create mode 100644 releasenotes/notes/add_server_group_support-dfa472e3dae7d34d.yaml create mode 100644 releasenotes/notes/add_support_port_binding_attrs-c70966724eb970f3.yaml create mode 100644 releasenotes/notes/add_update_server-8761059d6de7e68b.yaml create mode 100644 releasenotes/notes/add_update_service-28e590a7a7524053.yaml create mode 100644 releasenotes/notes/add_vendor_hook-e87b6afb7f215a30.yaml create mode 100644 releasenotes/notes/added-federation-support-3b65e531e57211f5.yaml create mode 100644 releasenotes/notes/added-senlin-support-1eb4e47c31258f66.yaml create mode 100644 releasenotes/notes/allocation-api-04f6b3b7a0ccc850.yaml create mode 100644 releasenotes/notes/allocation-update-910c36c1290e5121.yaml create mode 100644 releasenotes/notes/alternate-auth-context-3939f1492a0e1355.yaml create mode 100644 releasenotes/notes/always-detail-cluster-templates-3eb4b5744ba327ac.yaml create mode 100644 releasenotes/notes/auth-url-vexxhost-8d63cd17bde21320.yaml create mode 100644 releasenotes/notes/bail-on-failed-service-cf299c37d5647b08.yaml create mode 100644 releasenotes/notes/baremetal-configdrive-mkisofs-xorrisofs-075db4d7d80e5a13.yaml create mode 100644 releasenotes/notes/baremetal-details-09b27fba82111cfb.yaml create mode 100644 releasenotes/notes/baremetal-errors-5cc871e8df4c9d95.yaml create mode 100644 releasenotes/notes/baremetal-fields-1f6fbcd8bd1ea2aa.yaml create mode 100644 releasenotes/notes/baremetal-fields-624546fa533a8287.yaml create mode 100644 releasenotes/notes/baremetal-fields-convert-857b8804327f1e86.yaml create mode 100644 releasenotes/notes/baremetal-introspection-973351b3ee76309e.yaml create mode 100644 releasenotes/notes/baremetal-maintenance-5cb95c6d898d4d72.yaml create mode 100644 releasenotes/notes/baremetal-patch-feebd96b1b92f3b9.yaml create mode 100644 releasenotes/notes/baremetal-ports-cc0f56ae0d192aba.yaml create mode 100644 releasenotes/notes/baremetal-reservation-40327923092e9647.yaml create mode 100644 releasenotes/notes/baremetal-retired-fields-f56a4632ad4797d7.yaml create mode 100644 releasenotes/notes/baremetal-retries-804f553b4e22b3bf.yaml create mode 100644 releasenotes/notes/baremetal-retries-ff8aa8f73fb97415.yaml create mode 100644 releasenotes/notes/baremetal-traits-d1137318db33b8d1.yaml create mode 100644 releasenotes/notes/baremetal-update-80effb38aae8e02d.yaml create mode 100644 releasenotes/notes/baremetal-validate-ccce2a37d2a20d96.yaml create mode 100644 releasenotes/notes/baremetal-vif-122457118c722a9b.yaml create mode 100644 releasenotes/notes/baremetal-wait-e4571cdb150b188a.yaml create mode 100644 releasenotes/notes/basic-api-cache-4ad8cf2754b004d1.yaml create mode 100644 releasenotes/notes/block-storage-backup-5886e91fd6e423bf.yaml create mode 100644 releasenotes/notes/block-storage-init-return-95b465b4755f03ca.yaml create mode 100644 releasenotes/notes/block-storage-qs-0e3b69be2e709b65.yaml create mode 100644 releasenotes/notes/block-storage-v3-9798d584d088c048.yaml create mode 100644 releasenotes/notes/block_storage-type_encryption-121f8a222c822fb5.yaml create mode 100644 releasenotes/notes/boot-on-server-group-a80e51850db24b3d.yaml create mode 100644 releasenotes/notes/bug-2001080-de52ead3c5466792.yaml create mode 100644 releasenotes/notes/bug-2010898-430da335e4df0efe.yaml create mode 100644 releasenotes/notes/cache-auth-in-keyring-773dd5f682cd1610.yaml create mode 100644 releasenotes/notes/cache-in-use-volumes-c7fa8bb378106fe3.yaml create mode 100644 releasenotes/notes/catch-up-release-notes-e385fad34e9f3d6e.yaml create mode 100644 releasenotes/notes/change-attach-vol-return-value-4834a1f78392abb1.yaml create mode 100644 releasenotes/notes/cinder_volume_backups_support-6f7ceab440853833.yaml create mode 100644 releasenotes/notes/cinderv2-norm-fix-037189c60b43089f.yaml create mode 100644 releasenotes/notes/cleanup-objects-f99aeecf22ac13dd.yaml create mode 100644 releasenotes/notes/cloud-profile-status-e0d29b5e2f10e95c.yaml create mode 100644 releasenotes/notes/clustering-resource-deletion-bed869ba47c2aac1.yaml create mode 100644 releasenotes/notes/complete-aggregate-functions-45d5f2beeeac2b48.yaml create mode 100644 releasenotes/notes/compute-microversion-2-17-b05cb87580b8d56a.yaml create mode 100644 releasenotes/notes/compute-microversion-2-73-abae1d0c3740f76e.yaml create mode 100644 releasenotes/notes/compute-microversion-2-89-8c5187cc3bf6bd02.yaml create mode 100644 releasenotes/notes/compute-quota-set-e664412d089945d2.yaml create mode 100644 releasenotes/notes/compute-quotas-b07a0f24dfac8444.yaml create mode 100644 releasenotes/notes/compute-restore-server-020bf091acc9f8df.yaml create mode 100644 releasenotes/notes/compute-service-zone-2b25ec705b0156c4.yaml create mode 100644 releasenotes/notes/compute-usage-defaults-5f5b2936f17ff400.yaml create mode 100644 releasenotes/notes/compute-volume-attachment-proxy-method-rework-dc35fe9ca3af1c16.yaml create mode 100644 releasenotes/notes/conf-object-ctr-c0e1da0a67dad841.yaml create mode 100644 releasenotes/notes/config-aliases-0f6297eafd05c07c.yaml create mode 100644 releasenotes/notes/config-flavor-specs-ca712e17971482b6.yaml create mode 100644 releasenotes/notes/configdrive-f8ca9f94b2981db7.yaml create mode 100644 releasenotes/notes/container-search-b0f4253ce2deeda5.yaml create mode 100644 releasenotes/notes/create-object-data-870cb543543aa983.yaml create mode 100644 releasenotes/notes/create-object-directory-98e2cae175cc5082.yaml create mode 100644 releasenotes/notes/create-stack-fix-12dbb59a48ac7442.yaml create mode 100644 releasenotes/notes/create-subnet-by-subnetpool-eba1129c67ed4d96.yaml create mode 100644 releasenotes/notes/create_server_network_fix-c4a56b31d2850a4b.yaml create mode 100644 releasenotes/notes/create_service_norm-319a97433d68fa6a.yaml create mode 100644 releasenotes/notes/cron_triggers_proxy-51aa89e91bbb9798.yaml create mode 100644 releasenotes/notes/data-model-cf50d86982646370.yaml create mode 100644 releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml create mode 100644 releasenotes/notes/default-microversion-b2401727cb591002.yaml create mode 100644 releasenotes/notes/delete-autocreated-1839187b0aa35022.yaml create mode 100644 releasenotes/notes/delete-image-objects-9d4b4e0fff36a23f.yaml create mode 100644 releasenotes/notes/delete-obj-return-a3ecf0415b7a2989.yaml create mode 100644 releasenotes/notes/delete_project-399f9b3107014dde.yaml create mode 100644 releasenotes/notes/deprecate-remote_ip_prefix-metering-label-rules-843d5a962e4e428c.yaml create mode 100644 releasenotes/notes/deprecated-compute-image-proxy-apis-986263f6aa1b1b25.yaml create mode 100644 releasenotes/notes/deprecated-profile-762afdef0e8fc9e8.yaml create mode 100644 releasenotes/notes/disable-service-39df96ef8a817785.yaml create mode 100644 releasenotes/notes/dns-domain-parameter-d3acfc3287a9d632.yaml create mode 100644 releasenotes/notes/domain_operations_name_or_id-baba4cac5b67234d.yaml create mode 100644 releasenotes/notes/drop-Resource-allow_get-attribute-fec75b551fb79465.yaml create mode 100644 releasenotes/notes/drop-formatter-deserialize-30b19956fb79bb8d.yaml create mode 100644 releasenotes/notes/drop-python27-b824f9ce51cb1ab7.yaml create mode 100644 releasenotes/notes/drop-senlin-cloud-layer-c06d496acc70b014.yaml create mode 100644 releasenotes/notes/dropped-python-3.5-b154887cce87947c.yaml create mode 100644 releasenotes/notes/dual-stack-networks-8a81941c97d28deb.yaml create mode 100644 releasenotes/notes/endpoint-from-catalog-bad36cb0409a4e6a.yaml create mode 100644 releasenotes/notes/expose-client-side-rate-limit-ddb82df7cb92091c.yaml create mode 100644 releasenotes/notes/false-not-attribute-error-49484d0fdc61f75d.yaml create mode 100644 releasenotes/notes/feature-server-metadata-50caf18cec532160.yaml create mode 100644 releasenotes/notes/find_server-use-details-9a22e83ec6540c98.yaml create mode 100644 releasenotes/notes/fip_timeout-035c4bb3ff92fa1f.yaml create mode 100644 releasenotes/notes/firewall-resources-c7589d288dd57e35.yaml create mode 100644 releasenotes/notes/fix-compat-with-old-keystoneauth-66e11ee9d008b962.yaml create mode 100644 releasenotes/notes/fix-config-drive-a148b7589f7e1022.yaml create mode 100644 releasenotes/notes/fix-delete-ips-1d4eebf7bc4d4733.yaml create mode 100644 releasenotes/notes/fix-dns-return-c810d5e6736322f1.yaml create mode 100644 releasenotes/notes/fix-endpoint-override-ac41baeec9549ab3.yaml create mode 100644 releasenotes/notes/fix-floating-ip-private-matching-84e369eee380a185.yaml create mode 100644 releasenotes/notes/fix-for-microversion-70cd686b6d6e3fd0.yaml create mode 100644 releasenotes/notes/fix-image-hw_qemu_guest_agent-bf1147e52c84b5e8.yaml create mode 100644 releasenotes/notes/fix-image-task-ae79502dd5c7ecba.yaml create mode 100644 releasenotes/notes/fix-list-networks-a592725df64c306e.yaml create mode 100644 releasenotes/notes/fix-microversion-354dc70deb2b2f0b.yaml create mode 100644 releasenotes/notes/fix-missing-futures-a0617a1c1ce6e659.yaml create mode 100644 releasenotes/notes/fix-neutron-endpoint-mangling-a9dd89dd09bc71ec.yaml create mode 100644 releasenotes/notes/fix-os_auth_type-v3multifactor-049cf52573d9e00e.yaml create mode 100644 releasenotes/notes/fix-properties-key-conflict-2161ca1faaad6731.yaml create mode 100644 releasenotes/notes/fix-supplemental-fips-c9cd58aac12eb30e.yaml create mode 100644 releasenotes/notes/fix-task-timing-048afea680adc62e.yaml create mode 100644 releasenotes/notes/fix-update-domain-af47b066ac52eb7f.yaml create mode 100644 releasenotes/notes/fix-yaml-load-3e6bd852afe549b4.yaml create mode 100644 releasenotes/notes/fixed-magnum-type-7406f0a60525f858.yaml create mode 100644 releasenotes/notes/flavor-cloud-layer-0b4d130ac1c5e7c4.yaml create mode 100644 releasenotes/notes/flavor_fix-a53c6b326dc34a2c.yaml create mode 100644 releasenotes/notes/floating_ip_normalization-41e0edcdb0c98aee.yaml create mode 100644 releasenotes/notes/fnmatch-name-or-id-f658fe26f84086c8.yaml create mode 100644 releasenotes/notes/force_ipv4_no_ipv6_address-9842168b5d05d262.yaml create mode 100644 releasenotes/notes/futurist-b54b0f449d410997.yaml create mode 100644 releasenotes/notes/generate-form-signature-294ca46812f291d6.yaml create mode 100644 releasenotes/notes/get-limits-c383c512f8e01873.yaml create mode 100644 releasenotes/notes/get-object-raw-e58284e59c81c8ef.yaml create mode 100644 releasenotes/notes/get-server-by-id-none-3e8538800fa09d82.yaml create mode 100644 releasenotes/notes/get-usage-72d249ff790d1b8f.yaml create mode 100644 releasenotes/notes/get_compute_usage-01811dccd60dc92a.yaml create mode 100644 releasenotes/notes/get_object_api-968483adb016bce1.yaml create mode 100644 releasenotes/notes/glance-image-pagination-0b4dfef22b25852b.yaml create mode 100644 releasenotes/notes/glance-image-stores-2baa66e6743a2f2d.yaml create mode 100644 releasenotes/notes/global-request-id-d7c0736f43929165.yaml create mode 100644 releasenotes/notes/grant-revoke-assignments-231d3f9596a1ae75.yaml create mode 100644 releasenotes/notes/identity-auth-url-f3ae8ef22d2bcab6.yaml create mode 100644 releasenotes/notes/image-flavor-by-name-54865b00ebbf1004.yaml create mode 100644 releasenotes/notes/image-from-volume-9acf7379f5995b5b.yaml create mode 100644 releasenotes/notes/image-id-filter-key-b9b6b52139a27cbe.yaml create mode 100644 releasenotes/notes/image-import-proxy-params-f19d8b6166104ebe.yaml create mode 100644 releasenotes/notes/image-import-support-97052cdbc8ce449b.yaml create mode 100644 releasenotes/notes/image-proxy-layer-kwarg-only-arguments-94c9b2033d386160.yaml create mode 100644 releasenotes/notes/image-update-76bd3bf24c1c1380.yaml create mode 100644 releasenotes/notes/improve-metrics-5d7ce70ce4021d72.yaml create mode 100644 releasenotes/notes/infer-secgroup-source-58d840aaf1a1f485.yaml create mode 100644 releasenotes/notes/introduce-source-and-destination-ip-prefixes-into-metering-label-rules-e04b797adac5d0d0.yaml create mode 100644 releasenotes/notes/introspection-node-6a3b7d55839ef82c.yaml create mode 100644 releasenotes/notes/ironic-conductors-support-3bf27e8b2f0299ba.yaml create mode 100644 releasenotes/notes/ironic-deploy-steps-2c0f39d7d2a13289.yaml create mode 100644 releasenotes/notes/ironic-deploy-template-support-fa56005365ed6e4d.yaml create mode 100644 releasenotes/notes/ironic-introspection_rules_support-18b0488a76800122.yaml create mode 100644 releasenotes/notes/ironic-microversion-ba5b0f36f11196a6.yaml create mode 100644 releasenotes/notes/ironic-node-shard-35f2557c3dbfff1d.yaml create mode 100644 releasenotes/notes/ironic-volume_target-support-8130361804366787.yaml create mode 100644 releasenotes/notes/ksa-discovery-86a4ef00d85ea87f.yaml create mode 100644 releasenotes/notes/less-file-hashing-d2497337da5acbef.yaml create mode 100644 releasenotes/notes/list-all_projects-filter-27f1d471a7848507.yaml create mode 100644 releasenotes/notes/list-az-names-a38c277d1192471b.yaml create mode 100644 releasenotes/notes/list-network-resources-empty-list-6aa760c01e7d97d7.yaml create mode 100644 releasenotes/notes/list-role-assignments-keystone-v2-b127b12b4860f50c.yaml create mode 100644 releasenotes/notes/list-servers-all-projects-349e6dc665ba2e8d.yaml create mode 100644 releasenotes/notes/load-yaml-3177efca78e5c67a.yaml create mode 100644 releasenotes/notes/location-server-resource-af77fdab5d35d421.yaml create mode 100644 releasenotes/notes/log-request-ids-37507cb6eed9a7da.yaml create mode 100644 releasenotes/notes/machine-get-update-microversions-4b910e63cebd65e2.yaml create mode 100644 releasenotes/notes/magic-fixes-dca4ae4dac2441a8.yaml create mode 100644 releasenotes/notes/make-cloud-region-standalone-848a2c4b5f3ebc29.yaml create mode 100644 releasenotes/notes/make-rest-client-dd3d365632a26fa0.yaml create mode 100644 releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml create mode 100644 releasenotes/notes/make_object_metadata_easier.yaml-e9751723e002e06f.yaml create mode 100644 releasenotes/notes/merge-shade-os-client-config-29878734ad643e33.yaml create mode 100644 releasenotes/notes/meta-passthrough-d695bff4f9366b65.yaml create mode 100644 releasenotes/notes/metadata-key-name-bugfix-77612a825c5145d7.yaml create mode 100644 releasenotes/notes/min-max-legacy-version-301242466ddefa93.yaml create mode 100644 releasenotes/notes/mtu-settings-8ce8b54d096580a2.yaml create mode 100644 releasenotes/notes/multiple-updates-b48cc2f6db2e526d.yaml create mode 100644 releasenotes/notes/munch-sub-dict-e1619c71c26879cb.yaml create mode 100644 releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml create mode 100644 releasenotes/notes/nat-source-support-92aaf6b336d0b848.yaml create mode 100644 releasenotes/notes/net_provider-dd64b697476b7094.yaml create mode 100644 releasenotes/notes/network-data-bd94e4a499ba3e0d.yaml create mode 100644 releasenotes/notes/network-data-deb5772edc111428.yaml create mode 100644 releasenotes/notes/network-list-e6e9dafdd8446263.yaml create mode 100644 releasenotes/notes/network-qos-rule-filter-keys-324e3222510fd362.yaml create mode 100644 releasenotes/notes/network-quotas-b98cce9ffeffdbf4.yaml create mode 100644 releasenotes/notes/network-security-group-query-parameter-id-f6dda45b2c09dbaa.yaml create mode 100644 releasenotes/notes/network_add_bgp_resources-c182dc2873d6db18.yaml create mode 100644 releasenotes/notes/network_add_bgpvpn_resources-b3bd0b568c3c99db.yaml create mode 100644 releasenotes/notes/network_add_sfc_resources-8a52c0c8c1f8e932.yaml create mode 100644 releasenotes/notes/network_add_taas_resources-86a947265e11ce84.yaml create mode 100644 releasenotes/notes/neutron-discovery-54399116d5f810ee.yaml create mode 100644 releasenotes/notes/neutron_availability_zone_extension-675c2460ebb50a09.yaml create mode 100644 releasenotes/notes/new-floating-attributes-213cdf5681d337e1.yaml create mode 100644 releasenotes/notes/no-import-fallback-a09b5d5a11299933.yaml create mode 100644 releasenotes/notes/no-inspect-associated-563e272785bb6016.yaml create mode 100644 releasenotes/notes/no-more-troveclient-0a4739c21432ac63.yaml create mode 100644 releasenotes/notes/no-start-task-manager-56773f3ea5eb3a59.yaml create mode 100644 releasenotes/notes/node-boot-devices-2ab4991d75a2ab52.yaml create mode 100644 releasenotes/notes/node-consoles-63589f22da98a689.yaml create mode 100644 releasenotes/notes/node-create-027ea99193f344ef.yaml create mode 100644 releasenotes/notes/node-inject-nmi-53d12681026e0b6c.yaml create mode 100644 releasenotes/notes/node-owner-7f4b083ff9da8cce.yaml create mode 100644 releasenotes/notes/node-set-provision-state-3472cbd81c47458f.yaml create mode 100644 releasenotes/notes/norm_role_assignments-a13f41768e62d40c.yaml create mode 100644 releasenotes/notes/normalize-images-1331bea7bfffa36a.yaml create mode 100644 releasenotes/notes/normalize-machine-290d9f2a3b3a7ef0.yaml create mode 100644 releasenotes/notes/nova-flavor-to-rest-0a5757e35714a690.yaml create mode 100644 releasenotes/notes/nova-old-microversion-5e4b8e239ba44096.yaml create mode 100644 releasenotes/notes/object-checksum-generation-ea1c1e47d2290054.yaml create mode 100644 releasenotes/notes/object-chunked-data-ee619b7d4759b8d2.yaml create mode 100644 releasenotes/notes/object-search-a5f5ec4b2df3e045.yaml create mode 100644 releasenotes/notes/old-placement-4b3c34abb8fe7b81.yaml create mode 100644 releasenotes/notes/optimize-server-console-1d27c107b9a1cdc3.yaml create mode 100644 releasenotes/notes/option-precedence-1fecab21fdfb2c33.yaml create mode 100644 releasenotes/notes/port-device-profile-af91e25c45321691.yaml create mode 100644 releasenotes/notes/power-wait-751083852f958cb4.yaml create mode 100644 releasenotes/notes/project-cleanup-exclude-option-65cba962eaa5b61a.yaml create mode 100644 releasenotes/notes/project-cleanup-swift-f67615e5c3ab8fd8.yaml create mode 100644 releasenotes/notes/provision-state-negotiation-0155b4d0e932054c.yaml create mode 100644 releasenotes/notes/python-3.5-629817cec092d528.yaml create mode 100644 releasenotes/notes/qos-min-pps-rule-52df1b150b1d3f68.yaml create mode 100644 releasenotes/notes/qos-port-network-policy-cab43faa0f8bc036.yaml create mode 100644 releasenotes/notes/r1-cab94ae7d749a1ec.yaml create mode 100644 releasenotes/notes/r1-d4efe289ebf0cbcd.yaml create mode 100644 releasenotes/notes/rackspace-block-storage-v2-fe0dd69b9e037599.yaml create mode 100644 releasenotes/notes/register-machine-72ac3e65a1ed55b1.yaml create mode 100644 releasenotes/notes/remote-address-group-id-6291816888cb3de7.yaml create mode 100644 releasenotes/notes/remote-profile-100218d08b25019d.yaml create mode 100644 releasenotes/notes/remove-auto-container-527f1807605b42c0.yaml create mode 100644 releasenotes/notes/remove-block-store-details-classes-158ab1f46655320a.yaml create mode 100644 releasenotes/notes/remove-cloud-caching-layer-2b0384870a45e8a3.yaml create mode 100644 releasenotes/notes/remove-magnumclient-875b3e513f98f57c.yaml create mode 100644 releasenotes/notes/remove-metric-fe5ddfd52b43c852.yaml create mode 100644 releasenotes/notes/remove-novaclient-3f8d4db20d5f9582.yaml create mode 100644 releasenotes/notes/remove-serverdetails-resource-f66cb278b224627d.yaml create mode 100644 releasenotes/notes/removed-deprecated-things-8700fe3592c3bf18.yaml create mode 100644 releasenotes/notes/removed-glanceclient-105c7fba9481b9be.yaml create mode 100644 releasenotes/notes/removed-meter-6f6651b6e452e000.yaml create mode 100644 releasenotes/notes/removed-profile-437f3038025b0fb3.yaml create mode 100644 releasenotes/notes/removed-profile-b033d870937868a1.yaml create mode 100644 releasenotes/notes/removed-swiftclient-aff22bfaeee5f59f.yaml create mode 100644 releasenotes/notes/rename-base-proxy-b9fcb22d373864a2.yaml create mode 100644 releasenotes/notes/rename-resource-methods-5f2a716b08156765.yaml create mode 100644 releasenotes/notes/rename-service-force-down-6f462d62959a5315.yaml create mode 100644 releasenotes/notes/renamed-bare-metal-b1cdbc52af14e042.yaml create mode 100644 releasenotes/notes/renamed-block-store-bc5e0a7315bfeb67.yaml create mode 100644 releasenotes/notes/renamed-cluster-743da6d321fffcba.yaml create mode 100644 releasenotes/notes/renamed-telemetry-c08ae3e72afca24f.yaml create mode 100644 releasenotes/notes/replace-appdirs-with-platformdirs-d3f5bcbe726b7829.yaml create mode 100644 releasenotes/notes/request-stats-9d70480bebbdb4d6.yaml create mode 100644 releasenotes/notes/resource-find-filter-by-name-e647e5c507ff4b6c.yaml create mode 100644 releasenotes/notes/resource2-migration-835590b300bef621.yaml create mode 100644 releasenotes/notes/retrieve-detailed-view-for-find-proxy-methods-947a3280732c448a.yaml create mode 100644 releasenotes/notes/revert-futurist-34acc42fd3f0e7f3.yaml create mode 100644 releasenotes/notes/rework-compute-hypervisor-a62f275a0fd1f074.yaml create mode 100644 releasenotes/notes/router-extraroute-atomic-1a0c84c3fd90ceb1.yaml create mode 100644 releasenotes/notes/router_ext_gw-b86582317bca8b39.yaml create mode 100644 releasenotes/notes/sdk-helper-41f8d815cfbcfb00.yaml create mode 100644 releasenotes/notes/search_resource-b9c2f772e01d3b2c.yaml create mode 100644 releasenotes/notes/server-actions-microversion-support-f14b293d9c3d3d5e.yaml create mode 100644 releasenotes/notes/server-create-error-id-66c698c7e633fb8b.yaml create mode 100644 releasenotes/notes/server-security-groups-840ab28c04f359de.yaml create mode 100644 releasenotes/notes/service_enabled_flag-c917b305d3f2e8fd.yaml create mode 100644 releasenotes/notes/session-client-b581a6e5d18c8f04.yaml create mode 100644 releasenotes/notes/set-bootable-volume-454a7a41e7e77d08.yaml create mode 100644 releasenotes/notes/shade-helper-568f8cb372eef6d9.yaml create mode 100644 releasenotes/notes/shade-into-connection-81191fb3d0ddaf6e.yaml create mode 100644 releasenotes/notes/shade-location-b0d2e5cae743b738.yaml create mode 100644 releasenotes/notes/snap-updated_at-a46711b6160e3a26.yaml create mode 100644 releasenotes/notes/stack-update-5886e91fd6e423bf.yaml create mode 100644 releasenotes/notes/started-using-reno-242e2b0cd27f9480.yaml create mode 100644 releasenotes/notes/stateful-security-group-f32a78b9bbb49874.yaml create mode 100644 releasenotes/notes/stop-using-tenant-id-42eb35139ba9eeff.yaml create mode 100644 releasenotes/notes/story-2010784-21d23043155497f5.yaml create mode 100644 releasenotes/notes/stream-object-6ecd43511dca726b.yaml create mode 100644 releasenotes/notes/stream-to-file-91f48d6dcea399c6.yaml create mode 100644 releasenotes/notes/strict-mode-d493abc0c3e87945.yaml create mode 100644 releasenotes/notes/strict-proxies-4a315f68f387ee89.yaml create mode 100644 releasenotes/notes/support_stdin_image_upload-305c04fb2daeb32c.yaml create mode 100644 releasenotes/notes/swift-set-metadata-c18c60e440f9e4a7.yaml create mode 100644 releasenotes/notes/swift-upload-lock-d18f3d42b3a0719a.yaml create mode 100644 releasenotes/notes/switch-coe-to-proxy-c18789ed27cc1d95.yaml create mode 100644 releasenotes/notes/switch-nova-to-created_at-45b7b50af6a2d59e.yaml create mode 100644 releasenotes/notes/switch-to-warnings-333955d19afc99ca.yaml create mode 100644 releasenotes/notes/task-manager-parameter-c6606653532248f2.yaml create mode 100644 releasenotes/notes/toggle-port-security-f5bc606e82141feb.yaml create mode 100644 releasenotes/notes/unprocessed-2d75133911945869.yaml create mode 100644 releasenotes/notes/unshelve-to-specific-host-84666d440dce4a73.yaml create mode 100644 releasenotes/notes/update-role-property-b16e902e913c7b25.yaml create mode 100644 releasenotes/notes/update_endpoint-f87c1f42d0c0d1ef.yaml create mode 100644 releasenotes/notes/update_workflow-ecdef6056ef2687b.yaml create mode 100644 releasenotes/notes/use-interface-ip-c5cb3e7c91150096.yaml create mode 100644 releasenotes/notes/use-proxy-layer-dfc3764d52bc1f2a.yaml create mode 100644 releasenotes/notes/v4-fixed-ip-325740fdae85ffa9.yaml create mode 100644 releasenotes/notes/validate-machine-dcf528b8f587e3f0.yaml create mode 100644 releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml create mode 100644 releasenotes/notes/vendor-add-limestonenetworks-99b2ffab9fc23b08.yaml create mode 100644 releasenotes/notes/vendor-update-betacloud-37dac22d8d91a3c5.yaml create mode 100644 releasenotes/notes/vendor-updates-f11184ba56bb27cf.yaml create mode 100644 releasenotes/notes/version-command-70c37dd7f880e9ae.yaml create mode 100644 releasenotes/notes/version-discovery-a501c4e9e9869f77.yaml create mode 100644 releasenotes/notes/vol-updated_at-274c3a2bb94c8939.yaml create mode 100644 releasenotes/notes/volume-quotas-5b674ee8c1f71eb6.yaml create mode 100644 releasenotes/notes/volume-types-a07a14ae668e7dd2.yaml create mode 100644 releasenotes/notes/volume-update-876e6540c8471440.yaml create mode 100644 releasenotes/notes/volume_connector-api-f001e6f5fc4d1688.yaml create mode 100644 releasenotes/notes/wait-on-image-snapshot-27cd2eacab2fabd8.yaml create mode 100644 releasenotes/notes/wait-provision-state-no-fail-efa74dd39f687df8.yaml create mode 100644 releasenotes/notes/wait_for_server-8dc8446b7c673d36.yaml create mode 100644 releasenotes/notes/wait_for_status_delete_callback_param-68d30161e23340bb.yaml create mode 100644 releasenotes/notes/wire-in-retries-10898f7bc81e2269.yaml create mode 100644 releasenotes/notes/workaround-transitive-deps-1e7a214f3256b77e.yaml create mode 100644 releasenotes/notes/xenapi-use-agent-ecc33e520da81ffa.yaml create mode 100644 releasenotes/source/2023.1.rst create mode 100644 releasenotes/source/2023.2.rst create mode 100644 releasenotes/source/_static/.placeholder create mode 100644 releasenotes/source/_templates/.placeholder create mode 100644 releasenotes/source/conf.py create mode 100644 releasenotes/source/index.rst create mode 100644 releasenotes/source/ocata.rst create mode 100644 releasenotes/source/pike.rst create mode 100644 releasenotes/source/queens.rst create mode 100644 releasenotes/source/rocky.rst create mode 100644 releasenotes/source/stein.rst create mode 100644 releasenotes/source/train.rst create mode 100644 releasenotes/source/unreleased.rst create mode 100644 releasenotes/source/ussuri.rst create mode 100644 releasenotes/source/victoria.rst create mode 100644 releasenotes/source/wallaby.rst create mode 100644 releasenotes/source/xena.rst create mode 100644 releasenotes/source/yoga.rst create mode 100644 releasenotes/source/zed.rst create mode 100644 requirements.txt create mode 100644 roles/deploy-clouds-config/README.rst create mode 100644 roles/deploy-clouds-config/defaults/main.yaml create mode 100644 roles/deploy-clouds-config/tasks/main.yaml create mode 100644 roles/deploy-clouds-config/templates/clouds.yaml.j2 create mode 100644 setup.cfg create mode 100644 setup.py create mode 100644 test-requirements.txt create mode 100644 tools/keystone_version.py create mode 100644 tools/nova_version.py create mode 100644 tools/print-services.py create mode 100644 tox.ini create mode 100644 zuul.d/acceptance-jobs.yaml create mode 100644 zuul.d/functional-jobs.yaml create mode 100644 zuul.d/metal-jobs.yaml create mode 100644 zuul.d/project.yaml diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst new file mode 100644 index 0000000..790776c --- /dev/null +++ b/CONTRIBUTING.rst @@ -0,0 +1,45 @@ +.. _contributing: + +============================ +Contributing to openstacksdk +============================ + +If you're interested in contributing to the openstacksdk project, +the following will help get you started. + +Contributor License Agreement +----------------------------- + +.. index:: + single: license; agreement + +In order to contribute to the openstacksdk project, you need to have +signed OpenStack's contributor's agreement. + +Please read `DeveloperWorkflow`_ before sending your first patch for review. +Pull requests submitted through GitHub will be ignored. + +.. seealso:: + + * https://wiki.openstack.org/wiki/How_To_Contribute + * https://wiki.openstack.org/wiki/CLA + +.. _DeveloperWorkflow: https://docs.openstack.org/infra/manual/developers.html#development-workflow + +Project Hosting Details +----------------------- + +Project Documentation + https://docs.openstack.org/openstacksdk/latest/ + +Bug tracker + https://bugs.launchpad.net/openstacksdk + +Mailing list (prefix subjects with ``[sdk]`` for faster responses) + https://lists.openstack.org/mailman3/lists/openstack-discuss.lists.openstack.org/ + +Code Hosting + https://opendev.org/openstack/openstacksdk + +Code Review + https://review.opendev.org/#/q/status:open+project:openstack/openstacksdk,n,z diff --git a/HACKING.rst b/HACKING.rst new file mode 100644 index 0000000..cf66c36 --- /dev/null +++ b/HACKING.rst @@ -0,0 +1,63 @@ +openstacksdk Style Commandments +=============================== + +Read the OpenStack Style Commandments +https://docs.openstack.org/hacking/latest/ + +Indentation +----------- + +PEP-8 allows for 'visual' indentation. **Do not use it**. +Visual indentation looks like this: + +.. code-block:: python + + return_value = self.some_method(arg1, arg1, + arg3, arg4) + +Visual indentation makes refactoring the code base unnecessarily hard. + +Instead of visual indentation, use this: + +.. code-block:: python + + return_value = self.some_method( + arg1, arg1, arg3, arg4) + +That way, if some_method ever needs to be renamed, the only line that needs +to be touched is the line with some_method. + +Additionally, if you need to line break at the top of a block, please indent +the continuation line an additional 4 spaces, like this: + +.. code-block:: python + + for val in self.some_method( + arg1, arg1, arg3, arg4): + self.do_something_awesome() + +Neither of these are 'mandated' by PEP-8. However, they are prevailing styles +within this code base. + +Unit Tests +---------- + +Unit tests should be virtually instant. If a unit test takes more than 1 second +to run, it is a bad unit test. Honestly, 1 second is too slow. + +All unit test classes should subclass `openstack.tests.unit.base.TestCase`. The +base TestCase class takes care of properly creating `Connection` objects +in a way that protects against local environment. + +Test cases should use requests-mock to mock out HTTP interactions rather than +using mock to mock out object access. + +Don't Use setUpClass +-------------------- + +setUpClass looks like it runs once for the class. In parallel test execution +environments though, it runs once per execution context. This makes reasoning +about when it is going to actually run and what is going to happen extremely +difficult and can produce hard to debug test issues. + +Don't ever use it. It makes baby pandas cry. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..67db858 --- /dev/null +++ b/LICENSE @@ -0,0 +1,175 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..90f8a7a --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,6 @@ +include AUTHORS +include ChangeLog +exclude .gitignore +exclude .gitreview + +global-exclude *.pyc \ No newline at end of file diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..a3a0625 --- /dev/null +++ b/README.rst @@ -0,0 +1,313 @@ +============ +openstacksdk +============ + +openstacksdk is a client library for building applications to work +with OpenStack clouds. The project aims to provide a consistent and +complete set of interactions with OpenStack's many services, along with +complete documentation, examples, and tools. + +It also contains an abstraction interface layer. Clouds can do many things, but +there are probably only about 10 of them that most people care about with any +regularity. If you want to do complicated things, the per-service oriented +portions of the SDK are for you. However, if what you want is to be able to +write an application that talks to any OpenStack cloud regardless of +configuration, then the Cloud Abstraction layer is for you. + +More information about the history of openstacksdk can be found at +https://docs.openstack.org/openstacksdk/latest/contributor/history.html + +Getting started +--------------- + +openstacksdk aims to talk to any OpenStack cloud. To do this, it requires a +configuration file. openstacksdk favours ``clouds.yaml`` files, but can also +use environment variables. The ``clouds.yaml`` file should be provided by your +cloud provider or deployment tooling. An example: + +.. code-block:: yaml + + clouds: + mordred: + region_name: Dallas + auth: + username: 'mordred' + password: XXXXXXX + project_name: 'demo' + auth_url: 'https://identity.example.com' + +openstacksdk will look for ``clouds.yaml`` files in the following locations: + +* ``.`` (the current directory) +* ``$HOME/.config/openstack`` +* ``/etc/openstack`` + +openstacksdk consists of three layers. Most users will make use of the *proxy* +layer. Using the above ``clouds.yaml``, consider listing servers: + +.. code-block:: python + + import openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + # Initialize connection + conn = openstack.connect(cloud='mordred') + + # List the servers + for server in conn.compute.servers(): + print(server.to_dict()) + +openstacksdk also contains a higher-level *cloud* layer based on logical +operations: + +.. code-block:: python + + import openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + # Initialize connection + conn = openstack.connect(cloud='mordred') + + # List the servers + for server in conn.list_servers(): + print(server.to_dict()) + +The benefit of this layer is mostly seen in more complicated operations that +take multiple steps and where the steps vary across providers. For example: + +.. code-block:: python + + import openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + # Initialize connection + conn = openstack.connect(cloud='mordred') + + # Upload an image to the cloud + image = conn.create_image( + 'ubuntu-trusty', filename='ubuntu-trusty.qcow2', wait=True) + + # Find a flavor with at least 512M of RAM + flavor = conn.get_flavor_by_ram(512) + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public IP address for it. + conn.create_server( + 'my-server', image=image, flavor=flavor, wait=True, auto_ip=True) + +Finally, there is the low-level *resource* layer. This provides support for the +basic CRUD operations supported by REST APIs and is the base building block for +the other layers. You typically will not need to use this directly: + +.. code-block:: python + + import openstack + import openstack.config.loader + import openstack.compute.v2.server + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + # Initialize connection + conn = openstack.connect(cloud='mordred') + + # List the servers + for server in openstack.compute.v2.server.Server.list(session=conn.compute): + print(server.to_dict()) + +.. _openstack.config: + +Configuration +------------- + +openstacksdk uses the ``openstack.config`` module to parse configuration. +``openstack.config`` will find cloud configuration for as few as one cloud and +as many as you want to put in a config file. It will read environment variables +and config files, and it also contains some vendor specific default values so +that you don't have to know extra info to use OpenStack + +* If you have a config file, you will get the clouds listed in it +* If you have environment variables, you will get a cloud named `envvars` +* If you have neither, you will get a cloud named `defaults` with base defaults + +You can view the configuration identified by openstacksdk in your current +environment by running ``openstack.config.loader``. For example: + +.. code-block:: bash + + $ python -m openstack.config.loader + +More information at https://docs.openstack.org/openstacksdk/latest/user/config/configuration.html + +Supported services +------------------ + +The following services are currently supported. A full list of all available +OpenStack service can be found in the `Project Navigator`__. + +.. __: https://www.openstack.org/software/project-navigator/openstack-components#openstack-services + +.. note:: + + Support here does not guarantee full-support for all APIs. It simply means + some aspect of the project is supported. + +.. list-table:: Supported services + :widths: 15 25 10 40 + :header-rows: 1 + + * - Service + - Description + - Cloud Layer + - Proxy & Resource Layer + + * - **Compute** + - + - + - + + * - Nova + - Compute + - ✔ + - ✔ (``openstack.compute``) + + * - **Hardware Lifecycle** + - + - + - + + * - Ironic + - Bare metal provisioning + - ✔ + - ✔ (``openstack.baremetal``, ``openstack.baremetal_introspection``) + + * - Cyborg + - Lifecycle management of accelerators + - ✔ + - ✔ (``openstack.accelerator``) + + * - **Storage** + - + - + - + + * - Cinder + - Block storage + - ✔ + - ✔ (``openstack.block_storage``) + + * - Swift + - Object store + - ✔ + - ✔ (``openstack.object_store``) + + * - Cinder + - Shared filesystems + - ✔ + - ✔ (``openstack.shared_file_system``) + + * - **Networking** + - + - + - + + * - Neutron + - Networking + - ✔ + - ✔ (``openstack.network``) + + * - Octavia + - Load balancing + - ✔ + - ✔ (``openstack.load_balancer``) + + * - Designate + - DNS + - ✔ + - ✔ (``openstack.dns``) + + * - **Shared services** + - + - + - + + * - Keystone + - Identity + - ✔ + - ✔ (``openstack.identity``) + + * - Placement + - Placement + - ✔ + - ✔ (``openstack.placement``) + + * - Glance + - Image storage + - ✔ + - ✔ (``openstack.image``) + + * - Barbican + - Key management + - ✔ + - ✔ (``openstack.key_manager``) + + * - **Workload provisioning** + - + - + - + + * - Magnum + - Container orchestration engine provisioning + - ✔ + - ✔ (``openstack.container_infrastructure_management``) + + * - **Orchestration** + - + - + - + + * - Heat + - Orchestration + - ✔ + - ✔ (``openstack.orchestration``) + + * - Senlin + - Clustering + - ✔ + - ✔ (``openstack.clustering``) + + * - Mistral + - Workflow + - ✔ + - ✔ (``openstack.workflow``) + + * - Zaqar + - Messaging + - ✔ + - ✔ (``openstack.message``) + + * - **Application lifecycle** + - + - + - + + * - Masakari + - Instances high availability service + - ✔ + - ✔ (``openstack.instance_ha``) + +Links +----- + +* `Issue Tracker <https://bugs.launchpad.net/openstacksdk>`_ +* `Code Review <https://review.opendev.org/#/q/status:open+project:openstack/openstacksdk,n,z>`_ +* `Documentation <https://docs.openstack.org/openstacksdk/latest/>`_ +* `PyPI <https://pypi.org/project/openstacksdk/>`_ +* `Mailing list <https://lists.openstack.org/mailman3/lists/openstack-discuss.lists.openstack.org/>`_ +* `Release Notes <https://docs.openstack.org/releasenotes/openstacksdk>`_ diff --git a/SHADE-MERGE-TODO.rst b/SHADE-MERGE-TODO.rst new file mode 100644 index 0000000..e34d878 --- /dev/null +++ b/SHADE-MERGE-TODO.rst @@ -0,0 +1,137 @@ +Tasks Needed for rationalizing shade and openstacksdk +===================================================== + +A large portion of the important things have already been done and landed +already. For reference, those are: + +* shade and os-client-config library content have been merged into the tree. +* Use official service-type names from Service Types Authority via + os-service-types to refer to services and proxies. +* Automatically also add properties to the connection for every known alias + for each service-type. +* Made openstack.proxy.Proxy a subclass of keystoneauth1.adapter.Adapter. + Removed local logic that duplicates keystoneauth logic. This means every + proxy also has direct REST primitives available. For example: + + .. code-block:: python + + connection = connection.Connection() + servers = connection.compute.servers() + server_response = connection.compute.get('/servers') + +* Removed the Profile object in favor of openstack.config. +* Removed the Session object in favor of using keystoneauth. +* Plumbed Proxy use of Adapter through the Adapter subclass from shade that + uses the TaskManager to run REST calls. +* Finish migrating to Resource2 and Proxy2, rename them to Resource and Proxy. +* Merge OpenStackCloud into Connection. This should result + in being able to use the connection interact with the cloud using all three + interfaces. For instance: + + .. code-block:: python + + conn = connection.Connection() + servers = conn.list_servers() # High-level resource interface from shade + servers = conn.compute.servers() # SDK Service/Object Interface + response = conn.compute.get('/servers') # REST passthrough +* Removed ServiceFilter and the various Service objects in favor of discovery. + +Next steps +========== + +* Maybe rename self.session and session parameter in all usage in proxy and + resource to self.adapter. They are Adapters not Sessions, but that may not + mean anything to people. +* Migrate unit tests to requests-mock instead of mocking python calls to + session. +* Replace _prepare_request with requests.Session.prepare_request. + +shade integration +----------------- + +* Invent some terminology that is clear and makes sense to distinguish between + the object interface that came originally from openstacksdk and the + interface that came from shade. +* Shift the shade interface methods to use the Object Interface for their + operations. It's possible there may be cases where the REST layer needs to + be used instead, but we should try to sort those out. +* Investigate options and then make a plan as to whether shade methods should + return SDK objects or return dicts/munches as they do today. Should we make + Resource objects extend dict/munch so they can be used like the shade ones + today? Or should we just have the external shade shim library get objects + from the high-level SDK 'shade' interface and call to_dict() on them all? +* Add support for shade expressing normalization model/contract into Resource, + or for just leveraging what's in Resource for shade-layer normalization. +* Make a plan for normalization supporting shade users continuing + to get shade normalized resource Munch objects from shade API calls, sdk + proxy/resource users getting SDK objects, and both of them being able to opt + in to "strict" normalization at Connection constructor time. Perhaps making + Resource subclass Munch would allow mixed use? Needs investigation. +* Investigate auto-generating the bulk of shade's API based on introspection of + SDK objects, leaving only the code with extra special logic in the shade + layer. + +Service Proxies +--------------- + +These are all things to think about. + +* Authenticate at Connection() creation time? Having done that, use the + catalog in the token to determine which service proxies to add to the + Connection object. +* Filter the above service list from the token by has_service() from + openstack.config. +* Add a has_service method to Connection which will BASICALLY just be + hasattr(self, 'service') - but will look nicer. +* Consider adding magic to Connection for every service that a given cloud + DOESN'T have that will throw an exception on any attribute access that is + "cloud doesn't have service blah" rather than simply Attribute Not Found. + The SDK has a python api regardless of the services remotely, it would be + nice if trimming the existing attribute list wouldn't make it impossible for + someone to validate their code correctness. It's also possible that instead + of not having services, we always mount proxy objects for every service, but + we mount a "NotFound" proxy for each service that isn't there. +* Since openstacksdk uses version discovery now, there is always a good path + to "the" version of a given service. However, a cloud may have more than one. + Attach the discovered service proxy to connection as today under the service + type name. Add a property to each service proxy for each version the SDK + knows about. For instance: + + .. code-block:: python + + connection = openstack.Connection() + connection.volume # openstack.volume.v3._proxy + connection.volume.v2 # openstack.volume.v2._proxy + connection.volume.v3 # openstack.volume.v3._proxy + + Those versioned proxies should be done as Adapters with min and max version + set explicitly. This should allow a common pattern for people to write code + that just wants to use the discovered or configured service, or who want to + attempt to use a specific version of the API if they know what they're doing + and at the very least wind up with a properly configured Adapter they can + make rest calls on. Because: + + .. code-block:: python + + connection = openstack.Connection() + connection.dns.v2.get('/zones') + + should always work on an OpenStack cloud with designate even if the SDK + authors don't know anything about Designate and haven't added Resource or + Proxy explicitly for it. +* Decide what todo about non-OpenStack services. Do we add base Proxy + properties to Connection for every service we find in the catalog regardless + of official/non-official? If so, do we let someone pass a dict of + service-type, Proxy to connection that would let the provide a local service + we don't know about? If we do that- we should disallow passing in overrides + for services we DO know about to discourage people writing local tools that + have different Compute behavior, for instance. + +Microversions +------------- + +* keystoneauth.adapter.Adapter knows how to send microversion headers, and + get_endpoint_data knows how to fetch supported ranges. As microversion + support is added to calls, it needs to be on a per-request basis. This + has implications to both Resource and Proxy, as cloud payloads for data + mapping can be different on a per-microversion basis. diff --git a/babel.cfg b/babel.cfg new file mode 100644 index 0000000..efceab8 --- /dev/null +++ b/babel.cfg @@ -0,0 +1 @@ +[python: **.py] diff --git a/bindep.txt b/bindep.txt new file mode 100644 index 0000000..a74f386 --- /dev/null +++ b/bindep.txt @@ -0,0 +1,8 @@ +# This is a cross-platform list tracking distribution packages needed by tests; +# see http://docs.openstack.org/infra/bindep/ for additional information. + +build-essential [platform:dpkg] +python3-dev [platform:dpkg] +libffi-dev [platform:dpkg] +libffi-devel [platform:rpm] +openssl-devel [platform:rpm] diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100644 index 0000000..d1a53c1 --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,54 @@ +# Install and configure **openstacksdk** library in devstack +# +# To enable openstacksdk in devstack add an entry to local.conf that looks like +# +# [[local|localrc]] +# enable_plugin openstacksdk https://opendev.org/openstack/openstacksdk + +function preinstall_openstacksdk { + : +} + +function install_openstacksdk { + if use_library_from_git "openstacksdk"; then + # don't clone, it'll be done by the plugin install + setup_dev_lib "openstacksdk" + else + pip_install "openstacksdk" + fi +} + +function configure_openstacksdk { + : +} + +function initialize_openstacksdk { + : +} + +function unstack_openstacksdk { + : +} + +function clean_openstacksdk { + : +} + +# This is the main for plugin.sh +if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then + preinstall_openstacksdk +elif [[ "$1" == "stack" && "$2" == "install" ]]; then + install_openstacksdk +elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + configure_openstacksdk +elif [[ "$1" == "stack" && "$2" == "extra" ]]; then + initialize_openstacksdk +fi + +if [[ "$1" == "unstack" ]]; then + unstack_openstacksdk +fi + +if [[ "$1" == "clean" ]]; then + clean_openstacksdk +fi diff --git a/doc/requirements.txt b/doc/requirements.txt new file mode 100644 index 0000000..925ca4d --- /dev/null +++ b/doc/requirements.txt @@ -0,0 +1,5 @@ +docutils>=0.11 # OSI-Approved Open Source, Public Domain +openstackdocstheme>=2.2.1 # Apache-2.0 +reno>=3.1.0 # Apache-2.0 +sphinx>=2.0.0,!=2.1.0 # BSD +sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100644 index 0000000..b41ba20 --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,98 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +import warnings + +sys.path.insert(0, os.path.abspath('../..')) +sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ---------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = [ + 'sphinx.ext.autodoc', + 'openstackdocstheme', + 'sphinxcontrib.rsvgconverter', +] + +# openstackdocstheme options +openstackdocs_repo_name = 'openstack/openstacksdk' +openstackdocs_pdf_link = True +openstackdocs_use_storyboard = False +html_theme = 'openstackdocs' + +# autodoc generation is a bit aggressive and a nuisance when doing heavy +# text edit cycles. +# execute "export SPHINX_DEBUG=1" in your terminal to disable + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +copyright = '2017, Various members of the OpenStack Foundation' + +# If true, '()' will be appended to :func: etc. cross-reference text. +add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +add_module_names = True + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'native' + +autodoc_member_order = 'bysource' + +# Include both the class and __init__ docstrings when describing the class +autoclass_content = 'both' + +# Don't document type hints as they're too noisy +autodoc_typehints = 'none' + +# Locations to exclude when looking for source files. +exclude_patterns = [] + +# -- Options for HTML output ---------------------------------------------- + +# Don't let openstackdocstheme insert TOCs automatically. +theme_include_auto_toc = False + +# -- Options for LaTeX output --------------------------------------------- + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass +# [howto/manual]). +latex_documents = [ + ( + 'index', + 'doc-openstacksdk.tex', + 'OpenStackSDK Documentation', + 'OpenStack Foundation', + 'manual', + ), +] + +# Allow deeper levels of nesting for \begin...\end stanzas +latex_elements = {'maxlistdepth': 10} + +# Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664 +latex_use_xindy = False diff --git a/doc/source/contributor/clouds.yaml b/doc/source/contributor/clouds.yaml new file mode 100644 index 0000000..2c141c5 --- /dev/null +++ b/doc/source/contributor/clouds.yaml @@ -0,0 +1,37 @@ +clouds: + devstack: + auth: + auth_url: http://xxx.xxx.xxx.xxx/identity + password: password + project_domain_id: default + project_name: demo + user_domain_id: default + username: demo + identity_api_version: '3' + region_name: RegionOne + volume_api_version: '3' + devstack-admin: + auth: + auth_url: http://xxx.xxx.xxx.xxx/identity + password: password + project_domain_id: default + project_name: admin + user_domain_id: default + username: admin + identity_api_version: '3' + region_name: RegionOne + volume_api_version: '3' + devstack-alt: + auth: + auth_url: http://xxx.xxx.xxx.xxx/identity + password: password + project_domain_id: default + project_name: alt_demo + user_domain_id: default + username: alt_demo + identity_api_version: '3' + region_name: RegionOne + volume_api_version: '3' +example: + image_name: cirros-0.5.2-x86_64-disk + flavor_name: m1.small diff --git a/doc/source/contributor/coding.rst b/doc/source/contributor/coding.rst new file mode 100644 index 0000000..e1640e4 --- /dev/null +++ b/doc/source/contributor/coding.rst @@ -0,0 +1,104 @@ +OpenStack SDK Developer Coding Standards +======================================== + +In the beginning, there were no guidelines. And it was good. But that +didn't last long. As more and more people added more and more code, +we realized that we needed a set of coding standards to make sure that +the *openstacksdk* API at least *attempted* to display some form of +consistency. + +Thus, these coding standards/guidelines were developed. Note that not +all of *openstacksdk* adheres to these standards just yet. Some older code has +not been updated because we need to maintain backward compatibility. +Some of it just hasn't been changed yet. But be clear, all new code +*must* adhere to these guidelines. + +Below are the patterns that we expect *openstacksdk* developers to follow. + + +Release Notes +------------- + +*openstacksdk* uses `reno <https://docs.openstack.org/reno/latest/>`_ for +managing its release notes. A new release note should be added to +your contribution anytime you add new API calls, fix significant bugs, +add new functionality or parameters to existing API calls, or make any +other significant changes to the code base that we should draw attention +to for the user base. + +It is *not* necessary to add release notes for minor fixes, such as +correction of documentation typos, minor code cleanup or reorganization, +or any other change that a user would not notice through normal usage. + + +Exceptions +---------- + +Exceptions should NEVER be wrapped and re-raised inside of a new exception. +This removes important debug information from the user. All of the exceptions +should be raised correctly the first time. + + +openstack.cloud API Methods +--------------------------- + +The ``openstack.cloud`` layer has some specific rules: + +- When an API call acts on a resource that has both a unique ID and a + name, that API call should accept either identifier with a name_or_id + parameter. + +- All resources should adhere to the get/list/search interface that + control retrieval of those resources. E.g., ``get_image()``, + ``list_images()``, ``search_images()``. + +- Resources should have ``create_RESOURCE()``, ``delete_RESOURCE()``, + ``update_RESOURCE()`` API methods (as it makes sense). + +- For those methods that should behave differently for omitted or None-valued + parameters, use the ``_utils.valid_kwargs`` decorator. This includes all + Neutron ``update_*`` functions. + +- Deleting a resource should return True if the delete succeeded, or False + if the resource was not found. + +Returned Resources +~~~~~~~~~~~~~~~~~~ + +The ``openstack.cloud`` layer should rely on the proxy layer for the given +service. This will ensure complex objects returned to the caller are of +``openstack.resource.Resource`` type. + +Nova vs. Neutron +~~~~~~~~~~~~~~~~ + +- Recognize that not all cloud providers support Neutron, so never + assume it will be present. If a task can be handled by either + Neutron or Nova, code it to be handled by either. + +- For methods that accept either a Nova pool or Neutron network, the + parameter should just refer to the network, but documentation of it + should explain about the pool. See: ``create_floating_ip()`` and + ``available_floating_ip()`` methods. + + +Tests +----- + +- New API methods *must* have unit tests! + +- New unit tests should only mock at the REST layer using ``requests_mock``. + Any mocking of *openstacksdk* itself should be considered legacy and to be + avoided. Exceptions to this rule can be made when attempting to test the + internals of a logical shim where the inputs and output of the method aren't + actually impacted by remote content. + +- Functional tests should be added, when possible. + +- In functional tests, always use unique names (for resources that have this + attribute) and use it for clean up (see next point). + +- In functional tests, always define cleanup functions to delete data added + by your test, should something go wrong. Data removal should be wrapped in + a try except block and try to delete as many entries added by the test as + possible. diff --git a/doc/source/contributor/contributing.rst b/doc/source/contributor/contributing.rst new file mode 100644 index 0000000..b1cd2f3 --- /dev/null +++ b/doc/source/contributor/contributing.rst @@ -0,0 +1 @@ +.. include:: ../../../CONTRIBUTING.rst diff --git a/doc/source/contributor/create/examples/resource/fake.py b/doc/source/contributor/create/examples/resource/fake.py new file mode 100644 index 0000000..b02175c --- /dev/null +++ b/doc/source/contributor/create/examples/resource/fake.py @@ -0,0 +1,26 @@ +# Apache 2 header omitted for brevity + +from openstack import resource + + +class Fake(resource.Resource): + resource_key = "resource" + resources_key = "resources" + base_path = "/fake" + + allow_create = True + allow_fetch = True + allow_commit = True + allow_delete = True + allow_list = True + allow_head = True + + #: The transaction date and time. + timestamp = resource.Header("x-timestamp") + #: The name of this resource. + name = resource.Body("name", alternate_id=True) + #: The value of the resource. Also available in headers. + value = resource.Body("value", alias="x-resource-value") + #: Is this resource cool? If so, set it to True. + #: This is a multi-line comment about cool stuff. + cool = resource.Body("cool", type=bool) diff --git a/doc/source/contributor/create/examples/resource/fake_service.py b/doc/source/contributor/create/examples/resource/fake_service.py new file mode 100644 index 0000000..34000b9 --- /dev/null +++ b/doc/source/contributor/create/examples/resource/fake_service.py @@ -0,0 +1,12 @@ +# Apache 2 header omitted for brevity + +from openstack import service_description +from openstack.fake.v2 import _proxy as _proxy_v2 + + +class FakeService(service_description.ServiceDescription): + """The fake service.""" + + supported_versions = { + '2': _proxy_v2.Proxy, + } diff --git a/doc/source/contributor/create/resource.rst b/doc/source/contributor/create/resource.rst new file mode 100644 index 0000000..76b8954 --- /dev/null +++ b/doc/source/contributor/create/resource.rst @@ -0,0 +1,186 @@ +.. TODO(shade) Update this guide. + +Creating a New Resource +======================= + +This guide will walk you through how to add resources for a service. + +Naming Conventions +------------------ + +Above all, names across this project conform to Python's naming standards, +as laid out in `PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_. + +The relevant details we need to know are as follows: + + * Module names are lower case, and separated by underscores if more than + one word. For example, ``openstack.object_store`` + * Class names are capitalized, with no spacing, and each subsequent word is + capitalized in a name. For example, ``ServerMetadata``. + * Attributes on classes, including methods, are lower case and separated + by underscores. For example, ``allow_list`` or ``get_data``. + +Services +******** + +Services in the OpenStack SDK are named after their program name, not their +code name. For example, the project often known as "Nova" is always called +"compute" within this SDK. + +This guide walks through creating service for an OpenStack program called +"Fake". Following our guidelines, the code for its service would +live under the ``openstack.fake`` namespace. What follows is the creation +of a :class:`~openstack.resource.Resource` class for the "Fake" service. + +Resources +********* + +Resources are named after the server-side resource, which is set in the +``base_path`` attribute of the resource class. This guide creates a +resource class for the ``/fake`` server resource, so the resource module +is called ``fake.py`` and the class is called ``Fake``. + +An Example +---------- + +``openstack/fake/fake_service.py`` + +.. literalinclude:: examples/resource/fake_service.py + :language: Python + :linenos: + +``openstack/fake/v2/fake.py`` + +.. literalinclude:: examples/resource/fake.py + :language: Python + :linenos: + +``fake.Fake`` Attributes +------------------------ + +Each service's resources inherit from :class:`~openstack.resource.Resource`, +so they can override any of the base attributes to fit the way their +particular resource operates. + +``resource_key`` and ``resources_key`` +************************************** + +These attributes are set based on how your resource responds with data. +The default values for each of these are ``None``, which works fine +when your resource returns a JSON body that can be used directly without a +top-level key, such as ``{"name": "Ernie Banks", ...}"``. + +However, our ``Fake`` resource returns JSON bodies that have the details of +the resource one level deeper, such as +``{"resources": {"name": "Ernie Banks", ...}, {...}}``. It does a similar +thing with single resources, putting them inside a dictionary keyed on +``"resource"``. + +By setting ``Fake.resource_key`` on *line 8*, we tell the ``Resource.create``, +``Resource.get``, and ``Resource.update`` methods that we're either sending +or receiving a resource that is in a dictionary with that key. + +By setting ``Fake.resources_key`` on *line 9*, we tell the ``Resource.list`` +method that we're expecting to receive multiple resources inside a dictionary +with that key. + +``base_path`` +************* + +The ``base_path`` is the URL we're going to use to make requests for this +resource. In this case, *line 10* sets ``base_path = "/fake"``, which also +corresponds to the name of our class, ``Fake``. + +Most resources follow this basic formula. Some cases are more complex, where +the URL to make requests to has to contain some extra data. The volume service +has several resources which make either basic requests or detailed requests, +so they use ``base_path = "/volumes/%s(detailed)"``. Before a request is made, +if ``detailed = True``, they convert it to a string so the URL becomes +``/volumes/detailed``. If it's ``False``, they only send ``/volumes/``. + +``service`` +*********** + +*Line 11* is an instance of the service we're implementing. Each resource +ties itself to the service through this setting, so that the proper URL +can be constructed. + +In ``fake_service.py``, we specify the valid versions as well as what this +service is called in the service catalog. When a request is made for this +resource, the Session now knows how to construct the appropriate URL using +this ``FakeService`` instance. + +Supported Operations +-------------------- + +The base :class:`~openstack.resource.Resource` disallows all types of requests +by default, requiring each resource to specify which requests they support. +On *lines 14-19*, our ``Fake`` resource specifies that it'll work with all +of the operations. + +In order to have the following methods work, you must allow the corresponding +value by setting it to ``True``: + ++----------------------------------------------+----------------+ +| :class:`~openstack.resource.Resource.create` | allow_create | ++----------------------------------------------+----------------+ +| :class:`~openstack.resource.Resource.delete` | allow_delete | ++----------------------------------------------+----------------+ +| :class:`~openstack.resource.Resource.head` | allow_head | ++----------------------------------------------+----------------+ +| :class:`~openstack.resource.Resource.list` | allow_list | ++----------------------------------------------+----------------+ +| :class:`~openstack.resource.Resource.fetch` | allow_fetch | ++----------------------------------------------+----------------+ +| :class:`~openstack.resource.Resource.commit` | allow_commit | ++----------------------------------------------+----------------+ + +An additional attribute to set is ``commit_method``. It defaults to ``PUT``, +but some services use ``POST`` or ``PATCH`` to commit changes back to the +remote resource. + +Properties +---------- + +.. TODO(shade) Especially this section + +The way resource classes communicate values between the user and the server +are :class:`~openstack.resource.prop` objects. These act similarly to Python's +built-in property objects, but they share only the name - they're not the same. + +Properties are set based on the contents of a response body or headers. +Based on what your resource returns, you should set ``prop``\s to map +those values to ones on your :class:`~openstack.resource.Resource` object. + +*Line 22* sets a prop for ``timestamp`` , which will cause the +``Fake.timestamp`` attribute to contain the value returned in an +``X-Timestamp`` header, such as from a ``Fake.head`` request. + +*Line 24* sets a prop for ``name``, which is a value returned in a body, such +as from a ``Fake.get`` request. Note from *line 12* that ``name`` is +specified its ``id`` attribute, so when this resource +is populated from a response, ``Fake.name`` and ``Fake.id`` are the same +value. + +*Line 26* sets a prop which contains an alias. ``Fake.value`` will be set +when a response body contains a ``value``, or when a header contains +``X-Resource-Value``. + +*Line 28* specifies a type to be checked before sending the value in a request. +In this case, we can only set ``Fake.cool`` to either ``True`` or ``False``, +otherwise a TypeError will be raised if the value can't be converted to the +expected type. + +Documentation +------------- + +We use Sphinx's ``autodoc`` feature in order to build API documentation for +each resource we expose. The attributes we override from +:class:`~openstack.resource.Resource` don't need to be documented, but any +:class:`~openstack.resource.prop` attributes must be. All you need to do is +add a comment *above* the line to document, with a colon following the +pound-sign. + +*Lines 21, 23, 25, and 27-28* are comments which will then appear in the API +documentation. As shown in *lines 27 & 28*, these comments can span multiple +lines. diff --git a/doc/source/contributor/history.rst b/doc/source/contributor/history.rst new file mode 100644 index 0000000..b2901ff --- /dev/null +++ b/doc/source/contributor/history.rst @@ -0,0 +1,49 @@ +A Brief History +=============== + +*openstacksdk* started its life as three different libraries: *shade*, +*os-client-config* and *python-openstacksdk*. + +*shade* + *shade* started its life as some code inside of OpenStack Infra's `nodepool`_ + project, and as some code inside of the `Ansible OpenStack Modules`_. + Ansible had a bunch of different OpenStack related modules, and there was a + ton of duplicated code. Eventually, between refactoring that duplication into + an internal library, and adding the logic and features that the OpenStack + Infra team had developed to run client applications at scale, it turned out + that we'd written nine-tenths of what we'd need to have a standalone library. + + Because of its background from nodepool, *shade* contained abstractions to + work around deployment differences and is resource oriented rather than + service oriented. This allows a user to think about Security Groups without + having to know whether Security Groups are provided by Nova or Neutron on a + given cloud. On the other hand, as an interface that provides an abstraction, + it deviates from the published OpenStack REST API and adds its own opinions, + which may not get in the way of more advanced users with specific needs. + +*os-client-config* + *os-client-config* was a library for collecting client configuration for + using an OpenStack cloud in a consistent and comprehensive manner, which + introduced the ``clouds.yaml`` file for expressing named cloud + configurations. + +*python-openstacksdk* + *python-openstacksdk* was a library that exposed the OpenStack APIs to + developers in a consistent and predictable manner. + +After a while it became clear that there was value in both the high-level +layer that contains additional business logic and the lower-level SDK that +exposes services and their resources faithfully and consistently as Python +objects. Even with both of those layers, it is still beneficial at times to be +able to make direct REST calls and to do so with the same properly configured +`Session`_ from `python-requests`_. This led to the merge of the three +projects. + +The original contents of the *shade* library have been moved into +``openstack.cloud`` and *os-client-config* has been moved in to +``openstack.config``. + +.. _nodepool: https://docs.openstack.org/infra/nodepool/ +.. _Ansible OpenStack Modules: http://docs.ansible.com/ansible/latest/list_of_cloud_modules.html#openstack +.. _Session: http://docs.python-requests.org/en/master/user/advanced/#session-objects +.. _python-requests: http://docs.python-requests.org/en/master/ diff --git a/doc/source/contributor/index.rst b/doc/source/contributor/index.rst new file mode 100644 index 0000000..c651c76 --- /dev/null +++ b/doc/source/contributor/index.rst @@ -0,0 +1,112 @@ +Contributing to the OpenStack SDK +================================= + +This section of documentation pertains to those who wish to contribute to the +development of this SDK. If you're looking for documentation on how to use +the SDK to build applications, refer to the `user <../user>`_ section. + +About the Project +----------------- + +The OpenStack SDK is a OpenStack project aimed at providing a complete +software development kit for the programs which make up the OpenStack +community. It is a Python library with corresponding documentation, +examples, and tools released under the Apache 2 license. + +.. toctree:: + :maxdepth: 2 + + history + +Contribution Mechanics +---------------------- + +.. toctree:: + :maxdepth: 2 + + contributing + +Contacting the Developers +------------------------- + +IRC +~~~ + +The developers of this project are available in the `#openstack-sdks`__ channel +on OFTC IRC. This channel includes conversation on SDKs and tools within the +general OpenStack community, including OpenStackClient as well as occasional +talk about SDKs created for languages outside of Python. + +.. __: http://webchat.oftc.net?channels=%23openstack-sdks + +Email +~~~~~ + +The `openstack-discuss`__ mailing list fields questions of all types on +OpenStack. Using the ``[sdk]`` filter to begin your email subject will ensure +that the message gets to SDK developers. + +.. __: mailto:openstack-discuss@openstack.org?subject=[sdk]%20Question%20about%20openstacksdk + +Coding Standards +---------------- + +We are a bit stricter than usual in the coding standards department. It's a +good idea to read through the :doc:`coding <coding>` section. + +.. toctree:: + :maxdepth: 2 + + coding + +Development Environment +----------------------- + +The first step towards contributing code and documentation is to setup your +development environment. We use a pretty standard setup, but it is fully +documented in our :doc:`setup <setup>` section. + +.. toctree:: + :maxdepth: 2 + + setup + +Testing +------- + +The project contains two test packages, one for unit tests and one for +functional tests. The ``openstack.tests.unit`` package tests the SDK's features +in isolation. The ``openstack.tests.functional`` package tests the SDK's +features and examples against an OpenStack cloud. + +.. toctree:: + + testing + +Project Layout +-------------- + +The project contains a top-level ``openstack`` package, which houses several +modules that form the foundation upon which each service's API is built on. +Under the ``openstack`` package are packages for each of those services, +such as ``openstack.compute``. + +.. toctree:: + + layout + +Adding Features +--------------- + +Does this SDK not do what you need it to do? Is it missing a service? Are you +a developer on another project who wants to add their service? You're in the +right place. Below are examples of how to add new features to the +OpenStack SDK. + +.. toctree:: + :maxdepth: 2 + + create/resource + +.. TODO(briancurtin): document how to create a proxy +.. TODO(briancurtin): document how to create auth plugins diff --git a/doc/source/contributor/layout.rst b/doc/source/contributor/layout.rst new file mode 100644 index 0000000..b91d359 --- /dev/null +++ b/doc/source/contributor/layout.rst @@ -0,0 +1,104 @@ +How the SDK is organized +======================== + +The following diagram shows how the project is laid out. + +.. literalinclude:: layout.txt + +Resource +-------- + +The :class:`openstack.resource.Resource` base class is the building block +of any service implementation. ``Resource`` objects correspond to the +resources each service's REST API works with, so the +:class:`openstack.compute.v2.server.Server` subclass maps to the compute +service's ``https://openstack:1234/v2/servers`` resource. + +The base ``Resource`` contains methods to support the typical +`CRUD <http://en.wikipedia.org/wiki/Create,_read,_update_and_delete>`_ +operations supported by REST APIs, and handles the construction of URLs +and calling the appropriate HTTP verb on the given ``Adapter``. + +Values sent to or returned from the service are implemented as attributes +on the ``Resource`` subclass with type :class:`openstack.resource.prop`. +The ``prop`` is created with the exact name of what the API expects, +and can optionally include a ``type`` to be validated against on requests. +You should choose an attribute name that follows PEP-8, regardless of what +the server-side expects, as this ``prop`` becomes a mapping between the two.:: + + is_public = resource.prop('os-flavor-access:is_public', type=bool) + +There are six additional attributes which the ``Resource`` class checks +before making requests to the REST API. ``allow_create``, ``allow_retreive``, +``allow_commit``, ``allow_delete``, ``allow_head``, and ``allow_list`` are set +to ``True`` or ``False``, and are checked before making the corresponding +method call. + +The ``base_path`` attribute should be set to the URL which corresponds to +this resource. Many ``base_path``\s are simple, such as ``"/servers"``. +For ``base_path``\s which are composed of non-static information, Python's +string replacement is used, e.g., ``base_path = "/servers/%(server_id)s/ips"``. + +``resource_key`` and ``resources_key`` are attributes to set when a +``Resource`` returns more than one item in a response, or otherwise +requires a key to obtain the response value. For example, the ``Server`` +class sets ``resource_key = "server"`` as an individual ``Server`` is +stored in a dictionary keyed with the singular noun, +and ``resources_key = "servers"`` as multiple ``Server``\s are stored in +a dictionary keyed with the plural noun in the response. + +Proxy +----- + +Each service implements a ``Proxy`` class based on +:class:`~openstack.proxy.Proxy`, within the +``openstack/<program_name>/vX/_proxy.py`` module. For example, the v2 compute +service's ``Proxy`` exists in ``openstack/compute/v2/_proxy.py``. + +The :class:`~openstack.proxy.Proxy` class is based on +:class:`~keystoneauth1.adapter.Adapter`. + +.. autoclass:: openstack.proxy.Proxy + :members: + :show-inheritance: + +Each service's ``Proxy`` provides a higher-level interface for users to work +with via a :class:`~openstack.connection.Connection` instance. + +Rather than requiring users to maintain their own ``Adapter`` and work with +lower-level :class:`~openstack.resource.Resource` objects, the ``Proxy`` +interface offers a place to make things easier for the caller. + +Each ``Proxy`` class implements methods which act on the underlying +``Resource`` classes which represent the service. For example:: + + def list_flavors(self, **params): + return flavor.Flavor.list(self.session, **params) + +This method is operating on the ``openstack.compute.v2.flavor.Flavor.list`` +method. For the time being, it simply passes on the ``Adapter`` maintained +by the ``Proxy``, and returns what the underlying ``Resource.list`` method +does. + +Cloud +----- + +.. todo + +TODO. + +Connection +---------- + +The :class:`openstack.connection.Connection` class builds atop a +:class:`openstack.config.cloud_region.CloudRegion` object, and provides a +higher level interface constructed of ``Proxy`` objects from each of the +services. + +The ``Connection`` class' primary purpose is to act as a high-level interface +to this SDK, managing the lower level connection bits and exposing the +``Resource`` objects through their corresponding `Proxy`_ object. + +If you've built proper ``Resource`` objects and implemented methods on the +corresponding ``Proxy`` object, the high-level interface to your service +should now be exposed. diff --git a/doc/source/contributor/layout.txt b/doc/source/contributor/layout.txt new file mode 100644 index 0000000..eeffbac --- /dev/null +++ b/doc/source/contributor/layout.txt @@ -0,0 +1,12 @@ +openstack/ + connection.py + resource.py + compute/ + compute_service.py + v2/ + server.py + _proxy.py + tests/ + compute/ + v2/ + test_server.py diff --git a/doc/source/contributor/setup.rst b/doc/source/contributor/setup.rst new file mode 100644 index 0000000..36c5aa1 --- /dev/null +++ b/doc/source/contributor/setup.rst @@ -0,0 +1,116 @@ +Creating a Development Environment +================================== + +Required Tools +-------------- + +Python +~~~~~~ + +As the OpenStack SDK is developed in Python, you will need at least one +version of Python installed. Our continuous integration system runs against +several versions, so ultimately we will have the proper test coverage, but +having multiple versions locally results in less time spent in code review when +changes unexpectedly break other versions. + +Python can be downloaded from https://www.python.org/downloads. + +virtualenv +~~~~~~~~~~ + +In order to isolate our development environment from the system-based Python +installation, we use `virtualenv <https://virtualenv.pypa.io/en/latest/>`_. +This allows us to install all of our necessary dependencies without +interfering with anything else, and preventing others from interfering with us. +Virtualenv must be installed on your system in order to use it, and it can be +had from PyPI, via pip, as follows. Note that you may need to run this +as an administrator in some situations.:: + + $ apt-get install python3-virtualenv # Debian based platforms + $ dnf install python3-virtualenv # Red Hat based platforms + $ pip install virtualenv # Mac OS X and other platforms + +You can create a virtualenv in any location. A common usage is to store all +of your virtualenvs in the same place, such as under your home directory. +To create a virtualenv for the default Python, run the following:: + + $ virtualenv $HOME/envs/sdk + +To create an environment for a different version, run the following:: + + $ virtualenv -p python3 $HOME/envs/sdk3 + +When you want to enable your environment so that you can develop inside of it, +you *activate* it. To activate an environment, run the /bin/activate +script inside of it, like the following:: + + $ source $HOME/envs/sdk3/bin/activate + (sdk3)$ + +Once you are activated, you will see the environment name in front of your +command prompt. In order to exit that environment, run the ``deactivate`` +command. + +tox +~~~ + +We use `tox <https://tox.readthedocs.org/en/latest/>`_ as our test runner, +which allows us to run the same test commands against multiple versions +of Python. Inside any of the virtualenvs you use for working on the SDK, +run the following to install ``tox`` into it.:: + + (sdk3)$ pip install tox + +Git +~~~ + +The source of the OpenStack SDK is stored in Git. In order to work with our +source repository, you must have Git installed on your system. If your +system has a package manager, it can likely be had from there. If not, +you can find downloads or the source at http://git-scm.com. + +Getting the Source Code +----------------------- + +.. TODO(briancurtin): We should try and distill the following document + into the minimally necessary parts to include directly in this section. + I've talked to several people who are discouraged by that large of a + document to go through before even getting into the project they want + to work on. I don't want that to happen to us because we have the potential + to be more public facing than a lot of other projects. + +.. note:: Before checking out the code, please read the OpenStack + `Developer's Guide <http://docs.openstack.org/infra/manual/developers.html>`_ + for details on how to use the continuous integration and code + review systems that we use. + +The canonical Git repository is hosted on opendev.org at +http://opendev.org/openstack/openstacksdk/:: + + (sdk3)$ git clone https://opendev.org/openstack/openstacksdk + (sdk3)$ cd openstacksdk + +Installing Dependencies +----------------------- + +In order to work with the SDK locally, such as in the interactive interpreter +or to run example scripts, you need to install the project's dependencies.:: + + (sdk3)$ pip install -r requirements.txt + +After the downloads and installs are complete, you'll have a fully functional +environment to use the SDK in. + +Building the Documentation +-------------------------- + +Our documentation is written in reStructured Text and is built using +Sphinx. A ``docs`` command is available in our ``tox.ini``, allowing you +to build the documentation like you'd run tests. The ``docs`` command is +not evaluated by default.:: + + (sdk3)$ tox -e docs + +That command will cause the documentation, which lives in the ``docs`` folder, +to be built. HTML output is the most commonly referenced, which is located +in ``docs/build/html``. diff --git a/doc/source/contributor/testing.rst b/doc/source/contributor/testing.rst new file mode 100644 index 0000000..275a418 --- /dev/null +++ b/doc/source/contributor/testing.rst @@ -0,0 +1,108 @@ +Testing +======= + +The tests are run with `tox <https://tox.readthedocs.org/en/latest/>`_ and +configured in ``tox.ini``. The test results are tracked by +`stestr <https://stestr.readthedocs.io/en/latest/>`_ and configured +in ``.stestr.conf`` and via command line options passed to the ``stestr`` +executable when it's called by ``tox``. + + +Unit Tests +---------- + +Running tests +~~~~~~~~~~~~~ + +In order to run the entire unit test suite, simply run the ``tox`` command +inside of your source checkout. This will attempt to run every test command +listed inside of ``tox.ini``, which includes Python 3.x, and a PEP 8 check. +You should run the full test suite on all versions before +submitting changes for review in order to avoid unexpected failures in the +continuous integration system.:: + + $ tox + ... + py3: commands succeeded + pep8: commands succeeded + congratulations :) + +During development, it may be more convenient to run a subset of the tests +to keep test time to a minimum. You can choose to run the tests only on one +version. A step further is to run only the tests you are working on.:: + + # Run run the tests on Python 3.9 + $ tox -e py39 + # Run only the compute unit tests on Python 3.9 + $ tox -e py39 openstack.tests.unit.compute + # Run only the tests in a specific file on Python 3.9 + $ tox -e py39 -- -n openstack/tests/unit/compute/test_version.py + + +Functional Tests +---------------- + +The functional tests assume that you have a public or private OpenStack cloud +that you can run the tests against. The tests must be able to be run against +public clouds but first and foremost they must be run against OpenStack. In +practice, this means that the tests should initially be run against a stable +branch of `DevStack <https://docs.openstack.org/devstack/latest/>`_. + +Configuration +~~~~~~~~~~~~~ + +To connect the functional tests to an OpenStack cloud we require a +``clouds.yaml`` file, as discussed in :doc:`/user/config/configuration`. +You can place this ``clouds.yaml`` file in the root of your source checkout or +in one of the other standard locations, ``$HOME/.config/openstack`` or +``/etc/openstack``. + +There must be at least three clouds configured, or rather three accounts +configured for the one cloud. These accounts are: + +- An admin account, which defaults to ``devstack-admin`` but is configurable + via the ``OPENSTACKSDK_OPERATOR_CLOUD`` environment variable, +- A user account, which defaults to ``devstack`` but is configurable + via the ``OPENSTACKSDK_DEMO_CLOUD`` environment variable, and +- An alternate user account, which defaults to ``devstack-demo`` but is + configurable via the ``OPENSTACKSDK_DEMO_CLOUD_ALT`` environment variable + +In addition, you must indicate the names of the flavor and image that should be +used for tests. These can be configured via ``OPENSTACKSDK_FLAVOR`` and +``OPENSTACKSDK_IMAGE`` environment variables or ``functional.flavor_name`` and +``functional.image_name`` settings in the ``clouds.yaml`` file, respectively. + +Finally, you can configure the timeout for tests using the +``OPENSTACKSDK_FUNC_TEST_TIMEOUT`` environment variable (defaults to 300 +seconds). Some test modules take specific timeout values. For example, all +tests in ``openstack.tests.functional.compute`` will check for the +``OPENSTACKSDK_FUNC_TEST_TIMEOUT_COMPUTE`` environment variable before checking +for ``OPENSTACKSDK_FUNC_TEST_TIMEOUT``. + +.. note:: + + Recent versions of DevStack will configure a suitable ``clouds.yaml`` file + for you, which will be placed at ``/etc/openstack/clouds.yaml``. + +This is an example of a minimal configuration for a ``clouds.yaml`` that +connects the functional tests to a DevStack instance. + +.. literalinclude:: clouds.yaml + :language: yaml + +Replace ``xxx.xxx.xxx.xxx`` with the IP address or FQDN of your DevStack +instance. + +Running tests +~~~~~~~~~~~~~ + +Functional tests are also run against multiple Python versions. In order to run +the entire functional test suite against the default Python 3 version in your +environment, run the ``tox -e functional`` command inside of your source +checkout. This will attempt to run every tests in the +``openstack/tests/functional`` directory. For example:: + + $ tox -e functional + ... + functional: commands succeeded + congratulations :) diff --git a/doc/source/glossary.rst b/doc/source/glossary.rst new file mode 100644 index 0000000..3bdbde4 --- /dev/null +++ b/doc/source/glossary.rst @@ -0,0 +1,104 @@ +:orphan: + +Glossary +======== + +.. glossary:: + :sorted: + + CLI + Command-Line Interface; a textual user interface. + + compute + OpenStack Compute (Nova). + + container + One of the :term:`object-store` resources; a container holds + :term:`objects <object>` being stored. + + endpoint + A base URL used in a REST request. An `authentication endpoint` is + specifically the URL given to a user to identify a cloud. A service + endpoint is generally obtained from the service catalog. + + host + A physical computer. Contrast with :term:`node` and :term:`server`. + + identity + OpenStack Identity (Keystone). + + image + OpenStack Image (Glance). Also the attribute name of the disk files + stored for use by servers. + + keypair + The attribute name of the SSH public key used in the OpenStack Compute + API for server authentication. + + node + A logical system, may refer to a :term:`server` (virtual machine) or a + :term:`host`. + + Generally used to describe an OS instance where a specific process is + running, e.g. a 'network node' is where the network processes run, + and may be directly on a host or in a server. Contrast with + :term:`host` and :term:`server`. + + object + A generic term which normally refers to the a Python ``object``. + The OpenStack Object Store service (Swift) also uses `object` as the + name of the item being stored within a :term:`container`. + + object-store + OpenStack Object Store (Swift). + + project + The name of the owner of resources in an OpenStack cloud. A `project` + can map to a customer, account or organization in different OpenStack + deployments. Used instead of the deprecated :term:`tenant`. + + region + The attribute name of a partitioning of cloud resources. + + resource + A Python object representing an OpenStack resource inside the SDK code. + Also used to describe the items managed by OpenStack. + + role + A personality that a user assumes when performing a specific set of + operations. A `role` includes a set of rights and privileges that a + user assuming that role inherits. The OpenStack Identity service + includes the set of roles that a user can assume in the + :term:`token` that is issued to that user. + + The individual services determine how the roles are interpreted + and access granted to operations or resources. The OpenStack Identity + service treats a role as an arbitrary name assigned by the cloud + administrator. + + server + A virtual machine or a bare-metal host managed by the OpenStack Compute + service. Contrast with :term:`host` and :term:`node`. + + service + In OpenStack this refers to a service/endpoint in the + :term:`ServiceCatalog <service catalog>`. + It could also be a collection of endpoints for different + :term:`regions <region>`. + A service has a type and a name. + + service catalog + The list of :term:`services <service>` configured at a given + authentication endpoint available to the authenticated user. + + tenant + Deprecated in favor of :term:`project`. + + token + An arbitrary bit of text that is used to access resources. Some tokens + are `scoped` to determine what resources are accessible with it. A + token may be revoked at any time and is valid for a finite duration. + + volume + OpenStack Volume (Cinder). Also the attribute name of the virtual + disks managed by the OpenStack Volume service. diff --git a/doc/source/index.rst b/doc/source/index.rst new file mode 100644 index 0000000..d935708 --- /dev/null +++ b/doc/source/index.rst @@ -0,0 +1,45 @@ +openstacksdk +============ + +This documentation is split into three sections: + +* An :doc:`installation <install/index>` guide +* A section for :doc:`users <user/index>` looking to build applications + which make use of OpenStack +* A section for those looking to :doc:`contribute <contributor/index>` + to this project + +Installation +------------ + +.. toctree:: + :maxdepth: 2 + + install/index + +For Users +--------- + +.. toctree:: + :maxdepth: 2 + + user/index + +For Contributors +---------------- + +.. toctree:: + :maxdepth: 2 + + contributor/index + +General Information +------------------- + +General information about the SDK including a glossary and release history. + +.. toctree:: + :maxdepth: 1 + + Glossary of Terms <glossary> + Release Notes <releasenotes> diff --git a/doc/source/install/index.rst b/doc/source/install/index.rst new file mode 100644 index 0000000..33255ae --- /dev/null +++ b/doc/source/install/index.rst @@ -0,0 +1,17 @@ +Installation guide +================== + +The OpenStack SDK is available on `PyPI`__ under the name **openstacksdk**. To +install it, use ``pip``: + +.. code-block:: bash + + $ pip install openstacksdk + +To check the installed version you can call the module with: + +.. code-block:: bash + + $ python -m openstack version + +.. __: https://pypi.org/project/openstacksdk diff --git a/doc/source/releasenotes.rst b/doc/source/releasenotes.rst new file mode 100644 index 0000000..b4eb5e4 --- /dev/null +++ b/doc/source/releasenotes.rst @@ -0,0 +1,5 @@ +Release Notes +============= + +Release notes for `openstacksdk` can be found at +https://releases.openstack.org/teams/openstacksdk.html diff --git a/doc/source/user/config/configuration.rst b/doc/source/user/config/configuration.rst new file mode 100644 index 0000000..72cfaa5 --- /dev/null +++ b/doc/source/user/config/configuration.rst @@ -0,0 +1,499 @@ +.. _openstack-config: + +====================================== +Configuring OpenStack SDK Applications +====================================== + +.. _config-environment-variables: + +Environment Variables +--------------------- + +`openstacksdk` honors all of the normal `OS_*` variables. It does not +provide backwards compatibility to service-specific variables such as +`NOVA_USERNAME`. + +If you have OpenStack environment variables set, `openstacksdk` will +produce a cloud config object named `envvars` containing your values from the +environment. If you don't like the name `envvars`, that's ok, you can override +it by setting `OS_CLOUD_NAME`. + +Service specific settings, like the nova service type, are set with the +default service type as a prefix. For instance, to set a special service_type +for trove set + +.. code-block:: bash + + export OS_DATABASE_SERVICE_TYPE=rax:database + +.. _config-clouds-yaml: + +Config Files +------------ + +`openstacksdk` will look for a file called `clouds.yaml` in the following +locations: + +* ``.`` (the current directory) +* ``$HOME/.config/openstack`` +* ``/etc/openstack`` + +The first file found wins. + +You can also set the environment variable `OS_CLIENT_CONFIG_FILE` to an +absolute path of a file to look for and that location will be inserted at the +front of the file search list. + +The keys are all of the keys you'd expect from `OS_*` - except lower case +and without the OS prefix. So, region name is set with `region_name`. + +Service specific settings, like the nova service type, are set with the +default service type as a prefix. For instance, to set a special service_type +for trove (because you're using Rackspace) set: + +.. code-block:: yaml + + database_service_type: 'rax:database' + + +Site Specific File Locations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In addition to `~/.config/openstack` and `/etc/openstack` - some platforms +have other locations they like to put things. `openstacksdk` will also +look in an OS specific config dir + +* `USER_CONFIG_DIR` +* `SITE_CONFIG_DIR` + +`USER_CONFIG_DIR` is different on Linux, OSX and Windows. + +* Linux: `~/.config/openstack` +* OSX: `~/Library/Application Support/openstack` +* Windows: `C:\\Users\\USERNAME\\AppData\\Local\\OpenStack\\openstack` + +`SITE_CONFIG_DIR` is different on Linux, OSX and Windows. + +* Linux: `/etc/openstack` +* OSX: `/Library/Application Support/openstack` +* Windows: `C:\\ProgramData\\OpenStack\\openstack` + +An example config file is probably helpful: + +.. code-block:: yaml + + clouds: + mtvexx: + profile: https://vexxhost.com + auth: + username: mordred@inaugust.com + password: XXXXXXXXX + project_name: mordred@inaugust.com + region_name: ca-ymq-1 + dns_api_version: 1 + mordred: + region_name: RegionOne + auth: + username: 'mordred' + password: XXXXXXX + project_name: 'shade' + auth_url: 'https://montytaylor-sjc.openstack.blueboxgrid.com:5001/v2.0' + infra: + profile: rackspace + auth: + username: openstackci + password: XXXXXXXX + project_id: 610275 + regions: + - DFW + - ORD + - IAD + +You may note a few things. First, since `auth_url` settings are silly +and embarrassingly ugly, known cloud vendor profile information is included and +may be referenced by name or by base URL to the cloud in question if the +cloud serves a vendor profile. One of the benefits of that is that `auth_url` +isn't the only thing the vendor defaults contain. For instance, since +Rackspace lists `rax:database` as the service type for trove, `openstacksdk` +knows that so that you don't have to. In case the cloud vendor profile is not +available, you can provide one called `clouds-public.yaml`, following the same +location rules previously mentioned for the config files. + +`regions` can be a list of regions. When you call `get_all_clouds`, +you'll get a cloud config object for each cloud/region combo. + +As seen with `dns_service_type`, any setting that makes sense to be +per-service, like `service_type` or `endpoint` or `api_version` can be set +by prefixing the setting with the default service type. That might strike you +funny when setting `service_type` and it does me too - but that's just the +world we live in. + +Auth Settings +------------- + +Keystone has auth plugins - which means it's not possible to know ahead of time +which auth settings are needed. `openstacksdk` sets the default plugin type +to `password`, which is what things all were before plugins came about. In +order to facilitate validation of values, all of the parameters that exist +as a result of a chosen plugin need to go into the auth dict. For password +auth, this includes `auth_url`, `username` and `password` as well as anything +related to domains, projects and trusts. + +Splitting Secrets +----------------- + +In some scenarios, such as configuration management controlled environments, +it might be easier to have secrets in one file and non-secrets in another. +This is fully supported via an optional file `secure.yaml` which follows all +the same location rules as `clouds.yaml`. It can contain anything you put +in `clouds.yaml` and will take precedence over anything in the `clouds.yaml` +file. + +.. code-block:: yaml + + # clouds.yaml + clouds: + internap: + profile: internap + auth: + username: api-55f9a00fb2619 + project_name: inap-17037 + regions: + - ams01 + - nyj01 + # secure.yaml + clouds: + internap: + auth: + password: XXXXXXXXXXXXXXXXX + +SSL Settings +------------ + +When the access to a cloud is done via a secure connection, `openstacksdk` +will always verify the SSL cert by default. This can be disabled by setting +`verify` to `False`. In case the cert is signed by an unknown CA, a specific +cacert can be provided via `cacert`. **WARNING:** `verify` will always have +precedence over `cacert`, so when setting a CA cert but disabling `verify`, the +cloud cert will never be validated. + +Client certs are also configurable. `cert` will be the client cert file +location. In case the cert key is not included within the client cert file, +its file location needs to be set via `key`. + +.. code-block:: yaml + + # clouds.yaml + clouds: + regular-secure-cloud: + auth: + auth_url: https://signed.cert.domain:5000 + ... + unknown-ca-with-client-cert-secure-cloud: + auth: + auth_url: https://unknown.ca.but.secure.domain:5000 + ... + key: /home/myhome/client-cert.key + cert: /home/myhome/client-cert.crt + cacert: /home/myhome/ca.crt + self-signed-insecure-cloud: + auth: + auth_url: https://self.signed.cert.domain:5000 + ... + verify: False + +Note for parity with ``openstack`` command-line options the `insecure` +boolean is also recognised (with the opposite semantics to `verify`; +i.e. `True` ignores certificate failures). This should be considered +deprecated for `verify`. + + +Cache Settings +-------------- + +.. versionchanged:: 1.0.0 + + Previously, caching was managed exclusively in the cloud layer. Starting in + openstacksdk 1.0.0, caching is moved to the proxy layer. As the cloud layer + depends on the proxy layer in 1.0.0, this means both layers can benefit from + the cache. + +Authenticating and accessing resources on a cloud is often expensive. It is +therefore quite common that applications will wish to do some client-side +caching of both credentials and cloud resources. To facilitate this, +*openstacksdk* supports caching credentials and resources using the system +keyring and *dogpile.cache*, respectively. + +.. tip:: + + It is important to emphasise that *openstacksdk* does not actually cache + anything itself. Rather, it collects and presents the cache information + so that your various applications that are connecting to OpenStack can share + a cache should you desire. It is important that your cache backend is + correctly configured according to the needs of your application. + +Caching in enabled or disabled globally, rather than on a cloud-by-cloud basis. +This is done by setting configuring the``cache`` top-level key. Caching of +authentication tokens can be configured using the following settings: + +``cache.auth`` + A boolean indicating whether tokens should be cached in the keyring. + When enabled, this allows the consequent connections to the same cloud to + skip fetching new token. When the token expires or is invalidated, + `openstacksdk` will automatically establish a new connection. + Defaults to ``false``. + +For example, to configure caching of authentication tokens. + +.. code-block:: yaml + + cache: + auth: true + +Caching of resources can be configured using the following settings: + +``cache.expiration_time`` + The expiration time in seconds for a cache entry. + This should be an integer. + Defaults to ``0``. + +``cache.class`` + The cache backend to use, which can include any backend supported by + *dogpile.cache* natively as well as backend provided by third-part packages. + This should be a string. + Defaults to ``dogpile.cache.memory``. + +``cache.arguments`` + A mapping of arbitrary arguments to pass into the cache backend. These are + backend specific. Keys should correspond to a configuration option for the + configured cache backend. + Defaults to ``{}``. + +``cache.expirations`` + A mapping of resource types to expiration times. The keys should be specified + in the same way as the metrics are emitted, by joining meaningful resource + URL segments with ``.``. For example, both ``/servers`` and ``/servers/ID`` + should be specified as ``servers``, while ``/servers/ID/metadata/KEY`` should + be specified as `server.metadata`. Values should be an expiration time in + seconds. A value of ``-1`` indicates that the cache should never expire, + while a value of ``0`` disables caching for the resource. + Defaults to ``{}`` + +For example, to configure caching with the ``dogpile.cache.memory`` backend +with a 1 hour expiration. + +.. code-block:: yaml + + cache: + expiration_time: 3600 + +To configure caching with the ``dogpile.cache.memory`` backend with a 1 hour +expiration but only for requests to the OpenStack Compute service's +``/servers`` API: + +.. code-block:: yaml + + cache: + expirations: + servers: 3600 + +To configure caching with the ``dogpile.cache.pylibmc`` backend with a 1 hour +expiration time and a memcached server running on your localhost. + +.. code-block:: yaml + + cache: + expiration_time: 3600 + arguments: + url: + - 127.0.0.1 + +To configure caching with the ``dogpile.cache.pylibmc`` backend with a 1 hour +expiration time, a memcached server running on your localhost, and multiple +per-resource cache expiration times. + +.. code-block:: yaml + + cache: + class: dogpile.cache.pylibmc + expiration_time: 3600 + arguments: + url: + - 127.0.0.1 + expiration: + server: 5 + flavor: -1 + compute.servers: 5 + compute.flavors: -1 + image.images: 5 + +Finally, if the ``cache`` key is undefined, a null cache is enabled meaning +caching is effectively disabled. + +.. note:: + + Non ``GET`` requests cause cache invalidation based on the caching key + prefix. This means that, for example, a ``PUT`` request to ``/images/ID`` + will invalidate all images cache (list and all individual entries). Moreover + it is possible to explicitly pass the ``skip_cache`` parameter to the + ``proxy._get`` function to bypass cache and invalidate what is already + there. This is happening automatically in the ``wait_for_status`` methods + where it is expected that resource will change some of the attributes over + the time. Forcing complete cache invalidation can be achieved calling + ``conn._cache.invalidate`` + +MFA Support +----------- + +MFA support requires a specially prepared configuration file. In this case a +combination of two different authorization plugins is used with their +individual requirements to the specified parameters. + +.. code-block:: yaml + + clouds: + mfa: + auth_type: "v3multifactor" + auth_methods: + - v3password + - v3totp + auth: + auth_url: https://identity.cloud.com + username: user + user_id: uid + password: XXXXXXXXX + project_name: project + user_domain_name: udn + project_domain_name: pdn + + +IPv6 +---- + +IPv6 is the future, and you should always use it if your cloud +supports it and if your local network supports it. Both of those are +easily detectable and all friendly software should do the right thing. + +However, sometimes a cloud API may return IPv6 information that is not +useful to a production deployment. For example, the API may provide +an IPv6 address for a server, but not provide that to the host +instance via metadata (configdrive) or standard IPv6 autoconfiguration +methods (i.e. the host either needs to make a bespoke API call, or +otherwise statically configure itself). + +For such situations, you can set the ``force_ipv4``, or ``OS_FORCE_IPV4`` +boolean environment variable. For example: + +.. code-block:: yaml + + clouds: + mtvexx: + profile: vexxhost + auth: + username: mordred@inaugust.com + password: XXXXXXXXX + project_name: mordred@inaugust.com + region_name: ca-ymq-1 + dns_api_version: 1 + monty: + profile: fooprovider + force_ipv4: true + auth: + username: mordred@inaugust.com + password: XXXXXXXXX + project_name: mordred@inaugust.com + region_name: RegionFoo + +The above snippet will tell client programs to prefer the IPv4 address +and leave the ``public_v6`` field of the `Server` object blank for the +``fooprovider`` cloud . You can also set this with a client flag for +all clouds: + +.. code-block:: yaml + + client: + force_ipv4: true + + +Per-region settings +------------------- + +Sometimes you have a cloud provider that has config that is common to the +cloud, but also with some things you might want to express on a per-region +basis. For instance, Internap provides a public and private network specific +to the user in each region, and putting the values of those networks into +config can make consuming programs more efficient. + +To support this, the region list can actually be a list of dicts, and any +setting that can be set at the cloud level can be overridden for that +region. + +.. code-block:: yaml + + clouds: + internap: + profile: internap + auth: + password: XXXXXXXXXXXXXXXXX + username: api-55f9a00fb2619 + project_name: inap-17037 + regions: + - name: ams01 + values: + networks: + - name: inap-17037-WAN1654 + routes_externally: true + - name: inap-17037-LAN6745 + - name: nyj01 + values: + networks: + - name: inap-17037-WAN1654 + routes_externally: true + - name: inap-17037-LAN6745 + + +Setting Precedence +------------------ + +Some settings are redundant, e.g. ``project-name`` and ``project-id`` both +specify the project. In a conflict between redundant settings, the +``_name`` ``clouds.yaml`` option (or equivalent ``-name`` CLI option and ``_NAME`` environment variable) will be used. + +Some environment variables or commandline flags can override the settings from +clouds.yaml. These are: + +- ``--domain-id`` (``OS_DOMAIN_ID``) +- ``--domain-name`` (``OS_DOMAIN_NAME``) +- ``--user-domain-id`` (``OS_USER_DOMAIN_ID``) +- ``--user-domain-name`` (``OS_USER_DOMAIN_NAME``) +- ``--project-domain-id`` (``OS_PROJECT_DOMAIN_ID``) +- ``--project-domain-name`` (``OS_PROJECT_DOMAIN_NAME``) +- ``--auth-token`` (``OS_AUTH_TOKEN``) +- ``--project-id`` (``OS_PROJECT_ID``) +- ``--project-name`` (``OS_PROJECT_NAME``) +- ``--tenant-id`` (``OS_TENANT_ID``) (deprecated for ``--project-id``) +- ``--tenant-name`` (``OS_TENANT_NAME``) (deprecated for ``--project-name``) + +Similarly, if one of the above settings is specified in ``clouds.yaml`` as +part of the ``auth`` section as well as the main section, the ``auth`` settings +will be overridden. For example in this config section, note that project is +specified multiple times: + +.. code-block:: yaml + + clouds: + mtvexx: + profile: https://vexxhost.com + auth: + username: mordred@inaugust.com + password: XXXXXXXXX + project_name: mylessfavoriteproject + project_id: 0bedab75-898c-4521-a038-0b4b71c41bed + region_name: ca-ymq-1 + project_name: myfavoriteproject + project_id: 2acf9403-25e8-479e-a3c6-d67540c424a4 + +In the above example, the ``project_id`` configuration values will be ignored +in favor of the ``project_name`` configuration values, and the higher-level +project will be chosen over the auth-specified project. So the actual project +used will be ```myfavoriteproject```. diff --git a/doc/source/user/config/index.rst b/doc/source/user/config/index.rst new file mode 100644 index 0000000..1163723 --- /dev/null +++ b/doc/source/user/config/index.rst @@ -0,0 +1,12 @@ +====================== +Using os-client-config +====================== + +.. toctree:: + :maxdepth: 2 + + configuration + using + vendor-support + network-config + reference diff --git a/doc/source/user/config/network-config.rst b/doc/source/user/config/network-config.rst new file mode 100644 index 0000000..ea85414 --- /dev/null +++ b/doc/source/user/config/network-config.rst @@ -0,0 +1,67 @@ +============== +Network Config +============== + +There are several different qualities that networks in OpenStack might have +that might not be able to be automatically inferred from the available +metadata. To help users navigate more complex setups, `os-client-config` +allows configuring a list of network metadata. + +.. code-block:: yaml + + clouds: + amazing: + networks: + - name: blue + routes_externally: true + - name: purple + routes_externally: true + default_interface: true + - name: green + routes_externally: false + - name: yellow + routes_externally: false + nat_destination: true + - name: chartreuse + routes_externally: false + routes_ipv6_externally: true + - name: aubergine + routes_ipv4_externally: false + routes_ipv6_externally: true + +Every entry must have a name field, which can hold either the name or the id +of the network. + +`routes_externally` is a boolean field that labels the network as handling +north/south traffic off of the cloud. In a public cloud this might be thought +of as the "public" network, but in private clouds it's possible it might +be an RFC1918 address. In either case, it's provides IPs to servers that +things not on the cloud can use. This value defaults to `false`, which +indicates only servers on the same network can talk to it. + +`routes_ipv4_externally` and `routes_ipv6_externally` are boolean fields to +help handle `routes_externally` in the case where a network has a split stack +with different values for IPv4 and IPv6. Either entry, if not given, defaults +to the value of `routes_externally`. + +`default_interface` is a boolean field that indicates that the network is the +one that programs should use. It defaults to false. An example of needing to +use this value is a cloud with two private networks, and where a user is +running ansible in one of the servers to talk to other servers on the private +network. Because both networks are private, there would otherwise be no way +to determine which one should be used for the traffic. There can only be one +`default_interface` per cloud. + +`nat_destination` is a boolean field that indicates which network floating +ips should be attached to. It defaults to false. Normally this can be inferred +by looking for a network that has subnets that have a gateway_ip. But it's +possible to have more than one network that satisfies that condition, so the +user might want to tell programs which one to pick. There can be only one +`nat_destination` per cloud. + +`nat_source` is a boolean field that indicates which network floating +ips should be requested from. It defaults to false. Normally this can be +inferred by looking for a network that is attached to a router. But it's +possible to have more than one network that satisfies that condition, so the +user might want to tell programs which one to pick. There can be only one +`nat_source` per cloud. diff --git a/doc/source/user/config/reference.rst b/doc/source/user/config/reference.rst new file mode 100644 index 0000000..b4909ad --- /dev/null +++ b/doc/source/user/config/reference.rst @@ -0,0 +1,14 @@ +============= +API Reference +============= + +.. module:: openstack.config + :synopsis: OpenStack client configuration + +.. autoclass:: openstack.config.OpenStackConfig + :members: + :inherited-members: + +.. autoclass:: openstack.config.cloud_region.CloudRegion + :members: + :inherited-members: diff --git a/doc/source/user/config/using.rst b/doc/source/user/config/using.rst new file mode 100644 index 0000000..2359de0 --- /dev/null +++ b/doc/source/user/config/using.rst @@ -0,0 +1,52 @@ +======================================== +Using openstack.config in an Application +======================================== + +Usage +----- + +The simplest and least useful thing you can do is: + +.. code-block:: python + + python -m openstack.config.loader + +Which will print out whatever if finds for your config. If you want to use +it from python, which is much more likely what you want to do, things like: + +Get a named cloud. + +.. code-block:: python + + import openstack.config + + cloud_region = openstack.config.OpenStackConfig().get_one( + 'internap', region_name='ams01') + print(cloud_region.name, cloud_region.region, cloud_region.config) + +Or, get all of the clouds. + +.. code-block:: python + + import openstack.config + + cloud_regions = openstack.config.OpenStackConfig().get_all() + for cloud_region in cloud_regions: + print(cloud_region.name, cloud_region.region, cloud_region.config) + +argparse +-------- + +If you're using `openstack.config` from a program that wants to process +command line options, there is a registration function to register the +arguments that both `openstack.config` and keystoneauth know how to deal +with - as well as a consumption argument. + +.. code-block:: python + + import argparse + + import openstack + + parser = argparse.ArgumentParser() + cloud = openstack.connect(options=parser) diff --git a/doc/source/user/config/vendor-support.rst b/doc/source/user/config/vendor-support.rst new file mode 100644 index 0000000..5e1ea39 --- /dev/null +++ b/doc/source/user/config/vendor-support.rst @@ -0,0 +1,348 @@ +============== +Vendor Support +============== + +OpenStack presents deployers with many options, some of which can expose +differences to end users. `os-client-config` tries its best to collect +information about various things a user would need to know. The following +is a text representation of the vendor related defaults `os-client-config` +knows about. + +Default Values +-------------- + +These are the default behaviors unless a cloud is configured differently. + +* Identity uses `password` authentication +* Identity API Version is 2 +* Image API Version is 2 +* Volume API Version is 2 +* Compute API Version is 2.1 +* Images must be in `qcow2` format +* Images are uploaded using PUT interface +* Public IPv4 is directly routable via DHCP from Neutron +* IPv6 is not provided +* Floating IPs are not required +* Floating IPs are provided by Neutron +* Security groups are provided by Neutron +* Vendor specific agents are not used + +AURO +---- + +https://api.auro.io:5000/v2.0 + +============== ================ +Region Name Location +============== ================ +van1 Vancouver, BC +============== ================ + +* Public IPv4 is provided via NAT with Neutron Floating IP + +Betacloud +--------- + +https://api-1.betacloud.de:5000 + +============== ================== +Region Name Location +============== ================== +betacloud-1 Karlsruhe, Germany +============== ================== + +* Identity API Version is 3 +* Images must be in `raw` format +* Public IPv4 is provided via NAT with Neutron Floating IP +* Volume API Version is 3 + +Catalyst +-------- + +https://api.cloud.catalyst.net.nz:5000/v2.0 + +============== ================ +Region Name Location +============== ================ +nz-por-1 Porirua, NZ +nz_wlg_2 Wellington, NZ +============== ================ + +* Identity API Version is 3 +* Compute API Version is 2 +* Images must be in `raw` format +* Volume API Version is 3 + +City Cloud +---------- + +https://%(region_name)s.citycloud.com:5000/v3/ + +============== ================ +Region Name Location +============== ================ +Buf1 Buffalo, NY +dx1 Dubai, UAE +Fra1 Frankfurt, DE +Kna1 Karlskrona, SE +Lon1 London, UK +Sto2 Stockholm, SE +tky1 Tokyo, JP +============== ================ + +* Identity API Version is 3 +* Public IPv4 is provided via NAT with Neutron Floating IP +* Volume API Version is 1 + +ConoHa +------ + +https://identity.%(region_name)s.conoha.io + +============== ================ +Region Name Location +============== ================ +tyo1 Tokyo, JP +sin1 Singapore +sjc1 San Jose, CA +============== ================ + +* Image upload is not supported + +DreamCompute +------------ + +https://iad2.dream.io:5000 + +============== ================ +Region Name Location +============== ================ +RegionOne Ashburn, VA +============== ================ + +* Identity API Version is 3 +* Images must be in `raw` format +* IPv6 is provided to every server + +Open Telekom Cloud +------------------ + +https://iam.%(region_name)s.otc.t-systems.com/v3 + +============== =================== +Region Name Location +============== =================== +eu-de Biere/Magdeburg, DE +eu-nl Amsterdam, NL +============== =================== + +* Identity API Version is 3 +* Public IPv4 is provided via NAT with Neutron Floating IP + +ELASTX +------ + +https://ops.elastx.cloud:5000/v3 + +============== ================ +Region Name Location +============== ================ +se-sto Stockholm, SE +============== ================ + +* Identity API Version is 3 +* Public IPv4 is provided via NAT with Neutron Floating IP + +Enter Cloud Suite +----------------- + +https://api.entercloudsuite.com/v2.0 + +============== ================ +Region Name Location +============== ================ +nl-ams1 Amsterdam, NL +it-mil1 Milan, IT +de-fra1 Frankfurt, DE +============== ================ + +* Compute API Version is 2 + +Fuga +---- + +https://identity.api.fuga.io:5000 + +============== ================ +Region Name Location +============== ================ +cystack Netherlands +============== ================ + +* Identity API Version is 3 +* Volume API Version is 3 + +Internap +-------- + +https://identity.api.cloud.inap.com/v2.0 + +============== ================ +Region Name Location +============== ================ +ams01 Amsterdam, NL +da01 Dallas, TX +nyj01 New York, NY +sin01 Singapore +sjc01 San Jose, CA +============== ================ + +* Floating IPs are not supported + +Limestone Networks +------------------ + +https://auth.cloud.lstn.net:5000/v3 + +============== ================== +Region Name Location +============== ================== +us-dfw-1 Dallas, TX +us-slc Salt Lake City, UT +============== ================== + +* Identity API Version is 3 +* Images must be in `raw` format +* IPv6 is provided to every server connected to the `Public Internet` network + +OVH +--- + +https://auth.cloud.ovh.net/v3 + +============== ================ +Region Name Location +============== ================ +BHS1 Beauharnois, QC +SBG1 Strassbourg, FR +GRA1 Gravelines, FR +============== ================ + +* Images may be in `raw` format. The `qcow2` default is also supported +* Floating IPs are not supported + +Rackspace +--------- + +https://identity.api.rackspacecloud.com/v2.0/ + +============== ================ +Region Name Location +============== ================ +DFW Dallas, TX +HKG Hong Kong +IAD Washington, D.C. +LON London, UK +ORD Chicago, IL +SYD Sydney, NSW +============== ================ + +* Database Service Type is `rax:database` +* Compute Service Name is `cloudServersOpenStack` +* Images must be in `vhd` format +* Images must be uploaded using the Glance Task Interface +* Floating IPs are not supported +* Public IPv4 is directly routable via static config by Nova +* IPv6 is provided to every server +* Security groups are not supported +* Uploaded Images need properties to not use vendor agent:: + :vm_mode: hvm + :xenapi_use_agent: False +* Block Storage API Version is 2 +* The Block Storage API supports version 2 but only version 1 is in + the catalog. The Block Storage endpoint is + https://{region_name}.blockstorage.api.rackspacecloud.com/v2/{project_id} +* While passwords are recommended for use, API keys do work as well. + The `rackspaceauth` python package must be installed, and then the following + can be added to clouds.yaml:: + + auth: + username: myusername + api_key: myapikey + auth_type: rackspace_apikey + +SWITCHengines +------------- + +https://keystone.cloud.switch.ch:5000/v3 + +============== ================ +Region Name Location +============== ================ +LS Lausanne, CH +ZH Zurich, CH +============== ================ + +* Identity API Version is 3 +* Compute API Version is 2 +* Images must be in `raw` format +* Volume API Version is 3 + +Ultimum +------- + +https://console.ultimum-cloud.com:5000/v2.0 + +============== ================ +Region Name Location +============== ================ +RegionOne Prague, CZ +============== ================ + +* Volume API Version is 1 + +UnitedStack +----------- + +https://identity.api.ustack.com/v3 + +============== ================ +Region Name Location +============== ================ +bj1 Beijing, CN +gd1 Guangdong, CN +============== ================ + +* Identity API Version is 3 +* Images must be in `raw` format +* Volume API Version is 1 + +VEXXHOST +-------- + +http://auth.vexxhost.net + +============== ================ +Region Name Location +============== ================ +ca-ymq-1 Montreal, QC +sjc1 Santa Clara, CA +============== ================ + +* DNS API Version is 1 +* Identity API Version is 3 +* Volume API Version is 3 + +Zetta +----- + +https://identity.api.zetta.io/v3 + +============== ================ +Region Name Location +============== ================ +no-osl1 Oslo, NO +============== ================ + +* DNS API Version is 2 +* Identity API Version is 3 diff --git a/doc/source/user/connection.rst b/doc/source/user/connection.rst new file mode 100644 index 0000000..21833c3 --- /dev/null +++ b/doc/source/user/connection.rst @@ -0,0 +1,26 @@ +Connection +========== +.. automodule:: openstack.connection + + from_config + ----------- + .. autofunction:: openstack.connection.from_config + +Connection Object +----------------- + +.. autoclass:: openstack.connection.Connection + :members: + :inherited-members: + + +Transitioning from Profile +-------------------------- + +Support exists for users coming from older releases of OpenStack SDK who have +been using the :class:`~openstack.profile.Profile` interface. + +.. toctree:: + :maxdepth: 1 + + transition_from_profile diff --git a/doc/source/user/examples b/doc/source/user/examples new file mode 120000 index 0000000..9f9d1de --- /dev/null +++ b/doc/source/user/examples @@ -0,0 +1 @@ +../../../examples \ No newline at end of file diff --git a/doc/source/user/exceptions.rst b/doc/source/user/exceptions.rst new file mode 100644 index 0000000..3e85f6f --- /dev/null +++ b/doc/source/user/exceptions.rst @@ -0,0 +1,15 @@ +Exceptions +========== + +openstacksdk provides a number of `exceptions`__ for commonly encountered +issues, such as missing API endpoints, various HTTP error codes, timeouts and +so forth. It is the responsibility of the calling application to handle these +exceptions appropriately. + +Available exceptions +-------------------- + +.. automodule:: openstack.exceptions + :members: + +.. __: https://docs.python.org/3/library/exceptions.html diff --git a/doc/source/user/guides/baremetal.rst b/doc/source/user/guides/baremetal.rst new file mode 100644 index 0000000..cbfd966 --- /dev/null +++ b/doc/source/user/guides/baremetal.rst @@ -0,0 +1,67 @@ +Using OpenStack Baremetal +========================= + +Before working with the Bare Metal service, you'll need to create a +connection to your OpenStack cloud by following the :doc:`connect` user +guide. This will provide you with the ``conn`` variable used in the examples +below. + +.. contents:: Table of Contents + :local: + +The primary resource of the Bare Metal service is the **node**. + +Below are a few usage examples. For a reference to all the available methods, +see :doc:`/user/proxies/baremetal`. + +CRUD operations +~~~~~~~~~~~~~~~ + +List Nodes +---------- + +A **node** is a bare metal machine. + +.. literalinclude:: ../examples/baremetal/list.py + :pyobject: list_nodes + +Full example: `baremetal resource list`_ + +Provisioning operations +~~~~~~~~~~~~~~~~~~~~~~~ + +Provisioning actions are the main way to manipulate the nodes. See `Bare Metal +service states documentation`_ for details. + +Manage and inspect Node +----------------------- + +*Managing* a node in the ``enroll`` provision state validates the management +(IPMI, Redfish, etc) credentials and moves the node to the ``manageable`` +state. *Managing* a node in the ``available`` state moves it to the +``manageable`` state. In this state additional actions, such as configuring +RAID or inspecting, are available. + +*Inspecting* a node detects its properties by either talking to its BMC or by +booting a special ramdisk. + +.. literalinclude:: ../examples/baremetal/provisioning.py + :pyobject: manage_and_inspect_node + +Full example: `baremetal provisioning`_ + +Provide Node +------------ + +*Providing* a node in the ``manageable`` provision state makes it available +for deployment. + +.. literalinclude:: ../examples/baremetal/provisioning.py + :pyobject: provide_node + +Full example: `baremetal provisioning`_ + + +.. _baremetal resource list: http://opendev.org/openstack/openstacksdk/src/branch/master/examples/baremetal/list.py +.. _baremetal provisioning: http://opendev.org/openstack/openstacksdk/src/branch/master/examples/baremetal/provisioning.py +.. _Bare Metal service states documentation: https://docs.openstack.org/ironic/latest/contributor/states.html diff --git a/doc/source/user/guides/block_storage.rst b/doc/source/user/guides/block_storage.rst new file mode 100644 index 0000000..8f2661d --- /dev/null +++ b/doc/source/user/guides/block_storage.rst @@ -0,0 +1,9 @@ +Using OpenStack Block Storage +============================= + +Before working with the Block Storage service, you'll need to create a +connection to your OpenStack cloud by following the :doc:`connect` user +guide. This will provide you with the ``conn`` variable used in the examples +below. + +.. TODO(thowe): Implement this guide diff --git a/doc/source/user/guides/clustering.rst b/doc/source/user/guides/clustering.rst new file mode 100644 index 0000000..af56db5 --- /dev/null +++ b/doc/source/user/guides/clustering.rst @@ -0,0 +1,37 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + + +========================== +Using OpenStack Clustering +========================== + +Before working with the Clustering service, you'll need to create a +connection to your OpenStack cloud by following the :doc:`connect` user guide. +This will provide you with the ``conn`` variable used by all examples in this +guide. + +The primary abstractions/resources of the Clustering service are: + +.. toctree:: + :maxdepth: 1 + + Profile Type <clustering/profile_type> + Profile <clustering/profile> + Cluster <clustering/cluster> + Node <clustering/node> + Policy Type <clustering/policy_type> + Policy <clustering/policy> + Receiver <clustering/receiver> + Action <clustering/action> + Event <clustering/event> diff --git a/doc/source/user/guides/clustering/action.rst b/doc/source/user/guides/clustering/action.rst new file mode 100644 index 0000000..1be15ec --- /dev/null +++ b/doc/source/user/guides/clustering/action.rst @@ -0,0 +1,47 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +==================== +Working with Actions +==================== + +An action is an abstraction of some logic that can be executed by a worker +thread. Most of the operations supported by Senlin are executed asynchronously, +which means they are queued into database and then picked up by certain worker +thread for execution. + + +List Actions +~~~~~~~~~~~~ + +To examine the list of actions: + +.. literalinclude:: ../../examples/clustering/action.py + :pyobject: list_actions + +When listing actions, you can specify the sorting option using the ``sort`` +parameter and you can do pagination using the ``limit`` and ``marker`` +parameters. + +Full example: `manage action`_ + + +Get Action +~~~~~~~~~~ + +To get a action based on its name or ID: + +.. literalinclude:: ../../examples/clustering/action.py + :pyobject: get_action + +.. _manage action: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/action.py diff --git a/doc/source/user/guides/clustering/cluster.rst b/doc/source/user/guides/clustering/cluster.rst new file mode 100644 index 0000000..6fd7986 --- /dev/null +++ b/doc/source/user/guides/clustering/cluster.rst @@ -0,0 +1,193 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +================= +Managing Clusters +================= + +Clusters are first-class citizens in Senlin service design. A cluster is +defined as a collection of homogeneous objects. The "homogeneous" here means +that the objects managed (aka. Nodes) have to be instantiated from the same +"profile type". + + +List Clusters +~~~~~~~~~~~~~ + +To examine the list of receivers: + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: list_cluster + +When listing clusters, you can specify the sorting option using the ``sort`` +parameter and you can do pagination using the ``limit`` and ``marker`` +parameters. + +Full example: `manage cluster`_ + + +Create Cluster +~~~~~~~~~~~~~~ + +When creating a cluster, you will provide a dictionary with keys and values +according to the cluster type referenced. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: create_cluster + +Optionally, you can specify a ``metadata`` keyword argument that contains some +key-value pairs to be associated with the cluster. + +Full example: `manage cluster`_ + + +Get Cluster +~~~~~~~~~~~ + +To get a cluster based on its name or ID: + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: get_cluster + +Full example: `manage cluster`_ + + +Find Cluster +~~~~~~~~~~~~ + +To find a cluster based on its name or ID: + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: find_cluster + +Full example: `manage cluster`_ + + +Update Cluster +~~~~~~~~~~~~~~ + +After a cluster is created, most of its properties are immutable. Still, you +can update a cluster's ``name`` and/or ``params``. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: update_cluster + +Full example: `manage cluster`_ + + +Delete Cluster +~~~~~~~~~~~~~~ + +A cluster can be deleted after creation, When there are nodes in the cluster, +the Senlin engine will launch a process to delete all nodes from the cluster +and destroy them before deleting the cluster object itself. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: delete_cluster + + +Add Nodes to Cluster +~~~~~~~~~~~~~~~~~~~~ + +Add some existing nodes into the specified cluster. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: add_nodes_to_cluster + + +Remove Nodes from Cluster +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Remove nodes from specified cluster. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: remove_nodes_from_cluster + + +Replace Nodes in Cluster +~~~~~~~~~~~~~~~~~~~~~~~~ + +Replace some existing nodes in the specified cluster. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: replace_nodes_in_cluster + + +Cluster Scale Out +~~~~~~~~~~~~~~~~~ + +Inflate the size of a cluster. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: scale_out_cluster + + +Cluster Scale In +~~~~~~~~~~~~~~~~ + +Shrink the size of a cluster. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: scale_out_cluster + + +Cluster Resize +~~~~~~~~~~~~~~ + +Resize of cluster. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: resize_cluster + + +Attach Policy to Cluster +~~~~~~~~~~~~~~~~~~~~~~~~ + +Once a policy is attached (bound) to a cluster, it will be +enforced when related actions are performed on that cluster, +unless the policy is (temporarily) disabled on the cluster + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: attach_policy_to_cluster + + +Detach Policy from Cluster +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Once a policy is attached to a cluster, it can be detached +from the cluster at user's request. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: detach_policy_from_cluster + + +Cluster Check +~~~~~~~~~~~~~ + +Check cluster health status, Cluster members can be check. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: check_cluster + + +Cluster Recover +~~~~~~~~~~~~~~~ + +To restore a specified cluster, members in the cluster will be checked. + +.. literalinclude:: ../../examples/clustering/cluster.py + :pyobject: recover_cluster + + +.. _manage cluster: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/cluster.py + diff --git a/doc/source/user/guides/clustering/event.rst b/doc/source/user/guides/clustering/event.rst new file mode 100644 index 0000000..da958e3 --- /dev/null +++ b/doc/source/user/guides/clustering/event.rst @@ -0,0 +1,47 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +=================== +Working with Events +=================== + +An event is a record generated during engine execution. Such an event +captures what has happened inside the senlin-engine. The senlin-engine service +generates event records when it is performing some actions or checking +policies. + + +List Events +~~~~~~~~~~~ + +To examine the list of events: + +.. literalinclude:: ../../examples/clustering/event.py + :pyobject: list_events + +When listing events, you can specify the sorting option using the ``sort`` +parameter and you can do pagination using the ``limit`` and ``marker`` +parameters. + +Full example: `manage event`_ + + +Get Event +~~~~~~~~~ + +To get a event based on its name or ID: + +.. literalinclude:: ../../examples/clustering/event.py + :pyobject: get_event + +.. _manage event: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/event.py diff --git a/doc/source/user/guides/clustering/node.rst b/doc/source/user/guides/clustering/node.rst new file mode 100644 index 0000000..99b5993 --- /dev/null +++ b/doc/source/user/guides/clustering/node.rst @@ -0,0 +1,120 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +============== +Managing Nodes +============== + +Node is a logical object managed by the Senlin service. A node can be a member +of at most one cluster at any time. A node can be an orphan node which means +it doesn't belong to any clusters. + + +List Nodes +~~~~~~~~~~ + +To examine the list of Nodes: + +.. literalinclude:: ../../examples/clustering/node.py + :pyobject: list_nodes + +When listing nodes, you can specify the sorting option using the ``sort`` +parameter and you can do pagination using the ``limit`` and ``marker`` +parameters. + +Full example: `manage node`_ + + +Create Node +~~~~~~~~~~~ + +When creating a node, you will provide a dictionary with keys and values +according to the node type referenced. + +.. literalinclude:: ../../examples/clustering/node.py + :pyobject: create_node + +Optionally, you can specify a ``metadata`` keyword argument that contains some +key-value pairs to be associated with the node. + +Full example: `manage node`_ + + +Get Node +~~~~~~~~ + +To get a node based on its name or ID: + +.. literalinclude:: ../../examples/clustering/node.py + :pyobject: get_node + +Full example: `manage node`_ + + +Find Node +~~~~~~~~~ + +To find a node based on its name or ID: + +.. literalinclude:: ../../examples/clustering/node.py + :pyobject: find_node + +Full example: `manage node`_ + + +Update Node +~~~~~~~~~~~ + +After a node is created, most of its properties are immutable. Still, you +can update a node's ``name`` and/or ``params``. + +.. literalinclude:: ../../examples/clustering/node.py + :pyobject: update_node + +Full example: `manage node`_ + + +Delete Node +~~~~~~~~~~~ + +A node can be deleted after creation, provided that it is not referenced +by any active clusters. If you attempt to delete a node that is still in +use, you will get an error message. + +.. literalinclude:: ../../examples/clustering/node.py + :pyobject: delete_node + +Full example: `manage node`_ + + +Check Node +~~~~~~~~~~ + +If the underlying physical resource is not healthy, the node will be set +to ERROR status. + +.. literalinclude:: ../../examples/clustering/node.py + :pyobject: check_node + +Full example: `manage node`_ + + +Recover Node +~~~~~~~~~~~~ + +To restore a specified node. + +.. literalinclude:: ../../examples/clustering/node.py + :pyobject: recover_node + +.. _manage node: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/node.py diff --git a/doc/source/user/guides/clustering/policy.rst b/doc/source/user/guides/clustering/policy.rst new file mode 100644 index 0000000..bf282b2 --- /dev/null +++ b/doc/source/user/guides/clustering/policy.rst @@ -0,0 +1,102 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +================= +Managing Policies +================= + +A **policy type** can be treated as the meta-type of a `Policy` object. A +registry of policy types is built when the Cluster service starts. When +creating a `Policy` object, you will indicate the policy type used in its +`spec` property. + + +List Policies +~~~~~~~~~~~~~ + +To examine the list of policies: + +.. literalinclude:: ../../examples/clustering/policy.py + :pyobject: list_policies + +When listing policies, you can specify the sorting option using the ``sort`` +parameter and you can do pagination using the ``limit`` and ``marker`` +parameters. + +Full example: `manage policy`_ + + +Create Policy +~~~~~~~~~~~~~ + +When creating a policy, you will provide a dictionary with keys and values +according to the policy type referenced. + +.. literalinclude:: ../../examples/clustering/policy.py + :pyobject: create_policy + +Optionally, you can specify a ``metadata`` keyword argument that contains some +key-value pairs to be associated with the policy. + +Full example: `manage policy`_ + + +Find Policy +~~~~~~~~~~~ + +To find a policy based on its name or ID: + +.. literalinclude:: ../../examples/clustering/policy.py + :pyobject: find_policy + +Full example: `manage policy`_ + + +Get Policy +~~~~~~~~~~ + +To get a policy based on its name or ID: + +.. literalinclude:: ../../examples/clustering/policy.py + :pyobject: get_policy + +Full example: `manage policy`_ + + +Update Policy +~~~~~~~~~~~~~ + +After a policy is created, most of its properties are immutable. Still, you +can update a policy's ``name`` and/or ``metadata``. + +.. literalinclude:: ../../examples/clustering/policy.py + :pyobject: update_policy + +The Cluster service doesn't allow updating the ``spec`` of a policy. The only +way to achieve that is to create a new policy. + +Full example: `manage policy`_ + + +Delete Policy +~~~~~~~~~~~~~ + +A policy can be deleted after creation, provided that it is not referenced +by any active clusters or nodes. If you attempt to delete a policy that is +still in use, you will get an error message. + +.. literalinclude:: ../../examples/clustering/policy.py + :pyobject: delete_policy + + +.. _manage policy: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/policy.py diff --git a/doc/source/user/guides/clustering/policy_type.rst b/doc/source/user/guides/clustering/policy_type.rst new file mode 100644 index 0000000..eb7bc62 --- /dev/null +++ b/doc/source/user/guides/clustering/policy_type.rst @@ -0,0 +1,45 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +========================= +Working with Policy Types +========================= + +A **policy** is a template that encodes the information needed for specifying +the rules that are checked/enforced before/after certain actions are performed +on a cluster. The rules are encoded in a property named ``spec``. + + +List Policy Types +~~~~~~~~~~~~~~~~~ + +To examine the known policy types: + +.. literalinclude:: ../../examples/clustering/policy_type.py + :pyobject: list_policy_types + +Full example: `manage policy type`_ + + +Get Policy Type +~~~~~~~~~~~~~~~ + +To retrieve the details about a policy type, you need to provide the name of +it. + +.. literalinclude:: ../../examples/clustering/policy_type.py + :pyobject: get_policy_type + +Full example: `manage policy type`_ + +.. _manage policy type: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/policy_type.py diff --git a/doc/source/user/guides/clustering/profile.rst b/doc/source/user/guides/clustering/profile.rst new file mode 100644 index 0000000..7913784 --- /dev/null +++ b/doc/source/user/guides/clustering/profile.rst @@ -0,0 +1,105 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +================= +Managing Profiles +================= + +A **profile type** can be treated as the meta-type of a `Profile` object. A +registry of profile types is built when the Cluster service starts. When +creating a `Profile` object, you will indicate the profile type used in its +`spec` property. + + +List Profiles +~~~~~~~~~~~~~ + +To examine the list of profiles: + +.. literalinclude:: ../../examples/clustering/profile.py + :pyobject: list_profiles + +When listing profiles, you can specify the sorting option using the ``sort`` +parameter and you can do pagination using the ``limit`` and ``marker`` +parameters. + +Full example: `manage profile`_ + + +Create Profile +~~~~~~~~~~~~~~ + +When creating a profile, you will provide a dictionary with keys and values +specified according to the profile type referenced. + +.. literalinclude:: ../../examples/clustering/profile.py + :pyobject: create_profile + +Optionally, you can specify a ``metadata`` keyword argument that contains some +key-value pairs to be associated with the profile. + +Full example: `manage profile`_ + + +Find Profile +~~~~~~~~~~~~ + +To find a profile based on its name or ID: + +.. literalinclude:: ../../examples/clustering/profile.py + :pyobject: find_profile + +The Cluster service doesn't allow updating the ``spec`` of a profile. The only +way to achieve that is to create a new profile. + +Full example: `manage profile`_ + + +Get Profile +~~~~~~~~~~~ + +To get a profile based on its name or ID: + +.. literalinclude:: ../../examples/clustering/profile.py + :pyobject: get_profile + +Full example: `manage profile`_ + + +Update Profile +~~~~~~~~~~~~~~ + +After a profile is created, most of its properties are immutable. Still, you +can update a profile's ``name`` and/or ``metadata``. + +.. literalinclude:: ../../examples/clustering/profile.py + :pyobject: update_profile + +The Cluster service doesn't allow updating the ``spec`` of a profile. The only +way to achieve that is to create a new profile. + +Full example: `manage profile`_ + + +Delete Profile +~~~~~~~~~~~~~~ + +A profile can be deleted after creation, provided that it is not referenced +by any active clusters or nodes. If you attempt to delete a profile that is +still in use, you will get an error message. + +.. literalinclude:: ../../examples/clustering/profile.py + :pyobject: delete_profile + + +.. _manage profile: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/profile.py diff --git a/doc/source/user/guides/clustering/profile_type.rst b/doc/source/user/guides/clustering/profile_type.rst new file mode 100644 index 0000000..4f8d364 --- /dev/null +++ b/doc/source/user/guides/clustering/profile_type.rst @@ -0,0 +1,44 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +========================== +Working with Profile Types +========================== + +A **profile** is a template used to create and manage nodes, i.e. objects +exposed by other OpenStack services. A profile encodes the information needed +for node creation in a property named ``spec``. + + +List Profile Types +~~~~~~~~~~~~~~~~~~ + +To examine the known profile types: + +.. literalinclude:: ../../examples/clustering/profile_type.py + :pyobject: list_profile_types + +Full example: `manage profile type`_ + + +Get Profile Type +~~~~~~~~~~~~~~~~ + +To get the details about a profile type, you need to provide the name of it. + +.. literalinclude:: ../../examples/clustering/profile_type.py + :pyobject: get_profile_type + +Full example: `manage profile type`_ + +.. _manage profile type: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/profile_type.py diff --git a/doc/source/user/guides/clustering/receiver.rst b/doc/source/user/guides/clustering/receiver.rst new file mode 100644 index 0000000..c3c71dc --- /dev/null +++ b/doc/source/user/guides/clustering/receiver.rst @@ -0,0 +1,100 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +================== +Managing Receivers +================== + +Receivers are the event sinks associated to senlin clusters. When certain +events (or alarms) are seen by a monitoring software, the software can +notify the senlin clusters of those events (or alarms). When senlin receives +those notifications, it can automatically trigger some predefined operations +with preset parameter values. + + +List Receivers +~~~~~~~~~~~~~~ + +To examine the list of receivers: + +.. literalinclude:: ../../examples/clustering/receiver.py + :pyobject: list_receivers + +When listing receivers, you can specify the sorting option using the ``sort`` +parameter and you can do pagination using the ``limit`` and ``marker`` +parameters. + +Full example: `manage receiver`_ + + +Create Receiver +~~~~~~~~~~~~~~~ + +When creating a receiver, you will provide a dictionary with keys and values +according to the receiver type referenced. + +.. literalinclude:: ../../examples/clustering/receiver.py + :pyobject: create_receiver + +Optionally, you can specify a ``metadata`` keyword argument that contains some +key-value pairs to be associated with the receiver. + +Full example: `manage receiver`_ + + +Get Receiver +~~~~~~~~~~~~ + +To get a receiver based on its name or ID: + +.. literalinclude:: ../../examples/clustering/receiver.py + :pyobject: get_receiver + +Full example: `manage receiver`_ + + +Find Receiver +~~~~~~~~~~~~~ + +To find a receiver based on its name or ID: + +.. literalinclude:: ../../examples/clustering/receiver.py + :pyobject: find_receiver + +Full example: `manage receiver`_ + + +Update Receiver +~~~~~~~~~~~~~~~ + +After a receiver is created, most of its properties are immutable. Still, you +can update a receiver's ``name`` and/or ``params``. + +.. literalinclude:: ../../examples/clustering/receiver.py + :pyobject: update_receiver + +Full example: `manage receiver`_ + + +Delete Receiver +~~~~~~~~~~~~~~~ + +A receiver can be deleted after creation, provided that it is not referenced +by any active clusters. If you attempt to delete a receiver that is still in +use, you will get an error message. + +.. literalinclude:: ../../examples/clustering/receiver.py + :pyobject: delete_receiver + + +.. _manage receiver: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/clustering/receiver.py diff --git a/doc/source/user/guides/compute.rst b/doc/source/user/guides/compute.rst new file mode 100644 index 0000000..bac8a10 --- /dev/null +++ b/doc/source/user/guides/compute.rst @@ -0,0 +1,89 @@ +Using OpenStack Compute +======================= + +Before working with the Compute service, you'll need to create a connection +to your OpenStack cloud by following the :doc:`connect` user guide. This will +provide you with the ``conn`` variable used in the examples below. + +.. contents:: Table of Contents + :local: + +The primary resource of the Compute service is the server. + +List Servers +------------ + +A **server** is a virtual machine that provides access to a compute instance +being run by your cloud provider. + +.. literalinclude:: ../examples/compute/list.py + :pyobject: list_servers + +Full example: `compute resource list`_ + +List Images +----------- + +An **image** is the operating system you want to use for your server. + +.. literalinclude:: ../examples/compute/list.py + :pyobject: list_images + +Full example: `compute resource list`_ + +List Flavors +------------ + +A **flavor** is the resource configuration for a server. Each flavor is a +unique combination of disk, memory, vCPUs, and network bandwidth. + +.. literalinclude:: ../examples/compute/list.py + :pyobject: list_flavors + +Full example: `compute resource list`_ + +List Networks +------------- + +A **network** provides connectivity to servers. + +.. literalinclude:: ../examples/network/list.py + :pyobject: list_networks + +Full example: `network resource list`_ + +Create Key Pair +--------------- + +A **key pair** is the public key and private key of +`public–key cryptography`_. They are used to encrypt and decrypt login +information when connecting to your server. + +.. literalinclude:: ../examples/compute/create.py + :pyobject: create_keypair + +Full example: `compute resource create`_ + +Create Server +------------- + +At minimum, a server requires a name, an image, a flavor, and a network on +creation. You can discover the names and IDs of these attributes by listing +them as above and then using the find methods to get the appropriate +resources. + +Ideally you'll also create a server using a keypair so you can login to that +server with the private key. + +Servers take time to boot so we call ``wait_for_server`` to wait +for it to become active. + +.. literalinclude:: ../examples/compute/create.py + :pyobject: create_server + +Full example: `compute resource create`_ + +.. _compute resource list: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/compute/list.py +.. _network resource list: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/network/list.py +.. _compute resource create: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/compute/create.py +.. _public–key cryptography: https://en.wikipedia.org/wiki/Public-key_cryptography diff --git a/doc/source/user/guides/connect.rst b/doc/source/user/guides/connect.rst new file mode 100644 index 0000000..5630bbc --- /dev/null +++ b/doc/source/user/guides/connect.rst @@ -0,0 +1,32 @@ +Connect +======= + +In order to work with an OpenStack cloud you first need to create a +:class:`~openstack.connection.Connection` to it using your credentials. A +:class:`~openstack.connection.Connection` can be +created in 3 ways, using the class itself, :ref:`config-clouds-yaml`, or +:ref:`config-environment-variables`. It is recommended to always use +:ref:`config-clouds-yaml` as the same config can be used across tools and +languages. + +Create Connection +----------------- + +To create a :class:`~openstack.connection.Connection` instance, use the +:func:`~openstack.connect` factory function. + +.. literalinclude:: ../examples/connect.py + :pyobject: create_connection + +Full example at `connect.py <https://opendev.org/openstack/openstacksdk/src/branch/master/examples/connect.py>`_ + +.. note:: To enable logging, see the :doc:`logging` user guide. + +Next +---- +Now that you can create a connection, continue with the :ref:`user_guides` +to work with an OpenStack service. + +.. TODO(shade) Update the text here and consolidate with the old + os-client-config docs so that we have a single and consistent explanation + of the envvars cloud, etc. diff --git a/doc/source/user/guides/connect_from_config.rst b/doc/source/user/guides/connect_from_config.rst new file mode 100644 index 0000000..0e0b457 --- /dev/null +++ b/doc/source/user/guides/connect_from_config.rst @@ -0,0 +1,72 @@ +Connect From Config +=================== + +In order to work with an OpenStack cloud you first need to create a +:class:`~openstack.connection.Connection` to it using your credentials. A +:class:`~openstack.connection.Connection` can be +created in 3 ways, using the class itself (see :doc:`connect`), a file, or +environment variables as illustrated below. The SDK uses +`os-client-config <https://opendev.org/openstack/os-client-config>`_ +to handle the configuration. + +Create Connection From A File +----------------------------- + +Default Location +**************** + +To create a connection from a file you need a YAML file to contain the +configuration. + +.. literalinclude:: ../../contributor/clouds.yaml + :language: yaml + +To use a configuration file called ``clouds.yaml`` in one of the default +locations: + +* Current Directory +* ~/.config/openstack +* /etc/openstack + +call :py:func:`~openstack.connection.from_config`. The ``from_config`` +function takes three optional arguments: + +* **cloud_name** allows you to specify a cloud from your ``clouds.yaml`` file. +* **cloud_config** allows you to pass in an existing + ``openstack.config.loader.OpenStackConfig``` object. +* **options** allows you to specify a namespace object with options to be + added to the cloud config. + +.. literalinclude:: ../examples/connect.py + :pyobject: Opts + +.. literalinclude:: ../examples/connect.py + :pyobject: create_connection_from_config + +.. literalinclude:: ../examples/connect.py + :pyobject: create_connection_from_args + +.. note:: To enable logging, set ``debug=True`` in the ``options`` object. + +User Defined Location +********************* + +To use a configuration file in a user defined location set the +environment variable ``OS_CLIENT_CONFIG_FILE`` to the +absolute path of a file.:: + + export OS_CLIENT_CONFIG_FILE=/path/to/my/config/my-clouds.yaml + +and call :py:func:`~openstack.connection.from_config` with the **cloud_name** +of the cloud configuration to use, . + +.. Create Connection From Environment Variables + -------------------------------------------- + + TODO(etoews): Document when https://storyboard.openstack.org/#!/story/1489617 + is fixed. + +Next +---- +Now that you can create a connection, continue with the :ref:`user_guides` +for an OpenStack service. diff --git a/doc/source/user/guides/database.rst b/doc/source/user/guides/database.rst new file mode 100644 index 0000000..44256b3 --- /dev/null +++ b/doc/source/user/guides/database.rst @@ -0,0 +1,8 @@ +Using OpenStack Database +======================== + +Before working with the Database service, you'll need to create a connection +to your OpenStack cloud by following the :doc:`connect` user guide. This will +provide you with the ``conn`` variable used in the examples below. + +.. TODO(thowe): Implement this guide diff --git a/doc/source/user/guides/dns.rst b/doc/source/user/guides/dns.rst new file mode 100644 index 0000000..c2d2680 --- /dev/null +++ b/doc/source/user/guides/dns.rst @@ -0,0 +1,18 @@ +Using OpenStack DNS +=================== + +Before working with the DNS service, you'll need to create a connection +to your OpenStack cloud by following the :doc:`connect` user guide. This will +provide you with the ``conn`` variable used in the examples below. + +.. TODO(gtema): Implement this guide + +List Zones +---------- + +.. literalinclude:: ../examples/dns/list.py + :pyobject: list_zones + +Full example: `dns resource list`_ + +.. _dns resource list: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/dns/list.py diff --git a/doc/source/user/guides/identity.rst b/doc/source/user/guides/identity.rst new file mode 100644 index 0000000..9d94441 --- /dev/null +++ b/doc/source/user/guides/identity.rst @@ -0,0 +1,111 @@ +Using OpenStack Identity +======================== + +Before working with the Identity service, you'll need to create a connection +to your OpenStack cloud by following the :doc:`connect` user guide. This will +provide you with the ``conn`` variable used in the examples below. + +The OpenStack Identity service is the default identity management system for +OpenStack. The Identity service authentication process confirms the identity +of a user and an incoming request by validating a set of credentials that the +user supplies. Initially, these credentials are a user name and password or a +user name and API key. When the Identity service validates user credentials, +it issues an authentication token that the user provides in subsequent +requests. An authentication token is an alpha-numeric text string that enables +access to OpenStack APIs and resources. A token may be revoked at any time and +is valid for a finite duration. + +List Users +---------- +A **user** is a digital representation of a person, system, or service that +uses OpenStack cloud services. The Identity service validates that incoming +requests are made by the user who claims to be making the call. Users have +a login and can access resources by using assigned tokens. Users can be +directly assigned to a particular project and behave as if they are contained +in that project. + +.. literalinclude:: ../examples/identity/list.py + :pyobject: list_users + +Full example: `identity resource list`_ + +List Credentials +---------------- +**Credentials** are data that confirms the identity of the user. For example, +user name and password, user name and API key, or an authentication token that +the Identity service provides. + +.. literalinclude:: ../examples/identity/list.py + :pyobject: list_credentials + +Full example: `identity resource list`_ + +List Projects +------------- +A **project** is a container that groups or isolates resources or identity +objects. + +.. literalinclude:: ../examples/identity/list.py + :pyobject: list_projects + +Full example: `identity resource list`_ + +List Domains +------------ +A **domain** is an Identity service API v3 entity and represents a collection +of projects and users that defines administrative boundaries for the management +of Identity entities. Users can be granted the administrator role for a domain. +A domain administrator can create projects, users, and groups in a domain and +assign roles to users and groups in a domain. + +.. literalinclude:: ../examples/identity/list.py + :pyobject: list_domains + +Full example: `identity resource list`_ + +List Groups +----------- +A **group** is an Identity service API v3 entity and represents a collection of +users that are owned by a domain. A group role granted to a domain or project +applies to all users in the group. Adding users to, or removing users from, a +group respectively grants, or revokes, their role and authentication to the +associated domain or project. + +.. literalinclude:: ../examples/identity/list.py + :pyobject: list_groups + +Full example: `identity resource list`_ + +List Services +------------- +A **service** is an OpenStack service, such as Compute, Object Storage, or +Image service, that provides one or more endpoints through which users can +access resources and perform operations. + +.. literalinclude:: ../examples/identity/list.py + :pyobject: list_services + +Full example: `identity resource list`_ + +List Endpoints +-------------- +An **endpoint** is a network-accessible address, usually a URL, through which +you can access a service. + +.. literalinclude:: ../examples/identity/list.py + :pyobject: list_endpoints + +Full example: `identity resource list`_ + +List Regions +------------ +A **region** is an Identity service API v3 entity and represents a general +division in an OpenStack deployment. You can associate zero or more +sub-regions with a region to make a tree-like structured hierarchy. + +.. literalinclude:: ../examples/identity/list.py + :pyobject: list_regions + +Full example: `identity resource list`_ + +.. _identity resource list: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/identity/list.py diff --git a/doc/source/user/guides/image.rst b/doc/source/user/guides/image.rst new file mode 100644 index 0000000..9065a49 --- /dev/null +++ b/doc/source/user/guides/image.rst @@ -0,0 +1,97 @@ +Using OpenStack Image +===================== + +Before working with the Image service, you'll need to create a connection +to your OpenStack cloud by following the :doc:`connect` user guide. This will +provide you with the ``conn`` variable used in the examples below. + +The primary resource of the Image service is the image. + +List Images +----------- + +An **image** is a collection of files for a specific operating system +that you use to create or rebuild a server. OpenStack provides +`pre-built images <http://docs.openstack.org/image-guide/obtain-images.html>`_. +You can also create custom images, or snapshots, from servers that you have +launched. Images come in different formats and are sometimes called virtual +machine images. + +.. literalinclude:: ../examples/image/list.py + :pyobject: list_images + +Full example: `image resource list`_ + +Create Image +------------ + +Create an image by uploading its data and setting its attributes. + +.. literalinclude:: ../examples/image/create.py + :pyobject: upload_image + +Full example: `image resource create`_ + +Create Image via interoperable image import process +--------------------------------------------------- + +Create an image then use interoperable image import process to download data +from a web URL. + +For more information about the image import process, please check +`interoperable image import`_ + +.. literalinclude:: ../examples/image/import.py + :pyobject: import_image + +Full example: `image resource import`_ + +.. _download_image-stream-true: + +Downloading an Image with stream=True +------------------------------------- + +As images are often very large pieces of data, storing their entire contents +in the memory of your application can be less than desirable. A more +efficient method may be to iterate over a stream of the response data. + +By choosing to stream the response content, you determine the ``chunk_size`` +that is appropriate for your needs, meaning only that many bytes of data are +read for each iteration of the loop until all data has been consumed. +See :meth:`requests.Response.iter_content` for more information. + +When you choose to stream an image download, openstacksdk is no longer +able to compute the checksum of the response data for you. This example +shows how you might do that yourself, in a very similar manner to how +the library calculates checksums for non-streamed responses. + +.. literalinclude:: ../examples/image/download.py + :pyobject: download_image_stream + +Downloading an Image with stream=False +-------------------------------------- + +If you wish to download an image's contents all at once and to memory, +simply set ``stream=False``, which is the default. + +.. literalinclude:: ../examples/image/download.py + :pyobject: download_image + +Full example: `image resource download`_ + +Delete Image +------------ + +Delete an image. + +.. literalinclude:: ../examples/image/delete.py + :pyobject: delete_image + +Full example: `image resource delete`_ + +.. _image resource create: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/image/create.py +.. _image resource import: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/image/import.py +.. _image resource delete: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/image/delete.py +.. _image resource list: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/image/list.py +.. _image resource download: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/image/download.py +.. _interoperable image import: https://docs.openstack.org/glance/latest/admin/interoperable-image-import.html diff --git a/doc/source/user/guides/intro.rst b/doc/source/user/guides/intro.rst new file mode 100644 index 0000000..ac53905 --- /dev/null +++ b/doc/source/user/guides/intro.rst @@ -0,0 +1,102 @@ +=============== +Getting started +=============== + +openstacksdk aims to talk to any OpenStack cloud. To do this, it requires a +configuration file. openstacksdk favours ``clouds.yaml`` files, but can also +use environment variables. The ``clouds.yaml`` file should be provided by your +cloud provider or deployment tooling. An example: + +.. code-block:: yaml + + clouds: + mordred: + region_name: Dallas + auth: + username: 'mordred' + password: XXXXXXX + project_name: 'demo' + auth_url: 'https://identity.example.com' + +More information on configuring openstacksdk can be found in +:doc:`/user/config/configuration`. + +Given sufficient configuration, you can use openstacksdk to interact with your +cloud. openstacksdk consists of three layers. Most users will make use of the +*proxy* layer. Using the above ``clouds.yaml``, consider listing servers: + +.. code-block:: python + + import openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + # Initialize connection + conn = openstack.connect(cloud='mordred') + + # List the servers + for server in conn.compute.servers(): + print(server.to_dict()) + +openstacksdk also contains a higher-level *cloud* layer based on logical +operations: + +.. code-block:: python + + import openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + # Initialize connection + conn = openstack.connect(cloud='mordred') + + # List the servers + for server in conn.list_servers(): + print(server.to_dict()) + +The benefit of this layer is mostly seen in more complicated operations that +take multiple steps and where the steps vary across providers. For example: + +.. code-block:: python + + import openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + # Initialize connection + conn = openstack.connect(cloud='mordred') + + # Upload an image to the cloud + image = conn.create_image( + 'ubuntu-trusty', filename='ubuntu-trusty.qcow2', wait=True) + + # Find a flavor with at least 512M of RAM + flavor = conn.get_flavor_by_ram(512) + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public IP address for it. + conn.create_server( + 'my-server', image=image, flavor=flavor, wait=True, auto_ip=True) + +Finally, there is the low-level *resource* layer. This provides support for the +basic CRUD operations supported by REST APIs and is the base building block for +the other layers. You typically will not need to use this directly: + +.. code-block:: python + + import openstack + import openstack.config.loader + import openstack.compute.v2.server + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + # Initialize connection + conn = openstack.connect(cloud='mordred') + + # List the servers + for server in openstack.compute.v2.server.Server.list(session=conn.compute): + print(server.to_dict()) diff --git a/doc/source/user/guides/key_manager.rst b/doc/source/user/guides/key_manager.rst new file mode 100644 index 0000000..1efd12b --- /dev/null +++ b/doc/source/user/guides/key_manager.rst @@ -0,0 +1,56 @@ +Using OpenStack Key Manager +=========================== + +Before working with the Key Manager service, you'll need to create a +connection to your OpenStack cloud by following the :doc:`connect` user +guide. This will provide you with the ``conn`` variable used in the examples +below. + +.. contents:: Table of Contents + :local: + +.. note:: Some interactions with the Key Manager service differ from that + of other services in that resources do not have a proper ``id`` parameter, + which is necessary to make some calls. Instead, resources have a separately + named id attribute, e.g., the Secret resource has ``secret_id``. + + The examples below outline when to pass in those id values. + +Create a Secret +--------------- + +The Key Manager service allows you to create new secrets by passing the +attributes of the :class:`~openstack.key_manager.v1.secret.Secret` to the +:meth:`~openstack.key_manager.v1._proxy.Proxy.create_secret` method. + +.. literalinclude:: ../examples/key_manager/create.py + :pyobject: create_secret + +List Secrets +------------ + +Once you have stored some secrets, they are available for you to list +via the :meth:`~openstack.key_manager.v1._proxy.Proxy.secrets` method. +This method returns a generator, which yields each +:class:`~openstack.key_manager.v1.secret.Secret`. + +.. literalinclude:: ../examples/key_manager/list.py + :pyobject: list_secrets + +The :meth:`~openstack.key_manager.v1._proxy.Proxy.secrets` method can +also make more advanced queries to limit the secrets that are returned. + +.. literalinclude:: ../examples/key_manager/list.py + :pyobject: list_secrets_query + +Get Secret Payload +------------------ + +Once you have received a :class:`~openstack.key_manager.v1.secret.Secret`, +you can obtain the payload for it by passing the secret's id value to +the :meth:`~openstack.key_manager.v1._proxy.Proxy.secrets` method. +Use the :data:`~openstack.key_manager.v1.secret.Secret.secret_id` attribute +when making this request. + +.. literalinclude:: ../examples/key_manager/get.py + :pyobject: get_secret_payload diff --git a/doc/source/user/guides/logging.rst b/doc/source/user/guides/logging.rst new file mode 100644 index 0000000..6c8a27e --- /dev/null +++ b/doc/source/user/guides/logging.rst @@ -0,0 +1,106 @@ +======= +Logging +======= + +.. note:: TODO(shade) This document is written from a shade POV. It needs to + be combined with the existing logging guide, but also the logging + systems need to be rationalized. + +`openstacksdk` uses `Python Logging`_. As `openstacksdk` is a library, it does +not configure logging handlers automatically, expecting instead for that to be +the purview of the consuming application. + +Simple Usage +------------ + +For consumers who just want to get a basic logging setup without thinking +about it too deeply, there is a helper method. If used, it should be called +before any other openstacksdk functionality. + +.. autofunction:: openstack.enable_logging + +.. code-block:: python + + import openstack + openstack.enable_logging() + +The ``stream`` parameter controls the stream where log message are written to. +It defaults to `sys.stdout` which will result in log messages being written +to STDOUT. It can be set to another output stream, or to ``None`` to disable +logging to the console. + +The ``path`` parameter sets up logging to log to a file. By default, if +``path`` is given and ``stream`` is not, logging will only go to ``path``. + +You can combine the ``path`` and ``stream`` parameters to log to both places +simultaneously. + +To log messages to a file called ``openstack.log`` and the console on +``stdout``: + +.. code-block:: python + + import sys + import openstack + + openstack.enable_logging( + debug=True, path='openstack.log', stream=sys.stdout) + + +`openstack.enable_logging` also sets up a few other loggers and +squelches some warnings or log messages that are otherwise uninteresting or +unactionable by an openstacksdk user. + +Advanced Usage +-------------- + +`openstacksdk` logs to a set of different named loggers. + +Most of the logging is set up to log to the root ``openstack`` logger. +There are additional sub-loggers that are used at times, primarily so that a +user can decide to turn on or off a specific type of logging. They are listed +below. + +openstack.config + Issues pertaining to configuration are logged to the ``openstack.config`` + logger. + +openstack.iterate_timeout + When `openstacksdk` needs to poll a resource, it does so in a loop that waits + between iterations and ultimately times out. The + ``openstack.iterate_timeout`` logger emits messages for each iteration + indicating it is waiting and for how long. These can be useful to see for + long running tasks so that one can know things are not stuck, but can also + be noisy. + +openstack.fnmatch + `openstacksdk` will try to use `fnmatch`_ on given `name_or_id` arguments. + It's a best effort attempt, so pattern misses are logged to + ``openstack.fnmatch``. A user may not be intending to use an fnmatch + pattern - such as if they are trying to find an image named + ``Fedora 24 [official]``, so these messages are logged separately. + +.. _fnmatch: https://pymotw.com/2/fnmatch/ + +HTTP Tracing +------------ + +HTTP Interactions are handled by `keystoneauth`_. If you want to enable HTTP +tracing while using openstacksdk and are not using `openstack.enable_logging`, +set the log level of the ``keystoneauth`` logger to ``DEBUG``. + +For more information see https://docs.openstack.org/keystoneauth/latest/using-sessions.html#logging + +.. _keystoneauth: https://docs.openstack.org/keystoneauth/latest/ + +Python Logging +-------------- + +Python logging is a standard feature of Python and is documented fully in the +Python Documentation, which varies by version of Python. + +For more information on Python Logging for Python v2, see +https://docs.python.org/2/library/logging.html. + +For more information on Python Logging for Python v3, see +https://docs.python.org/3/library/logging.html. diff --git a/doc/source/user/guides/message.rst b/doc/source/user/guides/message.rst new file mode 100644 index 0000000..ac30f88 --- /dev/null +++ b/doc/source/user/guides/message.rst @@ -0,0 +1,8 @@ +Using OpenStack Message +======================= + +Before working with the Message service, you'll need to create a connection +to your OpenStack cloud by following the :doc:`connect` user guide. This will +provide you with the ``conn`` variable used in the examples below. + +.. TODO(briancurtin): Implement this guide diff --git a/doc/source/user/guides/network.rst b/doc/source/user/guides/network.rst new file mode 100644 index 0000000..fc5f4ac --- /dev/null +++ b/doc/source/user/guides/network.rst @@ -0,0 +1,142 @@ +Using OpenStack Network +======================= + +Before working with the Network service, you'll need to create a connection +to your OpenStack cloud by following the :doc:`connect` user guide. This will +provide you with the ``conn`` variable used in the examples below. + +.. contents:: Table of Contents + :local: + +The primary resource of the Network service is the network. + +List Networks +------------- + +A **network** is an isolated `Layer 2 <https://en.wikipedia.org/wiki/Data_link_layer>`_ +networking segment. There are two types of networks, project and provider +networks. Project networks are fully isolated and are not shared with other +projects. Provider networks map to existing physical networks in the data +center and provide external network access for servers. Only an OpenStack +administrator can create provider networks. Networks can be connected via +routers. + +.. literalinclude:: ../examples/network/list.py + :pyobject: list_networks + +Full example: `network resource list`_ + +List Subnets +------------ + +A **subnet** is a block of IP addresses and associated configuration state. +Subnets are used to allocate IP addresses when new ports are created on a +network. + +.. literalinclude:: ../examples/network/list.py + :pyobject: list_subnets + +Full example: `network resource list`_ + +List Ports +---------- + +A **port** is a connection point for attaching a single device, such as the +`NIC <https://en.wikipedia.org/wiki/Network_interface_controller>`_ +of a server, to a network. The port also describes the associated network +configuration, such as the `MAC <https://en.wikipedia.org/wiki/Media_access_control>`_ +and IP addresses to be used on that port. + +.. literalinclude:: ../examples/network/list.py + :pyobject: list_ports + +Full example: `network resource list`_ + +List Security Groups +-------------------- + +A **security group** acts as a virtual firewall for servers. It is a container +for security group rules which specify the type of network traffic and +direction that is allowed to pass through a port. + +.. literalinclude:: ../examples/network/list.py + :pyobject: list_security_groups + +Full example: `network resource list`_ + +List Routers +------------ + +A **router** is a logical component that forwards data packets between +networks. It also provides +`Layer 3 <https://en.wikipedia.org/wiki/Network_layer>`_ and +`NAT <https://en.wikipedia.org/wiki/Network_address_translation>`_ +forwarding to provide external network access for servers on project networks. + +.. literalinclude:: ../examples/network/list.py + :pyobject: list_routers + +Full example: `network resource list`_ + +List Network Agents +------------------- + +A **network agent** is a plugin that handles various tasks used to +implement virtual networks. These agents include neutron-dhcp-agent, +neutron-l3-agent, neutron-metering-agent, and neutron-lbaas-agent, +among others. + +.. literalinclude:: ../examples/network/list.py + :pyobject: list_network_agents + +Full example: `network resource list`_ + +Create Network +-------------- + +Create a project network and subnet. This network can be used when creating +a server and allows the server to communicate with others servers on the +same project network. + +.. literalinclude:: ../examples/network/create.py + :pyobject: create_network + +Full example: `network resource create`_ + +Open a Port +----------- + +When creating a security group for a network, you will need to open certain +ports to allow communication via them. For example, you may need to enable +HTTPS access on port 443. + +.. literalinclude:: ../examples/network/security_group_rules.py + :pyobject: open_port + +Full example: `network security group create`_ + +Accept Pings +------------ + +In order to ping a machine on your network within a security group, +you will need to create a rule to allow inbound ICMP packets. + +.. literalinclude:: ../examples/network/security_group_rules.py + :pyobject: allow_ping + +Full example: `network security group create`_ + +Delete Network +-------------- + +Delete a project network and its subnets. + +.. literalinclude:: ../examples/network/delete.py + :pyobject: delete_network + +Full example: `network resource delete`_ + +.. _network resource create: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/network/create.py +.. _network resource delete: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/network/delete.py +.. _network resource list: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/network/list.py +.. _network security group create: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/network/security_group_rules.py diff --git a/doc/source/user/guides/object_store.rst b/doc/source/user/guides/object_store.rst new file mode 100644 index 0000000..094bac5 --- /dev/null +++ b/doc/source/user/guides/object_store.rst @@ -0,0 +1,211 @@ +Using OpenStack Object Store +============================ + +Before working with the Object Store service, you'll need to create a +connection to your OpenStack cloud by following the :doc:`connect` user +guide. This will provide you with the ``conn`` variable used in the examples +below. + +.. contents:: Table of Contents + :local: + +The primary resources of the Object Store service are containers and objects. + +Working with Containers +----------------------- + +Listing Containers +****************** + +To list existing containers, use the +:meth:`~openstack.object_store.v1._proxy.Proxy.containers` method. :: + + >>> for cont in conn.object_store.containers(): + ... print cont + ... + openstack.object_store.v1.container.Container: {u'count': 5, + u'bytes': 500, u'name': u'my container'} + openstack.object_store.v1.container.Container: {u'count': 0, + u'bytes': 0, u'name': u'empty container'} + openstack.object_store.v1.container.Container: {u'count': 100, + u'bytes': 1000000, u'name': u'another container'} + +The ``containers`` method returns a generator which yields +:class:`~openstack.object_store.v1.container.Container` objects. It handles +pagination for you, which can be adjusted via the ``limit`` argument. +By default, the ``containers`` method will yield as many containers as the +service will return, and it will continue requesting until it receives +no more. :: + + >>> for cont in conn.object_store.containers(limit=500): + ... print(cont) + ... + <500 Containers> + ... another request transparently made to the Object Store service + <500 more Containers> + ... + +Creating Containers +******************* + +To create a container, use the +:meth:`~openstack.object_store.v1._proxy.Proxy.create_container` method. :: + + >>> cont = conn.object_store.create_container(name="new container") + >>> cont + openstack.object_store.v1.container.Container: {'name': u'new container'} + +Working with Container Metadata +******************************* + +To get the metadata for a container, use the +:meth:`~openstack.object_store.v1._proxy.Proxy.get_container_metadata` method. +This method either takes the name of a container, or a +:class:`~openstack.object_store.v1.container.Container` object, and it returns +a `Container` object with all of its metadata attributes set. :: + + >>> cont = conn.object_store.get_container_metadata("new container") + openstack.object_store.v1.container.Container: {'content-length': '0', + 'x-container-object-count': '0', 'name': u'new container', + 'accept-ranges': 'bytes', + 'x-trans-id': 'tx22c5de63466e4c05bb104-0054740c39', + 'date': 'Tue, 25 Nov 2014 04:57:29 GMT', + 'x-timestamp': '1416889793.23520', 'x-container-read': '.r:mysite.com', + 'x-container-bytes-used': '0', 'content-type': 'text/plain; charset=utf-8'} + +To set the metadata for a container, use the +:meth:`~openstack.object_store.v1._proxy.Proxy.set_container_metadata` method. +This method takes a :class:`~openstack.object_store.v1.container.Container` +object. For example, to grant another user write access to this container, +you can set the +:attr:`~openstack.object_store.v1.container.Container.write_ACL` on a +resource and pass it to `set_container_metadata`. :: + + >>> cont.write_ACL = "big_project:another_user" + >>> conn.object_store.set_container_metadata(cont) + openstack.object_store.v1.container.Container: {'content-length': '0', + 'x-container-object-count': '0', + 'name': u'my new container', 'accept-ranges': 'bytes', + 'x-trans-id': 'txc3ee751f971d41de9e9f4-0054740ec1', + 'date': 'Tue, 25 Nov 2014 05:08:17 GMT', + 'x-timestamp': '1416889793.23520', 'x-container-read': '.r:mysite.com', + 'x-container-bytes-used': '0', 'content-type': 'text/plain; charset=utf-8', + 'x-container-write': 'big_project:another_user'} + +Working with Objects +-------------------- + +Objects are held in containers. From an API standpoint, you work with +them using similarly named methods, typically with an additional argument +to specify their container. + +Listing Objects +*************** + +To list the objects that exist in a container, use the +:meth:`~openstack.object_store.v1._proxy.Proxy.objects` method. + +If you have a :class:`~openstack.object_store.v1.container.Container` +object, you can pass it to ``objects``. :: + + >>> print cont.name + pictures + >>> for obj in conn.object_store.objects(cont): + ... print obj + ... + openstack.object_store.v1.container.Object: + {u'hash': u'0522d4ccdf9956badcb15c4087a0c4cb', + u'name': u'pictures/selfie.jpg', u'bytes': 15744, + 'last-modified': u'2014-10-31T06:33:36.618640', + u'last_modified': u'2014-10-31T06:33:36.618640', + u'content_type': u'image/jpeg', 'container': u'pictures', + 'content-type': u'image/jpeg'} + ... + +Similar to the :meth:`~openstack.object_store.v1._proxy.Proxy.containers` +method, ``objects`` returns a generator which yields +:class:`~openstack.object_store.v1.obj.Object` objects stored in the +container. It also handles pagination for you, which you can adjust +with the ``limit`` parameter, otherwise making each request for the maximum +that your Object Store will return. + +If you have the name of a container instead of an object, you can also +pass that to the ``objects`` method. :: + + >>> for obj in conn.object_store.objects("pictures".decode("utf8"), + limit=100): + ... print obj + ... + <100 Objects> + ... another request transparently made to the Object Store service + <100 more Objects> + +Getting Object Data +******************* + +Once you have an :class:`~openstack.object_store.v1.obj.Object`, you get +the data stored inside of it with the +:meth:`~openstack.object_store.v1._proxy.Proxy.get_object_data` method. :: + + >>> print ob.name + message.txt + >>> data = conn.object_store.get_object_data(ob) + >>> print data + Hello, world! + +Additionally, if you want to save the object to disk, the +:meth:`~openstack.object_store.v1._proxy.Proxy.download_object` convenience +method takes an :class:`~openstack.object_store.v1.obj.Object` and a +``path`` to write the contents to. :: + + >>> conn.object_store.download_object(ob, "the_message.txt") + +Uploading Objects +***************** + +Once you have data you'd like to store in the Object Store service, you use +the :meth:`~openstack.object_store.v1._proxy.Proxy.upload_object` method. +This method takes the ``data`` to be stored, along with at least an object +``name`` and the ``container`` it is to be stored in. :: + + >>> hello = conn.object_store.upload_object(container="messages", + name="helloworld.txt", + data="Hello, world!") + >>> print hello + openstack.object_store.v1.container.Object: {'content-length': '0', + 'container': u'messages', 'name': u'helloworld.txt', + 'last-modified': 'Tue, 25 Nov 2014 17:39:29 GMT', + 'etag': '5eb63bbbe01eeed093cb22bb8f5acdc3', + 'x-trans-id': 'tx3035d41b03334aeaaf3dd-005474bed0', + 'date': 'Tue, 25 Nov 2014 17:39:28 GMT', + 'content-type': 'text/html; charset=UTF-8'} + +Working with Object Metadata +**************************** + +Working with metadata on objects is identical to how it's done with +containers. You use the +:meth:`~openstack.object_store.v1._proxy.Proxy.get_object_metadata` and +:meth:`~openstack.object_store.v1._proxy.Proxy.set_object_metadata` methods. + +The metadata attributes to be set can be found on the +:class:`~openstack.object_store.v1.obj.Object` object. :: + + >>> secret.delete_after = 300 + >>> secret = conn.object_store.set_object_metadata(secret) + +We set the :attr:`~openstack.object_store.obj.Object.delete_after` +value to 500 seconds, causing the object to be deleted in 300 seconds, +or five minutes. That attribute corresponds to the ``X-Delete-After`` +header value, which you can see is returned when we retrieve the updated +metadata. :: + + >>> conn.object_store.get_object_metadata(ob) + openstack.object_store.v1.container.Object: {'content-length': '11', + 'container': u'Secret Container', + 'name': u'selfdestruct.txt', 'x-delete-after': 300, + 'accept-ranges': 'bytes', 'last-modified': 'Tue, 25 Nov 2014 17:50:45 GMT', + 'etag': '5eb63bbbe01eeed093cb22bb8f5acdc3', + 'x-timestamp': '1416937844.36805', + 'x-trans-id': 'tx5c3fd94adf7c4e1b8f334-005474c17b', + 'date': 'Tue, 25 Nov 2014 17:50:51 GMT', 'content-type': 'text/plain'} diff --git a/doc/source/user/guides/orchestration.rst b/doc/source/user/guides/orchestration.rst new file mode 100644 index 0000000..64adc4f --- /dev/null +++ b/doc/source/user/guides/orchestration.rst @@ -0,0 +1,9 @@ +Using OpenStack Orchestration +============================= + +Before working with the Orchestration service, you'll need to create a +connection to your OpenStack cloud by following the :doc:`connect` user +guide. This will provide you with the ``conn`` variable used in the examples +below. + +.. TODO(thowe): Implement this guide diff --git a/doc/source/user/guides/shared_file_system.rst b/doc/source/user/guides/shared_file_system.rst new file mode 100644 index 0000000..dc6b5d0 --- /dev/null +++ b/doc/source/user/guides/shared_file_system.rst @@ -0,0 +1,200 @@ +Using OpenStack Shared File Systems +=================================== + +Before working with the Shared File System service, you'll need to create a +connection to your OpenStack cloud by following the :doc:`connect` user +guide. This will provide you with the ``conn`` variable used in the examples +below. + +.. contents:: Table of Contents + :local: + + +List Availability Zones +----------------------- + +A Shared File System service **availability zone** is a failure domain for +your shared file systems. You may create a shared file system (referred +to simply as **shares**) in a given availability zone, and create replicas +of the share in other availability zones. + +.. literalinclude:: ../examples/shared_file_system/availability_zones.py + :pyobject: list_availability_zones + + +Share Instances +--------------- + +Administrators can list, show information for, explicitly set the state of, +and force-delete share instances. + +.. literalinclude:: ../examples/shared_file_system/share_instances.py + :pyobject: share_instances + + +Get Share Instance +------------------ + +Shows details for a single share instance. + +.. literalinclude:: ../examples/shared_file_system/share_instances.py + :pyobject: get_share_instance + + +Reset Share Instance Status +--------------------------- + +Explicitly updates the state of a share instance. + +.. literalinclude:: ../examples/shared_file_system/share_instances.py + :pyobject: reset_share_instance_status + + +Delete Share Instance +--------------------- + +Force-deletes a share instance. + +.. literalinclude:: ../examples/shared_file_system/share_instances.py + :pyobject: delete_share_instance + + +Resize Share +------------ + +Shared File System shares can be resized (extended or shrunk) to a given +size. For details on resizing shares, refer to the +`Manila docs <https://docs.openstack.org/manila/latest/user/create-and-manage-shares.html#extend-share>`_. + +.. literalinclude:: ../examples/shared_file_system/shares.py + :pyobject: resize_share +.. literalinclude:: ../examples/shared_file_system/shares.py + :pyobject: resize_shares_without_shrink + + +List Share Group Snapshots +-------------------------- + +A share group snapshot is a point-in-time, read-only copy of the data that is +contained in a share group. You can list all share group snapshots + +.. literalinclude:: ../examples/shared_file_system/share_group_snapshots.py + :pyobject: list_share_group_snapshots + + +Get Share Group Snapshot +------------------------ + +Show share group snapshot details + +.. literalinclude:: ../examples/shared_file_system/share_group_snapshots.py + :pyobject: get_share_group_snapshot + + +List Share Group Snapshot Members +--------------------------------- + +Lists all share group snapshots members. + +.. literalinclude:: ../examples/shared_file_system/share_group_snapshots.py + :pyobject: share_group_snapshot_members + + +Create Share Group Snapshot +--------------------------- + +Creates a snapshot from a share group. + +.. literalinclude:: ../examples/shared_file_system/share_group_snapshots.py + :pyobject: create_share_group_snapshot + + +Reset Share Group Snapshot +--------------------------- + +Reset share group snapshot state. + +.. literalinclude:: ../examples/shared_file_system/share_group_snapshots.py + :pyobject: reset_share_group_snapshot_status + + +Update Share Group Snapshot +--------------------------- + +Updates a share group snapshot. + +.. literalinclude:: ../examples/shared_file_system/share_group_snapshots.py + :pyobject: update_share_group_snapshot + + +Delete Share Group Snapshot +--------------------------- + +Deletes a share group snapshot. + +.. literalinclude:: ../examples/shared_file_system/share_group_snapshots.py + :pyobject: delete_share_group_snapshot + + +List Share Metadata +-------------------- + +Lists all metadata for a given share. + +.. literalinclude:: ../examples/shared_file_system/share_metadata.py + :pyobject: list_share_metadata + + +Get Share Metadata Item +----------------------- + +Retrieves a specific metadata item from a shares metadata by its key. + +.. literalinclude:: ../examples/shared_file_system/share_metadata.py + :pyobject: get_share_metadata_item + + +Create Share Metadata +---------------------- + +Creates share metadata. + +.. literalinclude:: ../examples/shared_file_system/share_metadata.py + :pyobject: create_share_metadata + + +Update Share Metadata +---------------------- + +Updates metadata of a given share. + +.. literalinclude:: ../examples/shared_file_system/share_metadata.py + :pyobject: update_share_metadata + + +Delete Share Metadata +---------------------- + +Deletes a specific metadata item from a shares metadata by its key. Can +specify multiple keys to be deleted. + +.. literalinclude:: ../examples/shared_file_system/share_metadata.py + :pyobject: delete_share_metadata + + +Manage Share +------------ + +Manage a share with Manila. + +.. literalinclude:: ../examples/shared_file_system/shares.py + :pyobject: manage_share + + +Unmanage Share +-------------- + +Unmanage a share from Manila. + +.. literalinclude:: ../examples/shared_file_system/shares.py + :pyobject: unmanage_share diff --git a/doc/source/user/guides/stats.rst b/doc/source/user/guides/stats.rst new file mode 100644 index 0000000..19e302f --- /dev/null +++ b/doc/source/user/guides/stats.rst @@ -0,0 +1,88 @@ +==================== +Statistics reporting +==================== + +`openstacksdk` can report statistics on individual API +requests/responses in several different formats. + +Note that metrics will be reported only when corresponding client +libraries (`statsd` for 'statsd' reporting, `influxdb` for influxdb, +etc.). If libraries are not available reporting will be silently +ignored. + +statsd +------ + +`statsd` can be configured via configuration entries or environment +variables. + +A global `metrics` entry defines defaults for all clouds. Each cloud +can specify a `metrics` section to override variables; this may be +useful to separate results reported for each cloud. + +.. code-block:: yaml + + metrics: + statsd: + host: __statsd_server_host__ + port: __statsd_server_port__ + prefix: __statsd_prefix__ (default 'openstack.api') + clouds: + a-cloud: + auth: + ... + metrics: + statsd: + prefix: 'openstack.api.a-cloud' + +If the `STATSD_HOST` or `STATSD_PORT` environment variables are set, +they will be taken as the default values (and enable `statsd` +reporting if no other configuration is specified). + +InfluxDB +-------- + +`InfluxDB <https://www.influxdata.com/>`__ is supported via +configuration in the `metrics` field. Similar to `statsd`, each cloud +can provide it's own `metrics` section to override any global +defaults. + +.. code-block:: yaml + + metrics: + influxdb: + host: __influxdb_server_host__ + port: __influxdb_server_port__ + use_udp: __True|False__ + username: __influxdb_auth_username__ + password: __influxdb_auth_password__ + database: __influxdb_db_name__ + measurement: __influxdb_measurement_name__ + timeout: __infludb_requests_timeout__ + clouds: + .. + +InfluxDB reporting allows setting additional tags into the metrics based on the +selected cloud. + +.. code-block:: yaml + + clouds: + my_cloud: + profile: some_profile + ... + additional_metric_tags: + environment: production + +prometheus +---------- +.. + NOTE(ianw) 2021-04-19 : examples here would be great; this is just terse + description taken from + https://review.opendev.org/c/openstack/openstacksdk/+/614834 + +The prometheus support does not read from config, and does not run an +http service since OpenstackSDK is a library. It is expected that an +application that uses OpenstackSDK and wants request stats be +collected will pass a `prometheus_client.CollectorRegistry` to +`collector_registry`. diff --git a/doc/source/user/index.rst b/doc/source/user/index.rst new file mode 100644 index 0000000..7522e71 --- /dev/null +++ b/doc/source/user/index.rst @@ -0,0 +1,195 @@ +Using the OpenStack SDK +======================= + +This section of documentation pertains to those who wish to use this SDK in +their own application. If you're looking for documentation on how to contribute +to or extend the SDK, refer to the `contributor <../contributor>`_ section. + +For a listing of terms used throughout the SDK, including the names of +projects and services supported by it, see the :doc:`glossary <../glossary>`. + +.. _user_guides: + +User Guides +----------- + +These guides walk you through how to make use of the libraries we provide +to work with each OpenStack service. If you're looking for a cookbook +approach, this is where you'll want to begin. + +.. toctree:: + :maxdepth: 1 + + Introduction <guides/intro> + Configuration <config/index> + Connect to an OpenStack Cloud <guides/connect> + Connect to an OpenStack Cloud Using a Config File <guides/connect_from_config> + Logging <guides/logging> + Statistics reporting <guides/stats> + Microversions <microversions> + Baremetal <guides/baremetal> + Block Storage <guides/block_storage> + Clustering <guides/clustering> + Compute <guides/compute> + Database <guides/database> + DNS <guides/dns> + Identity <guides/identity> + Image <guides/image> + Key Manager <guides/key_manager> + Message <guides/message> + Network <guides/network> + Object Store <guides/object_store> + Orchestration <guides/orchestration> + Shared File System <guides/shared_file_system> + +Testing +------- + +The SDK provides a number of utilities to help you test your applications. + +.. toctree:: + :maxdepth: 1 + + testing/index + +API Documentation +----------------- + +Service APIs are exposed through a two-layered approach. The classes +exposed through our *Connection* interface are the place to start if you're +an application developer consuming an OpenStack cloud. The *Resource* +interface is the layer upon which the *Connection* is built, with +*Connection* methods accepting and returning *Resource* objects. + +The Cloud Abstraction layer has a data model. + +.. toctree:: + :maxdepth: 1 + + model + +Connection Interface +~~~~~~~~~~~~~~~~~~~~ + +A *Connection* instance maintains your cloud config, session and authentication +information providing you with a set of higher-level interfaces to work with +OpenStack services. + +.. toctree:: + :maxdepth: 1 + + connection + +Once you have a *Connection* instance, services are accessed through instances +of :class:`~openstack.proxy.Proxy` or subclasses of it that exist as +attributes on the :class:`~openstack.connection.Connection`. + +.. _service-proxies: + +Service Proxies +~~~~~~~~~~~~~~~ + +The following service proxies exist on the +:class:`~openstack.connection.Connection`. The service proxies are all always +present on the :class:`~openstack.connection.Connection` object, but the +combination of your ``CloudRegion`` and the catalog of the cloud in question +control which services can be used. + +.. toctree:: + :maxdepth: 1 + + Accelerator <proxies/accelerator> + Baremetal <proxies/baremetal> + Baremetal Introspection <proxies/baremetal_introspection> + Block Storage v2 <proxies/block_storage_v2> + Block Storage v3 <proxies/block_storage_v3> + Clustering <proxies/clustering> + Compute <proxies/compute> + Container Infrastructure Management <proxies/container_infrastructure_management> + Database <proxies/database> + DNS <proxies/dns> + Identity v2 <proxies/identity_v2> + Identity v3 <proxies/identity_v3> + Image v1 <proxies/image_v1> + Image v2 <proxies/image_v2> + Key Manager <proxies/key_manager> + Load Balancer <proxies/load_balancer_v2> + Message v2 <proxies/message_v2> + Network <proxies/network> + Object Store <proxies/object_store> + Orchestration <proxies/orchestration> + Placement <proxies/placement> + Shared File System <proxies/shared_file_system> + Workflow <proxies/workflow> + +Resource Interface +~~~~~~~~~~~~~~~~~~ + +The *Resource* layer is a lower-level interface to communicate with OpenStack +services. While the classes exposed by the *Connection* build a convenience +layer on top of this, *Resources* can be used directly. However, the most +common usage of this layer is in receiving an object from a class in the +*Connection* layer, modifying it, and sending it back into the *Connection* +layer, such as to update a resource on the server. + +The following services have exposed *Resource* classes. + +.. toctree:: + :maxdepth: 1 + + Accelerator <resources/accelerator/index> + Baremetal <resources/baremetal/index> + Baremetal Introspection <resources/baremetal_introspection/index> + Block Storage <resources/block_storage/index> + Clustering <resources/clustering/index> + Compute <resources/compute/index> + Container Infrastructure Management <resources/container_infrastructure_management/index> + Database <resources/database/index> + DNS <resources/dns/index> + Identity <resources/identity/index> + Image <resources/image/index> + Key Management <resources/key_manager/index> + Load Balancer <resources/load_balancer/index> + Network <resources/network/index> + Orchestration <resources/orchestration/index> + Object Store <resources/object_store/index> + Placement <resources/placement/index> + Shared File System <resources/shared_file_system/index> + Workflow <resources/workflow/index> + +Low-Level Classes +~~~~~~~~~~~~~~~~~ + +The following classes are not commonly used by application developers, +but are used to construct applications to talk to OpenStack APIs. Typically +these parts are managed through the `Connection Interface`_, but their use +can be customized. + +.. toctree:: + :maxdepth: 1 + + resource + service_description + utils + +Errors and warnings +~~~~~~~~~~~~~~~~~~~ + +The SDK attempts to provide detailed errors and warnings for things like failed +requests, deprecated APIs, and invalid configurations. Application developers +are responsible for handling these errors and can opt into warnings to ensure +their applications stay up-to-date. + +.. toctree:: + :maxdepth: 1 + + exceptions + warnings + +Presentations +------------- + +.. toctree:: + :maxdepth: 1 + + multi-cloud-demo diff --git a/doc/source/user/microversions.rst b/doc/source/user/microversions.rst new file mode 100644 index 0000000..fcef096 --- /dev/null +++ b/doc/source/user/microversions.rst @@ -0,0 +1,99 @@ +Microversions +============= + +As openstacksdk rolls out support for consuming microversions, it will do so +on a call by call basis as needed. Just like with major versions, openstacksdk +should have logic to handle each microversion for a given REST call it makes, +with the following rules in mind: + +* If an activity openstack performs can be done differently or more efficiently + with a new microversion, the support should be added to openstack.cloud and + to the appropriate Proxy class. + +* openstacksdk should always attempt to use the latest microversion it is aware + of for a given call, unless a microversion removes important data. + +* Microversion selection should under no circumstances be exposed to the user + in python API calls in the Resource layer or the openstack.cloud layer. + +* Microversion selection is exposed to the user in the REST layer via the + ``microversion`` argument to each REST call. + +* A user of the REST layer may set the default microversion by setting + ``{service_type}_default_microversion`` in clouds.yaml or + ``OS_{service_type|upper}_DEFAULT_MICROVERSION`` environment variable. + +.. note:: + + Setting the default microversion in any circumstance other than when using + the REST layer is highly discouraged. Both of the higher layers in + openstacksdk provide data normalization as well as logic about which REST + call to make. Setting the default microversion could change the behavior + of the service in question in such a way that openstacksdk does not + understand. If there is a feature of a service that needs a microversion + and it is not already transparently exposed in openstacksdk, please file + a bug. + +* If a feature is only exposed for a given microversion and cannot be simulated + for older clouds without that microversion, it is ok to add it, but + a clear error message should be given to the user that the given feature is + not available on their cloud. (A message such as "This cloud supports + a maximum microversion of XXX for service YYY and this feature only exists + on clouds with microversion ZZZ. Please contact your cloud provider for + information about when this feature might be available") + +* When adding a feature that only exists behind a new microversion, + every effort should be made to figure out how to provide the same + functionality if at all possible, even if doing so is inefficient. If an + inefficient workaround is employed, a warning should be provided to the + user. (the user's workaround to skip the inefficient behavior would be to + stop using that openstacksdk API call) An example of this is the nova + "get me a network" feature. The logic of "get me a network" can be done + client-side, albeit less efficiently. Adding support for the + "get me a network" feature via nova microversion should also add support for + doing the client-side workaround. + +* If openstacksdk is aware of logic for more than one microversion, it should + always attempt to use the latest version available for the service for that + call. + +* Objects returned from openstacksdk should always go through normalization and + thus should always conform to openstacksdk's documented data model. The + objects should never look different to the user regardless of the + microversion used for the REST call. + +* If a microversion adds new fields to an object, those fields should be + added to openstacksdk's data model contract for that object and the data + should either be filled in by performing additional REST calls if the data is + available that way, or the field should have a default value of None which + the user can be expected to test for when attempting to use the new value. + +* If a microversion removes fields from an object that are part of the + existing data model contract, care should be taken to not use the new + microversion for that call unless forced to by lack of availablity of the + old microversion on the cloud in question. In the case where an old + microversion is no longer available, care must be taken to either find the + data from another source and fill it in, or to put a value of None into the + field and document for the user that on some clouds the value may not exist. + +* If a microversion removes a field and the outcome is particularly intractable + and impossible to work around without fundamentally breaking users, + an issue should be raised with the service team in question. Hopefully a + resolution can be found during the period while clouds still have the old + microversion. + +* As new calls or objects are added, it is important to check in with + the service team in question on the expected stability of the object. If + there are known changes expected in the future, even if they may be a few + years off, openstacksdk should take care to not add committments to its data + model for those fields/features. It is ok for openstacksdk to not have + something. + + .. note:: + openstacksdk does not currently have any sort of "experimental" opt-in API + that would allow exposing things to a user that may not be supportable + under the normal compatibility contract. If a conflict arises in the + future where there is a strong desire for a feature but also a lack of + certainty about its stability over time, an experimental API may want to + be explored ... but concrete use cases should arise before such a thing + is started. diff --git a/doc/source/user/model.rst b/doc/source/user/model.rst new file mode 100644 index 0000000..1c270e3 --- /dev/null +++ b/doc/source/user/model.rst @@ -0,0 +1,66 @@ +Data Model +========== + +*openstacksdk* has a very strict policy on not breaking backwards compatibility +ever. However, with the data structures returned from OpenStack, there are +places where the resource structures from OpenStack are returned to the user +somewhat directly, leaving an openstacksdk user open to changes/differences in +result content. + +To combat that, openstacksdk 'normalizes' the return structure from OpenStack +in many places, and the results of that normalization are listed below. Where +openstacksdk performs normalization, a user can count on any fields declared in +the docs as being completely safe to use - they are as much a part of +openstacksdk's API contract as any other Python method. + +Some OpenStack objects allow for arbitrary attributes at the root of the +object. openstacksdk will pass those through so as not to break anyone who may +be counting on them, but as they are arbitrary openstacksdk can make no +guarantees as to their existence. As part of normalization, openstacksdk will +put any attribute from an OpenStack resource that is not in its data model +contract into an attribute called 'properties'. The contents of properties are +defined to be an arbitrary collection of key value pairs with no promises as to +any particular key ever existing. + +If a user passes ``strict=True`` to the openstacksdk constructor, openstacksdk +will not pass through arbitrary objects to the root of the resource, and will +instead only put them in the properties dict. If a user is worried about +accidentally writing code that depends on an attribute that is not part of the +API contract, this can be a useful tool. Keep in mind all data can still be +accessed via the properties dict, but any code touching anything in the +properties dict should be aware that the keys found there are highly user/cloud +specific. Any key that is transformed as part of the openstacksdk data model +contract will not wind up with an entry in properties - only keys that are +unknown. + +The ``location`` field +---------------------- + +A Location defines where a resource lives. It includes a cloud name and a +region name, an availability zone as well as information about the project +that owns the resource. + +The project information may contain a project ID, or a combination of one or +more of a project name with a domain name or ID. If a project ID is present, +it should be considered correct. + +Some resources do not carry ownership information with them. For those, the +project information will be filled in from the project the user currently +has a token for. + +Some resources do not have information about availability zones, or may exist +region wide. Those resources will have None as their availability zone. + +.. code-block:: python + + Location = dict( + cloud=str(), + region_name=str(), + zone=str() or None, + project=dict( + id=str() or None, + name=str() or None, + domain_id=str() or None, + domain_name=str() or None, + ) + ) diff --git a/doc/source/user/multi-cloud-demo.rst b/doc/source/user/multi-cloud-demo.rst new file mode 100644 index 0000000..7aace3f --- /dev/null +++ b/doc/source/user/multi-cloud-demo.rst @@ -0,0 +1,813 @@ +Multi-Cloud Demo +================ + +This document contains a presentation in `presentty`_ format. If you want to +walk through it like a presentation, install `presentty` and run: + +.. code:: bash + + presentty doc/source/user/multi-cloud-demo.rst + +The content is hopefully helpful even if it's not being narrated, so it's being +included in the openstacksdk docs. + +.. _presentty: https://pypi.org/project/presentty + +Who am I? +--------- + +Monty Taylor + +* OpenStack Infra Core +* irc: mordred +* twitter: @e_monty + +What are we going to talk about? +-------------------------------- + +`OpenStackSDK` + +* a task and end-user oriented Python library +* abstracts deployment differences +* designed for multi-cloud +* simple to use +* massive scale + + * optional advanced features to handle 20k servers a day + +* Initial logic/design extracted from nodepool +* Librified to re-use in Ansible + +OpenStackSDK is Free Software +----------------------------- + +* https://opendev.org/openstack/openstacksdk +* openstack-discuss@lists.openstack.org +* #openstack-sdks on oftc + +This talk is Free Software, too +------------------------------- + +* Written for presentty (https://pypi.org/project/presentty) +* doc/source/user/multi-cloud-demo.rst +* examples in examples/cloud +* Paths subject to change - this is the first presentation in tree! + +Complete Example +---------------- + +.. code:: python + + from openstack import cloud as openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + for cloud_name, region_name in [ + ('my-vexxhost', 'ca-ymq-1'), + ('my-citycloud', 'Buf1'), + ('my-internap', 'ams01'), + ]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + + # Upload an image to the cloud + image = cloud.create_image( + 'devuan-jessie', + filename='devuan-jessie.qcow2', + wait=True, + ) + + # Find a flavor with at least 512M of RAM + flavor = cloud.get_flavor_by_ram(512) + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public ip for it. + cloud.create_server( + 'my-server', + image=image, + flavor=flavor, + wait=True, + auto_ip=True, + ) + +Let's Take a Few Steps Back +--------------------------- + +Multi-cloud is easy, but you need to know a few things. + +* Terminology +* Config +* OpenStackSDK API + +Cloud Terminology +----------------- + +Let's define a few terms, so that we can use them with ease: + +* `cloud` - logically related collection of services +* `region` - completely independent subset of a given cloud +* `patron` - human who has an account +* `user` - account on a cloud +* `project` - logical collection of cloud resources +* `domain` - collection of users and projects + +Cloud Terminology Relationships +------------------------------- + +* A `cloud` has one or more `regions` +* A `patron` has one or more `users` +* A `patron` has one or more `projects` +* A `cloud` has one or more `domains` +* In a `cloud` with one `domain` it is named "default" +* Each `patron` may have their own `domain` +* Each `user` is in one `domain` +* Each `project` is in one `domain` +* A `user` has one or more `roles` on one or more `projects` + +HTTP Sessions +------------- + +* HTTP interactions are authenticated via keystone +* Authenticating returns a `token` +* An authenticated HTTP Session is shared across a `region` + +Cloud Regions +------------- + +A `cloud region` is the basic unit of REST interaction. + +* A `cloud` has a `service catalog` +* The `service catalog` is returned in the `token` +* The `service catalog` lists `endpoint` for each `service` in each `region` +* A `region` is completely autonomous + +Users, Projects and Domains +--------------------------- + +In clouds with multiple domains, project and user names are +only unique within a region. + +* Names require `domain` information for uniqueness. IDs do not. +* Providing `domain` information when not needed is fine. +* `project_name` requires `project_domain_name` or `project_domain_id` +* `project_id` does not +* `username` requires `user_domain_name` or `user_domain_id` +* `user_id` does not + +Confused Yet? +------------- + +Don't worry - you don't have to deal with most of that. + +Auth per cloud, select per region +--------------------------------- + +In general, the thing you need to know is: + +* Configure authentication per `cloud` +* Select config to use by `cloud` and `region` + +clouds.yaml +----------- + +Information about the clouds you want to connect to is stored in a file +called `clouds.yaml`. + +`clouds.yaml` can be in your homedir: `~/.config/openstack/clouds.yaml` +or system-wide: `/etc/openstack/clouds.yaml`. + +Information in your homedir, if it exists, takes precedence. + +Full docs on `clouds.yaml` are at +https://docs.openstack.org/os-client-config/latest/ + +What about Mac and Windows? +--------------------------- + +`USER_CONFIG_DIR` is different on Linux, OSX and Windows. + +* Linux: `~/.config/openstack` +* OSX: `~/Library/Application Support/openstack` +* Windows: `C:\\Users\\USERNAME\\AppData\\Local\\OpenStack\\openstack` + +`SITE_CONFIG_DIR` is different on Linux, OSX and Windows. + +* Linux: `/etc/openstack` +* OSX: `/Library/Application Support/openstack` +* Windows: `C:\\ProgramData\\OpenStack\\openstack` + +Config Terminology +------------------ + +For multi-cloud, think of two types: + +* `profile` - Facts about the `cloud` that are true for everyone +* `cloud` - Information specific to a given `user` + +Apologies for the use of `cloud` twice. + +Environment Variables and Simple Usage +-------------------------------------- + +* Environment variables starting with `OS_` go into a cloud called `envvars` +* If you only have one cloud, you don't have to specify it +* `OS_CLOUD` and `OS_REGION_NAME` are default values for + `cloud` and `region_name` + +TOO MUCH TALKING - NOT ENOUGH CODE +---------------------------------- + +basic clouds.yaml for the example code +-------------------------------------- + +Simple example of a clouds.yaml + +* Config for a named `cloud` "my-citycloud" +* Reference a well-known "named" profile: `citycloud` +* `os-client-config` has a built-in list of profiles at + https://docs.openstack.org/openstacksdk/latest/user/config/vendor-support.html +* Vendor profiles contain various advanced config +* `cloud` name can match `profile` name (using different names for clarity) + +.. code:: yaml + + clouds: + my-citycloud: + profile: citycloud + auth: + username: mordred + project_id: 65222a4d09ea4c68934fa1028c77f394 + user_domain_id: d0919bd5e8d74e49adf0e145807ffc38 + project_domain_id: d0919bd5e8d74e49adf0e145807ffc38 + +Where's the password? + +secure.yaml +----------- + +* Optional additional file just like `clouds.yaml` +* Values overlaid on `clouds.yaml` +* Useful if you want to protect secrets more stringently + +Example secure.yaml +------------------- + +* No, my password isn't XXXXXXXX +* `cloud` name should match `clouds.yaml` +* Optional - I actually keep mine in my `clouds.yaml` + +.. code:: yaml + + clouds: + my-citycloud: + auth: + password: XXXXXXXX + +more clouds.yaml +---------------- + +More information can be provided. + +* Use v3 of the `identity` API - even if others are present +* Use `https://image-ca-ymq-1.vexxhost.net/v2` for `image` API + instead of what's in the catalog + +.. code:: yaml + + my-vexxhost: + identity_api_version: 3 + image_endpoint_override: https://image-ca-ymq-1.vexxhost.net/v2 + profile: vexxhost + auth: + user_domain_id: default + project_domain_id: default + project_name: d8af8a8f-a573-48e6-898a-af333b970a2d + username: 0b8c435b-cc4d-4e05-8a47-a2ada0539af1 + +Much more complex clouds.yaml example +------------------------------------- + +* Not using a profile - all settings included +* In the `ams01` `region` there are two networks with undiscoverable qualities +* Each one are labeled here so choices can be made +* Any of the settings can be specific to a `region` if needed +* `region` settings override `cloud` settings +* `cloud` does not support `floating-ips` + +.. code:: yaml + + my-internap: + auth: + auth_url: https://identity.api.cloud.inap.com + username: api-55f9a00fb2619 + project_name: inap-17037 + identity_api_version: 3 + floating_ip_source: None + regions: + - name: ams01 + values: + networks: + - name: inap-17037-WAN1654 + routes_externally: true + default_interface: true + - name: inap-17037-LAN3631 + routes_externally: false + +Complete Example Again +---------------------- + +.. code:: python + + from openstack import cloud as openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + for cloud_name, region_name in [ + ('my-vexxhost', 'ca-ymq-1'), + ('my-citycloud', 'Buf1'), + ('my-internap', 'ams01')]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + + # Upload an image to the cloud + image = cloud.create_image( + 'devuan-jessie', filename='devuan-jessie.qcow2', wait=True) + + # Find a flavor with at least 512M of RAM + flavor = cloud.get_flavor_by_ram(512) + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public ip for it. + cloud.create_server( + 'my-server', image=image, flavor=flavor, wait=True, auto_ip=True) + +Step By Step +------------ + +Import the library +------------------ + +.. code:: python + + from openstack import cloud as openstack + +Logging +------- + +* `openstacksdk` uses standard python logging +* ``openstack.enable_logging`` does easy defaults +* Squelches some meaningless warnings + + * `debug` + + * Logs openstacksdk loggers at debug level + + * `http_debug` Implies `debug`, turns on HTTP tracing + +.. code:: python + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + +Example with Debug Logging +-------------------------- + +* examples/cloud/debug-logging.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(debug=True) + + cloud = openstack.connect(cloud='my-vexxhost', region_name='ca-ymq-1') + cloud.get_image('Ubuntu 16.04.1 LTS [2017-03-03]') + +Example with HTTP Debug Logging +------------------------------- + +* examples/cloud/http-debug-logging.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(http_debug=True) + + cloud = openstack.connect( + cloud='my-vexxhost', region_name='ca-ymq-1') + cloud.get_image('Ubuntu 16.04.1 LTS [2017-03-03]') + +Cloud Regions +------------- + +* `cloud` constructor needs `cloud` and `region_name` +* `openstack.connect` is a helper factory function + +.. code:: python + + for cloud_name, region_name in [ + ('my-vexxhost', 'ca-ymq-1'), + ('my-citycloud', 'Buf1'), + ('my-internap', 'ams01') + ]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + +Upload an Image +--------------- + +* Picks the correct upload mechanism +* **SUGGESTION** Always upload your own base images + +.. code:: python + + # Upload an image to the cloud + image = cloud.create_image( + 'devuan-jessie', + filename='devuan-jessie.qcow2', + wait=True, + ) + +Always Upload an Image +---------------------- + +Ok. You don't have to. But, for multi-cloud... + +* Images with same content are named different on different clouds +* Images with same name on different clouds can have different content +* Upload your own to all clouds, both problems go away +* Download from OS vendor or build with `diskimage-builder` + +Find a flavor +------------- + +* Flavors are all named differently on clouds +* Flavors can be found via RAM +* `get_flavor_by_ram` finds the smallest matching flavor + +.. code:: python + + # Find a flavor with at least 512M of RAM + flavor = cloud.get_flavor_by_ram(512) + +Create a server +--------------- + +* my-vexxhost + + * Boot server + * Wait for `status==ACTIVE` + +* my-internap + + * Boot server on network `inap-17037-WAN1654` + * Wait for `status==ACTIVE` + +* my-citycloud + + * Boot server + * Wait for `status==ACTIVE` + * Find the `port` for the `fixed_ip` for `server` + * Create `floating-ip` on that `port` + * Wait for `floating-ip` to attach + +.. code:: python + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public ip for it. + cloud.create_server( + 'my-server', image=image, flavor=flavor, wait=True, auto_ip=True) + +Wow. We didn't even deploy Wordpress! +------------------------------------- + +Image and Flavor by Name or ID +------------------------------ + +* Pass string to image/flavor +* Image/Flavor will be found by name or ID +* Common pattern +* examples/cloud/create-server-name-or-id.py + +.. code:: python + + from openstack import cloud as openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + for cloud_name, region_name, image, flavor in [ + ('my-vexxhost', 'ca-ymq-1', + 'Ubuntu 16.04.1 LTS [2017-03-03]', 'v1-standard-4'), + ('my-citycloud', 'Buf1', + 'Ubuntu 16.04 Xenial Xerus', '4C-4GB-100GB'), + ('my-internap', 'ams01', + 'Ubuntu 16.04 LTS (Xenial Xerus)', 'A1.4')]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public ip for it. + server = cloud.create_server( + 'my-server', image=image, flavor=flavor, wait=True, auto_ip=True) + print(server.name) + print(server['name']) + cloud.pprint(server) + # Delete it - this is a demo + cloud.delete_server(server, wait=True, delete_ips=True) + +Delete Servers +-------------- + +* `delete_ips` Delete any `floating_ips` the server may have + +.. code:: python + + cloud.delete_server('my-server', wait=True, delete_ips=True) + +Image and Flavor by Dict +------------------------ + +* Pass dict to image/flavor +* If you know if the value is Name or ID +* Common pattern +* examples/cloud/create-server-dict.py + +.. code:: python + + from openstack import cloud as openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + for cloud_name, region_name, image, flavor_id in [ + ('my-vexxhost', 'ca-ymq-1', 'Ubuntu 16.04.1 LTS [2017-03-03]', + '5cf64088-893b-46b5-9bb1-ee020277635d'), + ('my-citycloud', 'Buf1', 'Ubuntu 16.04 Xenial Xerus', + '0dab10b5-42a2-438e-be7b-505741a7ffcc'), + ('my-internap', 'ams01', 'Ubuntu 16.04 LTS (Xenial Xerus)', + 'A1.4')]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public ip for it. + server = cloud.create_server( + 'my-server', image=image, flavor=dict(id=flavor_id), + wait=True, auto_ip=True) + # Delete it - this is a demo + cloud.delete_server(server, wait=True, delete_ips=True) + +Munch Objects +------------- + +* Behave like a dict and an object +* examples/cloud/munch-dict-object.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(debug=True) + + cloud = openstack.connect(cloud='zetta', region_name='no-osl1') + image = cloud.get_image('Ubuntu 14.04 (AMD64) [Local Storage]') + print(image.name) + print(image['name']) + +API Organized by Logical Resource +--------------------------------- + +* list_servers +* search_servers +* get_server +* create_server +* delete_server +* update_server + +For other things, it's still {verb}_{noun} + +* attach_volume +* wait_for_server +* add_auto_ip + +Cleanup Script +-------------- + +* Sometimes my examples had bugs +* examples/cloud/cleanup-servers.py + +.. code:: python + + from openstack import cloud as openstack + + # Initialize and turn on debug logging + openstack.enable_logging(debug=True) + + for cloud_name, region_name in [ + ('my-vexxhost', 'ca-ymq-1'), + ('my-citycloud', 'Buf1'), + ('my-internap', 'ams01')]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + for server in cloud.search_servers('my-server'): + cloud.delete_server(server, wait=True, delete_ips=True) + +Normalization +------------- + +* examples/cloud/normalization.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging() + + cloud = openstack.connect(cloud='fuga', region_name='cystack') + image = cloud.get_image( + 'Ubuntu 16.04 LTS - Xenial Xerus - 64-bit - Fuga Cloud Based Image') + cloud.pprint(image) + +Strict Normalized Results +------------------------- + +* Return only the declared model +* examples/cloud/strict-mode.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging() + + cloud = openstack.connect( + cloud='fuga', region_name='cystack', strict=True) + image = cloud.get_image( + 'Ubuntu 16.04 LTS - Xenial Xerus - 64-bit - Fuga Cloud Based Image') + cloud.pprint(image) + +How Did I Find the Image Name for the Last Example? +--------------------------------------------------- + +* I often make stupid little utility scripts +* examples/cloud/find-an-image.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging() + + cloud = openstack.connect(cloud='fuga', region_name='cystack') + cloud.pprint([ + image for image in cloud.list_images() + if 'ubuntu' in image.name.lower()]) + +Added / Modified Information +---------------------------- + +* Servers need more extra help +* Fetch addresses dict from neutron +* Figure out which IPs are good +* `detailed` - defaults to True, add everything +* `bare` - no extra calls - don't even fix broken things +* `bare` is still normalized +* examples/cloud/server-information.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(debug=True) + + cloud = openstack.connect(cloud='my-citycloud', region_name='Buf1') + try: + server = cloud.create_server( + 'my-server', image='Ubuntu 16.04 Xenial Xerus', + flavor=dict(id='0dab10b5-42a2-438e-be7b-505741a7ffcc'), + wait=True, auto_ip=True) + + print("\n\nFull Server\n\n") + cloud.pprint(server) + + print("\n\nTurn Detailed Off\n\n") + cloud.pprint(cloud.get_server('my-server', detailed=False)) + + print("\n\nBare Server\n\n") + cloud.pprint(cloud.get_server('my-server', bare=True)) + + finally: + # Delete it - this is a demo + cloud.delete_server(server, wait=True, delete_ips=True) + +Exceptions +---------- + +* All openstacksdk exceptions are subclasses of `OpenStackCloudException` +* Direct REST calls throw `OpenStackCloudHTTPError` +* `OpenStackCloudHTTPError` subclasses `OpenStackCloudException` + and `requests.exceptions.HTTPError` +* `OpenStackCloudURINotFound` for 404 +* `OpenStackCloudBadRequest` for 400 + +User Agent Info +--------------- + +* Set `app_name` and `app_version` for User Agents +* (ssh ... `region_name` is optional if the cloud has one region) +* examples/cloud/user-agent.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(http_debug=True) + + cloud = openstack.connect( + cloud='datacentred', + app_name='AmazingApp', + app_version='1.0', + ) + cloud.list_networks() + +Uploading Large Objects +----------------------- + +* swift has a maximum object size +* Large Objects are uploaded specially +* openstacksdk figures this out and does it +* multi-threaded +* examples/cloud/upload-object.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(debug=True) + + cloud = openstack.connect(cloud='ovh', region_name='SBG1') + cloud.create_object( + container='my-container', + name='my-object', + filename='/home/mordred/briarcliff.sh3d', + ) + cloud.delete_object('my-container', 'my-object') + cloud.delete_container('my-container') + +Uploading Large Objects +----------------------- + +* Default max_file_size is 5G +* This is a conference demo +* Let's force a segment_size +* One MILLION bytes +* examples/cloud/upload-object.py + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(debug=True) + + cloud = openstack.connect(cloud='ovh', region_name='SBG1') + cloud.create_object( + container='my-container', + name='my-object', + filename='/home/mordred/briarcliff.sh3d', + segment_size=1000000, + ) + cloud.delete_object('my-container', 'my-object') + cloud.delete_container('my-container') + +Service Conditionals +-------------------- + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(debug=True) + + cloud = openstack.connect(cloud='kiss', region_name='region1') + print(cloud.has_service('network')) + print(cloud.has_service('container-orchestration')) + +Service Conditional Overrides +----------------------------- + +* Sometimes clouds are weird and figuring that out won't work + +.. code:: python + + from openstack import cloud as openstack + openstack.enable_logging(debug=True) + + cloud = openstack.connect(cloud='rax', region_name='DFW') + print(cloud.has_service('network')) + +.. code:: yaml + + clouds: + rax: + profile: rackspace + auth: + username: mordred + project_id: 245018 + # This is already in profile: rackspace + has_network: false + +FIN +--- diff --git a/doc/source/user/proxies/accelerator.rst b/doc/source/user/proxies/accelerator.rst new file mode 100644 index 0000000..38e4da4 --- /dev/null +++ b/doc/source/user/proxies/accelerator.rst @@ -0,0 +1,43 @@ +Accelerator API +=============== + +.. automodule:: openstack.accelerator.v2._proxy + +The Accelerator Class +--------------------- + +The accelerator high-level interface is available through the ``accelerator`` +member of a :class:`~openstack.connection.Connection` object. +The ``accelerator`` member will only be added if the service is detected. + + +Device Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.accelerator.v2._proxy.Proxy + :noindex: + :members: devices, get_device + +Deployable Operations +^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.accelerator.v2._proxy.Proxy + :noindex: + :members: deployables, get_deployable, update_deployable + +Device Profile Operations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.accelerator.v2._proxy.Proxy + :noindex: + :members: device_profiles, get_device_profile, + create_device_profile, delete_device_profile + +Accelerator Request Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.accelerator.v2._proxy.Proxy + :noindex: + :members: accelerator_requests, get_accelerator_request, + create_accelerator_request, delete_accelerator_request, + update_accelerator_request diff --git a/doc/source/user/proxies/baremetal.rst b/doc/source/user/proxies/baremetal.rst new file mode 100644 index 0000000..557c8d4 --- /dev/null +++ b/doc/source/user/proxies/baremetal.rst @@ -0,0 +1,107 @@ +Baremetal API +============= + +For details on how to use baremetal, see :doc:`/user/guides/baremetal` + +.. automodule:: openstack.baremetal.v1._proxy + +The Baremetal Class +------------------- + +The baremetal high-level interface is available through the ``baremetal`` +member of a :class:`~openstack.connection.Connection` object. +The ``baremetal`` member will only be added if the service is detected. + +Node Operations +^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: nodes, create_node, find_node, get_node, update_node, patch_node, delete_node, + set_node_provision_state, get_node_boot_device, + set_node_boot_device, get_node_supported_boot_devices, + set_node_boot_mode, + set_node_secure_boot, inject_nmi_to_node, wait_for_nodes_provision_state, + set_node_power_state, wait_for_node_power_state, + wait_for_node_reservation, validate_node, set_node_maintenance, + unset_node_maintenance, delete_node, list_node_vendor_passthru, + get_node_console, enable_node_console, disable_node_console + +Node Trait Operations +^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: add_node_trait, remove_node_trait, set_node_traits + +Port Operations +^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: ports, find_port, get_port, create_port, update_port, delete_port, patch_port + +Port Group Operations +^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: port_groups, find_port_group, get_port_group, + create_port_group, update_port_group, delete_port_group, patch_port_group + +Driver Operations +^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: drivers, get_driver + +Chassis Operations +^^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: chassis, find_chassis, get_chassis, + create_chassis, update_chassis, patch_chassis, delete_chassis + +VIF Operations +^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: list_node_vifs, attach_vif_to_node, detach_vif_from_node + +Allocation Operations +^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: allocations, get_allocation, create_allocation, + update_allocation, patch_allocation, delete_allocation, + wait_for_allocation + +Volume Connector Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: volume_connectors, find_volume_connector, get_volume_connector, + create_volume_connector, update_volume_connector, + patch_volume_connector, delete_volume_connector + +Volume Target Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: volume_targets, find_volume_target, get_volume_target, + create_volume_target, update_volume_target, + patch_volume_target, delete_volume_target + +Deploy Template Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.baremetal.v1._proxy.Proxy + :noindex: + :members: deploy_templates, get_deploy_template, + create_deploy_template, update_deploy_template, + patch_deploy_template, delete_deploy_template + +Utilities +--------- + +Building config drives +^^^^^^^^^^^^^^^^^^^^^^ + +.. automodule:: openstack.baremetal.configdrive + :noindex: + :members: diff --git a/doc/source/user/proxies/baremetal_introspection.rst b/doc/source/user/proxies/baremetal_introspection.rst new file mode 100644 index 0000000..b21aba0 --- /dev/null +++ b/doc/source/user/proxies/baremetal_introspection.rst @@ -0,0 +1,21 @@ +Baremetal Introspection API +=========================== + +.. automodule:: openstack.baremetal_introspection.v1._proxy + +The Baremetal Introspection Proxy +--------------------------------- + +The baremetal introspection high-level interface is available through +the ``baremetal_introspection`` member of a +:class:`~openstack.connection.Connection` object. +The ``baremetal_introspection`` member will only be added if the service is +detected. + +Introspection Process Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.baremetal_introspection.v1._proxy.Proxy + :noindex: + :members: introspections, get_introspection, get_introspection_data, + start_introspection, wait_for_introspection, abort_introspection diff --git a/doc/source/user/proxies/block_storage_v2.rst b/doc/source/user/proxies/block_storage_v2.rst new file mode 100644 index 0000000..c5bca18 --- /dev/null +++ b/doc/source/user/proxies/block_storage_v2.rst @@ -0,0 +1,76 @@ +Block Storage API +================= + +For details on how to use block_storage, see :doc:`/user/guides/block_storage` + +.. automodule:: openstack.block_storage.v2._proxy + +The BlockStorage Class +---------------------- + +The block_storage high-level interface is available through the +``block_storage`` member of a :class:`~openstack.connection.Connection` object. +The ``block_storage`` member will only be added if the service is detected. + +Volume Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: create_volume, delete_volume, get_volume, volumes + +Backup Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: create_backup, delete_backup, get_backup, backups, restore_backup + +Capabilities Operations +^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: get_capabilities + +Limits Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: get_limits + +Type Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: create_type, delete_type, get_type, types + +Snapshot Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: create_snapshot, delete_snapshot, get_snapshot, snapshots + +Stats Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: backend_pools + +QuotaSet Operations +^^^^^^^^^^^^^^^^^^^ +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: get_quota_set, get_quota_set_defaults, + revert_quota_set, update_quota_set + +Helpers +^^^^^^^ + +.. autoclass:: openstack.block_storage.v2._proxy.Proxy + :noindex: + :members: wait_for_status, wait_for_delete diff --git a/doc/source/user/proxies/block_storage_v3.rst b/doc/source/user/proxies/block_storage_v3.rst new file mode 100644 index 0000000..6799ba2 --- /dev/null +++ b/doc/source/user/proxies/block_storage_v3.rst @@ -0,0 +1,167 @@ +Block Storage API +================= + +For details on how to use block_storage, see :doc:`/user/guides/block_storage` + +.. automodule:: openstack.block_storage.v3._proxy + +The BlockStorage Class +---------------------- + +The block_storage high-level interface is available through the +``block_storage`` member of a :class:`~openstack.connection.Connection` object. +The ``block_storage`` member will only be added if the service is detected. + +Volume Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_volume, delete_volume, update_volume, get_volume, + find_volume, volumes, get_volume_metadata, set_volume_metadata, + delete_volume_metadata, extend_volume, set_volume_readonly, + retype_volume, set_volume_bootable_status, reset_volume_status, + revert_volume_to_snapshot, attach_volume, detach_volume, + unmanage_volume, migrate_volume, complete_volume_migration, + upload_volume_to_image, reserve_volume, unreserve_volume, + begin_volume_detaching, abort_volume_detaching, + init_volume_attachment, terminate_volume_attachment, + manage_volume, + +Backend Pools Operations +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: backend_pools + +Backup Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_backup, delete_backup, get_backup, find_backup, backups, + restore_backup, reset_backup, + +Availability Zone Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: availability_zones + +Limits Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: get_limits + +Capabilities Operations +^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: get_capabilities + +Group Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_group, create_group_from_source, delete_group, update_group, + get_group, find_group, groups, reset_group_state + +Group Snapshot Operations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_group_snapshot, delete_group_snapshot, get_group_snapshot, + find_group_snapshot, group_snapshots, reset_group_snapshot_state + +Group Type Operations +^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_group_type, delete_group_type, update_group_type, + get_group_type, find_group_type, group_types, + fetch_group_type_group_specs, create_group_type_group_specs, + get_group_type_group_specs_property, + update_group_type_group_specs_property, + delete_group_type_group_specs_property + +Service Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: find_service, services, enable_service, disable_service, + thaw_service, freeze_service, failover_service + +Type Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_type, delete_type, update_type, get_type, find_type, types, + update_type_extra_specs, delete_type_extra_specs, get_type_access, + add_type_access, remove_type_access, get_type_encryption, + create_type_encryption, delete_type_encryption, + update_type_encryption + +Snapshot Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_snapshot, delete_snapshot, update_snapshot, get_snapshot, + find_snapshot, snapshots, get_snapshot_metadata, + set_snapshot_metadata, delete_snapshot_metadata, reset_snapshot, + set_snapshot_status, manage_snapshot, unmanage_snapshot + +Stats Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: backend_pools + +QuotaSet Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: get_quota_set, get_quota_set_defaults, + revert_quota_set, update_quota_set + +Helpers +^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: wait_for_status, wait_for_delete + +BlockStorageSummary Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: summary + +Attachments +^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_attachment, get_attachment, attachments, + delete_attachment, update_attachment, complete_attachment + +Transfer Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.block_storage.v3._proxy.Proxy + :noindex: + :members: create_transfer, delete_transfer, find_transfer, + get_transfer, transfers, accept_transfer diff --git a/doc/source/user/proxies/clustering.rst b/doc/source/user/proxies/clustering.rst new file mode 100644 index 0000000..46bf497 --- /dev/null +++ b/doc/source/user/proxies/clustering.rst @@ -0,0 +1,119 @@ +Cluster API +=========== + +.. automodule:: openstack.clustering.v1._proxy + +The Cluster Class +----------------- + +The cluster high-level interface is available through the ``cluster`` +member of a :class:`~openstack.connection.Connection` object. The +``cluster`` member will only be added if the service is detected. + + +Build Info Operations +^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: get_build_info + + +Profile Type Operations +^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: profile_types, get_profile_type + + +Profile Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: create_profile, update_profile, delete_profile, get_profile, + find_profile, profiles, validate_profile + + +Policy Type Operations +^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: policy_types, get_policy_type + + +Policy Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: create_policy, update_policy, delete_policy, get_policy, + find_policy, policies + +validate_policy + + +Cluster Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: create_cluster, update_cluster, delete_cluster, get_cluster, + find_cluster, clusters, check_cluster, recover_cluster, + resize_cluster, scale_in_cluster, scale_out_cluster, + collect_cluster_attrs, perform_operation_on_cluster, + add_nodes_to_cluster, remove_nodes_from_cluster, + replace_nodes_in_cluster, attach_policy_to_cluster, + update_cluster_policy, detach_policy_from_cluster, + get_cluster_policy, cluster_policies + +Node Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: create_node, update_node, delete_node, get_node, find_node, nodes, + check_node, recover_node, perform_operation_on_node, adopt_node + + +Receiver Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: create_receiver, update_receiver, delete_receiver, + get_receiver, find_receiver, receivers + + +Action Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: get_action, actions + + +Event Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: get_event, events + + +Helper Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: wait_for_delete, wait_for_status + + +Service Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.clustering.v1._proxy.Proxy + :noindex: + :members: services diff --git a/doc/source/user/proxies/compute.rst b/doc/source/user/proxies/compute.rst new file mode 100644 index 0000000..b2b693b --- /dev/null +++ b/doc/source/user/proxies/compute.rst @@ -0,0 +1,181 @@ +Compute API +=========== + +For details on how to use compute, see :doc:`/user/guides/compute` + +.. automodule:: openstack.compute.v2._proxy + +The Compute Class +----------------- + +The compute high-level interface is available through the ``compute`` +member of a :class:`~openstack.connection.Connection` object. The +``compute`` member will only be added if the service is detected. + + +Server Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: create_server, update_server, delete_server, get_server, + find_server, servers, get_server_metadata, set_server_metadata, + delete_server_metadata, wait_for_server, create_server_image, + backup_server + +Network Actions +*************** + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: add_fixed_ip_to_server, remove_fixed_ip_from_server, + add_floating_ip_to_server, remove_floating_ip_from_server, + fetch_server_security_groups, add_security_group_to_server, + remove_security_group_from_server + +Starting, Stopping, etc. +************************ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: start_server, stop_server, suspend_server, resume_server, + reboot_server, restore_server, shelve_server, unshelve_server, + lock_server, unlock_server, pause_server, unpause_server, + rescue_server, unrescue_server, evacuate_server, migrate_server, + get_server_console_output, live_migrate_server + +Modifying a Server +****************** + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: resize_server, confirm_server_resize, revert_server_resize, + rebuild_server, reset_server_state, change_server_password, + get_server_password + +Image Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: images, get_image, find_image, delete_image, get_image_metadata, + set_image_metadata, delete_image_metadata + +Flavor Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: create_flavor, delete_flavor, get_flavor, find_flavor, flavors, + flavor_add_tenant_access, flavor_remove_tenant_access, + get_flavor_access, fetch_flavor_extra_specs, + create_flavor_extra_specs, get_flavor_extra_specs_property, + update_flavor_extra_specs_property, + delete_flavor_extra_specs_property + +Service Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: services, enable_service, disable_service, update_service_forced_down, + delete_service, update_service, find_service + +Volume Attachment Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: create_volume_attachment, update_volume_attachment, + delete_volume_attachment, get_volume_attachment, + volume_attachments + +Keypair Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: create_keypair, delete_keypair, get_keypair, find_keypair, + keypairs + +Server IPs +^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: server_ips + +Server Group Operations +^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: create_server_group, delete_server_group, get_server_group, + find_server_group, server_groups + +Server Interface Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: create_server_interface, delete_server_interface, + get_server_interface, server_interfaces, + +Availability Zone Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: availability_zones + +Limits Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: get_limits + +Hypervisor Operations +^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: get_hypervisor, find_hypervisor, hypervisors, + get_hypervisor_uptime + +Extension Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: find_extension, extensions + +QuotaSet Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: get_quota_set, get_quota_set_defaults, + revert_quota_set, update_quota_set + +Server Migration Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: abort_server_migration, force_complete_server_migration, + get_server_migration, server_migrations + +Migration Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: migrations + +Helpers +^^^^^^^ + +.. autoclass:: openstack.compute.v2._proxy.Proxy + :noindex: + :members: wait_for_delete diff --git a/doc/source/user/proxies/container_infrastructure_management.rst b/doc/source/user/proxies/container_infrastructure_management.rst new file mode 100644 index 0000000..99e3306 --- /dev/null +++ b/doc/source/user/proxies/container_infrastructure_management.rst @@ -0,0 +1,35 @@ +Container Infrastructure Management +=================================== + +.. automodule:: openstack.container_infrastructure_management.v1._proxy + +Cluster Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.container_infrastructure_management.v1._proxy.Proxy + :noindex: + :members: create_cluster, delete_cluster, update_cluster, get_cluster, + find_cluster, clusters + +Cluster Certificates Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.container_infrastructure_management.v1._proxy.Proxy + :noindex: + :members: create_cluster_certificate, get_cluster_certificate + +Cluster Templates Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.container_infrastructure_management.v1._proxy.Proxy + :noindex: + :members: create_cluster_template, delete_cluster_template, + find_cluster_template, + get_cluster_template, cluster_templates, update_cluster_template + +Service Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.container_infrastructure_management.v1._proxy.Proxy + :noindex: + :members: services diff --git a/doc/source/user/proxies/database.rst b/doc/source/user/proxies/database.rst new file mode 100644 index 0000000..3752b88 --- /dev/null +++ b/doc/source/user/proxies/database.rst @@ -0,0 +1,43 @@ +Database API +============ + +For details on how to use database, see :doc:`/user/guides/database` + +.. automodule:: openstack.database.v1._proxy + +The Database Class +------------------ + +The database high-level interface is available through the ``database`` +member of a :class:`~openstack.connection.Connection` object. The +``database`` member will only be added if the service is detected. + +Database Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.database.v1._proxy.Proxy + :noindex: + :members: create_database, delete_database, get_database, find_database, + databases + +Flavor Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.database.v1._proxy.Proxy + :noindex: + :members: get_flavor, find_flavor, flavors + +Instance Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.database.v1._proxy.Proxy + :noindex: + :members: create_instance, update_instance, delete_instance, get_instance, + find_instance, instances + +User Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.database.v1._proxy.Proxy + :noindex: + :members: create_user, delete_user, get_user, find_user, users diff --git a/doc/source/user/proxies/dns.rst b/doc/source/user/proxies/dns.rst new file mode 100644 index 0000000..8c53c54 --- /dev/null +++ b/doc/source/user/proxies/dns.rst @@ -0,0 +1,70 @@ +DNS API +======= + +For details on how to use dns, see :doc:`/user/guides/dns` + +.. automodule:: openstack.dns.v2._proxy + +The DNS Class +------------- + +The dns high-level interface is available through the ``dns`` +member of a :class:`~openstack.connection.Connection` object. The +``dns`` member will only be added if the service is detected. + +DNS Zone Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.dns.v2._proxy.Proxy + :noindex: + :members: create_zone, delete_zone, get_zone, find_zone, zones, + abandon_zone, xfr_zone + +Recordset Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.dns.v2._proxy.Proxy + :noindex: + :members: create_recordset, update_recordset, get_recordset, + delete_recordset, recordsets + +Zone Import Operations +^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.dns.v2._proxy.Proxy + :noindex: + :members: zone_imports, create_zone_import, get_zone_import, + delete_zone_import + +Zone Export Operations +^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.dns.v2._proxy.Proxy + :noindex: + :members: zone_exports, create_zone_export, get_zone_export, + get_zone_export_text, delete_zone_export + +FloatingIP Operations +^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.dns.v2._proxy.Proxy + :noindex: + :members: floating_ips, get_floating_ip, update_floating_ip + +Zone Transfer Operations +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.dns.v2._proxy.Proxy + :noindex: + :members: zone_transfer_requests, get_zone_transfer_request, + create_zone_transfer_request, update_zone_transfer_request, + delete_zone_transfer_request, zone_transfer_accepts, + get_zone_transfer_accept, create_zone_transfer_accept + +Zone Share Operations +^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.dns.v2._proxy.Proxy + :noindex: + :members: create_zone_share, delete_zone_share, get_zone_share, + find_zone_share, zone_shares diff --git a/doc/source/user/proxies/identity_v2.rst b/doc/source/user/proxies/identity_v2.rst new file mode 100644 index 0000000..fac47fa --- /dev/null +++ b/doc/source/user/proxies/identity_v2.rst @@ -0,0 +1,42 @@ +Identity API v2 +=============== + +For details on how to use identity, see :doc:`/user/guides/identity` + +.. automodule:: openstack.identity.v2._proxy + +The Identity v2 Class +--------------------- + +The identity high-level interface is available through the ``identity`` +member of a :class:`~openstack.connection.Connection` object. The +``identity`` member will only be added if the service is detected. + +Extension Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v2._proxy.Proxy + :noindex: + :members: get_extension, extensions + +User Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v2._proxy.Proxy + :noindex: + :members: create_user, update_user, delete_user, get_user, find_user, users + +Role Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v2._proxy.Proxy + :noindex: + :members: create_role, update_role, delete_role, get_role, find_role, roles + +Tenant Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v2._proxy.Proxy + :noindex: + :members: create_tenant, update_tenant, delete_tenant, get_tenant, + find_tenant, tenants diff --git a/doc/source/user/proxies/identity_v3.rst b/doc/source/user/proxies/identity_v3.rst new file mode 100644 index 0000000..1afe30e --- /dev/null +++ b/doc/source/user/proxies/identity_v3.rst @@ -0,0 +1,124 @@ +Identity API v3 +=============== + +For details on how to use identity, see :doc:`/user/guides/identity` + +.. automodule:: openstack.identity.v3._proxy + +The Identity v3 Class +--------------------- + +The identity high-level interface is available through the ``identity`` +member of a :class:`~openstack.connection.Connection` object. The +``identity`` member will only be added if the service is detected. + +Credential Operations +^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_credential, update_credential, delete_credential, + get_credential, find_credential, credentials + +Domain Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_domain, update_domain, delete_domain, get_domain, + find_domain, domains + +Domain Config Operations +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_domain_config, delete_domain_config, get_domain_config, + update_domain_config + +Endpoint Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_endpoint, update_endpoint, delete_endpoint, get_endpoint, + find_endpoint, endpoints + +Group Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_group, update_group, delete_group, get_group, find_group, + groups, add_user_to_group, remove_user_from_group, + check_user_in_group, group_users + +Policy Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_policy, update_policy, delete_policy, get_policy, + find_policy, policies + +Project Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_project, update_project, delete_project, get_project, + find_project, projects + +Region Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_region, update_region, delete_region, get_region, + find_region, regions + +Role Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_role, update_role, delete_role, get_role, find_role, roles + +Role Assignment Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: role_assignments, role_assignments_filter, + assign_project_role_to_user, unassign_project_role_from_user, + validate_user_has_project_role, assign_project_role_to_group, + unassign_project_role_from_group, validate_group_has_project_role, + assign_domain_role_to_user, unassign_domain_role_from_user, + validate_user_has_domain_role, assign_domain_role_to_group, + unassign_domain_role_from_group, validate_group_has_domain_role, + assign_system_role_to_user, unassign_system_role_from_user, + validate_user_has_system_role, assign_system_role_to_group, + unassign_system_role_from_group, validate_group_has_system_role + +Service Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_service, update_service, delete_service, get_service, + find_service, services + +Trust Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_trust, delete_trust, get_trust, find_trust, trusts + +User Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.identity.v3._proxy.Proxy + :noindex: + :members: create_user, update_user, delete_user, get_user, find_user, users, + user_projects diff --git a/doc/source/user/proxies/image_v1.rst b/doc/source/user/proxies/image_v1.rst new file mode 100644 index 0000000..10911a3 --- /dev/null +++ b/doc/source/user/proxies/image_v1.rst @@ -0,0 +1,18 @@ +Image API v1 +============ + +For details on how to use image, see :doc:`/user/guides/image` + +.. automodule:: openstack.image.v1._proxy + +The Image v1 Class +------------------ + +The image high-level interface is available through the ``image`` member of a +:class:`~openstack.connection.Connection` object. The ``image`` member will +only be added if the service is detected. + +.. autoclass:: openstack.image.v1._proxy.Proxy + :noindex: + :members: upload_image, update_image, delete_image, get_image, find_image, + images diff --git a/doc/source/user/proxies/image_v2.rst b/doc/source/user/proxies/image_v2.rst new file mode 100644 index 0000000..e0b5cae --- /dev/null +++ b/doc/source/user/proxies/image_v2.rst @@ -0,0 +1,110 @@ +Image API v2 +============ + +For details on how to use image, see :doc:`/user/guides/image` + +.. automodule:: openstack.image.v2._proxy + +The Image v2 Class +------------------ + +The image high-level interface is available through the ``image`` member of a +:class:`~openstack.connection.Connection` object. The ``image`` member will +only be added if the service is detected. + +Image Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: create_image, import_image, upload_image, download_image, + update_image, delete_image, get_image, find_image, images, + deactivate_image, reactivate_image, stage_image, + add_tag, remove_tag + +Member Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: add_member, remove_member, update_member, get_member, find_member, + members + +Task Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: tasks, create_task, get_task, wait_for_task + +Schema Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: get_images_schema, get_image_schema, get_members_schema, + get_member_schema, get_tasks_schema, get_task_schema, + get_metadef_namespace_schema, get_metadef_namespaces_schema, + get_metadef_resource_type_schema, get_metadef_resource_types_schema, + get_metadef_object_schema, get_metadef_objects_schema, + get_metadef_property_schema, get_metadef_properties_schema, + get_metadef_tag_schema, get_metadef_tags_schema + +Service Info Discovery Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: stores, get_import_info + + +Metadef Namespace Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: create_metadef_namespace, delete_metadef_namespace, + get_metadef_namespace, metadef_namespaces, update_metadef_namespace + + +Metadef Object Operations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: create_metadef_object, delete_metadef_object, + get_metadef_object, metadef_objects, update_metadef_object + +Metadef Resource Type Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: metadef_resource_types, metadef_resource_type_associations, + create_metadef_resource_type_association, + delete_metadef_resource_type_association + + +Metadef Property Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: create_metadef_property, update_metadef_property, + delete_metadef_property, get_metadef_property + + +Helpers +^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: wait_for_delete + + +Cache Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.image.v2._proxy.Proxy + :noindex: + :members: cache_delete_image, queue_image, get_image_cache, clear_cache diff --git a/doc/source/user/proxies/key_manager.rst b/doc/source/user/proxies/key_manager.rst new file mode 100644 index 0000000..2b611e9 --- /dev/null +++ b/doc/source/user/proxies/key_manager.rst @@ -0,0 +1,39 @@ +KeyManager API +============== + +For details on how to use key_management, see +:doc:`/user/guides/key_manager` + +.. automodule:: openstack.key_manager.v1._proxy + +The KeyManager Class +-------------------- + +The key_management high-level interface is available through the +``key_manager`` member of a :class:`~openstack.connection.Connection` +object. The ``key_manager`` member will only be added if the service is +detected. + +Secret Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.key_manager.v1._proxy.Proxy + :noindex: + :members: create_secret, update_secret, delete_secret, get_secret, + find_secret, secrets + +Container Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.key_manager.v1._proxy.Proxy + :noindex: + :members: create_container, update_container, delete_container, + get_container, find_container, containers + +Order Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.key_manager.v1._proxy.Proxy + :noindex: + :members: create_order, update_order, delete_order, get_order, + find_order, orders diff --git a/doc/source/user/proxies/load_balancer_v2.rst b/doc/source/user/proxies/load_balancer_v2.rst new file mode 100644 index 0000000..711d803 --- /dev/null +++ b/doc/source/user/proxies/load_balancer_v2.rst @@ -0,0 +1,123 @@ +Load Balancer v2 API +==================== + +.. automodule:: openstack.load_balancer.v2._proxy + +The LoadBalancer Class +---------------------- + +The load_balancer high-level interface is available through the +``load_balancer`` member of a :class:`~openstack.connection.Connection` object. +The ``load_balancer`` member will only be added if the service is detected. + +Load Balancer Operations +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_load_balancer, delete_load_balancer, find_load_balancer, + get_load_balancer, get_load_balancer_statistics, load_balancers, + update_load_balancer, failover_load_balancer, wait_for_load_balancer + +Listener Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_listener, delete_listener, find_listener, get_listener, + get_listener_statistics, listeners, update_listener + +Pool Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_pool, delete_pool, find_pool, get_pool, pools, update_pool + +Member Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_member, delete_member, find_member, get_member, members, + update_member + +Health Monitor Operations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_health_monitor, delete_health_monitor, find_health_monitor, + get_health_monitor, health_monitors, update_health_monitor + +L7 Policy Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_l7_policy, delete_l7_policy, find_l7_policy, + get_l7_policy, l7_policies, update_l7_policy + +L7 Rule Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_l7_rule, delete_l7_rule, find_l7_rule, + get_l7_rule, l7_rules, update_l7_rule + +Provider Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: providers, provider_flavor_capabilities + +Flavor Profile Operations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_flavor_profile, get_flavor_profile, flavor_profiles, + delete_flavor_profile, find_flavor_profile, update_flavor_profile + +Flavor Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_flavor, get_flavor, flavors, delete_flavor, + find_flavor, update_flavor + +Quota Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: update_quota, delete_quota, quotas, get_quota, get_quota_default + +Amphora Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: amphorae, get_amphora, find_amphora, configure_amphora, + failover_amphora + +Availability Zone Profile Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_availability_zone_profile, get_availability_zone_profile, + availability_zone_profiles, delete_availability_zone_profile, + find_availability_zone_profile, update_availability_zone_profile + +Availability Zone Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.load_balancer.v2._proxy.Proxy + :noindex: + :members: create_availability_zone, get_availability_zone, + availability_zones, delete_availability_zone, + find_availability_zone, update_availability_zone diff --git a/doc/source/user/proxies/message_v2.rst b/doc/source/user/proxies/message_v2.rst new file mode 100644 index 0000000..361842c --- /dev/null +++ b/doc/source/user/proxies/message_v2.rst @@ -0,0 +1,42 @@ +Message API v2 +============== + +For details on how to use message, see :doc:`/user/guides/message` + +.. automodule:: openstack.message.v2._proxy + +The Message v2 Class +-------------------- + +The message high-level interface is available through the ``message`` member +of a :class:`~openstack.connection.Connection` object. The ``message`` +member will only be added if the service is detected. + +Message Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.message.v2._proxy.Proxy + :noindex: + :members: post_message, delete_message, get_message, messages + +Queue Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.message.v2._proxy.Proxy + :noindex: + :members: create_queue, delete_queue, get_queue, queues + +Claim Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.message.v2._proxy.Proxy + :noindex: + :members: create_claim, update_claim, delete_claim, get_claim + +Subscription Operations +^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.message.v2._proxy.Proxy + :noindex: + :members: create_subscription, delete_subscription, get_subscription, + subscriptions diff --git a/doc/source/user/proxies/network.rst b/doc/source/user/proxies/network.rst new file mode 100644 index 0000000..a742f99 --- /dev/null +++ b/doc/source/user/proxies/network.rst @@ -0,0 +1,359 @@ +Network API +=========== + +For details on how to use network, see :doc:`/user/guides/network` + +.. automodule:: openstack.network.v2._proxy + +The Network Class +----------------- + +The network high-level interface is available through the ``network`` +member of a :class:`~openstack.connection.Connection` object. The +``network`` member will only be added if the service is detected. + +Network Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_network, update_network, delete_network, get_network, + find_network, networks, get_network_ip_availability, + find_network_ip_availability, network_ip_availabilities, + add_dhcp_agent_to_network, remove_dhcp_agent_from_network, + dhcp_agent_hosting_networks, + +Port Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_port, create_ports, update_port, delete_port, get_port, + find_port, ports, add_ip_to_port, remove_ip_from_port + +Router Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_router, update_router, delete_router, get_router, + find_router, routers, + add_gateway_to_router, remove_gateway_from_router, + add_external_gateways, update_external_gateways, + remove_external_gateways, + add_interface_to_router, remove_interface_from_router, + add_extra_routes_to_router, remove_extra_routes_from_router, + create_conntrack_helper, update_conntrack_helper, + delete_conntrack_helper, get_conntrack_helper, conntrack_helpers + + + +Floating IP Operations +^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_ip, update_ip, delete_ip, get_ip, find_ip, + find_available_ip, ips + +Pool Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_pool, update_pool, delete_pool, get_pool, find_pool, pools, + create_pool_member, update_pool_member, delete_pool_member, + get_pool_member, find_pool_member, pool_members + +Auto Allocated Topology Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: delete_auto_allocated_topology, get_auto_allocated_topology, + validate_auto_allocated_topology + +Default Security Group Rules Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_default_security_group_rule, + find_default_security_group_rule, get_default_security_group_rule, + delete_default_security_group_rule, default_security_group_rules + +Security Group Operations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_security_group, update_security_group, + delete_security_group, get_security_group, + get_security_group_rule, find_security_group, + find_security_group_rule, security_group_rules, + security_groups, create_security_group_rule, + create_security_group_rules, delete_security_group_rule + +Address Group Operations +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_address_group, delete_address_group, find_address_group, + get_address_group, address_groups, update_address_group, + add_addresses_to_address_group, remove_addresses_from_address_group + +Availability Zone Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: availability_zones + +Address Scope Operations +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_address_scope, update_address_scope, delete_address_scope, + get_address_scope, find_address_scope, address_scopes + +Quota Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: update_quota, delete_quota, get_quota, get_quota_default, quotas + +QoS Operations +^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_qos_policy, update_qos_policy, delete_qos_policy, + get_qos_policy, find_qos_policy, qos_policies, get_qos_rule_type, + find_qos_rule_type, qos_rule_types, + create_qos_minimum_bandwidth_rule, + update_qos_minimum_bandwidth_rule, + delete_qos_minimum_bandwidth_rule, + get_qos_minimum_bandwidth_rule, + find_qos_minimum_bandwidth_rule, + qos_minimum_bandwidth_rules, + create_qos_minimum_packet_rate_rule, + update_qos_minimum_packet_rate_rule, + delete_qos_minimum_packet_rate_rule, + get_qos_minimum_packet_rate_rule, + find_qos_minimum_packet_rate_rule, + qos_minimum_packet_rate_rules, + create_qos_bandwidth_limit_rule, + update_qos_bandwidth_limit_rule, + delete_qos_bandwidth_limit_rule, + get_qos_bandwidth_limit_rule, find_qos_bandwidth_limit_rule, + qos_bandwidth_limit_rules, + create_qos_dscp_marking_rule, update_qos_dscp_marking_rule, + delete_qos_dscp_marking_rule, get_qos_dscp_marking_rule, + find_qos_dscp_marking_rule, qos_dscp_marking_rules + +Agent Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: delete_agent, update_agent, get_agent, agents, + agent_hosted_routers, routers_hosting_l3_agents, + network_hosting_dhcp_agents, add_router_to_agent, + remove_router_from_agent + +RBAC Operations +^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_rbac_policy, update_rbac_policy, delete_rbac_policy, + get_rbac_policy, find_rbac_policy, rbac_policies + +Listener Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_listener, update_listener, delete_listener, + get_listener, find_listener, listeners + +Subnet Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_subnet, update_subnet, delete_subnet, get_subnet, + get_subnet_ports, find_subnet, subnets, create_subnet_pool, + update_subnet_pool, delete_subnet_pool, get_subnet_pool, + find_subnet_pool, subnet_pools + +Load Balancer Operations +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_load_balancer, update_load_balancer, delete_load_balancer, + get_load_balancer, find_load_balancer, load_balancers + +Health Monitor Operations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_health_monitor, update_health_monitor, + delete_health_monitor, get_health_monitor, find_health_monitor, + health_monitors + +Metering Label Operations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_metering_label, update_metering_label, + delete_metering_label, get_metering_label, find_metering_label, + metering_labels, create_metering_label_rule, + update_metering_label_rule, delete_metering_label_rule, + get_metering_label_rule, find_metering_label_rule, + metering_label_rules + +Segment Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_segment, update_segment, delete_segment, get_segment, + find_segment, segments + +Flavor Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_flavor, update_flavor, delete_flavor, get_flavor, + find_flavor, flavors + +Service Profile Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_service_profile, update_service_profile, + delete_service_profile, get_service_profile, find_service_profile, + service_profiles, associate_flavor_with_service_profile, + disassociate_flavor_from_service_profile + +Tag Operations +^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: set_tags + +VPNaaS Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_vpn_service, update_vpn_service, delete_vpn_service, + get_vpn_service, find_vpn_service, vpn_services, create_vpn_endpoint_group, + update_vpn_endpoint_group, delete_vpn_endpoint_group, + get_vpn_endpoint_group, find_vpn_endpoint_group, vpn_endpoint_groups, + create_vpn_ipsec_site_connection, update_vpn_ipsec_site_connection, + delete_vpn_ipsec_site_connection, get_vpn_ipsec_site_connection, + find_vpn_ipsec_site_connection, vpn_ipsec_site_connections, + create_vpn_ike_policy, update_vpn_ike_policy, delete_vpn_ike_policy, + get_vpn_ike_policy, find_vpn_ike_policy, vpn_ike_policies, + create_vpn_ipsec_policy, update_vpn_ipsec_policy, delete_vpn_ipsec_policy, + get_vpn_ipsec_policy, find_vpn_ipsec_policy, vpn_ipsec_policies + +Extension Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: find_extension, extensions + +Service Provider Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: service_providers + +Local IP Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_local_ip, delete_local_ip, find_local_ip, get_local_ip, + local_ips, update_local_ip, create_local_ip_association, + delete_local_ip_association, find_local_ip_association, + get_local_ip_association, local_ip_associations + +Ndp Proxy Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_ndp_proxy, get_ndp_proxy, find_ndp_proxy, delete_ndp_proxy, + ndp_proxies, update_ndp_proxy + +BGP Operations +^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_bgp_peer, delete_bgp_peer, find_bgp_peer, get_bgp_peer, + update_bgp_peer, bgp_peers, create_bgp_speaker, + delete_bgp_speaker, find_bgp_speaker, get_bgp_speaker, + update_bgp_speaker, bgp_speakers, add_bgp_peer_to_speaker, + remove_bgp_peer_from_speaker, add_gateway_network_to_speaker, + remove_gateway_network_from_speaker, + get_advertised_routes_of_speaker, + get_bgp_dragents_hosting_speaker, add_bgp_speaker_to_dragent, + get_bgp_speakers_hosted_by_dragent, + remove_bgp_speaker_from_dragent + +Tap As A Service Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_tap_flow, delete_tap_flow, find_tap_flow, get_tap_flow, + update_tap_flow, tap_flows, create_tap_service, delete_tap_service, + find_tap_service, update_tap_service, tap_services + +BGPVPN operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_bgpvpn, delete_bgpvpn, find_bgpvpn, get_bgpvpn, + update_bgpvpn, bgpvpns, create_bgpvpn_network_association, + delete_bgpvpn_network_association, get_bgpvpn_network_association, + bgpvpn_network_associations, create_bgpvpn_port_association, + delete_bgpvpn_port_association, find_bgpvpn_port_association, + get_bgpvpn_port_association, update_bgpvpn_port_association, + bgpvpn_port_associations, create_bgpvpn_router_association, + delete_bgpvpn_router_association, get_bgpvpn_router_association, + update_bgpvpn_router_association, bgpvpn_router_associations + +SFC operations +^^^^^^^^^^^^^^ + +.. autoclass:: openstack.network.v2._proxy.Proxy + :noindex: + :members: create_sfc_flow_classifier, delete_sfc_flow_classifier, + find_sfc_flow_classifier, get_sfc_flow_classifier, + update_sfc_flow_classifier, create_sfc_port_chain, + delete_sfc_port_chain, find_sfc_port_chain, get_sfc_port_chain, + update_sfc_port_chain, create_sfc_port_pair, delete_sfc_port_pair, + find_sfc_port_pair, get_sfc_port_pair, update_sfc_port_pair, + create_sfc_port_pair_group, delete_sfc_port_pair_group, + find_sfc_port_pair_group, get_sfc_port_pair_group, + update_sfc_port_pair_group, create_sfc_service_graph, + delete_sfc_service_graph, find_sfc_service_graph, + get_sfc_service_graph, update_sfc_service_graph diff --git a/doc/source/user/proxies/object_store.rst b/doc/source/user/proxies/object_store.rst new file mode 100644 index 0000000..fa286d8 --- /dev/null +++ b/doc/source/user/proxies/object_store.rst @@ -0,0 +1,37 @@ +Object Store API +================ + +For details on how to use this API, see :doc:`/user/guides/object_store` + +.. automodule:: openstack.object_store.v1._proxy + +The Object Store Class +---------------------- + +The Object Store high-level interface is exposed as the ``object_store`` +object on :class:`~openstack.connection.Connection` objects. + +Account Operations +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.object_store.v1._proxy.Proxy + :noindex: + :members: get_account_metadata, set_account_metadata, delete_account_metadata + +Container Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.object_store.v1._proxy.Proxy + :noindex: + :members: create_container, delete_container, containers, + get_container_metadata, set_container_metadata, + delete_container_metadata + +Object Operations +^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.object_store.v1._proxy.Proxy + :noindex: + :members: upload_object, download_object, copy_object, delete_object, + get_object, objects, get_object_metadata, set_object_metadata, + delete_object_metadata diff --git a/doc/source/user/proxies/orchestration.rst b/doc/source/user/proxies/orchestration.rst new file mode 100644 index 0000000..c9f3fa4 --- /dev/null +++ b/doc/source/user/proxies/orchestration.rst @@ -0,0 +1,48 @@ +Orchestration API +================= + +For details on how to use orchestration, see :doc:`/user/guides/orchestration` + +.. automodule:: openstack.orchestration.v1._proxy + +The Orchestration Class +----------------------- + +The orchestration high-level interface is available through the +``orchestration`` member of a :class:`~openstack.connection.Connection` +object. The ``orchestration`` member will only be added if the service +is detected. + +Stack Operations +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.orchestration.v1._proxy.Proxy + :noindex: + :members: create_stack, check_stack, update_stack, delete_stack, find_stack, suspend_stack, resume_stack, + get_stack, get_stack_environment, get_stack_files, + get_stack_template, stacks, validate_template, resources, + export_stack + +Stack Event Operations +^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.orchestration.v1._proxy.Proxy + :noindex: + :members: stack_events + +Software Configuration Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.orchestration.v1._proxy.Proxy + :noindex: + :members: create_software_config, delete_software_config, + get_software_config, software_configs + +Software Deployment Operations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.orchestration.v1._proxy.Proxy + :noindex: + :members: create_software_deployment, update_software_deployment, + delete_software_deployment, get_software_deployment, + software_deployments diff --git a/doc/source/user/proxies/placement.rst b/doc/source/user/proxies/placement.rst new file mode 100644 index 0000000..864b412 --- /dev/null +++ b/doc/source/user/proxies/placement.rst @@ -0,0 +1,49 @@ +Placement API +============= + +.. automodule:: openstack.placement.v1._proxy + +The Placement Class +------------------- + +The placement high-level interface is available through the ``placement`` +member of a :class:`~openstack.connection.Connection` object. +The ``placement`` member will only be added if the service is detected. + +Resource Classes +^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.placement.v1._proxy.Proxy + :noindex: + :members: create_resource_class, update_resource_class, + delete_resource_class, get_resource_class, + resource_classes + +Resource Providers +^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.placement.v1._proxy.Proxy + :noindex: + :members: create_resource_provider, update_resource_provider, + delete_resource_provider, get_resource_provider, + find_resource_provider, resource_providers, + get_resource_provider_aggregates, + set_resource_provider_aggregates + +Resource Provider Inventories +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.placement.v1._proxy.Proxy + :noindex: + :members: create_resource_provider_inventory, + update_resource_provider_inventory, + delete_resource_provider_inventory, + get_resource_provider_inventory, + resource_provider_inventories + +Traits +^^^^^^ + +.. autoclass:: openstack.placement.v1._proxy.Proxy + :noindex: + :members: create_trait, delete_trait, get_trait, traits diff --git a/doc/source/user/proxies/shared_file_system.rst b/doc/source/user/proxies/shared_file_system.rst new file mode 100644 index 0000000..2a3a756 --- /dev/null +++ b/doc/source/user/proxies/shared_file_system.rst @@ -0,0 +1,194 @@ +Shared File System API +====================== + +.. automodule:: openstack.shared_file_system.v2._proxy + +The Shared File System Class +---------------------------- + +The high-level interface for accessing the shared file systems service API is +available through the ``shared_file_system`` member of a :class:`~openstack +.connection.Connection` object. The ``shared_file_system`` member will only +be added if the service is detected. ``share`` is an alias of the +``shared_file_system`` member. + + +Shared File System Availability Zones +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Interact with Availability Zones supported by the Shared File Systems +service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: availability_zones + + +Shared File System Shares +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Interact with Shares supported by the Shared File Systems +service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: shares, get_share, delete_share, update_share, create_share, + revert_share_to_snapshot, resize_share, find_share, manage_share, + unmanage_share + + +Shared File System Storage Pools +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Interact with the storage pool statistics exposed by the Shared File +Systems Service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: storage_pools + + +Shared File System User Messages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +View and manipulate asynchronous user messages emitted by the Shared +File Systems service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: user_messages, get_user_message, delete_user_message + + +Shared File System Limits +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Get absolute limits of resources supported by the Shared File Systems +service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: limits + + +Shared File System Snapshots +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Interact with Share Snapshots supported by the Shared File Systems +service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: share_snapshots, get_share_snapshot, delete_share_snapshot, + update_share_snapshot, create_share_snapshot + +Shared File System Share Snapshot Instances +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Interact with Share Snapshot Instances supported by the +Shared File Systems service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: share_snapshot_instances, get_share_snapshot_instance + + +Shared File System Share Networks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Create and manipulate Share Networks with the Shared File Systems service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: share_networks, get_share_network, delete_share_network, + update_share_network, create_share_network + + +Shared File System Share Instances +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Administrators can list, show information for, explicitly set the +state of, and force-delete share instances within the Shared File +Systems Service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: share_instances, get_share_instance, + reset_share_instance_status, + delete_share_instance + + +Shared File System Share Network Subnets +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Create and manipulate Share Network Subnets with the Shared File Systems +service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: share_network_subnets, get_share_network_subnet, + create_share_network_subnet, delete_share_network_subnet + + +Shared File System Share Access Rules +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Create, View, and Delete access rules for shares from the +Shared File Systems service. Access rules can also have their deletion +and visibility restricted during creation. A lock reason can also be +specified. The deletion restriction can be removed during the access removal. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: access_rules, get_access_rule, create_access_rule, + delete_access_rule + + +Shared File System Share Groups +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Interact with Share groups supported by the Shared File Systems +service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: share_groups, get_share_group, delete_share_group, + update_share_group, create_share_group, find_share_group + + +Shared File System Share Group Snapshots +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Interact with Share Group Snapshots by the Shared File Systems +service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: share_group_snapshots, get_share_group_snapshot, create_share_group_snapshot, + reset_share_group_snapshot_status, update_share_group_snapshot, + delete_share_group_snapshot + + +Shared File System Share Metadata +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +List, Get, Create, Update, and Delete metadata for shares from the +Shared File Systems service. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: get_share_metadata, get_share_metadata_item, + create_share_metadata, update_share_metadata, + delete_share_metadata + + +Shared File System Resource Locks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Create, list, update and delete locks for resources. When a resource is +locked, it means that it can be deleted only by services, admins or +the user that created the lock. + +.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy + :noindex: + :members: resource_locks, get_resource_lock, update_resource_lock, + delete_resource_lock, create_resource_lock diff --git a/doc/source/user/proxies/workflow.rst b/doc/source/user/proxies/workflow.rst new file mode 100644 index 0000000..f47baa5 --- /dev/null +++ b/doc/source/user/proxies/workflow.rst @@ -0,0 +1,35 @@ +Workflow API +============ + +.. automodule:: openstack.workflow.v2._proxy + +The Workflow Class +------------------ + +The workflow high-level interface is available through the ``workflow`` +member of a :class:`~openstack.connection.Connection` object. +The ``workflow`` member will only be added if the service is detected. + +Workflow Operations +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.workflow.v2._proxy.Proxy + :noindex: + :members: create_workflow, update_workflow, delete_workflow, + get_workflow, find_workflow, workflows + +Execution Operations +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.workflow.v2._proxy.Proxy + :noindex: + :members: create_execution, delete_execution, get_execution, + find_execution, executions + +Cron Trigger Operations +^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: openstack.workflow.v2._proxy.Proxy + :noindex: + :members: create_cron_trigger, delete_cron_trigger, get_cron_trigger, + find_cron_trigger, cron_triggers diff --git a/doc/source/user/resource.rst b/doc/source/user/resource.rst new file mode 100644 index 0000000..c7b5ae2 --- /dev/null +++ b/doc/source/user/resource.rst @@ -0,0 +1,22 @@ +Resource +======== +.. automodule:: openstack.resource + +Components +---------- + +.. autoclass:: openstack.resource.Body + :members: + +.. autoclass:: openstack.resource.Header + :members: + +.. autoclass:: openstack.resource.URI + :members: + +The Resource class +------------------ + +.. autoclass:: openstack.resource.Resource + :members: + :member-order: bysource diff --git a/doc/source/user/resources/accelerator/index.rst b/doc/source/user/resources/accelerator/index.rst new file mode 100644 index 0000000..5e09cf6 --- /dev/null +++ b/doc/source/user/resources/accelerator/index.rst @@ -0,0 +1,11 @@ +Accelerator v2 Resources +======================== + +.. toctree:: + :maxdepth: 1 + + v2/device + v2/deployable + v2/device_profile + v2/accelerator_request + diff --git a/doc/source/user/resources/accelerator/v2/accelerator_request.rst b/doc/source/user/resources/accelerator/v2/accelerator_request.rst new file mode 100644 index 0000000..1725114 --- /dev/null +++ b/doc/source/user/resources/accelerator/v2/accelerator_request.rst @@ -0,0 +1,13 @@ +openstack.accelerator.v2.accelerator_request +============================================ + +.. automodule:: openstack.accelerator.v2.accelerator_request + +The AcceleratorRequest Class +---------------------------- + +The ``AcceleratorRequest`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.accelerator.v2.accelerator_request.AcceleratorRequest + :members: diff --git a/doc/source/user/resources/accelerator/v2/deployable.rst b/doc/source/user/resources/accelerator/v2/deployable.rst new file mode 100644 index 0000000..383795c --- /dev/null +++ b/doc/source/user/resources/accelerator/v2/deployable.rst @@ -0,0 +1,13 @@ +openstack.accelerator.v2.deployable +============================================ + +.. automodule:: openstack.accelerator.v2.deployable + +The Deployable Class +-------------------- + +The ``Deployable`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.accelerator.v2.deployable.Deployable + :members: + diff --git a/doc/source/user/resources/accelerator/v2/device.rst b/doc/source/user/resources/accelerator/v2/device.rst new file mode 100644 index 0000000..9437435 --- /dev/null +++ b/doc/source/user/resources/accelerator/v2/device.rst @@ -0,0 +1,13 @@ +openstack.accelerator.v2.device +============================================ + +.. automodule:: openstack.accelerator.v2.device + +The Device Class +-------------------- + +The ``Device`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.accelerator.v2.device.Device + :members: + diff --git a/doc/source/user/resources/accelerator/v2/device_profile.rst b/doc/source/user/resources/accelerator/v2/device_profile.rst new file mode 100644 index 0000000..9849c78 --- /dev/null +++ b/doc/source/user/resources/accelerator/v2/device_profile.rst @@ -0,0 +1,14 @@ +openstack.accelerator.v2.device_profile +============================================ + +.. automodule:: openstack.accelerator.v2.device_profile + +The DeviceProfile Class +----------------------- + +The ``DeviceProfile`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.accelerator.v2.device_profile.DeviceProfile + :members: + diff --git a/doc/source/user/resources/baremetal/index.rst b/doc/source/user/resources/baremetal/index.rst new file mode 100644 index 0000000..1fabe14 --- /dev/null +++ b/doc/source/user/resources/baremetal/index.rst @@ -0,0 +1,16 @@ +Baremetal Resources +=================== + +.. toctree:: + :maxdepth: 1 + + v1/driver + v1/chassis + v1/node + v1/port + v1/port_group + v1/allocation + v1/volume_connector + v1/volume_target + v1/deploy_templates + v1/conductor diff --git a/doc/source/user/resources/baremetal/v1/allocation.rst b/doc/source/user/resources/baremetal/v1/allocation.rst new file mode 100644 index 0000000..0135180 --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/allocation.rst @@ -0,0 +1,12 @@ +openstack.baremetal.v1.Allocation +================================= + +.. automodule:: openstack.baremetal.v1.allocation + +The Allocation Class +-------------------- + +The ``Allocation`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.allocation.Allocation + :members: diff --git a/doc/source/user/resources/baremetal/v1/chassis.rst b/doc/source/user/resources/baremetal/v1/chassis.rst new file mode 100644 index 0000000..87a6063 --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/chassis.rst @@ -0,0 +1,12 @@ +openstack.baremetal.v1.chassis +============================== + +.. automodule:: openstack.baremetal.v1.chassis + +The Chassis Class +----------------- + +The ``Chassis`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.chassis.Chassis + :members: diff --git a/doc/source/user/resources/baremetal/v1/conductor.rst b/doc/source/user/resources/baremetal/v1/conductor.rst new file mode 100644 index 0000000..9e1bd11 --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/conductor.rst @@ -0,0 +1,13 @@ +openstack.baremetal.v1.conductor +================================ + +.. automodule:: openstack.baremetal.v1.conductor + +The Conductor Class +------------------- + +The ``Conductor`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.conductor.Conductor + :members: diff --git a/doc/source/user/resources/baremetal/v1/deploy_templates.rst b/doc/source/user/resources/baremetal/v1/deploy_templates.rst new file mode 100644 index 0000000..e55e63a --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/deploy_templates.rst @@ -0,0 +1,13 @@ +openstack.baremetal.v1.deploy_templates +======================================= + +.. automodule:: openstack.baremetal.v1.deploy_templates + +The DeployTemplate Class +------------------------- + +The ``DeployTemplate`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.deploy_templates.DeployTemplate + :members: diff --git a/doc/source/user/resources/baremetal/v1/driver.rst b/doc/source/user/resources/baremetal/v1/driver.rst new file mode 100644 index 0000000..f987d08 --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/driver.rst @@ -0,0 +1,12 @@ +openstack.baremetal.v1.driver +============================= + +.. automodule:: openstack.baremetal.v1.driver + +The Driver Class +---------------- + +The ``Driver`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.driver.Driver + :members: diff --git a/doc/source/user/resources/baremetal/v1/node.rst b/doc/source/user/resources/baremetal/v1/node.rst new file mode 100644 index 0000000..14e691e --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/node.rst @@ -0,0 +1,35 @@ +openstack.baremetal.v1.Node +=========================== + +.. automodule:: openstack.baremetal.v1.node + +The Node Class +-------------- + +The ``Node`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.node.Node + :members: + +The PowerAction Class +^^^^^^^^^^^^^^^^^^^^^ + +The ``PowerAction`` enumeration represents known power actions. + +.. autoclass:: openstack.baremetal.v1.node.PowerAction + :members: + +The ValidationResult Class +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``ValidationResult`` class represents the result of a validation. + +.. autoclass:: openstack.baremetal.v1.node.ValidationResult + :members: + +The WaitResult Class +^^^^^^^^^^^^^^^^^^^^ + +The ``WaitResult`` class represents the result of waiting for several nodes. + +.. autoclass:: openstack.baremetal.v1.node.WaitResult diff --git a/doc/source/user/resources/baremetal/v1/port.rst b/doc/source/user/resources/baremetal/v1/port.rst new file mode 100644 index 0000000..2bf0e18 --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/port.rst @@ -0,0 +1,12 @@ +openstack.baremetal.v1.port +=========================== + +.. automodule:: openstack.baremetal.v1.port + +The Port Class +-------------- + +The ``Port`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.port.Port + :members: diff --git a/doc/source/user/resources/baremetal/v1/port_group.rst b/doc/source/user/resources/baremetal/v1/port_group.rst new file mode 100644 index 0000000..45c2bd9 --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/port_group.rst @@ -0,0 +1,12 @@ +openstack.baremetal.v1.port_group +================================= + +.. automodule:: openstack.baremetal.v1.port_group + +The PortGroup Class +------------------- + +The ``PortGroup`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.port_group.PortGroup + :members: diff --git a/doc/source/user/resources/baremetal/v1/volume_connector.rst b/doc/source/user/resources/baremetal/v1/volume_connector.rst new file mode 100644 index 0000000..3ffae22 --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/volume_connector.rst @@ -0,0 +1,13 @@ +openstack.baremetal.v1.volume_connector +======================================= + +.. automodule:: openstack.baremetal.v1.volume_connector + +The VolumeConnector Class +------------------------- + +The ``VolumeConnector`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.volume_connector.VolumeConnector + :members: diff --git a/doc/source/user/resources/baremetal/v1/volume_target.rst b/doc/source/user/resources/baremetal/v1/volume_target.rst new file mode 100644 index 0000000..93525a8 --- /dev/null +++ b/doc/source/user/resources/baremetal/v1/volume_target.rst @@ -0,0 +1,13 @@ +openstack.baremetal.v1.volume_target +======================================= + +.. automodule:: openstack.baremetal.v1.volume_target + +The VolumeTarget Class +------------------------- + +The ``VolumeTarget`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal.v1.volume_target.VolumeTarget + :members: diff --git a/doc/source/user/resources/baremetal_introspection/index.rst b/doc/source/user/resources/baremetal_introspection/index.rst new file mode 100644 index 0000000..b1da156 --- /dev/null +++ b/doc/source/user/resources/baremetal_introspection/index.rst @@ -0,0 +1,8 @@ +Baremetal Introspection Resources +================================= + +.. toctree:: + :maxdepth: 1 + + v1/introspection + v1/introspection_rule diff --git a/doc/source/user/resources/baremetal_introspection/v1/introspection.rst b/doc/source/user/resources/baremetal_introspection/v1/introspection.rst new file mode 100644 index 0000000..6275e25 --- /dev/null +++ b/doc/source/user/resources/baremetal_introspection/v1/introspection.rst @@ -0,0 +1,13 @@ +openstack.baremetal_introspection.v1.Introspection +================================================== + +.. automodule:: openstack.baremetal_introspection.v1.introspection + +The Introspection Class +----------------------- + +The ``Introspection`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal_introspection.v1.introspection.Introspection + :members: diff --git a/doc/source/user/resources/baremetal_introspection/v1/introspection_rule.rst b/doc/source/user/resources/baremetal_introspection/v1/introspection_rule.rst new file mode 100644 index 0000000..ba8bc28 --- /dev/null +++ b/doc/source/user/resources/baremetal_introspection/v1/introspection_rule.rst @@ -0,0 +1,13 @@ +openstack.baremetal_introspection.v1.introspection_rule +======================================================== + +.. automodule:: openstack.baremetal_introspection.v1.introspection_rule + +The IntrospectionRule Class +---------------------------- + +The ``IntrospectionRule`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.baremetal_introspection.v1.introspection_rule.IntrospectionRule + :members: diff --git a/doc/source/user/resources/block_storage/index.rst b/doc/source/user/resources/block_storage/index.rst new file mode 100644 index 0000000..18c2c98 --- /dev/null +++ b/doc/source/user/resources/block_storage/index.rst @@ -0,0 +1,20 @@ +Block Storage Resources +======================= + +Block Storage v2 Resources +-------------------------- + +.. toctree:: + :maxdepth: 1 + :glob: + + v2/* + +Block Storage v3 Resources +-------------------------- + +.. toctree:: + :maxdepth: 1 + :glob: + + v3/* diff --git a/doc/source/user/resources/block_storage/v2/backup.rst b/doc/source/user/resources/block_storage/v2/backup.rst new file mode 100644 index 0000000..a291fa5 --- /dev/null +++ b/doc/source/user/resources/block_storage/v2/backup.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v2.backup +================================= + +.. automodule:: openstack.block_storage.v2.backup + +The Backup Class +---------------- + +The ``Backup`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.backup.Backup + :members: diff --git a/doc/source/user/resources/block_storage/v2/capabilities.rst b/doc/source/user/resources/block_storage/v2/capabilities.rst new file mode 100644 index 0000000..5835928 --- /dev/null +++ b/doc/source/user/resources/block_storage/v2/capabilities.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v2.capabilities +======================================= + +.. automodule:: openstack.block_storage.v2.capabilities + +The Capabilities Class +---------------------- + +The ``Capabilities`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.capabilities.Capabilities + :members: diff --git a/doc/source/user/resources/block_storage/v2/limits.rst b/doc/source/user/resources/block_storage/v2/limits.rst new file mode 100644 index 0000000..ec6e8fd --- /dev/null +++ b/doc/source/user/resources/block_storage/v2/limits.rst @@ -0,0 +1,37 @@ +openstack.block_storage.v2.limits +================================= + +.. automodule:: openstack.block_storage.v2.limits + +The AbsoluteLimit Class +----------------------- + +The ``AbsoluteLimit`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.limits.AbsoluteLimit + :members: + +The Limit Class +--------------- + +The ``Limit`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.limits.Limit + :members: + +The RateLimit Class +------------------- + +The ``RateLimit`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.limits.RateLimit + :members: + +The RateLimits Class +-------------------- + +The ``RateLimits`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.limits.RateLimits + :members: diff --git a/doc/source/user/resources/block_storage/v2/quota_set.rst b/doc/source/user/resources/block_storage/v2/quota_set.rst new file mode 100644 index 0000000..35211ae --- /dev/null +++ b/doc/source/user/resources/block_storage/v2/quota_set.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v2.quota_set +==================================== + +.. automodule:: openstack.block_storage.v2.quota_set + +The QuotaSet Class +------------------ + +The ``QuotaSet`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.quota_set.QuotaSet + :members: diff --git a/doc/source/user/resources/block_storage/v2/snapshot.rst b/doc/source/user/resources/block_storage/v2/snapshot.rst new file mode 100644 index 0000000..5b2eea1 --- /dev/null +++ b/doc/source/user/resources/block_storage/v2/snapshot.rst @@ -0,0 +1,21 @@ +openstack.block_storage.v2.snapshot +=================================== + +.. automodule:: openstack.block_storage.v2.snapshot + +The Snapshot Class +------------------ + +The ``Snapshot`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.snapshot.Snapshot + :members: + +The SnapshotDetail Class +------------------------ + +The ``SnapshotDetail`` class inherits from +:class:`~openstack.block_storage.v2.snapshot.Snapshot`. + +.. autoclass:: openstack.block_storage.v2.snapshot.SnapshotDetail + :members: diff --git a/doc/source/user/resources/block_storage/v2/stats.rst b/doc/source/user/resources/block_storage/v2/stats.rst new file mode 100644 index 0000000..78717e2 --- /dev/null +++ b/doc/source/user/resources/block_storage/v2/stats.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v2.stats +================================ + +.. automodule:: openstack.block_storage.v2.stats + +The Pools Class +--------------- + +The ``Pools`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.stats.Pools + :members: diff --git a/doc/source/user/resources/block_storage/v2/type.rst b/doc/source/user/resources/block_storage/v2/type.rst new file mode 100644 index 0000000..963f235 --- /dev/null +++ b/doc/source/user/resources/block_storage/v2/type.rst @@ -0,0 +1,13 @@ +openstack.block_storage.v2.type +=============================== + +.. automodule:: openstack.block_storage.v2.type + +The Type Class +-------------- + +The ``Type`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.type.Type + :members: + diff --git a/doc/source/user/resources/block_storage/v2/volume.rst b/doc/source/user/resources/block_storage/v2/volume.rst new file mode 100644 index 0000000..ba4b9db --- /dev/null +++ b/doc/source/user/resources/block_storage/v2/volume.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v2.volume +================================= + +.. automodule:: openstack.block_storage.v2.volume + +The Volume Class +---------------- + +The ``Volume`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v2.volume.Volume + :members: diff --git a/doc/source/user/resources/block_storage/v3/attachment.rst b/doc/source/user/resources/block_storage/v3/attachment.rst new file mode 100644 index 0000000..113ecd3 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/attachment.rst @@ -0,0 +1,13 @@ +openstack.block_storage.v3.attachment +===================================== + +.. automodule:: openstack.block_storage.v3.attachment + +The Volume Attachment Class +--------------------------- + +The ``Volume Attachment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.attachment.Attachment + :members: create, update, complete diff --git a/doc/source/user/resources/block_storage/v3/availability_zone.rst b/doc/source/user/resources/block_storage/v3/availability_zone.rst new file mode 100644 index 0000000..83e8f0b --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/availability_zone.rst @@ -0,0 +1,13 @@ +openstack.block_storage.v3.availability_zone +============================================ + +.. automodule:: openstack.block_storage.v3.availability_zone + +The AvailabilityZone Class +-------------------------- + +The ``AvailabilityZone`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.availability_zone.AvailabilityZone + :members: diff --git a/doc/source/user/resources/block_storage/v3/backup.rst b/doc/source/user/resources/block_storage/v3/backup.rst new file mode 100644 index 0000000..2382ca9 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/backup.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.backup +================================= + +.. automodule:: openstack.block_storage.v3.backup + +The Backup Class +---------------- + +The ``Backup`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.backup.Backup + :members: diff --git a/doc/source/user/resources/block_storage/v3/block_storage_summary.rst b/doc/source/user/resources/block_storage/v3/block_storage_summary.rst new file mode 100644 index 0000000..2215db8 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/block_storage_summary.rst @@ -0,0 +1,14 @@ +openstack.block_storage.v3.block_storage_summary +================================================ + +.. automodule:: openstack.block_storage.v3.block_storage_summary + +The Block Storage Summary Class +------------------------------- + +The ``Block Storage Summary`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.block_storage_summary.BlockStorageSummary + :members: + diff --git a/doc/source/user/resources/block_storage/v3/capabilities.rst b/doc/source/user/resources/block_storage/v3/capabilities.rst new file mode 100644 index 0000000..9f4c79f --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/capabilities.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.capabilities +======================================= + +.. automodule:: openstack.block_storage.v3.capabilities + +The Capabilities Class +---------------------- + +The ``Capabilities`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.capabilities.Capabilities + :members: diff --git a/doc/source/user/resources/block_storage/v3/extension.rst b/doc/source/user/resources/block_storage/v3/extension.rst new file mode 100644 index 0000000..c72ec40 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/extension.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.extension +==================================== + +.. automodule:: openstack.block_storage.v3.extension + +The Extension Class +------------------- + +The ``Extension`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.extension.Extension + :members: diff --git a/doc/source/user/resources/block_storage/v3/group.rst b/doc/source/user/resources/block_storage/v3/group.rst new file mode 100644 index 0000000..3d1d6ab --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/group.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.group +================================ + +.. automodule:: openstack.block_storage.v3.group + +The Group Class +--------------- + +The ``Group`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.group.Group + :members: diff --git a/doc/source/user/resources/block_storage/v3/group_snapshot.rst b/doc/source/user/resources/block_storage/v3/group_snapshot.rst new file mode 100644 index 0000000..f8135e3 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/group_snapshot.rst @@ -0,0 +1,13 @@ +openstack.block_storage.v3.group_snapshot +========================================= + +.. automodule:: openstack.block_storage.v3.group_snapshot + +The GroupSnapshot Class +----------------------- + +The ``GroupSnapshot`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.group_snapshot.GroupSnapshot + :members: diff --git a/doc/source/user/resources/block_storage/v3/group_type.rst b/doc/source/user/resources/block_storage/v3/group_type.rst new file mode 100644 index 0000000..064b9d2 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/group_type.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.group_type +===================================== + +.. automodule:: openstack.block_storage.v3.group_type + +The GroupType Class +------------------- + +The ``GroupType`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.group_type.GroupType + :members: diff --git a/doc/source/user/resources/block_storage/v3/limits.rst b/doc/source/user/resources/block_storage/v3/limits.rst new file mode 100644 index 0000000..69a7d7a --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/limits.rst @@ -0,0 +1,37 @@ +openstack.block_storage.v3.limits +================================= + +.. automodule:: openstack.block_storage.v3.limits + +The AbsoluteLimit Class +----------------------- + +The ``AbsoluteLimit`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.limits.AbsoluteLimit + :members: + +The Limit Class +--------------- + +The ``Limit`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.limits.Limit + :members: + +The RateLimit Class +------------------- + +The ``RateLimit`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.limits.RateLimit + :members: + +The RateLimits Class +-------------------- + +The ``RateLimits`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.limits.RateLimits + :members: diff --git a/doc/source/user/resources/block_storage/v3/quota_set.rst b/doc/source/user/resources/block_storage/v3/quota_set.rst new file mode 100644 index 0000000..69a287b --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/quota_set.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.quota_set +==================================== + +.. automodule:: openstack.block_storage.v3.quota_set + +The QuotaSet Class +------------------ + +The ``QuotaSet`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.quota_set.QuotaSet + :members: diff --git a/doc/source/user/resources/block_storage/v3/resource_filter.rst b/doc/source/user/resources/block_storage/v3/resource_filter.rst new file mode 100644 index 0000000..eaef7b3 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/resource_filter.rst @@ -0,0 +1,13 @@ +openstack.block_storage.v3.resource_filter +========================================== + +.. automodule:: openstack.block_storage.v3.resource_filter + +The ResourceFilter Class +------------------------ + +The ``ResourceFilter`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.resource_filter.ResourceFilter + :members: diff --git a/doc/source/user/resources/block_storage/v3/service.rst b/doc/source/user/resources/block_storage/v3/service.rst new file mode 100644 index 0000000..433880a --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/service.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.service +================================== + +.. automodule:: openstack.block_storage.v3.service + +The Service Class +----------------- + +The ``Service`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.service.Service + :members: diff --git a/doc/source/user/resources/block_storage/v3/snapshot.rst b/doc/source/user/resources/block_storage/v3/snapshot.rst new file mode 100644 index 0000000..2185f58 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/snapshot.rst @@ -0,0 +1,21 @@ +openstack.block_storage.v3.snapshot +=================================== + +.. automodule:: openstack.block_storage.v3.snapshot + +The Snapshot Class +------------------ + +The ``Snapshot`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.snapshot.Snapshot + :members: + +The SnapshotDetail Class +------------------------ + +The ``SnapshotDetail`` class inherits from +:class:`~openstack.block_storage.v3.snapshot.Snapshot`. + +.. autoclass:: openstack.block_storage.v3.snapshot.SnapshotDetail + :members: diff --git a/doc/source/user/resources/block_storage/v3/stats.rst b/doc/source/user/resources/block_storage/v3/stats.rst new file mode 100644 index 0000000..b8e802e --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/stats.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.stats +================================ + +.. automodule:: openstack.block_storage.v3.stats + +The Pools Class +--------------- + +The ``Pools`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.stats.Pools + :members: diff --git a/doc/source/user/resources/block_storage/v3/transfer.rst b/doc/source/user/resources/block_storage/v3/transfer.rst new file mode 100644 index 0000000..e738c75 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/transfer.rst @@ -0,0 +1,13 @@ +openstack.block_storage.v3.transfer +=================================== + +.. automodule:: openstack.block_storage.v3.transfer + +The Volume Transfer Class +------------------------- + +The ``Volume Transfer`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.transfer.Transfer + :members: diff --git a/doc/source/user/resources/block_storage/v3/type.rst b/doc/source/user/resources/block_storage/v3/type.rst new file mode 100644 index 0000000..32ce799 --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/type.rst @@ -0,0 +1,21 @@ +openstack.block_storage.v3.type +=============================== + +.. automodule:: openstack.block_storage.v3.type + +The Type Class +-------------- + +The ``Type`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.type.Type + :members: + +The TypeEncryption Class +------------------------ + +The ``TypeEncryption`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.type.TypeEncryption + :members: diff --git a/doc/source/user/resources/block_storage/v3/volume.rst b/doc/source/user/resources/block_storage/v3/volume.rst new file mode 100644 index 0000000..edb734f --- /dev/null +++ b/doc/source/user/resources/block_storage/v3/volume.rst @@ -0,0 +1,12 @@ +openstack.block_storage.v3.volume +================================= + +.. automodule:: openstack.block_storage.v3.volume + +The Volume Class +---------------- + +The ``Volume`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.block_storage.v3.volume.Volume + :members: diff --git a/doc/source/user/resources/clustering/index.rst b/doc/source/user/resources/clustering/index.rst new file mode 100644 index 0000000..8ec0a43 --- /dev/null +++ b/doc/source/user/resources/clustering/index.rst @@ -0,0 +1,17 @@ +Cluster Resources +================= + +.. toctree:: + :maxdepth: 1 + + v1/build_info + v1/profile_type + v1/profile + v1/policy_type + v1/policy + v1/cluster + v1/node + v1/cluster_policy + v1/receiver + v1/action + v1/event diff --git a/doc/source/user/resources/clustering/v1/action.rst b/doc/source/user/resources/clustering/v1/action.rst new file mode 100644 index 0000000..a12aa28 --- /dev/null +++ b/doc/source/user/resources/clustering/v1/action.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.action +============================== + +.. automodule:: openstack.clustering.v1.action + +The Action Class +---------------- + +The ``Action`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.action.Action + :members: diff --git a/doc/source/user/resources/clustering/v1/build_info.rst b/doc/source/user/resources/clustering/v1/build_info.rst new file mode 100644 index 0000000..d84754f --- /dev/null +++ b/doc/source/user/resources/clustering/v1/build_info.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.build_info +================================== + +.. automodule:: openstack.clustering.v1.build_info + +The BuildInfo Class +------------------- + +The ``BuildInfo`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.build_info.BuildInfo + :members: diff --git a/doc/source/user/resources/clustering/v1/cluster.rst b/doc/source/user/resources/clustering/v1/cluster.rst new file mode 100644 index 0000000..779c7d6 --- /dev/null +++ b/doc/source/user/resources/clustering/v1/cluster.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.Cluster +=============================== + +.. automodule:: openstack.clustering.v1.cluster + +The Cluster Class +----------------- + +The ``Cluster`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.cluster.Cluster + :members: diff --git a/doc/source/user/resources/clustering/v1/cluster_policy.rst b/doc/source/user/resources/clustering/v1/cluster_policy.rst new file mode 100644 index 0000000..58ae943 --- /dev/null +++ b/doc/source/user/resources/clustering/v1/cluster_policy.rst @@ -0,0 +1,13 @@ +openstack.clustering.v1.cluster_policy +====================================== + +.. automodule:: openstack.clustering.v1.cluster_policy + +The ClusterPolicy Class +----------------------- + +The ``ClusterPolicy`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.cluster_policy.ClusterPolicy + :members: diff --git a/doc/source/user/resources/clustering/v1/event.rst b/doc/source/user/resources/clustering/v1/event.rst new file mode 100644 index 0000000..decc992 --- /dev/null +++ b/doc/source/user/resources/clustering/v1/event.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.event +============================= + +.. automodule:: openstack.clustering.v1.event + +The Event Class +--------------- + +The ``Event`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.event.Event + :members: diff --git a/doc/source/user/resources/clustering/v1/node.rst b/doc/source/user/resources/clustering/v1/node.rst new file mode 100644 index 0000000..3cab1ec --- /dev/null +++ b/doc/source/user/resources/clustering/v1/node.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.Node +============================ + +.. automodule:: openstack.clustering.v1.node + +The Node Class +-------------- + +The ``Node`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.node.Node + :members: diff --git a/doc/source/user/resources/clustering/v1/policy.rst b/doc/source/user/resources/clustering/v1/policy.rst new file mode 100644 index 0000000..00b832e --- /dev/null +++ b/doc/source/user/resources/clustering/v1/policy.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.policy +============================== + +.. automodule:: openstack.clustering.v1.policy + +The Policy Class +---------------- + +The ``Policy`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.policy.Policy + :members: diff --git a/doc/source/user/resources/clustering/v1/policy_type.rst b/doc/source/user/resources/clustering/v1/policy_type.rst new file mode 100644 index 0000000..ad665f9 --- /dev/null +++ b/doc/source/user/resources/clustering/v1/policy_type.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.policy_type +=================================== + +.. automodule:: openstack.clustering.v1.policy_type + +The PolicyType Class +-------------------- + +The ``PolicyType`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.policy_type.PolicyType + :members: diff --git a/doc/source/user/resources/clustering/v1/profile.rst b/doc/source/user/resources/clustering/v1/profile.rst new file mode 100644 index 0000000..c114e0c --- /dev/null +++ b/doc/source/user/resources/clustering/v1/profile.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.profile +=============================== + +.. automodule:: openstack.clustering.v1.profile + +The Profile Class +----------------- + +The ``Profile`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.profile.Profile + :members: diff --git a/doc/source/user/resources/clustering/v1/profile_type.rst b/doc/source/user/resources/clustering/v1/profile_type.rst new file mode 100644 index 0000000..d8534c0 --- /dev/null +++ b/doc/source/user/resources/clustering/v1/profile_type.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.profile_type +==================================== + +.. automodule:: openstack.clustering.v1.profile_type + +The ProfileType Class +--------------------- + +The ``ProfileType`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.profile_type.ProfileType + :members: diff --git a/doc/source/user/resources/clustering/v1/receiver.rst b/doc/source/user/resources/clustering/v1/receiver.rst new file mode 100644 index 0000000..9cdd4e5 --- /dev/null +++ b/doc/source/user/resources/clustering/v1/receiver.rst @@ -0,0 +1,12 @@ +openstack.clustering.v1.receiver +================================ + +.. automodule:: openstack.clustering.v1.receiver + +The Receiver Class +------------------ + +The ``Receiver`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.clustering.v1.receiver.Receiver + :members: diff --git a/doc/source/user/resources/compute/index.rst b/doc/source/user/resources/compute/index.rst new file mode 100644 index 0000000..b982b0e --- /dev/null +++ b/doc/source/user/resources/compute/index.rst @@ -0,0 +1,9 @@ +Compute Resources +================= + +.. toctree:: + :maxdepth: 1 + :glob: + + v2/* + version diff --git a/doc/source/user/resources/compute/v2/aggregate.rst b/doc/source/user/resources/compute/v2/aggregate.rst new file mode 100644 index 0000000..0d78688 --- /dev/null +++ b/doc/source/user/resources/compute/v2/aggregate.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.aggregate +============================== + +.. automodule:: openstack.compute.v2.aggregate + +The Aggregate Class +------------------- + +The ``Aggregate`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.aggregate.Aggregate + :members: diff --git a/doc/source/user/resources/compute/v2/availability_zone.rst b/doc/source/user/resources/compute/v2/availability_zone.rst new file mode 100644 index 0000000..8d58bb7 --- /dev/null +++ b/doc/source/user/resources/compute/v2/availability_zone.rst @@ -0,0 +1,13 @@ +openstack.compute.v2.availability_zone +====================================== + +.. automodule:: openstack.compute.v2.availability_zone + +The AvailabilityZone Class +-------------------------- + +The ``AvailabilityZone`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.availability_zone.AvailabilityZone + :members: diff --git a/doc/source/user/resources/compute/v2/extension.rst b/doc/source/user/resources/compute/v2/extension.rst new file mode 100644 index 0000000..8d6c608 --- /dev/null +++ b/doc/source/user/resources/compute/v2/extension.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.extension +============================== + +.. automodule:: openstack.compute.v2.extension + +The Extension Class +------------------- + +The ``Extension`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.extension.Extension + :members: diff --git a/doc/source/user/resources/compute/v2/flavor.rst b/doc/source/user/resources/compute/v2/flavor.rst new file mode 100644 index 0000000..45fee1b --- /dev/null +++ b/doc/source/user/resources/compute/v2/flavor.rst @@ -0,0 +1,21 @@ +openstack.compute.v2.flavor +=========================== + +.. automodule:: openstack.compute.v2.flavor + +The Flavor Class +---------------- + +The ``Flavor`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.flavor.Flavor + :members: + +The FlavorDetail Class +---------------------- + +The ``FlavorDetail`` class inherits from +:class:`~openstack.compute.v2.flavor.Flavor`. + +.. autoclass:: openstack.compute.v2.flavor.FlavorDetail + :members: diff --git a/doc/source/user/resources/compute/v2/hypervisor.rst b/doc/source/user/resources/compute/v2/hypervisor.rst new file mode 100644 index 0000000..6959db4 --- /dev/null +++ b/doc/source/user/resources/compute/v2/hypervisor.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.hypervisor +=============================== + +.. automodule:: openstack.compute.v2.hypervisor + +The Hypervisor Class +-------------------- + +The ``Hypervisor`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.hypervisor.Hypervisor + :members: diff --git a/doc/source/user/resources/compute/v2/image.rst b/doc/source/user/resources/compute/v2/image.rst new file mode 100644 index 0000000..d390065 --- /dev/null +++ b/doc/source/user/resources/compute/v2/image.rst @@ -0,0 +1,21 @@ +openstack.compute.v2.image +========================== + +.. automodule:: openstack.compute.v2.image + +The Image Class +--------------- + +The ``Image`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.image.Image + :members: + +The ImageDetail Class +--------------------- + +The ``ImageDetail`` class inherits from +:class:`~openstack.compute.v2.image.Image`. + +.. autoclass:: openstack.compute.v2.image.ImageDetail + :members: diff --git a/doc/source/user/resources/compute/v2/keypair.rst b/doc/source/user/resources/compute/v2/keypair.rst new file mode 100644 index 0000000..cd2f369 --- /dev/null +++ b/doc/source/user/resources/compute/v2/keypair.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.keypair +============================ + +.. automodule:: openstack.compute.v2.keypair + +The Keypair Class +----------------- + +The ``Keypair`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.keypair.Keypair + :members: diff --git a/doc/source/user/resources/compute/v2/limits.rst b/doc/source/user/resources/compute/v2/limits.rst new file mode 100644 index 0000000..f30ff2f --- /dev/null +++ b/doc/source/user/resources/compute/v2/limits.rst @@ -0,0 +1,29 @@ +openstack.compute.v2.limits +=========================== + +.. automodule:: openstack.compute.v2.limits + +The Limits Class +---------------- + +The ``Limits`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.limits.Limits + :members: + +The AbsoluteLimits Class +------------------------ + +The ``AbsoluteLimits`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.limits.AbsoluteLimits + :members: + +The RateLimit Class +------------------- + +The ``RateLimit`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.limits.RateLimit + :members: diff --git a/doc/source/user/resources/compute/v2/migration.rst b/doc/source/user/resources/compute/v2/migration.rst new file mode 100644 index 0000000..ba02f3e --- /dev/null +++ b/doc/source/user/resources/compute/v2/migration.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.migration +============================== + +.. automodule:: openstack.compute.v2.migration + +The Migration Class +------------------- + +The ``Migration`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.migration.Migration + :members: diff --git a/doc/source/user/resources/compute/v2/quota_set.rst b/doc/source/user/resources/compute/v2/quota_set.rst new file mode 100644 index 0000000..8a5d91d --- /dev/null +++ b/doc/source/user/resources/compute/v2/quota_set.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.quota_set +============================== + +.. automodule:: openstack.compute.v2.quota_set + +The QuotaSet Class +------------------ + +The ``QuotaSet`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.quota_set.QuotaSet + :members: diff --git a/doc/source/user/resources/compute/v2/server.rst b/doc/source/user/resources/compute/v2/server.rst new file mode 100644 index 0000000..5dc072c --- /dev/null +++ b/doc/source/user/resources/compute/v2/server.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.server +=========================== + +.. automodule:: openstack.compute.v2.server + +The Server Class +---------------- + +The ``Server`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server.Server + :members: diff --git a/doc/source/user/resources/compute/v2/server_action.rst b/doc/source/user/resources/compute/v2/server_action.rst new file mode 100644 index 0000000..a3afefe --- /dev/null +++ b/doc/source/user/resources/compute/v2/server_action.rst @@ -0,0 +1,22 @@ +openstack.compute.v2.server_action +================================== + +.. automodule:: openstack.compute.v2.server_action + +The ServerAction Class +---------------------- + +The ``ServerAction`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server_action.ServerAction + :members: + +The ServerActionEvent Class +--------------------------- + +The ``ServerActionEvent`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server_action.ServerActionEvent + :members: diff --git a/doc/source/user/resources/compute/v2/server_diagnostics.rst b/doc/source/user/resources/compute/v2/server_diagnostics.rst new file mode 100644 index 0000000..7b00e93 --- /dev/null +++ b/doc/source/user/resources/compute/v2/server_diagnostics.rst @@ -0,0 +1,13 @@ +openstack.compute.v2.server_diagnostics +======================================= + +.. automodule:: openstack.compute.v2.server_diagnostics + +The ServerDiagnostics Class +--------------------------- + +The ``ServerDiagnostics`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server_diagnostics.ServerDiagnostics + :members: diff --git a/doc/source/user/resources/compute/v2/server_group.rst b/doc/source/user/resources/compute/v2/server_group.rst new file mode 100644 index 0000000..be84fe6 --- /dev/null +++ b/doc/source/user/resources/compute/v2/server_group.rst @@ -0,0 +1,13 @@ +openstack.compute.v2.server_group +================================= + +.. automodule:: openstack.compute.v2.server_group + +The ServerGroup Class +--------------------- + +The ``ServerGroup`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server_group.ServerGroup + :members: diff --git a/doc/source/user/resources/compute/v2/server_interface.rst b/doc/source/user/resources/compute/v2/server_interface.rst new file mode 100644 index 0000000..922606f --- /dev/null +++ b/doc/source/user/resources/compute/v2/server_interface.rst @@ -0,0 +1,13 @@ +openstack.compute.v2.server_interface +===================================== + +.. automodule:: openstack.compute.v2.server_interface + +The ServerInterface Class +------------------------- + +The ``ServerInterface`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server_interface.ServerInterface + :members: diff --git a/doc/source/user/resources/compute/v2/server_ip.rst b/doc/source/user/resources/compute/v2/server_ip.rst new file mode 100644 index 0000000..cdd63da --- /dev/null +++ b/doc/source/user/resources/compute/v2/server_ip.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.server_ip +============================== + +.. automodule:: openstack.compute.v2.server_ip + +The ServerIP Class +------------------ + +The ``ServerIP`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server_ip.ServerIP + :members: diff --git a/doc/source/user/resources/compute/v2/server_migration.rst b/doc/source/user/resources/compute/v2/server_migration.rst new file mode 100644 index 0000000..6587f59 --- /dev/null +++ b/doc/source/user/resources/compute/v2/server_migration.rst @@ -0,0 +1,13 @@ +openstack.compute.v2.server_migration +===================================== + +.. automodule:: openstack.compute.v2.server_migration + +The ServerMigration Class +------------------------- + +The ``ServerMigration`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server_migration.ServerMigration + :members: diff --git a/doc/source/user/resources/compute/v2/server_remote_console.rst b/doc/source/user/resources/compute/v2/server_remote_console.rst new file mode 100644 index 0000000..9ce7c08 --- /dev/null +++ b/doc/source/user/resources/compute/v2/server_remote_console.rst @@ -0,0 +1,13 @@ +openstack.compute.v2.server_remote_console +========================================== + +.. automodule:: openstack.compute.v2.server_remote_console + +The ServerRemoteConsole Class +----------------------------- + +The ``ServerRemoteConsole`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.server_remote_console.ServerRemoteConsole + :members: diff --git a/doc/source/user/resources/compute/v2/service.rst b/doc/source/user/resources/compute/v2/service.rst new file mode 100644 index 0000000..ac0fdef --- /dev/null +++ b/doc/source/user/resources/compute/v2/service.rst @@ -0,0 +1,12 @@ +openstack.compute.v2.service +============================ + +.. automodule:: openstack.compute.v2.service + +The Service Class +----------------- + +The ``Service`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.service.Service + :members: diff --git a/doc/source/user/resources/compute/v2/usage.rst b/doc/source/user/resources/compute/v2/usage.rst new file mode 100644 index 0000000..1be8f6b --- /dev/null +++ b/doc/source/user/resources/compute/v2/usage.rst @@ -0,0 +1,20 @@ +openstack.compute.v2.usage +========================== + +.. automodule:: openstack.compute.v2.usage + +The Usage Class +--------------- + +The ``Usage`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.usage.Usage + :members: + +The ServerUsage Class +--------------------- + +The ``ServerUsage`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.usage.ServerUsage + :members: diff --git a/doc/source/user/resources/compute/v2/volume_attachment.rst b/doc/source/user/resources/compute/v2/volume_attachment.rst new file mode 100644 index 0000000..74d4be3 --- /dev/null +++ b/doc/source/user/resources/compute/v2/volume_attachment.rst @@ -0,0 +1,13 @@ +openstack.compute.v2.volume_attachment +====================================== + +.. automodule:: openstack.compute.v2.volume_attachment + +The VolumeAttachment Class +-------------------------- + +The ``VolumeAttachment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.v2.volume_attachment.VolumeAttachment + :members: diff --git a/doc/source/user/resources/compute/version.rst b/doc/source/user/resources/compute/version.rst new file mode 100644 index 0000000..0191df1 --- /dev/null +++ b/doc/source/user/resources/compute/version.rst @@ -0,0 +1,12 @@ +openstack.compute.version +========================= + +.. automodule:: openstack.compute.version + +The Version Class +----------------- + +The ``Version`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.compute.version.Version + :members: diff --git a/doc/source/user/resources/container_infrastructure_management/cluster.rst b/doc/source/user/resources/container_infrastructure_management/cluster.rst new file mode 100644 index 0000000..df44b6f --- /dev/null +++ b/doc/source/user/resources/container_infrastructure_management/cluster.rst @@ -0,0 +1,12 @@ +openstack.container_infrastructure_management.v1.cluster +======================================================== + +.. automodule:: openstack.container_infrastructure_management.v1.cluster + +The Cluster Class +------------------ + +The ``Cluster`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.container_infrastructure_management.v1.cluster.Cluster + :members: diff --git a/doc/source/user/resources/container_infrastructure_management/cluster_certificate.rst b/doc/source/user/resources/container_infrastructure_management/cluster_certificate.rst new file mode 100644 index 0000000..6dbb3b1 --- /dev/null +++ b/doc/source/user/resources/container_infrastructure_management/cluster_certificate.rst @@ -0,0 +1,13 @@ +openstack.container_infrastructure_management.v1.cluster_certificate +==================================================================== + +.. automodule:: openstack.container_infrastructure_management.v1.cluster_certificate + +The Cluster Certificate Class +----------------------------- + +The ``ClusterCertificate`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.container_infrastructure_management.v1.cluster_certificate.ClusterCertificate + :members: diff --git a/doc/source/user/resources/container_infrastructure_management/cluster_template.rst b/doc/source/user/resources/container_infrastructure_management/cluster_template.rst new file mode 100644 index 0000000..fbf1772 --- /dev/null +++ b/doc/source/user/resources/container_infrastructure_management/cluster_template.rst @@ -0,0 +1,13 @@ +openstack.container_infrastructure_management.v1.cluster_template +================================================================= + +.. automodule:: openstack.container_infrastructure_management.v1.cluster_template + +The Cluster Template Class +-------------------------- + +The ``ClusterTemplate`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.container_infrastructure_management.v1.cluster_template.ClusterTemplate + :members: diff --git a/doc/source/user/resources/container_infrastructure_management/index.rst b/doc/source/user/resources/container_infrastructure_management/index.rst new file mode 100644 index 0000000..90fdb85 --- /dev/null +++ b/doc/source/user/resources/container_infrastructure_management/index.rst @@ -0,0 +1,10 @@ +Container Infrastructure Management Resources +============================================= + +.. toctree:: + :maxdepth: 1 + + cluster + cluster_certificate + cluster_template + service diff --git a/doc/source/user/resources/container_infrastructure_management/service.rst b/doc/source/user/resources/container_infrastructure_management/service.rst new file mode 100644 index 0000000..2be9147 --- /dev/null +++ b/doc/source/user/resources/container_infrastructure_management/service.rst @@ -0,0 +1,12 @@ +openstack.container_infrastructure_management.v1.service +======================================================== + +.. automodule:: openstack.container_infrastructure_management.v1.service + +The Service Class +----------------- + +The ``Service`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.container_infrastructure_management.v1.service.Service + :members: diff --git a/doc/source/user/resources/database/index.rst b/doc/source/user/resources/database/index.rst new file mode 100644 index 0000000..3218b40 --- /dev/null +++ b/doc/source/user/resources/database/index.rst @@ -0,0 +1,10 @@ +Database Resources +================== + +.. toctree:: + :maxdepth: 1 + + v1/database + v1/flavor + v1/instance + v1/user diff --git a/doc/source/user/resources/database/v1/database.rst b/doc/source/user/resources/database/v1/database.rst new file mode 100644 index 0000000..7148f21 --- /dev/null +++ b/doc/source/user/resources/database/v1/database.rst @@ -0,0 +1,12 @@ +openstack.database.v1.database +============================== + +.. automodule:: openstack.database.v1.database + +The Database Class +------------------ + +The ``Database`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.database.v1.database.Database + :members: diff --git a/doc/source/user/resources/database/v1/flavor.rst b/doc/source/user/resources/database/v1/flavor.rst new file mode 100644 index 0000000..2318d80 --- /dev/null +++ b/doc/source/user/resources/database/v1/flavor.rst @@ -0,0 +1,12 @@ +openstack.database.v1.flavor +============================ + +.. automodule:: openstack.database.v1.flavor + +The Flavor Class +---------------- + +The ``Flavor`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.database.v1.flavor.Flavor + :members: diff --git a/doc/source/user/resources/database/v1/instance.rst b/doc/source/user/resources/database/v1/instance.rst new file mode 100644 index 0000000..e70be2f --- /dev/null +++ b/doc/source/user/resources/database/v1/instance.rst @@ -0,0 +1,12 @@ +openstack.database.v1.instance +============================== + +.. automodule:: openstack.database.v1.instance + +The Instance Class +------------------ + +The ``Instance`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.database.v1.instance.Instance + :members: diff --git a/doc/source/user/resources/database/v1/user.rst b/doc/source/user/resources/database/v1/user.rst new file mode 100644 index 0000000..817f77e --- /dev/null +++ b/doc/source/user/resources/database/v1/user.rst @@ -0,0 +1,12 @@ +openstack.database.v1.user +========================== + +.. automodule:: openstack.database.v1.user + +The User Class +-------------- + +The ``User`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.database.v1.user.User + :members: diff --git a/doc/source/user/resources/dns/index.rst b/doc/source/user/resources/dns/index.rst new file mode 100644 index 0000000..77860a6 --- /dev/null +++ b/doc/source/user/resources/dns/index.rst @@ -0,0 +1,13 @@ +DNS Resources +============= + +.. toctree:: + :maxdepth: 1 + + v2/zone + v2/zone_transfer + v2/zone_export + v2/zone_import + v2/zone_share + v2/floating_ip + v2/recordset diff --git a/doc/source/user/resources/dns/v2/floating_ip.rst b/doc/source/user/resources/dns/v2/floating_ip.rst new file mode 100644 index 0000000..d616e71 --- /dev/null +++ b/doc/source/user/resources/dns/v2/floating_ip.rst @@ -0,0 +1,12 @@ +openstack.dns.v2.floating_ip +============================ + +.. automodule:: openstack.dns.v2.floating_ip + +The FloatingIP Class +-------------------- + +The ``DNS`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.dns.v2.floating_ip.FloatingIP + :members: diff --git a/doc/source/user/resources/dns/v2/recordset.rst b/doc/source/user/resources/dns/v2/recordset.rst new file mode 100644 index 0000000..c02302f --- /dev/null +++ b/doc/source/user/resources/dns/v2/recordset.rst @@ -0,0 +1,12 @@ +openstack.dns.v2.recordset +========================== + +.. automodule:: openstack.dns.v2.recordset + +The Recordset Class +------------------- + +The ``DNS`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.dns.v2.recordset.Recordset + :members: diff --git a/doc/source/user/resources/dns/v2/zone.rst b/doc/source/user/resources/dns/v2/zone.rst new file mode 100644 index 0000000..634bd8f --- /dev/null +++ b/doc/source/user/resources/dns/v2/zone.rst @@ -0,0 +1,12 @@ +openstack.dns.v2.zone +============================== + +.. automodule:: openstack.dns.v2.zone + +The Zone Class +-------------- + +The ``DNS`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.dns.v2.zone.Zone + :members: diff --git a/doc/source/user/resources/dns/v2/zone_export.rst b/doc/source/user/resources/dns/v2/zone_export.rst new file mode 100644 index 0000000..2c2baa3 --- /dev/null +++ b/doc/source/user/resources/dns/v2/zone_export.rst @@ -0,0 +1,12 @@ +openstack.dns.v2.zone_export +============================ + +.. automodule:: openstack.dns.v2.zone_export + +The ZoneExport Class +-------------------- + +The ``DNS`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.dns.v2.zone_export.ZoneExport + :members: diff --git a/doc/source/user/resources/dns/v2/zone_import.rst b/doc/source/user/resources/dns/v2/zone_import.rst new file mode 100644 index 0000000..5836f53 --- /dev/null +++ b/doc/source/user/resources/dns/v2/zone_import.rst @@ -0,0 +1,12 @@ +openstack.dns.v2.zone_import +============================ + +.. automodule:: openstack.dns.v2.zone_import + +The ZoneImport Class +-------------------- + +The ``DNS`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.dns.v2.zone_import.ZoneImport + :members: diff --git a/doc/source/user/resources/dns/v2/zone_share.rst b/doc/source/user/resources/dns/v2/zone_share.rst new file mode 100644 index 0000000..5b0d028 --- /dev/null +++ b/doc/source/user/resources/dns/v2/zone_share.rst @@ -0,0 +1,12 @@ +openstack.dns.v2.zone_share +=========================== + +.. automodule:: openstack.dns.v2.zone_share + +The ZoneShare Class +------------------- + +The ``DNS`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.dns.v2.zone_share.ZoneShare + :members: diff --git a/doc/source/user/resources/dns/v2/zone_transfer.rst b/doc/source/user/resources/dns/v2/zone_transfer.rst new file mode 100644 index 0000000..9f5c2c4 --- /dev/null +++ b/doc/source/user/resources/dns/v2/zone_transfer.rst @@ -0,0 +1,20 @@ +openstack.dns.v2.zone_transfer +============================== + +.. automodule:: openstack.dns.v2.zone_transfer + +The ZoneTransferRequest Class +----------------------------- + +The ``DNS`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.dns.v2.zone_transfer.ZoneTransferRequest + :members: + +The ZoneTransferAccept Class +---------------------------- + +The ``DNS`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.dns.v2.zone_transfer.ZoneTransferAccept + :members: diff --git a/doc/source/user/resources/identity/index.rst b/doc/source/user/resources/identity/index.rst new file mode 100644 index 0000000..82d7df6 --- /dev/null +++ b/doc/source/user/resources/identity/index.rst @@ -0,0 +1,27 @@ +Identity Resources +================== + +Identity v2 Resources +--------------------- +.. toctree:: + :maxdepth: 1 + :glob: + + v2/* + +Identity v3 Resources +--------------------- + +.. toctree:: + :maxdepth: 1 + :glob: + + v3/* + +Other Resources +--------------- + +.. toctree:: + :maxdepth: 1 + + version diff --git a/doc/source/user/resources/identity/v2/extension.rst b/doc/source/user/resources/identity/v2/extension.rst new file mode 100644 index 0000000..53f5136 --- /dev/null +++ b/doc/source/user/resources/identity/v2/extension.rst @@ -0,0 +1,12 @@ +openstack.identity.v2.extension +=============================== + +.. automodule:: openstack.identity.v2.extension + +The Extension Class +------------------- + +The ``Extension`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v2.extension.Extension + :members: diff --git a/doc/source/user/resources/identity/v2/role.rst b/doc/source/user/resources/identity/v2/role.rst new file mode 100644 index 0000000..f818ffc --- /dev/null +++ b/doc/source/user/resources/identity/v2/role.rst @@ -0,0 +1,12 @@ +openstack.identity.v2.role +========================== + +.. automodule:: openstack.identity.v2.role + +The Role Class +-------------- + +The ``Role`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v2.role.Role + :members: diff --git a/doc/source/user/resources/identity/v2/tenant.rst b/doc/source/user/resources/identity/v2/tenant.rst new file mode 100644 index 0000000..a7abcc6 --- /dev/null +++ b/doc/source/user/resources/identity/v2/tenant.rst @@ -0,0 +1,12 @@ +openstack.identity.v2.tenant +============================ + +.. automodule:: openstack.identity.v2.tenant + +The Tenant Class +---------------- + +The ``Tenant`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v2.tenant.Tenant + :members: diff --git a/doc/source/user/resources/identity/v2/user.rst b/doc/source/user/resources/identity/v2/user.rst new file mode 100644 index 0000000..d9fdd37 --- /dev/null +++ b/doc/source/user/resources/identity/v2/user.rst @@ -0,0 +1,12 @@ +openstack.identity.v2.user +========================== + +.. automodule:: openstack.identity.v2.user + +The User Class +-------------- + +The ``User`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v2.user.User + :members: diff --git a/doc/source/user/resources/identity/v3/application_credential.rst b/doc/source/user/resources/identity/v3/application_credential.rst new file mode 100644 index 0000000..ee7b1dc --- /dev/null +++ b/doc/source/user/resources/identity/v3/application_credential.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.application_credential +============================================ + +.. automodule:: openstack.identity.v3.application_credential + +The ApplicationCredential Class +------------------------------- + +The ``ApplicationCredential`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.application_credential.ApplicationCredential + :members: diff --git a/doc/source/user/resources/identity/v3/credential.rst b/doc/source/user/resources/identity/v3/credential.rst new file mode 100644 index 0000000..dabc9af --- /dev/null +++ b/doc/source/user/resources/identity/v3/credential.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.credential +================================ + +.. automodule:: openstack.identity.v3.credential + +The Credential Class +-------------------- + +The ``Credential`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.credential.Credential + :members: diff --git a/doc/source/user/resources/identity/v3/domain.rst b/doc/source/user/resources/identity/v3/domain.rst new file mode 100644 index 0000000..bf7d109 --- /dev/null +++ b/doc/source/user/resources/identity/v3/domain.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.domain +============================ + +.. automodule:: openstack.identity.v3.domain + +The Domain Class +---------------- + +The ``Domain`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.domain.Domain + :members: diff --git a/doc/source/user/resources/identity/v3/domain_config.rst b/doc/source/user/resources/identity/v3/domain_config.rst new file mode 100644 index 0000000..28defa2 --- /dev/null +++ b/doc/source/user/resources/identity/v3/domain_config.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.domain_config +=================================== + +.. automodule:: openstack.identity.v3.domain_config + +The Domain Class +---------------- + +The ``DomainConfig`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.domain_config.DomainConfig + :members: diff --git a/doc/source/user/resources/identity/v3/endpoint.rst b/doc/source/user/resources/identity/v3/endpoint.rst new file mode 100644 index 0000000..366113d --- /dev/null +++ b/doc/source/user/resources/identity/v3/endpoint.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.endpoint +============================== + +.. automodule:: openstack.identity.v3.endpoint + +The Endpoint Class +------------------ + +The ``Endpoint`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.endpoint.Endpoint + :members: diff --git a/doc/source/user/resources/identity/v3/federation_protocol.rst b/doc/source/user/resources/identity/v3/federation_protocol.rst new file mode 100644 index 0000000..4cd8a97 --- /dev/null +++ b/doc/source/user/resources/identity/v3/federation_protocol.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.federation_protocol +========================================= + +.. automodule:: openstack.identity.v3.federation_protocol + +The FederationProtocol Class +---------------------------- + +The ``FederationProtocol`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.federation_protocol.FederationProtocol + :members: diff --git a/doc/source/user/resources/identity/v3/group.rst b/doc/source/user/resources/identity/v3/group.rst new file mode 100644 index 0000000..fe6c446 --- /dev/null +++ b/doc/source/user/resources/identity/v3/group.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.group +=========================== + +.. automodule:: openstack.identity.v3.group + +The Group Class +--------------- + +The ``Group`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.group.Group + :members: diff --git a/doc/source/user/resources/identity/v3/identity_provider.rst b/doc/source/user/resources/identity/v3/identity_provider.rst new file mode 100644 index 0000000..1b1bc76 --- /dev/null +++ b/doc/source/user/resources/identity/v3/identity_provider.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.identity_provider +======================================= + +.. automodule:: openstack.identity.v3.identity_provider + +The IdentityProvider Class +-------------------------- + +The ``IdentityProvider`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.identity_provider.IdentityProvider + :members: diff --git a/doc/source/user/resources/identity/v3/limit.rst b/doc/source/user/resources/identity/v3/limit.rst new file mode 100644 index 0000000..f8a8174 --- /dev/null +++ b/doc/source/user/resources/identity/v3/limit.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.limit +=========================== + +.. automodule:: openstack.identity.v3.limit + +The Limit Class +--------------- + +The ``Limit`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.limit.Limit + :members: diff --git a/doc/source/user/resources/identity/v3/mapping.rst b/doc/source/user/resources/identity/v3/mapping.rst new file mode 100644 index 0000000..dd242f9 --- /dev/null +++ b/doc/source/user/resources/identity/v3/mapping.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.mapping +============================= + +.. automodule:: openstack.identity.v3.mapping + +The Mapping Class +----------------- + +The ``Mapping`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.mapping.Mapping + :members: diff --git a/doc/source/user/resources/identity/v3/policy.rst b/doc/source/user/resources/identity/v3/policy.rst new file mode 100644 index 0000000..2506b11 --- /dev/null +++ b/doc/source/user/resources/identity/v3/policy.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.policy +============================ + +.. automodule:: openstack.identity.v3.policy + +The Policy Class +---------------- + +The ``Policy`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.policy.Policy + :members: diff --git a/doc/source/user/resources/identity/v3/project.rst b/doc/source/user/resources/identity/v3/project.rst new file mode 100644 index 0000000..db8c854 --- /dev/null +++ b/doc/source/user/resources/identity/v3/project.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.project +============================= + +.. automodule:: openstack.identity.v3.project + +The Project Class +----------------- + +The ``Project`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.project.Project + :members: diff --git a/doc/source/user/resources/identity/v3/region.rst b/doc/source/user/resources/identity/v3/region.rst new file mode 100644 index 0000000..ba334a7 --- /dev/null +++ b/doc/source/user/resources/identity/v3/region.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.region +============================ + +.. automodule:: openstack.identity.v3.region + +The Region Class +---------------- + +The ``Region`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.region.Region + :members: diff --git a/doc/source/user/resources/identity/v3/registered_limit.rst b/doc/source/user/resources/identity/v3/registered_limit.rst new file mode 100644 index 0000000..8ecdfe3 --- /dev/null +++ b/doc/source/user/resources/identity/v3/registered_limit.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.registered_limit +====================================== + +.. automodule:: openstack.identity.v3.registered_limit + +The RegisteredLimit Class +------------------------- + +The ``RegisteredLimit`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.registered_limit.RegisteredLimit + :members: diff --git a/doc/source/user/resources/identity/v3/role.rst b/doc/source/user/resources/identity/v3/role.rst new file mode 100644 index 0000000..baa85e8 --- /dev/null +++ b/doc/source/user/resources/identity/v3/role.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.role +========================== + +.. automodule:: openstack.identity.v3.role + +The Role Class +-------------- + +The ``Role`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.role.Role + :members: diff --git a/doc/source/user/resources/identity/v3/role_assignment.rst b/doc/source/user/resources/identity/v3/role_assignment.rst new file mode 100644 index 0000000..abdfcdc --- /dev/null +++ b/doc/source/user/resources/identity/v3/role_assignment.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.role_assignment +===================================== + +.. automodule:: openstack.identity.v3.role_assignment + +The RoleAssignment Class +------------------------ + +The ``RoleAssignment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.role_assignment.RoleAssignment + :members: diff --git a/doc/source/user/resources/identity/v3/role_domain_group_assignment.rst b/doc/source/user/resources/identity/v3/role_domain_group_assignment.rst new file mode 100644 index 0000000..8ef6ef9 --- /dev/null +++ b/doc/source/user/resources/identity/v3/role_domain_group_assignment.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.role_domain_group_assignment +================================================== + +.. automodule:: openstack.identity.v3.role_domain_group_assignment + +The RoleDomainGroupAssignment Class +----------------------------------- + +The ``RoleDomainGroupAssignment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.role_domain_group_assignment.RoleDomainGroupAssignment + :members: diff --git a/doc/source/user/resources/identity/v3/role_domain_user_assignment.rst b/doc/source/user/resources/identity/v3/role_domain_user_assignment.rst new file mode 100644 index 0000000..063a3d7 --- /dev/null +++ b/doc/source/user/resources/identity/v3/role_domain_user_assignment.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.role_domain_user_assignment +================================================= + +.. automodule:: openstack.identity.v3.role_domain_user_assignment + +The RoleDomainUserAssignment Class +---------------------------------- + +The ``RoleDomainUserAssignment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.role_domain_user_assignment.RoleDomainUserAssignment + :members: diff --git a/doc/source/user/resources/identity/v3/role_project_group_assignment.rst b/doc/source/user/resources/identity/v3/role_project_group_assignment.rst new file mode 100644 index 0000000..2824e0c --- /dev/null +++ b/doc/source/user/resources/identity/v3/role_project_group_assignment.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.role_project_group_assignment +=================================================== + +.. automodule:: openstack.identity.v3.role_project_group_assignment + +The RoleProjectGroupAssignment Class +------------------------------------ + +The ``RoleProjectGroupAssignment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.role_project_group_assignment.RoleProjectGroupAssignment + :members: diff --git a/doc/source/user/resources/identity/v3/role_project_user_assignment.rst b/doc/source/user/resources/identity/v3/role_project_user_assignment.rst new file mode 100644 index 0000000..d9f44c9 --- /dev/null +++ b/doc/source/user/resources/identity/v3/role_project_user_assignment.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.role_project_user_assignment +================================================== + +.. automodule:: openstack.identity.v3.role_project_user_assignment + +The RoleProjectUserAssignment Class +----------------------------------- + +The ``RoleProjectUserAssignment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.role_project_user_assignment.RoleProjectUserAssignment + :members: diff --git a/doc/source/user/resources/identity/v3/role_system_group_assignment.rst b/doc/source/user/resources/identity/v3/role_system_group_assignment.rst new file mode 100644 index 0000000..5e9771c --- /dev/null +++ b/doc/source/user/resources/identity/v3/role_system_group_assignment.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.role_system_group_assignment +================================================== + +.. automodule:: openstack.identity.v3.role_system_group_assignment + +The RoleSystemGroupAssignment Class +----------------------------------- + +The ``RoleSystemGroupAssignment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.role_system_group_assignment.RoleSystemGroupAssignment + :members: diff --git a/doc/source/user/resources/identity/v3/role_system_user_assignment.rst b/doc/source/user/resources/identity/v3/role_system_user_assignment.rst new file mode 100644 index 0000000..7346d00 --- /dev/null +++ b/doc/source/user/resources/identity/v3/role_system_user_assignment.rst @@ -0,0 +1,13 @@ +openstack.identity.v3.role_system_user_assignment +================================================= + +.. automodule:: openstack.identity.v3.role_system_user_assignment + +The RoleSystemUserAssignment Class +---------------------------------- + +The ``RoleSystemUserAssignment`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.role_system_user_assignment.RoleSystemUserAssignment + :members: diff --git a/doc/source/user/resources/identity/v3/service.rst b/doc/source/user/resources/identity/v3/service.rst new file mode 100644 index 0000000..02585f5 --- /dev/null +++ b/doc/source/user/resources/identity/v3/service.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.service +============================= + +.. automodule:: openstack.identity.v3.service + +The Service Class +----------------- + +The ``Service`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.service.Service + :members: diff --git a/doc/source/user/resources/identity/v3/system.rst b/doc/source/user/resources/identity/v3/system.rst new file mode 100644 index 0000000..dcdda5b --- /dev/null +++ b/doc/source/user/resources/identity/v3/system.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.system +============================ + +.. automodule:: openstack.identity.v3.system + +The System Class +---------------- + +The ``System`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.system.System + :members: diff --git a/doc/source/user/resources/identity/v3/trust.rst b/doc/source/user/resources/identity/v3/trust.rst new file mode 100644 index 0000000..fdb945e --- /dev/null +++ b/doc/source/user/resources/identity/v3/trust.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.trust +=========================== + +.. automodule:: openstack.identity.v3.trust + +The Trust Class +--------------- + +The ``Trust`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.trust.Trust + :members: diff --git a/doc/source/user/resources/identity/v3/user.rst b/doc/source/user/resources/identity/v3/user.rst new file mode 100644 index 0000000..6ba7ae3 --- /dev/null +++ b/doc/source/user/resources/identity/v3/user.rst @@ -0,0 +1,12 @@ +openstack.identity.v3.user +========================== + +.. automodule:: openstack.identity.v3.user + +The User Class +-------------- + +The ``User`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.v3.user.User + :members: diff --git a/doc/source/user/resources/identity/version.rst b/doc/source/user/resources/identity/version.rst new file mode 100644 index 0000000..1fe3bfb --- /dev/null +++ b/doc/source/user/resources/identity/version.rst @@ -0,0 +1,12 @@ +openstack.identity.version +========================== + +.. automodule:: openstack.identity.version + +The Version Class +----------------- + +The ``Version`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.identity.version.Version + :members: diff --git a/doc/source/user/resources/image/index.rst b/doc/source/user/resources/image/index.rst new file mode 100644 index 0000000..c6ef3d7 --- /dev/null +++ b/doc/source/user/resources/image/index.rst @@ -0,0 +1,26 @@ +Image Resources +=============== + +Image v1 Resources +------------------ + +.. toctree:: + :maxdepth: 1 + + v1/image + +Image v2 Resources +------------------ + +.. toctree:: + :maxdepth: 1 + + v2/image + v2/member + v2/metadef_namespace + v2/metadef_object + v2/metadef_resource_type + v2/metadef_property + v2/metadef_schema + v2/task + v2/service_info diff --git a/doc/source/user/resources/image/v1/image.rst b/doc/source/user/resources/image/v1/image.rst new file mode 100644 index 0000000..7f5dffd --- /dev/null +++ b/doc/source/user/resources/image/v1/image.rst @@ -0,0 +1,12 @@ +openstack.image.v1.image +======================== + +.. automodule:: openstack.image.v1.image + +The Image Class +--------------- + +The ``Image`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v1.image.Image + :members: diff --git a/doc/source/user/resources/image/v2/image.rst b/doc/source/user/resources/image/v2/image.rst new file mode 100644 index 0000000..5d51cba --- /dev/null +++ b/doc/source/user/resources/image/v2/image.rst @@ -0,0 +1,12 @@ +openstack.image.v2.image +======================== + +.. automodule:: openstack.image.v2.image + +The Image Class +--------------- + +The ``Image`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.image.Image + :members: diff --git a/doc/source/user/resources/image/v2/member.rst b/doc/source/user/resources/image/v2/member.rst new file mode 100644 index 0000000..03107fd --- /dev/null +++ b/doc/source/user/resources/image/v2/member.rst @@ -0,0 +1,12 @@ +openstack.image.v2.member +========================= + +.. automodule:: openstack.image.v2.member + +The Member Class +---------------- + +The ``Member`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.member.Member + :members: diff --git a/doc/source/user/resources/image/v2/metadef_namespace.rst b/doc/source/user/resources/image/v2/metadef_namespace.rst new file mode 100644 index 0000000..de2c0f5 --- /dev/null +++ b/doc/source/user/resources/image/v2/metadef_namespace.rst @@ -0,0 +1,13 @@ +openstack.image.v2.metadef_namespace +===================================== + +.. automodule:: openstack.image.v2.metadef_namespace + +The MetadefNamespace Class +---------------------------- + +The ``MetadefNamespace`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.metadef_namespace.MetadefNamespace + :members: diff --git a/doc/source/user/resources/image/v2/metadef_object.rst b/doc/source/user/resources/image/v2/metadef_object.rst new file mode 100644 index 0000000..2f9548a --- /dev/null +++ b/doc/source/user/resources/image/v2/metadef_object.rst @@ -0,0 +1,13 @@ +openstack.image.v2.metadef_object +================================== + +.. automodule:: openstack.image.v2.metadef_object + +The MetadefObject Class +------------------------ + +The ``MetadefObject`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.metadef_object.MetadefObject + :members: diff --git a/doc/source/user/resources/image/v2/metadef_property.rst b/doc/source/user/resources/image/v2/metadef_property.rst new file mode 100644 index 0000000..e70fff6 --- /dev/null +++ b/doc/source/user/resources/image/v2/metadef_property.rst @@ -0,0 +1,13 @@ +openstack.image.v2.metadef_property +=================================== + +.. automodule:: openstack.image.v2.metadef_property + +The MetadefProperty Class +------------------------- + +The ``MetadefProperty`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.metadef_property.MetadefProperty + :members: diff --git a/doc/source/user/resources/image/v2/metadef_resource_type.rst b/doc/source/user/resources/image/v2/metadef_resource_type.rst new file mode 100644 index 0000000..c20ba94 --- /dev/null +++ b/doc/source/user/resources/image/v2/metadef_resource_type.rst @@ -0,0 +1,24 @@ +openstack.image.v2.metadef_resource_type +======================================== + +.. automodule:: openstack.image.v2.metadef_resource_type + +The MetadefResourceType Class +----------------------------- + +The ``MetadefResourceType`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.metadef_resource_type.MetadefResourceType + :members: + + +The MetadefResourceTypeAssociation Class +---------------------------------------- + +The ``MetadefResourceTypeAssociation`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: + openstack.image.v2.metadef_resource_type.MetadefResourceTypeAssociation + :members: diff --git a/doc/source/user/resources/image/v2/metadef_schema.rst b/doc/source/user/resources/image/v2/metadef_schema.rst new file mode 100644 index 0000000..8332ee4 --- /dev/null +++ b/doc/source/user/resources/image/v2/metadef_schema.rst @@ -0,0 +1,13 @@ +openstack.image.v2.metadef_schema +================================= + +.. automodule:: openstack.image.v2.metadef_schema + +The MetadefSchema Class +----------------------- + +The ``MetadefSchema`` class inherits +from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.metadef_schema.MetadefSchema + :members: diff --git a/doc/source/user/resources/image/v2/service_info.rst b/doc/source/user/resources/image/v2/service_info.rst new file mode 100644 index 0000000..92bae89 --- /dev/null +++ b/doc/source/user/resources/image/v2/service_info.rst @@ -0,0 +1,20 @@ +openstack.image.v2.service_info +=============================== + +.. automodule:: openstack.image.v2.service_info + +The Store Class +---------------- + +The ``Store`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.service_info.Store + :members: + +The Import Info Class +--------------------- + +The ``Import`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.service_info.Import + :members: diff --git a/doc/source/user/resources/image/v2/task.rst b/doc/source/user/resources/image/v2/task.rst new file mode 100644 index 0000000..3e6652e --- /dev/null +++ b/doc/source/user/resources/image/v2/task.rst @@ -0,0 +1,12 @@ +openstack.image.v2.task +======================= + +.. automodule:: openstack.image.v2.task + +The Task Class +-------------- + +The ``Task`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.image.v2.task.Task + :members: diff --git a/doc/source/user/resources/key_manager/index.rst b/doc/source/user/resources/key_manager/index.rst new file mode 100644 index 0000000..76b6659 --- /dev/null +++ b/doc/source/user/resources/key_manager/index.rst @@ -0,0 +1,9 @@ +KeyManager Resources +==================== + +.. toctree:: + :maxdepth: 1 + + v1/container + v1/order + v1/secret diff --git a/doc/source/user/resources/key_manager/v1/container.rst b/doc/source/user/resources/key_manager/v1/container.rst new file mode 100644 index 0000000..601e7b1 --- /dev/null +++ b/doc/source/user/resources/key_manager/v1/container.rst @@ -0,0 +1,12 @@ +openstack.key_manager.v1.container +================================== + +.. automodule:: openstack.key_manager.v1.container + +The Container Class +------------------- + +The ``Container`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.key_manager.v1.container.Container + :members: diff --git a/doc/source/user/resources/key_manager/v1/order.rst b/doc/source/user/resources/key_manager/v1/order.rst new file mode 100644 index 0000000..2f53627 --- /dev/null +++ b/doc/source/user/resources/key_manager/v1/order.rst @@ -0,0 +1,12 @@ +openstack.key_manager.v1.order +============================== + +.. automodule:: openstack.key_manager.v1.order + +The Order Class +--------------- + +The ``Order`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.key_manager.v1.order.Order + :members: diff --git a/doc/source/user/resources/key_manager/v1/secret.rst b/doc/source/user/resources/key_manager/v1/secret.rst new file mode 100644 index 0000000..8d0a56e --- /dev/null +++ b/doc/source/user/resources/key_manager/v1/secret.rst @@ -0,0 +1,12 @@ +openstack.key_manager.v1.secret +=============================== + +.. automodule:: openstack.key_manager.v1.secret + +The Secret Class +---------------- + +The ``Secret`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.key_manager.v1.secret.Secret + :members: diff --git a/doc/source/user/resources/load_balancer/index.rst b/doc/source/user/resources/load_balancer/index.rst new file mode 100644 index 0000000..1eebf37 --- /dev/null +++ b/doc/source/user/resources/load_balancer/index.rst @@ -0,0 +1,20 @@ +Load Balancer Resources +======================= + +.. toctree:: + :maxdepth: 1 + + v2/load_balancer + v2/listener + v2/pool + v2/member + v2/health_monitor + v2/l7_policy + v2/l7_rule + v2/provider + v2/flavor_profile + v2/flavor + v2/quota + v2/amphora + v2/availability_zone_profile + v2/availability_zone diff --git a/doc/source/user/resources/load_balancer/v2/amphora.rst b/doc/source/user/resources/load_balancer/v2/amphora.rst new file mode 100644 index 0000000..c89d1ee --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/amphora.rst @@ -0,0 +1,30 @@ +openstack.load_balancer.v2.amphora +================================== + +.. automodule:: openstack.load_balancer.v2.amphora + +The Amphora Class +----------------- + +The ``Amphora`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.amphora.Amphora + :members: + +The AmphoraConfig Class +----------------------- + +The ``AmphoraConfig`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.amphora.AmphoraConfig + :members: + +The AmphoraFailover Class +------------------------- + +The ``AmphoraFailover`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.amphora.AmphoraFailover + :members: diff --git a/doc/source/user/resources/load_balancer/v2/availability_zone.rst b/doc/source/user/resources/load_balancer/v2/availability_zone.rst new file mode 100644 index 0000000..8f8889b --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/availability_zone.rst @@ -0,0 +1,13 @@ +openstack.load_balancer.v2.availability_zone +============================================ + +.. automodule:: openstack.load_balancer.v2.availability_zone + +The AvailabilityZone Class +-------------------------- + +The ``AvailabilityZone`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.availability_zone.AvailabilityZone + :members: diff --git a/doc/source/user/resources/load_balancer/v2/availability_zone_profile.rst b/doc/source/user/resources/load_balancer/v2/availability_zone_profile.rst new file mode 100644 index 0000000..0aa2c6a --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/availability_zone_profile.rst @@ -0,0 +1,13 @@ +openstack.load_balancer.v2.availability_zone_profile +==================================================== + +.. automodule:: openstack.load_balancer.v2.availability_zone_profile + +The AvailabilityZoneProfile Class +--------------------------------- + +The ``AvailabilityZoneProfile`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.availability_zone_profile.AvailabilityZoneProfile + :members: diff --git a/doc/source/user/resources/load_balancer/v2/flavor.rst b/doc/source/user/resources/load_balancer/v2/flavor.rst new file mode 100644 index 0000000..57b97ba --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/flavor.rst @@ -0,0 +1,12 @@ +openstack.load_balancer.v2.flavor +================================= + +.. automodule:: openstack.load_balancer.v2.flavor + +The Flavor Class +---------------- + +The ``Flavor`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.flavor.Flavor + :members: diff --git a/doc/source/user/resources/load_balancer/v2/flavor_profile.rst b/doc/source/user/resources/load_balancer/v2/flavor_profile.rst new file mode 100644 index 0000000..8a702f9 --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/flavor_profile.rst @@ -0,0 +1,13 @@ +openstack.load_balancer.v2.flavor_profile +========================================= + +.. automodule:: openstack.load_balancer.v2.flavor_profile + +The FlavorProfile Class +----------------------- + +The ``FlavorProfile`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.flavor_profile.FlavorProfile + :members: diff --git a/doc/source/user/resources/load_balancer/v2/health_monitor.rst b/doc/source/user/resources/load_balancer/v2/health_monitor.rst new file mode 100644 index 0000000..7f90f42 --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/health_monitor.rst @@ -0,0 +1,13 @@ +openstack.load_balancer.v2.health_monitor +========================================= + +.. automodule:: openstack.load_balancer.v2.health_monitor + +The HealthMonitor Class +----------------------- + +The ``HealthMonitor`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.health_monitor.HealthMonitor + :members: diff --git a/doc/source/user/resources/load_balancer/v2/l7_policy.rst b/doc/source/user/resources/load_balancer/v2/l7_policy.rst new file mode 100644 index 0000000..2a5e6f0 --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/l7_policy.rst @@ -0,0 +1,12 @@ +openstack.load_balancer.v2.l7_policy +==================================== + +.. automodule:: openstack.load_balancer.v2.l7_policy + +The L7Policy Class +------------------ + +The ``L7Policy`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.l7_policy.L7Policy + :members: diff --git a/doc/source/user/resources/load_balancer/v2/l7_rule.rst b/doc/source/user/resources/load_balancer/v2/l7_rule.rst new file mode 100644 index 0000000..c661cd6 --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/l7_rule.rst @@ -0,0 +1,12 @@ +openstack.load_balancer.v2.l7_rule +================================== + +.. automodule:: openstack.load_balancer.v2.l7_rule + +The L7Rule Class +---------------- + +The ``L7Rule`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.l7_rule.L7Rule + :members: diff --git a/doc/source/user/resources/load_balancer/v2/listener.rst b/doc/source/user/resources/load_balancer/v2/listener.rst new file mode 100644 index 0000000..b94bc73 --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/listener.rst @@ -0,0 +1,21 @@ +openstack.load_balancer.v2.listener +=================================== + +.. automodule:: openstack.load_balancer.v2.listener + +The Listener Class +------------------ + +The ``Listener`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.listener.Listener + :members: + +The ListenerStats Class +----------------------- + +The ``ListenerStats`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.listener.ListenerStats + :members: diff --git a/doc/source/user/resources/load_balancer/v2/load_balancer.rst b/doc/source/user/resources/load_balancer/v2/load_balancer.rst new file mode 100644 index 0000000..9e14560 --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/load_balancer.rst @@ -0,0 +1,30 @@ +openstack.load_balancer.v2.load_balancer +======================================== + +.. automodule:: openstack.load_balancer.v2.load_balancer + +The LoadBalancer Class +---------------------- + +The ``LoadBalancer`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.load_balancer.LoadBalancer + :members: + +The LoadBalancerStats Class +--------------------------- + +The ``LoadBalancerStats`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.load_balancer.LoadBalancerStats + :members: + +The LoadBalancerFailover Class +------------------------------ + +The ``LoadBalancerFailover`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.load_balancer.LoadBalancerFailover + :members: diff --git a/doc/source/user/resources/load_balancer/v2/member.rst b/doc/source/user/resources/load_balancer/v2/member.rst new file mode 100644 index 0000000..1fff01f --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/member.rst @@ -0,0 +1,12 @@ +openstack.load_balancer.v2.member +================================= + +.. automodule:: openstack.load_balancer.v2.member + +The Member Class +---------------- + +The ``Member`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.member.Member + :members: diff --git a/doc/source/user/resources/load_balancer/v2/pool.rst b/doc/source/user/resources/load_balancer/v2/pool.rst new file mode 100644 index 0000000..e67f97c --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/pool.rst @@ -0,0 +1,12 @@ +openstack.load_balancer.v2.pool +=============================== + +.. automodule:: openstack.load_balancer.v2.pool + +The Pool Class +-------------- + +The ``Pool`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.pool.Pool + :members: diff --git a/doc/source/user/resources/load_balancer/v2/provider.rst b/doc/source/user/resources/load_balancer/v2/provider.rst new file mode 100644 index 0000000..b9c5af9 --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/provider.rst @@ -0,0 +1,21 @@ +openstack.load_balancer.v2.provider +=================================== + +.. automodule:: openstack.load_balancer.v2.provider + +The Provider Class +------------------ + +The ``Provider`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.provider.Provider + :members: + +The Provider Flavor Capabilities Class +-------------------------------------- + +The ``ProviderFlavorCapabilities`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.provider.ProviderFlavorCapabilities + :members: diff --git a/doc/source/user/resources/load_balancer/v2/quota.rst b/doc/source/user/resources/load_balancer/v2/quota.rst new file mode 100644 index 0000000..1bf0335 --- /dev/null +++ b/doc/source/user/resources/load_balancer/v2/quota.rst @@ -0,0 +1,12 @@ +openstack.load_balancer.v2.quota +================================ + +.. automodule:: openstack.load_balancer.v2.quota + +The Quota Class +--------------- + +The ``Quota`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.load_balancer.v2.quota.Quota + :members: diff --git a/doc/source/user/resources/network/index.rst b/doc/source/user/resources/network/index.rst new file mode 100644 index 0000000..ff06377 --- /dev/null +++ b/doc/source/user/resources/network/index.rst @@ -0,0 +1,9 @@ +Network Resources +================= + +.. toctree:: + :maxdepth: 1 + :glob: + + v2/* + v2/vpn/index diff --git a/doc/source/user/resources/network/v2/address_group.rst b/doc/source/user/resources/network/v2/address_group.rst new file mode 100644 index 0000000..34360fc --- /dev/null +++ b/doc/source/user/resources/network/v2/address_group.rst @@ -0,0 +1,12 @@ +openstack.network.v2.address_group +================================== + +.. automodule:: openstack.network.v2.address_group + +The AddressGroup Class +---------------------- + +The ``AddressGroup`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.address_group.AddressGroup + :members: diff --git a/doc/source/user/resources/network/v2/address_scope.rst b/doc/source/user/resources/network/v2/address_scope.rst new file mode 100644 index 0000000..6b8274a --- /dev/null +++ b/doc/source/user/resources/network/v2/address_scope.rst @@ -0,0 +1,12 @@ +openstack.network.v2.address_scope +================================== + +.. automodule:: openstack.network.v2.address_scope + +The AddressScope Class +---------------------- + +The ``AddressScope`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.address_scope.AddressScope + :members: diff --git a/doc/source/user/resources/network/v2/agent.rst b/doc/source/user/resources/network/v2/agent.rst new file mode 100644 index 0000000..5593e6d --- /dev/null +++ b/doc/source/user/resources/network/v2/agent.rst @@ -0,0 +1,12 @@ +openstack.network.v2.agent +========================== + +.. automodule:: openstack.network.v2.agent + +The Agent Class +--------------- + +The ``Agent`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.agent.Agent + :members: diff --git a/doc/source/user/resources/network/v2/auto_allocated_topology.rst b/doc/source/user/resources/network/v2/auto_allocated_topology.rst new file mode 100644 index 0000000..a3700d0 --- /dev/null +++ b/doc/source/user/resources/network/v2/auto_allocated_topology.rst @@ -0,0 +1,13 @@ +openstack.network.v2.auto_allocated_topology +============================================ + +.. automodule:: openstack.network.v2.auto_allocated_topology + +The Auto Allocated Topology Class +--------------------------------- + +The ``Auto Allocated Toplogy`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.auto_allocated_topology.AutoAllocatedTopology + :members: diff --git a/doc/source/user/resources/network/v2/availability_zone.rst b/doc/source/user/resources/network/v2/availability_zone.rst new file mode 100644 index 0000000..da386ce --- /dev/null +++ b/doc/source/user/resources/network/v2/availability_zone.rst @@ -0,0 +1,13 @@ +openstack.network.v2.availability_zone +====================================== + +.. automodule:: openstack.network.v2.availability_zone + +The AvailabilityZone Class +-------------------------- + +The ``AvailabilityZone`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.availability_zone.AvailabilityZone + :members: diff --git a/doc/source/user/resources/network/v2/bgp_peer.rst b/doc/source/user/resources/network/v2/bgp_peer.rst new file mode 100644 index 0000000..35fd5a6 --- /dev/null +++ b/doc/source/user/resources/network/v2/bgp_peer.rst @@ -0,0 +1,12 @@ +openstack.network.v2.bgp_peer +============================= + +.. automodule:: openstack.network.v2.bgp_peer + +The BgpPeer Class +----------------- + +The ``BgpPeer`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.bgp_peer.BgpPeer + :members: diff --git a/doc/source/user/resources/network/v2/bgp_speaker.rst b/doc/source/user/resources/network/v2/bgp_speaker.rst new file mode 100644 index 0000000..147d6b5 --- /dev/null +++ b/doc/source/user/resources/network/v2/bgp_speaker.rst @@ -0,0 +1,12 @@ +openstack.network.v2.bgp_speaker +================================ + +.. automodule:: openstack.network.v2.bgp_speaker + +The BgpSpeaker Class +-------------------- + +The ``BgpSpeaker`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.bgp_speaker.BgpSpeaker + :members: diff --git a/doc/source/user/resources/network/v2/bgpvpn.rst b/doc/source/user/resources/network/v2/bgpvpn.rst new file mode 100644 index 0000000..4c5d8af --- /dev/null +++ b/doc/source/user/resources/network/v2/bgpvpn.rst @@ -0,0 +1,12 @@ +openstack.network.v2.bgpvpn +============================= + +.. automodule:: openstack.network.v2.bgpvpn + +The BgpVpn Class +----------------- + +The ``BgpVpn`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.bgpvpn.BgpVpn + :members: diff --git a/doc/source/user/resources/network/v2/bgpvpn_network_association.rst b/doc/source/user/resources/network/v2/bgpvpn_network_association.rst new file mode 100644 index 0000000..9d78df4 --- /dev/null +++ b/doc/source/user/resources/network/v2/bgpvpn_network_association.rst @@ -0,0 +1,13 @@ +openstack.network.v2.bgpvpn_network_association +=============================================== + +.. automodule:: openstack.network.v2.bgpvpn_network_association + +The BgpVpnNetworkAssociation Class +---------------------------------- + +The ``BgpVpnNetworkAssociation`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.bgpvpn_network_association.BgpVpnNetworkAssociation + :members: diff --git a/doc/source/user/resources/network/v2/bgpvpn_port_association.rst b/doc/source/user/resources/network/v2/bgpvpn_port_association.rst new file mode 100644 index 0000000..07584c1 --- /dev/null +++ b/doc/source/user/resources/network/v2/bgpvpn_port_association.rst @@ -0,0 +1,13 @@ +openstack.network.v2.bgpvpn_port_association +============================================ + +.. automodule:: openstack.network.v2.bgpvpn_port_association + +The BgpVpnPortAssociation Class +------------------------------- + +The ``BgpVpnPortAssociation`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.bgpvpn_port_association.BgpVpnPortAssociation + :members: diff --git a/doc/source/user/resources/network/v2/bgpvpn_router_association.rst b/doc/source/user/resources/network/v2/bgpvpn_router_association.rst new file mode 100644 index 0000000..4f046da --- /dev/null +++ b/doc/source/user/resources/network/v2/bgpvpn_router_association.rst @@ -0,0 +1,13 @@ +openstack.network.v2.bgpvpn_router_association +============================================== + +.. automodule:: openstack.network.v2.bgpvpn_router_association + +The BgpVpnRouterAssociation Class +--------------------------------- + +The ``BgpVpnRouterAssociation`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.bgpvpn_router_association.BgpVpnRouterAssociation + :members: diff --git a/doc/source/user/resources/network/v2/extension.rst b/doc/source/user/resources/network/v2/extension.rst new file mode 100644 index 0000000..c5ff15e --- /dev/null +++ b/doc/source/user/resources/network/v2/extension.rst @@ -0,0 +1,12 @@ +openstack.network.v2.extension +============================== + +.. automodule:: openstack.network.v2.extension + +The Extension Class +------------------- + +The ``Extension`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.extension.Extension + :members: diff --git a/doc/source/user/resources/network/v2/flavor.rst b/doc/source/user/resources/network/v2/flavor.rst new file mode 100644 index 0000000..8810a9c --- /dev/null +++ b/doc/source/user/resources/network/v2/flavor.rst @@ -0,0 +1,12 @@ +openstack.network.v2.flavor +=========================== + +.. automodule:: openstack.network.v2.flavor + +The Flavor Class +---------------- + +The ``Flavor`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.flavor.Flavor + :members: diff --git a/doc/source/user/resources/network/v2/floating_ip.rst b/doc/source/user/resources/network/v2/floating_ip.rst new file mode 100644 index 0000000..2badbce --- /dev/null +++ b/doc/source/user/resources/network/v2/floating_ip.rst @@ -0,0 +1,12 @@ +openstack.network.v2.floating_ip +================================ + +.. automodule:: openstack.network.v2.floating_ip + +The FloatingIP Class +-------------------- + +The ``FloatingIP`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.floating_ip.FloatingIP + :members: diff --git a/doc/source/user/resources/network/v2/health_monitor.rst b/doc/source/user/resources/network/v2/health_monitor.rst new file mode 100644 index 0000000..76cf6a7 --- /dev/null +++ b/doc/source/user/resources/network/v2/health_monitor.rst @@ -0,0 +1,13 @@ +openstack.network.v2.health_monitor +=================================== + +.. automodule:: openstack.network.v2.health_monitor + +The HealthMonitor Class +----------------------- + +The ``HealthMonitor`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.health_monitor.HealthMonitor + :members: diff --git a/doc/source/user/resources/network/v2/listener.rst b/doc/source/user/resources/network/v2/listener.rst new file mode 100644 index 0000000..a9fa482 --- /dev/null +++ b/doc/source/user/resources/network/v2/listener.rst @@ -0,0 +1,12 @@ +openstack.network.v2.listener +============================= + +.. automodule:: openstack.network.v2.listener + +The Listener Class +------------------ + +The ``Listener`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.listener.Listener + :members: diff --git a/doc/source/user/resources/network/v2/load_balancer.rst b/doc/source/user/resources/network/v2/load_balancer.rst new file mode 100644 index 0000000..6169582 --- /dev/null +++ b/doc/source/user/resources/network/v2/load_balancer.rst @@ -0,0 +1,12 @@ +openstack.network.v2.load_balancer +================================== + +.. automodule:: openstack.network.v2.load_balancer + +The LoadBalancer Class +---------------------- + +The ``LoadBalancer`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.load_balancer.LoadBalancer + :members: diff --git a/doc/source/user/resources/network/v2/local_ip.rst b/doc/source/user/resources/network/v2/local_ip.rst new file mode 100644 index 0000000..30f846a --- /dev/null +++ b/doc/source/user/resources/network/v2/local_ip.rst @@ -0,0 +1,12 @@ +openstack.network.v2.local_ip +============================= + +.. automodule:: openstack.network.v2.local_ip + +The LocalIP Class +----------------- + +The ``LocalIP`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.local_ip.LocalIP + :members: diff --git a/doc/source/user/resources/network/v2/local_ip_association.rst b/doc/source/user/resources/network/v2/local_ip_association.rst new file mode 100644 index 0000000..12b59a9 --- /dev/null +++ b/doc/source/user/resources/network/v2/local_ip_association.rst @@ -0,0 +1,13 @@ +openstack.network.v2.local_ip_association +========================================= + +.. automodule:: openstack.network.v2.local_ip_association + +The LocalIPAssociation Class +---------------------------- + +The ``LocalIPAssociation`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.local_ip_association.LocalIPAssociation + :members: diff --git a/doc/source/user/resources/network/v2/metering_label.rst b/doc/source/user/resources/network/v2/metering_label.rst new file mode 100644 index 0000000..d07f025 --- /dev/null +++ b/doc/source/user/resources/network/v2/metering_label.rst @@ -0,0 +1,13 @@ +openstack.network.v2.metering_label +=================================== + +.. automodule:: openstack.network.v2.metering_label + +The MeteringLabel Class +----------------------- + +The ``MeteringLabel`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.metering_label.MeteringLabel + :members: diff --git a/doc/source/user/resources/network/v2/metering_label_rule.rst b/doc/source/user/resources/network/v2/metering_label_rule.rst new file mode 100644 index 0000000..9bcf784 --- /dev/null +++ b/doc/source/user/resources/network/v2/metering_label_rule.rst @@ -0,0 +1,13 @@ +openstack.network.v2.metering_label_rule +======================================== + +.. automodule:: openstack.network.v2.metering_label_rule + +The MeteringLabelRule Class +--------------------------- + +The ``MeteringLabelRule`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.metering_label_rule.MeteringLabelRule + :members: diff --git a/doc/source/user/resources/network/v2/ndp_proxy.rst b/doc/source/user/resources/network/v2/ndp_proxy.rst new file mode 100644 index 0000000..c5479e7 --- /dev/null +++ b/doc/source/user/resources/network/v2/ndp_proxy.rst @@ -0,0 +1,12 @@ +openstack.network.v2.ndp_proxy +============================== + +.. automodule:: openstack.network.v2.ndp_proxy + +The NDPProxy Class +------------------ + +The ``NDPProxy`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.ndp_proxy.NDPProxy + :members: diff --git a/doc/source/user/resources/network/v2/network.rst b/doc/source/user/resources/network/v2/network.rst new file mode 100644 index 0000000..8c6f6f2 --- /dev/null +++ b/doc/source/user/resources/network/v2/network.rst @@ -0,0 +1,12 @@ +openstack.network.v2.network +============================ + +.. automodule:: openstack.network.v2.network + +The Network Class +----------------- + +The ``Network`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.network.Network + :members: diff --git a/doc/source/user/resources/network/v2/network_ip_availability.rst b/doc/source/user/resources/network/v2/network_ip_availability.rst new file mode 100644 index 0000000..900f246 --- /dev/null +++ b/doc/source/user/resources/network/v2/network_ip_availability.rst @@ -0,0 +1,13 @@ +openstack.network.v2.network_ip_availability +============================================ + +.. automodule:: openstack.network.v2.network_ip_availability + +The NetworkIPAvailability Class +------------------------------- + +The ``NetworkIPAvailability`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.network_ip_availability.NetworkIPAvailability + :members: diff --git a/doc/source/user/resources/network/v2/network_segment_range.rst b/doc/source/user/resources/network/v2/network_segment_range.rst new file mode 100644 index 0000000..1f2c55d --- /dev/null +++ b/doc/source/user/resources/network/v2/network_segment_range.rst @@ -0,0 +1,13 @@ +openstack.network.v2.network_segment_range +========================================== + +.. automodule:: openstack.network.v2.network_segment_range + +The NetworkSegmentRange Class +----------------------------- + +The ``NetworkSegmentRange`` class inherits from :class:`~openstack.resource +.Resource`. + +.. autoclass:: openstack.network.v2.network_segment_range.NetworkSegmentRange + :members: diff --git a/doc/source/user/resources/network/v2/pool.rst b/doc/source/user/resources/network/v2/pool.rst new file mode 100644 index 0000000..6b94a70 --- /dev/null +++ b/doc/source/user/resources/network/v2/pool.rst @@ -0,0 +1,12 @@ +openstack.network.v2.pool +========================= + +.. automodule:: openstack.network.v2.pool + +The Pool Class +-------------- + +The ``Pool`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.pool.Pool + :members: diff --git a/doc/source/user/resources/network/v2/pool_member.rst b/doc/source/user/resources/network/v2/pool_member.rst new file mode 100644 index 0000000..ce80a1d --- /dev/null +++ b/doc/source/user/resources/network/v2/pool_member.rst @@ -0,0 +1,12 @@ +openstack.network.v2.pool_member +================================ + +.. automodule:: openstack.network.v2.pool_member + +The PoolMember Class +-------------------- + +The ``PoolMember`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.pool_member.PoolMember + :members: diff --git a/doc/source/user/resources/network/v2/port.rst b/doc/source/user/resources/network/v2/port.rst new file mode 100644 index 0000000..b592d36 --- /dev/null +++ b/doc/source/user/resources/network/v2/port.rst @@ -0,0 +1,12 @@ +openstack.network.v2.port +========================= + +.. automodule:: openstack.network.v2.port + +The Port Class +-------------- + +The ``Port`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.port.Port + :members: diff --git a/doc/source/user/resources/network/v2/qos_bandwidth_limit_rule.rst b/doc/source/user/resources/network/v2/qos_bandwidth_limit_rule.rst new file mode 100644 index 0000000..98d9040 --- /dev/null +++ b/doc/source/user/resources/network/v2/qos_bandwidth_limit_rule.rst @@ -0,0 +1,13 @@ +openstack.network.v2.qos_bandwidth_limit_rule +============================================= + +.. automodule:: openstack.network.v2.qos_bandwidth_limit_rule + +The QoSBandwidthLimitRule Class +------------------------------- + +The ``QoSBandwidthLimitRule`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.qos_bandwidth_limit_rule.QoSBandwidthLimitRule + :members: diff --git a/doc/source/user/resources/network/v2/qos_dscp_marking_rule.rst b/doc/source/user/resources/network/v2/qos_dscp_marking_rule.rst new file mode 100644 index 0000000..c000236 --- /dev/null +++ b/doc/source/user/resources/network/v2/qos_dscp_marking_rule.rst @@ -0,0 +1,13 @@ +openstack.network.v2.qos_dscp_marking_rule +========================================== + +.. automodule:: openstack.network.v2.qos_dscp_marking_rule + +The QoSDSCPMarkingRule Class +---------------------------- + +The ``QoSDSCPMarkingRule`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.qos_dscp_marking_rule.QoSDSCPMarkingRule + :members: diff --git a/doc/source/user/resources/network/v2/qos_minimum_bandwidth_rule.rst b/doc/source/user/resources/network/v2/qos_minimum_bandwidth_rule.rst new file mode 100644 index 0000000..05c5276 --- /dev/null +++ b/doc/source/user/resources/network/v2/qos_minimum_bandwidth_rule.rst @@ -0,0 +1,13 @@ +openstack.network.v2.qos_minimum_bandwidth_rule +=============================================== + +.. automodule:: openstack.network.v2.qos_minimum_bandwidth_rule + +The QoSMinimumBandwidthRule Class +--------------------------------- + +The ``QoSMinimumBandwidthRule`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.qos_minimum_bandwidth_rule.QoSMinimumBandwidthRule + :members: diff --git a/doc/source/user/resources/network/v2/qos_minimum_packet_rate_rule.rst b/doc/source/user/resources/network/v2/qos_minimum_packet_rate_rule.rst new file mode 100644 index 0000000..19b7b01 --- /dev/null +++ b/doc/source/user/resources/network/v2/qos_minimum_packet_rate_rule.rst @@ -0,0 +1,13 @@ +openstack.network.v2.qos_minimum_packet_rate_rule +================================================= + +.. automodule:: openstack.network.v2.qos_minimum_packet_rate_rule + +The QoSMinimumPacketRateRule Class +---------------------------------- + +The ``QoSMinimumPacketRateRule`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.qos_minimum_packet_rate_rule.QoSMinimumPacketRateRule + :members: diff --git a/doc/source/user/resources/network/v2/qos_policy.rst b/doc/source/user/resources/network/v2/qos_policy.rst new file mode 100644 index 0000000..edffe5c --- /dev/null +++ b/doc/source/user/resources/network/v2/qos_policy.rst @@ -0,0 +1,12 @@ +openstack.network.v2.qos_policy +=============================== + +.. automodule:: openstack.network.v2.qos_policy + +The QoSPolicy Class +------------------- + +The ``QoSPolicy`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.qos_policy.QoSPolicy + :members: diff --git a/doc/source/user/resources/network/v2/qos_rule_type.rst b/doc/source/user/resources/network/v2/qos_rule_type.rst new file mode 100644 index 0000000..6d5ed5a --- /dev/null +++ b/doc/source/user/resources/network/v2/qos_rule_type.rst @@ -0,0 +1,12 @@ +openstack.network.v2.qos_rule_type +================================== + +.. automodule:: openstack.network.v2.qos_rule_type + +The QoSRuleType Class +--------------------- + +The ``QoSRuleType`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.qos_rule_type.QoSRuleType + :members: diff --git a/doc/source/user/resources/network/v2/quota.rst b/doc/source/user/resources/network/v2/quota.rst new file mode 100644 index 0000000..e150720 --- /dev/null +++ b/doc/source/user/resources/network/v2/quota.rst @@ -0,0 +1,12 @@ +openstack.network.v2.quota +========================== + +.. automodule:: openstack.network.v2.quota + +The Quota Class +--------------- + +The ``Quota`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.quota.Quota + :members: diff --git a/doc/source/user/resources/network/v2/rbac_policy.rst b/doc/source/user/resources/network/v2/rbac_policy.rst new file mode 100644 index 0000000..062da1d --- /dev/null +++ b/doc/source/user/resources/network/v2/rbac_policy.rst @@ -0,0 +1,12 @@ +openstack.network.v2.rbac_policy +================================ + +.. automodule:: openstack.network.v2.rbac_policy + +The RBACPolicy Class +-------------------- + +The ``RBACPolicy`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.rbac_policy.RBACPolicy + :members: diff --git a/doc/source/user/resources/network/v2/router.rst b/doc/source/user/resources/network/v2/router.rst new file mode 100644 index 0000000..83126d4 --- /dev/null +++ b/doc/source/user/resources/network/v2/router.rst @@ -0,0 +1,12 @@ +openstack.network.v2.router +=========================== + +.. automodule:: openstack.network.v2.router + +The Router Class +---------------- + +The ``Router`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.router.Router + :members: diff --git a/doc/source/user/resources/network/v2/security_group.rst b/doc/source/user/resources/network/v2/security_group.rst new file mode 100644 index 0000000..2d0c860 --- /dev/null +++ b/doc/source/user/resources/network/v2/security_group.rst @@ -0,0 +1,13 @@ +openstack.network.v2.security_group +=================================== + +.. automodule:: openstack.network.v2.security_group + +The SecurityGroup Class +----------------------- + +The ``SecurityGroup`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.security_group.SecurityGroup + :members: diff --git a/doc/source/user/resources/network/v2/security_group_rule.rst b/doc/source/user/resources/network/v2/security_group_rule.rst new file mode 100644 index 0000000..8af566e --- /dev/null +++ b/doc/source/user/resources/network/v2/security_group_rule.rst @@ -0,0 +1,13 @@ +openstack.network.v2.security_group_rule +======================================== + +.. automodule:: openstack.network.v2.security_group_rule + +The SecurityGroupRule Class +--------------------------- + +The ``SecurityGroupRule`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.security_group_rule.SecurityGroupRule + :members: diff --git a/doc/source/user/resources/network/v2/segment.rst b/doc/source/user/resources/network/v2/segment.rst new file mode 100644 index 0000000..2e652b8 --- /dev/null +++ b/doc/source/user/resources/network/v2/segment.rst @@ -0,0 +1,12 @@ +openstack.network.v2.segment +============================ + +.. automodule:: openstack.network.v2.segment + +The Segment Class +----------------- + +The ``Segment`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.segment.Segment + :members: diff --git a/doc/source/user/resources/network/v2/service_profile.rst b/doc/source/user/resources/network/v2/service_profile.rst new file mode 100644 index 0000000..5d66c44 --- /dev/null +++ b/doc/source/user/resources/network/v2/service_profile.rst @@ -0,0 +1,13 @@ +openstack.network.v2.service_profile +==================================== + +.. automodule:: openstack.network.v2.service_profile + +The ServiceProfile Class +------------------------ + +The ``ServiceProfile`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.service_profile.ServiceProfile + :members: diff --git a/doc/source/user/resources/network/v2/service_provider.rst b/doc/source/user/resources/network/v2/service_provider.rst new file mode 100644 index 0000000..02f912d --- /dev/null +++ b/doc/source/user/resources/network/v2/service_provider.rst @@ -0,0 +1,13 @@ +openstack.network.v2.service_provider +===================================== + +.. automodule:: openstack.network.v2.service_provider + +The Service Provider Class +-------------------------- + +The ``Service Provider`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.service_provider.ServiceProvider + :members: diff --git a/doc/source/user/resources/network/v2/sfc_flow_classifier.rst b/doc/source/user/resources/network/v2/sfc_flow_classifier.rst new file mode 100644 index 0000000..da94f27 --- /dev/null +++ b/doc/source/user/resources/network/v2/sfc_flow_classifier.rst @@ -0,0 +1,13 @@ +openstack.network.v2.sfc_flow_classifier +======================================== + +.. automodule:: openstack.network.v2.sfc_flow_classifier + +The SfcFlowClassifier Class +--------------------------- + +The ``SfcFlowClassifier`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.sfc_flow_classifier.SfcFlowClassifier + :members: diff --git a/doc/source/user/resources/network/v2/sfc_port_chain.rst b/doc/source/user/resources/network/v2/sfc_port_chain.rst new file mode 100644 index 0000000..3842f57 --- /dev/null +++ b/doc/source/user/resources/network/v2/sfc_port_chain.rst @@ -0,0 +1,12 @@ +openstack.network.v2.sfc_port_chain +=================================== + +.. automodule:: openstack.network.v2.sfc_port_chain + +The SfcPortChain Class +---------------------- + +The ``SfcPortChain`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.sfc_port_chain.SfcPortChain + :members: diff --git a/doc/source/user/resources/network/v2/sfc_port_pair.rst b/doc/source/user/resources/network/v2/sfc_port_pair.rst new file mode 100644 index 0000000..84e6500 --- /dev/null +++ b/doc/source/user/resources/network/v2/sfc_port_pair.rst @@ -0,0 +1,12 @@ +openstack.network.v2.sfc_port_pair +================================== + +.. automodule:: openstack.network.v2.sfc_port_pair + +The SfcPortPair Class +--------------------- + +The ``SfcPortPair`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.sfc_port_pair.SfcPortPair + :members: diff --git a/doc/source/user/resources/network/v2/sfc_port_pair_group.rst b/doc/source/user/resources/network/v2/sfc_port_pair_group.rst new file mode 100644 index 0000000..3333062 --- /dev/null +++ b/doc/source/user/resources/network/v2/sfc_port_pair_group.rst @@ -0,0 +1,13 @@ +openstack.network.v2.sfc_port_pair_group +======================================== + +.. automodule:: openstack.network.v2.sfc_port_pair_group + +The SfcPortPairGroup Class +-------------------------- + +The ``SfcPortPairGroup`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.sfc_port_pair_group.SfcPortPairGroup + :members: diff --git a/doc/source/user/resources/network/v2/sfc_service_graph.rst b/doc/source/user/resources/network/v2/sfc_service_graph.rst new file mode 100644 index 0000000..718b720 --- /dev/null +++ b/doc/source/user/resources/network/v2/sfc_service_graph.rst @@ -0,0 +1,13 @@ +openstack.network.v2.sfc_service_graph +====================================== + +.. automodule:: openstack.network.v2.sfc_service_graph + +The SfcServiceGraph Class +------------------------- + +The ``SfcServiceGraph`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.sfc_service_graph.SfcServiceGraph + :members: diff --git a/doc/source/user/resources/network/v2/subnet.rst b/doc/source/user/resources/network/v2/subnet.rst new file mode 100644 index 0000000..16a6d27 --- /dev/null +++ b/doc/source/user/resources/network/v2/subnet.rst @@ -0,0 +1,12 @@ +openstack.network.v2.subnet +=========================== + +.. automodule:: openstack.network.v2.subnet + +The Subnet Class +---------------- + +The ``Subnet`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.subnet.Subnet + :members: diff --git a/doc/source/user/resources/network/v2/subnet_pool.rst b/doc/source/user/resources/network/v2/subnet_pool.rst new file mode 100644 index 0000000..14bf753 --- /dev/null +++ b/doc/source/user/resources/network/v2/subnet_pool.rst @@ -0,0 +1,12 @@ +openstack.network.v2.subnet_pool +================================ + +.. automodule:: openstack.network.v2.subnet_pool + +The SubnetPool Class +-------------------- + +The ``SubnetPool`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.subnet_pool.SubnetPool + :members: diff --git a/doc/source/user/resources/network/v2/tap_flow.rst b/doc/source/user/resources/network/v2/tap_flow.rst new file mode 100644 index 0000000..21cbce3 --- /dev/null +++ b/doc/source/user/resources/network/v2/tap_flow.rst @@ -0,0 +1,12 @@ +openstack.network.v2.tap_flow +============================= + +.. automodule:: openstack.network.v2.tap_flow + +The TapFlow Class +----------------- + +The ``TapFlow`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.tap_flow.TapFlow + :members: diff --git a/doc/source/user/resources/network/v2/tap_service.rst b/doc/source/user/resources/network/v2/tap_service.rst new file mode 100644 index 0000000..74b51c8 --- /dev/null +++ b/doc/source/user/resources/network/v2/tap_service.rst @@ -0,0 +1,12 @@ +openstack.network.v2.tap_service +================================ + +.. automodule:: openstack.network.v2.tap_service + +The TapService Class +-------------------- + +The ``TapService`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.tap_service.TapService + :members: diff --git a/doc/source/user/resources/network/v2/vpn/endpoint_group.rst b/doc/source/user/resources/network/v2/vpn/endpoint_group.rst new file mode 100644 index 0000000..3e8478c --- /dev/null +++ b/doc/source/user/resources/network/v2/vpn/endpoint_group.rst @@ -0,0 +1,13 @@ +openstack.network.v2.vpn_endpoint_group +======================================= + +.. automodule:: openstack.network.v2.vpn_endpoint_group + +The VpnEndpointGroup Class +-------------------------- + +The ``VpnEndpointGroup`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.vpn_endpoint_group.VpnEndpointGroup + :members: diff --git a/doc/source/user/resources/network/v2/vpn/ike_policy.rst b/doc/source/user/resources/network/v2/vpn/ike_policy.rst new file mode 100644 index 0000000..81bc6b0 --- /dev/null +++ b/doc/source/user/resources/network/v2/vpn/ike_policy.rst @@ -0,0 +1,13 @@ +openstack.network.v2.vpn_ike_policy +=================================== + +.. automodule:: openstack.network.v2.vpn_ike_policy + +The VpnIkePolicy Class +---------------------- + +The ``VpnIkePolicy`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.vpn_ike_policy.VpnIkePolicy + :members: diff --git a/doc/source/user/resources/network/v2/vpn/index.rst b/doc/source/user/resources/network/v2/vpn/index.rst new file mode 100644 index 0000000..fee6fe9 --- /dev/null +++ b/doc/source/user/resources/network/v2/vpn/index.rst @@ -0,0 +1,8 @@ +VPNaaS Resources +================ + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/doc/source/user/resources/network/v2/vpn/ipsec_policy.rst b/doc/source/user/resources/network/v2/vpn/ipsec_policy.rst new file mode 100644 index 0000000..5a5d759 --- /dev/null +++ b/doc/source/user/resources/network/v2/vpn/ipsec_policy.rst @@ -0,0 +1,13 @@ +openstack.network.v2.vpn_ipsec_policy +===================================== + +.. automodule:: openstack.network.v2.vpn_ipsec_policy + +The VpnIpsecPolicy Class +------------------------ + +The ``VpnIpsecPolicy`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.vpn_ipsec_policy.VpnIpsecPolicy + :members: diff --git a/doc/source/user/resources/network/v2/vpn/ipsec_site_connection.rst b/doc/source/user/resources/network/v2/vpn/ipsec_site_connection.rst new file mode 100644 index 0000000..f90e000 --- /dev/null +++ b/doc/source/user/resources/network/v2/vpn/ipsec_site_connection.rst @@ -0,0 +1,13 @@ +openstack.network.v2.vpn_ipsec_site_connection +============================================== + +.. automodule:: openstack.network.v2.vpn_ipsec_site_connection + +The VpnIPSecSiteConnection Class +-------------------------------- + +The ``VpnIPSecSiteConnection`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.vpn_ipsec_site_connection.VpnIPSecSiteConnection + :members: diff --git a/doc/source/user/resources/network/v2/vpn/service.rst b/doc/source/user/resources/network/v2/vpn/service.rst new file mode 100644 index 0000000..0a185ba --- /dev/null +++ b/doc/source/user/resources/network/v2/vpn/service.rst @@ -0,0 +1,13 @@ +openstack.network.v2.vpn_service +================================ + +.. automodule:: openstack.network.v2.vpn_service + +The VpnService Class +-------------------- + +The ``VpnService`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.network.v2.vpn_service.VpnService + :members: diff --git a/doc/source/user/resources/object_store/index.rst b/doc/source/user/resources/object_store/index.rst new file mode 100644 index 0000000..e5524e3 --- /dev/null +++ b/doc/source/user/resources/object_store/index.rst @@ -0,0 +1,9 @@ +Object Store Resources +====================== + +.. toctree:: + :maxdepth: 1 + + v1/account + v1/container + v1/obj diff --git a/doc/source/user/resources/object_store/v1/account.rst b/doc/source/user/resources/object_store/v1/account.rst new file mode 100644 index 0000000..5236fae --- /dev/null +++ b/doc/source/user/resources/object_store/v1/account.rst @@ -0,0 +1,12 @@ +openstack.object_store.v1.account +================================= + +.. automodule:: openstack.object_store.v1.account + +The Account Class +----------------- + +The ``Account`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.object_store.v1.account.Account + :members: diff --git a/doc/source/user/resources/object_store/v1/container.rst b/doc/source/user/resources/object_store/v1/container.rst new file mode 100644 index 0000000..3049190 --- /dev/null +++ b/doc/source/user/resources/object_store/v1/container.rst @@ -0,0 +1,12 @@ +openstack.object_store.v1.container +=================================== + +.. automodule:: openstack.object_store.v1.container + +The Container Class +------------------- + +The ``Container`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.object_store.v1.container.Container + :members: diff --git a/doc/source/user/resources/object_store/v1/obj.rst b/doc/source/user/resources/object_store/v1/obj.rst new file mode 100644 index 0000000..292cfc0 --- /dev/null +++ b/doc/source/user/resources/object_store/v1/obj.rst @@ -0,0 +1,12 @@ +openstack.object_store.v1.obj +============================= + +.. automodule:: openstack.object_store.v1.obj + +The Object Class +---------------- + +The ``Object`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.object_store.v1.obj.Object + :members: diff --git a/doc/source/user/resources/orchestration/index.rst b/doc/source/user/resources/orchestration/index.rst new file mode 100644 index 0000000..d0c53f6 --- /dev/null +++ b/doc/source/user/resources/orchestration/index.rst @@ -0,0 +1,9 @@ +Orchestration Resources +======================= + +.. toctree:: + :maxdepth: 1 + + v1/stack + v1/resource + v1/stack_event diff --git a/doc/source/user/resources/orchestration/v1/resource.rst b/doc/source/user/resources/orchestration/v1/resource.rst new file mode 100644 index 0000000..7eb96a9 --- /dev/null +++ b/doc/source/user/resources/orchestration/v1/resource.rst @@ -0,0 +1,12 @@ +openstack.orchestration.v1.resource +=================================== + +.. automodule:: openstack.orchestration.v1.resource + +The Resource Class +------------------ + +The ``Resource`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.orchestration.v1.resource.Resource + :members: diff --git a/doc/source/user/resources/orchestration/v1/stack.rst b/doc/source/user/resources/orchestration/v1/stack.rst new file mode 100644 index 0000000..8dda658 --- /dev/null +++ b/doc/source/user/resources/orchestration/v1/stack.rst @@ -0,0 +1,12 @@ +openstack.orchestration.v1.stack +================================ + +.. automodule:: openstack.orchestration.v1.stack + +The Stack Class +--------------- + +The ``Stack`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.orchestration.v1.stack.Stack + :members: diff --git a/doc/source/user/resources/orchestration/v1/stack_event.rst b/doc/source/user/resources/orchestration/v1/stack_event.rst new file mode 100644 index 0000000..8838f44 --- /dev/null +++ b/doc/source/user/resources/orchestration/v1/stack_event.rst @@ -0,0 +1,12 @@ +openstack.orchestration.v1.stack_event +====================================== + +.. automodule:: openstack.orchestration.v1.stack_event + +The StackEvent Class +-------------------- + +The ``StackEvent`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.orchestration.v1.stack_event.StackEvent + :members: diff --git a/doc/source/user/resources/placement/index.rst b/doc/source/user/resources/placement/index.rst new file mode 100644 index 0000000..b57b797 --- /dev/null +++ b/doc/source/user/resources/placement/index.rst @@ -0,0 +1,10 @@ +Placement v1 Resources +====================== + +.. toctree:: + :maxdepth: 1 + + v1/resource_class + v1/resource_provider + v1/resource_provider_inventory + v1/trait diff --git a/doc/source/user/resources/placement/v1/resource_class.rst b/doc/source/user/resources/placement/v1/resource_class.rst new file mode 100644 index 0000000..2ef5817 --- /dev/null +++ b/doc/source/user/resources/placement/v1/resource_class.rst @@ -0,0 +1,13 @@ +openstack.placement.v1.resource_class +===================================== + +.. automodule:: openstack.placement.v1.resource_class + +The ResourceClass Class +----------------------- + +The ``ResourceClass`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.placement.v1.resource_class.ResourceClass + :members: diff --git a/doc/source/user/resources/placement/v1/resource_provider.rst b/doc/source/user/resources/placement/v1/resource_provider.rst new file mode 100644 index 0000000..8ab028b --- /dev/null +++ b/doc/source/user/resources/placement/v1/resource_provider.rst @@ -0,0 +1,13 @@ +openstack.placement.v1.resource_provider +======================================== + +.. automodule:: openstack.placement.v1.resource_provider + +The ResourceProvider Class +-------------------------- + +The ``ResourceProvider`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.placement.v1.resource_provider.ResourceProvider + :members: diff --git a/doc/source/user/resources/placement/v1/resource_provider_inventory.rst b/doc/source/user/resources/placement/v1/resource_provider_inventory.rst new file mode 100644 index 0000000..1f3491a --- /dev/null +++ b/doc/source/user/resources/placement/v1/resource_provider_inventory.rst @@ -0,0 +1,13 @@ +openstack.placement.v1.resource_provider_inventory +================================================== + +.. automodule:: openstack.placement.v1.resource_provider_inventory + +The ResourceProviderInventory Class +----------------------------------- + +The ``ResourceProviderInventory`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.placement.v1.resource_provider_inventory.ResourceProviderInventory + :members: diff --git a/doc/source/user/resources/placement/v1/trait.rst b/doc/source/user/resources/placement/v1/trait.rst new file mode 100644 index 0000000..e9c70a8 --- /dev/null +++ b/doc/source/user/resources/placement/v1/trait.rst @@ -0,0 +1,12 @@ +openstack.placement.v1.trait +============================ + +.. automodule:: openstack.placement.v1.trait + +The Trait Class +--------------- + +The ``Trait`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.placement.v1.trait.Trait + :members: diff --git a/doc/source/user/resources/shared_file_system/index.rst b/doc/source/user/resources/shared_file_system/index.rst new file mode 100644 index 0000000..1b45f4f --- /dev/null +++ b/doc/source/user/resources/shared_file_system/index.rst @@ -0,0 +1,20 @@ +Shared File System service resources +==================================== + +.. toctree:: + :maxdepth: 1 + + v2/availability_zone + v2/storage_pool + v2/limit + v2/share + v2/share_instance + v2/share_network_subnet + v2/share_snapshot + v2/share_snapshot_instance + v2/share_network + v2/user_message + v2/share_group + v2/share_access_rule + v2/share_group_snapshot + v2/resource_locks diff --git a/doc/source/user/resources/shared_file_system/v2/availability_zone.rst b/doc/source/user/resources/shared_file_system/v2/availability_zone.rst new file mode 100644 index 0000000..9a51890 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/availability_zone.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.availability_zone +================================================= + +.. automodule:: openstack.shared_file_system.v2.availability_zone + +The AvailabilityZone Class +-------------------------- + +The ``AvailabilityZone`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.availability_zone.AvailabilityZone + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/limit.rst b/doc/source/user/resources/shared_file_system/v2/limit.rst new file mode 100644 index 0000000..33342c1 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/limit.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.limit +===================================== + +.. automodule:: openstack.shared_file_system.v2.limit + +The Limit Class +--------------- + +The ``Limit`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.limit.Limit + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/resource_locks.rst b/doc/source/user/resources/shared_file_system/v2/resource_locks.rst new file mode 100644 index 0000000..6040bfa --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/resource_locks.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.resource_locks +============================================== + +.. automodule:: openstack.shared_file_system.v2.resource_locks + +The Resource Locks Class +------------------------ + +The ``ResourceLock`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.resource_locks.ResourceLock + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share.rst b/doc/source/user/resources/shared_file_system/v2/share.rst new file mode 100644 index 0000000..bac5e96 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share +===================================== + +.. automodule:: openstack.shared_file_system.v2.share + +The Share Class +--------------- + +The ``Share`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share.Share + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share_access_rule.rst b/doc/source/user/resources/shared_file_system/v2/share_access_rule.rst new file mode 100644 index 0000000..eec6b43 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share_access_rule.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share_access_rule +================================================= + +.. automodule:: openstack.shared_file_system.v2.share_access_rule + +The ShareAccessRule Class +------------------------- + +The ``ShareAccessRule`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share_access_rule.ShareAccessRule + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share_group.rst b/doc/source/user/resources/shared_file_system/v2/share_group.rst new file mode 100644 index 0000000..232202b --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share_group.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share_group +=========================================== + +.. automodule:: openstack.shared_file_system.v2.share_group + +The ShareGroup Class +-------------------- + +The ``ShareGroup`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share_group.ShareGroup + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share_group_snapshot.rst b/doc/source/user/resources/shared_file_system/v2/share_group_snapshot.rst new file mode 100644 index 0000000..40972ad --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share_group_snapshot.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share_group_snapshot +==================================================== + +.. automodule:: openstack.shared_file_system.v2.share_group_snapshot + +The ShareGroupSnapshot Class +---------------------------- + +The ``ShareGroupSnapshot`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share_group_snapshot.ShareGroupSnapshot + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share_instance.rst b/doc/source/user/resources/shared_file_system/v2/share_instance.rst new file mode 100644 index 0000000..0b05833 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share_instance.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share_instance +============================================== + +.. automodule:: openstack.shared_file_system.v2.share_instance + +The ShareInstance Class +----------------------- + +The ``ShareInstance`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share_instance.ShareInstance + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share_network.rst b/doc/source/user/resources/shared_file_system/v2/share_network.rst new file mode 100644 index 0000000..793265d --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share_network.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share_network +============================================= + +.. automodule:: openstack.shared_file_system.v2.share_network + +The ShareNetwork Class +---------------------- + +The ``ShareNetwork`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share_network.ShareNetwork + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share_network_subnet.rst b/doc/source/user/resources/shared_file_system/v2/share_network_subnet.rst new file mode 100644 index 0000000..95638a6 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share_network_subnet.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share_network_subnet +==================================================== + +.. automodule:: openstack.shared_file_system.v2.share_network_subnet + +The ShareNetworkSubnet Class +---------------------------- + +The ``ShareNetworkSubnet`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share_network_subnet.ShareNetworkSubnet + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share_snapshot.rst b/doc/source/user/resources/shared_file_system/v2/share_snapshot.rst new file mode 100644 index 0000000..4063c48 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share_snapshot.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share_snapshot +============================================== + +.. automodule:: openstack.shared_file_system.v2.share_snapshot + +The ShareSnapshot Class +----------------------- + +The ``ShareSnapshot`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share_snapshot.ShareSnapshot + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/share_snapshot_instance.rst b/doc/source/user/resources/shared_file_system/v2/share_snapshot_instance.rst new file mode 100644 index 0000000..9184599 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/share_snapshot_instance.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.share_snapshot_instance +======================================================= + +.. automodule:: openstack.shared_file_system.v2.share_snapshot_instance + +The ShareSnapshotInstance Class +------------------------------- + +The ``ShareSnapshotInstance`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.share_snapshot_instance.ShareSnapshotInstance + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/storage_pool.rst b/doc/source/user/resources/shared_file_system/v2/storage_pool.rst new file mode 100644 index 0000000..86649b8 --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/storage_pool.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.storage_pool +============================================ + +.. automodule:: openstack.shared_file_system.v2.storage_pool + +The StoragePool Class +--------------------- + +The ``StoragePool`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.storage_pool.StoragePool + :members: diff --git a/doc/source/user/resources/shared_file_system/v2/user_message.rst b/doc/source/user/resources/shared_file_system/v2/user_message.rst new file mode 100644 index 0000000..de3b21f --- /dev/null +++ b/doc/source/user/resources/shared_file_system/v2/user_message.rst @@ -0,0 +1,13 @@ +openstack.shared_file_system.v2.user_message +============================================ + +.. automodule:: openstack.shared_file_system.v2.user_message + +The UserMessage Class +--------------------- + +The ``UserMessage`` class inherits from +:class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.shared_file_system.v2.user_message.UserMessage + :members: diff --git a/doc/source/user/resources/workflow/index.rst b/doc/source/user/resources/workflow/index.rst new file mode 100644 index 0000000..8d66f71 --- /dev/null +++ b/doc/source/user/resources/workflow/index.rst @@ -0,0 +1,9 @@ +Workflow Resources +================== + +.. toctree:: + :maxdepth: 1 + + v2/execution + v2/workflow + v2/crontrigger diff --git a/doc/source/user/resources/workflow/v2/crontrigger.rst b/doc/source/user/resources/workflow/v2/crontrigger.rst new file mode 100644 index 0000000..828af76 --- /dev/null +++ b/doc/source/user/resources/workflow/v2/crontrigger.rst @@ -0,0 +1,12 @@ +openstack.workflow.v2.cron_trigger +================================== + +.. automodule:: openstack.workflow.v2.cron_trigger + +The CronTrigger Class +--------------------- + +The ``CronTrigger`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.workflow.v2.cron_trigger.CronTrigger + :members: diff --git a/doc/source/user/resources/workflow/v2/execution.rst b/doc/source/user/resources/workflow/v2/execution.rst new file mode 100644 index 0000000..62ec283 --- /dev/null +++ b/doc/source/user/resources/workflow/v2/execution.rst @@ -0,0 +1,12 @@ +openstack.workflow.v2.execution +=============================== + +.. automodule:: openstack.workflow.v2.execution + +The Execution Class +------------------- + +The ``Execution`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.workflow.v2.execution.Execution + :members: diff --git a/doc/source/user/resources/workflow/v2/workflow.rst b/doc/source/user/resources/workflow/v2/workflow.rst new file mode 100644 index 0000000..8f8950e --- /dev/null +++ b/doc/source/user/resources/workflow/v2/workflow.rst @@ -0,0 +1,12 @@ +openstack.workflow.v2.workflow +============================== + +.. automodule:: openstack.workflow.v2.workflow + +The Workflow Class +------------------ + +The ``Workflow`` class inherits from :class:`~openstack.resource.Resource`. + +.. autoclass:: openstack.workflow.v2.workflow.Workflow + :members: diff --git a/doc/source/user/service_description.rst b/doc/source/user/service_description.rst new file mode 100644 index 0000000..3eeeb4a --- /dev/null +++ b/doc/source/user/service_description.rst @@ -0,0 +1,10 @@ +ServiceDescription +================== +.. automodule:: openstack.service_description + + +ServiceDescription object +------------------------- + +.. autoclass:: openstack.service_description.ServiceDescription + :members: diff --git a/doc/source/user/testing/fakes.rst b/doc/source/user/testing/fakes.rst new file mode 100644 index 0000000..ec238ef --- /dev/null +++ b/doc/source/user/testing/fakes.rst @@ -0,0 +1,5 @@ +Fakes +===== + +.. automodule:: openstack.test.fakes + :members: diff --git a/doc/source/user/testing/index.rst b/doc/source/user/testing/index.rst new file mode 100644 index 0000000..ef602a9 --- /dev/null +++ b/doc/source/user/testing/index.rst @@ -0,0 +1,8 @@ +======================================== +Testing applications using OpenStack SDK +======================================== + +.. toctree:: + :maxdepth: 1 + + fakes diff --git a/doc/source/user/transition_from_profile.rst b/doc/source/user/transition_from_profile.rst new file mode 100644 index 0000000..a6edc6a --- /dev/null +++ b/doc/source/user/transition_from_profile.rst @@ -0,0 +1,186 @@ +Transition from Profile +======================= + +.. note:: This section describes migrating code from a previous interface of + openstacksdk and can be ignored by people writing new code. + +If you have code that currently uses the :class:`~openstack.profile.Profile` +object and/or an ``authenticator`` instance from an object based on +``openstack.auth.base.BaseAuthPlugin``, that code should be updated to use the +:class:`~openstack.config.cloud_region.CloudRegion` object instead. + +.. important:: + + :class:`~openstack.profile.Profile` is going away. Existing code using it + should be migrated as soon as possible. + +Writing Code that Works with Both +--------------------------------- + +These examples should all work with both the old and new interface, with one +caveat. With the old interface, the ``CloudConfig`` object comes from the +``os-client-config`` library, and in the new interface that has been moved +into the SDK. In order to write code that works with both the old and new +interfaces, use the following code to import the config namespace: + +.. code-block:: python + + try: + from openstack import config as occ + except ImportError: + from os_client_config import config as occ + +The examples will assume that the config module has been imported in that +manner. + +.. note:: Yes, there is an easier and less verbose way to do all of these. + These are verbose to handle both the old and new interfaces in the + same codebase. + +Replacing authenticator +----------------------- + +There is no direct replacement for ``openstack.auth.base.BaseAuthPlugin``. +``openstacksdk`` uses the `keystoneauth`_ library for authentication +and HTTP interactions. `keystoneauth`_ has `auth plugins`_ that can be used +to control how authentication is done. The ``auth_type`` config parameter +can be set to choose the correct authentication method to be used. + +Replacing Profile +----------------- + +The right way to replace the use of ``openstack.profile.Profile`` depends +a bit on what you're trying to accomplish. Common patterns are listed below, +but in general the approach is either to pass a cloud name to the +`openstack.connection.Connection` constructor, or to construct a +`openstack.config.cloud_region.CloudRegion` object and pass it to the +constructor. + +All of the examples on this page assume that you want to support old and +new interfaces simultaneously. There are easier and less verbose versions +of each that are available if you can just make a clean transition. + +Getting a Connection to a named cloud from clouds.yaml +------------------------------------------------------ + +If you want is to construct a `openstack.connection.Connection` based on +parameters configured in a ``clouds.yaml`` file, or from environment variables: + +.. code-block:: python + + import openstack.connection + + conn = connection.from_config(cloud_name='name-of-cloud-you-want') + +Getting a Connection from python arguments avoiding clouds.yaml +--------------------------------------------------------------- + +If, on the other hand, you want to construct a +`openstack.connection.Connection`, but are in a context where reading config +from a clouds.yaml file is undesirable, such as inside of a Service: + +* create a `openstack.config.loader.OpenStackConfig` object, telling + it to not load yaml files. Optionally pass an ``app_name`` and + ``app_version`` which will be added to user-agent strings. +* get a `openstack.config.cloud_region.CloudRegion` object from it +* get a `openstack.connection.Connection` + +.. code-block:: python + + try: + from openstack import config as occ + except ImportError: + from os_client_config import config as occ + from openstack import connection + + loader = occ.OpenStackConfig( + load_yaml_files=False, + app_name='spectacular-app', + app_version='1.0') + cloud_region = loader.get_one_cloud( + region_name='my-awesome-region', + auth_type='password', + auth=dict( + auth_url='https://auth.example.com', + username='amazing-user', + user_domain_name='example-domain', + project_name='astounding-project', + user_project_name='example-domain', + password='super-secret-password', + )) + conn = connection.from_config(cloud_config=cloud_region) + +.. note:: app_name and app_version are completely optional, and auth_type + defaults to 'password'. They are shown here for clarity as to + where they should go if they want to be set. + +Getting a Connection from python arguments and optionally clouds.yaml +--------------------------------------------------------------------- + +If you want to make a connection from python arguments and want to allow +one of them to optionally be ``cloud`` to allow selection of a named cloud, +it's essentially the same as the previous example, except without +``load_yaml_files=False``. + +.. code-block:: python + + try: + from openstack import config as occ + except ImportError: + from os_client_config import config as occ + from openstack import connection + + loader = occ.OpenStackConfig( + app_name='spectacular-app', + app_version='1.0') + cloud_region = loader.get_one_cloud( + region_name='my-awesome-region', + auth_type='password', + auth=dict( + auth_url='https://auth.example.com', + username='amazing-user', + user_domain_name='example-domain', + project_name='astounding-project', + user_project_name='example-domain', + password='super-secret-password', + )) + conn = connection.from_config(cloud_config=cloud_region) + +Parameters to get_one_cloud +--------------------------- + +The most important things to note are: + +* ``auth_type`` specifies which kind of authentication plugin to use. It + controls how authentication is done, as well as what parameters are required. +* ``auth`` is a dictionary containing the parameters needed by the auth plugin. + The most common information it needs are user, project, domain, auth_url + and password. +* The rest of the keyword arguments to + ``openstack.config.loader.OpenStackConfig.get_one_cloud`` are either + parameters needed by the `keystoneauth Session`_ object, which control how + HTTP connections are made, or parameters needed by the + `keystoneauth Adapter`_ object, which control how services are found in the + Keystone Catalog. + +For `keystoneauth Adapter`_ parameters, since there is one +`openstack.connection.Connection` object but many services, per-service +parameters are formed by using the official ``service_type`` of the service +in question. For instance, to override the endpoint for the ``compute`` +service, the parameter ``compute_endpoint_override`` would be used. + +``region_name`` in ``openstack.profile.Profile`` was a per-service parameter. +This is no longer a valid concept. An `openstack.connection.Connection` is a +connection to a region of a cloud. If you are in an extreme situation where +you have one service in one region and a different service in a different +region, you must use two different `openstack.connection.Connection` objects. + +.. note:: service_type, although a parameter for keystoneauth1.adapter.Adapter, + is not a valid parameter for get_one_cloud. service_type is the key + by which services are referred, so saying + 'compute_service_type="henry"' doesn't have any meaning. + +.. _keystoneauth: https://docs.openstack.org/keystoneauth/latest/ +.. _auth plugins: https://docs.openstack.org/keystoneauth/latest/authentication-plugins.html +.. _keystoneauth Adapter: https://docs.openstack.org/keystoneauth/latest/api/keystoneauth1.html#keystoneauth1.adapter.Adapter +.. _keystoneauth Session: https://docs.openstack.org/keystoneauth/latest/api/keystoneauth1.html#keystoneauth1.session.Session diff --git a/doc/source/user/utils.rst b/doc/source/user/utils.rst new file mode 100644 index 0000000..5c1f39d --- /dev/null +++ b/doc/source/user/utils.rst @@ -0,0 +1,3 @@ +Utilities +========= +.. automodule:: openstack.utils diff --git a/doc/source/user/warnings.rst b/doc/source/user/warnings.rst new file mode 100644 index 0000000..34d1893 --- /dev/null +++ b/doc/source/user/warnings.rst @@ -0,0 +1,20 @@ +Warnings +======== + +openstacksdk uses the `warnings`__ infrastructure to warn users about +deprecated resources and resource fields, as well as deprecated behavior in +openstacksdk itself. These warnings are derived from ``Warning`` or +``DeprecationWarning``. In Python, warnings are emitted by default while +deprecation warnings are silenced by default and must be turned on using the +``-Wa`` Python command line option or the ``PYTHONWARNINGS`` environment +variable. If you are writing an application that uses openstacksdk, you may +wish to enable some of these warnings during test runs to ensure you migrate +away from deprecated behavior. + +Available warnings +------------------ + +.. automodule:: openstack.warnings + :members: + +.. __: https://docs.python.org/3/library/warnings.html diff --git a/docs-requirements.txt b/docs-requirements.txt new file mode 100644 index 0000000..9463811 --- /dev/null +++ b/docs-requirements.txt @@ -0,0 +1,2 @@ +-r requirements.txt +-r test-requirements.txt diff --git a/accelerator/__init__.py b/examples/__init__.py similarity index 100% rename from accelerator/__init__.py rename to examples/__init__.py diff --git a/examples/baremetal/list.py b/examples/baremetal/list.py new file mode 100644 index 0000000..a5595ab --- /dev/null +++ b/examples/baremetal/list.py @@ -0,0 +1,25 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Bare Metal service. +""" + + +def list_nodes(conn): + print("List Nodes:") + + for node in conn.baremetal.nodes(): + print(node) + + +# TODO(dtantsur): other resources diff --git a/examples/baremetal/provisioning.py b/examples/baremetal/provisioning.py new file mode 100644 index 0000000..7eb7580 --- /dev/null +++ b/examples/baremetal/provisioning.py @@ -0,0 +1,33 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Operations with the provision state in the Bare Metal service. +""" + + +def manage_and_inspect_node(conn, uuid): + node = conn.baremetal.find_node(uuid) + print('Before:', node.provision_state) + conn.baremetal.set_node_provision_state(node, 'manage') + conn.baremetal.wait_for_nodes_provision_state([node], 'manageable') + conn.baremetal.set_node_provision_state(node, 'inspect') + res = conn.baremetal.wait_for_nodes_provision_state([node], 'manageable') + print('After:', res[0].provision_state) + + +def provide_node(conn, uuid): + node = conn.baremetal.find_node(uuid) + print('Before:', node.provision_state) + conn.baremetal.set_node_provision_state(node, 'provide') + res = conn.baremetal.wait_for_nodes_provision_state([node], 'available') + print('After:', res[0].provision_state) diff --git a/examples/cloud/cleanup-servers.py b/examples/cloud/cleanup-servers.py new file mode 100644 index 0000000..076415e --- /dev/null +++ b/examples/cloud/cleanup-servers.py @@ -0,0 +1,26 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack import cloud as openstack + +# Initialize and turn on debug logging +openstack.enable_logging(debug=True) + +for cloud_name, region_name in [ + ('my-vexxhost', 'ca-ymq-1'), + ('my-citycloud', 'Buf1'), + ('my-internap', 'ams01'), +]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + for server in cloud.search_servers('my-server'): + cloud.delete_server(server, wait=True, delete_ips=True) diff --git a/examples/cloud/create-server-dict.py b/examples/cloud/create-server-dict.py new file mode 100644 index 0000000..4799238 --- /dev/null +++ b/examples/cloud/create-server-dict.py @@ -0,0 +1,46 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack import cloud as openstack + +# Initialize and turn on debug logging +openstack.enable_logging(debug=True) + +for cloud_name, region_name, image, flavor_id in [ + ( + 'my-vexxhost', + 'ca-ymq-1', + 'Ubuntu 16.04.1 LTS [2017-03-03]', + '5cf64088-893b-46b5-9bb1-ee020277635d', + ), + ( + 'my-citycloud', + 'Buf1', + 'Ubuntu 16.04 Xenial Xerus', + '0dab10b5-42a2-438e-be7b-505741a7ffcc', + ), + ('my-internap', 'ams01', 'Ubuntu 16.04 LTS (Xenial Xerus)', 'A1.4'), +]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public ip for it. + server = cloud.create_server( + 'my-server', + image=image, + flavor=dict(id=flavor_id), + wait=True, + auto_ip=True, + ) + # Delete it - this is a demo + cloud.delete_server(server, wait=True, delete_ips=True) diff --git a/examples/cloud/create-server-name-or-id.py b/examples/cloud/create-server-name-or-id.py new file mode 100644 index 0000000..2f3521d --- /dev/null +++ b/examples/cloud/create-server-name-or-id.py @@ -0,0 +1,41 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack import cloud as openstack + +# Initialize and turn on debug logging +openstack.enable_logging(debug=True) + +for cloud_name, region_name, image, flavor in [ + ( + 'my-vexxhost', + 'ca-ymq-1', + 'Ubuntu 16.04.1 LTS [2017-03-03]', + 'v1-standard-4', + ), + ('my-citycloud', 'Buf1', 'Ubuntu 16.04 Xenial Xerus', '4C-4GB-100GB'), + ('my-internap', 'ams01', 'Ubuntu 16.04 LTS (Xenial Xerus)', 'A1.4'), +]: + # Initialize cloud + cloud = openstack.connect(cloud=cloud_name, region_name=region_name) + cloud.delete_server('my-server', wait=True, delete_ips=True) + + # Boot a server, wait for it to boot, and then do whatever is needed + # to get a public ip for it. + server = cloud.create_server( + 'my-server', image=image, flavor=flavor, wait=True, auto_ip=True + ) + print(server.name) + print(server['name']) + cloud.pprint(server) + # Delete it - this is a demo + cloud.delete_server(server, wait=True, delete_ips=True) diff --git a/examples/cloud/debug-logging.py b/examples/cloud/debug-logging.py new file mode 100644 index 0000000..a490619 --- /dev/null +++ b/examples/cloud/debug-logging.py @@ -0,0 +1,18 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack import cloud as openstack + +openstack.enable_logging(debug=True) + +cloud = openstack.connect(cloud='my-vexxhost', region_name='ca-ymq-1') +cloud.get_image('Ubuntu 16.04.1 LTS [2017-03-03]') diff --git a/examples/cloud/find-an-image.py b/examples/cloud/find-an-image.py new file mode 100644 index 0000000..11da214 --- /dev/null +++ b/examples/cloud/find-an-image.py @@ -0,0 +1,20 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack import cloud as openstack + +openstack.enable_logging() + +cloud = openstack.connect(cloud='fuga', region_name='cystack') +cloud.pprint( + [image for image in cloud.list_images() if 'ubuntu' in image.name.lower()] +) diff --git a/examples/cloud/http-debug-logging.py b/examples/cloud/http-debug-logging.py new file mode 100644 index 0000000..bbe9413 --- /dev/null +++ b/examples/cloud/http-debug-logging.py @@ -0,0 +1,18 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack import cloud as openstack + +openstack.enable_logging(http_debug=True) + +cloud = openstack.connect(cloud='my-vexxhost', region_name='ca-ymq-1') +cloud.get_image('Ubuntu 16.04.1 LTS [2017-03-03]') diff --git a/examples/cloud/munch-dict-object.py b/examples/cloud/munch-dict-object.py new file mode 100644 index 0000000..e7730e7 --- /dev/null +++ b/examples/cloud/munch-dict-object.py @@ -0,0 +1,20 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack import cloud as openstack + +openstack.enable_logging(debug=True) + +cloud = openstack.connect(cloud='ovh', region_name='SBG1') +image = cloud.get_image('Ubuntu 16.10') +print(image.name) +print(image['name']) diff --git a/examples/cloud/normalization.py b/examples/cloud/normalization.py new file mode 100644 index 0000000..9c719e1 --- /dev/null +++ b/examples/cloud/normalization.py @@ -0,0 +1,21 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack import cloud as openstack + +openstack.enable_logging() + +cloud = openstack.connect(cloud='fuga', region_name='cystack') +image = cloud.get_image( + 'Ubuntu 16.04 LTS - Xenial Xerus - 64-bit - Fuga Cloud Based Image' +) +cloud.pprint(image) diff --git a/examples/cloud/server-information.py b/examples/cloud/server-information.py new file mode 100644 index 0000000..616ed04 --- /dev/null +++ b/examples/cloud/server-information.py @@ -0,0 +1,38 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import openstack + +openstack.enable_logging(debug=True) + +cloud = openstack.connect(cloud='my-citycloud', region_name='Buf1') +try: + server = cloud.create_server( + 'my-server', + image='Ubuntu 16.04 Xenial Xerus', + flavor=dict(id='0dab10b5-42a2-438e-be7b-505741a7ffcc'), + wait=True, + auto_ip=True, + ) + + print("\n\nFull Server\n\n") + cloud.pprint(server) + + print("\n\nTurn Detailed Off\n\n") + cloud.pprint(cloud.get_server('my-server', detailed=False)) + + print("\n\nBare Server\n\n") + cloud.pprint(cloud.get_server('my-server', bare=True)) + +finally: + # Delete it - this is a demo + cloud.delete_server(server, wait=True, delete_ips=True) diff --git a/examples/cloud/service-conditional-overrides.py b/examples/cloud/service-conditional-overrides.py new file mode 100644 index 0000000..77d540e --- /dev/null +++ b/examples/cloud/service-conditional-overrides.py @@ -0,0 +1,18 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import openstack + +openstack.enable_logging(debug=True) + +cloud = openstack.connect(cloud='rax', region_name='DFW') +print(cloud.has_service('network')) diff --git a/examples/cloud/service-conditionals.py b/examples/cloud/service-conditionals.py new file mode 100644 index 0000000..f8ca94a --- /dev/null +++ b/examples/cloud/service-conditionals.py @@ -0,0 +1,19 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import openstack + +openstack.enable_logging(debug=True) + +cloud = openstack.connect(cloud='kiss', region_name='region1') +print(cloud.has_service('network')) +print(cloud.has_service('container-orchestration')) diff --git a/examples/cloud/strict-mode.py b/examples/cloud/strict-mode.py new file mode 100644 index 0000000..393af8d --- /dev/null +++ b/examples/cloud/strict-mode.py @@ -0,0 +1,21 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import openstack + +openstack.enable_logging() + +cloud = openstack.connect(cloud='fuga', region_name='cystack', strict=True) +image = cloud.get_image( + 'Ubuntu 16.04 LTS - Xenial Xerus - 64-bit - Fuga Cloud Based Image' +) +cloud.pprint(image) diff --git a/examples/cloud/upload-large-object.py b/examples/cloud/upload-large-object.py new file mode 100644 index 0000000..2ac3b84 --- /dev/null +++ b/examples/cloud/upload-large-object.py @@ -0,0 +1,25 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import openstack + +openstack.enable_logging(debug=True) + +cloud = openstack.connect(cloud='ovh', region_name='SBG1') +cloud.create_object( + container='my-container', + name='my-object', + filename='/home/mordred/briarcliff.sh3d', + segment_size=1000000, +) +cloud.delete_object('my-container', 'my-object') +cloud.delete_container('my-container') diff --git a/examples/cloud/upload-object.py b/examples/cloud/upload-object.py new file mode 100644 index 0000000..2ac3b84 --- /dev/null +++ b/examples/cloud/upload-object.py @@ -0,0 +1,25 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import openstack + +openstack.enable_logging(debug=True) + +cloud = openstack.connect(cloud='ovh', region_name='SBG1') +cloud.create_object( + container='my-container', + name='my-object', + filename='/home/mordred/briarcliff.sh3d', + segment_size=1000000, +) +cloud.delete_object('my-container', 'my-object') +cloud.delete_container('my-container') diff --git a/examples/cloud/user-agent.py b/examples/cloud/user-agent.py new file mode 100644 index 0000000..b616dcb --- /dev/null +++ b/examples/cloud/user-agent.py @@ -0,0 +1,20 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import openstack + +openstack.enable_logging(http_debug=True) + +cloud = openstack.connect( + cloud='datacentred', app_name='AmazingApp', app_version='1.0' +) +cloud.list_networks() diff --git a/accelerator/v2/__init__.py b/examples/clustering/__init__.py similarity index 100% rename from accelerator/v2/__init__.py rename to examples/clustering/__init__.py diff --git a/examples/clustering/action.py b/examples/clustering/action.py new file mode 100644 index 0000000..ff0f0b4 --- /dev/null +++ b/examples/clustering/action.py @@ -0,0 +1,37 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Managing policies in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + +ACTION_ID = "06ad259b-d6ab-4eb2-a0fa-fb144437eab1" + + +def list_actions(conn): + print("List Actions:") + + for actions in conn.clustering.actions(): + print(actions.to_dict()) + + for actions in conn.clustering.actions(sort='name:asc'): + print(actions.to_dict()) + + +def get_action(conn): + print("Get Action:") + + action = conn.clustering.get_action(ACTION_ID) + print(action.to_dict()) diff --git a/examples/clustering/cluster.py b/examples/clustering/cluster.py new file mode 100644 index 0000000..ddeb5e9 --- /dev/null +++ b/examples/clustering/cluster.py @@ -0,0 +1,171 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Managing policies in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + +CLUSTER_NAME = "Test_Cluster" +CLUSTER_ID = "47d808e5-ce75-4a1e-bfd2-4ed4639e8640" +PROFILE_ID = "b0e3a680-e270-4eb8-9361-e5c9503fba0a" +NODE_ID = "dd803d4a-015d-4223-b15f-db29bad3146c" +POLICY_ID = "c0e3a680-e270-4eb8-9361-e5c9503fba00" + + +def list_cluster(conn): + print("List clusters:") + + for cluster in conn.clustering.clusters(): + print(cluster.to_dict()) + + for cluster in conn.clustering.clusters(sort='name:asc'): + print(cluster.to_dict()) + + +def create_cluster(conn): + print("Create cluster:") + + spec = { + "name": CLUSTER_NAME, + "profile_id": PROFILE_ID, + "min_size": 0, + "max_size": -1, + "desired_capacity": 1, + } + + cluster = conn.clustering.create_cluster(**spec) + print(cluster.to_dict()) + + +def get_cluster(conn): + print("Get cluster:") + + cluster = conn.clustering.get_cluster(CLUSTER_ID) + print(cluster.to_dict()) + + +def find_cluster(conn): + print("Find cluster:") + + cluster = conn.clustering.find_cluster(CLUSTER_ID) + print(cluster.to_dict()) + + +def update_cluster(conn): + print("Update cluster:") + + spec = { + "name": "Test_Cluster001", + "profile_id": "c0e3a680-e270-4eb8-9361-e5c9503fba0a", + "profile_only": True, + } + cluster = conn.clustering.update_cluster(CLUSTER_ID, **spec) + print(cluster.to_dict()) + + +def delete_cluster(conn): + print("Delete cluster:") + + conn.clustering.delete_cluster(CLUSTER_ID) + print("Cluster deleted.") + + # cluster support force delete + conn.clustering.delete_cluster(CLUSTER_ID, False, True) + print("Cluster deleted") + + +def add_nodes_to_cluster(conn): + print("Add nodes to cluster:") + + node_ids = [NODE_ID] + res = conn.clustering.add_nodes_to_cluster(CLUSTER_ID, node_ids) + print(res) + + +def remove_nodes_from_cluster(conn): + print("Remove nodes from a cluster:") + + node_ids = [NODE_ID] + res = conn.clustering.remove_nodes_from_cluster(CLUSTER_ID, node_ids) + print(res) + + +def replace_nodes_in_cluster(conn): + print("Replace the nodes in a cluster with specified nodes:") + + old_node = NODE_ID + new_node = "cd803d4a-015d-4223-b15f-db29bad3146c" + spec = {old_node: new_node} + res = conn.clustering.replace_nodes_in_cluster(CLUSTER_ID, **spec) + print(res) + + +def scale_out_cluster(conn): + print("Inflate the size of a cluster:") + + res = conn.clustering.scale_out_cluster(CLUSTER_ID, 1) + print(res) + + +def scale_in_cluster(conn): + print("Shrink the size of a cluster:") + + res = conn.clustering.scale_in_cluster(CLUSTER_ID, 1) + print(res) + + +def resize_cluster(conn): + print("Resize of cluster:") + + spec = { + 'min_size': 1, + 'max_size': 6, + 'adjustment_type': 'EXACT_CAPACITY', + 'number': 2, + } + res = conn.clustering.resize_cluster(CLUSTER_ID, **spec) + print(res) + + +def attach_policy_to_cluster(conn): + print("Attach policy to a cluster:") + + spec = {'enabled': True} + res = conn.clustering.attach_policy_to_cluster( + CLUSTER_ID, POLICY_ID, **spec + ) + print(res) + + +def detach_policy_from_cluster(conn): + print("Detach a policy from a cluster:") + + res = conn.clustering.detach_policy_from_cluster(CLUSTER_ID, POLICY_ID) + print(res) + + +def check_cluster(conn): + print("Check cluster:") + + res = conn.clustering.check_cluster(CLUSTER_ID) + print(res) + + +def recover_cluster(conn): + print("Recover cluster:") + + spec = {'check': True} + res = conn.clustering.recover_cluster(CLUSTER_ID, **spec) + print(res) diff --git a/examples/clustering/event.py b/examples/clustering/event.py new file mode 100644 index 0000000..e6f1880 --- /dev/null +++ b/examples/clustering/event.py @@ -0,0 +1,37 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Managing policies in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + +EVENT_ID = "5d982071-76c5-4733-bf35-b9e38a563c99" + + +def list_events(conn): + print("List Events:") + + for events in conn.clustering.events(): + print(events.to_dict()) + + for events in conn.clustering.events(sort='name:asc'): + print(events.to_dict()) + + +def get_event(conn): + print("Get Event:") + + event = conn.clustering.get_event(EVENT_ID) + print(event.to_dict()) diff --git a/examples/clustering/node.py b/examples/clustering/node.py new file mode 100644 index 0000000..4217a20 --- /dev/null +++ b/examples/clustering/node.py @@ -0,0 +1,93 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Managing policies in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + +NODE_NAME = 'Test_Node' +NODE_ID = 'dd803d4a-015d-4223-b15f-db29bad3146c' +PROFILE_ID = "b0e3a680-e270-4eb8-9361-e5c9503fba0a" + + +def list_nodes(conn): + print("List Nodes:") + + for node in conn.clustering.nodes(): + print(node.to_dict()) + for node in conn.clustering.nodes(sort='asc:name'): + print(node.to_dict()) + + +def create_node(conn): + print("Create Node:") + + spec = { + 'name': NODE_NAME, + 'profile_id': PROFILE_ID, + } + node = conn.clustering.create_node(**spec) + print(node.to_dict()) + + +def get_node(conn): + print("Get Node:") + + node = conn.clustering.get_node(NODE_ID) + print(node.to_dict()) + + +def find_node(conn): + print("Find Node:") + + node = conn.clustering.find_node(NODE_ID) + print(node.to_dict()) + + +def update_node(conn): + print("Update Node:") + + spec = { + 'name': 'Test_Node01', + 'profile_id': 'c0e3a680-e270-4eb8-9361-e5c9503fba0b', + } + + node = conn.clustering.update_node(NODE_ID, **spec) + print(node.to_dict()) + + +def delete_node(conn): + print("Delete Node:") + + conn.clustering.delete_node(NODE_ID) + print("Node deleted.") + # node support force delete + conn.clustering.delete_node(NODE_ID, False, True) + print("Node deleted") + + +def check_node(conn): + print("Check Node:") + + node = conn.clustering.check_node(NODE_ID) + print(node) + + +def recover_node(conn): + print("Recover Node:") + + spec = {'check': True} + node = conn.clustering.recover_node(NODE_ID, **spec) + print(node) diff --git a/examples/clustering/policy.py b/examples/clustering/policy.py new file mode 100644 index 0000000..da56e63 --- /dev/null +++ b/examples/clustering/policy.py @@ -0,0 +1,75 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Managing policies in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + + +def list_policies(conn): + print("List Policies:") + + for policy in conn.clustering.policies(): + print(policy.to_dict()) + + for policy in conn.clustering.policies(sort='name:asc'): + print(policy.to_dict()) + + +def create_policy(conn): + print("Create Policy:") + attrs = { + 'name': 'dp01', + 'spec': { + 'policy': 'senlin.policy.deletion', + 'version': 1.0, + 'properties': { + 'criteria': 'oldest_first', + 'destroy_after_deletion': True, + }, + }, + } + + policy = conn.clustering.create_policy(attrs) + print(policy.to_dict()) + + +def get_policy(conn): + print("Get Policy:") + + policy = conn.clustering.get_policy('dp01') + print(policy.to_dict()) + + +def find_policy(conn): + print("Find Policy:") + + policy = conn.clustering.find_policy('dp01') + print(policy.to_dict()) + + +def update_policy(conn): + print("Update Policy:") + + policy = conn.clustering.update_policy('dp01', name='dp02') + print(policy.to_dict()) + + +def delete_policy(conn): + print("Delete Policy:") + + conn.clustering.delete_policy('dp01') + + print("Policy deleted.") diff --git a/examples/clustering/policy_type.py b/examples/clustering/policy_type.py new file mode 100644 index 0000000..a5618e4 --- /dev/null +++ b/examples/clustering/policy_type.py @@ -0,0 +1,33 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Managing policy types in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + + +def list_policy_types(conn): + print("List Policy Types:") + + for pt in conn.clustering.policy_types(): + print(pt.to_dict()) + + +def get_policy_type(conn): + print("Get Policy Type:") + + pt = conn.clustering.get_policy_type('senlin.policy.deletion-1.0') + + print(pt.to_dict()) diff --git a/examples/clustering/profile.py b/examples/clustering/profile.py new file mode 100644 index 0000000..9fc2c9f --- /dev/null +++ b/examples/clustering/profile.py @@ -0,0 +1,81 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from examples.connect import FLAVOR_NAME +from examples.connect import IMAGE_NAME +from examples.connect import NETWORK_NAME +from examples.connect import SERVER_NAME + +""" +Managing profiles in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + + +def list_profiles(conn): + print("List Profiles:") + + for profile in conn.clustering.profiles(): + print(profile.to_dict()) + + for profile in conn.clustering.profiles(sort='name:asc'): + print(profile.to_dict()) + + +def create_profile(conn): + print("Create Profile:") + + spec = { + 'profile': 'os.nova.server', + 'version': 1.0, + 'name': 'os_server', + 'properties': { + 'name': SERVER_NAME, + 'flavor': FLAVOR_NAME, + 'image': IMAGE_NAME, + 'networks': {'network': NETWORK_NAME}, + }, + } + + profile = conn.clustering.create_profile(spec) + print(profile.to_dict()) + + +def get_profile(conn): + print("Get Profile:") + + profile = conn.clustering.get_profile('os_server') + print(profile.to_dict()) + + +def find_profile(conn): + print("Find Profile:") + + profile = conn.clustering.find_profile('os_server') + print(profile.to_dict()) + + +def update_profile(conn): + print("Update Profile:") + + profile = conn.clustering.update_profile('os_server', name='old_server') + print(profile.to_dict()) + + +def delete_profile(conn): + print("Delete Profile:") + + conn.clustering.delete_profile('os_server') + + print("Profile deleted.") diff --git a/examples/clustering/profile_type.py b/examples/clustering/profile_type.py new file mode 100644 index 0000000..ab84811 --- /dev/null +++ b/examples/clustering/profile_type.py @@ -0,0 +1,33 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Managing profile types in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + + +def list_profile_types(conn): + print("List Profile Types:") + + for pt in conn.clustering.profile_types(): + print(pt.to_dict()) + + +def get_profile_type(conn): + print("Get Profile Type:") + + pt = conn.clustering.get_profile_type('os.nova.server-1.0') + + print(pt.to_dict()) diff --git a/examples/clustering/receiver.py b/examples/clustering/receiver.py new file mode 100644 index 0000000..2c9a9c4 --- /dev/null +++ b/examples/clustering/receiver.py @@ -0,0 +1,76 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Managing policies in the Cluster service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/clustering.html +""" + +FAKE_NAME = 'test_receiver' +CLUSTER_ID = "ae63a10b-4a90-452c-aef1-113a0b255ee3" + + +def list_receivers(conn): + print("List Receivers:") + + for receiver in conn.clustering.receivers(): + print(receiver.to_dict()) + + for receiver in conn.clustering.receivers(sort='name:asc'): + print(receiver.to_dict()) + + +def create_receiver(conn): + print("Create Receiver:") + + # Build the receiver attributes and create the recever. + spec = { + "action": "CLUSTER_SCALE_OUT", + "cluster_id": CLUSTER_ID, + "name": FAKE_NAME, + "params": {"count": "1"}, + "type": "webhook", + } + + receiver = conn.clustering.create_receiver(**spec) + print(receiver.to_dict()) + + +def get_receiver(conn): + print("Get Receiver:") + + receiver = conn.clustering.get_receiver(FAKE_NAME) + print(receiver.to_dict()) + + +def find_receiver(conn): + print("Find Receiver:") + + receiver = conn.clustering.find_receiver(FAKE_NAME) + print(receiver.to_dict()) + + +def update_receiver(conn): + print("Update Receiver:") + + spec = {"name": "test_receiver2", "params": {"count": "2"}} + receiver = conn.clustering.update_receiver(FAKE_NAME, **spec) + print(receiver.to_dict()) + + +def delete_receiver(conn): + print("Delete Receiver:") + + conn.clustering.delete_receiver(FAKE_NAME) + print("Receiver deleted.") diff --git a/baremetal/__init__.py b/examples/compute/__init__.py similarity index 100% rename from baremetal/__init__.py rename to examples/compute/__init__.py diff --git a/examples/compute/create.py b/examples/compute/create.py new file mode 100644 index 0000000..d4250ef --- /dev/null +++ b/examples/compute/create.py @@ -0,0 +1,78 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import errno +import os + +from examples.connect import FLAVOR_NAME +from examples.connect import IMAGE_NAME +from examples.connect import KEYPAIR_NAME +from examples.connect import NETWORK_NAME +from examples.connect import PRIVATE_KEYPAIR_FILE +from examples.connect import SERVER_NAME +from examples.connect import SSH_DIR + +""" +Create resources with the Compute service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/compute.html +""" + + +def create_keypair(conn): + keypair = conn.compute.find_keypair(KEYPAIR_NAME) + + if not keypair: + print("Create Key Pair:") + + keypair = conn.compute.create_keypair(name=KEYPAIR_NAME) + + print(keypair) + + try: + os.mkdir(SSH_DIR) + except OSError as e: + if e.errno != errno.EEXIST: + raise e + + with open(PRIVATE_KEYPAIR_FILE, 'w') as f: + f.write("%s" % keypair.private_key) + + os.chmod(PRIVATE_KEYPAIR_FILE, 0o400) + + return keypair + + +def create_server(conn): + print("Create Server:") + + image = conn.image.find_image(IMAGE_NAME) + flavor = conn.compute.find_flavor(FLAVOR_NAME) + network = conn.network.find_network(NETWORK_NAME) + keypair = create_keypair(conn) + + server = conn.compute.create_server( + name=SERVER_NAME, + image_id=image.id, + flavor_id=flavor.id, + networks=[{"uuid": network.id}], + key_name=keypair.name, + ) + + server = conn.compute.wait_for_server(server) + + print( + "ssh -i {key} root@{ip}".format( + key=PRIVATE_KEYPAIR_FILE, ip=server.access_ipv4 + ) + ) diff --git a/examples/compute/delete.py b/examples/compute/delete.py new file mode 100644 index 0000000..6fce1a3 --- /dev/null +++ b/examples/compute/delete.py @@ -0,0 +1,51 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import errno +import os + +from examples.connect import KEYPAIR_NAME +from examples.connect import PRIVATE_KEYPAIR_FILE +from examples.connect import SERVER_NAME + +""" +Delete resources with the Compute service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/compute.html +""" + + +def delete_keypair(conn): + print("Delete Key Pair:") + + keypair = conn.compute.find_keypair(KEYPAIR_NAME) + + try: + os.remove(PRIVATE_KEYPAIR_FILE) + except OSError as e: + if e.errno != errno.ENOENT: + raise e + + print(keypair) + + conn.compute.delete_keypair(keypair) + + +def delete_server(conn): + print("Delete Server:") + + server = conn.compute.find_server(SERVER_NAME) + + print(server) + + conn.compute.delete_server(server) diff --git a/examples/compute/find.py b/examples/compute/find.py new file mode 100644 index 0000000..988b4d9 --- /dev/null +++ b/examples/compute/find.py @@ -0,0 +1,50 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import examples.connect + +""" +Find a resource from the Compute service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/compute.html +""" + + +def find_image(conn): + print("Find Image:") + + image = conn.image.find_image(examples.connect.IMAGE_NAME) + + print(image) + + return image + + +def find_flavor(conn): + print("Find Flavor:") + + flavor = conn.compute.find_flavor(examples.connect.FLAVOR_NAME) + + print(flavor) + + return flavor + + +def find_keypair(conn): + print("Find Keypair:") + + keypair = conn.compute.find_keypair(examples.connect.KEYPAIR_NAME) + + print(keypair) + + return keypair diff --git a/examples/compute/list.py b/examples/compute/list.py new file mode 100644 index 0000000..db53e81 --- /dev/null +++ b/examples/compute/list.py @@ -0,0 +1,46 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Compute service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/compute.html +""" + + +def list_servers(conn): + print("List Servers:") + + for server in conn.compute.servers(): + print(server) + + +def list_images(conn): + print("List Images:") + + for image in conn.compute.images(): + print(image) + + +def list_flavors(conn): + print("List Flavors:") + + for flavor in conn.compute.flavors(): + print(flavor) + + +def list_keypairs(conn): + print("List Keypairs:") + + for keypair in conn.compute.keypairs(): + print(keypair) diff --git a/examples/connect.py b/examples/connect.py new file mode 100644 index 0000000..50de0fd --- /dev/null +++ b/examples/connect.py @@ -0,0 +1,97 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Connect to an OpenStack cloud. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/connect_from_config.html +""" + +import argparse +import os +import sys + +import openstack +from openstack.config import loader + +openstack.enable_logging(True, stream=sys.stdout) + +#: Defines the OpenStack Config cloud key in your config file, +#: typically in $HOME/.config/openstack/clouds.yaml. That configuration +#: will determine where the examples will be run and what resource defaults +#: will be used to run the examples. +TEST_CLOUD = os.getenv('OS_TEST_CLOUD', 'devstack-admin') +EXAMPLE_CONFIG_KEY = os.getenv('OPENSTACKSDK_EXAMPLE_CONFIG_KEY', 'example') +config = loader.OpenStackConfig() +cloud = openstack.connect(cloud=TEST_CLOUD) + + +class Opts: + def __init__(self, cloud_name='devstack-admin', debug=False): + self.cloud = cloud_name + self.debug = debug + # Use identity v3 API for examples. + self.identity_api_version = '3' + + +def _get_resource_value(resource_key, default): + return config.get_extra_config(EXAMPLE_CONFIG_KEY).get( + resource_key, default + ) + + +SERVER_NAME = 'openstacksdk-example' +IMAGE_NAME = _get_resource_value('image_name', 'cirros-0.4.0-x86_64-disk') +FLAVOR_NAME = _get_resource_value('flavor_name', 'm1.small') +NETWORK_NAME = _get_resource_value('network_name', 'private') +KEYPAIR_NAME = _get_resource_value('keypair_name', 'openstacksdk-example') +SSH_DIR = _get_resource_value( + 'ssh_dir', '{home}/.ssh'.format(home=os.path.expanduser("~")) +) +PRIVATE_KEYPAIR_FILE = _get_resource_value( + 'private_keypair_file', + '{ssh_dir}/id_rsa.{key}'.format(ssh_dir=SSH_DIR, key=KEYPAIR_NAME), +) + +EXAMPLE_IMAGE_NAME = 'openstacksdk-example-public-image' + + +def create_connection_from_config(): + return openstack.connect(cloud=TEST_CLOUD) + + +def create_connection_from_args(): + parser = argparse.ArgumentParser() + return openstack.connect(options=parser) + + +def create_connection( + auth_url, + region, + project_name, + username, + password, + user_domain, + project_domain, +): + return openstack.connect( + auth_url=auth_url, + project_name=project_name, + username=username, + password=password, + region_name=region, + user_domain_name=user_domain, + project_domain_name=project_domain, + app_name='examples', + app_version='1.0', + ) diff --git a/baremetal/v1/__init__.py b/examples/dns/__init__.py similarity index 100% rename from baremetal/v1/__init__.py rename to examples/dns/__init__.py diff --git a/examples/dns/list.py b/examples/dns/list.py new file mode 100644 index 0000000..50a5e81 --- /dev/null +++ b/examples/dns/list.py @@ -0,0 +1,25 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the DNS service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/dns.html +""" + + +def list_zones(conn): + print("List Zones:") + + for zone in conn.dns.zones(): + print(zone) diff --git a/baremetal_introspection/__init__.py b/examples/identity/__init__.py similarity index 100% rename from baremetal_introspection/__init__.py rename to examples/identity/__init__.py diff --git a/examples/identity/list.py b/examples/identity/list.py new file mode 100644 index 0000000..069480b --- /dev/null +++ b/examples/identity/list.py @@ -0,0 +1,109 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Identity service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/identity.html +""" + + +def list_users(conn): + print("List Users:") + + for user in conn.identity.users(): + print(user) + + +def list_credentials(conn): + print("List Credentials:") + + for credential in conn.identity.credentials(): + print(credential) + + +def list_projects(conn): + print("List Projects:") + + for project in conn.identity.projects(): + print(project) + + +def list_domains(conn): + print("List Domains:") + + for domain in conn.identity.domains(): + print(domain) + + +def list_groups(conn): + print("List Groups:") + + for group in conn.identity.groups(): + print(group) + + +def list_services(conn): + print("List Services:") + + for service in conn.identity.services(): + print(service) + + +def list_endpoints(conn): + print("List Endpoints:") + + for endpoint in conn.identity.endpoints(): + print(endpoint) + + +def list_regions(conn): + print("List Regions:") + + for region in conn.identity.regions(): + print(region) + + +def list_roles(conn): + print("List Roles:") + + for role in conn.identity.roles(): + print(role) + + +def list_role_domain_group_assignments(conn): + print("List Roles assignments for a group on domain:") + + for role in conn.identity.role_domain_group_assignments(): + print(role) + + +def list_role_domain_user_assignments(conn): + print("List Roles assignments for a user on domain:") + + for role in conn.identity.role_project_user_assignments(): + print(role) + + +def list_role_project_group_assignments(conn): + print("List Roles assignments for a group on project:") + + for role in conn.identity.role_project_group_assignments(): + print(role) + + +def list_role_project_user_assignments(conn): + print("List Roles assignments for a user on project:") + + for role in conn.identity.role_project_user_assignments(): + print(role) diff --git a/baremetal_introspection/v1/__init__.py b/examples/image/__init__.py similarity index 100% rename from baremetal_introspection/v1/__init__.py rename to examples/image/__init__.py diff --git a/examples/image/create.py b/examples/image/create.py new file mode 100644 index 0000000..a80fc33 --- /dev/null +++ b/examples/image/create.py @@ -0,0 +1,37 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from examples.connect import EXAMPLE_IMAGE_NAME + +""" +Create resources with the Image service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/image.html +""" + + +def upload_image(conn): + print("Upload Image:") + + # Load fake image data for the example. + data = 'This is fake image data.' + + # Build the image attributes and upload the image. + image_attrs = { + 'name': EXAMPLE_IMAGE_NAME, + 'data': data, + 'disk_format': 'raw', + 'container_format': 'bare', + 'visibility': 'public', + } + conn.image.upload_image(**image_attrs) diff --git a/examples/image/delete.py b/examples/image/delete.py new file mode 100644 index 0000000..b3eb290 --- /dev/null +++ b/examples/image/delete.py @@ -0,0 +1,28 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from examples.connect import EXAMPLE_IMAGE_NAME + +""" +Delete resources with the Image service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/image.html +""" + + +def delete_image(conn): + print("Delete Image:") + + example_image = conn.image.find_image(EXAMPLE_IMAGE_NAME) + + conn.image.delete_image(example_image, ignore_missing=False) diff --git a/examples/image/download.py b/examples/image/download.py new file mode 100644 index 0000000..791a652 --- /dev/null +++ b/examples/image/download.py @@ -0,0 +1,63 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import hashlib + +""" +Download an image with the Image service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/image.html +""" + + +def download_image_stream(conn): + print("Download Image via streaming:") + + # Find the image you would like to download. + image = conn.image.find_image("myimage") + + # As the actual download now takes place outside of the library + # and in your own code, you are now responsible for checking + # the integrity of the data. Create an MD5 has to be computed + # after all of the data has been consumed. + md5 = hashlib.md5() + + with open("myimage.qcow2", "wb") as local_image: + response = conn.image.download_image(image, stream=True) + + # Read only 1 MiB of memory at a time until + # all of the image data has been consumed. + for chunk in response.iter_content(chunk_size=1024 * 1024): + # With each chunk, add it to the hash to be computed. + md5.update(chunk) + + local_image.write(chunk) + + # Now that you've consumed all of the data the response gave you, + # ensure that the checksums of what the server offered and + # what you downloaded are the same. + if response.headers["Content-MD5"] != md5.hexdigest(): + raise Exception("Checksum mismatch in downloaded content") + + +def download_image(conn): + print("Download Image:") + + # Find the image you would like to download. + image = conn.image.find_image("myimage") + + with open("myimage.qcow2", "w") as local_image: + response = conn.image.download_image(image) + + # Response will contain the entire contents of the Image. + local_image.write(response) diff --git a/examples/image/import.py b/examples/image/import.py new file mode 100644 index 0000000..44be082 --- /dev/null +++ b/examples/image/import.py @@ -0,0 +1,40 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from examples.connect import EXAMPLE_IMAGE_NAME + +""" +Create resources with the Image service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/image.html +""" + + +def import_image(conn): + print("Import Image:") + + # Url where glance can download the image + uri = ( + 'https://download.cirros-cloud.net/0.4.0/' + 'cirros-0.4.0-x86_64-disk.img' + ) + + # Build the image attributes and import the image. + image_attrs = { + 'name': EXAMPLE_IMAGE_NAME, + 'disk_format': 'qcow2', + 'container_format': 'bare', + 'visibility': 'public', + } + image = conn.image.create_image(**image_attrs) + conn.image.import_image(image, method="web-download", uri=uri) diff --git a/examples/image/list.py b/examples/image/list.py new file mode 100644 index 0000000..12eecba --- /dev/null +++ b/examples/image/list.py @@ -0,0 +1,25 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Image service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/image.html +""" + + +def list_images(conn): + print("List Images:") + + for image in conn.image.images(): + print(image) diff --git a/block_storage/__init__.py b/examples/key_manager/__init__.py similarity index 100% rename from block_storage/__init__.py rename to examples/key_manager/__init__.py diff --git a/examples/key_manager/create.py b/examples/key_manager/create.py new file mode 100644 index 0000000..b01387b --- /dev/null +++ b/examples/key_manager/create.py @@ -0,0 +1,27 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Key Manager service. +""" + + +def create_secret(conn): + print("Create a secret:") + + conn.key_manager.create_secret( + name="My public key", + secret_type="public", + expiration="2020-02-28T23:59:59", + payload="ssh rsa...", + payload_content_type="text/plain", + ) diff --git a/examples/key_manager/get.py b/examples/key_manager/get.py new file mode 100644 index 0000000..0025dd6 --- /dev/null +++ b/examples/key_manager/get.py @@ -0,0 +1,26 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Key Manager service. +""" + +s = None + + +def get_secret_payload(conn): + print("Get a secret's payload:") + + # Assuming you have an object `s` which you perhaps received from + # a conn.key_manager.secrets() call... + secret = conn.key_manager.get_secret(s.secret_id) + print(secret.payload) diff --git a/examples/key_manager/list.py b/examples/key_manager/list.py new file mode 100644 index 0000000..17f989e --- /dev/null +++ b/examples/key_manager/list.py @@ -0,0 +1,31 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Key Manager service. +""" + + +def list_secrets(conn): + print("List Secrets:") + + for secret in conn.key_manager.secrets(): + print(secret) + + +def list_secrets_query(conn): + print("List Secrets:") + + for secret in conn.key_manager.secrets( + secret_type="symmetric", expiration="gte:2020-01-01T00:00:00" + ): + print(secret) diff --git a/block_storage/v2/__init__.py b/examples/network/__init__.py similarity index 100% rename from block_storage/v2/__init__.py rename to examples/network/__init__.py diff --git a/examples/network/create.py b/examples/network/create.py new file mode 100644 index 0000000..bb25a81 --- /dev/null +++ b/examples/network/create.py @@ -0,0 +1,38 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Create resources with the Network service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/network.html +""" + + +def create_network(conn): + print("Create Network:") + + example_network = conn.network.create_network( + name='openstacksdk-example-project-network' + ) + + print(example_network) + + example_subnet = conn.network.create_subnet( + name='openstacksdk-example-project-subnet', + network_id=example_network.id, + ip_version='4', + cidr='10.0.2.0/24', + gateway_ip='10.0.2.1', + ) + + print(example_subnet) diff --git a/examples/network/delete.py b/examples/network/delete.py new file mode 100644 index 0000000..b43413f --- /dev/null +++ b/examples/network/delete.py @@ -0,0 +1,30 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Delete resources with the Network service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/network.html +""" + + +def delete_network(conn): + print("Delete Network:") + + example_network = conn.network.find_network( + 'openstacksdk-example-project-network' + ) + + for example_subnet in example_network.subnet_ids: + conn.network.delete_subnet(example_subnet, ignore_missing=False) + conn.network.delete_network(example_network, ignore_missing=False) diff --git a/examples/network/find.py b/examples/network/find.py new file mode 100644 index 0000000..95d3a11 --- /dev/null +++ b/examples/network/find.py @@ -0,0 +1,30 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import examples.connect + +""" +Find a resource from the Network service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/network.html +""" + + +def find_network(conn): + print("Find Network:") + + network = conn.network.find_network(examples.connect.NETWORK_NAME) + + print(network) + + return network diff --git a/examples/network/list.py b/examples/network/list.py new file mode 100644 index 0000000..2cedba5 --- /dev/null +++ b/examples/network/list.py @@ -0,0 +1,60 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Network service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/network.html +""" + + +def list_networks(conn): + print("List Networks:") + + for network in conn.network.networks(): + print(network) + + +def list_subnets(conn): + print("List Subnets:") + + for subnet in conn.network.subnets(): + print(subnet) + + +def list_ports(conn): + print("List Ports:") + + for port in conn.network.ports(): + print(port) + + +def list_security_groups(conn): + print("List Security Groups:") + + for port in conn.network.security_groups(): + print(port) + + +def list_routers(conn): + print("List Routers:") + + for router in conn.network.routers(): + print(router) + + +def list_network_agents(conn): + print("List Network Agents:") + + for agent in conn.network.agents(): + print(agent) diff --git a/examples/network/security_group_rules.py b/examples/network/security_group_rules.py new file mode 100644 index 0000000..b9eb8b8 --- /dev/null +++ b/examples/network/security_group_rules.py @@ -0,0 +1,62 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Create resources with the Network service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/network.html +""" + + +def open_port(conn): + print("Open a port:") + + example_sec_group = conn.network.create_security_group( + name='openstacksdk-example-security-group' + ) + + print(example_sec_group) + + example_rule = conn.network.create_security_group_rule( + security_group_id=example_sec_group.id, + direction='ingress', + remote_ip_prefix='0.0.0.0/0', + protocol='tcp', + port_range_max='443', + port_range_min='443', + ethertype='IPv4', + ) + + print(example_rule) + + +def allow_ping(conn): + print("Allow pings:") + + example_sec_group = conn.network.create_security_group( + name='openstacksdk-example-security-group2' + ) + + print(example_sec_group) + + example_rule = conn.network.create_security_group_rule( + security_group_id=example_sec_group.id, + direction='ingress', + remote_ip_prefix='0.0.0.0/0', + protocol='icmp', + port_range_max=None, + port_range_min=None, + ethertype='IPv4', + ) + + print(example_rule) diff --git a/block_storage/v3/__init__.py b/examples/shared_file_system/__init__.py similarity index 100% rename from block_storage/v3/__init__.py rename to examples/shared_file_system/__init__.py diff --git a/examples/shared_file_system/availability_zones.py b/examples/shared_file_system/availability_zones.py new file mode 100644 index 0000000..73c0e3f --- /dev/null +++ b/examples/shared_file_system/availability_zones.py @@ -0,0 +1,24 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Shared File System service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/shared_file_system.html +""" + + +def list_availability_zones(conn): + print("List Shared File System Availability Zones:") + for az in conn.share.availability_zones(): + print(az) diff --git a/examples/shared_file_system/share_group_snapshots.py b/examples/shared_file_system/share_group_snapshots.py new file mode 100644 index 0000000..33ea2e7 --- /dev/null +++ b/examples/shared_file_system/share_group_snapshots.py @@ -0,0 +1,66 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Shared File System service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/shared_file_system.html +""" + + +def list_share_group_snapshots(conn, **query): + print("List all share group snapshots:") + share_group_snapshots = conn.share.share_group_snapshots(**query) + for share_group_snapshot in share_group_snapshots: + print(share_group_snapshot) + + +def get_share_group_snapshot(conn, group_snapshot_id): + print("Show share group snapshot with given Id:") + share_group_snapshot = conn.share.get_share_group_snapshots( + group_snapshot_id + ) + print(share_group_snapshot) + + +def share_group_snapshot_members(conn, group_snapshot_id): + print("Show share group snapshot members with given Id:") + members = conn.share.share_group_snapshot_members(group_snapshot_id) + for member in members: + print(member) + + +def create_share_group_snapshot(conn, share_group_id, **attrs): + print("Creating a share group snapshot from given attributes:") + share_group_snapshot = conn.share.create_share_group_snapshot( + share_group_id, **attrs + ) + print(share_group_snapshot) + + +def reset_share_group_snapshot_status(conn, group_snapshot_id, status): + print("Reseting the share group snapshot status:") + conn.share.reset_share_group_snapshot_status(group_snapshot_id, status) + + +def update_share_group_snapshot(conn, group_snapshot_id, **attrs): + print("Updating a share group snapshot with given Id:") + share_group_snapshot = conn.share.update_share_group_snapshot( + group_snapshot_id, **attrs + ) + print(share_group_snapshot) + + +def delete_share_group_snapshot(conn, group_snapshot_id): + print("Deleting a share group snapshot with given Id:") + conn.share.delete_share_group_snapshot(group_snapshot_id) diff --git a/examples/shared_file_system/share_instances.py b/examples/shared_file_system/share_instances.py new file mode 100644 index 0000000..972d2b6 --- /dev/null +++ b/examples/shared_file_system/share_instances.py @@ -0,0 +1,43 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +List resources from the Shared File System service. + +For a full guide see +https://docs.openstack.org/openstacksdk/latest/user/guides/shared_file_system.html +""" + + +def share_instances(conn, **query): + print('List all share instances:') + for si in conn.share.share_instances(**query): + print(si) + + +def get_share_instance(conn, share_instance_id): + print('Get share instance with given Id:') + share_instance = conn.share.get_share_instance(share_instance_id) + print(share_instance) + + +def reset_share_instance_status(conn, share_instance_id, status): + print( + 'Reset the status of the share instance with the given ' + 'share_instance_id to the given status' + ) + conn.share.reset_share_instance_status(share_instance_id, status) + + +def delete_share_instance(conn, share_instance_id): + print('Force-delete the share instance with the given share_instance_id') + conn.share.delete_share_instance(share_instance_id) diff --git a/examples/shared_file_system/share_metadata.py b/examples/shared_file_system/share_metadata.py new file mode 100644 index 0000000..b1ca00c --- /dev/null +++ b/examples/shared_file_system/share_metadata.py @@ -0,0 +1,61 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +def list_share_metadata(conn, share_id): + # Method returns the entire share with the metadata inside it. + returned_share = conn.get_share_metadata(share_id) + + # Access metadata of share + metadata = returned_share['metadata'] + + print("List All Share Metadata:") + for meta_key in metadata: + print(f"{meta_key}={metadata[meta_key]}") + + +def get_share_metadata_item(conn, share_id, key): + # Method returns the entire share with the metadata inside it. + returned_share = conn.get_share_metadata_item(share_id, key) + + # Access metadata of share + metadata = returned_share['metadata'] + + print("Get share metadata item given item key and share id:") + print(metadata[key]) + + +def create_share_metadata(conn, share_id, metadata): + # Method returns the entire share with the metadata inside it. + created_share = conn.create_share_metadata(share_id, metadata) + + # Access metadata of share + metadata = created_share['metadata'] + + print("Metadata created for given share:") + print(metadata) + + +def update_share_metadata(conn, share_id, metadata): + # Method returns the entire share with the metadata inside it. + updated_share = conn.update_share_metadata(share_id, metadata, True) + + # Access metadata of share + metadata = updated_share['metadata'] + + print("Updated metadata for given share:") + print(metadata) + + +def delete_share_metadata(conn, share_id, keys): + # Method doesn't return anything. + conn.delete_share_metadata(share_id, keys) diff --git a/examples/shared_file_system/shares.py b/examples/shared_file_system/shares.py new file mode 100644 index 0000000..5f274ed --- /dev/null +++ b/examples/shared_file_system/shares.py @@ -0,0 +1,56 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +def resize_share(conn, share_id, share_size): + # Be explicit about not wanting to use force if the share + # will be extended. + use_force = False + print('Resize the share to the given size:') + conn.share.resize_share(share_id, share_size, use_force) + + +def resize_shares_without_shrink(conn, min_size): + # Sometimes, extending shares without shrinking + # them (effectively setting a min size) is desirable. + + # Get list of shares from the connection. + shares = conn.share.shares() + + # Loop over the shares: + for share in shares: + # Extend shares smaller than min_size to min_size, + # but don't shrink shares larger than min_size. + conn.share.resize_share(share.id, min_size, no_shrink=True) + + +def manage_share(conn, protocol, export_path, service_host, **params): + # Manage a share with the given protocol, export path, service host, and + # optional additional parameters + managed_share = conn.share.manage_share( + protocol, export_path, service_host, **params + ) + + # Can get the ID of the share, which is now being managed with Manila + managed_share_id = managed_share.id + print("The ID of the share which was managed: %s", managed_share_id) + + +def unmanage_share(conn, share_id): + # Unmanage the share with the given share ID + conn.share.unmanage_share(share_id) + + try: + # Getting the share will raise an exception as it has been unmanaged + conn.share.get_share(share_id) + except Exception: + pass diff --git a/extras/delete-network.sh b/extras/delete-network.sh new file mode 100644 index 0000000..1d02959 --- /dev/null +++ b/extras/delete-network.sh @@ -0,0 +1,14 @@ +neutron router-gateway-clear router1 +neutron router-interface-delete router1 +for subnet in private-subnet ipv6-private-subnet ; do + neutron router-interface-delete router1 $subnet + subnet_id=$(neutron subnet-show $subnet -f value -c id) + neutron port-list | grep $subnet_id | awk '{print $2}' | xargs -n1 neutron port-delete + neutron subnet-delete $subnet +done +neutron router-delete router1 +neutron net-delete private + +# Make the public network directly consumable +neutron subnet-update public-subnet --enable-dhcp=True +neutron net-update public --shared=True diff --git a/extras/run-ansible-tests.sh b/extras/run-ansible-tests.sh new file mode 100755 index 0000000..14ed166 --- /dev/null +++ b/extras/run-ansible-tests.sh @@ -0,0 +1,100 @@ +#!/bin/bash +############################################################################# +# run-ansible-tests.sh +# +# Script used to setup a tox environment for running Ansible. This is meant +# to be called by tox (via tox.ini). To run the Ansible tests, use: +# +# tox -e ansible [TAG ...] +# or +# tox -e ansible -- -c cloudX [TAG ...] +# or to use the development version of Ansible: +# tox -e ansible -- -d -c cloudX [TAG ...] +# +# USAGE: +# run-ansible-tests.sh -e ENVDIR [-d] [-c CLOUD] [TAG ...] +# +# PARAMETERS: +# -d Use Ansible source repo development branch. +# -e ENVDIR Directory of the tox environment to use for testing. +# -c CLOUD Name of the cloud to use for testing. +# Defaults to "devstack-admin". +# [TAG ...] Optional list of space-separated tags to control which +# modules are tested. +# +# EXAMPLES: +# # Run all Ansible tests +# run-ansible-tests.sh -e ansible +# +# # Run auth, keypair, and network tests against cloudX +# run-ansible-tests.sh -e ansible -c cloudX auth keypair network +############################################################################# + + +CLOUD="devstack-admin" +ENVDIR= +USE_DEV=0 + +while getopts "c:de:" opt +do + case $opt in + d) USE_DEV=1 ;; + c) CLOUD=${OPTARG} ;; + e) ENVDIR=${OPTARG} ;; + ?) echo "Invalid option: -${OPTARG}" + exit 1;; + esac +done + +if [ -z ${ENVDIR} ] +then + echo "Option -e is required" + exit 1 +fi + +shift $((OPTIND-1)) +TAGS=$( echo "$*" | tr ' ' , ) + +# We need to source the current tox environment so that Ansible will +# be setup for the correct python environment. +source $ENVDIR/bin/activate + +if [ ${USE_DEV} -eq 1 ] +then + if [ -d ${ENVDIR}/ansible ] + then + echo "Using existing Ansible source repo" + else + echo "Installing Ansible source repo at $ENVDIR" + git clone --recursive https://github.com/ansible/ansible.git ${ENVDIR}/ansible + fi + source $ENVDIR/ansible/hacking/env-setup +fi + +# Run the shade Ansible tests +tag_opt="" +if [ ! -z ${TAGS} ] +then + tag_opt="--tags ${TAGS}" +fi + +# Loop through all ANSIBLE_VAR_ environment variables to allow passing the further +for var in $(env | grep -e '^ANSIBLE_VAR_'); do + VAR_NAME=${var%%=*} # split variable name from value + ANSIBLE_VAR_NAME=${VAR_NAME#ANSIBLE_VAR_} # cut ANSIBLE_VAR_ prefix from variable name + ANSIBLE_VAR_NAME=${ANSIBLE_VAR_NAME,,} # lowercase ansible variable + ANSIBLE_VAR_VALUE=${!VAR_NAME} # Get the variable value + ANSIBLE_VARS+="${ANSIBLE_VAR_NAME}=${ANSIBLE_VAR_VALUE} " # concat variables +done + +# Until we have a module that lets us determine the image we want from +# within a playbook, we have to find the image here and pass it in. +# We use the openstack client instead of nova client since it can use clouds.yaml. +IMAGE=`openstack --os-cloud=${CLOUD} image list -f value -c Name | grep cirros | grep -v -e ramdisk -e kernel` +if [ $? -ne 0 ] +then + echo "Failed to find Cirros image" + exit 1 +fi + +ansible-playbook -vvv ./openstack/tests/ansible/run.yml -e "cloud=${CLOUD} image=${IMAGE} ${ANSIBLE_VARS}" ${tag_opt} diff --git a/include-acceptance-regular-user.txt b/include-acceptance-regular-user.txt new file mode 100644 index 0000000..62773e7 --- /dev/null +++ b/include-acceptance-regular-user.txt @@ -0,0 +1,12 @@ +# This file contains list of tests that can work with regular user privileges +# Until all tests are modified to properly identify whether they are able to +# run or must skip the ones that are known to work are listed here. +### Block Storage +openstack.tests.functional.block_storage.v3.test_volume +# Do not enable test_backup for now, since it is not capable to determine +# backup capabilities of the cloud +# openstack.tests.functional.block_storage.v3.test_backup +### Cloud +openstack.tests.functional.cloud +### Network +openstack.tests.functional.network diff --git a/README.md b/openstack/README.md similarity index 100% rename from README.md rename to openstack/README.md diff --git a/__init__.py b/openstack/__init__.py similarity index 100% rename from __init__.py rename to openstack/__init__.py diff --git a/__main__.py b/openstack/__main__.py similarity index 100% rename from __main__.py rename to openstack/__main__.py diff --git a/__pycache__/__init__.cpython-310.pyc b/openstack/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from __pycache__/__init__.cpython-310.pyc rename to openstack/__pycache__/__init__.cpython-310.pyc diff --git a/__pycache__/__main__.cpython-310.pyc b/openstack/__pycache__/__main__.cpython-310.pyc similarity index 100% rename from __pycache__/__main__.cpython-310.pyc rename to openstack/__pycache__/__main__.cpython-310.pyc diff --git a/__pycache__/_hacking.cpython-310.pyc b/openstack/__pycache__/_hacking.cpython-310.pyc similarity index 100% rename from __pycache__/_hacking.cpython-310.pyc rename to openstack/__pycache__/_hacking.cpython-310.pyc diff --git a/__pycache__/_log.cpython-310.pyc b/openstack/__pycache__/_log.cpython-310.pyc similarity index 100% rename from __pycache__/_log.cpython-310.pyc rename to openstack/__pycache__/_log.cpython-310.pyc diff --git a/__pycache__/_services_mixin.cpython-310.pyc b/openstack/__pycache__/_services_mixin.cpython-310.pyc similarity index 100% rename from __pycache__/_services_mixin.cpython-310.pyc rename to openstack/__pycache__/_services_mixin.cpython-310.pyc diff --git a/__pycache__/connection.cpython-310.pyc b/openstack/__pycache__/connection.cpython-310.pyc similarity index 100% rename from __pycache__/connection.cpython-310.pyc rename to openstack/__pycache__/connection.cpython-310.pyc diff --git a/__pycache__/exceptions.cpython-310.pyc b/openstack/__pycache__/exceptions.cpython-310.pyc similarity index 100% rename from __pycache__/exceptions.cpython-310.pyc rename to openstack/__pycache__/exceptions.cpython-310.pyc diff --git a/__pycache__/format.cpython-310.pyc b/openstack/__pycache__/format.cpython-310.pyc similarity index 100% rename from __pycache__/format.cpython-310.pyc rename to openstack/__pycache__/format.cpython-310.pyc diff --git a/__pycache__/proxy.cpython-310.pyc b/openstack/__pycache__/proxy.cpython-310.pyc similarity index 100% rename from __pycache__/proxy.cpython-310.pyc rename to openstack/__pycache__/proxy.cpython-310.pyc diff --git a/__pycache__/resource.cpython-310.pyc b/openstack/__pycache__/resource.cpython-310.pyc similarity index 100% rename from __pycache__/resource.cpython-310.pyc rename to openstack/__pycache__/resource.cpython-310.pyc diff --git a/__pycache__/service_description.cpython-310.pyc b/openstack/__pycache__/service_description.cpython-310.pyc similarity index 100% rename from __pycache__/service_description.cpython-310.pyc rename to openstack/__pycache__/service_description.cpython-310.pyc diff --git a/__pycache__/utils.cpython-310.pyc b/openstack/__pycache__/utils.cpython-310.pyc similarity index 100% rename from __pycache__/utils.cpython-310.pyc rename to openstack/__pycache__/utils.cpython-310.pyc diff --git a/__pycache__/version.cpython-310.pyc b/openstack/__pycache__/version.cpython-310.pyc similarity index 100% rename from __pycache__/version.cpython-310.pyc rename to openstack/__pycache__/version.cpython-310.pyc diff --git a/__pycache__/warnings.cpython-310.pyc b/openstack/__pycache__/warnings.cpython-310.pyc similarity index 100% rename from __pycache__/warnings.cpython-310.pyc rename to openstack/__pycache__/warnings.cpython-310.pyc diff --git a/_hacking.py b/openstack/_hacking.py similarity index 100% rename from _hacking.py rename to openstack/_hacking.py diff --git a/_log.py b/openstack/_log.py similarity index 100% rename from _log.py rename to openstack/_log.py diff --git a/_services_mixin.py b/openstack/_services_mixin.py similarity index 100% rename from _services_mixin.py rename to openstack/_services_mixin.py diff --git a/cloud/cmd/__init__.py b/openstack/accelerator/__init__.py similarity index 100% rename from cloud/cmd/__init__.py rename to openstack/accelerator/__init__.py diff --git a/accelerator/__pycache__/__init__.cpython-310.pyc b/openstack/accelerator/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from accelerator/__pycache__/__init__.cpython-310.pyc rename to openstack/accelerator/__pycache__/__init__.cpython-310.pyc diff --git a/accelerator/__pycache__/accelerator_service.cpython-310.pyc b/openstack/accelerator/__pycache__/accelerator_service.cpython-310.pyc similarity index 100% rename from accelerator/__pycache__/accelerator_service.cpython-310.pyc rename to openstack/accelerator/__pycache__/accelerator_service.cpython-310.pyc diff --git a/accelerator/__pycache__/version.cpython-310.pyc b/openstack/accelerator/__pycache__/version.cpython-310.pyc similarity index 100% rename from accelerator/__pycache__/version.cpython-310.pyc rename to openstack/accelerator/__pycache__/version.cpython-310.pyc diff --git a/accelerator/accelerator_service.py b/openstack/accelerator/accelerator_service.py similarity index 100% rename from accelerator/accelerator_service.py rename to openstack/accelerator/accelerator_service.py diff --git a/cloud/tests/__init__.py b/openstack/accelerator/v2/__init__.py similarity index 100% rename from cloud/tests/__init__.py rename to openstack/accelerator/v2/__init__.py diff --git a/accelerator/v2/__pycache__/__init__.cpython-310.pyc b/openstack/accelerator/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from accelerator/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/accelerator/v2/__pycache__/__init__.cpython-310.pyc diff --git a/accelerator/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/accelerator/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from accelerator/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/accelerator/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/accelerator/v2/__pycache__/accelerator_request.cpython-310.pyc b/openstack/accelerator/v2/__pycache__/accelerator_request.cpython-310.pyc similarity index 100% rename from accelerator/v2/__pycache__/accelerator_request.cpython-310.pyc rename to openstack/accelerator/v2/__pycache__/accelerator_request.cpython-310.pyc diff --git a/accelerator/v2/__pycache__/deployable.cpython-310.pyc b/openstack/accelerator/v2/__pycache__/deployable.cpython-310.pyc similarity index 100% rename from accelerator/v2/__pycache__/deployable.cpython-310.pyc rename to openstack/accelerator/v2/__pycache__/deployable.cpython-310.pyc diff --git a/accelerator/v2/__pycache__/device.cpython-310.pyc b/openstack/accelerator/v2/__pycache__/device.cpython-310.pyc similarity index 100% rename from accelerator/v2/__pycache__/device.cpython-310.pyc rename to openstack/accelerator/v2/__pycache__/device.cpython-310.pyc diff --git a/accelerator/v2/__pycache__/device_profile.cpython-310.pyc b/openstack/accelerator/v2/__pycache__/device_profile.cpython-310.pyc similarity index 100% rename from accelerator/v2/__pycache__/device_profile.cpython-310.pyc rename to openstack/accelerator/v2/__pycache__/device_profile.cpython-310.pyc diff --git a/accelerator/v2/_proxy.py b/openstack/accelerator/v2/_proxy.py similarity index 100% rename from accelerator/v2/_proxy.py rename to openstack/accelerator/v2/_proxy.py diff --git a/accelerator/v2/accelerator_request.py b/openstack/accelerator/v2/accelerator_request.py similarity index 100% rename from accelerator/v2/accelerator_request.py rename to openstack/accelerator/v2/accelerator_request.py diff --git a/accelerator/v2/deployable.py b/openstack/accelerator/v2/deployable.py similarity index 100% rename from accelerator/v2/deployable.py rename to openstack/accelerator/v2/deployable.py diff --git a/accelerator/v2/device.py b/openstack/accelerator/v2/device.py similarity index 100% rename from accelerator/v2/device.py rename to openstack/accelerator/v2/device.py diff --git a/accelerator/v2/device_profile.py b/openstack/accelerator/v2/device_profile.py similarity index 100% rename from accelerator/v2/device_profile.py rename to openstack/accelerator/v2/device_profile.py diff --git a/accelerator/version.py b/openstack/accelerator/version.py similarity index 100% rename from accelerator/version.py rename to openstack/accelerator/version.py diff --git a/clustering/__init__.py b/openstack/baremetal/__init__.py similarity index 100% rename from clustering/__init__.py rename to openstack/baremetal/__init__.py diff --git a/baremetal/__pycache__/__init__.cpython-310.pyc b/openstack/baremetal/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from baremetal/__pycache__/__init__.cpython-310.pyc rename to openstack/baremetal/__pycache__/__init__.cpython-310.pyc diff --git a/baremetal/__pycache__/baremetal_service.cpython-310.pyc b/openstack/baremetal/__pycache__/baremetal_service.cpython-310.pyc similarity index 100% rename from baremetal/__pycache__/baremetal_service.cpython-310.pyc rename to openstack/baremetal/__pycache__/baremetal_service.cpython-310.pyc diff --git a/baremetal/__pycache__/configdrive.cpython-310.pyc b/openstack/baremetal/__pycache__/configdrive.cpython-310.pyc similarity index 100% rename from baremetal/__pycache__/configdrive.cpython-310.pyc rename to openstack/baremetal/__pycache__/configdrive.cpython-310.pyc diff --git a/baremetal/__pycache__/version.cpython-310.pyc b/openstack/baremetal/__pycache__/version.cpython-310.pyc similarity index 100% rename from baremetal/__pycache__/version.cpython-310.pyc rename to openstack/baremetal/__pycache__/version.cpython-310.pyc diff --git a/baremetal/baremetal_service.py b/openstack/baremetal/baremetal_service.py similarity index 100% rename from baremetal/baremetal_service.py rename to openstack/baremetal/baremetal_service.py diff --git a/baremetal/configdrive.py b/openstack/baremetal/configdrive.py similarity index 100% rename from baremetal/configdrive.py rename to openstack/baremetal/configdrive.py diff --git a/clustering/v1/__init__.py b/openstack/baremetal/v1/__init__.py similarity index 100% rename from clustering/v1/__init__.py rename to openstack/baremetal/v1/__init__.py diff --git a/baremetal/v1/__pycache__/__init__.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/__init__.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/_common.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/_common.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/_common.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/_common.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/allocation.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/allocation.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/allocation.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/allocation.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/chassis.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/chassis.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/chassis.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/chassis.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/conductor.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/conductor.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/conductor.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/conductor.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/deploy_templates.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/deploy_templates.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/deploy_templates.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/deploy_templates.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/driver.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/driver.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/driver.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/driver.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/node.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/node.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/node.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/node.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/port.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/port.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/port.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/port.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/port_group.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/port_group.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/port_group.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/port_group.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/volume_connector.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/volume_connector.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/volume_connector.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/volume_connector.cpython-310.pyc diff --git a/baremetal/v1/__pycache__/volume_target.cpython-310.pyc b/openstack/baremetal/v1/__pycache__/volume_target.cpython-310.pyc similarity index 100% rename from baremetal/v1/__pycache__/volume_target.cpython-310.pyc rename to openstack/baremetal/v1/__pycache__/volume_target.cpython-310.pyc diff --git a/baremetal/v1/_common.py b/openstack/baremetal/v1/_common.py similarity index 100% rename from baremetal/v1/_common.py rename to openstack/baremetal/v1/_common.py diff --git a/baremetal/v1/_proxy.py b/openstack/baremetal/v1/_proxy.py similarity index 100% rename from baremetal/v1/_proxy.py rename to openstack/baremetal/v1/_proxy.py diff --git a/baremetal/v1/allocation.py b/openstack/baremetal/v1/allocation.py similarity index 100% rename from baremetal/v1/allocation.py rename to openstack/baremetal/v1/allocation.py diff --git a/baremetal/v1/chassis.py b/openstack/baremetal/v1/chassis.py similarity index 100% rename from baremetal/v1/chassis.py rename to openstack/baremetal/v1/chassis.py diff --git a/baremetal/v1/conductor.py b/openstack/baremetal/v1/conductor.py similarity index 100% rename from baremetal/v1/conductor.py rename to openstack/baremetal/v1/conductor.py diff --git a/baremetal/v1/deploy_templates.py b/openstack/baremetal/v1/deploy_templates.py similarity index 100% rename from baremetal/v1/deploy_templates.py rename to openstack/baremetal/v1/deploy_templates.py diff --git a/baremetal/v1/driver.py b/openstack/baremetal/v1/driver.py similarity index 100% rename from baremetal/v1/driver.py rename to openstack/baremetal/v1/driver.py diff --git a/baremetal/v1/node.py b/openstack/baremetal/v1/node.py similarity index 100% rename from baremetal/v1/node.py rename to openstack/baremetal/v1/node.py diff --git a/baremetal/v1/port.py b/openstack/baremetal/v1/port.py similarity index 100% rename from baremetal/v1/port.py rename to openstack/baremetal/v1/port.py diff --git a/baremetal/v1/port_group.py b/openstack/baremetal/v1/port_group.py similarity index 100% rename from baremetal/v1/port_group.py rename to openstack/baremetal/v1/port_group.py diff --git a/baremetal/v1/volume_connector.py b/openstack/baremetal/v1/volume_connector.py similarity index 100% rename from baremetal/v1/volume_connector.py rename to openstack/baremetal/v1/volume_connector.py diff --git a/baremetal/v1/volume_target.py b/openstack/baremetal/v1/volume_target.py similarity index 100% rename from baremetal/v1/volume_target.py rename to openstack/baremetal/v1/volume_target.py diff --git a/baremetal/version.py b/openstack/baremetal/version.py similarity index 100% rename from baremetal/version.py rename to openstack/baremetal/version.py diff --git a/common/__init__.py b/openstack/baremetal_introspection/__init__.py similarity index 100% rename from common/__init__.py rename to openstack/baremetal_introspection/__init__.py diff --git a/baremetal_introspection/__pycache__/__init__.cpython-310.pyc b/openstack/baremetal_introspection/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from baremetal_introspection/__pycache__/__init__.cpython-310.pyc rename to openstack/baremetal_introspection/__pycache__/__init__.cpython-310.pyc diff --git a/baremetal_introspection/__pycache__/baremetal_introspection_service.cpython-310.pyc b/openstack/baremetal_introspection/__pycache__/baremetal_introspection_service.cpython-310.pyc similarity index 100% rename from baremetal_introspection/__pycache__/baremetal_introspection_service.cpython-310.pyc rename to openstack/baremetal_introspection/__pycache__/baremetal_introspection_service.cpython-310.pyc diff --git a/baremetal_introspection/baremetal_introspection_service.py b/openstack/baremetal_introspection/baremetal_introspection_service.py similarity index 100% rename from baremetal_introspection/baremetal_introspection_service.py rename to openstack/baremetal_introspection/baremetal_introspection_service.py diff --git a/compute/__init__.py b/openstack/baremetal_introspection/v1/__init__.py similarity index 100% rename from compute/__init__.py rename to openstack/baremetal_introspection/v1/__init__.py diff --git a/baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc b/openstack/baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc diff --git a/baremetal_introspection/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/baremetal_introspection/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from baremetal_introspection/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/baremetal_introspection/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/baremetal_introspection/v1/__pycache__/introspection.cpython-310.pyc b/openstack/baremetal_introspection/v1/__pycache__/introspection.cpython-310.pyc similarity index 100% rename from baremetal_introspection/v1/__pycache__/introspection.cpython-310.pyc rename to openstack/baremetal_introspection/v1/__pycache__/introspection.cpython-310.pyc diff --git a/baremetal_introspection/v1/__pycache__/introspection_rule.cpython-310.pyc b/openstack/baremetal_introspection/v1/__pycache__/introspection_rule.cpython-310.pyc similarity index 100% rename from baremetal_introspection/v1/__pycache__/introspection_rule.cpython-310.pyc rename to openstack/baremetal_introspection/v1/__pycache__/introspection_rule.cpython-310.pyc diff --git a/baremetal_introspection/v1/_proxy.py b/openstack/baremetal_introspection/v1/_proxy.py similarity index 100% rename from baremetal_introspection/v1/_proxy.py rename to openstack/baremetal_introspection/v1/_proxy.py diff --git a/baremetal_introspection/v1/introspection.py b/openstack/baremetal_introspection/v1/introspection.py similarity index 100% rename from baremetal_introspection/v1/introspection.py rename to openstack/baremetal_introspection/v1/introspection.py diff --git a/baremetal_introspection/v1/introspection_rule.py b/openstack/baremetal_introspection/v1/introspection_rule.py similarity index 100% rename from baremetal_introspection/v1/introspection_rule.py rename to openstack/baremetal_introspection/v1/introspection_rule.py diff --git a/compute/v2/__init__.py b/openstack/block_storage/__init__.py similarity index 100% rename from compute/v2/__init__.py rename to openstack/block_storage/__init__.py diff --git a/block_storage/__pycache__/__init__.cpython-310.pyc b/openstack/block_storage/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from block_storage/__pycache__/__init__.cpython-310.pyc rename to openstack/block_storage/__pycache__/__init__.cpython-310.pyc diff --git a/block_storage/__pycache__/_base_proxy.cpython-310.pyc b/openstack/block_storage/__pycache__/_base_proxy.cpython-310.pyc similarity index 100% rename from block_storage/__pycache__/_base_proxy.cpython-310.pyc rename to openstack/block_storage/__pycache__/_base_proxy.cpython-310.pyc diff --git a/block_storage/__pycache__/block_storage_service.cpython-310.pyc b/openstack/block_storage/__pycache__/block_storage_service.cpython-310.pyc similarity index 100% rename from block_storage/__pycache__/block_storage_service.cpython-310.pyc rename to openstack/block_storage/__pycache__/block_storage_service.cpython-310.pyc diff --git a/block_storage/_base_proxy.py b/openstack/block_storage/_base_proxy.py similarity index 100% rename from block_storage/_base_proxy.py rename to openstack/block_storage/_base_proxy.py diff --git a/block_storage/block_storage_service.py b/openstack/block_storage/block_storage_service.py similarity index 100% rename from block_storage/block_storage_service.py rename to openstack/block_storage/block_storage_service.py diff --git a/container_infrastructure_management/__init__.py b/openstack/block_storage/v2/__init__.py similarity index 100% rename from container_infrastructure_management/__init__.py rename to openstack/block_storage/v2/__init__.py diff --git a/block_storage/v2/__pycache__/__init__.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/__init__.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/backup.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/backup.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/backup.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/backup.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/capabilities.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/capabilities.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/capabilities.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/capabilities.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/extension.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/extension.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/extension.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/extension.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/limits.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/limits.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/limits.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/limits.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/quota_set.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/quota_set.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/quota_set.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/quota_set.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/snapshot.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/snapshot.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/snapshot.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/snapshot.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/stats.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/stats.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/stats.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/stats.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/type.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/type.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/type.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/type.cpython-310.pyc diff --git a/block_storage/v2/__pycache__/volume.cpython-310.pyc b/openstack/block_storage/v2/__pycache__/volume.cpython-310.pyc similarity index 100% rename from block_storage/v2/__pycache__/volume.cpython-310.pyc rename to openstack/block_storage/v2/__pycache__/volume.cpython-310.pyc diff --git a/block_storage/v2/_proxy.py b/openstack/block_storage/v2/_proxy.py similarity index 100% rename from block_storage/v2/_proxy.py rename to openstack/block_storage/v2/_proxy.py diff --git a/block_storage/v2/backup.py b/openstack/block_storage/v2/backup.py similarity index 100% rename from block_storage/v2/backup.py rename to openstack/block_storage/v2/backup.py diff --git a/block_storage/v2/capabilities.py b/openstack/block_storage/v2/capabilities.py similarity index 100% rename from block_storage/v2/capabilities.py rename to openstack/block_storage/v2/capabilities.py diff --git a/block_storage/v2/extension.py b/openstack/block_storage/v2/extension.py similarity index 100% rename from block_storage/v2/extension.py rename to openstack/block_storage/v2/extension.py diff --git a/block_storage/v2/limits.py b/openstack/block_storage/v2/limits.py similarity index 100% rename from block_storage/v2/limits.py rename to openstack/block_storage/v2/limits.py diff --git a/block_storage/v2/quota_set.py b/openstack/block_storage/v2/quota_set.py similarity index 100% rename from block_storage/v2/quota_set.py rename to openstack/block_storage/v2/quota_set.py diff --git a/block_storage/v2/snapshot.py b/openstack/block_storage/v2/snapshot.py similarity index 100% rename from block_storage/v2/snapshot.py rename to openstack/block_storage/v2/snapshot.py diff --git a/block_storage/v2/stats.py b/openstack/block_storage/v2/stats.py similarity index 100% rename from block_storage/v2/stats.py rename to openstack/block_storage/v2/stats.py diff --git a/block_storage/v2/type.py b/openstack/block_storage/v2/type.py similarity index 100% rename from block_storage/v2/type.py rename to openstack/block_storage/v2/type.py diff --git a/block_storage/v2/volume.py b/openstack/block_storage/v2/volume.py similarity index 100% rename from block_storage/v2/volume.py rename to openstack/block_storage/v2/volume.py diff --git a/container_infrastructure_management/v1/__init__.py b/openstack/block_storage/v3/__init__.py similarity index 100% rename from container_infrastructure_management/v1/__init__.py rename to openstack/block_storage/v3/__init__.py diff --git a/block_storage/v3/__pycache__/__init__.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/__init__.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/__init__.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/_proxy.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/_proxy.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/_proxy.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/attachment.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/attachment.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/attachment.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/attachment.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/availability_zone.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/availability_zone.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/availability_zone.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/availability_zone.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/backup.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/backup.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/backup.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/backup.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/block_storage_summary.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/block_storage_summary.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/block_storage_summary.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/block_storage_summary.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/capabilities.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/capabilities.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/capabilities.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/capabilities.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/extension.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/extension.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/extension.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/extension.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/group.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/group.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/group.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/group.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/group_snapshot.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/group_snapshot.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/group_snapshot.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/group_snapshot.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/group_type.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/group_type.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/group_type.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/group_type.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/limits.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/limits.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/limits.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/limits.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/quota_set.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/quota_set.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/quota_set.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/quota_set.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/resource_filter.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/resource_filter.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/resource_filter.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/resource_filter.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/service.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/service.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/service.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/service.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/snapshot.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/snapshot.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/snapshot.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/snapshot.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/stats.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/stats.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/stats.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/stats.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/transfer.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/transfer.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/transfer.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/transfer.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/type.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/type.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/type.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/type.cpython-310.pyc diff --git a/block_storage/v3/__pycache__/volume.cpython-310.pyc b/openstack/block_storage/v3/__pycache__/volume.cpython-310.pyc similarity index 100% rename from block_storage/v3/__pycache__/volume.cpython-310.pyc rename to openstack/block_storage/v3/__pycache__/volume.cpython-310.pyc diff --git a/block_storage/v3/_proxy.py b/openstack/block_storage/v3/_proxy.py similarity index 100% rename from block_storage/v3/_proxy.py rename to openstack/block_storage/v3/_proxy.py diff --git a/block_storage/v3/attachment.py b/openstack/block_storage/v3/attachment.py similarity index 100% rename from block_storage/v3/attachment.py rename to openstack/block_storage/v3/attachment.py diff --git a/block_storage/v3/availability_zone.py b/openstack/block_storage/v3/availability_zone.py similarity index 100% rename from block_storage/v3/availability_zone.py rename to openstack/block_storage/v3/availability_zone.py diff --git a/block_storage/v3/backup.py b/openstack/block_storage/v3/backup.py similarity index 100% rename from block_storage/v3/backup.py rename to openstack/block_storage/v3/backup.py diff --git a/block_storage/v3/block_storage_summary.py b/openstack/block_storage/v3/block_storage_summary.py similarity index 100% rename from block_storage/v3/block_storage_summary.py rename to openstack/block_storage/v3/block_storage_summary.py diff --git a/block_storage/v3/capabilities.py b/openstack/block_storage/v3/capabilities.py similarity index 100% rename from block_storage/v3/capabilities.py rename to openstack/block_storage/v3/capabilities.py diff --git a/block_storage/v3/extension.py b/openstack/block_storage/v3/extension.py similarity index 100% rename from block_storage/v3/extension.py rename to openstack/block_storage/v3/extension.py diff --git a/block_storage/v3/group.py b/openstack/block_storage/v3/group.py similarity index 100% rename from block_storage/v3/group.py rename to openstack/block_storage/v3/group.py diff --git a/block_storage/v3/group_snapshot.py b/openstack/block_storage/v3/group_snapshot.py similarity index 100% rename from block_storage/v3/group_snapshot.py rename to openstack/block_storage/v3/group_snapshot.py diff --git a/block_storage/v3/group_type.py b/openstack/block_storage/v3/group_type.py similarity index 100% rename from block_storage/v3/group_type.py rename to openstack/block_storage/v3/group_type.py diff --git a/block_storage/v3/limits.py b/openstack/block_storage/v3/limits.py similarity index 100% rename from block_storage/v3/limits.py rename to openstack/block_storage/v3/limits.py diff --git a/block_storage/v3/quota_set.py b/openstack/block_storage/v3/quota_set.py similarity index 100% rename from block_storage/v3/quota_set.py rename to openstack/block_storage/v3/quota_set.py diff --git a/block_storage/v3/resource_filter.py b/openstack/block_storage/v3/resource_filter.py similarity index 100% rename from block_storage/v3/resource_filter.py rename to openstack/block_storage/v3/resource_filter.py diff --git a/block_storage/v3/service.py b/openstack/block_storage/v3/service.py similarity index 100% rename from block_storage/v3/service.py rename to openstack/block_storage/v3/service.py diff --git a/block_storage/v3/snapshot.py b/openstack/block_storage/v3/snapshot.py similarity index 100% rename from block_storage/v3/snapshot.py rename to openstack/block_storage/v3/snapshot.py diff --git a/block_storage/v3/stats.py b/openstack/block_storage/v3/stats.py similarity index 100% rename from block_storage/v3/stats.py rename to openstack/block_storage/v3/stats.py diff --git a/block_storage/v3/transfer.py b/openstack/block_storage/v3/transfer.py similarity index 100% rename from block_storage/v3/transfer.py rename to openstack/block_storage/v3/transfer.py diff --git a/block_storage/v3/type.py b/openstack/block_storage/v3/type.py similarity index 100% rename from block_storage/v3/type.py rename to openstack/block_storage/v3/type.py diff --git a/block_storage/v3/volume.py b/openstack/block_storage/v3/volume.py similarity index 100% rename from block_storage/v3/volume.py rename to openstack/block_storage/v3/volume.py diff --git a/cloud/__init__.py b/openstack/cloud/__init__.py similarity index 100% rename from cloud/__init__.py rename to openstack/cloud/__init__.py diff --git a/cloud/__pycache__/__init__.cpython-310.pyc b/openstack/cloud/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/__init__.cpython-310.pyc rename to openstack/cloud/__pycache__/__init__.cpython-310.pyc diff --git a/cloud/__pycache__/_accelerator.cpython-310.pyc b/openstack/cloud/__pycache__/_accelerator.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_accelerator.cpython-310.pyc rename to openstack/cloud/__pycache__/_accelerator.cpython-310.pyc diff --git a/cloud/__pycache__/_baremetal.cpython-310.pyc b/openstack/cloud/__pycache__/_baremetal.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_baremetal.cpython-310.pyc rename to openstack/cloud/__pycache__/_baremetal.cpython-310.pyc diff --git a/cloud/__pycache__/_block_storage.cpython-310.pyc b/openstack/cloud/__pycache__/_block_storage.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_block_storage.cpython-310.pyc rename to openstack/cloud/__pycache__/_block_storage.cpython-310.pyc diff --git a/cloud/__pycache__/_coe.cpython-310.pyc b/openstack/cloud/__pycache__/_coe.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_coe.cpython-310.pyc rename to openstack/cloud/__pycache__/_coe.cpython-310.pyc diff --git a/cloud/__pycache__/_compute.cpython-310.pyc b/openstack/cloud/__pycache__/_compute.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_compute.cpython-310.pyc rename to openstack/cloud/__pycache__/_compute.cpython-310.pyc diff --git a/cloud/__pycache__/_dns.cpython-310.pyc b/openstack/cloud/__pycache__/_dns.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_dns.cpython-310.pyc rename to openstack/cloud/__pycache__/_dns.cpython-310.pyc diff --git a/cloud/__pycache__/_floating_ip.cpython-310.pyc b/openstack/cloud/__pycache__/_floating_ip.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_floating_ip.cpython-310.pyc rename to openstack/cloud/__pycache__/_floating_ip.cpython-310.pyc diff --git a/cloud/__pycache__/_identity.cpython-310.pyc b/openstack/cloud/__pycache__/_identity.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_identity.cpython-310.pyc rename to openstack/cloud/__pycache__/_identity.cpython-310.pyc diff --git a/cloud/__pycache__/_image.cpython-310.pyc b/openstack/cloud/__pycache__/_image.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_image.cpython-310.pyc rename to openstack/cloud/__pycache__/_image.cpython-310.pyc diff --git a/cloud/__pycache__/_network.cpython-310.pyc b/openstack/cloud/__pycache__/_network.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_network.cpython-310.pyc rename to openstack/cloud/__pycache__/_network.cpython-310.pyc diff --git a/cloud/__pycache__/_network_common.cpython-310.pyc b/openstack/cloud/__pycache__/_network_common.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_network_common.cpython-310.pyc rename to openstack/cloud/__pycache__/_network_common.cpython-310.pyc diff --git a/cloud/__pycache__/_object_store.cpython-310.pyc b/openstack/cloud/__pycache__/_object_store.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_object_store.cpython-310.pyc rename to openstack/cloud/__pycache__/_object_store.cpython-310.pyc diff --git a/cloud/__pycache__/_orchestration.cpython-310.pyc b/openstack/cloud/__pycache__/_orchestration.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_orchestration.cpython-310.pyc rename to openstack/cloud/__pycache__/_orchestration.cpython-310.pyc diff --git a/cloud/__pycache__/_security_group.cpython-310.pyc b/openstack/cloud/__pycache__/_security_group.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_security_group.cpython-310.pyc rename to openstack/cloud/__pycache__/_security_group.cpython-310.pyc diff --git a/cloud/__pycache__/_shared_file_system.cpython-310.pyc b/openstack/cloud/__pycache__/_shared_file_system.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_shared_file_system.cpython-310.pyc rename to openstack/cloud/__pycache__/_shared_file_system.cpython-310.pyc diff --git a/cloud/__pycache__/_utils.cpython-310.pyc b/openstack/cloud/__pycache__/_utils.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/_utils.cpython-310.pyc rename to openstack/cloud/__pycache__/_utils.cpython-310.pyc diff --git a/cloud/__pycache__/exc.cpython-310.pyc b/openstack/cloud/__pycache__/exc.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/exc.cpython-310.pyc rename to openstack/cloud/__pycache__/exc.cpython-310.pyc diff --git a/cloud/__pycache__/inventory.cpython-310.pyc b/openstack/cloud/__pycache__/inventory.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/inventory.cpython-310.pyc rename to openstack/cloud/__pycache__/inventory.cpython-310.pyc diff --git a/cloud/__pycache__/meta.cpython-310.pyc b/openstack/cloud/__pycache__/meta.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/meta.cpython-310.pyc rename to openstack/cloud/__pycache__/meta.cpython-310.pyc diff --git a/cloud/__pycache__/openstackcloud.cpython-310.pyc b/openstack/cloud/__pycache__/openstackcloud.cpython-310.pyc similarity index 100% rename from cloud/__pycache__/openstackcloud.cpython-310.pyc rename to openstack/cloud/__pycache__/openstackcloud.cpython-310.pyc diff --git a/cloud/_accelerator.py b/openstack/cloud/_accelerator.py similarity index 100% rename from cloud/_accelerator.py rename to openstack/cloud/_accelerator.py diff --git a/cloud/_baremetal.py b/openstack/cloud/_baremetal.py similarity index 100% rename from cloud/_baremetal.py rename to openstack/cloud/_baremetal.py diff --git a/cloud/_block_storage.py b/openstack/cloud/_block_storage.py similarity index 100% rename from cloud/_block_storage.py rename to openstack/cloud/_block_storage.py diff --git a/cloud/_coe.py b/openstack/cloud/_coe.py similarity index 100% rename from cloud/_coe.py rename to openstack/cloud/_coe.py diff --git a/cloud/_compute.py b/openstack/cloud/_compute.py similarity index 100% rename from cloud/_compute.py rename to openstack/cloud/_compute.py diff --git a/cloud/_dns.py b/openstack/cloud/_dns.py similarity index 100% rename from cloud/_dns.py rename to openstack/cloud/_dns.py diff --git a/cloud/_floating_ip.py b/openstack/cloud/_floating_ip.py similarity index 100% rename from cloud/_floating_ip.py rename to openstack/cloud/_floating_ip.py diff --git a/cloud/_identity.py b/openstack/cloud/_identity.py similarity index 100% rename from cloud/_identity.py rename to openstack/cloud/_identity.py diff --git a/cloud/_image.py b/openstack/cloud/_image.py similarity index 100% rename from cloud/_image.py rename to openstack/cloud/_image.py diff --git a/cloud/_network.py b/openstack/cloud/_network.py similarity index 100% rename from cloud/_network.py rename to openstack/cloud/_network.py diff --git a/cloud/_network_common.py b/openstack/cloud/_network_common.py similarity index 100% rename from cloud/_network_common.py rename to openstack/cloud/_network_common.py diff --git a/cloud/_object_store.py b/openstack/cloud/_object_store.py similarity index 100% rename from cloud/_object_store.py rename to openstack/cloud/_object_store.py diff --git a/cloud/_orchestration.py b/openstack/cloud/_orchestration.py similarity index 100% rename from cloud/_orchestration.py rename to openstack/cloud/_orchestration.py diff --git a/cloud/_security_group.py b/openstack/cloud/_security_group.py similarity index 100% rename from cloud/_security_group.py rename to openstack/cloud/_security_group.py diff --git a/cloud/_shared_file_system.py b/openstack/cloud/_shared_file_system.py similarity index 100% rename from cloud/_shared_file_system.py rename to openstack/cloud/_shared_file_system.py diff --git a/cloud/_utils.py b/openstack/cloud/_utils.py similarity index 100% rename from cloud/_utils.py rename to openstack/cloud/_utils.py diff --git a/database/__init__.py b/openstack/cloud/cmd/__init__.py similarity index 100% rename from database/__init__.py rename to openstack/cloud/cmd/__init__.py diff --git a/cloud/cmd/__pycache__/__init__.cpython-310.pyc b/openstack/cloud/cmd/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from cloud/cmd/__pycache__/__init__.cpython-310.pyc rename to openstack/cloud/cmd/__pycache__/__init__.cpython-310.pyc diff --git a/cloud/cmd/__pycache__/inventory.cpython-310.pyc b/openstack/cloud/cmd/__pycache__/inventory.cpython-310.pyc similarity index 100% rename from cloud/cmd/__pycache__/inventory.cpython-310.pyc rename to openstack/cloud/cmd/__pycache__/inventory.cpython-310.pyc diff --git a/cloud/cmd/inventory.py b/openstack/cloud/cmd/inventory.py similarity index 100% rename from cloud/cmd/inventory.py rename to openstack/cloud/cmd/inventory.py diff --git a/cloud/exc.py b/openstack/cloud/exc.py similarity index 100% rename from cloud/exc.py rename to openstack/cloud/exc.py diff --git a/cloud/inventory.py b/openstack/cloud/inventory.py similarity index 100% rename from cloud/inventory.py rename to openstack/cloud/inventory.py diff --git a/cloud/meta.py b/openstack/cloud/meta.py similarity index 100% rename from cloud/meta.py rename to openstack/cloud/meta.py diff --git a/cloud/openstackcloud.py b/openstack/cloud/openstackcloud.py similarity index 100% rename from cloud/openstackcloud.py rename to openstack/cloud/openstackcloud.py diff --git a/database/v1/__init__.py b/openstack/cloud/tests/__init__.py similarity index 100% rename from database/v1/__init__.py rename to openstack/cloud/tests/__init__.py diff --git a/cloud/tests/__pycache__/__init__.cpython-310.pyc b/openstack/cloud/tests/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from cloud/tests/__pycache__/__init__.cpython-310.pyc rename to openstack/cloud/tests/__pycache__/__init__.cpython-310.pyc diff --git a/dns/__init__.py b/openstack/clustering/__init__.py similarity index 100% rename from dns/__init__.py rename to openstack/clustering/__init__.py diff --git a/clustering/__pycache__/__init__.cpython-310.pyc b/openstack/clustering/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from clustering/__pycache__/__init__.cpython-310.pyc rename to openstack/clustering/__pycache__/__init__.cpython-310.pyc diff --git a/clustering/__pycache__/clustering_service.cpython-310.pyc b/openstack/clustering/__pycache__/clustering_service.cpython-310.pyc similarity index 100% rename from clustering/__pycache__/clustering_service.cpython-310.pyc rename to openstack/clustering/__pycache__/clustering_service.cpython-310.pyc diff --git a/clustering/__pycache__/version.cpython-310.pyc b/openstack/clustering/__pycache__/version.cpython-310.pyc similarity index 100% rename from clustering/__pycache__/version.cpython-310.pyc rename to openstack/clustering/__pycache__/version.cpython-310.pyc diff --git a/clustering/clustering_service.py b/openstack/clustering/clustering_service.py similarity index 100% rename from clustering/clustering_service.py rename to openstack/clustering/clustering_service.py diff --git a/dns/v2/__init__.py b/openstack/clustering/v1/__init__.py similarity index 100% rename from dns/v2/__init__.py rename to openstack/clustering/v1/__init__.py diff --git a/clustering/v1/__pycache__/__init__.cpython-310.pyc b/openstack/clustering/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/__init__.cpython-310.pyc diff --git a/clustering/v1/__pycache__/_async_resource.cpython-310.pyc b/openstack/clustering/v1/__pycache__/_async_resource.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/_async_resource.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/_async_resource.cpython-310.pyc diff --git a/clustering/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/clustering/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/clustering/v1/__pycache__/action.cpython-310.pyc b/openstack/clustering/v1/__pycache__/action.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/action.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/action.cpython-310.pyc diff --git a/clustering/v1/__pycache__/build_info.cpython-310.pyc b/openstack/clustering/v1/__pycache__/build_info.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/build_info.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/build_info.cpython-310.pyc diff --git a/clustering/v1/__pycache__/cluster.cpython-310.pyc b/openstack/clustering/v1/__pycache__/cluster.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/cluster.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/cluster.cpython-310.pyc diff --git a/clustering/v1/__pycache__/cluster_attr.cpython-310.pyc b/openstack/clustering/v1/__pycache__/cluster_attr.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/cluster_attr.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/cluster_attr.cpython-310.pyc diff --git a/clustering/v1/__pycache__/cluster_policy.cpython-310.pyc b/openstack/clustering/v1/__pycache__/cluster_policy.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/cluster_policy.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/cluster_policy.cpython-310.pyc diff --git a/clustering/v1/__pycache__/event.cpython-310.pyc b/openstack/clustering/v1/__pycache__/event.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/event.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/event.cpython-310.pyc diff --git a/clustering/v1/__pycache__/node.cpython-310.pyc b/openstack/clustering/v1/__pycache__/node.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/node.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/node.cpython-310.pyc diff --git a/clustering/v1/__pycache__/policy.cpython-310.pyc b/openstack/clustering/v1/__pycache__/policy.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/policy.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/policy.cpython-310.pyc diff --git a/clustering/v1/__pycache__/policy_type.cpython-310.pyc b/openstack/clustering/v1/__pycache__/policy_type.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/policy_type.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/policy_type.cpython-310.pyc diff --git a/clustering/v1/__pycache__/profile.cpython-310.pyc b/openstack/clustering/v1/__pycache__/profile.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/profile.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/profile.cpython-310.pyc diff --git a/clustering/v1/__pycache__/profile_type.cpython-310.pyc b/openstack/clustering/v1/__pycache__/profile_type.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/profile_type.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/profile_type.cpython-310.pyc diff --git a/clustering/v1/__pycache__/receiver.cpython-310.pyc b/openstack/clustering/v1/__pycache__/receiver.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/receiver.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/receiver.cpython-310.pyc diff --git a/clustering/v1/__pycache__/service.cpython-310.pyc b/openstack/clustering/v1/__pycache__/service.cpython-310.pyc similarity index 100% rename from clustering/v1/__pycache__/service.cpython-310.pyc rename to openstack/clustering/v1/__pycache__/service.cpython-310.pyc diff --git a/clustering/v1/_async_resource.py b/openstack/clustering/v1/_async_resource.py similarity index 100% rename from clustering/v1/_async_resource.py rename to openstack/clustering/v1/_async_resource.py diff --git a/clustering/v1/_proxy.py b/openstack/clustering/v1/_proxy.py similarity index 100% rename from clustering/v1/_proxy.py rename to openstack/clustering/v1/_proxy.py diff --git a/clustering/v1/action.py b/openstack/clustering/v1/action.py similarity index 100% rename from clustering/v1/action.py rename to openstack/clustering/v1/action.py diff --git a/clustering/v1/build_info.py b/openstack/clustering/v1/build_info.py similarity index 100% rename from clustering/v1/build_info.py rename to openstack/clustering/v1/build_info.py diff --git a/clustering/v1/cluster.py b/openstack/clustering/v1/cluster.py similarity index 100% rename from clustering/v1/cluster.py rename to openstack/clustering/v1/cluster.py diff --git a/clustering/v1/cluster_attr.py b/openstack/clustering/v1/cluster_attr.py similarity index 100% rename from clustering/v1/cluster_attr.py rename to openstack/clustering/v1/cluster_attr.py diff --git a/clustering/v1/cluster_policy.py b/openstack/clustering/v1/cluster_policy.py similarity index 100% rename from clustering/v1/cluster_policy.py rename to openstack/clustering/v1/cluster_policy.py diff --git a/clustering/v1/event.py b/openstack/clustering/v1/event.py similarity index 100% rename from clustering/v1/event.py rename to openstack/clustering/v1/event.py diff --git a/clustering/v1/node.py b/openstack/clustering/v1/node.py similarity index 100% rename from clustering/v1/node.py rename to openstack/clustering/v1/node.py diff --git a/clustering/v1/policy.py b/openstack/clustering/v1/policy.py similarity index 100% rename from clustering/v1/policy.py rename to openstack/clustering/v1/policy.py diff --git a/clustering/v1/policy_type.py b/openstack/clustering/v1/policy_type.py similarity index 100% rename from clustering/v1/policy_type.py rename to openstack/clustering/v1/policy_type.py diff --git a/clustering/v1/profile.py b/openstack/clustering/v1/profile.py similarity index 100% rename from clustering/v1/profile.py rename to openstack/clustering/v1/profile.py diff --git a/clustering/v1/profile_type.py b/openstack/clustering/v1/profile_type.py similarity index 100% rename from clustering/v1/profile_type.py rename to openstack/clustering/v1/profile_type.py diff --git a/clustering/v1/receiver.py b/openstack/clustering/v1/receiver.py similarity index 100% rename from clustering/v1/receiver.py rename to openstack/clustering/v1/receiver.py diff --git a/clustering/v1/service.py b/openstack/clustering/v1/service.py similarity index 100% rename from clustering/v1/service.py rename to openstack/clustering/v1/service.py diff --git a/clustering/version.py b/openstack/clustering/version.py similarity index 100% rename from clustering/version.py rename to openstack/clustering/version.py diff --git a/fixture/__init__.py b/openstack/common/__init__.py similarity index 100% rename from fixture/__init__.py rename to openstack/common/__init__.py diff --git a/common/__pycache__/__init__.cpython-310.pyc b/openstack/common/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from common/__pycache__/__init__.cpython-310.pyc rename to openstack/common/__pycache__/__init__.cpython-310.pyc diff --git a/common/__pycache__/metadata.cpython-310.pyc b/openstack/common/__pycache__/metadata.cpython-310.pyc similarity index 100% rename from common/__pycache__/metadata.cpython-310.pyc rename to openstack/common/__pycache__/metadata.cpython-310.pyc diff --git a/common/__pycache__/quota_set.cpython-310.pyc b/openstack/common/__pycache__/quota_set.cpython-310.pyc similarity index 100% rename from common/__pycache__/quota_set.cpython-310.pyc rename to openstack/common/__pycache__/quota_set.cpython-310.pyc diff --git a/common/__pycache__/tag.cpython-310.pyc b/openstack/common/__pycache__/tag.cpython-310.pyc similarity index 100% rename from common/__pycache__/tag.cpython-310.pyc rename to openstack/common/__pycache__/tag.cpython-310.pyc diff --git a/common/metadata.py b/openstack/common/metadata.py similarity index 100% rename from common/metadata.py rename to openstack/common/metadata.py diff --git a/common/quota_set.py b/openstack/common/quota_set.py similarity index 100% rename from common/quota_set.py rename to openstack/common/quota_set.py diff --git a/common/tag.py b/openstack/common/tag.py similarity index 100% rename from common/tag.py rename to openstack/common/tag.py diff --git a/identity/__init__.py b/openstack/compute/__init__.py similarity index 100% rename from identity/__init__.py rename to openstack/compute/__init__.py diff --git a/compute/__pycache__/__init__.cpython-310.pyc b/openstack/compute/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from compute/__pycache__/__init__.cpython-310.pyc rename to openstack/compute/__pycache__/__init__.cpython-310.pyc diff --git a/compute/__pycache__/compute_service.cpython-310.pyc b/openstack/compute/__pycache__/compute_service.cpython-310.pyc similarity index 100% rename from compute/__pycache__/compute_service.cpython-310.pyc rename to openstack/compute/__pycache__/compute_service.cpython-310.pyc diff --git a/compute/__pycache__/version.cpython-310.pyc b/openstack/compute/__pycache__/version.cpython-310.pyc similarity index 100% rename from compute/__pycache__/version.cpython-310.pyc rename to openstack/compute/__pycache__/version.cpython-310.pyc diff --git a/compute/compute_service.py b/openstack/compute/compute_service.py similarity index 100% rename from compute/compute_service.py rename to openstack/compute/compute_service.py diff --git a/identity/v2/__init__.py b/openstack/compute/v2/__init__.py similarity index 100% rename from identity/v2/__init__.py rename to openstack/compute/v2/__init__.py diff --git a/compute/v2/__pycache__/__init__.cpython-310.pyc b/openstack/compute/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/compute/v2/__pycache__/__init__.cpython-310.pyc diff --git a/compute/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/compute/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/compute/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/compute/v2/__pycache__/aggregate.cpython-310.pyc b/openstack/compute/v2/__pycache__/aggregate.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/aggregate.cpython-310.pyc rename to openstack/compute/v2/__pycache__/aggregate.cpython-310.pyc diff --git a/compute/v2/__pycache__/availability_zone.cpython-310.pyc b/openstack/compute/v2/__pycache__/availability_zone.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/availability_zone.cpython-310.pyc rename to openstack/compute/v2/__pycache__/availability_zone.cpython-310.pyc diff --git a/compute/v2/__pycache__/extension.cpython-310.pyc b/openstack/compute/v2/__pycache__/extension.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/extension.cpython-310.pyc rename to openstack/compute/v2/__pycache__/extension.cpython-310.pyc diff --git a/compute/v2/__pycache__/flavor.cpython-310.pyc b/openstack/compute/v2/__pycache__/flavor.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/flavor.cpython-310.pyc rename to openstack/compute/v2/__pycache__/flavor.cpython-310.pyc diff --git a/compute/v2/__pycache__/hypervisor.cpython-310.pyc b/openstack/compute/v2/__pycache__/hypervisor.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/hypervisor.cpython-310.pyc rename to openstack/compute/v2/__pycache__/hypervisor.cpython-310.pyc diff --git a/compute/v2/__pycache__/image.cpython-310.pyc b/openstack/compute/v2/__pycache__/image.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/image.cpython-310.pyc rename to openstack/compute/v2/__pycache__/image.cpython-310.pyc diff --git a/compute/v2/__pycache__/keypair.cpython-310.pyc b/openstack/compute/v2/__pycache__/keypair.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/keypair.cpython-310.pyc rename to openstack/compute/v2/__pycache__/keypair.cpython-310.pyc diff --git a/compute/v2/__pycache__/limits.cpython-310.pyc b/openstack/compute/v2/__pycache__/limits.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/limits.cpython-310.pyc rename to openstack/compute/v2/__pycache__/limits.cpython-310.pyc diff --git a/compute/v2/__pycache__/migration.cpython-310.pyc b/openstack/compute/v2/__pycache__/migration.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/migration.cpython-310.pyc rename to openstack/compute/v2/__pycache__/migration.cpython-310.pyc diff --git a/compute/v2/__pycache__/quota_set.cpython-310.pyc b/openstack/compute/v2/__pycache__/quota_set.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/quota_set.cpython-310.pyc rename to openstack/compute/v2/__pycache__/quota_set.cpython-310.pyc diff --git a/compute/v2/__pycache__/server.cpython-310.pyc b/openstack/compute/v2/__pycache__/server.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/server.cpython-310.pyc rename to openstack/compute/v2/__pycache__/server.cpython-310.pyc diff --git a/compute/v2/__pycache__/server_action.cpython-310.pyc b/openstack/compute/v2/__pycache__/server_action.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/server_action.cpython-310.pyc rename to openstack/compute/v2/__pycache__/server_action.cpython-310.pyc diff --git a/compute/v2/__pycache__/server_diagnostics.cpython-310.pyc b/openstack/compute/v2/__pycache__/server_diagnostics.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/server_diagnostics.cpython-310.pyc rename to openstack/compute/v2/__pycache__/server_diagnostics.cpython-310.pyc diff --git a/compute/v2/__pycache__/server_group.cpython-310.pyc b/openstack/compute/v2/__pycache__/server_group.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/server_group.cpython-310.pyc rename to openstack/compute/v2/__pycache__/server_group.cpython-310.pyc diff --git a/compute/v2/__pycache__/server_interface.cpython-310.pyc b/openstack/compute/v2/__pycache__/server_interface.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/server_interface.cpython-310.pyc rename to openstack/compute/v2/__pycache__/server_interface.cpython-310.pyc diff --git a/compute/v2/__pycache__/server_ip.cpython-310.pyc b/openstack/compute/v2/__pycache__/server_ip.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/server_ip.cpython-310.pyc rename to openstack/compute/v2/__pycache__/server_ip.cpython-310.pyc diff --git a/compute/v2/__pycache__/server_migration.cpython-310.pyc b/openstack/compute/v2/__pycache__/server_migration.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/server_migration.cpython-310.pyc rename to openstack/compute/v2/__pycache__/server_migration.cpython-310.pyc diff --git a/compute/v2/__pycache__/server_remote_console.cpython-310.pyc b/openstack/compute/v2/__pycache__/server_remote_console.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/server_remote_console.cpython-310.pyc rename to openstack/compute/v2/__pycache__/server_remote_console.cpython-310.pyc diff --git a/compute/v2/__pycache__/service.cpython-310.pyc b/openstack/compute/v2/__pycache__/service.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/service.cpython-310.pyc rename to openstack/compute/v2/__pycache__/service.cpython-310.pyc diff --git a/compute/v2/__pycache__/usage.cpython-310.pyc b/openstack/compute/v2/__pycache__/usage.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/usage.cpython-310.pyc rename to openstack/compute/v2/__pycache__/usage.cpython-310.pyc diff --git a/compute/v2/__pycache__/volume_attachment.cpython-310.pyc b/openstack/compute/v2/__pycache__/volume_attachment.cpython-310.pyc similarity index 100% rename from compute/v2/__pycache__/volume_attachment.cpython-310.pyc rename to openstack/compute/v2/__pycache__/volume_attachment.cpython-310.pyc diff --git a/compute/v2/_proxy.py b/openstack/compute/v2/_proxy.py similarity index 100% rename from compute/v2/_proxy.py rename to openstack/compute/v2/_proxy.py diff --git a/compute/v2/aggregate.py b/openstack/compute/v2/aggregate.py similarity index 100% rename from compute/v2/aggregate.py rename to openstack/compute/v2/aggregate.py diff --git a/compute/v2/availability_zone.py b/openstack/compute/v2/availability_zone.py similarity index 100% rename from compute/v2/availability_zone.py rename to openstack/compute/v2/availability_zone.py diff --git a/compute/v2/extension.py b/openstack/compute/v2/extension.py similarity index 100% rename from compute/v2/extension.py rename to openstack/compute/v2/extension.py diff --git a/compute/v2/flavor.py b/openstack/compute/v2/flavor.py similarity index 100% rename from compute/v2/flavor.py rename to openstack/compute/v2/flavor.py diff --git a/compute/v2/hypervisor.py b/openstack/compute/v2/hypervisor.py similarity index 100% rename from compute/v2/hypervisor.py rename to openstack/compute/v2/hypervisor.py diff --git a/compute/v2/image.py b/openstack/compute/v2/image.py similarity index 100% rename from compute/v2/image.py rename to openstack/compute/v2/image.py diff --git a/compute/v2/keypair.py b/openstack/compute/v2/keypair.py similarity index 100% rename from compute/v2/keypair.py rename to openstack/compute/v2/keypair.py diff --git a/compute/v2/limits.py b/openstack/compute/v2/limits.py similarity index 100% rename from compute/v2/limits.py rename to openstack/compute/v2/limits.py diff --git a/compute/v2/migration.py b/openstack/compute/v2/migration.py similarity index 100% rename from compute/v2/migration.py rename to openstack/compute/v2/migration.py diff --git a/compute/v2/quota_set.py b/openstack/compute/v2/quota_set.py similarity index 100% rename from compute/v2/quota_set.py rename to openstack/compute/v2/quota_set.py diff --git a/compute/v2/server.py b/openstack/compute/v2/server.py similarity index 100% rename from compute/v2/server.py rename to openstack/compute/v2/server.py diff --git a/compute/v2/server_action.py b/openstack/compute/v2/server_action.py similarity index 100% rename from compute/v2/server_action.py rename to openstack/compute/v2/server_action.py diff --git a/compute/v2/server_diagnostics.py b/openstack/compute/v2/server_diagnostics.py similarity index 100% rename from compute/v2/server_diagnostics.py rename to openstack/compute/v2/server_diagnostics.py diff --git a/compute/v2/server_group.py b/openstack/compute/v2/server_group.py similarity index 100% rename from compute/v2/server_group.py rename to openstack/compute/v2/server_group.py diff --git a/compute/v2/server_interface.py b/openstack/compute/v2/server_interface.py similarity index 100% rename from compute/v2/server_interface.py rename to openstack/compute/v2/server_interface.py diff --git a/compute/v2/server_ip.py b/openstack/compute/v2/server_ip.py similarity index 100% rename from compute/v2/server_ip.py rename to openstack/compute/v2/server_ip.py diff --git a/compute/v2/server_migration.py b/openstack/compute/v2/server_migration.py similarity index 100% rename from compute/v2/server_migration.py rename to openstack/compute/v2/server_migration.py diff --git a/compute/v2/server_remote_console.py b/openstack/compute/v2/server_remote_console.py similarity index 100% rename from compute/v2/server_remote_console.py rename to openstack/compute/v2/server_remote_console.py diff --git a/compute/v2/service.py b/openstack/compute/v2/service.py similarity index 100% rename from compute/v2/service.py rename to openstack/compute/v2/service.py diff --git a/compute/v2/usage.py b/openstack/compute/v2/usage.py similarity index 100% rename from compute/v2/usage.py rename to openstack/compute/v2/usage.py diff --git a/compute/v2/volume_attachment.py b/openstack/compute/v2/volume_attachment.py similarity index 100% rename from compute/v2/volume_attachment.py rename to openstack/compute/v2/volume_attachment.py diff --git a/compute/version.py b/openstack/compute/version.py similarity index 100% rename from compute/version.py rename to openstack/compute/version.py diff --git a/config/__init__.py b/openstack/config/__init__.py similarity index 100% rename from config/__init__.py rename to openstack/config/__init__.py diff --git a/config/__pycache__/__init__.cpython-310.pyc b/openstack/config/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from config/__pycache__/__init__.cpython-310.pyc rename to openstack/config/__pycache__/__init__.cpython-310.pyc diff --git a/config/__pycache__/_util.cpython-310.pyc b/openstack/config/__pycache__/_util.cpython-310.pyc similarity index 100% rename from config/__pycache__/_util.cpython-310.pyc rename to openstack/config/__pycache__/_util.cpython-310.pyc diff --git a/config/__pycache__/cloud_config.cpython-310.pyc b/openstack/config/__pycache__/cloud_config.cpython-310.pyc similarity index 100% rename from config/__pycache__/cloud_config.cpython-310.pyc rename to openstack/config/__pycache__/cloud_config.cpython-310.pyc diff --git a/config/__pycache__/cloud_region.cpython-310.pyc b/openstack/config/__pycache__/cloud_region.cpython-310.pyc similarity index 100% rename from config/__pycache__/cloud_region.cpython-310.pyc rename to openstack/config/__pycache__/cloud_region.cpython-310.pyc diff --git a/config/__pycache__/defaults.cpython-310.pyc b/openstack/config/__pycache__/defaults.cpython-310.pyc similarity index 100% rename from config/__pycache__/defaults.cpython-310.pyc rename to openstack/config/__pycache__/defaults.cpython-310.pyc diff --git a/config/__pycache__/exceptions.cpython-310.pyc b/openstack/config/__pycache__/exceptions.cpython-310.pyc similarity index 100% rename from config/__pycache__/exceptions.cpython-310.pyc rename to openstack/config/__pycache__/exceptions.cpython-310.pyc diff --git a/config/__pycache__/loader.cpython-310.pyc b/openstack/config/__pycache__/loader.cpython-310.pyc similarity index 100% rename from config/__pycache__/loader.cpython-310.pyc rename to openstack/config/__pycache__/loader.cpython-310.pyc diff --git a/config/_util.py b/openstack/config/_util.py similarity index 100% rename from config/_util.py rename to openstack/config/_util.py diff --git a/config/cloud_config.py b/openstack/config/cloud_config.py similarity index 100% rename from config/cloud_config.py rename to openstack/config/cloud_config.py diff --git a/config/cloud_region.py b/openstack/config/cloud_region.py similarity index 100% rename from config/cloud_region.py rename to openstack/config/cloud_region.py diff --git a/config/defaults.json b/openstack/config/defaults.json similarity index 100% rename from config/defaults.json rename to openstack/config/defaults.json diff --git a/config/defaults.py b/openstack/config/defaults.py similarity index 100% rename from config/defaults.py rename to openstack/config/defaults.py diff --git a/config/exceptions.py b/openstack/config/exceptions.py similarity index 100% rename from config/exceptions.py rename to openstack/config/exceptions.py diff --git a/config/loader.py b/openstack/config/loader.py similarity index 100% rename from config/loader.py rename to openstack/config/loader.py diff --git a/config/schema.json b/openstack/config/schema.json similarity index 100% rename from config/schema.json rename to openstack/config/schema.json diff --git a/config/vendor-schema.json b/openstack/config/vendor-schema.json similarity index 100% rename from config/vendor-schema.json rename to openstack/config/vendor-schema.json diff --git a/config/vendors/__init__.py b/openstack/config/vendors/__init__.py similarity index 100% rename from config/vendors/__init__.py rename to openstack/config/vendors/__init__.py diff --git a/config/vendors/__pycache__/__init__.cpython-310.pyc b/openstack/config/vendors/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from config/vendors/__pycache__/__init__.cpython-310.pyc rename to openstack/config/vendors/__pycache__/__init__.cpython-310.pyc diff --git a/config/vendors/auro.json b/openstack/config/vendors/auro.json similarity index 100% rename from config/vendors/auro.json rename to openstack/config/vendors/auro.json diff --git a/config/vendors/betacloud.json b/openstack/config/vendors/betacloud.json similarity index 100% rename from config/vendors/betacloud.json rename to openstack/config/vendors/betacloud.json diff --git a/config/vendors/bluebox.json b/openstack/config/vendors/bluebox.json similarity index 100% rename from config/vendors/bluebox.json rename to openstack/config/vendors/bluebox.json diff --git a/config/vendors/catalyst.json b/openstack/config/vendors/catalyst.json similarity index 100% rename from config/vendors/catalyst.json rename to openstack/config/vendors/catalyst.json diff --git a/config/vendors/citycloud.json b/openstack/config/vendors/citycloud.json similarity index 100% rename from config/vendors/citycloud.json rename to openstack/config/vendors/citycloud.json diff --git a/config/vendors/conoha.json b/openstack/config/vendors/conoha.json similarity index 100% rename from config/vendors/conoha.json rename to openstack/config/vendors/conoha.json diff --git a/config/vendors/dreamcompute.json b/openstack/config/vendors/dreamcompute.json similarity index 100% rename from config/vendors/dreamcompute.json rename to openstack/config/vendors/dreamcompute.json diff --git a/config/vendors/elastx.json b/openstack/config/vendors/elastx.json similarity index 100% rename from config/vendors/elastx.json rename to openstack/config/vendors/elastx.json diff --git a/config/vendors/entercloudsuite.json b/openstack/config/vendors/entercloudsuite.json similarity index 100% rename from config/vendors/entercloudsuite.json rename to openstack/config/vendors/entercloudsuite.json diff --git a/config/vendors/fuga.json b/openstack/config/vendors/fuga.json similarity index 100% rename from config/vendors/fuga.json rename to openstack/config/vendors/fuga.json diff --git a/config/vendors/ibmcloud.json b/openstack/config/vendors/ibmcloud.json similarity index 100% rename from config/vendors/ibmcloud.json rename to openstack/config/vendors/ibmcloud.json diff --git a/config/vendors/internap.json b/openstack/config/vendors/internap.json similarity index 100% rename from config/vendors/internap.json rename to openstack/config/vendors/internap.json diff --git a/config/vendors/limestonenetworks.yaml b/openstack/config/vendors/limestonenetworks.yaml similarity index 100% rename from config/vendors/limestonenetworks.yaml rename to openstack/config/vendors/limestonenetworks.yaml diff --git a/config/vendors/otc-swiss.json b/openstack/config/vendors/otc-swiss.json similarity index 100% rename from config/vendors/otc-swiss.json rename to openstack/config/vendors/otc-swiss.json diff --git a/config/vendors/otc.json b/openstack/config/vendors/otc.json similarity index 100% rename from config/vendors/otc.json rename to openstack/config/vendors/otc.json diff --git a/config/vendors/ovh-us.json b/openstack/config/vendors/ovh-us.json similarity index 100% rename from config/vendors/ovh-us.json rename to openstack/config/vendors/ovh-us.json diff --git a/config/vendors/ovh.json b/openstack/config/vendors/ovh.json similarity index 100% rename from config/vendors/ovh.json rename to openstack/config/vendors/ovh.json diff --git a/config/vendors/rackspace.json b/openstack/config/vendors/rackspace.json similarity index 100% rename from config/vendors/rackspace.json rename to openstack/config/vendors/rackspace.json diff --git a/config/vendors/switchengines.json b/openstack/config/vendors/switchengines.json similarity index 100% rename from config/vendors/switchengines.json rename to openstack/config/vendors/switchengines.json diff --git a/config/vendors/ultimum.json b/openstack/config/vendors/ultimum.json similarity index 100% rename from config/vendors/ultimum.json rename to openstack/config/vendors/ultimum.json diff --git a/config/vendors/unitedstack.json b/openstack/config/vendors/unitedstack.json similarity index 100% rename from config/vendors/unitedstack.json rename to openstack/config/vendors/unitedstack.json diff --git a/config/vendors/vexxhost.json b/openstack/config/vendors/vexxhost.json similarity index 100% rename from config/vendors/vexxhost.json rename to openstack/config/vendors/vexxhost.json diff --git a/config/vendors/zetta.json b/openstack/config/vendors/zetta.json similarity index 100% rename from config/vendors/zetta.json rename to openstack/config/vendors/zetta.json diff --git a/connection.py b/openstack/connection.py similarity index 100% rename from connection.py rename to openstack/connection.py diff --git a/identity/v3/__init__.py b/openstack/container_infrastructure_management/__init__.py similarity index 100% rename from identity/v3/__init__.py rename to openstack/container_infrastructure_management/__init__.py diff --git a/container_infrastructure_management/__pycache__/__init__.cpython-310.pyc b/openstack/container_infrastructure_management/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from container_infrastructure_management/__pycache__/__init__.cpython-310.pyc rename to openstack/container_infrastructure_management/__pycache__/__init__.cpython-310.pyc diff --git a/container_infrastructure_management/__pycache__/container_infrastructure_management_service.cpython-310.pyc b/openstack/container_infrastructure_management/__pycache__/container_infrastructure_management_service.cpython-310.pyc similarity index 100% rename from container_infrastructure_management/__pycache__/container_infrastructure_management_service.cpython-310.pyc rename to openstack/container_infrastructure_management/__pycache__/container_infrastructure_management_service.cpython-310.pyc diff --git a/container_infrastructure_management/container_infrastructure_management_service.py b/openstack/container_infrastructure_management/container_infrastructure_management_service.py similarity index 100% rename from container_infrastructure_management/container_infrastructure_management_service.py rename to openstack/container_infrastructure_management/container_infrastructure_management_service.py diff --git a/image/__init__.py b/openstack/container_infrastructure_management/v1/__init__.py similarity index 100% rename from image/__init__.py rename to openstack/container_infrastructure_management/v1/__init__.py diff --git a/container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc b/openstack/container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc diff --git a/container_infrastructure_management/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/container_infrastructure_management/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from container_infrastructure_management/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/container_infrastructure_management/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/container_infrastructure_management/v1/__pycache__/cluster.cpython-310.pyc b/openstack/container_infrastructure_management/v1/__pycache__/cluster.cpython-310.pyc similarity index 100% rename from container_infrastructure_management/v1/__pycache__/cluster.cpython-310.pyc rename to openstack/container_infrastructure_management/v1/__pycache__/cluster.cpython-310.pyc diff --git a/container_infrastructure_management/v1/__pycache__/cluster_certificate.cpython-310.pyc b/openstack/container_infrastructure_management/v1/__pycache__/cluster_certificate.cpython-310.pyc similarity index 100% rename from container_infrastructure_management/v1/__pycache__/cluster_certificate.cpython-310.pyc rename to openstack/container_infrastructure_management/v1/__pycache__/cluster_certificate.cpython-310.pyc diff --git a/container_infrastructure_management/v1/__pycache__/cluster_template.cpython-310.pyc b/openstack/container_infrastructure_management/v1/__pycache__/cluster_template.cpython-310.pyc similarity index 100% rename from container_infrastructure_management/v1/__pycache__/cluster_template.cpython-310.pyc rename to openstack/container_infrastructure_management/v1/__pycache__/cluster_template.cpython-310.pyc diff --git a/container_infrastructure_management/v1/__pycache__/service.cpython-310.pyc b/openstack/container_infrastructure_management/v1/__pycache__/service.cpython-310.pyc similarity index 100% rename from container_infrastructure_management/v1/__pycache__/service.cpython-310.pyc rename to openstack/container_infrastructure_management/v1/__pycache__/service.cpython-310.pyc diff --git a/container_infrastructure_management/v1/_proxy.py b/openstack/container_infrastructure_management/v1/_proxy.py similarity index 100% rename from container_infrastructure_management/v1/_proxy.py rename to openstack/container_infrastructure_management/v1/_proxy.py diff --git a/container_infrastructure_management/v1/cluster.py b/openstack/container_infrastructure_management/v1/cluster.py similarity index 100% rename from container_infrastructure_management/v1/cluster.py rename to openstack/container_infrastructure_management/v1/cluster.py diff --git a/container_infrastructure_management/v1/cluster_certificate.py b/openstack/container_infrastructure_management/v1/cluster_certificate.py similarity index 100% rename from container_infrastructure_management/v1/cluster_certificate.py rename to openstack/container_infrastructure_management/v1/cluster_certificate.py diff --git a/container_infrastructure_management/v1/cluster_template.py b/openstack/container_infrastructure_management/v1/cluster_template.py similarity index 100% rename from container_infrastructure_management/v1/cluster_template.py rename to openstack/container_infrastructure_management/v1/cluster_template.py diff --git a/container_infrastructure_management/v1/service.py b/openstack/container_infrastructure_management/v1/service.py similarity index 100% rename from container_infrastructure_management/v1/service.py rename to openstack/container_infrastructure_management/v1/service.py diff --git a/image/v1/__init__.py b/openstack/database/__init__.py similarity index 100% rename from image/v1/__init__.py rename to openstack/database/__init__.py diff --git a/database/__pycache__/__init__.cpython-310.pyc b/openstack/database/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from database/__pycache__/__init__.cpython-310.pyc rename to openstack/database/__pycache__/__init__.cpython-310.pyc diff --git a/database/__pycache__/database_service.cpython-310.pyc b/openstack/database/__pycache__/database_service.cpython-310.pyc similarity index 100% rename from database/__pycache__/database_service.cpython-310.pyc rename to openstack/database/__pycache__/database_service.cpython-310.pyc diff --git a/database/database_service.py b/openstack/database/database_service.py similarity index 100% rename from database/database_service.py rename to openstack/database/database_service.py diff --git a/image/v2/__init__.py b/openstack/database/v1/__init__.py similarity index 100% rename from image/v2/__init__.py rename to openstack/database/v1/__init__.py diff --git a/database/v1/__pycache__/__init__.cpython-310.pyc b/openstack/database/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from database/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/database/v1/__pycache__/__init__.cpython-310.pyc diff --git a/database/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/database/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from database/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/database/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/database/v1/__pycache__/database.cpython-310.pyc b/openstack/database/v1/__pycache__/database.cpython-310.pyc similarity index 100% rename from database/v1/__pycache__/database.cpython-310.pyc rename to openstack/database/v1/__pycache__/database.cpython-310.pyc diff --git a/database/v1/__pycache__/flavor.cpython-310.pyc b/openstack/database/v1/__pycache__/flavor.cpython-310.pyc similarity index 100% rename from database/v1/__pycache__/flavor.cpython-310.pyc rename to openstack/database/v1/__pycache__/flavor.cpython-310.pyc diff --git a/database/v1/__pycache__/instance.cpython-310.pyc b/openstack/database/v1/__pycache__/instance.cpython-310.pyc similarity index 100% rename from database/v1/__pycache__/instance.cpython-310.pyc rename to openstack/database/v1/__pycache__/instance.cpython-310.pyc diff --git a/database/v1/__pycache__/user.cpython-310.pyc b/openstack/database/v1/__pycache__/user.cpython-310.pyc similarity index 100% rename from database/v1/__pycache__/user.cpython-310.pyc rename to openstack/database/v1/__pycache__/user.cpython-310.pyc diff --git a/database/v1/_proxy.py b/openstack/database/v1/_proxy.py similarity index 100% rename from database/v1/_proxy.py rename to openstack/database/v1/_proxy.py diff --git a/database/v1/database.py b/openstack/database/v1/database.py similarity index 100% rename from database/v1/database.py rename to openstack/database/v1/database.py diff --git a/database/v1/flavor.py b/openstack/database/v1/flavor.py similarity index 100% rename from database/v1/flavor.py rename to openstack/database/v1/flavor.py diff --git a/database/v1/instance.py b/openstack/database/v1/instance.py similarity index 100% rename from database/v1/instance.py rename to openstack/database/v1/instance.py diff --git a/database/v1/user.py b/openstack/database/v1/user.py similarity index 100% rename from database/v1/user.py rename to openstack/database/v1/user.py diff --git a/instance_ha/__init__.py b/openstack/dns/__init__.py similarity index 100% rename from instance_ha/__init__.py rename to openstack/dns/__init__.py diff --git a/dns/__pycache__/__init__.cpython-310.pyc b/openstack/dns/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from dns/__pycache__/__init__.cpython-310.pyc rename to openstack/dns/__pycache__/__init__.cpython-310.pyc diff --git a/dns/__pycache__/dns_service.cpython-310.pyc b/openstack/dns/__pycache__/dns_service.cpython-310.pyc similarity index 100% rename from dns/__pycache__/dns_service.cpython-310.pyc rename to openstack/dns/__pycache__/dns_service.cpython-310.pyc diff --git a/dns/__pycache__/version.cpython-310.pyc b/openstack/dns/__pycache__/version.cpython-310.pyc similarity index 100% rename from dns/__pycache__/version.cpython-310.pyc rename to openstack/dns/__pycache__/version.cpython-310.pyc diff --git a/dns/dns_service.py b/openstack/dns/dns_service.py similarity index 100% rename from dns/dns_service.py rename to openstack/dns/dns_service.py diff --git a/instance_ha/v1/__init__.py b/openstack/dns/v2/__init__.py similarity index 100% rename from instance_ha/v1/__init__.py rename to openstack/dns/v2/__init__.py diff --git a/dns/v2/__pycache__/__init__.cpython-310.pyc b/openstack/dns/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/dns/v2/__pycache__/__init__.cpython-310.pyc diff --git a/dns/v2/__pycache__/_base.cpython-310.pyc b/openstack/dns/v2/__pycache__/_base.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/_base.cpython-310.pyc rename to openstack/dns/v2/__pycache__/_base.cpython-310.pyc diff --git a/dns/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/dns/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/dns/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/dns/v2/__pycache__/floating_ip.cpython-310.pyc b/openstack/dns/v2/__pycache__/floating_ip.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/floating_ip.cpython-310.pyc rename to openstack/dns/v2/__pycache__/floating_ip.cpython-310.pyc diff --git a/dns/v2/__pycache__/recordset.cpython-310.pyc b/openstack/dns/v2/__pycache__/recordset.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/recordset.cpython-310.pyc rename to openstack/dns/v2/__pycache__/recordset.cpython-310.pyc diff --git a/dns/v2/__pycache__/zone.cpython-310.pyc b/openstack/dns/v2/__pycache__/zone.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/zone.cpython-310.pyc rename to openstack/dns/v2/__pycache__/zone.cpython-310.pyc diff --git a/dns/v2/__pycache__/zone_export.cpython-310.pyc b/openstack/dns/v2/__pycache__/zone_export.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/zone_export.cpython-310.pyc rename to openstack/dns/v2/__pycache__/zone_export.cpython-310.pyc diff --git a/dns/v2/__pycache__/zone_import.cpython-310.pyc b/openstack/dns/v2/__pycache__/zone_import.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/zone_import.cpython-310.pyc rename to openstack/dns/v2/__pycache__/zone_import.cpython-310.pyc diff --git a/dns/v2/__pycache__/zone_share.cpython-310.pyc b/openstack/dns/v2/__pycache__/zone_share.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/zone_share.cpython-310.pyc rename to openstack/dns/v2/__pycache__/zone_share.cpython-310.pyc diff --git a/dns/v2/__pycache__/zone_transfer.cpython-310.pyc b/openstack/dns/v2/__pycache__/zone_transfer.cpython-310.pyc similarity index 100% rename from dns/v2/__pycache__/zone_transfer.cpython-310.pyc rename to openstack/dns/v2/__pycache__/zone_transfer.cpython-310.pyc diff --git a/dns/v2/_base.py b/openstack/dns/v2/_base.py similarity index 100% rename from dns/v2/_base.py rename to openstack/dns/v2/_base.py diff --git a/dns/v2/_proxy.py b/openstack/dns/v2/_proxy.py similarity index 100% rename from dns/v2/_proxy.py rename to openstack/dns/v2/_proxy.py diff --git a/dns/v2/floating_ip.py b/openstack/dns/v2/floating_ip.py similarity index 100% rename from dns/v2/floating_ip.py rename to openstack/dns/v2/floating_ip.py diff --git a/dns/v2/recordset.py b/openstack/dns/v2/recordset.py similarity index 100% rename from dns/v2/recordset.py rename to openstack/dns/v2/recordset.py diff --git a/dns/v2/zone.py b/openstack/dns/v2/zone.py similarity index 100% rename from dns/v2/zone.py rename to openstack/dns/v2/zone.py diff --git a/dns/v2/zone_export.py b/openstack/dns/v2/zone_export.py similarity index 100% rename from dns/v2/zone_export.py rename to openstack/dns/v2/zone_export.py diff --git a/dns/v2/zone_import.py b/openstack/dns/v2/zone_import.py similarity index 100% rename from dns/v2/zone_import.py rename to openstack/dns/v2/zone_import.py diff --git a/dns/v2/zone_share.py b/openstack/dns/v2/zone_share.py similarity index 100% rename from dns/v2/zone_share.py rename to openstack/dns/v2/zone_share.py diff --git a/dns/v2/zone_transfer.py b/openstack/dns/v2/zone_transfer.py similarity index 100% rename from dns/v2/zone_transfer.py rename to openstack/dns/v2/zone_transfer.py diff --git a/dns/version.py b/openstack/dns/version.py similarity index 100% rename from dns/version.py rename to openstack/dns/version.py diff --git a/exceptions.py b/openstack/exceptions.py similarity index 100% rename from exceptions.py rename to openstack/exceptions.py diff --git a/key_manager/__init__.py b/openstack/fixture/__init__.py similarity index 100% rename from key_manager/__init__.py rename to openstack/fixture/__init__.py diff --git a/fixture/__pycache__/__init__.cpython-310.pyc b/openstack/fixture/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from fixture/__pycache__/__init__.cpython-310.pyc rename to openstack/fixture/__pycache__/__init__.cpython-310.pyc diff --git a/fixture/__pycache__/connection.cpython-310.pyc b/openstack/fixture/__pycache__/connection.cpython-310.pyc similarity index 100% rename from fixture/__pycache__/connection.cpython-310.pyc rename to openstack/fixture/__pycache__/connection.cpython-310.pyc diff --git a/fixture/connection.py b/openstack/fixture/connection.py similarity index 100% rename from fixture/connection.py rename to openstack/fixture/connection.py diff --git a/format.py b/openstack/format.py similarity index 100% rename from format.py rename to openstack/format.py diff --git a/key_manager/v1/__init__.py b/openstack/identity/__init__.py similarity index 100% rename from key_manager/v1/__init__.py rename to openstack/identity/__init__.py diff --git a/identity/__pycache__/__init__.cpython-310.pyc b/openstack/identity/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from identity/__pycache__/__init__.cpython-310.pyc rename to openstack/identity/__pycache__/__init__.cpython-310.pyc diff --git a/identity/__pycache__/identity_service.cpython-310.pyc b/openstack/identity/__pycache__/identity_service.cpython-310.pyc similarity index 100% rename from identity/__pycache__/identity_service.cpython-310.pyc rename to openstack/identity/__pycache__/identity_service.cpython-310.pyc diff --git a/identity/__pycache__/version.cpython-310.pyc b/openstack/identity/__pycache__/version.cpython-310.pyc similarity index 100% rename from identity/__pycache__/version.cpython-310.pyc rename to openstack/identity/__pycache__/version.cpython-310.pyc diff --git a/identity/identity_service.py b/openstack/identity/identity_service.py similarity index 100% rename from identity/identity_service.py rename to openstack/identity/identity_service.py diff --git a/load_balancer/__init__.py b/openstack/identity/v2/__init__.py similarity index 100% rename from load_balancer/__init__.py rename to openstack/identity/v2/__init__.py diff --git a/identity/v2/__pycache__/__init__.cpython-310.pyc b/openstack/identity/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from identity/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/identity/v2/__pycache__/__init__.cpython-310.pyc diff --git a/identity/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/identity/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from identity/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/identity/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/identity/v2/__pycache__/extension.cpython-310.pyc b/openstack/identity/v2/__pycache__/extension.cpython-310.pyc similarity index 100% rename from identity/v2/__pycache__/extension.cpython-310.pyc rename to openstack/identity/v2/__pycache__/extension.cpython-310.pyc diff --git a/identity/v2/__pycache__/role.cpython-310.pyc b/openstack/identity/v2/__pycache__/role.cpython-310.pyc similarity index 100% rename from identity/v2/__pycache__/role.cpython-310.pyc rename to openstack/identity/v2/__pycache__/role.cpython-310.pyc diff --git a/identity/v2/__pycache__/tenant.cpython-310.pyc b/openstack/identity/v2/__pycache__/tenant.cpython-310.pyc similarity index 100% rename from identity/v2/__pycache__/tenant.cpython-310.pyc rename to openstack/identity/v2/__pycache__/tenant.cpython-310.pyc diff --git a/identity/v2/__pycache__/user.cpython-310.pyc b/openstack/identity/v2/__pycache__/user.cpython-310.pyc similarity index 100% rename from identity/v2/__pycache__/user.cpython-310.pyc rename to openstack/identity/v2/__pycache__/user.cpython-310.pyc diff --git a/identity/v2/_proxy.py b/openstack/identity/v2/_proxy.py similarity index 100% rename from identity/v2/_proxy.py rename to openstack/identity/v2/_proxy.py diff --git a/identity/v2/extension.py b/openstack/identity/v2/extension.py similarity index 100% rename from identity/v2/extension.py rename to openstack/identity/v2/extension.py diff --git a/identity/v2/role.py b/openstack/identity/v2/role.py similarity index 100% rename from identity/v2/role.py rename to openstack/identity/v2/role.py diff --git a/identity/v2/tenant.py b/openstack/identity/v2/tenant.py similarity index 100% rename from identity/v2/tenant.py rename to openstack/identity/v2/tenant.py diff --git a/identity/v2/user.py b/openstack/identity/v2/user.py similarity index 100% rename from identity/v2/user.py rename to openstack/identity/v2/user.py diff --git a/load_balancer/v2/__init__.py b/openstack/identity/v3/__init__.py similarity index 100% rename from load_balancer/v2/__init__.py rename to openstack/identity/v3/__init__.py diff --git a/identity/v3/__pycache__/__init__.cpython-310.pyc b/openstack/identity/v3/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/__init__.cpython-310.pyc rename to openstack/identity/v3/__pycache__/__init__.cpython-310.pyc diff --git a/identity/v3/__pycache__/_proxy.cpython-310.pyc b/openstack/identity/v3/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/_proxy.cpython-310.pyc rename to openstack/identity/v3/__pycache__/_proxy.cpython-310.pyc diff --git a/identity/v3/__pycache__/application_credential.cpython-310.pyc b/openstack/identity/v3/__pycache__/application_credential.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/application_credential.cpython-310.pyc rename to openstack/identity/v3/__pycache__/application_credential.cpython-310.pyc diff --git a/identity/v3/__pycache__/credential.cpython-310.pyc b/openstack/identity/v3/__pycache__/credential.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/credential.cpython-310.pyc rename to openstack/identity/v3/__pycache__/credential.cpython-310.pyc diff --git a/identity/v3/__pycache__/domain.cpython-310.pyc b/openstack/identity/v3/__pycache__/domain.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/domain.cpython-310.pyc rename to openstack/identity/v3/__pycache__/domain.cpython-310.pyc diff --git a/identity/v3/__pycache__/domain_config.cpython-310.pyc b/openstack/identity/v3/__pycache__/domain_config.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/domain_config.cpython-310.pyc rename to openstack/identity/v3/__pycache__/domain_config.cpython-310.pyc diff --git a/identity/v3/__pycache__/endpoint.cpython-310.pyc b/openstack/identity/v3/__pycache__/endpoint.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/endpoint.cpython-310.pyc rename to openstack/identity/v3/__pycache__/endpoint.cpython-310.pyc diff --git a/identity/v3/__pycache__/federation_protocol.cpython-310.pyc b/openstack/identity/v3/__pycache__/federation_protocol.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/federation_protocol.cpython-310.pyc rename to openstack/identity/v3/__pycache__/federation_protocol.cpython-310.pyc diff --git a/identity/v3/__pycache__/group.cpython-310.pyc b/openstack/identity/v3/__pycache__/group.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/group.cpython-310.pyc rename to openstack/identity/v3/__pycache__/group.cpython-310.pyc diff --git a/identity/v3/__pycache__/identity_provider.cpython-310.pyc b/openstack/identity/v3/__pycache__/identity_provider.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/identity_provider.cpython-310.pyc rename to openstack/identity/v3/__pycache__/identity_provider.cpython-310.pyc diff --git a/identity/v3/__pycache__/limit.cpython-310.pyc b/openstack/identity/v3/__pycache__/limit.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/limit.cpython-310.pyc rename to openstack/identity/v3/__pycache__/limit.cpython-310.pyc diff --git a/identity/v3/__pycache__/mapping.cpython-310.pyc b/openstack/identity/v3/__pycache__/mapping.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/mapping.cpython-310.pyc rename to openstack/identity/v3/__pycache__/mapping.cpython-310.pyc diff --git a/identity/v3/__pycache__/policy.cpython-310.pyc b/openstack/identity/v3/__pycache__/policy.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/policy.cpython-310.pyc rename to openstack/identity/v3/__pycache__/policy.cpython-310.pyc diff --git a/identity/v3/__pycache__/project.cpython-310.pyc b/openstack/identity/v3/__pycache__/project.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/project.cpython-310.pyc rename to openstack/identity/v3/__pycache__/project.cpython-310.pyc diff --git a/identity/v3/__pycache__/region.cpython-310.pyc b/openstack/identity/v3/__pycache__/region.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/region.cpython-310.pyc rename to openstack/identity/v3/__pycache__/region.cpython-310.pyc diff --git a/identity/v3/__pycache__/registered_limit.cpython-310.pyc b/openstack/identity/v3/__pycache__/registered_limit.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/registered_limit.cpython-310.pyc rename to openstack/identity/v3/__pycache__/registered_limit.cpython-310.pyc diff --git a/identity/v3/__pycache__/role.cpython-310.pyc b/openstack/identity/v3/__pycache__/role.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/role.cpython-310.pyc rename to openstack/identity/v3/__pycache__/role.cpython-310.pyc diff --git a/identity/v3/__pycache__/role_assignment.cpython-310.pyc b/openstack/identity/v3/__pycache__/role_assignment.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/role_assignment.cpython-310.pyc rename to openstack/identity/v3/__pycache__/role_assignment.cpython-310.pyc diff --git a/identity/v3/__pycache__/role_domain_group_assignment.cpython-310.pyc b/openstack/identity/v3/__pycache__/role_domain_group_assignment.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/role_domain_group_assignment.cpython-310.pyc rename to openstack/identity/v3/__pycache__/role_domain_group_assignment.cpython-310.pyc diff --git a/identity/v3/__pycache__/role_domain_user_assignment.cpython-310.pyc b/openstack/identity/v3/__pycache__/role_domain_user_assignment.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/role_domain_user_assignment.cpython-310.pyc rename to openstack/identity/v3/__pycache__/role_domain_user_assignment.cpython-310.pyc diff --git a/identity/v3/__pycache__/role_project_group_assignment.cpython-310.pyc b/openstack/identity/v3/__pycache__/role_project_group_assignment.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/role_project_group_assignment.cpython-310.pyc rename to openstack/identity/v3/__pycache__/role_project_group_assignment.cpython-310.pyc diff --git a/identity/v3/__pycache__/role_project_user_assignment.cpython-310.pyc b/openstack/identity/v3/__pycache__/role_project_user_assignment.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/role_project_user_assignment.cpython-310.pyc rename to openstack/identity/v3/__pycache__/role_project_user_assignment.cpython-310.pyc diff --git a/identity/v3/__pycache__/role_system_group_assignment.cpython-310.pyc b/openstack/identity/v3/__pycache__/role_system_group_assignment.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/role_system_group_assignment.cpython-310.pyc rename to openstack/identity/v3/__pycache__/role_system_group_assignment.cpython-310.pyc diff --git a/identity/v3/__pycache__/role_system_user_assignment.cpython-310.pyc b/openstack/identity/v3/__pycache__/role_system_user_assignment.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/role_system_user_assignment.cpython-310.pyc rename to openstack/identity/v3/__pycache__/role_system_user_assignment.cpython-310.pyc diff --git a/identity/v3/__pycache__/service.cpython-310.pyc b/openstack/identity/v3/__pycache__/service.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/service.cpython-310.pyc rename to openstack/identity/v3/__pycache__/service.cpython-310.pyc diff --git a/identity/v3/__pycache__/system.cpython-310.pyc b/openstack/identity/v3/__pycache__/system.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/system.cpython-310.pyc rename to openstack/identity/v3/__pycache__/system.cpython-310.pyc diff --git a/identity/v3/__pycache__/trust.cpython-310.pyc b/openstack/identity/v3/__pycache__/trust.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/trust.cpython-310.pyc rename to openstack/identity/v3/__pycache__/trust.cpython-310.pyc diff --git a/identity/v3/__pycache__/user.cpython-310.pyc b/openstack/identity/v3/__pycache__/user.cpython-310.pyc similarity index 100% rename from identity/v3/__pycache__/user.cpython-310.pyc rename to openstack/identity/v3/__pycache__/user.cpython-310.pyc diff --git a/identity/v3/_proxy.py b/openstack/identity/v3/_proxy.py similarity index 100% rename from identity/v3/_proxy.py rename to openstack/identity/v3/_proxy.py diff --git a/identity/v3/application_credential.py b/openstack/identity/v3/application_credential.py similarity index 100% rename from identity/v3/application_credential.py rename to openstack/identity/v3/application_credential.py diff --git a/identity/v3/credential.py b/openstack/identity/v3/credential.py similarity index 100% rename from identity/v3/credential.py rename to openstack/identity/v3/credential.py diff --git a/identity/v3/domain.py b/openstack/identity/v3/domain.py similarity index 100% rename from identity/v3/domain.py rename to openstack/identity/v3/domain.py diff --git a/identity/v3/domain_config.py b/openstack/identity/v3/domain_config.py similarity index 100% rename from identity/v3/domain_config.py rename to openstack/identity/v3/domain_config.py diff --git a/identity/v3/endpoint.py b/openstack/identity/v3/endpoint.py similarity index 100% rename from identity/v3/endpoint.py rename to openstack/identity/v3/endpoint.py diff --git a/identity/v3/federation_protocol.py b/openstack/identity/v3/federation_protocol.py similarity index 100% rename from identity/v3/federation_protocol.py rename to openstack/identity/v3/federation_protocol.py diff --git a/identity/v3/group.py b/openstack/identity/v3/group.py similarity index 100% rename from identity/v3/group.py rename to openstack/identity/v3/group.py diff --git a/identity/v3/identity_provider.py b/openstack/identity/v3/identity_provider.py similarity index 100% rename from identity/v3/identity_provider.py rename to openstack/identity/v3/identity_provider.py diff --git a/identity/v3/limit.py b/openstack/identity/v3/limit.py similarity index 100% rename from identity/v3/limit.py rename to openstack/identity/v3/limit.py diff --git a/identity/v3/mapping.py b/openstack/identity/v3/mapping.py similarity index 100% rename from identity/v3/mapping.py rename to openstack/identity/v3/mapping.py diff --git a/identity/v3/policy.py b/openstack/identity/v3/policy.py similarity index 100% rename from identity/v3/policy.py rename to openstack/identity/v3/policy.py diff --git a/identity/v3/project.py b/openstack/identity/v3/project.py similarity index 100% rename from identity/v3/project.py rename to openstack/identity/v3/project.py diff --git a/identity/v3/region.py b/openstack/identity/v3/region.py similarity index 100% rename from identity/v3/region.py rename to openstack/identity/v3/region.py diff --git a/identity/v3/registered_limit.py b/openstack/identity/v3/registered_limit.py similarity index 100% rename from identity/v3/registered_limit.py rename to openstack/identity/v3/registered_limit.py diff --git a/identity/v3/role.py b/openstack/identity/v3/role.py similarity index 100% rename from identity/v3/role.py rename to openstack/identity/v3/role.py diff --git a/identity/v3/role_assignment.py b/openstack/identity/v3/role_assignment.py similarity index 100% rename from identity/v3/role_assignment.py rename to openstack/identity/v3/role_assignment.py diff --git a/identity/v3/role_domain_group_assignment.py b/openstack/identity/v3/role_domain_group_assignment.py similarity index 100% rename from identity/v3/role_domain_group_assignment.py rename to openstack/identity/v3/role_domain_group_assignment.py diff --git a/identity/v3/role_domain_user_assignment.py b/openstack/identity/v3/role_domain_user_assignment.py similarity index 100% rename from identity/v3/role_domain_user_assignment.py rename to openstack/identity/v3/role_domain_user_assignment.py diff --git a/identity/v3/role_project_group_assignment.py b/openstack/identity/v3/role_project_group_assignment.py similarity index 100% rename from identity/v3/role_project_group_assignment.py rename to openstack/identity/v3/role_project_group_assignment.py diff --git a/identity/v3/role_project_user_assignment.py b/openstack/identity/v3/role_project_user_assignment.py similarity index 100% rename from identity/v3/role_project_user_assignment.py rename to openstack/identity/v3/role_project_user_assignment.py diff --git a/identity/v3/role_system_group_assignment.py b/openstack/identity/v3/role_system_group_assignment.py similarity index 100% rename from identity/v3/role_system_group_assignment.py rename to openstack/identity/v3/role_system_group_assignment.py diff --git a/identity/v3/role_system_user_assignment.py b/openstack/identity/v3/role_system_user_assignment.py similarity index 100% rename from identity/v3/role_system_user_assignment.py rename to openstack/identity/v3/role_system_user_assignment.py diff --git a/identity/v3/service.py b/openstack/identity/v3/service.py similarity index 100% rename from identity/v3/service.py rename to openstack/identity/v3/service.py diff --git a/identity/v3/system.py b/openstack/identity/v3/system.py similarity index 100% rename from identity/v3/system.py rename to openstack/identity/v3/system.py diff --git a/identity/v3/trust.py b/openstack/identity/v3/trust.py similarity index 100% rename from identity/v3/trust.py rename to openstack/identity/v3/trust.py diff --git a/identity/v3/user.py b/openstack/identity/v3/user.py similarity index 100% rename from identity/v3/user.py rename to openstack/identity/v3/user.py diff --git a/identity/version.py b/openstack/identity/version.py similarity index 100% rename from identity/version.py rename to openstack/identity/version.py diff --git a/message/__init__.py b/openstack/image/__init__.py similarity index 100% rename from message/__init__.py rename to openstack/image/__init__.py diff --git a/image/__pycache__/__init__.cpython-310.pyc b/openstack/image/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from image/__pycache__/__init__.cpython-310.pyc rename to openstack/image/__pycache__/__init__.cpython-310.pyc diff --git a/image/__pycache__/_download.cpython-310.pyc b/openstack/image/__pycache__/_download.cpython-310.pyc similarity index 100% rename from image/__pycache__/_download.cpython-310.pyc rename to openstack/image/__pycache__/_download.cpython-310.pyc diff --git a/image/__pycache__/image_service.cpython-310.pyc b/openstack/image/__pycache__/image_service.cpython-310.pyc similarity index 100% rename from image/__pycache__/image_service.cpython-310.pyc rename to openstack/image/__pycache__/image_service.cpython-310.pyc diff --git a/image/__pycache__/image_signer.cpython-310.pyc b/openstack/image/__pycache__/image_signer.cpython-310.pyc similarity index 100% rename from image/__pycache__/image_signer.cpython-310.pyc rename to openstack/image/__pycache__/image_signer.cpython-310.pyc diff --git a/image/__pycache__/iterable_chunked_file.cpython-310.pyc b/openstack/image/__pycache__/iterable_chunked_file.cpython-310.pyc similarity index 100% rename from image/__pycache__/iterable_chunked_file.cpython-310.pyc rename to openstack/image/__pycache__/iterable_chunked_file.cpython-310.pyc diff --git a/image/_download.py b/openstack/image/_download.py similarity index 100% rename from image/_download.py rename to openstack/image/_download.py diff --git a/image/image_service.py b/openstack/image/image_service.py similarity index 100% rename from image/image_service.py rename to openstack/image/image_service.py diff --git a/image/image_signer.py b/openstack/image/image_signer.py similarity index 100% rename from image/image_signer.py rename to openstack/image/image_signer.py diff --git a/image/iterable_chunked_file.py b/openstack/image/iterable_chunked_file.py similarity index 100% rename from image/iterable_chunked_file.py rename to openstack/image/iterable_chunked_file.py diff --git a/message/v2/__init__.py b/openstack/image/v1/__init__.py similarity index 100% rename from message/v2/__init__.py rename to openstack/image/v1/__init__.py diff --git a/image/v1/__pycache__/__init__.cpython-310.pyc b/openstack/image/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from image/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/image/v1/__pycache__/__init__.cpython-310.pyc diff --git a/image/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/image/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from image/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/image/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/image/v1/__pycache__/image.cpython-310.pyc b/openstack/image/v1/__pycache__/image.cpython-310.pyc similarity index 100% rename from image/v1/__pycache__/image.cpython-310.pyc rename to openstack/image/v1/__pycache__/image.cpython-310.pyc diff --git a/image/v1/_proxy.py b/openstack/image/v1/_proxy.py similarity index 100% rename from image/v1/_proxy.py rename to openstack/image/v1/_proxy.py diff --git a/image/v1/image.py b/openstack/image/v1/image.py similarity index 100% rename from image/v1/image.py rename to openstack/image/v1/image.py diff --git a/network/__init__.py b/openstack/image/v2/__init__.py similarity index 100% rename from network/__init__.py rename to openstack/image/v2/__init__.py diff --git a/image/v2/__pycache__/__init__.cpython-310.pyc b/openstack/image/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/image/v2/__pycache__/__init__.cpython-310.pyc diff --git a/image/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/image/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/image/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/image/v2/__pycache__/cache.cpython-310.pyc b/openstack/image/v2/__pycache__/cache.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/cache.cpython-310.pyc rename to openstack/image/v2/__pycache__/cache.cpython-310.pyc diff --git a/image/v2/__pycache__/image.cpython-310.pyc b/openstack/image/v2/__pycache__/image.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/image.cpython-310.pyc rename to openstack/image/v2/__pycache__/image.cpython-310.pyc diff --git a/image/v2/__pycache__/member.cpython-310.pyc b/openstack/image/v2/__pycache__/member.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/member.cpython-310.pyc rename to openstack/image/v2/__pycache__/member.cpython-310.pyc diff --git a/image/v2/__pycache__/metadef_namespace.cpython-310.pyc b/openstack/image/v2/__pycache__/metadef_namespace.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/metadef_namespace.cpython-310.pyc rename to openstack/image/v2/__pycache__/metadef_namespace.cpython-310.pyc diff --git a/image/v2/__pycache__/metadef_object.cpython-310.pyc b/openstack/image/v2/__pycache__/metadef_object.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/metadef_object.cpython-310.pyc rename to openstack/image/v2/__pycache__/metadef_object.cpython-310.pyc diff --git a/image/v2/__pycache__/metadef_property.cpython-310.pyc b/openstack/image/v2/__pycache__/metadef_property.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/metadef_property.cpython-310.pyc rename to openstack/image/v2/__pycache__/metadef_property.cpython-310.pyc diff --git a/image/v2/__pycache__/metadef_resource_type.cpython-310.pyc b/openstack/image/v2/__pycache__/metadef_resource_type.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/metadef_resource_type.cpython-310.pyc rename to openstack/image/v2/__pycache__/metadef_resource_type.cpython-310.pyc diff --git a/image/v2/__pycache__/metadef_schema.cpython-310.pyc b/openstack/image/v2/__pycache__/metadef_schema.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/metadef_schema.cpython-310.pyc rename to openstack/image/v2/__pycache__/metadef_schema.cpython-310.pyc diff --git a/image/v2/__pycache__/schema.cpython-310.pyc b/openstack/image/v2/__pycache__/schema.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/schema.cpython-310.pyc rename to openstack/image/v2/__pycache__/schema.cpython-310.pyc diff --git a/image/v2/__pycache__/service_info.cpython-310.pyc b/openstack/image/v2/__pycache__/service_info.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/service_info.cpython-310.pyc rename to openstack/image/v2/__pycache__/service_info.cpython-310.pyc diff --git a/image/v2/__pycache__/task.cpython-310.pyc b/openstack/image/v2/__pycache__/task.cpython-310.pyc similarity index 100% rename from image/v2/__pycache__/task.cpython-310.pyc rename to openstack/image/v2/__pycache__/task.cpython-310.pyc diff --git a/image/v2/_proxy.py b/openstack/image/v2/_proxy.py similarity index 100% rename from image/v2/_proxy.py rename to openstack/image/v2/_proxy.py diff --git a/image/v2/cache.py b/openstack/image/v2/cache.py similarity index 100% rename from image/v2/cache.py rename to openstack/image/v2/cache.py diff --git a/image/v2/image.py b/openstack/image/v2/image.py similarity index 100% rename from image/v2/image.py rename to openstack/image/v2/image.py diff --git a/image/v2/member.py b/openstack/image/v2/member.py similarity index 100% rename from image/v2/member.py rename to openstack/image/v2/member.py diff --git a/image/v2/metadef_namespace.py b/openstack/image/v2/metadef_namespace.py similarity index 100% rename from image/v2/metadef_namespace.py rename to openstack/image/v2/metadef_namespace.py diff --git a/image/v2/metadef_object.py b/openstack/image/v2/metadef_object.py similarity index 100% rename from image/v2/metadef_object.py rename to openstack/image/v2/metadef_object.py diff --git a/image/v2/metadef_property.py b/openstack/image/v2/metadef_property.py similarity index 100% rename from image/v2/metadef_property.py rename to openstack/image/v2/metadef_property.py diff --git a/image/v2/metadef_resource_type.py b/openstack/image/v2/metadef_resource_type.py similarity index 100% rename from image/v2/metadef_resource_type.py rename to openstack/image/v2/metadef_resource_type.py diff --git a/image/v2/metadef_schema.py b/openstack/image/v2/metadef_schema.py similarity index 100% rename from image/v2/metadef_schema.py rename to openstack/image/v2/metadef_schema.py diff --git a/image/v2/schema.py b/openstack/image/v2/schema.py similarity index 100% rename from image/v2/schema.py rename to openstack/image/v2/schema.py diff --git a/image/v2/service_info.py b/openstack/image/v2/service_info.py similarity index 100% rename from image/v2/service_info.py rename to openstack/image/v2/service_info.py diff --git a/image/v2/task.py b/openstack/image/v2/task.py similarity index 100% rename from image/v2/task.py rename to openstack/image/v2/task.py diff --git a/network/v2/__init__.py b/openstack/instance_ha/__init__.py similarity index 100% rename from network/v2/__init__.py rename to openstack/instance_ha/__init__.py diff --git a/instance_ha/__pycache__/__init__.cpython-310.pyc b/openstack/instance_ha/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from instance_ha/__pycache__/__init__.cpython-310.pyc rename to openstack/instance_ha/__pycache__/__init__.cpython-310.pyc diff --git a/instance_ha/__pycache__/instance_ha_service.cpython-310.pyc b/openstack/instance_ha/__pycache__/instance_ha_service.cpython-310.pyc similarity index 100% rename from instance_ha/__pycache__/instance_ha_service.cpython-310.pyc rename to openstack/instance_ha/__pycache__/instance_ha_service.cpython-310.pyc diff --git a/instance_ha/instance_ha_service.py b/openstack/instance_ha/instance_ha_service.py similarity index 100% rename from instance_ha/instance_ha_service.py rename to openstack/instance_ha/instance_ha_service.py diff --git a/object_store/__init__.py b/openstack/instance_ha/v1/__init__.py similarity index 100% rename from object_store/__init__.py rename to openstack/instance_ha/v1/__init__.py diff --git a/instance_ha/v1/__pycache__/__init__.cpython-310.pyc b/openstack/instance_ha/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from instance_ha/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/instance_ha/v1/__pycache__/__init__.cpython-310.pyc diff --git a/instance_ha/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/instance_ha/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from instance_ha/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/instance_ha/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/instance_ha/v1/__pycache__/host.cpython-310.pyc b/openstack/instance_ha/v1/__pycache__/host.cpython-310.pyc similarity index 100% rename from instance_ha/v1/__pycache__/host.cpython-310.pyc rename to openstack/instance_ha/v1/__pycache__/host.cpython-310.pyc diff --git a/instance_ha/v1/__pycache__/notification.cpython-310.pyc b/openstack/instance_ha/v1/__pycache__/notification.cpython-310.pyc similarity index 100% rename from instance_ha/v1/__pycache__/notification.cpython-310.pyc rename to openstack/instance_ha/v1/__pycache__/notification.cpython-310.pyc diff --git a/instance_ha/v1/__pycache__/segment.cpython-310.pyc b/openstack/instance_ha/v1/__pycache__/segment.cpython-310.pyc similarity index 100% rename from instance_ha/v1/__pycache__/segment.cpython-310.pyc rename to openstack/instance_ha/v1/__pycache__/segment.cpython-310.pyc diff --git a/instance_ha/v1/__pycache__/vmove.cpython-310.pyc b/openstack/instance_ha/v1/__pycache__/vmove.cpython-310.pyc similarity index 100% rename from instance_ha/v1/__pycache__/vmove.cpython-310.pyc rename to openstack/instance_ha/v1/__pycache__/vmove.cpython-310.pyc diff --git a/instance_ha/v1/_proxy.py b/openstack/instance_ha/v1/_proxy.py similarity index 100% rename from instance_ha/v1/_proxy.py rename to openstack/instance_ha/v1/_proxy.py diff --git a/instance_ha/v1/host.py b/openstack/instance_ha/v1/host.py similarity index 100% rename from instance_ha/v1/host.py rename to openstack/instance_ha/v1/host.py diff --git a/instance_ha/v1/notification.py b/openstack/instance_ha/v1/notification.py similarity index 100% rename from instance_ha/v1/notification.py rename to openstack/instance_ha/v1/notification.py diff --git a/instance_ha/v1/segment.py b/openstack/instance_ha/v1/segment.py similarity index 100% rename from instance_ha/v1/segment.py rename to openstack/instance_ha/v1/segment.py diff --git a/instance_ha/v1/vmove.py b/openstack/instance_ha/v1/vmove.py similarity index 100% rename from instance_ha/v1/vmove.py rename to openstack/instance_ha/v1/vmove.py diff --git a/object_store/v1/__init__.py b/openstack/key_manager/__init__.py similarity index 100% rename from object_store/v1/__init__.py rename to openstack/key_manager/__init__.py diff --git a/key_manager/__pycache__/__init__.cpython-310.pyc b/openstack/key_manager/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from key_manager/__pycache__/__init__.cpython-310.pyc rename to openstack/key_manager/__pycache__/__init__.cpython-310.pyc diff --git a/key_manager/__pycache__/key_manager_service.cpython-310.pyc b/openstack/key_manager/__pycache__/key_manager_service.cpython-310.pyc similarity index 100% rename from key_manager/__pycache__/key_manager_service.cpython-310.pyc rename to openstack/key_manager/__pycache__/key_manager_service.cpython-310.pyc diff --git a/key_manager/key_manager_service.py b/openstack/key_manager/key_manager_service.py similarity index 100% rename from key_manager/key_manager_service.py rename to openstack/key_manager/key_manager_service.py diff --git a/orchestration/__init__.py b/openstack/key_manager/v1/__init__.py similarity index 100% rename from orchestration/__init__.py rename to openstack/key_manager/v1/__init__.py diff --git a/key_manager/v1/__pycache__/__init__.cpython-310.pyc b/openstack/key_manager/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from key_manager/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/key_manager/v1/__pycache__/__init__.cpython-310.pyc diff --git a/key_manager/v1/__pycache__/_format.cpython-310.pyc b/openstack/key_manager/v1/__pycache__/_format.cpython-310.pyc similarity index 100% rename from key_manager/v1/__pycache__/_format.cpython-310.pyc rename to openstack/key_manager/v1/__pycache__/_format.cpython-310.pyc diff --git a/key_manager/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/key_manager/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from key_manager/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/key_manager/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/key_manager/v1/__pycache__/container.cpython-310.pyc b/openstack/key_manager/v1/__pycache__/container.cpython-310.pyc similarity index 100% rename from key_manager/v1/__pycache__/container.cpython-310.pyc rename to openstack/key_manager/v1/__pycache__/container.cpython-310.pyc diff --git a/key_manager/v1/__pycache__/order.cpython-310.pyc b/openstack/key_manager/v1/__pycache__/order.cpython-310.pyc similarity index 100% rename from key_manager/v1/__pycache__/order.cpython-310.pyc rename to openstack/key_manager/v1/__pycache__/order.cpython-310.pyc diff --git a/key_manager/v1/__pycache__/secret.cpython-310.pyc b/openstack/key_manager/v1/__pycache__/secret.cpython-310.pyc similarity index 100% rename from key_manager/v1/__pycache__/secret.cpython-310.pyc rename to openstack/key_manager/v1/__pycache__/secret.cpython-310.pyc diff --git a/key_manager/v1/_format.py b/openstack/key_manager/v1/_format.py similarity index 100% rename from key_manager/v1/_format.py rename to openstack/key_manager/v1/_format.py diff --git a/key_manager/v1/_proxy.py b/openstack/key_manager/v1/_proxy.py similarity index 100% rename from key_manager/v1/_proxy.py rename to openstack/key_manager/v1/_proxy.py diff --git a/key_manager/v1/container.py b/openstack/key_manager/v1/container.py similarity index 100% rename from key_manager/v1/container.py rename to openstack/key_manager/v1/container.py diff --git a/key_manager/v1/order.py b/openstack/key_manager/v1/order.py similarity index 100% rename from key_manager/v1/order.py rename to openstack/key_manager/v1/order.py diff --git a/key_manager/v1/secret.py b/openstack/key_manager/v1/secret.py similarity index 100% rename from key_manager/v1/secret.py rename to openstack/key_manager/v1/secret.py diff --git a/orchestration/util/__init__.py b/openstack/load_balancer/__init__.py similarity index 100% rename from orchestration/util/__init__.py rename to openstack/load_balancer/__init__.py diff --git a/load_balancer/__pycache__/__init__.cpython-310.pyc b/openstack/load_balancer/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from load_balancer/__pycache__/__init__.cpython-310.pyc rename to openstack/load_balancer/__pycache__/__init__.cpython-310.pyc diff --git a/load_balancer/__pycache__/load_balancer_service.cpython-310.pyc b/openstack/load_balancer/__pycache__/load_balancer_service.cpython-310.pyc similarity index 100% rename from load_balancer/__pycache__/load_balancer_service.cpython-310.pyc rename to openstack/load_balancer/__pycache__/load_balancer_service.cpython-310.pyc diff --git a/load_balancer/__pycache__/version.cpython-310.pyc b/openstack/load_balancer/__pycache__/version.cpython-310.pyc similarity index 100% rename from load_balancer/__pycache__/version.cpython-310.pyc rename to openstack/load_balancer/__pycache__/version.cpython-310.pyc diff --git a/load_balancer/load_balancer_service.py b/openstack/load_balancer/load_balancer_service.py similarity index 100% rename from load_balancer/load_balancer_service.py rename to openstack/load_balancer/load_balancer_service.py diff --git a/orchestration/v1/__init__.py b/openstack/load_balancer/v2/__init__.py similarity index 100% rename from orchestration/v1/__init__.py rename to openstack/load_balancer/v2/__init__.py diff --git a/load_balancer/v2/__pycache__/__init__.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/__init__.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/amphora.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/amphora.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/amphora.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/amphora.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/availability_zone.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/availability_zone.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/availability_zone.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/availability_zone.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/availability_zone_profile.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/availability_zone_profile.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/availability_zone_profile.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/availability_zone_profile.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/flavor.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/flavor.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/flavor.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/flavor.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/flavor_profile.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/flavor_profile.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/flavor_profile.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/flavor_profile.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/health_monitor.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/health_monitor.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/health_monitor.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/health_monitor.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/l7_policy.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/l7_policy.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/l7_policy.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/l7_policy.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/l7_rule.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/l7_rule.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/l7_rule.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/l7_rule.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/listener.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/listener.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/listener.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/listener.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/load_balancer.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/load_balancer.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/load_balancer.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/load_balancer.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/member.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/member.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/member.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/member.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/pool.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/pool.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/pool.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/pool.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/provider.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/provider.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/provider.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/provider.cpython-310.pyc diff --git a/load_balancer/v2/__pycache__/quota.cpython-310.pyc b/openstack/load_balancer/v2/__pycache__/quota.cpython-310.pyc similarity index 100% rename from load_balancer/v2/__pycache__/quota.cpython-310.pyc rename to openstack/load_balancer/v2/__pycache__/quota.cpython-310.pyc diff --git a/load_balancer/v2/_proxy.py b/openstack/load_balancer/v2/_proxy.py similarity index 100% rename from load_balancer/v2/_proxy.py rename to openstack/load_balancer/v2/_proxy.py diff --git a/load_balancer/v2/amphora.py b/openstack/load_balancer/v2/amphora.py similarity index 100% rename from load_balancer/v2/amphora.py rename to openstack/load_balancer/v2/amphora.py diff --git a/load_balancer/v2/availability_zone.py b/openstack/load_balancer/v2/availability_zone.py similarity index 100% rename from load_balancer/v2/availability_zone.py rename to openstack/load_balancer/v2/availability_zone.py diff --git a/load_balancer/v2/availability_zone_profile.py b/openstack/load_balancer/v2/availability_zone_profile.py similarity index 100% rename from load_balancer/v2/availability_zone_profile.py rename to openstack/load_balancer/v2/availability_zone_profile.py diff --git a/load_balancer/v2/flavor.py b/openstack/load_balancer/v2/flavor.py similarity index 100% rename from load_balancer/v2/flavor.py rename to openstack/load_balancer/v2/flavor.py diff --git a/load_balancer/v2/flavor_profile.py b/openstack/load_balancer/v2/flavor_profile.py similarity index 100% rename from load_balancer/v2/flavor_profile.py rename to openstack/load_balancer/v2/flavor_profile.py diff --git a/load_balancer/v2/health_monitor.py b/openstack/load_balancer/v2/health_monitor.py similarity index 100% rename from load_balancer/v2/health_monitor.py rename to openstack/load_balancer/v2/health_monitor.py diff --git a/load_balancer/v2/l7_policy.py b/openstack/load_balancer/v2/l7_policy.py similarity index 100% rename from load_balancer/v2/l7_policy.py rename to openstack/load_balancer/v2/l7_policy.py diff --git a/load_balancer/v2/l7_rule.py b/openstack/load_balancer/v2/l7_rule.py similarity index 100% rename from load_balancer/v2/l7_rule.py rename to openstack/load_balancer/v2/l7_rule.py diff --git a/load_balancer/v2/listener.py b/openstack/load_balancer/v2/listener.py similarity index 100% rename from load_balancer/v2/listener.py rename to openstack/load_balancer/v2/listener.py diff --git a/load_balancer/v2/load_balancer.py b/openstack/load_balancer/v2/load_balancer.py similarity index 100% rename from load_balancer/v2/load_balancer.py rename to openstack/load_balancer/v2/load_balancer.py diff --git a/load_balancer/v2/member.py b/openstack/load_balancer/v2/member.py similarity index 100% rename from load_balancer/v2/member.py rename to openstack/load_balancer/v2/member.py diff --git a/load_balancer/v2/pool.py b/openstack/load_balancer/v2/pool.py similarity index 100% rename from load_balancer/v2/pool.py rename to openstack/load_balancer/v2/pool.py diff --git a/load_balancer/v2/provider.py b/openstack/load_balancer/v2/provider.py similarity index 100% rename from load_balancer/v2/provider.py rename to openstack/load_balancer/v2/provider.py diff --git a/load_balancer/v2/quota.py b/openstack/load_balancer/v2/quota.py similarity index 100% rename from load_balancer/v2/quota.py rename to openstack/load_balancer/v2/quota.py diff --git a/load_balancer/version.py b/openstack/load_balancer/version.py similarity index 100% rename from load_balancer/version.py rename to openstack/load_balancer/version.py diff --git a/placement/__init__.py b/openstack/message/__init__.py similarity index 100% rename from placement/__init__.py rename to openstack/message/__init__.py diff --git a/message/__pycache__/__init__.cpython-310.pyc b/openstack/message/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from message/__pycache__/__init__.cpython-310.pyc rename to openstack/message/__pycache__/__init__.cpython-310.pyc diff --git a/message/__pycache__/message_service.cpython-310.pyc b/openstack/message/__pycache__/message_service.cpython-310.pyc similarity index 100% rename from message/__pycache__/message_service.cpython-310.pyc rename to openstack/message/__pycache__/message_service.cpython-310.pyc diff --git a/message/__pycache__/version.cpython-310.pyc b/openstack/message/__pycache__/version.cpython-310.pyc similarity index 100% rename from message/__pycache__/version.cpython-310.pyc rename to openstack/message/__pycache__/version.cpython-310.pyc diff --git a/message/message_service.py b/openstack/message/message_service.py similarity index 100% rename from message/message_service.py rename to openstack/message/message_service.py diff --git a/placement/v1/__init__.py b/openstack/message/v2/__init__.py similarity index 100% rename from placement/v1/__init__.py rename to openstack/message/v2/__init__.py diff --git a/message/v2/__pycache__/__init__.cpython-310.pyc b/openstack/message/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from message/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/message/v2/__pycache__/__init__.cpython-310.pyc diff --git a/message/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/message/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from message/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/message/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/message/v2/__pycache__/claim.cpython-310.pyc b/openstack/message/v2/__pycache__/claim.cpython-310.pyc similarity index 100% rename from message/v2/__pycache__/claim.cpython-310.pyc rename to openstack/message/v2/__pycache__/claim.cpython-310.pyc diff --git a/message/v2/__pycache__/message.cpython-310.pyc b/openstack/message/v2/__pycache__/message.cpython-310.pyc similarity index 100% rename from message/v2/__pycache__/message.cpython-310.pyc rename to openstack/message/v2/__pycache__/message.cpython-310.pyc diff --git a/message/v2/__pycache__/queue.cpython-310.pyc b/openstack/message/v2/__pycache__/queue.cpython-310.pyc similarity index 100% rename from message/v2/__pycache__/queue.cpython-310.pyc rename to openstack/message/v2/__pycache__/queue.cpython-310.pyc diff --git a/message/v2/__pycache__/subscription.cpython-310.pyc b/openstack/message/v2/__pycache__/subscription.cpython-310.pyc similarity index 100% rename from message/v2/__pycache__/subscription.cpython-310.pyc rename to openstack/message/v2/__pycache__/subscription.cpython-310.pyc diff --git a/message/v2/_proxy.py b/openstack/message/v2/_proxy.py similarity index 100% rename from message/v2/_proxy.py rename to openstack/message/v2/_proxy.py diff --git a/message/v2/claim.py b/openstack/message/v2/claim.py similarity index 100% rename from message/v2/claim.py rename to openstack/message/v2/claim.py diff --git a/message/v2/message.py b/openstack/message/v2/message.py similarity index 100% rename from message/v2/message.py rename to openstack/message/v2/message.py diff --git a/message/v2/queue.py b/openstack/message/v2/queue.py similarity index 100% rename from message/v2/queue.py rename to openstack/message/v2/queue.py diff --git a/message/v2/subscription.py b/openstack/message/v2/subscription.py similarity index 100% rename from message/v2/subscription.py rename to openstack/message/v2/subscription.py diff --git a/message/version.py b/openstack/message/version.py similarity index 100% rename from message/version.py rename to openstack/message/version.py diff --git a/shared_file_system/__init__.py b/openstack/network/__init__.py similarity index 100% rename from shared_file_system/__init__.py rename to openstack/network/__init__.py diff --git a/network/__pycache__/__init__.cpython-310.pyc b/openstack/network/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from network/__pycache__/__init__.cpython-310.pyc rename to openstack/network/__pycache__/__init__.cpython-310.pyc diff --git a/network/__pycache__/network_service.cpython-310.pyc b/openstack/network/__pycache__/network_service.cpython-310.pyc similarity index 100% rename from network/__pycache__/network_service.cpython-310.pyc rename to openstack/network/__pycache__/network_service.cpython-310.pyc diff --git a/network/__pycache__/version.cpython-310.pyc b/openstack/network/__pycache__/version.cpython-310.pyc similarity index 100% rename from network/__pycache__/version.cpython-310.pyc rename to openstack/network/__pycache__/version.cpython-310.pyc diff --git a/network/network_service.py b/openstack/network/network_service.py similarity index 100% rename from network/network_service.py rename to openstack/network/network_service.py diff --git a/shared_file_system/v2/__init__.py b/openstack/network/v2/__init__.py similarity index 100% rename from shared_file_system/v2/__init__.py rename to openstack/network/v2/__init__.py diff --git a/network/v2/__pycache__/__init__.cpython-310.pyc b/openstack/network/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/network/v2/__pycache__/__init__.cpython-310.pyc diff --git a/network/v2/__pycache__/_base.cpython-310.pyc b/openstack/network/v2/__pycache__/_base.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/_base.cpython-310.pyc rename to openstack/network/v2/__pycache__/_base.cpython-310.pyc diff --git a/network/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/network/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/network/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/network/v2/__pycache__/address_group.cpython-310.pyc b/openstack/network/v2/__pycache__/address_group.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/address_group.cpython-310.pyc rename to openstack/network/v2/__pycache__/address_group.cpython-310.pyc diff --git a/network/v2/__pycache__/address_scope.cpython-310.pyc b/openstack/network/v2/__pycache__/address_scope.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/address_scope.cpython-310.pyc rename to openstack/network/v2/__pycache__/address_scope.cpython-310.pyc diff --git a/network/v2/__pycache__/agent.cpython-310.pyc b/openstack/network/v2/__pycache__/agent.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/agent.cpython-310.pyc rename to openstack/network/v2/__pycache__/agent.cpython-310.pyc diff --git a/network/v2/__pycache__/auto_allocated_topology.cpython-310.pyc b/openstack/network/v2/__pycache__/auto_allocated_topology.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/auto_allocated_topology.cpython-310.pyc rename to openstack/network/v2/__pycache__/auto_allocated_topology.cpython-310.pyc diff --git a/network/v2/__pycache__/availability_zone.cpython-310.pyc b/openstack/network/v2/__pycache__/availability_zone.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/availability_zone.cpython-310.pyc rename to openstack/network/v2/__pycache__/availability_zone.cpython-310.pyc diff --git a/network/v2/__pycache__/bgp_peer.cpython-310.pyc b/openstack/network/v2/__pycache__/bgp_peer.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/bgp_peer.cpython-310.pyc rename to openstack/network/v2/__pycache__/bgp_peer.cpython-310.pyc diff --git a/network/v2/__pycache__/bgp_speaker.cpython-310.pyc b/openstack/network/v2/__pycache__/bgp_speaker.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/bgp_speaker.cpython-310.pyc rename to openstack/network/v2/__pycache__/bgp_speaker.cpython-310.pyc diff --git a/network/v2/__pycache__/bgpvpn.cpython-310.pyc b/openstack/network/v2/__pycache__/bgpvpn.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/bgpvpn.cpython-310.pyc rename to openstack/network/v2/__pycache__/bgpvpn.cpython-310.pyc diff --git a/network/v2/__pycache__/bgpvpn_network_association.cpython-310.pyc b/openstack/network/v2/__pycache__/bgpvpn_network_association.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/bgpvpn_network_association.cpython-310.pyc rename to openstack/network/v2/__pycache__/bgpvpn_network_association.cpython-310.pyc diff --git a/network/v2/__pycache__/bgpvpn_port_association.cpython-310.pyc b/openstack/network/v2/__pycache__/bgpvpn_port_association.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/bgpvpn_port_association.cpython-310.pyc rename to openstack/network/v2/__pycache__/bgpvpn_port_association.cpython-310.pyc diff --git a/network/v2/__pycache__/bgpvpn_router_association.cpython-310.pyc b/openstack/network/v2/__pycache__/bgpvpn_router_association.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/bgpvpn_router_association.cpython-310.pyc rename to openstack/network/v2/__pycache__/bgpvpn_router_association.cpython-310.pyc diff --git a/network/v2/__pycache__/default_security_group_rule.cpython-310.pyc b/openstack/network/v2/__pycache__/default_security_group_rule.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/default_security_group_rule.cpython-310.pyc rename to openstack/network/v2/__pycache__/default_security_group_rule.cpython-310.pyc diff --git a/network/v2/__pycache__/extension.cpython-310.pyc b/openstack/network/v2/__pycache__/extension.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/extension.cpython-310.pyc rename to openstack/network/v2/__pycache__/extension.cpython-310.pyc diff --git a/network/v2/__pycache__/firewall_group.cpython-310.pyc b/openstack/network/v2/__pycache__/firewall_group.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/firewall_group.cpython-310.pyc rename to openstack/network/v2/__pycache__/firewall_group.cpython-310.pyc diff --git a/network/v2/__pycache__/firewall_policy.cpython-310.pyc b/openstack/network/v2/__pycache__/firewall_policy.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/firewall_policy.cpython-310.pyc rename to openstack/network/v2/__pycache__/firewall_policy.cpython-310.pyc diff --git a/network/v2/__pycache__/firewall_rule.cpython-310.pyc b/openstack/network/v2/__pycache__/firewall_rule.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/firewall_rule.cpython-310.pyc rename to openstack/network/v2/__pycache__/firewall_rule.cpython-310.pyc diff --git a/network/v2/__pycache__/flavor.cpython-310.pyc b/openstack/network/v2/__pycache__/flavor.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/flavor.cpython-310.pyc rename to openstack/network/v2/__pycache__/flavor.cpython-310.pyc diff --git a/network/v2/__pycache__/floating_ip.cpython-310.pyc b/openstack/network/v2/__pycache__/floating_ip.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/floating_ip.cpython-310.pyc rename to openstack/network/v2/__pycache__/floating_ip.cpython-310.pyc diff --git a/network/v2/__pycache__/health_monitor.cpython-310.pyc b/openstack/network/v2/__pycache__/health_monitor.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/health_monitor.cpython-310.pyc rename to openstack/network/v2/__pycache__/health_monitor.cpython-310.pyc diff --git a/network/v2/__pycache__/l3_conntrack_helper.cpython-310.pyc b/openstack/network/v2/__pycache__/l3_conntrack_helper.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/l3_conntrack_helper.cpython-310.pyc rename to openstack/network/v2/__pycache__/l3_conntrack_helper.cpython-310.pyc diff --git a/network/v2/__pycache__/listener.cpython-310.pyc b/openstack/network/v2/__pycache__/listener.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/listener.cpython-310.pyc rename to openstack/network/v2/__pycache__/listener.cpython-310.pyc diff --git a/network/v2/__pycache__/load_balancer.cpython-310.pyc b/openstack/network/v2/__pycache__/load_balancer.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/load_balancer.cpython-310.pyc rename to openstack/network/v2/__pycache__/load_balancer.cpython-310.pyc diff --git a/network/v2/__pycache__/local_ip.cpython-310.pyc b/openstack/network/v2/__pycache__/local_ip.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/local_ip.cpython-310.pyc rename to openstack/network/v2/__pycache__/local_ip.cpython-310.pyc diff --git a/network/v2/__pycache__/local_ip_association.cpython-310.pyc b/openstack/network/v2/__pycache__/local_ip_association.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/local_ip_association.cpython-310.pyc rename to openstack/network/v2/__pycache__/local_ip_association.cpython-310.pyc diff --git a/network/v2/__pycache__/metering_label.cpython-310.pyc b/openstack/network/v2/__pycache__/metering_label.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/metering_label.cpython-310.pyc rename to openstack/network/v2/__pycache__/metering_label.cpython-310.pyc diff --git a/network/v2/__pycache__/metering_label_rule.cpython-310.pyc b/openstack/network/v2/__pycache__/metering_label_rule.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/metering_label_rule.cpython-310.pyc rename to openstack/network/v2/__pycache__/metering_label_rule.cpython-310.pyc diff --git a/network/v2/__pycache__/ndp_proxy.cpython-310.pyc b/openstack/network/v2/__pycache__/ndp_proxy.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/ndp_proxy.cpython-310.pyc rename to openstack/network/v2/__pycache__/ndp_proxy.cpython-310.pyc diff --git a/network/v2/__pycache__/network.cpython-310.pyc b/openstack/network/v2/__pycache__/network.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/network.cpython-310.pyc rename to openstack/network/v2/__pycache__/network.cpython-310.pyc diff --git a/network/v2/__pycache__/network_ip_availability.cpython-310.pyc b/openstack/network/v2/__pycache__/network_ip_availability.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/network_ip_availability.cpython-310.pyc rename to openstack/network/v2/__pycache__/network_ip_availability.cpython-310.pyc diff --git a/network/v2/__pycache__/network_segment_range.cpython-310.pyc b/openstack/network/v2/__pycache__/network_segment_range.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/network_segment_range.cpython-310.pyc rename to openstack/network/v2/__pycache__/network_segment_range.cpython-310.pyc diff --git a/network/v2/__pycache__/pool.cpython-310.pyc b/openstack/network/v2/__pycache__/pool.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/pool.cpython-310.pyc rename to openstack/network/v2/__pycache__/pool.cpython-310.pyc diff --git a/network/v2/__pycache__/pool_member.cpython-310.pyc b/openstack/network/v2/__pycache__/pool_member.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/pool_member.cpython-310.pyc rename to openstack/network/v2/__pycache__/pool_member.cpython-310.pyc diff --git a/network/v2/__pycache__/port.cpython-310.pyc b/openstack/network/v2/__pycache__/port.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/port.cpython-310.pyc rename to openstack/network/v2/__pycache__/port.cpython-310.pyc diff --git a/network/v2/__pycache__/port_forwarding.cpython-310.pyc b/openstack/network/v2/__pycache__/port_forwarding.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/port_forwarding.cpython-310.pyc rename to openstack/network/v2/__pycache__/port_forwarding.cpython-310.pyc diff --git a/network/v2/__pycache__/qos_bandwidth_limit_rule.cpython-310.pyc b/openstack/network/v2/__pycache__/qos_bandwidth_limit_rule.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/qos_bandwidth_limit_rule.cpython-310.pyc rename to openstack/network/v2/__pycache__/qos_bandwidth_limit_rule.cpython-310.pyc diff --git a/network/v2/__pycache__/qos_dscp_marking_rule.cpython-310.pyc b/openstack/network/v2/__pycache__/qos_dscp_marking_rule.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/qos_dscp_marking_rule.cpython-310.pyc rename to openstack/network/v2/__pycache__/qos_dscp_marking_rule.cpython-310.pyc diff --git a/network/v2/__pycache__/qos_minimum_bandwidth_rule.cpython-310.pyc b/openstack/network/v2/__pycache__/qos_minimum_bandwidth_rule.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/qos_minimum_bandwidth_rule.cpython-310.pyc rename to openstack/network/v2/__pycache__/qos_minimum_bandwidth_rule.cpython-310.pyc diff --git a/network/v2/__pycache__/qos_minimum_packet_rate_rule.cpython-310.pyc b/openstack/network/v2/__pycache__/qos_minimum_packet_rate_rule.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/qos_minimum_packet_rate_rule.cpython-310.pyc rename to openstack/network/v2/__pycache__/qos_minimum_packet_rate_rule.cpython-310.pyc diff --git a/network/v2/__pycache__/qos_policy.cpython-310.pyc b/openstack/network/v2/__pycache__/qos_policy.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/qos_policy.cpython-310.pyc rename to openstack/network/v2/__pycache__/qos_policy.cpython-310.pyc diff --git a/network/v2/__pycache__/qos_rule_type.cpython-310.pyc b/openstack/network/v2/__pycache__/qos_rule_type.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/qos_rule_type.cpython-310.pyc rename to openstack/network/v2/__pycache__/qos_rule_type.cpython-310.pyc diff --git a/network/v2/__pycache__/quota.cpython-310.pyc b/openstack/network/v2/__pycache__/quota.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/quota.cpython-310.pyc rename to openstack/network/v2/__pycache__/quota.cpython-310.pyc diff --git a/network/v2/__pycache__/rbac_policy.cpython-310.pyc b/openstack/network/v2/__pycache__/rbac_policy.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/rbac_policy.cpython-310.pyc rename to openstack/network/v2/__pycache__/rbac_policy.cpython-310.pyc diff --git a/network/v2/__pycache__/router.cpython-310.pyc b/openstack/network/v2/__pycache__/router.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/router.cpython-310.pyc rename to openstack/network/v2/__pycache__/router.cpython-310.pyc diff --git a/network/v2/__pycache__/security_group.cpython-310.pyc b/openstack/network/v2/__pycache__/security_group.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/security_group.cpython-310.pyc rename to openstack/network/v2/__pycache__/security_group.cpython-310.pyc diff --git a/network/v2/__pycache__/security_group_rule.cpython-310.pyc b/openstack/network/v2/__pycache__/security_group_rule.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/security_group_rule.cpython-310.pyc rename to openstack/network/v2/__pycache__/security_group_rule.cpython-310.pyc diff --git a/network/v2/__pycache__/segment.cpython-310.pyc b/openstack/network/v2/__pycache__/segment.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/segment.cpython-310.pyc rename to openstack/network/v2/__pycache__/segment.cpython-310.pyc diff --git a/network/v2/__pycache__/service_profile.cpython-310.pyc b/openstack/network/v2/__pycache__/service_profile.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/service_profile.cpython-310.pyc rename to openstack/network/v2/__pycache__/service_profile.cpython-310.pyc diff --git a/network/v2/__pycache__/service_provider.cpython-310.pyc b/openstack/network/v2/__pycache__/service_provider.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/service_provider.cpython-310.pyc rename to openstack/network/v2/__pycache__/service_provider.cpython-310.pyc diff --git a/network/v2/__pycache__/sfc_flow_classifier.cpython-310.pyc b/openstack/network/v2/__pycache__/sfc_flow_classifier.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/sfc_flow_classifier.cpython-310.pyc rename to openstack/network/v2/__pycache__/sfc_flow_classifier.cpython-310.pyc diff --git a/network/v2/__pycache__/sfc_port_chain.cpython-310.pyc b/openstack/network/v2/__pycache__/sfc_port_chain.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/sfc_port_chain.cpython-310.pyc rename to openstack/network/v2/__pycache__/sfc_port_chain.cpython-310.pyc diff --git a/network/v2/__pycache__/sfc_port_pair.cpython-310.pyc b/openstack/network/v2/__pycache__/sfc_port_pair.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/sfc_port_pair.cpython-310.pyc rename to openstack/network/v2/__pycache__/sfc_port_pair.cpython-310.pyc diff --git a/network/v2/__pycache__/sfc_port_pair_group.cpython-310.pyc b/openstack/network/v2/__pycache__/sfc_port_pair_group.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/sfc_port_pair_group.cpython-310.pyc rename to openstack/network/v2/__pycache__/sfc_port_pair_group.cpython-310.pyc diff --git a/network/v2/__pycache__/sfc_service_graph.cpython-310.pyc b/openstack/network/v2/__pycache__/sfc_service_graph.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/sfc_service_graph.cpython-310.pyc rename to openstack/network/v2/__pycache__/sfc_service_graph.cpython-310.pyc diff --git a/network/v2/__pycache__/subnet.cpython-310.pyc b/openstack/network/v2/__pycache__/subnet.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/subnet.cpython-310.pyc rename to openstack/network/v2/__pycache__/subnet.cpython-310.pyc diff --git a/network/v2/__pycache__/subnet_pool.cpython-310.pyc b/openstack/network/v2/__pycache__/subnet_pool.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/subnet_pool.cpython-310.pyc rename to openstack/network/v2/__pycache__/subnet_pool.cpython-310.pyc diff --git a/network/v2/__pycache__/tap_flow.cpython-310.pyc b/openstack/network/v2/__pycache__/tap_flow.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/tap_flow.cpython-310.pyc rename to openstack/network/v2/__pycache__/tap_flow.cpython-310.pyc diff --git a/network/v2/__pycache__/tap_service.cpython-310.pyc b/openstack/network/v2/__pycache__/tap_service.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/tap_service.cpython-310.pyc rename to openstack/network/v2/__pycache__/tap_service.cpython-310.pyc diff --git a/network/v2/__pycache__/trunk.cpython-310.pyc b/openstack/network/v2/__pycache__/trunk.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/trunk.cpython-310.pyc rename to openstack/network/v2/__pycache__/trunk.cpython-310.pyc diff --git a/network/v2/__pycache__/vpn_endpoint_group.cpython-310.pyc b/openstack/network/v2/__pycache__/vpn_endpoint_group.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/vpn_endpoint_group.cpython-310.pyc rename to openstack/network/v2/__pycache__/vpn_endpoint_group.cpython-310.pyc diff --git a/network/v2/__pycache__/vpn_ike_policy.cpython-310.pyc b/openstack/network/v2/__pycache__/vpn_ike_policy.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/vpn_ike_policy.cpython-310.pyc rename to openstack/network/v2/__pycache__/vpn_ike_policy.cpython-310.pyc diff --git a/network/v2/__pycache__/vpn_ipsec_policy.cpython-310.pyc b/openstack/network/v2/__pycache__/vpn_ipsec_policy.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/vpn_ipsec_policy.cpython-310.pyc rename to openstack/network/v2/__pycache__/vpn_ipsec_policy.cpython-310.pyc diff --git a/network/v2/__pycache__/vpn_ipsec_site_connection.cpython-310.pyc b/openstack/network/v2/__pycache__/vpn_ipsec_site_connection.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/vpn_ipsec_site_connection.cpython-310.pyc rename to openstack/network/v2/__pycache__/vpn_ipsec_site_connection.cpython-310.pyc diff --git a/network/v2/__pycache__/vpn_service.cpython-310.pyc b/openstack/network/v2/__pycache__/vpn_service.cpython-310.pyc similarity index 100% rename from network/v2/__pycache__/vpn_service.cpython-310.pyc rename to openstack/network/v2/__pycache__/vpn_service.cpython-310.pyc diff --git a/network/v2/_base.py b/openstack/network/v2/_base.py similarity index 100% rename from network/v2/_base.py rename to openstack/network/v2/_base.py diff --git a/network/v2/_proxy.py b/openstack/network/v2/_proxy.py similarity index 100% rename from network/v2/_proxy.py rename to openstack/network/v2/_proxy.py diff --git a/network/v2/address_group.py b/openstack/network/v2/address_group.py similarity index 100% rename from network/v2/address_group.py rename to openstack/network/v2/address_group.py diff --git a/network/v2/address_scope.py b/openstack/network/v2/address_scope.py similarity index 100% rename from network/v2/address_scope.py rename to openstack/network/v2/address_scope.py diff --git a/network/v2/agent.py b/openstack/network/v2/agent.py similarity index 100% rename from network/v2/agent.py rename to openstack/network/v2/agent.py diff --git a/network/v2/auto_allocated_topology.py b/openstack/network/v2/auto_allocated_topology.py similarity index 100% rename from network/v2/auto_allocated_topology.py rename to openstack/network/v2/auto_allocated_topology.py diff --git a/network/v2/availability_zone.py b/openstack/network/v2/availability_zone.py similarity index 100% rename from network/v2/availability_zone.py rename to openstack/network/v2/availability_zone.py diff --git a/network/v2/bgp_peer.py b/openstack/network/v2/bgp_peer.py similarity index 100% rename from network/v2/bgp_peer.py rename to openstack/network/v2/bgp_peer.py diff --git a/network/v2/bgp_speaker.py b/openstack/network/v2/bgp_speaker.py similarity index 100% rename from network/v2/bgp_speaker.py rename to openstack/network/v2/bgp_speaker.py diff --git a/network/v2/bgpvpn.py b/openstack/network/v2/bgpvpn.py similarity index 100% rename from network/v2/bgpvpn.py rename to openstack/network/v2/bgpvpn.py diff --git a/network/v2/bgpvpn_network_association.py b/openstack/network/v2/bgpvpn_network_association.py similarity index 100% rename from network/v2/bgpvpn_network_association.py rename to openstack/network/v2/bgpvpn_network_association.py diff --git a/network/v2/bgpvpn_port_association.py b/openstack/network/v2/bgpvpn_port_association.py similarity index 100% rename from network/v2/bgpvpn_port_association.py rename to openstack/network/v2/bgpvpn_port_association.py diff --git a/network/v2/bgpvpn_router_association.py b/openstack/network/v2/bgpvpn_router_association.py similarity index 100% rename from network/v2/bgpvpn_router_association.py rename to openstack/network/v2/bgpvpn_router_association.py diff --git a/network/v2/default_security_group_rule.py b/openstack/network/v2/default_security_group_rule.py similarity index 100% rename from network/v2/default_security_group_rule.py rename to openstack/network/v2/default_security_group_rule.py diff --git a/network/v2/extension.py b/openstack/network/v2/extension.py similarity index 100% rename from network/v2/extension.py rename to openstack/network/v2/extension.py diff --git a/network/v2/firewall_group.py b/openstack/network/v2/firewall_group.py similarity index 100% rename from network/v2/firewall_group.py rename to openstack/network/v2/firewall_group.py diff --git a/network/v2/firewall_policy.py b/openstack/network/v2/firewall_policy.py similarity index 100% rename from network/v2/firewall_policy.py rename to openstack/network/v2/firewall_policy.py diff --git a/network/v2/firewall_rule.py b/openstack/network/v2/firewall_rule.py similarity index 100% rename from network/v2/firewall_rule.py rename to openstack/network/v2/firewall_rule.py diff --git a/network/v2/flavor.py b/openstack/network/v2/flavor.py similarity index 100% rename from network/v2/flavor.py rename to openstack/network/v2/flavor.py diff --git a/network/v2/floating_ip.py b/openstack/network/v2/floating_ip.py similarity index 100% rename from network/v2/floating_ip.py rename to openstack/network/v2/floating_ip.py diff --git a/network/v2/health_monitor.py b/openstack/network/v2/health_monitor.py similarity index 100% rename from network/v2/health_monitor.py rename to openstack/network/v2/health_monitor.py diff --git a/network/v2/l3_conntrack_helper.py b/openstack/network/v2/l3_conntrack_helper.py similarity index 100% rename from network/v2/l3_conntrack_helper.py rename to openstack/network/v2/l3_conntrack_helper.py diff --git a/network/v2/listener.py b/openstack/network/v2/listener.py similarity index 100% rename from network/v2/listener.py rename to openstack/network/v2/listener.py diff --git a/network/v2/load_balancer.py b/openstack/network/v2/load_balancer.py similarity index 100% rename from network/v2/load_balancer.py rename to openstack/network/v2/load_balancer.py diff --git a/network/v2/local_ip.py b/openstack/network/v2/local_ip.py similarity index 100% rename from network/v2/local_ip.py rename to openstack/network/v2/local_ip.py diff --git a/network/v2/local_ip_association.py b/openstack/network/v2/local_ip_association.py similarity index 100% rename from network/v2/local_ip_association.py rename to openstack/network/v2/local_ip_association.py diff --git a/network/v2/metering_label.py b/openstack/network/v2/metering_label.py similarity index 100% rename from network/v2/metering_label.py rename to openstack/network/v2/metering_label.py diff --git a/network/v2/metering_label_rule.py b/openstack/network/v2/metering_label_rule.py similarity index 100% rename from network/v2/metering_label_rule.py rename to openstack/network/v2/metering_label_rule.py diff --git a/network/v2/ndp_proxy.py b/openstack/network/v2/ndp_proxy.py similarity index 100% rename from network/v2/ndp_proxy.py rename to openstack/network/v2/ndp_proxy.py diff --git a/network/v2/network.py b/openstack/network/v2/network.py similarity index 100% rename from network/v2/network.py rename to openstack/network/v2/network.py diff --git a/network/v2/network_ip_availability.py b/openstack/network/v2/network_ip_availability.py similarity index 100% rename from network/v2/network_ip_availability.py rename to openstack/network/v2/network_ip_availability.py diff --git a/network/v2/network_segment_range.py b/openstack/network/v2/network_segment_range.py similarity index 100% rename from network/v2/network_segment_range.py rename to openstack/network/v2/network_segment_range.py diff --git a/network/v2/pool.py b/openstack/network/v2/pool.py similarity index 100% rename from network/v2/pool.py rename to openstack/network/v2/pool.py diff --git a/network/v2/pool_member.py b/openstack/network/v2/pool_member.py similarity index 100% rename from network/v2/pool_member.py rename to openstack/network/v2/pool_member.py diff --git a/network/v2/port.py b/openstack/network/v2/port.py similarity index 100% rename from network/v2/port.py rename to openstack/network/v2/port.py diff --git a/network/v2/port_forwarding.py b/openstack/network/v2/port_forwarding.py similarity index 100% rename from network/v2/port_forwarding.py rename to openstack/network/v2/port_forwarding.py diff --git a/network/v2/qos_bandwidth_limit_rule.py b/openstack/network/v2/qos_bandwidth_limit_rule.py similarity index 100% rename from network/v2/qos_bandwidth_limit_rule.py rename to openstack/network/v2/qos_bandwidth_limit_rule.py diff --git a/network/v2/qos_dscp_marking_rule.py b/openstack/network/v2/qos_dscp_marking_rule.py similarity index 100% rename from network/v2/qos_dscp_marking_rule.py rename to openstack/network/v2/qos_dscp_marking_rule.py diff --git a/network/v2/qos_minimum_bandwidth_rule.py b/openstack/network/v2/qos_minimum_bandwidth_rule.py similarity index 100% rename from network/v2/qos_minimum_bandwidth_rule.py rename to openstack/network/v2/qos_minimum_bandwidth_rule.py diff --git a/network/v2/qos_minimum_packet_rate_rule.py b/openstack/network/v2/qos_minimum_packet_rate_rule.py similarity index 100% rename from network/v2/qos_minimum_packet_rate_rule.py rename to openstack/network/v2/qos_minimum_packet_rate_rule.py diff --git a/network/v2/qos_policy.py b/openstack/network/v2/qos_policy.py similarity index 100% rename from network/v2/qos_policy.py rename to openstack/network/v2/qos_policy.py diff --git a/network/v2/qos_rule_type.py b/openstack/network/v2/qos_rule_type.py similarity index 100% rename from network/v2/qos_rule_type.py rename to openstack/network/v2/qos_rule_type.py diff --git a/network/v2/quota.py b/openstack/network/v2/quota.py similarity index 100% rename from network/v2/quota.py rename to openstack/network/v2/quota.py diff --git a/network/v2/rbac_policy.py b/openstack/network/v2/rbac_policy.py similarity index 100% rename from network/v2/rbac_policy.py rename to openstack/network/v2/rbac_policy.py diff --git a/network/v2/router.py b/openstack/network/v2/router.py similarity index 100% rename from network/v2/router.py rename to openstack/network/v2/router.py diff --git a/network/v2/security_group.py b/openstack/network/v2/security_group.py similarity index 100% rename from network/v2/security_group.py rename to openstack/network/v2/security_group.py diff --git a/network/v2/security_group_rule.py b/openstack/network/v2/security_group_rule.py similarity index 100% rename from network/v2/security_group_rule.py rename to openstack/network/v2/security_group_rule.py diff --git a/network/v2/segment.py b/openstack/network/v2/segment.py similarity index 100% rename from network/v2/segment.py rename to openstack/network/v2/segment.py diff --git a/network/v2/service_profile.py b/openstack/network/v2/service_profile.py similarity index 100% rename from network/v2/service_profile.py rename to openstack/network/v2/service_profile.py diff --git a/network/v2/service_provider.py b/openstack/network/v2/service_provider.py similarity index 100% rename from network/v2/service_provider.py rename to openstack/network/v2/service_provider.py diff --git a/network/v2/sfc_flow_classifier.py b/openstack/network/v2/sfc_flow_classifier.py similarity index 100% rename from network/v2/sfc_flow_classifier.py rename to openstack/network/v2/sfc_flow_classifier.py diff --git a/network/v2/sfc_port_chain.py b/openstack/network/v2/sfc_port_chain.py similarity index 100% rename from network/v2/sfc_port_chain.py rename to openstack/network/v2/sfc_port_chain.py diff --git a/network/v2/sfc_port_pair.py b/openstack/network/v2/sfc_port_pair.py similarity index 100% rename from network/v2/sfc_port_pair.py rename to openstack/network/v2/sfc_port_pair.py diff --git a/network/v2/sfc_port_pair_group.py b/openstack/network/v2/sfc_port_pair_group.py similarity index 100% rename from network/v2/sfc_port_pair_group.py rename to openstack/network/v2/sfc_port_pair_group.py diff --git a/network/v2/sfc_service_graph.py b/openstack/network/v2/sfc_service_graph.py similarity index 100% rename from network/v2/sfc_service_graph.py rename to openstack/network/v2/sfc_service_graph.py diff --git a/network/v2/subnet.py b/openstack/network/v2/subnet.py similarity index 100% rename from network/v2/subnet.py rename to openstack/network/v2/subnet.py diff --git a/network/v2/subnet_pool.py b/openstack/network/v2/subnet_pool.py similarity index 100% rename from network/v2/subnet_pool.py rename to openstack/network/v2/subnet_pool.py diff --git a/network/v2/tap_flow.py b/openstack/network/v2/tap_flow.py similarity index 100% rename from network/v2/tap_flow.py rename to openstack/network/v2/tap_flow.py diff --git a/network/v2/tap_service.py b/openstack/network/v2/tap_service.py similarity index 100% rename from network/v2/tap_service.py rename to openstack/network/v2/tap_service.py diff --git a/network/v2/trunk.py b/openstack/network/v2/trunk.py similarity index 100% rename from network/v2/trunk.py rename to openstack/network/v2/trunk.py diff --git a/network/v2/vpn_endpoint_group.py b/openstack/network/v2/vpn_endpoint_group.py similarity index 100% rename from network/v2/vpn_endpoint_group.py rename to openstack/network/v2/vpn_endpoint_group.py diff --git a/network/v2/vpn_ike_policy.py b/openstack/network/v2/vpn_ike_policy.py similarity index 100% rename from network/v2/vpn_ike_policy.py rename to openstack/network/v2/vpn_ike_policy.py diff --git a/network/v2/vpn_ipsec_policy.py b/openstack/network/v2/vpn_ipsec_policy.py similarity index 100% rename from network/v2/vpn_ipsec_policy.py rename to openstack/network/v2/vpn_ipsec_policy.py diff --git a/network/v2/vpn_ipsec_site_connection.py b/openstack/network/v2/vpn_ipsec_site_connection.py similarity index 100% rename from network/v2/vpn_ipsec_site_connection.py rename to openstack/network/v2/vpn_ipsec_site_connection.py diff --git a/network/v2/vpn_service.py b/openstack/network/v2/vpn_service.py similarity index 100% rename from network/v2/vpn_service.py rename to openstack/network/v2/vpn_service.py diff --git a/network/version.py b/openstack/network/version.py similarity index 100% rename from network/version.py rename to openstack/network/version.py diff --git a/test/__init__.py b/openstack/object_store/__init__.py similarity index 100% rename from test/__init__.py rename to openstack/object_store/__init__.py diff --git a/object_store/__pycache__/__init__.cpython-310.pyc b/openstack/object_store/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from object_store/__pycache__/__init__.cpython-310.pyc rename to openstack/object_store/__pycache__/__init__.cpython-310.pyc diff --git a/object_store/__pycache__/object_store_service.cpython-310.pyc b/openstack/object_store/__pycache__/object_store_service.cpython-310.pyc similarity index 100% rename from object_store/__pycache__/object_store_service.cpython-310.pyc rename to openstack/object_store/__pycache__/object_store_service.cpython-310.pyc diff --git a/object_store/object_store_service.py b/openstack/object_store/object_store_service.py similarity index 100% rename from object_store/object_store_service.py rename to openstack/object_store/object_store_service.py diff --git a/tests/__init__.py b/openstack/object_store/v1/__init__.py similarity index 100% rename from tests/__init__.py rename to openstack/object_store/v1/__init__.py diff --git a/object_store/v1/__pycache__/__init__.cpython-310.pyc b/openstack/object_store/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from object_store/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/object_store/v1/__pycache__/__init__.cpython-310.pyc diff --git a/object_store/v1/__pycache__/_base.cpython-310.pyc b/openstack/object_store/v1/__pycache__/_base.cpython-310.pyc similarity index 100% rename from object_store/v1/__pycache__/_base.cpython-310.pyc rename to openstack/object_store/v1/__pycache__/_base.cpython-310.pyc diff --git a/object_store/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/object_store/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from object_store/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/object_store/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/object_store/v1/__pycache__/account.cpython-310.pyc b/openstack/object_store/v1/__pycache__/account.cpython-310.pyc similarity index 100% rename from object_store/v1/__pycache__/account.cpython-310.pyc rename to openstack/object_store/v1/__pycache__/account.cpython-310.pyc diff --git a/object_store/v1/__pycache__/container.cpython-310.pyc b/openstack/object_store/v1/__pycache__/container.cpython-310.pyc similarity index 100% rename from object_store/v1/__pycache__/container.cpython-310.pyc rename to openstack/object_store/v1/__pycache__/container.cpython-310.pyc diff --git a/object_store/v1/__pycache__/info.cpython-310.pyc b/openstack/object_store/v1/__pycache__/info.cpython-310.pyc similarity index 100% rename from object_store/v1/__pycache__/info.cpython-310.pyc rename to openstack/object_store/v1/__pycache__/info.cpython-310.pyc diff --git a/object_store/v1/__pycache__/obj.cpython-310.pyc b/openstack/object_store/v1/__pycache__/obj.cpython-310.pyc similarity index 100% rename from object_store/v1/__pycache__/obj.cpython-310.pyc rename to openstack/object_store/v1/__pycache__/obj.cpython-310.pyc diff --git a/object_store/v1/_base.py b/openstack/object_store/v1/_base.py similarity index 100% rename from object_store/v1/_base.py rename to openstack/object_store/v1/_base.py diff --git a/object_store/v1/_proxy.py b/openstack/object_store/v1/_proxy.py similarity index 100% rename from object_store/v1/_proxy.py rename to openstack/object_store/v1/_proxy.py diff --git a/object_store/v1/account.py b/openstack/object_store/v1/account.py similarity index 100% rename from object_store/v1/account.py rename to openstack/object_store/v1/account.py diff --git a/object_store/v1/container.py b/openstack/object_store/v1/container.py similarity index 100% rename from object_store/v1/container.py rename to openstack/object_store/v1/container.py diff --git a/object_store/v1/info.py b/openstack/object_store/v1/info.py similarity index 100% rename from object_store/v1/info.py rename to openstack/object_store/v1/info.py diff --git a/object_store/v1/obj.py b/openstack/object_store/v1/obj.py similarity index 100% rename from object_store/v1/obj.py rename to openstack/object_store/v1/obj.py diff --git a/tests/functional/__init__.py b/openstack/orchestration/__init__.py similarity index 100% rename from tests/functional/__init__.py rename to openstack/orchestration/__init__.py diff --git a/orchestration/__pycache__/__init__.cpython-310.pyc b/openstack/orchestration/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from orchestration/__pycache__/__init__.cpython-310.pyc rename to openstack/orchestration/__pycache__/__init__.cpython-310.pyc diff --git a/orchestration/__pycache__/orchestration_service.cpython-310.pyc b/openstack/orchestration/__pycache__/orchestration_service.cpython-310.pyc similarity index 100% rename from orchestration/__pycache__/orchestration_service.cpython-310.pyc rename to openstack/orchestration/__pycache__/orchestration_service.cpython-310.pyc diff --git a/orchestration/__pycache__/version.cpython-310.pyc b/openstack/orchestration/__pycache__/version.cpython-310.pyc similarity index 100% rename from orchestration/__pycache__/version.cpython-310.pyc rename to openstack/orchestration/__pycache__/version.cpython-310.pyc diff --git a/orchestration/orchestration_service.py b/openstack/orchestration/orchestration_service.py similarity index 100% rename from orchestration/orchestration_service.py rename to openstack/orchestration/orchestration_service.py diff --git a/tests/functional/baremetal/__init__.py b/openstack/orchestration/util/__init__.py similarity index 100% rename from tests/functional/baremetal/__init__.py rename to openstack/orchestration/util/__init__.py diff --git a/orchestration/util/__pycache__/__init__.cpython-310.pyc b/openstack/orchestration/util/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from orchestration/util/__pycache__/__init__.cpython-310.pyc rename to openstack/orchestration/util/__pycache__/__init__.cpython-310.pyc diff --git a/orchestration/util/__pycache__/environment_format.cpython-310.pyc b/openstack/orchestration/util/__pycache__/environment_format.cpython-310.pyc similarity index 100% rename from orchestration/util/__pycache__/environment_format.cpython-310.pyc rename to openstack/orchestration/util/__pycache__/environment_format.cpython-310.pyc diff --git a/orchestration/util/__pycache__/event_utils.cpython-310.pyc b/openstack/orchestration/util/__pycache__/event_utils.cpython-310.pyc similarity index 100% rename from orchestration/util/__pycache__/event_utils.cpython-310.pyc rename to openstack/orchestration/util/__pycache__/event_utils.cpython-310.pyc diff --git a/orchestration/util/__pycache__/template_format.cpython-310.pyc b/openstack/orchestration/util/__pycache__/template_format.cpython-310.pyc similarity index 100% rename from orchestration/util/__pycache__/template_format.cpython-310.pyc rename to openstack/orchestration/util/__pycache__/template_format.cpython-310.pyc diff --git a/orchestration/util/__pycache__/template_utils.cpython-310.pyc b/openstack/orchestration/util/__pycache__/template_utils.cpython-310.pyc similarity index 100% rename from orchestration/util/__pycache__/template_utils.cpython-310.pyc rename to openstack/orchestration/util/__pycache__/template_utils.cpython-310.pyc diff --git a/orchestration/util/__pycache__/utils.cpython-310.pyc b/openstack/orchestration/util/__pycache__/utils.cpython-310.pyc similarity index 100% rename from orchestration/util/__pycache__/utils.cpython-310.pyc rename to openstack/orchestration/util/__pycache__/utils.cpython-310.pyc diff --git a/orchestration/util/environment_format.py b/openstack/orchestration/util/environment_format.py similarity index 100% rename from orchestration/util/environment_format.py rename to openstack/orchestration/util/environment_format.py diff --git a/orchestration/util/event_utils.py b/openstack/orchestration/util/event_utils.py similarity index 100% rename from orchestration/util/event_utils.py rename to openstack/orchestration/util/event_utils.py diff --git a/orchestration/util/template_format.py b/openstack/orchestration/util/template_format.py similarity index 100% rename from orchestration/util/template_format.py rename to openstack/orchestration/util/template_format.py diff --git a/orchestration/util/template_utils.py b/openstack/orchestration/util/template_utils.py similarity index 100% rename from orchestration/util/template_utils.py rename to openstack/orchestration/util/template_utils.py diff --git a/orchestration/util/utils.py b/openstack/orchestration/util/utils.py similarity index 100% rename from orchestration/util/utils.py rename to openstack/orchestration/util/utils.py diff --git a/tests/functional/block_storage/__init__.py b/openstack/orchestration/v1/__init__.py similarity index 100% rename from tests/functional/block_storage/__init__.py rename to openstack/orchestration/v1/__init__.py diff --git a/orchestration/v1/__pycache__/__init__.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/__init__.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/resource.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/resource.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/resource.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/resource.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/software_config.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/software_config.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/software_config.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/software_config.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/software_deployment.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/software_deployment.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/software_deployment.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/software_deployment.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/stack.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/stack.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/stack.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/stack.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/stack_environment.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/stack_environment.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/stack_environment.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/stack_environment.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/stack_event.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/stack_event.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/stack_event.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/stack_event.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/stack_files.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/stack_files.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/stack_files.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/stack_files.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/stack_template.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/stack_template.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/stack_template.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/stack_template.cpython-310.pyc diff --git a/orchestration/v1/__pycache__/template.cpython-310.pyc b/openstack/orchestration/v1/__pycache__/template.cpython-310.pyc similarity index 100% rename from orchestration/v1/__pycache__/template.cpython-310.pyc rename to openstack/orchestration/v1/__pycache__/template.cpython-310.pyc diff --git a/orchestration/v1/_proxy.py b/openstack/orchestration/v1/_proxy.py similarity index 100% rename from orchestration/v1/_proxy.py rename to openstack/orchestration/v1/_proxy.py diff --git a/orchestration/v1/resource.py b/openstack/orchestration/v1/resource.py similarity index 100% rename from orchestration/v1/resource.py rename to openstack/orchestration/v1/resource.py diff --git a/orchestration/v1/software_config.py b/openstack/orchestration/v1/software_config.py similarity index 100% rename from orchestration/v1/software_config.py rename to openstack/orchestration/v1/software_config.py diff --git a/orchestration/v1/software_deployment.py b/openstack/orchestration/v1/software_deployment.py similarity index 100% rename from orchestration/v1/software_deployment.py rename to openstack/orchestration/v1/software_deployment.py diff --git a/orchestration/v1/stack.py b/openstack/orchestration/v1/stack.py similarity index 100% rename from orchestration/v1/stack.py rename to openstack/orchestration/v1/stack.py diff --git a/orchestration/v1/stack_environment.py b/openstack/orchestration/v1/stack_environment.py similarity index 100% rename from orchestration/v1/stack_environment.py rename to openstack/orchestration/v1/stack_environment.py diff --git a/orchestration/v1/stack_event.py b/openstack/orchestration/v1/stack_event.py similarity index 100% rename from orchestration/v1/stack_event.py rename to openstack/orchestration/v1/stack_event.py diff --git a/orchestration/v1/stack_files.py b/openstack/orchestration/v1/stack_files.py similarity index 100% rename from orchestration/v1/stack_files.py rename to openstack/orchestration/v1/stack_files.py diff --git a/orchestration/v1/stack_template.py b/openstack/orchestration/v1/stack_template.py similarity index 100% rename from orchestration/v1/stack_template.py rename to openstack/orchestration/v1/stack_template.py diff --git a/orchestration/v1/template.py b/openstack/orchestration/v1/template.py similarity index 100% rename from orchestration/v1/template.py rename to openstack/orchestration/v1/template.py diff --git a/orchestration/version.py b/openstack/orchestration/version.py similarity index 100% rename from orchestration/version.py rename to openstack/orchestration/version.py diff --git a/tests/functional/block_storage/v2/__init__.py b/openstack/placement/__init__.py similarity index 100% rename from tests/functional/block_storage/v2/__init__.py rename to openstack/placement/__init__.py diff --git a/placement/__pycache__/__init__.cpython-310.pyc b/openstack/placement/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from placement/__pycache__/__init__.cpython-310.pyc rename to openstack/placement/__pycache__/__init__.cpython-310.pyc diff --git a/placement/__pycache__/placement_service.cpython-310.pyc b/openstack/placement/__pycache__/placement_service.cpython-310.pyc similarity index 100% rename from placement/__pycache__/placement_service.cpython-310.pyc rename to openstack/placement/__pycache__/placement_service.cpython-310.pyc diff --git a/placement/placement_service.py b/openstack/placement/placement_service.py similarity index 100% rename from placement/placement_service.py rename to openstack/placement/placement_service.py diff --git a/tests/functional/block_storage/v3/__init__.py b/openstack/placement/v1/__init__.py similarity index 100% rename from tests/functional/block_storage/v3/__init__.py rename to openstack/placement/v1/__init__.py diff --git a/placement/v1/__pycache__/__init__.cpython-310.pyc b/openstack/placement/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from placement/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/placement/v1/__pycache__/__init__.cpython-310.pyc diff --git a/placement/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/placement/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from placement/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/placement/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/placement/v1/__pycache__/resource_class.cpython-310.pyc b/openstack/placement/v1/__pycache__/resource_class.cpython-310.pyc similarity index 100% rename from placement/v1/__pycache__/resource_class.cpython-310.pyc rename to openstack/placement/v1/__pycache__/resource_class.cpython-310.pyc diff --git a/placement/v1/__pycache__/resource_provider.cpython-310.pyc b/openstack/placement/v1/__pycache__/resource_provider.cpython-310.pyc similarity index 100% rename from placement/v1/__pycache__/resource_provider.cpython-310.pyc rename to openstack/placement/v1/__pycache__/resource_provider.cpython-310.pyc diff --git a/placement/v1/__pycache__/resource_provider_inventory.cpython-310.pyc b/openstack/placement/v1/__pycache__/resource_provider_inventory.cpython-310.pyc similarity index 100% rename from placement/v1/__pycache__/resource_provider_inventory.cpython-310.pyc rename to openstack/placement/v1/__pycache__/resource_provider_inventory.cpython-310.pyc diff --git a/placement/v1/__pycache__/trait.cpython-310.pyc b/openstack/placement/v1/__pycache__/trait.cpython-310.pyc similarity index 100% rename from placement/v1/__pycache__/trait.cpython-310.pyc rename to openstack/placement/v1/__pycache__/trait.cpython-310.pyc diff --git a/placement/v1/_proxy.py b/openstack/placement/v1/_proxy.py similarity index 100% rename from placement/v1/_proxy.py rename to openstack/placement/v1/_proxy.py diff --git a/placement/v1/resource_class.py b/openstack/placement/v1/resource_class.py similarity index 100% rename from placement/v1/resource_class.py rename to openstack/placement/v1/resource_class.py diff --git a/placement/v1/resource_provider.py b/openstack/placement/v1/resource_provider.py similarity index 100% rename from placement/v1/resource_provider.py rename to openstack/placement/v1/resource_provider.py diff --git a/placement/v1/resource_provider_inventory.py b/openstack/placement/v1/resource_provider_inventory.py similarity index 100% rename from placement/v1/resource_provider_inventory.py rename to openstack/placement/v1/resource_provider_inventory.py diff --git a/placement/v1/trait.py b/openstack/placement/v1/trait.py similarity index 100% rename from placement/v1/trait.py rename to openstack/placement/v1/trait.py diff --git a/proxy.py b/openstack/proxy.py similarity index 100% rename from proxy.py rename to openstack/proxy.py diff --git a/py.typed b/openstack/py.typed similarity index 100% rename from py.typed rename to openstack/py.typed diff --git a/resource.py b/openstack/resource.py similarity index 100% rename from resource.py rename to openstack/resource.py diff --git a/service_description.py b/openstack/service_description.py similarity index 100% rename from service_description.py rename to openstack/service_description.py diff --git a/tests/functional/cloud/__init__.py b/openstack/shared_file_system/__init__.py similarity index 100% rename from tests/functional/cloud/__init__.py rename to openstack/shared_file_system/__init__.py diff --git a/shared_file_system/__pycache__/__init__.cpython-310.pyc b/openstack/shared_file_system/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from shared_file_system/__pycache__/__init__.cpython-310.pyc rename to openstack/shared_file_system/__pycache__/__init__.cpython-310.pyc diff --git a/shared_file_system/__pycache__/shared_file_system_service.cpython-310.pyc b/openstack/shared_file_system/__pycache__/shared_file_system_service.cpython-310.pyc similarity index 100% rename from shared_file_system/__pycache__/shared_file_system_service.cpython-310.pyc rename to openstack/shared_file_system/__pycache__/shared_file_system_service.cpython-310.pyc diff --git a/shared_file_system/shared_file_system_service.py b/openstack/shared_file_system/shared_file_system_service.py similarity index 100% rename from shared_file_system/shared_file_system_service.py rename to openstack/shared_file_system/shared_file_system_service.py diff --git a/tests/functional/clustering/__init__.py b/openstack/shared_file_system/v2/__init__.py similarity index 100% rename from tests/functional/clustering/__init__.py rename to openstack/shared_file_system/v2/__init__.py diff --git a/shared_file_system/v2/__pycache__/__init__.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/__init__.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/availability_zone.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/availability_zone.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/availability_zone.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/availability_zone.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/limit.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/limit.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/limit.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/limit.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_access_rule.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_access_rule.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_access_rule.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_access_rule.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_export_locations.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_export_locations.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_export_locations.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_export_locations.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_group.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_group.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_group.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_group.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_group_snapshot.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_group_snapshot.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_group_snapshot.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_group_snapshot.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_instance.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_instance.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_instance.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_instance.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_network.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_network.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_network.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_network.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_network_subnet.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_network_subnet.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_network_subnet.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_network_subnet.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_snapshot.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_snapshot.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_snapshot.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_snapshot.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/share_snapshot_instance.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/share_snapshot_instance.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/share_snapshot_instance.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/share_snapshot_instance.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/storage_pool.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/storage_pool.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/storage_pool.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/storage_pool.cpython-310.pyc diff --git a/shared_file_system/v2/__pycache__/user_message.cpython-310.pyc b/openstack/shared_file_system/v2/__pycache__/user_message.cpython-310.pyc similarity index 100% rename from shared_file_system/v2/__pycache__/user_message.cpython-310.pyc rename to openstack/shared_file_system/v2/__pycache__/user_message.cpython-310.pyc diff --git a/shared_file_system/v2/_proxy.py b/openstack/shared_file_system/v2/_proxy.py similarity index 100% rename from shared_file_system/v2/_proxy.py rename to openstack/shared_file_system/v2/_proxy.py diff --git a/shared_file_system/v2/availability_zone.py b/openstack/shared_file_system/v2/availability_zone.py similarity index 100% rename from shared_file_system/v2/availability_zone.py rename to openstack/shared_file_system/v2/availability_zone.py diff --git a/shared_file_system/v2/limit.py b/openstack/shared_file_system/v2/limit.py similarity index 100% rename from shared_file_system/v2/limit.py rename to openstack/shared_file_system/v2/limit.py diff --git a/shared_file_system/v2/share.py b/openstack/shared_file_system/v2/share.py similarity index 100% rename from shared_file_system/v2/share.py rename to openstack/shared_file_system/v2/share.py diff --git a/shared_file_system/v2/share_access_rule.py b/openstack/shared_file_system/v2/share_access_rule.py similarity index 100% rename from shared_file_system/v2/share_access_rule.py rename to openstack/shared_file_system/v2/share_access_rule.py diff --git a/shared_file_system/v2/share_export_locations.py b/openstack/shared_file_system/v2/share_export_locations.py similarity index 100% rename from shared_file_system/v2/share_export_locations.py rename to openstack/shared_file_system/v2/share_export_locations.py diff --git a/shared_file_system/v2/share_group.py b/openstack/shared_file_system/v2/share_group.py similarity index 100% rename from shared_file_system/v2/share_group.py rename to openstack/shared_file_system/v2/share_group.py diff --git a/shared_file_system/v2/share_group_snapshot.py b/openstack/shared_file_system/v2/share_group_snapshot.py similarity index 100% rename from shared_file_system/v2/share_group_snapshot.py rename to openstack/shared_file_system/v2/share_group_snapshot.py diff --git a/shared_file_system/v2/share_instance.py b/openstack/shared_file_system/v2/share_instance.py similarity index 100% rename from shared_file_system/v2/share_instance.py rename to openstack/shared_file_system/v2/share_instance.py diff --git a/shared_file_system/v2/share_network.py b/openstack/shared_file_system/v2/share_network.py similarity index 100% rename from shared_file_system/v2/share_network.py rename to openstack/shared_file_system/v2/share_network.py diff --git a/shared_file_system/v2/share_network_subnet.py b/openstack/shared_file_system/v2/share_network_subnet.py similarity index 100% rename from shared_file_system/v2/share_network_subnet.py rename to openstack/shared_file_system/v2/share_network_subnet.py diff --git a/shared_file_system/v2/share_snapshot.py b/openstack/shared_file_system/v2/share_snapshot.py similarity index 100% rename from shared_file_system/v2/share_snapshot.py rename to openstack/shared_file_system/v2/share_snapshot.py diff --git a/shared_file_system/v2/share_snapshot_instance.py b/openstack/shared_file_system/v2/share_snapshot_instance.py similarity index 100% rename from shared_file_system/v2/share_snapshot_instance.py rename to openstack/shared_file_system/v2/share_snapshot_instance.py diff --git a/shared_file_system/v2/storage_pool.py b/openstack/shared_file_system/v2/storage_pool.py similarity index 100% rename from shared_file_system/v2/storage_pool.py rename to openstack/shared_file_system/v2/storage_pool.py diff --git a/shared_file_system/v2/user_message.py b/openstack/shared_file_system/v2/user_message.py similarity index 100% rename from shared_file_system/v2/user_message.py rename to openstack/shared_file_system/v2/user_message.py diff --git a/tests/functional/compute/__init__.py b/openstack/test/__init__.py similarity index 100% rename from tests/functional/compute/__init__.py rename to openstack/test/__init__.py diff --git a/test/__pycache__/__init__.cpython-310.pyc b/openstack/test/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from test/__pycache__/__init__.cpython-310.pyc rename to openstack/test/__pycache__/__init__.cpython-310.pyc diff --git a/test/__pycache__/fakes.cpython-310.pyc b/openstack/test/__pycache__/fakes.cpython-310.pyc similarity index 100% rename from test/__pycache__/fakes.cpython-310.pyc rename to openstack/test/__pycache__/fakes.cpython-310.pyc diff --git a/test/fakes.py b/openstack/test/fakes.py similarity index 100% rename from test/fakes.py rename to openstack/test/fakes.py diff --git a/tests/README.rst b/openstack/tests/README.rst similarity index 100% rename from tests/README.rst rename to openstack/tests/README.rst diff --git a/tests/functional/compute/v2/__init__.py b/openstack/tests/__init__.py similarity index 100% rename from tests/functional/compute/v2/__init__.py rename to openstack/tests/__init__.py diff --git a/tests/__pycache__/__init__.cpython-310.pyc b/openstack/tests/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/__pycache__/__init__.cpython-310.pyc diff --git a/tests/__pycache__/base.cpython-310.pyc b/openstack/tests/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/__pycache__/base.cpython-310.pyc rename to openstack/tests/__pycache__/base.cpython-310.pyc diff --git a/tests/__pycache__/fakes.cpython-310.pyc b/openstack/tests/__pycache__/fakes.cpython-310.pyc similarity index 100% rename from tests/__pycache__/fakes.cpython-310.pyc rename to openstack/tests/__pycache__/fakes.cpython-310.pyc diff --git a/tests/__pycache__/fixtures.cpython-310.pyc b/openstack/tests/__pycache__/fixtures.cpython-310.pyc similarity index 100% rename from tests/__pycache__/fixtures.cpython-310.pyc rename to openstack/tests/__pycache__/fixtures.cpython-310.pyc diff --git a/tests/ansible/README.txt b/openstack/tests/ansible/README.txt similarity index 100% rename from tests/ansible/README.txt rename to openstack/tests/ansible/README.txt diff --git a/tests/ansible/hooks/post_test_hook.sh b/openstack/tests/ansible/hooks/post_test_hook.sh similarity index 100% rename from tests/ansible/hooks/post_test_hook.sh rename to openstack/tests/ansible/hooks/post_test_hook.sh diff --git a/tests/ansible/roles/auth/tasks/main.yml b/openstack/tests/ansible/roles/auth/tasks/main.yml similarity index 100% rename from tests/ansible/roles/auth/tasks/main.yml rename to openstack/tests/ansible/roles/auth/tasks/main.yml diff --git a/tests/ansible/roles/client_config/tasks/main.yml b/openstack/tests/ansible/roles/client_config/tasks/main.yml similarity index 100% rename from tests/ansible/roles/client_config/tasks/main.yml rename to openstack/tests/ansible/roles/client_config/tasks/main.yml diff --git a/tests/ansible/roles/group/defaults/main.yml b/openstack/tests/ansible/roles/group/defaults/main.yml similarity index 100% rename from tests/ansible/roles/group/defaults/main.yml rename to openstack/tests/ansible/roles/group/defaults/main.yml diff --git a/tests/ansible/roles/group/tasks/main.yml b/openstack/tests/ansible/roles/group/tasks/main.yml similarity index 100% rename from tests/ansible/roles/group/tasks/main.yml rename to openstack/tests/ansible/roles/group/tasks/main.yml diff --git a/tests/ansible/roles/image/defaults/main.yml b/openstack/tests/ansible/roles/image/defaults/main.yml similarity index 100% rename from tests/ansible/roles/image/defaults/main.yml rename to openstack/tests/ansible/roles/image/defaults/main.yml diff --git a/tests/ansible/roles/image/tasks/main.yml b/openstack/tests/ansible/roles/image/tasks/main.yml similarity index 100% rename from tests/ansible/roles/image/tasks/main.yml rename to openstack/tests/ansible/roles/image/tasks/main.yml diff --git a/tests/ansible/roles/keypair/defaults/main.yml b/openstack/tests/ansible/roles/keypair/defaults/main.yml similarity index 100% rename from tests/ansible/roles/keypair/defaults/main.yml rename to openstack/tests/ansible/roles/keypair/defaults/main.yml diff --git a/tests/ansible/roles/keypair/tasks/main.yml b/openstack/tests/ansible/roles/keypair/tasks/main.yml similarity index 100% rename from tests/ansible/roles/keypair/tasks/main.yml rename to openstack/tests/ansible/roles/keypair/tasks/main.yml diff --git a/tests/ansible/roles/keystone_domain/defaults/main.yml b/openstack/tests/ansible/roles/keystone_domain/defaults/main.yml similarity index 100% rename from tests/ansible/roles/keystone_domain/defaults/main.yml rename to openstack/tests/ansible/roles/keystone_domain/defaults/main.yml diff --git a/tests/ansible/roles/keystone_domain/tasks/main.yml b/openstack/tests/ansible/roles/keystone_domain/tasks/main.yml similarity index 100% rename from tests/ansible/roles/keystone_domain/tasks/main.yml rename to openstack/tests/ansible/roles/keystone_domain/tasks/main.yml diff --git a/tests/ansible/roles/keystone_role/defaults/main.yml b/openstack/tests/ansible/roles/keystone_role/defaults/main.yml similarity index 100% rename from tests/ansible/roles/keystone_role/defaults/main.yml rename to openstack/tests/ansible/roles/keystone_role/defaults/main.yml diff --git a/tests/ansible/roles/keystone_role/tasks/main.yml b/openstack/tests/ansible/roles/keystone_role/tasks/main.yml similarity index 100% rename from tests/ansible/roles/keystone_role/tasks/main.yml rename to openstack/tests/ansible/roles/keystone_role/tasks/main.yml diff --git a/tests/ansible/roles/network/defaults/main.yml b/openstack/tests/ansible/roles/network/defaults/main.yml similarity index 100% rename from tests/ansible/roles/network/defaults/main.yml rename to openstack/tests/ansible/roles/network/defaults/main.yml diff --git a/tests/ansible/roles/network/tasks/main.yml b/openstack/tests/ansible/roles/network/tasks/main.yml similarity index 100% rename from tests/ansible/roles/network/tasks/main.yml rename to openstack/tests/ansible/roles/network/tasks/main.yml diff --git a/tests/ansible/roles/nova_flavor/tasks/main.yml b/openstack/tests/ansible/roles/nova_flavor/tasks/main.yml similarity index 100% rename from tests/ansible/roles/nova_flavor/tasks/main.yml rename to openstack/tests/ansible/roles/nova_flavor/tasks/main.yml diff --git a/tests/ansible/roles/object/tasks/main.yml b/openstack/tests/ansible/roles/object/tasks/main.yml similarity index 100% rename from tests/ansible/roles/object/tasks/main.yml rename to openstack/tests/ansible/roles/object/tasks/main.yml diff --git a/tests/ansible/roles/port/defaults/main.yml b/openstack/tests/ansible/roles/port/defaults/main.yml similarity index 100% rename from tests/ansible/roles/port/defaults/main.yml rename to openstack/tests/ansible/roles/port/defaults/main.yml diff --git a/tests/ansible/roles/port/tasks/main.yml b/openstack/tests/ansible/roles/port/tasks/main.yml similarity index 100% rename from tests/ansible/roles/port/tasks/main.yml rename to openstack/tests/ansible/roles/port/tasks/main.yml diff --git a/tests/ansible/roles/router/defaults/main.yml b/openstack/tests/ansible/roles/router/defaults/main.yml similarity index 100% rename from tests/ansible/roles/router/defaults/main.yml rename to openstack/tests/ansible/roles/router/defaults/main.yml diff --git a/tests/ansible/roles/router/tasks/main.yml b/openstack/tests/ansible/roles/router/tasks/main.yml similarity index 100% rename from tests/ansible/roles/router/tasks/main.yml rename to openstack/tests/ansible/roles/router/tasks/main.yml diff --git a/tests/ansible/roles/security_group/defaults/main.yml b/openstack/tests/ansible/roles/security_group/defaults/main.yml similarity index 100% rename from tests/ansible/roles/security_group/defaults/main.yml rename to openstack/tests/ansible/roles/security_group/defaults/main.yml diff --git a/tests/ansible/roles/security_group/tasks/main.yml b/openstack/tests/ansible/roles/security_group/tasks/main.yml similarity index 100% rename from tests/ansible/roles/security_group/tasks/main.yml rename to openstack/tests/ansible/roles/security_group/tasks/main.yml diff --git a/tests/ansible/roles/server/defaults/main.yaml b/openstack/tests/ansible/roles/server/defaults/main.yaml similarity index 100% rename from tests/ansible/roles/server/defaults/main.yaml rename to openstack/tests/ansible/roles/server/defaults/main.yaml diff --git a/tests/ansible/roles/server/tasks/main.yml b/openstack/tests/ansible/roles/server/tasks/main.yml similarity index 100% rename from tests/ansible/roles/server/tasks/main.yml rename to openstack/tests/ansible/roles/server/tasks/main.yml diff --git a/tests/ansible/roles/subnet/defaults/main.yml b/openstack/tests/ansible/roles/subnet/defaults/main.yml similarity index 100% rename from tests/ansible/roles/subnet/defaults/main.yml rename to openstack/tests/ansible/roles/subnet/defaults/main.yml diff --git a/tests/ansible/roles/subnet/tasks/main.yml b/openstack/tests/ansible/roles/subnet/tasks/main.yml similarity index 100% rename from tests/ansible/roles/subnet/tasks/main.yml rename to openstack/tests/ansible/roles/subnet/tasks/main.yml diff --git a/tests/ansible/roles/user/tasks/main.yml b/openstack/tests/ansible/roles/user/tasks/main.yml similarity index 100% rename from tests/ansible/roles/user/tasks/main.yml rename to openstack/tests/ansible/roles/user/tasks/main.yml diff --git a/tests/ansible/roles/user_group/tasks/main.yml b/openstack/tests/ansible/roles/user_group/tasks/main.yml similarity index 100% rename from tests/ansible/roles/user_group/tasks/main.yml rename to openstack/tests/ansible/roles/user_group/tasks/main.yml diff --git a/tests/ansible/roles/volume/tasks/main.yml b/openstack/tests/ansible/roles/volume/tasks/main.yml similarity index 100% rename from tests/ansible/roles/volume/tasks/main.yml rename to openstack/tests/ansible/roles/volume/tasks/main.yml diff --git a/tests/ansible/run.yml b/openstack/tests/ansible/run.yml similarity index 100% rename from tests/ansible/run.yml rename to openstack/tests/ansible/run.yml diff --git a/tests/base.py b/openstack/tests/base.py similarity index 100% rename from tests/base.py rename to openstack/tests/base.py diff --git a/tests/fakes.py b/openstack/tests/fakes.py similarity index 100% rename from tests/fakes.py rename to openstack/tests/fakes.py diff --git a/tests/fixtures.py b/openstack/tests/fixtures.py similarity index 100% rename from tests/fixtures.py rename to openstack/tests/fixtures.py diff --git a/tests/functional/README.rst b/openstack/tests/functional/README.rst similarity index 100% rename from tests/functional/README.rst rename to openstack/tests/functional/README.rst diff --git a/tests/functional/dns/__init__.py b/openstack/tests/functional/__init__.py similarity index 100% rename from tests/functional/dns/__init__.py rename to openstack/tests/functional/__init__.py diff --git a/tests/functional/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/__pycache__/base.cpython-310.pyc b/openstack/tests/functional/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/functional/__pycache__/base.cpython-310.pyc rename to openstack/tests/functional/__pycache__/base.cpython-310.pyc diff --git a/tests/functional/dns/v2/__init__.py b/openstack/tests/functional/baremetal/__init__.py similarity index 100% rename from tests/functional/dns/v2/__init__.py rename to openstack/tests/functional/baremetal/__init__.py diff --git a/tests/functional/baremetal/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/base.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/base.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/base.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_allocation.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_allocation.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_allocation.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_allocation.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_chassis.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_chassis.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_chassis.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_chassis.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_conductor.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_conductor.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_conductor.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_conductor.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_deploy_templates.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_deploy_templates.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_deploy_templates.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_deploy_templates.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_driver.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_driver.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_driver.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_driver.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_node.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_node.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_node.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_node.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_port.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_port.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_port.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_port.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_port_group.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_port_group.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_port_group.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_port_group.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_volume_connector.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_volume_connector.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_volume_connector.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_volume_connector.cpython-310.pyc diff --git a/tests/functional/baremetal/__pycache__/test_baremetal_volume_target.cpython-310.pyc b/openstack/tests/functional/baremetal/__pycache__/test_baremetal_volume_target.cpython-310.pyc similarity index 100% rename from tests/functional/baremetal/__pycache__/test_baremetal_volume_target.cpython-310.pyc rename to openstack/tests/functional/baremetal/__pycache__/test_baremetal_volume_target.cpython-310.pyc diff --git a/tests/functional/baremetal/base.py b/openstack/tests/functional/baremetal/base.py similarity index 100% rename from tests/functional/baremetal/base.py rename to openstack/tests/functional/baremetal/base.py diff --git a/tests/functional/baremetal/test_baremetal_allocation.py b/openstack/tests/functional/baremetal/test_baremetal_allocation.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_allocation.py rename to openstack/tests/functional/baremetal/test_baremetal_allocation.py diff --git a/tests/functional/baremetal/test_baremetal_chassis.py b/openstack/tests/functional/baremetal/test_baremetal_chassis.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_chassis.py rename to openstack/tests/functional/baremetal/test_baremetal_chassis.py diff --git a/tests/functional/baremetal/test_baremetal_conductor.py b/openstack/tests/functional/baremetal/test_baremetal_conductor.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_conductor.py rename to openstack/tests/functional/baremetal/test_baremetal_conductor.py diff --git a/tests/functional/baremetal/test_baremetal_deploy_templates.py b/openstack/tests/functional/baremetal/test_baremetal_deploy_templates.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_deploy_templates.py rename to openstack/tests/functional/baremetal/test_baremetal_deploy_templates.py diff --git a/tests/functional/baremetal/test_baremetal_driver.py b/openstack/tests/functional/baremetal/test_baremetal_driver.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_driver.py rename to openstack/tests/functional/baremetal/test_baremetal_driver.py diff --git a/tests/functional/baremetal/test_baremetal_node.py b/openstack/tests/functional/baremetal/test_baremetal_node.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_node.py rename to openstack/tests/functional/baremetal/test_baremetal_node.py diff --git a/tests/functional/baremetal/test_baremetal_port.py b/openstack/tests/functional/baremetal/test_baremetal_port.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_port.py rename to openstack/tests/functional/baremetal/test_baremetal_port.py diff --git a/tests/functional/baremetal/test_baremetal_port_group.py b/openstack/tests/functional/baremetal/test_baremetal_port_group.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_port_group.py rename to openstack/tests/functional/baremetal/test_baremetal_port_group.py diff --git a/tests/functional/baremetal/test_baremetal_volume_connector.py b/openstack/tests/functional/baremetal/test_baremetal_volume_connector.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_volume_connector.py rename to openstack/tests/functional/baremetal/test_baremetal_volume_connector.py diff --git a/tests/functional/baremetal/test_baremetal_volume_target.py b/openstack/tests/functional/baremetal/test_baremetal_volume_target.py similarity index 100% rename from tests/functional/baremetal/test_baremetal_volume_target.py rename to openstack/tests/functional/baremetal/test_baremetal_volume_target.py diff --git a/tests/functional/base.py b/openstack/tests/functional/base.py similarity index 100% rename from tests/functional/base.py rename to openstack/tests/functional/base.py diff --git a/tests/functional/examples/__init__.py b/openstack/tests/functional/block_storage/__init__.py similarity index 100% rename from tests/functional/examples/__init__.py rename to openstack/tests/functional/block_storage/__init__.py diff --git a/tests/functional/block_storage/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/block_storage/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/block_storage/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/identity/__init__.py b/openstack/tests/functional/block_storage/v2/__init__.py similarity index 100% rename from tests/functional/identity/__init__.py rename to openstack/tests/functional/block_storage/v2/__init__.py diff --git a/tests/functional/block_storage/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/block_storage/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/block_storage/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/block_storage/v2/__pycache__/base.cpython-310.pyc b/openstack/tests/functional/block_storage/v2/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v2/__pycache__/base.cpython-310.pyc rename to openstack/tests/functional/block_storage/v2/__pycache__/base.cpython-310.pyc diff --git a/tests/functional/block_storage/v2/__pycache__/test_backup.cpython-310.pyc b/openstack/tests/functional/block_storage/v2/__pycache__/test_backup.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v2/__pycache__/test_backup.cpython-310.pyc rename to openstack/tests/functional/block_storage/v2/__pycache__/test_backup.cpython-310.pyc diff --git a/tests/functional/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc b/openstack/tests/functional/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc rename to openstack/tests/functional/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc diff --git a/tests/functional/block_storage/v2/__pycache__/test_stats.cpython-310.pyc b/openstack/tests/functional/block_storage/v2/__pycache__/test_stats.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v2/__pycache__/test_stats.cpython-310.pyc rename to openstack/tests/functional/block_storage/v2/__pycache__/test_stats.cpython-310.pyc diff --git a/tests/functional/block_storage/v2/__pycache__/test_type.cpython-310.pyc b/openstack/tests/functional/block_storage/v2/__pycache__/test_type.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v2/__pycache__/test_type.cpython-310.pyc rename to openstack/tests/functional/block_storage/v2/__pycache__/test_type.cpython-310.pyc diff --git a/tests/functional/block_storage/v2/__pycache__/test_volume.cpython-310.pyc b/openstack/tests/functional/block_storage/v2/__pycache__/test_volume.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v2/__pycache__/test_volume.cpython-310.pyc rename to openstack/tests/functional/block_storage/v2/__pycache__/test_volume.cpython-310.pyc diff --git a/tests/functional/block_storage/v2/base.py b/openstack/tests/functional/block_storage/v2/base.py similarity index 100% rename from tests/functional/block_storage/v2/base.py rename to openstack/tests/functional/block_storage/v2/base.py diff --git a/tests/functional/block_storage/v2/test_backup.py b/openstack/tests/functional/block_storage/v2/test_backup.py similarity index 100% rename from tests/functional/block_storage/v2/test_backup.py rename to openstack/tests/functional/block_storage/v2/test_backup.py diff --git a/tests/functional/block_storage/v2/test_snapshot.py b/openstack/tests/functional/block_storage/v2/test_snapshot.py similarity index 100% rename from tests/functional/block_storage/v2/test_snapshot.py rename to openstack/tests/functional/block_storage/v2/test_snapshot.py diff --git a/tests/functional/block_storage/v2/test_stats.py b/openstack/tests/functional/block_storage/v2/test_stats.py similarity index 100% rename from tests/functional/block_storage/v2/test_stats.py rename to openstack/tests/functional/block_storage/v2/test_stats.py diff --git a/tests/functional/block_storage/v2/test_type.py b/openstack/tests/functional/block_storage/v2/test_type.py similarity index 100% rename from tests/functional/block_storage/v2/test_type.py rename to openstack/tests/functional/block_storage/v2/test_type.py diff --git a/tests/functional/block_storage/v2/test_volume.py b/openstack/tests/functional/block_storage/v2/test_volume.py similarity index 100% rename from tests/functional/block_storage/v2/test_volume.py rename to openstack/tests/functional/block_storage/v2/test_volume.py diff --git a/tests/functional/identity/v3/__init__.py b/openstack/tests/functional/block_storage/v3/__init__.py similarity index 100% rename from tests/functional/identity/v3/__init__.py rename to openstack/tests/functional/block_storage/v3/__init__.py diff --git a/tests/functional/block_storage/v3/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/base.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/base.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/base.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_backup.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_backup.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_backup.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_backup.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_extension.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_extension.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_extension.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_extension.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_group.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_group.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_group.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_group.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_limits.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_limits.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_limits.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_limits.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_resource_filters.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_resource_filters.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_resource_filters.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_resource_filters.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_service.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_service.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_service.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_service.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_type.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_type.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_type.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_type.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/__pycache__/test_volume.cpython-310.pyc b/openstack/tests/functional/block_storage/v3/__pycache__/test_volume.cpython-310.pyc similarity index 100% rename from tests/functional/block_storage/v3/__pycache__/test_volume.cpython-310.pyc rename to openstack/tests/functional/block_storage/v3/__pycache__/test_volume.cpython-310.pyc diff --git a/tests/functional/block_storage/v3/base.py b/openstack/tests/functional/block_storage/v3/base.py similarity index 100% rename from tests/functional/block_storage/v3/base.py rename to openstack/tests/functional/block_storage/v3/base.py diff --git a/tests/functional/block_storage/v3/test_attachment.py b/openstack/tests/functional/block_storage/v3/test_attachment.py similarity index 100% rename from tests/functional/block_storage/v3/test_attachment.py rename to openstack/tests/functional/block_storage/v3/test_attachment.py diff --git a/tests/functional/block_storage/v3/test_availability_zone.py b/openstack/tests/functional/block_storage/v3/test_availability_zone.py similarity index 100% rename from tests/functional/block_storage/v3/test_availability_zone.py rename to openstack/tests/functional/block_storage/v3/test_availability_zone.py diff --git a/tests/functional/block_storage/v3/test_backup.py b/openstack/tests/functional/block_storage/v3/test_backup.py similarity index 100% rename from tests/functional/block_storage/v3/test_backup.py rename to openstack/tests/functional/block_storage/v3/test_backup.py diff --git a/tests/functional/block_storage/v3/test_block_storage_summary.py b/openstack/tests/functional/block_storage/v3/test_block_storage_summary.py similarity index 100% rename from tests/functional/block_storage/v3/test_block_storage_summary.py rename to openstack/tests/functional/block_storage/v3/test_block_storage_summary.py diff --git a/tests/functional/block_storage/v3/test_capabilities.py b/openstack/tests/functional/block_storage/v3/test_capabilities.py similarity index 100% rename from tests/functional/block_storage/v3/test_capabilities.py rename to openstack/tests/functional/block_storage/v3/test_capabilities.py diff --git a/tests/functional/block_storage/v3/test_extension.py b/openstack/tests/functional/block_storage/v3/test_extension.py similarity index 100% rename from tests/functional/block_storage/v3/test_extension.py rename to openstack/tests/functional/block_storage/v3/test_extension.py diff --git a/tests/functional/block_storage/v3/test_group.py b/openstack/tests/functional/block_storage/v3/test_group.py similarity index 100% rename from tests/functional/block_storage/v3/test_group.py rename to openstack/tests/functional/block_storage/v3/test_group.py diff --git a/tests/functional/block_storage/v3/test_limits.py b/openstack/tests/functional/block_storage/v3/test_limits.py similarity index 100% rename from tests/functional/block_storage/v3/test_limits.py rename to openstack/tests/functional/block_storage/v3/test_limits.py diff --git a/tests/functional/block_storage/v3/test_resource_filters.py b/openstack/tests/functional/block_storage/v3/test_resource_filters.py similarity index 100% rename from tests/functional/block_storage/v3/test_resource_filters.py rename to openstack/tests/functional/block_storage/v3/test_resource_filters.py diff --git a/tests/functional/block_storage/v3/test_service.py b/openstack/tests/functional/block_storage/v3/test_service.py similarity index 100% rename from tests/functional/block_storage/v3/test_service.py rename to openstack/tests/functional/block_storage/v3/test_service.py diff --git a/tests/functional/block_storage/v3/test_snapshot.py b/openstack/tests/functional/block_storage/v3/test_snapshot.py similarity index 100% rename from tests/functional/block_storage/v3/test_snapshot.py rename to openstack/tests/functional/block_storage/v3/test_snapshot.py diff --git a/tests/functional/block_storage/v3/test_transfer.py b/openstack/tests/functional/block_storage/v3/test_transfer.py similarity index 100% rename from tests/functional/block_storage/v3/test_transfer.py rename to openstack/tests/functional/block_storage/v3/test_transfer.py diff --git a/tests/functional/block_storage/v3/test_type.py b/openstack/tests/functional/block_storage/v3/test_type.py similarity index 100% rename from tests/functional/block_storage/v3/test_type.py rename to openstack/tests/functional/block_storage/v3/test_type.py diff --git a/tests/functional/block_storage/v3/test_volume.py b/openstack/tests/functional/block_storage/v3/test_volume.py similarity index 100% rename from tests/functional/block_storage/v3/test_volume.py rename to openstack/tests/functional/block_storage/v3/test_volume.py diff --git a/tests/functional/image/__init__.py b/openstack/tests/functional/cloud/__init__.py similarity index 100% rename from tests/functional/image/__init__.py rename to openstack/tests/functional/cloud/__init__.py diff --git a/tests/functional/cloud/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_aggregate.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_aggregate.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_aggregate.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_aggregate.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_cluster_templates.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_cluster_templates.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_cluster_templates.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_cluster_templates.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_clustering.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_clustering.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_clustering.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_clustering.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_coe_clusters.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_coe_clusters.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_coe_clusters.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_coe_clusters.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_compute.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_compute.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_compute.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_compute.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_devstack.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_devstack.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_devstack.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_devstack.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_domain.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_domain.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_domain.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_domain.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_endpoints.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_endpoints.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_endpoints.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_endpoints.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_flavor.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_flavor.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_flavor.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_flavor.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_floating_ip.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_floating_ip.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_floating_ip.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_floating_ip.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_groups.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_groups.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_groups.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_groups.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_identity.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_identity.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_identity.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_identity.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_image.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_image.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_image.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_image.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_inventory.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_inventory.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_inventory.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_inventory.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_keypairs.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_keypairs.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_keypairs.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_keypairs.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_limits.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_limits.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_limits.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_limits.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_magnum_services.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_magnum_services.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_magnum_services.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_magnum_services.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_network.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_network.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_network.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_network.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_object.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_object.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_object.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_object.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_port.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_port.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_port.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_port.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_project.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_project.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_project.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_project.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_project_cleanup.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_project_cleanup.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_project_cleanup.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_project_cleanup.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_qos_policy.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_qos_policy.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_qos_policy.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_qos_policy.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_quotas.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_quotas.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_quotas.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_quotas.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_range_search.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_range_search.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_range_search.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_range_search.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_recordset.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_recordset.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_recordset.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_recordset.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_router.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_router.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_router.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_router.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_security_groups.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_security_groups.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_security_groups.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_security_groups.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_server_group.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_server_group.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_server_group.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_server_group.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_services.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_services.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_services.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_services.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_stack.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_stack.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_stack.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_stack.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_users.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_users.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_users.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_users.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_volume.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_volume.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_volume.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_volume.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_volume_backup.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_volume_backup.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_volume_backup.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_volume_backup.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_volume_type.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_volume_type.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_volume_type.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_volume_type.cpython-310.pyc diff --git a/tests/functional/cloud/__pycache__/test_zone.cpython-310.pyc b/openstack/tests/functional/cloud/__pycache__/test_zone.cpython-310.pyc similarity index 100% rename from tests/functional/cloud/__pycache__/test_zone.cpython-310.pyc rename to openstack/tests/functional/cloud/__pycache__/test_zone.cpython-310.pyc diff --git a/tests/functional/cloud/test_aggregate.py b/openstack/tests/functional/cloud/test_aggregate.py similarity index 100% rename from tests/functional/cloud/test_aggregate.py rename to openstack/tests/functional/cloud/test_aggregate.py diff --git a/tests/functional/cloud/test_cluster_templates.py b/openstack/tests/functional/cloud/test_cluster_templates.py similarity index 100% rename from tests/functional/cloud/test_cluster_templates.py rename to openstack/tests/functional/cloud/test_cluster_templates.py diff --git a/tests/functional/cloud/test_clustering.py b/openstack/tests/functional/cloud/test_clustering.py similarity index 100% rename from tests/functional/cloud/test_clustering.py rename to openstack/tests/functional/cloud/test_clustering.py diff --git a/tests/functional/cloud/test_coe_clusters.py b/openstack/tests/functional/cloud/test_coe_clusters.py similarity index 100% rename from tests/functional/cloud/test_coe_clusters.py rename to openstack/tests/functional/cloud/test_coe_clusters.py diff --git a/tests/functional/cloud/test_compute.py b/openstack/tests/functional/cloud/test_compute.py similarity index 100% rename from tests/functional/cloud/test_compute.py rename to openstack/tests/functional/cloud/test_compute.py diff --git a/tests/functional/cloud/test_devstack.py b/openstack/tests/functional/cloud/test_devstack.py similarity index 100% rename from tests/functional/cloud/test_devstack.py rename to openstack/tests/functional/cloud/test_devstack.py diff --git a/tests/functional/cloud/test_domain.py b/openstack/tests/functional/cloud/test_domain.py similarity index 100% rename from tests/functional/cloud/test_domain.py rename to openstack/tests/functional/cloud/test_domain.py diff --git a/tests/functional/cloud/test_endpoints.py b/openstack/tests/functional/cloud/test_endpoints.py similarity index 100% rename from tests/functional/cloud/test_endpoints.py rename to openstack/tests/functional/cloud/test_endpoints.py diff --git a/tests/functional/cloud/test_flavor.py b/openstack/tests/functional/cloud/test_flavor.py similarity index 100% rename from tests/functional/cloud/test_flavor.py rename to openstack/tests/functional/cloud/test_flavor.py diff --git a/tests/functional/cloud/test_floating_ip.py b/openstack/tests/functional/cloud/test_floating_ip.py similarity index 100% rename from tests/functional/cloud/test_floating_ip.py rename to openstack/tests/functional/cloud/test_floating_ip.py diff --git a/tests/functional/cloud/test_floating_ip_pool.py b/openstack/tests/functional/cloud/test_floating_ip_pool.py similarity index 100% rename from tests/functional/cloud/test_floating_ip_pool.py rename to openstack/tests/functional/cloud/test_floating_ip_pool.py diff --git a/tests/functional/cloud/test_groups.py b/openstack/tests/functional/cloud/test_groups.py similarity index 100% rename from tests/functional/cloud/test_groups.py rename to openstack/tests/functional/cloud/test_groups.py diff --git a/tests/functional/cloud/test_identity.py b/openstack/tests/functional/cloud/test_identity.py similarity index 100% rename from tests/functional/cloud/test_identity.py rename to openstack/tests/functional/cloud/test_identity.py diff --git a/tests/functional/cloud/test_image.py b/openstack/tests/functional/cloud/test_image.py similarity index 100% rename from tests/functional/cloud/test_image.py rename to openstack/tests/functional/cloud/test_image.py diff --git a/tests/functional/cloud/test_inventory.py b/openstack/tests/functional/cloud/test_inventory.py similarity index 100% rename from tests/functional/cloud/test_inventory.py rename to openstack/tests/functional/cloud/test_inventory.py diff --git a/tests/functional/cloud/test_keypairs.py b/openstack/tests/functional/cloud/test_keypairs.py similarity index 100% rename from tests/functional/cloud/test_keypairs.py rename to openstack/tests/functional/cloud/test_keypairs.py diff --git a/tests/functional/cloud/test_limits.py b/openstack/tests/functional/cloud/test_limits.py similarity index 100% rename from tests/functional/cloud/test_limits.py rename to openstack/tests/functional/cloud/test_limits.py diff --git a/tests/functional/cloud/test_magnum_services.py b/openstack/tests/functional/cloud/test_magnum_services.py similarity index 100% rename from tests/functional/cloud/test_magnum_services.py rename to openstack/tests/functional/cloud/test_magnum_services.py diff --git a/tests/functional/cloud/test_network.py b/openstack/tests/functional/cloud/test_network.py similarity index 100% rename from tests/functional/cloud/test_network.py rename to openstack/tests/functional/cloud/test_network.py diff --git a/tests/functional/cloud/test_object.py b/openstack/tests/functional/cloud/test_object.py similarity index 100% rename from tests/functional/cloud/test_object.py rename to openstack/tests/functional/cloud/test_object.py diff --git a/tests/functional/cloud/test_port.py b/openstack/tests/functional/cloud/test_port.py similarity index 100% rename from tests/functional/cloud/test_port.py rename to openstack/tests/functional/cloud/test_port.py diff --git a/tests/functional/cloud/test_project.py b/openstack/tests/functional/cloud/test_project.py similarity index 100% rename from tests/functional/cloud/test_project.py rename to openstack/tests/functional/cloud/test_project.py diff --git a/tests/functional/cloud/test_project_cleanup.py b/openstack/tests/functional/cloud/test_project_cleanup.py similarity index 100% rename from tests/functional/cloud/test_project_cleanup.py rename to openstack/tests/functional/cloud/test_project_cleanup.py diff --git a/tests/functional/cloud/test_qos_bandwidth_limit_rule.py b/openstack/tests/functional/cloud/test_qos_bandwidth_limit_rule.py similarity index 100% rename from tests/functional/cloud/test_qos_bandwidth_limit_rule.py rename to openstack/tests/functional/cloud/test_qos_bandwidth_limit_rule.py diff --git a/tests/functional/cloud/test_qos_dscp_marking_rule.py b/openstack/tests/functional/cloud/test_qos_dscp_marking_rule.py similarity index 100% rename from tests/functional/cloud/test_qos_dscp_marking_rule.py rename to openstack/tests/functional/cloud/test_qos_dscp_marking_rule.py diff --git a/tests/functional/cloud/test_qos_minimum_bandwidth_rule.py b/openstack/tests/functional/cloud/test_qos_minimum_bandwidth_rule.py similarity index 100% rename from tests/functional/cloud/test_qos_minimum_bandwidth_rule.py rename to openstack/tests/functional/cloud/test_qos_minimum_bandwidth_rule.py diff --git a/tests/functional/cloud/test_qos_policy.py b/openstack/tests/functional/cloud/test_qos_policy.py similarity index 100% rename from tests/functional/cloud/test_qos_policy.py rename to openstack/tests/functional/cloud/test_qos_policy.py diff --git a/tests/functional/cloud/test_quotas.py b/openstack/tests/functional/cloud/test_quotas.py similarity index 100% rename from tests/functional/cloud/test_quotas.py rename to openstack/tests/functional/cloud/test_quotas.py diff --git a/tests/functional/cloud/test_range_search.py b/openstack/tests/functional/cloud/test_range_search.py similarity index 100% rename from tests/functional/cloud/test_range_search.py rename to openstack/tests/functional/cloud/test_range_search.py diff --git a/tests/functional/cloud/test_recordset.py b/openstack/tests/functional/cloud/test_recordset.py similarity index 100% rename from tests/functional/cloud/test_recordset.py rename to openstack/tests/functional/cloud/test_recordset.py diff --git a/tests/functional/cloud/test_router.py b/openstack/tests/functional/cloud/test_router.py similarity index 100% rename from tests/functional/cloud/test_router.py rename to openstack/tests/functional/cloud/test_router.py diff --git a/tests/functional/cloud/test_security_groups.py b/openstack/tests/functional/cloud/test_security_groups.py similarity index 100% rename from tests/functional/cloud/test_security_groups.py rename to openstack/tests/functional/cloud/test_security_groups.py diff --git a/tests/functional/cloud/test_server_group.py b/openstack/tests/functional/cloud/test_server_group.py similarity index 100% rename from tests/functional/cloud/test_server_group.py rename to openstack/tests/functional/cloud/test_server_group.py diff --git a/tests/functional/cloud/test_services.py b/openstack/tests/functional/cloud/test_services.py similarity index 100% rename from tests/functional/cloud/test_services.py rename to openstack/tests/functional/cloud/test_services.py diff --git a/tests/functional/cloud/test_stack.py b/openstack/tests/functional/cloud/test_stack.py similarity index 100% rename from tests/functional/cloud/test_stack.py rename to openstack/tests/functional/cloud/test_stack.py diff --git a/tests/functional/cloud/test_users.py b/openstack/tests/functional/cloud/test_users.py similarity index 100% rename from tests/functional/cloud/test_users.py rename to openstack/tests/functional/cloud/test_users.py diff --git a/tests/functional/cloud/test_volume.py b/openstack/tests/functional/cloud/test_volume.py similarity index 100% rename from tests/functional/cloud/test_volume.py rename to openstack/tests/functional/cloud/test_volume.py diff --git a/tests/functional/cloud/test_volume_backup.py b/openstack/tests/functional/cloud/test_volume_backup.py similarity index 100% rename from tests/functional/cloud/test_volume_backup.py rename to openstack/tests/functional/cloud/test_volume_backup.py diff --git a/tests/functional/cloud/test_volume_type.py b/openstack/tests/functional/cloud/test_volume_type.py similarity index 100% rename from tests/functional/cloud/test_volume_type.py rename to openstack/tests/functional/cloud/test_volume_type.py diff --git a/tests/functional/cloud/test_zone.py b/openstack/tests/functional/cloud/test_zone.py similarity index 100% rename from tests/functional/cloud/test_zone.py rename to openstack/tests/functional/cloud/test_zone.py diff --git a/tests/functional/image/v2/__init__.py b/openstack/tests/functional/clustering/__init__.py similarity index 100% rename from tests/functional/image/v2/__init__.py rename to openstack/tests/functional/clustering/__init__.py diff --git a/tests/functional/clustering/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/clustering/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/clustering/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/clustering/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/clustering/__pycache__/test_cluster.cpython-310.pyc b/openstack/tests/functional/clustering/__pycache__/test_cluster.cpython-310.pyc similarity index 100% rename from tests/functional/clustering/__pycache__/test_cluster.cpython-310.pyc rename to openstack/tests/functional/clustering/__pycache__/test_cluster.cpython-310.pyc diff --git a/tests/functional/clustering/test_cluster.py b/openstack/tests/functional/clustering/test_cluster.py similarity index 100% rename from tests/functional/clustering/test_cluster.py rename to openstack/tests/functional/clustering/test_cluster.py diff --git a/tests/functional/instance_ha/__init__.py b/openstack/tests/functional/compute/__init__.py similarity index 100% rename from tests/functional/instance_ha/__init__.py rename to openstack/tests/functional/compute/__init__.py diff --git a/tests/functional/compute/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/compute/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/compute/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/compute/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/compute/__pycache__/base.cpython-310.pyc b/openstack/tests/functional/compute/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/functional/compute/__pycache__/base.cpython-310.pyc rename to openstack/tests/functional/compute/__pycache__/base.cpython-310.pyc diff --git a/tests/functional/compute/base.py b/openstack/tests/functional/compute/base.py similarity index 100% rename from tests/functional/compute/base.py rename to openstack/tests/functional/compute/base.py diff --git a/tests/functional/load_balancer/__init__.py b/openstack/tests/functional/compute/v2/__init__.py similarity index 100% rename from tests/functional/load_balancer/__init__.py rename to openstack/tests/functional/compute/v2/__init__.py diff --git a/tests/functional/compute/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_extension.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_extension.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_extension.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_extension.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_flavor.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_flavor.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_flavor.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_flavor.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_image.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_image.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_image.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_image.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_keypair.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_keypair.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_keypair.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_keypair.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_limits.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_limits.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_limits.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_limits.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_quota_set.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_quota_set.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_quota_set.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_quota_set.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_server.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_server.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_server.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_server.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_service.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_service.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_service.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_service.cpython-310.pyc diff --git a/tests/functional/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc b/openstack/tests/functional/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc similarity index 100% rename from tests/functional/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc rename to openstack/tests/functional/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc diff --git a/tests/functional/compute/v2/test_extension.py b/openstack/tests/functional/compute/v2/test_extension.py similarity index 100% rename from tests/functional/compute/v2/test_extension.py rename to openstack/tests/functional/compute/v2/test_extension.py diff --git a/tests/functional/compute/v2/test_flavor.py b/openstack/tests/functional/compute/v2/test_flavor.py similarity index 100% rename from tests/functional/compute/v2/test_flavor.py rename to openstack/tests/functional/compute/v2/test_flavor.py diff --git a/tests/functional/compute/v2/test_hypervisor.py b/openstack/tests/functional/compute/v2/test_hypervisor.py similarity index 100% rename from tests/functional/compute/v2/test_hypervisor.py rename to openstack/tests/functional/compute/v2/test_hypervisor.py diff --git a/tests/functional/compute/v2/test_image.py b/openstack/tests/functional/compute/v2/test_image.py similarity index 100% rename from tests/functional/compute/v2/test_image.py rename to openstack/tests/functional/compute/v2/test_image.py diff --git a/tests/functional/compute/v2/test_keypair.py b/openstack/tests/functional/compute/v2/test_keypair.py similarity index 100% rename from tests/functional/compute/v2/test_keypair.py rename to openstack/tests/functional/compute/v2/test_keypair.py diff --git a/tests/functional/compute/v2/test_limits.py b/openstack/tests/functional/compute/v2/test_limits.py similarity index 100% rename from tests/functional/compute/v2/test_limits.py rename to openstack/tests/functional/compute/v2/test_limits.py diff --git a/tests/functional/compute/v2/test_quota_set.py b/openstack/tests/functional/compute/v2/test_quota_set.py similarity index 100% rename from tests/functional/compute/v2/test_quota_set.py rename to openstack/tests/functional/compute/v2/test_quota_set.py diff --git a/tests/functional/compute/v2/test_server.py b/openstack/tests/functional/compute/v2/test_server.py similarity index 100% rename from tests/functional/compute/v2/test_server.py rename to openstack/tests/functional/compute/v2/test_server.py diff --git a/tests/functional/compute/v2/test_service.py b/openstack/tests/functional/compute/v2/test_service.py similarity index 100% rename from tests/functional/compute/v2/test_service.py rename to openstack/tests/functional/compute/v2/test_service.py diff --git a/tests/functional/compute/v2/test_volume_attachment.py b/openstack/tests/functional/compute/v2/test_volume_attachment.py similarity index 100% rename from tests/functional/compute/v2/test_volume_attachment.py rename to openstack/tests/functional/compute/v2/test_volume_attachment.py diff --git a/tests/functional/load_balancer/v2/__init__.py b/openstack/tests/functional/dns/__init__.py similarity index 100% rename from tests/functional/load_balancer/v2/__init__.py rename to openstack/tests/functional/dns/__init__.py diff --git a/tests/functional/dns/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/dns/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/dns/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/dns/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/network/__init__.py b/openstack/tests/functional/dns/v2/__init__.py similarity index 100% rename from tests/functional/network/__init__.py rename to openstack/tests/functional/dns/v2/__init__.py diff --git a/tests/functional/dns/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/dns/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/dns/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/dns/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/dns/v2/__pycache__/test_zone.cpython-310.pyc b/openstack/tests/functional/dns/v2/__pycache__/test_zone.cpython-310.pyc similarity index 100% rename from tests/functional/dns/v2/__pycache__/test_zone.cpython-310.pyc rename to openstack/tests/functional/dns/v2/__pycache__/test_zone.cpython-310.pyc diff --git a/tests/functional/dns/v2/__pycache__/test_zone_share.cpython-310.pyc b/openstack/tests/functional/dns/v2/__pycache__/test_zone_share.cpython-310.pyc similarity index 100% rename from tests/functional/dns/v2/__pycache__/test_zone_share.cpython-310.pyc rename to openstack/tests/functional/dns/v2/__pycache__/test_zone_share.cpython-310.pyc diff --git a/tests/functional/dns/v2/test_zone.py b/openstack/tests/functional/dns/v2/test_zone.py similarity index 100% rename from tests/functional/dns/v2/test_zone.py rename to openstack/tests/functional/dns/v2/test_zone.py diff --git a/tests/functional/dns/v2/test_zone_share.py b/openstack/tests/functional/dns/v2/test_zone_share.py similarity index 100% rename from tests/functional/dns/v2/test_zone_share.py rename to openstack/tests/functional/dns/v2/test_zone_share.py diff --git a/tests/functional/network/v2/__init__.py b/openstack/tests/functional/examples/__init__.py similarity index 100% rename from tests/functional/network/v2/__init__.py rename to openstack/tests/functional/examples/__init__.py diff --git a/tests/functional/examples/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/examples/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/examples/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/examples/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/examples/__pycache__/test_compute.cpython-310.pyc b/openstack/tests/functional/examples/__pycache__/test_compute.cpython-310.pyc similarity index 100% rename from tests/functional/examples/__pycache__/test_compute.cpython-310.pyc rename to openstack/tests/functional/examples/__pycache__/test_compute.cpython-310.pyc diff --git a/tests/functional/examples/__pycache__/test_identity.cpython-310.pyc b/openstack/tests/functional/examples/__pycache__/test_identity.cpython-310.pyc similarity index 100% rename from tests/functional/examples/__pycache__/test_identity.cpython-310.pyc rename to openstack/tests/functional/examples/__pycache__/test_identity.cpython-310.pyc diff --git a/tests/functional/examples/__pycache__/test_image.cpython-310.pyc b/openstack/tests/functional/examples/__pycache__/test_image.cpython-310.pyc similarity index 100% rename from tests/functional/examples/__pycache__/test_image.cpython-310.pyc rename to openstack/tests/functional/examples/__pycache__/test_image.cpython-310.pyc diff --git a/tests/functional/examples/__pycache__/test_network.cpython-310.pyc b/openstack/tests/functional/examples/__pycache__/test_network.cpython-310.pyc similarity index 100% rename from tests/functional/examples/__pycache__/test_network.cpython-310.pyc rename to openstack/tests/functional/examples/__pycache__/test_network.cpython-310.pyc diff --git a/tests/functional/examples/test_compute.py b/openstack/tests/functional/examples/test_compute.py similarity index 100% rename from tests/functional/examples/test_compute.py rename to openstack/tests/functional/examples/test_compute.py diff --git a/tests/functional/examples/test_identity.py b/openstack/tests/functional/examples/test_identity.py similarity index 100% rename from tests/functional/examples/test_identity.py rename to openstack/tests/functional/examples/test_identity.py diff --git a/tests/functional/examples/test_image.py b/openstack/tests/functional/examples/test_image.py similarity index 100% rename from tests/functional/examples/test_image.py rename to openstack/tests/functional/examples/test_image.py diff --git a/tests/functional/examples/test_network.py b/openstack/tests/functional/examples/test_network.py similarity index 100% rename from tests/functional/examples/test_network.py rename to openstack/tests/functional/examples/test_network.py diff --git a/tests/functional/object_store/__init__.py b/openstack/tests/functional/identity/__init__.py similarity index 100% rename from tests/functional/object_store/__init__.py rename to openstack/tests/functional/identity/__init__.py diff --git a/tests/functional/identity/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/identity/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/identity/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/identity/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/object_store/v1/__init__.py b/openstack/tests/functional/identity/v3/__init__.py similarity index 100% rename from tests/functional/object_store/v1/__init__.py rename to openstack/tests/functional/identity/v3/__init__.py diff --git a/tests/functional/identity/v3/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/identity/v3/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/identity/v3/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/identity/v3/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/identity/v3/__pycache__/test_application_credential.cpython-310.pyc b/openstack/tests/functional/identity/v3/__pycache__/test_application_credential.cpython-310.pyc similarity index 100% rename from tests/functional/identity/v3/__pycache__/test_application_credential.cpython-310.pyc rename to openstack/tests/functional/identity/v3/__pycache__/test_application_credential.cpython-310.pyc diff --git a/tests/functional/identity/v3/__pycache__/test_domain_config.cpython-310.pyc b/openstack/tests/functional/identity/v3/__pycache__/test_domain_config.cpython-310.pyc similarity index 100% rename from tests/functional/identity/v3/__pycache__/test_domain_config.cpython-310.pyc rename to openstack/tests/functional/identity/v3/__pycache__/test_domain_config.cpython-310.pyc diff --git a/tests/functional/identity/v3/test_application_credential.py b/openstack/tests/functional/identity/v3/test_application_credential.py similarity index 100% rename from tests/functional/identity/v3/test_application_credential.py rename to openstack/tests/functional/identity/v3/test_application_credential.py diff --git a/tests/functional/identity/v3/test_domain_config.py b/openstack/tests/functional/identity/v3/test_domain_config.py similarity index 100% rename from tests/functional/identity/v3/test_domain_config.py rename to openstack/tests/functional/identity/v3/test_domain_config.py diff --git a/tests/functional/orchestration/__init__.py b/openstack/tests/functional/image/__init__.py similarity index 100% rename from tests/functional/orchestration/__init__.py rename to openstack/tests/functional/image/__init__.py diff --git a/tests/functional/image/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/image/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/image/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/image/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/orchestration/v1/__init__.py b/openstack/tests/functional/image/v2/__init__.py similarity index 100% rename from tests/functional/orchestration/v1/__init__.py rename to openstack/tests/functional/image/v2/__init__.py diff --git a/tests/functional/image/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/base.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/base.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/base.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/test_image.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/test_image.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/test_image.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/test_image.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/test_metadef_object.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/test_metadef_object.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/test_metadef_object.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/test_metadef_object.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/test_metadef_property.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/test_metadef_property.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/test_metadef_property.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/test_metadef_property.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/test_schema.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/test_schema.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/test_schema.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/test_schema.cpython-310.pyc diff --git a/tests/functional/image/v2/__pycache__/test_task.cpython-310.pyc b/openstack/tests/functional/image/v2/__pycache__/test_task.cpython-310.pyc similarity index 100% rename from tests/functional/image/v2/__pycache__/test_task.cpython-310.pyc rename to openstack/tests/functional/image/v2/__pycache__/test_task.cpython-310.pyc diff --git a/tests/functional/image/v2/base.py b/openstack/tests/functional/image/v2/base.py similarity index 100% rename from tests/functional/image/v2/base.py rename to openstack/tests/functional/image/v2/base.py diff --git a/tests/functional/image/v2/test_image.py b/openstack/tests/functional/image/v2/test_image.py similarity index 100% rename from tests/functional/image/v2/test_image.py rename to openstack/tests/functional/image/v2/test_image.py diff --git a/tests/functional/image/v2/test_metadef_namespace.py b/openstack/tests/functional/image/v2/test_metadef_namespace.py similarity index 100% rename from tests/functional/image/v2/test_metadef_namespace.py rename to openstack/tests/functional/image/v2/test_metadef_namespace.py diff --git a/tests/functional/image/v2/test_metadef_object.py b/openstack/tests/functional/image/v2/test_metadef_object.py similarity index 100% rename from tests/functional/image/v2/test_metadef_object.py rename to openstack/tests/functional/image/v2/test_metadef_object.py diff --git a/tests/functional/image/v2/test_metadef_property.py b/openstack/tests/functional/image/v2/test_metadef_property.py similarity index 100% rename from tests/functional/image/v2/test_metadef_property.py rename to openstack/tests/functional/image/v2/test_metadef_property.py diff --git a/tests/functional/image/v2/test_metadef_resource_type.py b/openstack/tests/functional/image/v2/test_metadef_resource_type.py similarity index 100% rename from tests/functional/image/v2/test_metadef_resource_type.py rename to openstack/tests/functional/image/v2/test_metadef_resource_type.py diff --git a/tests/functional/image/v2/test_metadef_schema.py b/openstack/tests/functional/image/v2/test_metadef_schema.py similarity index 100% rename from tests/functional/image/v2/test_metadef_schema.py rename to openstack/tests/functional/image/v2/test_metadef_schema.py diff --git a/tests/functional/image/v2/test_schema.py b/openstack/tests/functional/image/v2/test_schema.py similarity index 100% rename from tests/functional/image/v2/test_schema.py rename to openstack/tests/functional/image/v2/test_schema.py diff --git a/tests/functional/image/v2/test_task.py b/openstack/tests/functional/image/v2/test_task.py similarity index 100% rename from tests/functional/image/v2/test_task.py rename to openstack/tests/functional/image/v2/test_task.py diff --git a/tests/functional/placement/__init__.py b/openstack/tests/functional/instance_ha/__init__.py similarity index 100% rename from tests/functional/placement/__init__.py rename to openstack/tests/functional/instance_ha/__init__.py diff --git a/tests/functional/instance_ha/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/instance_ha/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/instance_ha/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/instance_ha/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/instance_ha/__pycache__/test_host.cpython-310.pyc b/openstack/tests/functional/instance_ha/__pycache__/test_host.cpython-310.pyc similarity index 100% rename from tests/functional/instance_ha/__pycache__/test_host.cpython-310.pyc rename to openstack/tests/functional/instance_ha/__pycache__/test_host.cpython-310.pyc diff --git a/tests/functional/instance_ha/__pycache__/test_segment.cpython-310.pyc b/openstack/tests/functional/instance_ha/__pycache__/test_segment.cpython-310.pyc similarity index 100% rename from tests/functional/instance_ha/__pycache__/test_segment.cpython-310.pyc rename to openstack/tests/functional/instance_ha/__pycache__/test_segment.cpython-310.pyc diff --git a/tests/functional/instance_ha/test_host.py b/openstack/tests/functional/instance_ha/test_host.py similarity index 100% rename from tests/functional/instance_ha/test_host.py rename to openstack/tests/functional/instance_ha/test_host.py diff --git a/tests/functional/instance_ha/test_segment.py b/openstack/tests/functional/instance_ha/test_segment.py similarity index 100% rename from tests/functional/instance_ha/test_segment.py rename to openstack/tests/functional/instance_ha/test_segment.py diff --git a/tests/functional/placement/v1/__init__.py b/openstack/tests/functional/load_balancer/__init__.py similarity index 100% rename from tests/functional/placement/v1/__init__.py rename to openstack/tests/functional/load_balancer/__init__.py diff --git a/tests/functional/load_balancer/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/load_balancer/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/load_balancer/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/load_balancer/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__init__.py b/openstack/tests/functional/load_balancer/v2/__init__.py similarity index 100% rename from tests/functional/shared_file_system/__init__.py rename to openstack/tests/functional/load_balancer/v2/__init__.py diff --git a/tests/functional/load_balancer/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/load_balancer/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/load_balancer/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/load_balancer/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/load_balancer/v2/__pycache__/test_load_balancer.cpython-310.pyc b/openstack/tests/functional/load_balancer/v2/__pycache__/test_load_balancer.cpython-310.pyc similarity index 100% rename from tests/functional/load_balancer/v2/__pycache__/test_load_balancer.cpython-310.pyc rename to openstack/tests/functional/load_balancer/v2/__pycache__/test_load_balancer.cpython-310.pyc diff --git a/tests/functional/load_balancer/v2/test_load_balancer.py b/openstack/tests/functional/load_balancer/v2/test_load_balancer.py similarity index 100% rename from tests/functional/load_balancer/v2/test_load_balancer.py rename to openstack/tests/functional/load_balancer/v2/test_load_balancer.py diff --git a/tests/unit/__init__.py b/openstack/tests/functional/network/__init__.py similarity index 100% rename from tests/unit/__init__.py rename to openstack/tests/functional/network/__init__.py diff --git a/tests/functional/network/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/network/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/network/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/network/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/accelerator/__init__.py b/openstack/tests/functional/network/v2/__init__.py similarity index 100% rename from tests/unit/accelerator/__init__.py rename to openstack/tests/functional/network/v2/__init__.py diff --git a/tests/functional/network/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_address_group.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_address_group.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_address_group.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_address_group.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_address_scope.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_address_scope.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_address_scope.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_address_scope.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_agent.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_agent.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_agent.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_agent.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_agent_add_remove_network.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_agent_add_remove_network.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_agent_add_remove_network.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_agent_add_remove_network.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_agent_add_remove_router.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_agent_add_remove_router.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_agent_add_remove_router.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_agent_add_remove_router.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_availability_zone.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_availability_zone.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_availability_zone.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_availability_zone.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_bgp.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_bgp.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_bgp.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_bgp.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_dvr_router.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_dvr_router.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_dvr_router.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_dvr_router.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_extension.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_extension.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_extension.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_extension.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_firewall_group.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_firewall_group.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_firewall_group.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_firewall_group.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_firewall_rule_insert_remove_policy.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_firewall_rule_insert_remove_policy.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_firewall_rule_insert_remove_policy.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_firewall_rule_insert_remove_policy.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_flavor.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_flavor.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_flavor.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_flavor.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_floating_ip.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_floating_ip.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_floating_ip.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_floating_ip.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_local_ip.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_local_ip.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_local_ip.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_local_ip.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_network.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_network.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_network.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_network.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_port.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_port.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_port.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_port.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_qos_policy.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_qos_policy.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_qos_policy.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_qos_policy.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_quota.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_quota.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_quota.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_quota.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_router.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_router.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_router.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_router.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_router_add_remove_interface.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_router_add_remove_interface.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_router_add_remove_interface.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_router_add_remove_interface.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_security_group.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_security_group.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_security_group.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_security_group.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_segment.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_segment.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_segment.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_segment.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_service_profile.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_service_profile.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_service_profile.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_service_profile.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_service_provider.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_service_provider.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_service_provider.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_service_provider.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_sfc.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_sfc.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_sfc.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_sfc.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_subnet.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_subnet.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_subnet.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_subnet.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_subnet_from_subnet_pool.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_subnet_from_subnet_pool.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_subnet_from_subnet_pool.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_subnet_from_subnet_pool.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_taas.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_taas.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_taas.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_taas.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_trunk.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_trunk.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_trunk.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_trunk.cpython-310.pyc diff --git a/tests/functional/network/v2/__pycache__/test_vpnaas.cpython-310.pyc b/openstack/tests/functional/network/v2/__pycache__/test_vpnaas.cpython-310.pyc similarity index 100% rename from tests/functional/network/v2/__pycache__/test_vpnaas.cpython-310.pyc rename to openstack/tests/functional/network/v2/__pycache__/test_vpnaas.cpython-310.pyc diff --git a/tests/functional/network/v2/test_address_group.py b/openstack/tests/functional/network/v2/test_address_group.py similarity index 100% rename from tests/functional/network/v2/test_address_group.py rename to openstack/tests/functional/network/v2/test_address_group.py diff --git a/tests/functional/network/v2/test_address_scope.py b/openstack/tests/functional/network/v2/test_address_scope.py similarity index 100% rename from tests/functional/network/v2/test_address_scope.py rename to openstack/tests/functional/network/v2/test_address_scope.py diff --git a/tests/functional/network/v2/test_agent.py b/openstack/tests/functional/network/v2/test_agent.py similarity index 100% rename from tests/functional/network/v2/test_agent.py rename to openstack/tests/functional/network/v2/test_agent.py diff --git a/tests/functional/network/v2/test_agent_add_remove_network.py b/openstack/tests/functional/network/v2/test_agent_add_remove_network.py similarity index 100% rename from tests/functional/network/v2/test_agent_add_remove_network.py rename to openstack/tests/functional/network/v2/test_agent_add_remove_network.py diff --git a/tests/functional/network/v2/test_agent_add_remove_router.py b/openstack/tests/functional/network/v2/test_agent_add_remove_router.py similarity index 100% rename from tests/functional/network/v2/test_agent_add_remove_router.py rename to openstack/tests/functional/network/v2/test_agent_add_remove_router.py diff --git a/tests/functional/network/v2/test_auto_allocated_topology.py b/openstack/tests/functional/network/v2/test_auto_allocated_topology.py similarity index 100% rename from tests/functional/network/v2/test_auto_allocated_topology.py rename to openstack/tests/functional/network/v2/test_auto_allocated_topology.py diff --git a/tests/functional/network/v2/test_availability_zone.py b/openstack/tests/functional/network/v2/test_availability_zone.py similarity index 100% rename from tests/functional/network/v2/test_availability_zone.py rename to openstack/tests/functional/network/v2/test_availability_zone.py diff --git a/tests/functional/network/v2/test_bgp.py b/openstack/tests/functional/network/v2/test_bgp.py similarity index 100% rename from tests/functional/network/v2/test_bgp.py rename to openstack/tests/functional/network/v2/test_bgp.py diff --git a/tests/functional/network/v2/test_bgpvpn.py b/openstack/tests/functional/network/v2/test_bgpvpn.py similarity index 100% rename from tests/functional/network/v2/test_bgpvpn.py rename to openstack/tests/functional/network/v2/test_bgpvpn.py diff --git a/tests/functional/network/v2/test_default_security_group_rule.py b/openstack/tests/functional/network/v2/test_default_security_group_rule.py similarity index 100% rename from tests/functional/network/v2/test_default_security_group_rule.py rename to openstack/tests/functional/network/v2/test_default_security_group_rule.py diff --git a/tests/functional/network/v2/test_dvr_router.py b/openstack/tests/functional/network/v2/test_dvr_router.py similarity index 100% rename from tests/functional/network/v2/test_dvr_router.py rename to openstack/tests/functional/network/v2/test_dvr_router.py diff --git a/tests/functional/network/v2/test_extension.py b/openstack/tests/functional/network/v2/test_extension.py similarity index 100% rename from tests/functional/network/v2/test_extension.py rename to openstack/tests/functional/network/v2/test_extension.py diff --git a/tests/functional/network/v2/test_firewall_group.py b/openstack/tests/functional/network/v2/test_firewall_group.py similarity index 100% rename from tests/functional/network/v2/test_firewall_group.py rename to openstack/tests/functional/network/v2/test_firewall_group.py diff --git a/tests/functional/network/v2/test_firewall_policy.py b/openstack/tests/functional/network/v2/test_firewall_policy.py similarity index 100% rename from tests/functional/network/v2/test_firewall_policy.py rename to openstack/tests/functional/network/v2/test_firewall_policy.py diff --git a/tests/functional/network/v2/test_firewall_rule.py b/openstack/tests/functional/network/v2/test_firewall_rule.py similarity index 100% rename from tests/functional/network/v2/test_firewall_rule.py rename to openstack/tests/functional/network/v2/test_firewall_rule.py diff --git a/tests/functional/network/v2/test_firewall_rule_insert_remove_policy.py b/openstack/tests/functional/network/v2/test_firewall_rule_insert_remove_policy.py similarity index 100% rename from tests/functional/network/v2/test_firewall_rule_insert_remove_policy.py rename to openstack/tests/functional/network/v2/test_firewall_rule_insert_remove_policy.py diff --git a/tests/functional/network/v2/test_flavor.py b/openstack/tests/functional/network/v2/test_flavor.py similarity index 100% rename from tests/functional/network/v2/test_flavor.py rename to openstack/tests/functional/network/v2/test_flavor.py diff --git a/tests/functional/network/v2/test_floating_ip.py b/openstack/tests/functional/network/v2/test_floating_ip.py similarity index 100% rename from tests/functional/network/v2/test_floating_ip.py rename to openstack/tests/functional/network/v2/test_floating_ip.py diff --git a/tests/functional/network/v2/test_l3_conntrack_helper.py b/openstack/tests/functional/network/v2/test_l3_conntrack_helper.py similarity index 100% rename from tests/functional/network/v2/test_l3_conntrack_helper.py rename to openstack/tests/functional/network/v2/test_l3_conntrack_helper.py diff --git a/tests/functional/network/v2/test_local_ip.py b/openstack/tests/functional/network/v2/test_local_ip.py similarity index 100% rename from tests/functional/network/v2/test_local_ip.py rename to openstack/tests/functional/network/v2/test_local_ip.py diff --git a/tests/functional/network/v2/test_local_ip_association.py b/openstack/tests/functional/network/v2/test_local_ip_association.py similarity index 100% rename from tests/functional/network/v2/test_local_ip_association.py rename to openstack/tests/functional/network/v2/test_local_ip_association.py diff --git a/tests/functional/network/v2/test_ndp_proxy.py b/openstack/tests/functional/network/v2/test_ndp_proxy.py similarity index 100% rename from tests/functional/network/v2/test_ndp_proxy.py rename to openstack/tests/functional/network/v2/test_ndp_proxy.py diff --git a/tests/functional/network/v2/test_network.py b/openstack/tests/functional/network/v2/test_network.py similarity index 100% rename from tests/functional/network/v2/test_network.py rename to openstack/tests/functional/network/v2/test_network.py diff --git a/tests/functional/network/v2/test_network_ip_availability.py b/openstack/tests/functional/network/v2/test_network_ip_availability.py similarity index 100% rename from tests/functional/network/v2/test_network_ip_availability.py rename to openstack/tests/functional/network/v2/test_network_ip_availability.py diff --git a/tests/functional/network/v2/test_network_segment_range.py b/openstack/tests/functional/network/v2/test_network_segment_range.py similarity index 100% rename from tests/functional/network/v2/test_network_segment_range.py rename to openstack/tests/functional/network/v2/test_network_segment_range.py diff --git a/tests/functional/network/v2/test_port.py b/openstack/tests/functional/network/v2/test_port.py similarity index 100% rename from tests/functional/network/v2/test_port.py rename to openstack/tests/functional/network/v2/test_port.py diff --git a/tests/functional/network/v2/test_port_forwarding.py b/openstack/tests/functional/network/v2/test_port_forwarding.py similarity index 100% rename from tests/functional/network/v2/test_port_forwarding.py rename to openstack/tests/functional/network/v2/test_port_forwarding.py diff --git a/tests/functional/network/v2/test_qos_bandwidth_limit_rule.py b/openstack/tests/functional/network/v2/test_qos_bandwidth_limit_rule.py similarity index 100% rename from tests/functional/network/v2/test_qos_bandwidth_limit_rule.py rename to openstack/tests/functional/network/v2/test_qos_bandwidth_limit_rule.py diff --git a/tests/functional/network/v2/test_qos_dscp_marking_rule.py b/openstack/tests/functional/network/v2/test_qos_dscp_marking_rule.py similarity index 100% rename from tests/functional/network/v2/test_qos_dscp_marking_rule.py rename to openstack/tests/functional/network/v2/test_qos_dscp_marking_rule.py diff --git a/tests/functional/network/v2/test_qos_minimum_bandwidth_rule.py b/openstack/tests/functional/network/v2/test_qos_minimum_bandwidth_rule.py similarity index 100% rename from tests/functional/network/v2/test_qos_minimum_bandwidth_rule.py rename to openstack/tests/functional/network/v2/test_qos_minimum_bandwidth_rule.py diff --git a/tests/functional/network/v2/test_qos_minimum_packet_rate_rule.py b/openstack/tests/functional/network/v2/test_qos_minimum_packet_rate_rule.py similarity index 100% rename from tests/functional/network/v2/test_qos_minimum_packet_rate_rule.py rename to openstack/tests/functional/network/v2/test_qos_minimum_packet_rate_rule.py diff --git a/tests/functional/network/v2/test_qos_policy.py b/openstack/tests/functional/network/v2/test_qos_policy.py similarity index 100% rename from tests/functional/network/v2/test_qos_policy.py rename to openstack/tests/functional/network/v2/test_qos_policy.py diff --git a/tests/functional/network/v2/test_qos_rule_type.py b/openstack/tests/functional/network/v2/test_qos_rule_type.py similarity index 100% rename from tests/functional/network/v2/test_qos_rule_type.py rename to openstack/tests/functional/network/v2/test_qos_rule_type.py diff --git a/tests/functional/network/v2/test_quota.py b/openstack/tests/functional/network/v2/test_quota.py similarity index 100% rename from tests/functional/network/v2/test_quota.py rename to openstack/tests/functional/network/v2/test_quota.py diff --git a/tests/functional/network/v2/test_rbac_policy.py b/openstack/tests/functional/network/v2/test_rbac_policy.py similarity index 100% rename from tests/functional/network/v2/test_rbac_policy.py rename to openstack/tests/functional/network/v2/test_rbac_policy.py diff --git a/tests/functional/network/v2/test_router.py b/openstack/tests/functional/network/v2/test_router.py similarity index 100% rename from tests/functional/network/v2/test_router.py rename to openstack/tests/functional/network/v2/test_router.py diff --git a/tests/functional/network/v2/test_router_add_remove_interface.py b/openstack/tests/functional/network/v2/test_router_add_remove_interface.py similarity index 100% rename from tests/functional/network/v2/test_router_add_remove_interface.py rename to openstack/tests/functional/network/v2/test_router_add_remove_interface.py diff --git a/tests/functional/network/v2/test_security_group.py b/openstack/tests/functional/network/v2/test_security_group.py similarity index 100% rename from tests/functional/network/v2/test_security_group.py rename to openstack/tests/functional/network/v2/test_security_group.py diff --git a/tests/functional/network/v2/test_security_group_rule.py b/openstack/tests/functional/network/v2/test_security_group_rule.py similarity index 100% rename from tests/functional/network/v2/test_security_group_rule.py rename to openstack/tests/functional/network/v2/test_security_group_rule.py diff --git a/tests/functional/network/v2/test_segment.py b/openstack/tests/functional/network/v2/test_segment.py similarity index 100% rename from tests/functional/network/v2/test_segment.py rename to openstack/tests/functional/network/v2/test_segment.py diff --git a/tests/functional/network/v2/test_service_profile.py b/openstack/tests/functional/network/v2/test_service_profile.py similarity index 100% rename from tests/functional/network/v2/test_service_profile.py rename to openstack/tests/functional/network/v2/test_service_profile.py diff --git a/tests/functional/network/v2/test_service_provider.py b/openstack/tests/functional/network/v2/test_service_provider.py similarity index 100% rename from tests/functional/network/v2/test_service_provider.py rename to openstack/tests/functional/network/v2/test_service_provider.py diff --git a/tests/functional/network/v2/test_sfc.py b/openstack/tests/functional/network/v2/test_sfc.py similarity index 100% rename from tests/functional/network/v2/test_sfc.py rename to openstack/tests/functional/network/v2/test_sfc.py diff --git a/tests/functional/network/v2/test_subnet.py b/openstack/tests/functional/network/v2/test_subnet.py similarity index 100% rename from tests/functional/network/v2/test_subnet.py rename to openstack/tests/functional/network/v2/test_subnet.py diff --git a/tests/functional/network/v2/test_subnet_from_subnet_pool.py b/openstack/tests/functional/network/v2/test_subnet_from_subnet_pool.py similarity index 100% rename from tests/functional/network/v2/test_subnet_from_subnet_pool.py rename to openstack/tests/functional/network/v2/test_subnet_from_subnet_pool.py diff --git a/tests/functional/network/v2/test_subnet_pool.py b/openstack/tests/functional/network/v2/test_subnet_pool.py similarity index 100% rename from tests/functional/network/v2/test_subnet_pool.py rename to openstack/tests/functional/network/v2/test_subnet_pool.py diff --git a/tests/functional/network/v2/test_taas.py b/openstack/tests/functional/network/v2/test_taas.py similarity index 100% rename from tests/functional/network/v2/test_taas.py rename to openstack/tests/functional/network/v2/test_taas.py diff --git a/tests/functional/network/v2/test_trunk.py b/openstack/tests/functional/network/v2/test_trunk.py similarity index 100% rename from tests/functional/network/v2/test_trunk.py rename to openstack/tests/functional/network/v2/test_trunk.py diff --git a/tests/functional/network/v2/test_vpnaas.py b/openstack/tests/functional/network/v2/test_vpnaas.py similarity index 100% rename from tests/functional/network/v2/test_vpnaas.py rename to openstack/tests/functional/network/v2/test_vpnaas.py diff --git a/tests/unit/accelerator/v2/__init__.py b/openstack/tests/functional/object_store/__init__.py similarity index 100% rename from tests/unit/accelerator/v2/__init__.py rename to openstack/tests/functional/object_store/__init__.py diff --git a/tests/functional/object_store/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/object_store/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/object_store/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/object_store/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/baremetal/__init__.py b/openstack/tests/functional/object_store/v1/__init__.py similarity index 100% rename from tests/unit/baremetal/__init__.py rename to openstack/tests/functional/object_store/v1/__init__.py diff --git a/tests/functional/object_store/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/object_store/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/object_store/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/object_store/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/object_store/v1/__pycache__/test_account.cpython-310.pyc b/openstack/tests/functional/object_store/v1/__pycache__/test_account.cpython-310.pyc similarity index 100% rename from tests/functional/object_store/v1/__pycache__/test_account.cpython-310.pyc rename to openstack/tests/functional/object_store/v1/__pycache__/test_account.cpython-310.pyc diff --git a/tests/functional/object_store/v1/__pycache__/test_container.cpython-310.pyc b/openstack/tests/functional/object_store/v1/__pycache__/test_container.cpython-310.pyc similarity index 100% rename from tests/functional/object_store/v1/__pycache__/test_container.cpython-310.pyc rename to openstack/tests/functional/object_store/v1/__pycache__/test_container.cpython-310.pyc diff --git a/tests/functional/object_store/v1/__pycache__/test_obj.cpython-310.pyc b/openstack/tests/functional/object_store/v1/__pycache__/test_obj.cpython-310.pyc similarity index 100% rename from tests/functional/object_store/v1/__pycache__/test_obj.cpython-310.pyc rename to openstack/tests/functional/object_store/v1/__pycache__/test_obj.cpython-310.pyc diff --git a/tests/functional/object_store/v1/test_account.py b/openstack/tests/functional/object_store/v1/test_account.py similarity index 100% rename from tests/functional/object_store/v1/test_account.py rename to openstack/tests/functional/object_store/v1/test_account.py diff --git a/tests/functional/object_store/v1/test_container.py b/openstack/tests/functional/object_store/v1/test_container.py similarity index 100% rename from tests/functional/object_store/v1/test_container.py rename to openstack/tests/functional/object_store/v1/test_container.py diff --git a/tests/functional/object_store/v1/test_obj.py b/openstack/tests/functional/object_store/v1/test_obj.py similarity index 100% rename from tests/functional/object_store/v1/test_obj.py rename to openstack/tests/functional/object_store/v1/test_obj.py diff --git a/tests/unit/baremetal/v1/__init__.py b/openstack/tests/functional/orchestration/__init__.py similarity index 100% rename from tests/unit/baremetal/v1/__init__.py rename to openstack/tests/functional/orchestration/__init__.py diff --git a/tests/functional/orchestration/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/orchestration/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/orchestration/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/orchestration/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/baremetal_introspection/__init__.py b/openstack/tests/functional/orchestration/v1/__init__.py similarity index 100% rename from tests/unit/baremetal_introspection/__init__.py rename to openstack/tests/functional/orchestration/v1/__init__.py diff --git a/tests/functional/orchestration/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/orchestration/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/orchestration/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/orchestration/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/orchestration/v1/__pycache__/test_stack.cpython-310.pyc b/openstack/tests/functional/orchestration/v1/__pycache__/test_stack.cpython-310.pyc similarity index 100% rename from tests/functional/orchestration/v1/__pycache__/test_stack.cpython-310.pyc rename to openstack/tests/functional/orchestration/v1/__pycache__/test_stack.cpython-310.pyc diff --git a/tests/functional/orchestration/v1/hello_world.yaml b/openstack/tests/functional/orchestration/v1/hello_world.yaml similarity index 100% rename from tests/functional/orchestration/v1/hello_world.yaml rename to openstack/tests/functional/orchestration/v1/hello_world.yaml diff --git a/tests/functional/orchestration/v1/test_stack.py b/openstack/tests/functional/orchestration/v1/test_stack.py similarity index 100% rename from tests/functional/orchestration/v1/test_stack.py rename to openstack/tests/functional/orchestration/v1/test_stack.py diff --git a/tests/unit/baremetal_introspection/v1/__init__.py b/openstack/tests/functional/placement/__init__.py similarity index 100% rename from tests/unit/baremetal_introspection/v1/__init__.py rename to openstack/tests/functional/placement/__init__.py diff --git a/tests/functional/placement/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/placement/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/placement/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/placement/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/block_storage/__init__.py b/openstack/tests/functional/placement/v1/__init__.py similarity index 100% rename from tests/unit/block_storage/__init__.py rename to openstack/tests/functional/placement/v1/__init__.py diff --git a/tests/functional/placement/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/placement/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/placement/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/placement/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc b/openstack/tests/functional/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc similarity index 100% rename from tests/functional/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc rename to openstack/tests/functional/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc diff --git a/tests/functional/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc b/openstack/tests/functional/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc similarity index 100% rename from tests/functional/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc rename to openstack/tests/functional/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc diff --git a/tests/functional/placement/v1/__pycache__/test_trait.cpython-310.pyc b/openstack/tests/functional/placement/v1/__pycache__/test_trait.cpython-310.pyc similarity index 100% rename from tests/functional/placement/v1/__pycache__/test_trait.cpython-310.pyc rename to openstack/tests/functional/placement/v1/__pycache__/test_trait.cpython-310.pyc diff --git a/tests/functional/placement/v1/test_resource_provider.py b/openstack/tests/functional/placement/v1/test_resource_provider.py similarity index 100% rename from tests/functional/placement/v1/test_resource_provider.py rename to openstack/tests/functional/placement/v1/test_resource_provider.py diff --git a/tests/functional/placement/v1/test_resource_provider_inventory.py b/openstack/tests/functional/placement/v1/test_resource_provider_inventory.py similarity index 100% rename from tests/functional/placement/v1/test_resource_provider_inventory.py rename to openstack/tests/functional/placement/v1/test_resource_provider_inventory.py diff --git a/tests/functional/placement/v1/test_trait.py b/openstack/tests/functional/placement/v1/test_trait.py similarity index 100% rename from tests/functional/placement/v1/test_trait.py rename to openstack/tests/functional/placement/v1/test_trait.py diff --git a/tests/unit/block_storage/v2/__init__.py b/openstack/tests/functional/shared_file_system/__init__.py similarity index 100% rename from tests/unit/block_storage/v2/__init__.py rename to openstack/tests/functional/shared_file_system/__init__.py diff --git a/tests/functional/shared_file_system/__pycache__/__init__.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/__init__.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/base.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/base.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/base.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_availability_zone.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_availability_zone.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_availability_zone.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_availability_zone.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_export_locations.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_export_locations.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_export_locations.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_export_locations.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_limit.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_limit.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_limit.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_limit.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_access_rule.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_access_rule.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_access_rule.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_access_rule.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_group.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_group.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_group.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_group.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_group_snapshot.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_group_snapshot.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_group_snapshot.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_group_snapshot.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_instance.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_instance.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_instance.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_instance.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_metadata.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_metadata.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_metadata.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_metadata.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_network.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_network.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_network.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_network.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_network_subnet.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_network_subnet.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_network_subnet.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_network_subnet.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_snapshot.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_snapshot.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_snapshot.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_snapshot.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_share_snapshot_instance.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_share_snapshot_instance.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_share_snapshot_instance.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_share_snapshot_instance.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_storage_pool.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_storage_pool.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_storage_pool.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_storage_pool.cpython-310.pyc diff --git a/tests/functional/shared_file_system/__pycache__/test_user_message.cpython-310.pyc b/openstack/tests/functional/shared_file_system/__pycache__/test_user_message.cpython-310.pyc similarity index 100% rename from tests/functional/shared_file_system/__pycache__/test_user_message.cpython-310.pyc rename to openstack/tests/functional/shared_file_system/__pycache__/test_user_message.cpython-310.pyc diff --git a/tests/functional/shared_file_system/base.py b/openstack/tests/functional/shared_file_system/base.py similarity index 100% rename from tests/functional/shared_file_system/base.py rename to openstack/tests/functional/shared_file_system/base.py diff --git a/tests/functional/shared_file_system/test_availability_zone.py b/openstack/tests/functional/shared_file_system/test_availability_zone.py similarity index 100% rename from tests/functional/shared_file_system/test_availability_zone.py rename to openstack/tests/functional/shared_file_system/test_availability_zone.py diff --git a/tests/functional/shared_file_system/test_export_locations.py b/openstack/tests/functional/shared_file_system/test_export_locations.py similarity index 100% rename from tests/functional/shared_file_system/test_export_locations.py rename to openstack/tests/functional/shared_file_system/test_export_locations.py diff --git a/tests/functional/shared_file_system/test_limit.py b/openstack/tests/functional/shared_file_system/test_limit.py similarity index 100% rename from tests/functional/shared_file_system/test_limit.py rename to openstack/tests/functional/shared_file_system/test_limit.py diff --git a/tests/functional/shared_file_system/test_share.py b/openstack/tests/functional/shared_file_system/test_share.py similarity index 100% rename from tests/functional/shared_file_system/test_share.py rename to openstack/tests/functional/shared_file_system/test_share.py diff --git a/tests/functional/shared_file_system/test_share_access_rule.py b/openstack/tests/functional/shared_file_system/test_share_access_rule.py similarity index 100% rename from tests/functional/shared_file_system/test_share_access_rule.py rename to openstack/tests/functional/shared_file_system/test_share_access_rule.py diff --git a/tests/functional/shared_file_system/test_share_group.py b/openstack/tests/functional/shared_file_system/test_share_group.py similarity index 100% rename from tests/functional/shared_file_system/test_share_group.py rename to openstack/tests/functional/shared_file_system/test_share_group.py diff --git a/tests/functional/shared_file_system/test_share_group_snapshot.py b/openstack/tests/functional/shared_file_system/test_share_group_snapshot.py similarity index 100% rename from tests/functional/shared_file_system/test_share_group_snapshot.py rename to openstack/tests/functional/shared_file_system/test_share_group_snapshot.py diff --git a/tests/functional/shared_file_system/test_share_instance.py b/openstack/tests/functional/shared_file_system/test_share_instance.py similarity index 100% rename from tests/functional/shared_file_system/test_share_instance.py rename to openstack/tests/functional/shared_file_system/test_share_instance.py diff --git a/tests/functional/shared_file_system/test_share_metadata.py b/openstack/tests/functional/shared_file_system/test_share_metadata.py similarity index 100% rename from tests/functional/shared_file_system/test_share_metadata.py rename to openstack/tests/functional/shared_file_system/test_share_metadata.py diff --git a/tests/functional/shared_file_system/test_share_network.py b/openstack/tests/functional/shared_file_system/test_share_network.py similarity index 100% rename from tests/functional/shared_file_system/test_share_network.py rename to openstack/tests/functional/shared_file_system/test_share_network.py diff --git a/tests/functional/shared_file_system/test_share_network_subnet.py b/openstack/tests/functional/shared_file_system/test_share_network_subnet.py similarity index 100% rename from tests/functional/shared_file_system/test_share_network_subnet.py rename to openstack/tests/functional/shared_file_system/test_share_network_subnet.py diff --git a/tests/functional/shared_file_system/test_share_snapshot.py b/openstack/tests/functional/shared_file_system/test_share_snapshot.py similarity index 100% rename from tests/functional/shared_file_system/test_share_snapshot.py rename to openstack/tests/functional/shared_file_system/test_share_snapshot.py diff --git a/tests/functional/shared_file_system/test_share_snapshot_instance.py b/openstack/tests/functional/shared_file_system/test_share_snapshot_instance.py similarity index 100% rename from tests/functional/shared_file_system/test_share_snapshot_instance.py rename to openstack/tests/functional/shared_file_system/test_share_snapshot_instance.py diff --git a/tests/functional/shared_file_system/test_storage_pool.py b/openstack/tests/functional/shared_file_system/test_storage_pool.py similarity index 100% rename from tests/functional/shared_file_system/test_storage_pool.py rename to openstack/tests/functional/shared_file_system/test_storage_pool.py diff --git a/tests/functional/shared_file_system/test_user_message.py b/openstack/tests/functional/shared_file_system/test_user_message.py similarity index 100% rename from tests/functional/shared_file_system/test_user_message.py rename to openstack/tests/functional/shared_file_system/test_user_message.py diff --git a/tests/unit/README.rst b/openstack/tests/unit/README.rst similarity index 100% rename from tests/unit/README.rst rename to openstack/tests/unit/README.rst diff --git a/tests/unit/block_storage/v3/__init__.py b/openstack/tests/unit/__init__.py similarity index 100% rename from tests/unit/block_storage/v3/__init__.py rename to openstack/tests/unit/__init__.py diff --git a/tests/unit/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/__pycache__/base.cpython-310.pyc b/openstack/tests/unit/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/base.cpython-310.pyc rename to openstack/tests/unit/__pycache__/base.cpython-310.pyc diff --git a/tests/unit/__pycache__/fakes.cpython-310.pyc b/openstack/tests/unit/__pycache__/fakes.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/fakes.cpython-310.pyc rename to openstack/tests/unit/__pycache__/fakes.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_connection.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_connection.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_connection.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_connection.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_exceptions.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_exceptions.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_exceptions.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_exceptions.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_fakes.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_fakes.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_fakes.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_fakes.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_format.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_format.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_format.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_format.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_hacking.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_hacking.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_hacking.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_hacking.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_microversions.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_microversions.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_microversions.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_microversions.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_missing_version.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_missing_version.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_missing_version.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_missing_version.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_placement_rest.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_placement_rest.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_placement_rest.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_placement_rest.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_proxy_base.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_proxy_base.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_proxy_base.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_proxy_base.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_resource.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_resource.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_resource.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_resource.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_stats.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_stats.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_stats.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_stats.cpython-310.pyc diff --git a/tests/unit/__pycache__/test_utils.cpython-310.pyc b/openstack/tests/unit/__pycache__/test_utils.cpython-310.pyc similarity index 100% rename from tests/unit/__pycache__/test_utils.cpython-310.pyc rename to openstack/tests/unit/__pycache__/test_utils.cpython-310.pyc diff --git a/tests/unit/cloud/__init__.py b/openstack/tests/unit/accelerator/__init__.py similarity index 100% rename from tests/unit/cloud/__init__.py rename to openstack/tests/unit/accelerator/__init__.py diff --git a/tests/unit/accelerator/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/accelerator/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/accelerator/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/accelerator/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/accelerator/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/accelerator/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/accelerator/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/accelerator/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/accelerator/test_version.py b/openstack/tests/unit/accelerator/test_version.py similarity index 100% rename from tests/unit/accelerator/test_version.py rename to openstack/tests/unit/accelerator/test_version.py diff --git a/tests/unit/clustering/__init__.py b/openstack/tests/unit/accelerator/v2/__init__.py similarity index 100% rename from tests/unit/clustering/__init__.py rename to openstack/tests/unit/accelerator/v2/__init__.py diff --git a/tests/unit/accelerator/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/accelerator/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/accelerator/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/accelerator/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/accelerator/v2/__pycache__/test_accelerator_request.cpython-310.pyc b/openstack/tests/unit/accelerator/v2/__pycache__/test_accelerator_request.cpython-310.pyc similarity index 100% rename from tests/unit/accelerator/v2/__pycache__/test_accelerator_request.cpython-310.pyc rename to openstack/tests/unit/accelerator/v2/__pycache__/test_accelerator_request.cpython-310.pyc diff --git a/tests/unit/accelerator/v2/__pycache__/test_deployable.cpython-310.pyc b/openstack/tests/unit/accelerator/v2/__pycache__/test_deployable.cpython-310.pyc similarity index 100% rename from tests/unit/accelerator/v2/__pycache__/test_deployable.cpython-310.pyc rename to openstack/tests/unit/accelerator/v2/__pycache__/test_deployable.cpython-310.pyc diff --git a/tests/unit/accelerator/v2/__pycache__/test_device.cpython-310.pyc b/openstack/tests/unit/accelerator/v2/__pycache__/test_device.cpython-310.pyc similarity index 100% rename from tests/unit/accelerator/v2/__pycache__/test_device.cpython-310.pyc rename to openstack/tests/unit/accelerator/v2/__pycache__/test_device.cpython-310.pyc diff --git a/tests/unit/accelerator/v2/__pycache__/test_device_profile.cpython-310.pyc b/openstack/tests/unit/accelerator/v2/__pycache__/test_device_profile.cpython-310.pyc similarity index 100% rename from tests/unit/accelerator/v2/__pycache__/test_device_profile.cpython-310.pyc rename to openstack/tests/unit/accelerator/v2/__pycache__/test_device_profile.cpython-310.pyc diff --git a/tests/unit/accelerator/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/accelerator/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/accelerator/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/accelerator/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/accelerator/v2/test_accelerator_request.py b/openstack/tests/unit/accelerator/v2/test_accelerator_request.py similarity index 100% rename from tests/unit/accelerator/v2/test_accelerator_request.py rename to openstack/tests/unit/accelerator/v2/test_accelerator_request.py diff --git a/tests/unit/accelerator/v2/test_deployable.py b/openstack/tests/unit/accelerator/v2/test_deployable.py similarity index 100% rename from tests/unit/accelerator/v2/test_deployable.py rename to openstack/tests/unit/accelerator/v2/test_deployable.py diff --git a/tests/unit/accelerator/v2/test_device.py b/openstack/tests/unit/accelerator/v2/test_device.py similarity index 100% rename from tests/unit/accelerator/v2/test_device.py rename to openstack/tests/unit/accelerator/v2/test_device.py diff --git a/tests/unit/accelerator/v2/test_device_profile.py b/openstack/tests/unit/accelerator/v2/test_device_profile.py similarity index 100% rename from tests/unit/accelerator/v2/test_device_profile.py rename to openstack/tests/unit/accelerator/v2/test_device_profile.py diff --git a/tests/unit/accelerator/v2/test_proxy.py b/openstack/tests/unit/accelerator/v2/test_proxy.py similarity index 100% rename from tests/unit/accelerator/v2/test_proxy.py rename to openstack/tests/unit/accelerator/v2/test_proxy.py diff --git a/tests/unit/clustering/v1/__init__.py b/openstack/tests/unit/baremetal/__init__.py similarity index 100% rename from tests/unit/clustering/v1/__init__.py rename to openstack/tests/unit/baremetal/__init__.py diff --git a/tests/unit/baremetal/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/baremetal/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/baremetal/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/baremetal/__pycache__/test_configdrive.cpython-310.pyc b/openstack/tests/unit/baremetal/__pycache__/test_configdrive.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/__pycache__/test_configdrive.cpython-310.pyc rename to openstack/tests/unit/baremetal/__pycache__/test_configdrive.cpython-310.pyc diff --git a/tests/unit/baremetal/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/baremetal/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/baremetal/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/baremetal/test_configdrive.py b/openstack/tests/unit/baremetal/test_configdrive.py similarity index 100% rename from tests/unit/baremetal/test_configdrive.py rename to openstack/tests/unit/baremetal/test_configdrive.py diff --git a/tests/unit/baremetal/test_version.py b/openstack/tests/unit/baremetal/test_version.py similarity index 100% rename from tests/unit/baremetal/test_version.py rename to openstack/tests/unit/baremetal/test_version.py diff --git a/tests/unit/common/__init__.py b/openstack/tests/unit/baremetal/v1/__init__.py similarity index 100% rename from tests/unit/common/__init__.py rename to openstack/tests/unit/baremetal/v1/__init__.py diff --git a/tests/unit/baremetal/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_allocation.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_allocation.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_allocation.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_allocation.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_chassis.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_chassis.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_chassis.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_chassis.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_conductor.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_conductor.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_conductor.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_conductor.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_deploy_templates.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_deploy_templates.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_deploy_templates.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_deploy_templates.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_driver.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_driver.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_driver.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_driver.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_node.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_node.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_node.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_node.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_port.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_port.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_port.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_port.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_port_group.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_port_group.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_port_group.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_port_group.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_volume_connector.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_volume_connector.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_volume_connector.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_volume_connector.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/__pycache__/test_volume_target.cpython-310.pyc b/openstack/tests/unit/baremetal/v1/__pycache__/test_volume_target.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal/v1/__pycache__/test_volume_target.cpython-310.pyc rename to openstack/tests/unit/baremetal/v1/__pycache__/test_volume_target.cpython-310.pyc diff --git a/tests/unit/baremetal/v1/test_allocation.py b/openstack/tests/unit/baremetal/v1/test_allocation.py similarity index 100% rename from tests/unit/baremetal/v1/test_allocation.py rename to openstack/tests/unit/baremetal/v1/test_allocation.py diff --git a/tests/unit/baremetal/v1/test_chassis.py b/openstack/tests/unit/baremetal/v1/test_chassis.py similarity index 100% rename from tests/unit/baremetal/v1/test_chassis.py rename to openstack/tests/unit/baremetal/v1/test_chassis.py diff --git a/tests/unit/baremetal/v1/test_conductor.py b/openstack/tests/unit/baremetal/v1/test_conductor.py similarity index 100% rename from tests/unit/baremetal/v1/test_conductor.py rename to openstack/tests/unit/baremetal/v1/test_conductor.py diff --git a/tests/unit/baremetal/v1/test_deploy_templates.py b/openstack/tests/unit/baremetal/v1/test_deploy_templates.py similarity index 100% rename from tests/unit/baremetal/v1/test_deploy_templates.py rename to openstack/tests/unit/baremetal/v1/test_deploy_templates.py diff --git a/tests/unit/baremetal/v1/test_driver.py b/openstack/tests/unit/baremetal/v1/test_driver.py similarity index 100% rename from tests/unit/baremetal/v1/test_driver.py rename to openstack/tests/unit/baremetal/v1/test_driver.py diff --git a/tests/unit/baremetal/v1/test_node.py b/openstack/tests/unit/baremetal/v1/test_node.py similarity index 100% rename from tests/unit/baremetal/v1/test_node.py rename to openstack/tests/unit/baremetal/v1/test_node.py diff --git a/tests/unit/baremetal/v1/test_port.py b/openstack/tests/unit/baremetal/v1/test_port.py similarity index 100% rename from tests/unit/baremetal/v1/test_port.py rename to openstack/tests/unit/baremetal/v1/test_port.py diff --git a/tests/unit/baremetal/v1/test_port_group.py b/openstack/tests/unit/baremetal/v1/test_port_group.py similarity index 100% rename from tests/unit/baremetal/v1/test_port_group.py rename to openstack/tests/unit/baremetal/v1/test_port_group.py diff --git a/tests/unit/baremetal/v1/test_proxy.py b/openstack/tests/unit/baremetal/v1/test_proxy.py similarity index 100% rename from tests/unit/baremetal/v1/test_proxy.py rename to openstack/tests/unit/baremetal/v1/test_proxy.py diff --git a/tests/unit/baremetal/v1/test_volume_connector.py b/openstack/tests/unit/baremetal/v1/test_volume_connector.py similarity index 100% rename from tests/unit/baremetal/v1/test_volume_connector.py rename to openstack/tests/unit/baremetal/v1/test_volume_connector.py diff --git a/tests/unit/baremetal/v1/test_volume_target.py b/openstack/tests/unit/baremetal/v1/test_volume_target.py similarity index 100% rename from tests/unit/baremetal/v1/test_volume_target.py rename to openstack/tests/unit/baremetal/v1/test_volume_target.py diff --git a/tests/unit/compute/__init__.py b/openstack/tests/unit/baremetal_introspection/__init__.py similarity index 100% rename from tests/unit/compute/__init__.py rename to openstack/tests/unit/baremetal_introspection/__init__.py diff --git a/tests/unit/baremetal_introspection/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/baremetal_introspection/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal_introspection/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/baremetal_introspection/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/compute/v2/__init__.py b/openstack/tests/unit/baremetal_introspection/v1/__init__.py similarity index 100% rename from tests/unit/compute/v2/__init__.py rename to openstack/tests/unit/baremetal_introspection/v1/__init__.py diff --git a/tests/unit/baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/baremetal_introspection/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/baremetal_introspection/v1/__pycache__/test_introspection_rule.cpython-310.pyc b/openstack/tests/unit/baremetal_introspection/v1/__pycache__/test_introspection_rule.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal_introspection/v1/__pycache__/test_introspection_rule.cpython-310.pyc rename to openstack/tests/unit/baremetal_introspection/v1/__pycache__/test_introspection_rule.cpython-310.pyc diff --git a/tests/unit/baremetal_introspection/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/baremetal_introspection/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/baremetal_introspection/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/baremetal_introspection/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/baremetal_introspection/v1/test_introspection_rule.py b/openstack/tests/unit/baremetal_introspection/v1/test_introspection_rule.py similarity index 100% rename from tests/unit/baremetal_introspection/v1/test_introspection_rule.py rename to openstack/tests/unit/baremetal_introspection/v1/test_introspection_rule.py diff --git a/tests/unit/baremetal_introspection/v1/test_proxy.py b/openstack/tests/unit/baremetal_introspection/v1/test_proxy.py similarity index 100% rename from tests/unit/baremetal_introspection/v1/test_proxy.py rename to openstack/tests/unit/baremetal_introspection/v1/test_proxy.py diff --git a/tests/unit/base.py b/openstack/tests/unit/base.py similarity index 100% rename from tests/unit/base.py rename to openstack/tests/unit/base.py diff --git a/tests/unit/config/__init__.py b/openstack/tests/unit/block_storage/__init__.py similarity index 100% rename from tests/unit/config/__init__.py rename to openstack/tests/unit/block_storage/__init__.py diff --git a/tests/unit/block_storage/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/block_storage/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/block_storage/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/container_infrastructure_management/__init__.py b/openstack/tests/unit/block_storage/v2/__init__.py similarity index 100% rename from tests/unit/container_infrastructure_management/__init__.py rename to openstack/tests/unit/block_storage/v2/__init__.py diff --git a/tests/unit/block_storage/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_backup.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_backup.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_backup.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_backup.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_capabilities.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_capabilities.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_capabilities.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_capabilities.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_extension.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_extension.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_extension.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_extension.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_limits.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_limits.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_limits.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_limits.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_snapshot.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_stats.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_stats.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_stats.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_stats.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_type.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_type.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_type.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_type.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/__pycache__/test_volume.cpython-310.pyc b/openstack/tests/unit/block_storage/v2/__pycache__/test_volume.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v2/__pycache__/test_volume.cpython-310.pyc rename to openstack/tests/unit/block_storage/v2/__pycache__/test_volume.cpython-310.pyc diff --git a/tests/unit/block_storage/v2/test_backup.py b/openstack/tests/unit/block_storage/v2/test_backup.py similarity index 100% rename from tests/unit/block_storage/v2/test_backup.py rename to openstack/tests/unit/block_storage/v2/test_backup.py diff --git a/tests/unit/block_storage/v2/test_capabilities.py b/openstack/tests/unit/block_storage/v2/test_capabilities.py similarity index 100% rename from tests/unit/block_storage/v2/test_capabilities.py rename to openstack/tests/unit/block_storage/v2/test_capabilities.py diff --git a/tests/unit/block_storage/v2/test_extension.py b/openstack/tests/unit/block_storage/v2/test_extension.py similarity index 100% rename from tests/unit/block_storage/v2/test_extension.py rename to openstack/tests/unit/block_storage/v2/test_extension.py diff --git a/tests/unit/block_storage/v2/test_limits.py b/openstack/tests/unit/block_storage/v2/test_limits.py similarity index 100% rename from tests/unit/block_storage/v2/test_limits.py rename to openstack/tests/unit/block_storage/v2/test_limits.py diff --git a/tests/unit/block_storage/v2/test_proxy.py b/openstack/tests/unit/block_storage/v2/test_proxy.py similarity index 100% rename from tests/unit/block_storage/v2/test_proxy.py rename to openstack/tests/unit/block_storage/v2/test_proxy.py diff --git a/tests/unit/block_storage/v2/test_snapshot.py b/openstack/tests/unit/block_storage/v2/test_snapshot.py similarity index 100% rename from tests/unit/block_storage/v2/test_snapshot.py rename to openstack/tests/unit/block_storage/v2/test_snapshot.py diff --git a/tests/unit/block_storage/v2/test_stats.py b/openstack/tests/unit/block_storage/v2/test_stats.py similarity index 100% rename from tests/unit/block_storage/v2/test_stats.py rename to openstack/tests/unit/block_storage/v2/test_stats.py diff --git a/tests/unit/block_storage/v2/test_type.py b/openstack/tests/unit/block_storage/v2/test_type.py similarity index 100% rename from tests/unit/block_storage/v2/test_type.py rename to openstack/tests/unit/block_storage/v2/test_type.py diff --git a/tests/unit/block_storage/v2/test_volume.py b/openstack/tests/unit/block_storage/v2/test_volume.py similarity index 100% rename from tests/unit/block_storage/v2/test_volume.py rename to openstack/tests/unit/block_storage/v2/test_volume.py diff --git a/tests/unit/container_infrastructure_management/v1/__init__.py b/openstack/tests/unit/block_storage/v3/__init__.py similarity index 100% rename from tests/unit/container_infrastructure_management/v1/__init__.py rename to openstack/tests/unit/block_storage/v3/__init__.py diff --git a/tests/unit/block_storage/v3/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_attachment.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_availability_zone.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_backup.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_backup.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_backup.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_backup.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_block_storage_summary.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_capabilities.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_extension.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_extension.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_extension.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_extension.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_group.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_group.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_group.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_group.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_group_snapshot.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_group_snapshot.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_group_snapshot.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_group_snapshot.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_group_type.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_group_type.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_group_type.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_group_type.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_limits.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_limits.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_limits.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_limits.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_resource_filter.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_resource_filter.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_resource_filter.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_resource_filter.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_service.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_service.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_service.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_service.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_snapshot.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_transfer.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_type.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_type.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_type.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_type.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_type_encryption.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_type_encryption.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_type_encryption.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_type_encryption.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/__pycache__/test_volume.cpython-310.pyc b/openstack/tests/unit/block_storage/v3/__pycache__/test_volume.cpython-310.pyc similarity index 100% rename from tests/unit/block_storage/v3/__pycache__/test_volume.cpython-310.pyc rename to openstack/tests/unit/block_storage/v3/__pycache__/test_volume.cpython-310.pyc diff --git a/tests/unit/block_storage/v3/test_attachment.py b/openstack/tests/unit/block_storage/v3/test_attachment.py similarity index 100% rename from tests/unit/block_storage/v3/test_attachment.py rename to openstack/tests/unit/block_storage/v3/test_attachment.py diff --git a/tests/unit/block_storage/v3/test_availability_zone.py b/openstack/tests/unit/block_storage/v3/test_availability_zone.py similarity index 100% rename from tests/unit/block_storage/v3/test_availability_zone.py rename to openstack/tests/unit/block_storage/v3/test_availability_zone.py diff --git a/tests/unit/block_storage/v3/test_backup.py b/openstack/tests/unit/block_storage/v3/test_backup.py similarity index 100% rename from tests/unit/block_storage/v3/test_backup.py rename to openstack/tests/unit/block_storage/v3/test_backup.py diff --git a/tests/unit/block_storage/v3/test_block_storage_summary.py b/openstack/tests/unit/block_storage/v3/test_block_storage_summary.py similarity index 100% rename from tests/unit/block_storage/v3/test_block_storage_summary.py rename to openstack/tests/unit/block_storage/v3/test_block_storage_summary.py diff --git a/tests/unit/block_storage/v3/test_capabilities.py b/openstack/tests/unit/block_storage/v3/test_capabilities.py similarity index 100% rename from tests/unit/block_storage/v3/test_capabilities.py rename to openstack/tests/unit/block_storage/v3/test_capabilities.py diff --git a/tests/unit/block_storage/v3/test_extension.py b/openstack/tests/unit/block_storage/v3/test_extension.py similarity index 100% rename from tests/unit/block_storage/v3/test_extension.py rename to openstack/tests/unit/block_storage/v3/test_extension.py diff --git a/tests/unit/block_storage/v3/test_group.py b/openstack/tests/unit/block_storage/v3/test_group.py similarity index 100% rename from tests/unit/block_storage/v3/test_group.py rename to openstack/tests/unit/block_storage/v3/test_group.py diff --git a/tests/unit/block_storage/v3/test_group_snapshot.py b/openstack/tests/unit/block_storage/v3/test_group_snapshot.py similarity index 100% rename from tests/unit/block_storage/v3/test_group_snapshot.py rename to openstack/tests/unit/block_storage/v3/test_group_snapshot.py diff --git a/tests/unit/block_storage/v3/test_group_type.py b/openstack/tests/unit/block_storage/v3/test_group_type.py similarity index 100% rename from tests/unit/block_storage/v3/test_group_type.py rename to openstack/tests/unit/block_storage/v3/test_group_type.py diff --git a/tests/unit/block_storage/v3/test_limits.py b/openstack/tests/unit/block_storage/v3/test_limits.py similarity index 100% rename from tests/unit/block_storage/v3/test_limits.py rename to openstack/tests/unit/block_storage/v3/test_limits.py diff --git a/tests/unit/block_storage/v3/test_proxy.py b/openstack/tests/unit/block_storage/v3/test_proxy.py similarity index 100% rename from tests/unit/block_storage/v3/test_proxy.py rename to openstack/tests/unit/block_storage/v3/test_proxy.py diff --git a/tests/unit/block_storage/v3/test_resource_filter.py b/openstack/tests/unit/block_storage/v3/test_resource_filter.py similarity index 100% rename from tests/unit/block_storage/v3/test_resource_filter.py rename to openstack/tests/unit/block_storage/v3/test_resource_filter.py diff --git a/tests/unit/block_storage/v3/test_service.py b/openstack/tests/unit/block_storage/v3/test_service.py similarity index 100% rename from tests/unit/block_storage/v3/test_service.py rename to openstack/tests/unit/block_storage/v3/test_service.py diff --git a/tests/unit/block_storage/v3/test_snapshot.py b/openstack/tests/unit/block_storage/v3/test_snapshot.py similarity index 100% rename from tests/unit/block_storage/v3/test_snapshot.py rename to openstack/tests/unit/block_storage/v3/test_snapshot.py diff --git a/tests/unit/block_storage/v3/test_transfer.py b/openstack/tests/unit/block_storage/v3/test_transfer.py similarity index 100% rename from tests/unit/block_storage/v3/test_transfer.py rename to openstack/tests/unit/block_storage/v3/test_transfer.py diff --git a/tests/unit/block_storage/v3/test_type.py b/openstack/tests/unit/block_storage/v3/test_type.py similarity index 100% rename from tests/unit/block_storage/v3/test_type.py rename to openstack/tests/unit/block_storage/v3/test_type.py diff --git a/tests/unit/block_storage/v3/test_type_encryption.py b/openstack/tests/unit/block_storage/v3/test_type_encryption.py similarity index 100% rename from tests/unit/block_storage/v3/test_type_encryption.py rename to openstack/tests/unit/block_storage/v3/test_type_encryption.py diff --git a/tests/unit/block_storage/v3/test_volume.py b/openstack/tests/unit/block_storage/v3/test_volume.py similarity index 100% rename from tests/unit/block_storage/v3/test_volume.py rename to openstack/tests/unit/block_storage/v3/test_volume.py diff --git a/tests/unit/database/__init__.py b/openstack/tests/unit/cloud/__init__.py similarity index 100% rename from tests/unit/database/__init__.py rename to openstack/tests/unit/cloud/__init__.py diff --git a/tests/unit/cloud/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test__utils.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test__utils.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test__utils.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test__utils.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_accelerator.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_accelerator.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_accelerator.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_accelerator.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_aggregate.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_aggregate.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_aggregate.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_aggregate.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_availability_zones.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_availability_zones.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_availability_zones.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_availability_zones.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_baremetal_node.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_baremetal_node.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_baremetal_node.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_baremetal_node.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_baremetal_ports.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_baremetal_ports.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_baremetal_ports.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_baremetal_ports.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_cloud.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_cloud.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_cloud.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_cloud.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_cluster_templates.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_cluster_templates.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_cluster_templates.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_cluster_templates.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_clustering.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_clustering.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_clustering.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_clustering.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_coe_clusters.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_coe_clusters.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_coe_clusters.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_coe_clusters.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_coe_clusters_certificate.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_coe_clusters_certificate.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_coe_clusters_certificate.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_coe_clusters_certificate.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_compute.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_compute.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_compute.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_compute.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_create_server.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_create_server.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_create_server.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_create_server.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_create_volume_snapshot.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_create_volume_snapshot.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_create_volume_snapshot.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_create_volume_snapshot.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_delete_server.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_delete_server.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_delete_server.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_delete_server.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_delete_volume_snapshot.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_delete_volume_snapshot.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_delete_volume_snapshot.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_delete_volume_snapshot.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_domain_params.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_domain_params.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_domain_params.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_domain_params.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_domains.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_domains.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_domains.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_domains.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_endpoints.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_endpoints.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_endpoints.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_endpoints.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_flavors.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_flavors.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_flavors.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_flavors.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_floating_ip_common.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_floating_ip_common.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_floating_ip_common.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_floating_ip_common.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_floating_ip_neutron.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_floating_ip_neutron.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_floating_ip_neutron.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_floating_ip_neutron.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_floating_ip_nova.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_floating_ip_nova.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_floating_ip_nova.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_floating_ip_nova.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_floating_ip_pool.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_fwaas.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_fwaas.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_fwaas.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_fwaas.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_groups.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_groups.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_groups.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_groups.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_identity_roles.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_identity_roles.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_identity_roles.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_identity_roles.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_identity_users.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_identity_users.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_identity_users.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_identity_users.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_image.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_image.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_image.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_image.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_image_snapshot.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_image_snapshot.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_image_snapshot.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_image_snapshot.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_inventory.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_inventory.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_inventory.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_inventory.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_keypair.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_keypair.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_keypair.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_keypair.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_limits.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_limits.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_limits.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_limits.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_magnum_services.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_magnum_services.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_magnum_services.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_magnum_services.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_meta.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_meta.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_meta.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_meta.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_network.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_network.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_network.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_network.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_object.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_object.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_object.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_object.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_openstackcloud.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_openstackcloud.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_openstackcloud.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_openstackcloud.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_operator.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_operator.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_operator.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_operator.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_operator_noauth.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_operator_noauth.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_operator_noauth.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_operator_noauth.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_port.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_port.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_port.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_port.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_project.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_project.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_project.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_project.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_qos_policy.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_qos_policy.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_qos_policy.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_qos_policy.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_qos_rule_type.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_qos_rule_type.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_qos_rule_type.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_qos_rule_type.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_quotas.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_quotas.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_quotas.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_quotas.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_rebuild_server.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_rebuild_server.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_rebuild_server.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_rebuild_server.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_recordset.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_recordset.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_recordset.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_recordset.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_role_assignment.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_role_assignment.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_role_assignment.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_role_assignment.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_router.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_router.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_router.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_router.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_security_groups.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_security_groups.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_security_groups.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_security_groups.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_server_console.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_server_console.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_server_console.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_server_console.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_server_delete_metadata.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_server_delete_metadata.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_server_delete_metadata.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_server_delete_metadata.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_server_group.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_server_group.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_server_group.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_server_group.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_server_set_metadata.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_server_set_metadata.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_server_set_metadata.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_server_set_metadata.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_services.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_services.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_services.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_services.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_shared_file_system.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_shared_file_system.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_shared_file_system.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_shared_file_system.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_stack.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_stack.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_stack.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_stack.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_subnet.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_subnet.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_subnet.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_subnet.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_update_server.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_update_server.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_update_server.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_update_server.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_usage.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_usage.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_usage.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_usage.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_users.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_users.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_users.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_users.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_volume.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_volume.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_volume.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_volume.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_volume_access.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_volume_access.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_volume_access.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_volume_access.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_volume_backups.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_volume_backups.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_volume_backups.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_volume_backups.cpython-310.pyc diff --git a/tests/unit/cloud/__pycache__/test_zone.cpython-310.pyc b/openstack/tests/unit/cloud/__pycache__/test_zone.cpython-310.pyc similarity index 100% rename from tests/unit/cloud/__pycache__/test_zone.cpython-310.pyc rename to openstack/tests/unit/cloud/__pycache__/test_zone.cpython-310.pyc diff --git a/tests/unit/cloud/test__utils.py b/openstack/tests/unit/cloud/test__utils.py similarity index 100% rename from tests/unit/cloud/test__utils.py rename to openstack/tests/unit/cloud/test__utils.py diff --git a/tests/unit/cloud/test_accelerator.py b/openstack/tests/unit/cloud/test_accelerator.py similarity index 100% rename from tests/unit/cloud/test_accelerator.py rename to openstack/tests/unit/cloud/test_accelerator.py diff --git a/tests/unit/cloud/test_aggregate.py b/openstack/tests/unit/cloud/test_aggregate.py similarity index 100% rename from tests/unit/cloud/test_aggregate.py rename to openstack/tests/unit/cloud/test_aggregate.py diff --git a/tests/unit/cloud/test_availability_zones.py b/openstack/tests/unit/cloud/test_availability_zones.py similarity index 100% rename from tests/unit/cloud/test_availability_zones.py rename to openstack/tests/unit/cloud/test_availability_zones.py diff --git a/tests/unit/cloud/test_baremetal_node.py b/openstack/tests/unit/cloud/test_baremetal_node.py similarity index 100% rename from tests/unit/cloud/test_baremetal_node.py rename to openstack/tests/unit/cloud/test_baremetal_node.py diff --git a/tests/unit/cloud/test_baremetal_ports.py b/openstack/tests/unit/cloud/test_baremetal_ports.py similarity index 100% rename from tests/unit/cloud/test_baremetal_ports.py rename to openstack/tests/unit/cloud/test_baremetal_ports.py diff --git a/tests/unit/cloud/test_cloud.py b/openstack/tests/unit/cloud/test_cloud.py similarity index 100% rename from tests/unit/cloud/test_cloud.py rename to openstack/tests/unit/cloud/test_cloud.py diff --git a/tests/unit/cloud/test_cluster_templates.py b/openstack/tests/unit/cloud/test_cluster_templates.py similarity index 100% rename from tests/unit/cloud/test_cluster_templates.py rename to openstack/tests/unit/cloud/test_cluster_templates.py diff --git a/tests/unit/cloud/test_clustering.py b/openstack/tests/unit/cloud/test_clustering.py similarity index 100% rename from tests/unit/cloud/test_clustering.py rename to openstack/tests/unit/cloud/test_clustering.py diff --git a/tests/unit/cloud/test_coe_clusters.py b/openstack/tests/unit/cloud/test_coe_clusters.py similarity index 100% rename from tests/unit/cloud/test_coe_clusters.py rename to openstack/tests/unit/cloud/test_coe_clusters.py diff --git a/tests/unit/cloud/test_coe_clusters_certificate.py b/openstack/tests/unit/cloud/test_coe_clusters_certificate.py similarity index 100% rename from tests/unit/cloud/test_coe_clusters_certificate.py rename to openstack/tests/unit/cloud/test_coe_clusters_certificate.py diff --git a/tests/unit/cloud/test_compute.py b/openstack/tests/unit/cloud/test_compute.py similarity index 100% rename from tests/unit/cloud/test_compute.py rename to openstack/tests/unit/cloud/test_compute.py diff --git a/tests/unit/cloud/test_create_server.py b/openstack/tests/unit/cloud/test_create_server.py similarity index 100% rename from tests/unit/cloud/test_create_server.py rename to openstack/tests/unit/cloud/test_create_server.py diff --git a/tests/unit/cloud/test_create_volume_snapshot.py b/openstack/tests/unit/cloud/test_create_volume_snapshot.py similarity index 100% rename from tests/unit/cloud/test_create_volume_snapshot.py rename to openstack/tests/unit/cloud/test_create_volume_snapshot.py diff --git a/tests/unit/cloud/test_delete_server.py b/openstack/tests/unit/cloud/test_delete_server.py similarity index 100% rename from tests/unit/cloud/test_delete_server.py rename to openstack/tests/unit/cloud/test_delete_server.py diff --git a/tests/unit/cloud/test_delete_volume_snapshot.py b/openstack/tests/unit/cloud/test_delete_volume_snapshot.py similarity index 100% rename from tests/unit/cloud/test_delete_volume_snapshot.py rename to openstack/tests/unit/cloud/test_delete_volume_snapshot.py diff --git a/tests/unit/cloud/test_domain_params.py b/openstack/tests/unit/cloud/test_domain_params.py similarity index 100% rename from tests/unit/cloud/test_domain_params.py rename to openstack/tests/unit/cloud/test_domain_params.py diff --git a/tests/unit/cloud/test_domains.py b/openstack/tests/unit/cloud/test_domains.py similarity index 100% rename from tests/unit/cloud/test_domains.py rename to openstack/tests/unit/cloud/test_domains.py diff --git a/tests/unit/cloud/test_endpoints.py b/openstack/tests/unit/cloud/test_endpoints.py similarity index 100% rename from tests/unit/cloud/test_endpoints.py rename to openstack/tests/unit/cloud/test_endpoints.py diff --git a/tests/unit/cloud/test_flavors.py b/openstack/tests/unit/cloud/test_flavors.py similarity index 100% rename from tests/unit/cloud/test_flavors.py rename to openstack/tests/unit/cloud/test_flavors.py diff --git a/tests/unit/cloud/test_floating_ip_common.py b/openstack/tests/unit/cloud/test_floating_ip_common.py similarity index 100% rename from tests/unit/cloud/test_floating_ip_common.py rename to openstack/tests/unit/cloud/test_floating_ip_common.py diff --git a/tests/unit/cloud/test_floating_ip_neutron.py b/openstack/tests/unit/cloud/test_floating_ip_neutron.py similarity index 100% rename from tests/unit/cloud/test_floating_ip_neutron.py rename to openstack/tests/unit/cloud/test_floating_ip_neutron.py diff --git a/tests/unit/cloud/test_floating_ip_nova.py b/openstack/tests/unit/cloud/test_floating_ip_nova.py similarity index 100% rename from tests/unit/cloud/test_floating_ip_nova.py rename to openstack/tests/unit/cloud/test_floating_ip_nova.py diff --git a/tests/unit/cloud/test_floating_ip_pool.py b/openstack/tests/unit/cloud/test_floating_ip_pool.py similarity index 100% rename from tests/unit/cloud/test_floating_ip_pool.py rename to openstack/tests/unit/cloud/test_floating_ip_pool.py diff --git a/tests/unit/cloud/test_fwaas.py b/openstack/tests/unit/cloud/test_fwaas.py similarity index 100% rename from tests/unit/cloud/test_fwaas.py rename to openstack/tests/unit/cloud/test_fwaas.py diff --git a/tests/unit/cloud/test_groups.py b/openstack/tests/unit/cloud/test_groups.py similarity index 100% rename from tests/unit/cloud/test_groups.py rename to openstack/tests/unit/cloud/test_groups.py diff --git a/tests/unit/cloud/test_identity_roles.py b/openstack/tests/unit/cloud/test_identity_roles.py similarity index 100% rename from tests/unit/cloud/test_identity_roles.py rename to openstack/tests/unit/cloud/test_identity_roles.py diff --git a/tests/unit/cloud/test_identity_users.py b/openstack/tests/unit/cloud/test_identity_users.py similarity index 100% rename from tests/unit/cloud/test_identity_users.py rename to openstack/tests/unit/cloud/test_identity_users.py diff --git a/tests/unit/cloud/test_image.py b/openstack/tests/unit/cloud/test_image.py similarity index 100% rename from tests/unit/cloud/test_image.py rename to openstack/tests/unit/cloud/test_image.py diff --git a/tests/unit/cloud/test_image_snapshot.py b/openstack/tests/unit/cloud/test_image_snapshot.py similarity index 100% rename from tests/unit/cloud/test_image_snapshot.py rename to openstack/tests/unit/cloud/test_image_snapshot.py diff --git a/tests/unit/cloud/test_inventory.py b/openstack/tests/unit/cloud/test_inventory.py similarity index 100% rename from tests/unit/cloud/test_inventory.py rename to openstack/tests/unit/cloud/test_inventory.py diff --git a/tests/unit/cloud/test_keypair.py b/openstack/tests/unit/cloud/test_keypair.py similarity index 100% rename from tests/unit/cloud/test_keypair.py rename to openstack/tests/unit/cloud/test_keypair.py diff --git a/tests/unit/cloud/test_limits.py b/openstack/tests/unit/cloud/test_limits.py similarity index 100% rename from tests/unit/cloud/test_limits.py rename to openstack/tests/unit/cloud/test_limits.py diff --git a/tests/unit/cloud/test_magnum_services.py b/openstack/tests/unit/cloud/test_magnum_services.py similarity index 100% rename from tests/unit/cloud/test_magnum_services.py rename to openstack/tests/unit/cloud/test_magnum_services.py diff --git a/tests/unit/cloud/test_meta.py b/openstack/tests/unit/cloud/test_meta.py similarity index 100% rename from tests/unit/cloud/test_meta.py rename to openstack/tests/unit/cloud/test_meta.py diff --git a/tests/unit/cloud/test_network.py b/openstack/tests/unit/cloud/test_network.py similarity index 100% rename from tests/unit/cloud/test_network.py rename to openstack/tests/unit/cloud/test_network.py diff --git a/tests/unit/cloud/test_object.py b/openstack/tests/unit/cloud/test_object.py similarity index 100% rename from tests/unit/cloud/test_object.py rename to openstack/tests/unit/cloud/test_object.py diff --git a/tests/unit/cloud/test_openstackcloud.py b/openstack/tests/unit/cloud/test_openstackcloud.py similarity index 100% rename from tests/unit/cloud/test_openstackcloud.py rename to openstack/tests/unit/cloud/test_openstackcloud.py diff --git a/tests/unit/cloud/test_operator.py b/openstack/tests/unit/cloud/test_operator.py similarity index 100% rename from tests/unit/cloud/test_operator.py rename to openstack/tests/unit/cloud/test_operator.py diff --git a/tests/unit/cloud/test_operator_noauth.py b/openstack/tests/unit/cloud/test_operator_noauth.py similarity index 100% rename from tests/unit/cloud/test_operator_noauth.py rename to openstack/tests/unit/cloud/test_operator_noauth.py diff --git a/tests/unit/cloud/test_port.py b/openstack/tests/unit/cloud/test_port.py similarity index 100% rename from tests/unit/cloud/test_port.py rename to openstack/tests/unit/cloud/test_port.py diff --git a/tests/unit/cloud/test_project.py b/openstack/tests/unit/cloud/test_project.py similarity index 100% rename from tests/unit/cloud/test_project.py rename to openstack/tests/unit/cloud/test_project.py diff --git a/tests/unit/cloud/test_qos_bandwidth_limit_rule.py b/openstack/tests/unit/cloud/test_qos_bandwidth_limit_rule.py similarity index 100% rename from tests/unit/cloud/test_qos_bandwidth_limit_rule.py rename to openstack/tests/unit/cloud/test_qos_bandwidth_limit_rule.py diff --git a/tests/unit/cloud/test_qos_dscp_marking_rule.py b/openstack/tests/unit/cloud/test_qos_dscp_marking_rule.py similarity index 100% rename from tests/unit/cloud/test_qos_dscp_marking_rule.py rename to openstack/tests/unit/cloud/test_qos_dscp_marking_rule.py diff --git a/tests/unit/cloud/test_qos_minimum_bandwidth_rule.py b/openstack/tests/unit/cloud/test_qos_minimum_bandwidth_rule.py similarity index 100% rename from tests/unit/cloud/test_qos_minimum_bandwidth_rule.py rename to openstack/tests/unit/cloud/test_qos_minimum_bandwidth_rule.py diff --git a/tests/unit/cloud/test_qos_policy.py b/openstack/tests/unit/cloud/test_qos_policy.py similarity index 100% rename from tests/unit/cloud/test_qos_policy.py rename to openstack/tests/unit/cloud/test_qos_policy.py diff --git a/tests/unit/cloud/test_qos_rule_type.py b/openstack/tests/unit/cloud/test_qos_rule_type.py similarity index 100% rename from tests/unit/cloud/test_qos_rule_type.py rename to openstack/tests/unit/cloud/test_qos_rule_type.py diff --git a/tests/unit/cloud/test_quotas.py b/openstack/tests/unit/cloud/test_quotas.py similarity index 100% rename from tests/unit/cloud/test_quotas.py rename to openstack/tests/unit/cloud/test_quotas.py diff --git a/tests/unit/cloud/test_rebuild_server.py b/openstack/tests/unit/cloud/test_rebuild_server.py similarity index 100% rename from tests/unit/cloud/test_rebuild_server.py rename to openstack/tests/unit/cloud/test_rebuild_server.py diff --git a/tests/unit/cloud/test_recordset.py b/openstack/tests/unit/cloud/test_recordset.py similarity index 100% rename from tests/unit/cloud/test_recordset.py rename to openstack/tests/unit/cloud/test_recordset.py diff --git a/tests/unit/cloud/test_role_assignment.py b/openstack/tests/unit/cloud/test_role_assignment.py similarity index 100% rename from tests/unit/cloud/test_role_assignment.py rename to openstack/tests/unit/cloud/test_role_assignment.py diff --git a/tests/unit/cloud/test_router.py b/openstack/tests/unit/cloud/test_router.py similarity index 100% rename from tests/unit/cloud/test_router.py rename to openstack/tests/unit/cloud/test_router.py diff --git a/tests/unit/cloud/test_security_groups.py b/openstack/tests/unit/cloud/test_security_groups.py similarity index 100% rename from tests/unit/cloud/test_security_groups.py rename to openstack/tests/unit/cloud/test_security_groups.py diff --git a/tests/unit/cloud/test_server_console.py b/openstack/tests/unit/cloud/test_server_console.py similarity index 100% rename from tests/unit/cloud/test_server_console.py rename to openstack/tests/unit/cloud/test_server_console.py diff --git a/tests/unit/cloud/test_server_delete_metadata.py b/openstack/tests/unit/cloud/test_server_delete_metadata.py similarity index 100% rename from tests/unit/cloud/test_server_delete_metadata.py rename to openstack/tests/unit/cloud/test_server_delete_metadata.py diff --git a/tests/unit/cloud/test_server_group.py b/openstack/tests/unit/cloud/test_server_group.py similarity index 100% rename from tests/unit/cloud/test_server_group.py rename to openstack/tests/unit/cloud/test_server_group.py diff --git a/tests/unit/cloud/test_server_set_metadata.py b/openstack/tests/unit/cloud/test_server_set_metadata.py similarity index 100% rename from tests/unit/cloud/test_server_set_metadata.py rename to openstack/tests/unit/cloud/test_server_set_metadata.py diff --git a/tests/unit/cloud/test_services.py b/openstack/tests/unit/cloud/test_services.py similarity index 100% rename from tests/unit/cloud/test_services.py rename to openstack/tests/unit/cloud/test_services.py diff --git a/tests/unit/cloud/test_shared_file_system.py b/openstack/tests/unit/cloud/test_shared_file_system.py similarity index 100% rename from tests/unit/cloud/test_shared_file_system.py rename to openstack/tests/unit/cloud/test_shared_file_system.py diff --git a/tests/unit/cloud/test_stack.py b/openstack/tests/unit/cloud/test_stack.py similarity index 100% rename from tests/unit/cloud/test_stack.py rename to openstack/tests/unit/cloud/test_stack.py diff --git a/tests/unit/cloud/test_subnet.py b/openstack/tests/unit/cloud/test_subnet.py similarity index 100% rename from tests/unit/cloud/test_subnet.py rename to openstack/tests/unit/cloud/test_subnet.py diff --git a/tests/unit/cloud/test_update_server.py b/openstack/tests/unit/cloud/test_update_server.py similarity index 100% rename from tests/unit/cloud/test_update_server.py rename to openstack/tests/unit/cloud/test_update_server.py diff --git a/tests/unit/cloud/test_usage.py b/openstack/tests/unit/cloud/test_usage.py similarity index 100% rename from tests/unit/cloud/test_usage.py rename to openstack/tests/unit/cloud/test_usage.py diff --git a/tests/unit/cloud/test_users.py b/openstack/tests/unit/cloud/test_users.py similarity index 100% rename from tests/unit/cloud/test_users.py rename to openstack/tests/unit/cloud/test_users.py diff --git a/tests/unit/cloud/test_volume.py b/openstack/tests/unit/cloud/test_volume.py similarity index 100% rename from tests/unit/cloud/test_volume.py rename to openstack/tests/unit/cloud/test_volume.py diff --git a/tests/unit/cloud/test_volume_access.py b/openstack/tests/unit/cloud/test_volume_access.py similarity index 100% rename from tests/unit/cloud/test_volume_access.py rename to openstack/tests/unit/cloud/test_volume_access.py diff --git a/tests/unit/cloud/test_volume_backups.py b/openstack/tests/unit/cloud/test_volume_backups.py similarity index 100% rename from tests/unit/cloud/test_volume_backups.py rename to openstack/tests/unit/cloud/test_volume_backups.py diff --git a/tests/unit/cloud/test_zone.py b/openstack/tests/unit/cloud/test_zone.py similarity index 100% rename from tests/unit/cloud/test_zone.py rename to openstack/tests/unit/cloud/test_zone.py diff --git a/tests/unit/database/v1/__init__.py b/openstack/tests/unit/clustering/__init__.py similarity index 100% rename from tests/unit/database/v1/__init__.py rename to openstack/tests/unit/clustering/__init__.py diff --git a/tests/unit/clustering/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/clustering/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/clustering/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/clustering/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/clustering/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/clustering/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/clustering/test_version.py b/openstack/tests/unit/clustering/test_version.py similarity index 100% rename from tests/unit/clustering/test_version.py rename to openstack/tests/unit/clustering/test_version.py diff --git a/tests/unit/dns/__init__.py b/openstack/tests/unit/clustering/v1/__init__.py similarity index 100% rename from tests/unit/dns/__init__.py rename to openstack/tests/unit/clustering/v1/__init__.py diff --git a/tests/unit/clustering/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_action.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_action.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_action.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_action.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_build_info.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_build_info.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_build_info.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_build_info.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_cluster.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_cluster.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_cluster.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_cluster.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_cluster_attr.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_cluster_attr.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_cluster_attr.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_cluster_attr.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_cluster_policy.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_cluster_policy.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_cluster_policy.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_cluster_policy.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_event.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_event.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_event.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_event.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_node.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_node.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_node.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_node.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_policy.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_policy.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_policy.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_policy.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_policy_type.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_policy_type.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_policy_type.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_policy_type.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_profile.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_profile.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_profile.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_profile.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_profile_type.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_profile_type.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_profile_type.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_profile_type.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_receiver.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_receiver.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_receiver.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_receiver.cpython-310.pyc diff --git a/tests/unit/clustering/v1/__pycache__/test_service.cpython-310.pyc b/openstack/tests/unit/clustering/v1/__pycache__/test_service.cpython-310.pyc similarity index 100% rename from tests/unit/clustering/v1/__pycache__/test_service.cpython-310.pyc rename to openstack/tests/unit/clustering/v1/__pycache__/test_service.cpython-310.pyc diff --git a/tests/unit/clustering/v1/test_action.py b/openstack/tests/unit/clustering/v1/test_action.py similarity index 100% rename from tests/unit/clustering/v1/test_action.py rename to openstack/tests/unit/clustering/v1/test_action.py diff --git a/tests/unit/clustering/v1/test_build_info.py b/openstack/tests/unit/clustering/v1/test_build_info.py similarity index 100% rename from tests/unit/clustering/v1/test_build_info.py rename to openstack/tests/unit/clustering/v1/test_build_info.py diff --git a/tests/unit/clustering/v1/test_cluster.py b/openstack/tests/unit/clustering/v1/test_cluster.py similarity index 100% rename from tests/unit/clustering/v1/test_cluster.py rename to openstack/tests/unit/clustering/v1/test_cluster.py diff --git a/tests/unit/clustering/v1/test_cluster_attr.py b/openstack/tests/unit/clustering/v1/test_cluster_attr.py similarity index 100% rename from tests/unit/clustering/v1/test_cluster_attr.py rename to openstack/tests/unit/clustering/v1/test_cluster_attr.py diff --git a/tests/unit/clustering/v1/test_cluster_policy.py b/openstack/tests/unit/clustering/v1/test_cluster_policy.py similarity index 100% rename from tests/unit/clustering/v1/test_cluster_policy.py rename to openstack/tests/unit/clustering/v1/test_cluster_policy.py diff --git a/tests/unit/clustering/v1/test_event.py b/openstack/tests/unit/clustering/v1/test_event.py similarity index 100% rename from tests/unit/clustering/v1/test_event.py rename to openstack/tests/unit/clustering/v1/test_event.py diff --git a/tests/unit/clustering/v1/test_node.py b/openstack/tests/unit/clustering/v1/test_node.py similarity index 100% rename from tests/unit/clustering/v1/test_node.py rename to openstack/tests/unit/clustering/v1/test_node.py diff --git a/tests/unit/clustering/v1/test_policy.py b/openstack/tests/unit/clustering/v1/test_policy.py similarity index 100% rename from tests/unit/clustering/v1/test_policy.py rename to openstack/tests/unit/clustering/v1/test_policy.py diff --git a/tests/unit/clustering/v1/test_policy_type.py b/openstack/tests/unit/clustering/v1/test_policy_type.py similarity index 100% rename from tests/unit/clustering/v1/test_policy_type.py rename to openstack/tests/unit/clustering/v1/test_policy_type.py diff --git a/tests/unit/clustering/v1/test_profile.py b/openstack/tests/unit/clustering/v1/test_profile.py similarity index 100% rename from tests/unit/clustering/v1/test_profile.py rename to openstack/tests/unit/clustering/v1/test_profile.py diff --git a/tests/unit/clustering/v1/test_profile_type.py b/openstack/tests/unit/clustering/v1/test_profile_type.py similarity index 100% rename from tests/unit/clustering/v1/test_profile_type.py rename to openstack/tests/unit/clustering/v1/test_profile_type.py diff --git a/tests/unit/clustering/v1/test_proxy.py b/openstack/tests/unit/clustering/v1/test_proxy.py similarity index 100% rename from tests/unit/clustering/v1/test_proxy.py rename to openstack/tests/unit/clustering/v1/test_proxy.py diff --git a/tests/unit/clustering/v1/test_receiver.py b/openstack/tests/unit/clustering/v1/test_receiver.py similarity index 100% rename from tests/unit/clustering/v1/test_receiver.py rename to openstack/tests/unit/clustering/v1/test_receiver.py diff --git a/tests/unit/clustering/v1/test_service.py b/openstack/tests/unit/clustering/v1/test_service.py similarity index 100% rename from tests/unit/clustering/v1/test_service.py rename to openstack/tests/unit/clustering/v1/test_service.py diff --git a/tests/unit/dns/v2/__init__.py b/openstack/tests/unit/common/__init__.py similarity index 100% rename from tests/unit/dns/v2/__init__.py rename to openstack/tests/unit/common/__init__.py diff --git a/tests/unit/common/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/common/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/common/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/common/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/common/__pycache__/test_metadata.cpython-310.pyc b/openstack/tests/unit/common/__pycache__/test_metadata.cpython-310.pyc similarity index 100% rename from tests/unit/common/__pycache__/test_metadata.cpython-310.pyc rename to openstack/tests/unit/common/__pycache__/test_metadata.cpython-310.pyc diff --git a/tests/unit/common/__pycache__/test_quota_set.cpython-310.pyc b/openstack/tests/unit/common/__pycache__/test_quota_set.cpython-310.pyc similarity index 100% rename from tests/unit/common/__pycache__/test_quota_set.cpython-310.pyc rename to openstack/tests/unit/common/__pycache__/test_quota_set.cpython-310.pyc diff --git a/tests/unit/common/__pycache__/test_tag.cpython-310.pyc b/openstack/tests/unit/common/__pycache__/test_tag.cpython-310.pyc similarity index 100% rename from tests/unit/common/__pycache__/test_tag.cpython-310.pyc rename to openstack/tests/unit/common/__pycache__/test_tag.cpython-310.pyc diff --git a/tests/unit/common/test_metadata.py b/openstack/tests/unit/common/test_metadata.py similarity index 100% rename from tests/unit/common/test_metadata.py rename to openstack/tests/unit/common/test_metadata.py diff --git a/tests/unit/common/test_quota_set.py b/openstack/tests/unit/common/test_quota_set.py similarity index 100% rename from tests/unit/common/test_quota_set.py rename to openstack/tests/unit/common/test_quota_set.py diff --git a/tests/unit/common/test_tag.py b/openstack/tests/unit/common/test_tag.py similarity index 100% rename from tests/unit/common/test_tag.py rename to openstack/tests/unit/common/test_tag.py diff --git a/tests/unit/fake/__init__.py b/openstack/tests/unit/compute/__init__.py similarity index 100% rename from tests/unit/fake/__init__.py rename to openstack/tests/unit/compute/__init__.py diff --git a/tests/unit/compute/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/compute/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/compute/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/compute/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/compute/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/compute/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/compute/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/compute/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/compute/test_version.py b/openstack/tests/unit/compute/test_version.py similarity index 100% rename from tests/unit/compute/test_version.py rename to openstack/tests/unit/compute/test_version.py diff --git a/tests/unit/fake/v1/__init__.py b/openstack/tests/unit/compute/v2/__init__.py similarity index 100% rename from tests/unit/fake/v1/__init__.py rename to openstack/tests/unit/compute/v2/__init__.py diff --git a/tests/unit/compute/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_aggregate.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_aggregate.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_aggregate.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_aggregate.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_availability_zone.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_availability_zone.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_availability_zone.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_availability_zone.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_extension.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_extension.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_extension.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_extension.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_flavor.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_flavor.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_flavor.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_flavor.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_hypervisor.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_image.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_image.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_image.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_image.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_keypair.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_keypair.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_keypair.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_keypair.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_limits.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_limits.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_limits.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_limits.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_migration.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_migration.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_migration.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_migration.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_server.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_server.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_server.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_server.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_server_actions.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_server_actions.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_server_actions.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_server_actions.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_server_diagnostics.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_server_diagnostics.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_server_diagnostics.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_server_diagnostics.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_server_group.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_server_group.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_server_group.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_server_group.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_server_interface.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_server_interface.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_server_interface.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_server_interface.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_server_ip.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_server_ip.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_server_ip.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_server_ip.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_server_migration.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_server_migration.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_server_migration.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_server_migration.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_server_remote_console.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_server_remote_console.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_server_remote_console.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_server_remote_console.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_service.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_service.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_service.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_service.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_usage.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_usage.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_usage.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_usage.cpython-310.pyc diff --git a/tests/unit/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc b/openstack/tests/unit/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc similarity index 100% rename from tests/unit/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc rename to openstack/tests/unit/compute/v2/__pycache__/test_volume_attachment.cpython-310.pyc diff --git a/tests/unit/compute/v2/test_aggregate.py b/openstack/tests/unit/compute/v2/test_aggregate.py similarity index 100% rename from tests/unit/compute/v2/test_aggregate.py rename to openstack/tests/unit/compute/v2/test_aggregate.py diff --git a/tests/unit/compute/v2/test_availability_zone.py b/openstack/tests/unit/compute/v2/test_availability_zone.py similarity index 100% rename from tests/unit/compute/v2/test_availability_zone.py rename to openstack/tests/unit/compute/v2/test_availability_zone.py diff --git a/tests/unit/compute/v2/test_extension.py b/openstack/tests/unit/compute/v2/test_extension.py similarity index 100% rename from tests/unit/compute/v2/test_extension.py rename to openstack/tests/unit/compute/v2/test_extension.py diff --git a/tests/unit/compute/v2/test_flavor.py b/openstack/tests/unit/compute/v2/test_flavor.py similarity index 100% rename from tests/unit/compute/v2/test_flavor.py rename to openstack/tests/unit/compute/v2/test_flavor.py diff --git a/tests/unit/compute/v2/test_hypervisor.py b/openstack/tests/unit/compute/v2/test_hypervisor.py similarity index 100% rename from tests/unit/compute/v2/test_hypervisor.py rename to openstack/tests/unit/compute/v2/test_hypervisor.py diff --git a/tests/unit/compute/v2/test_image.py b/openstack/tests/unit/compute/v2/test_image.py similarity index 100% rename from tests/unit/compute/v2/test_image.py rename to openstack/tests/unit/compute/v2/test_image.py diff --git a/tests/unit/compute/v2/test_keypair.py b/openstack/tests/unit/compute/v2/test_keypair.py similarity index 100% rename from tests/unit/compute/v2/test_keypair.py rename to openstack/tests/unit/compute/v2/test_keypair.py diff --git a/tests/unit/compute/v2/test_limits.py b/openstack/tests/unit/compute/v2/test_limits.py similarity index 100% rename from tests/unit/compute/v2/test_limits.py rename to openstack/tests/unit/compute/v2/test_limits.py diff --git a/tests/unit/compute/v2/test_migration.py b/openstack/tests/unit/compute/v2/test_migration.py similarity index 100% rename from tests/unit/compute/v2/test_migration.py rename to openstack/tests/unit/compute/v2/test_migration.py diff --git a/tests/unit/compute/v2/test_proxy.py b/openstack/tests/unit/compute/v2/test_proxy.py similarity index 100% rename from tests/unit/compute/v2/test_proxy.py rename to openstack/tests/unit/compute/v2/test_proxy.py diff --git a/tests/unit/compute/v2/test_server.py b/openstack/tests/unit/compute/v2/test_server.py similarity index 100% rename from tests/unit/compute/v2/test_server.py rename to openstack/tests/unit/compute/v2/test_server.py diff --git a/tests/unit/compute/v2/test_server_actions.py b/openstack/tests/unit/compute/v2/test_server_actions.py similarity index 100% rename from tests/unit/compute/v2/test_server_actions.py rename to openstack/tests/unit/compute/v2/test_server_actions.py diff --git a/tests/unit/compute/v2/test_server_diagnostics.py b/openstack/tests/unit/compute/v2/test_server_diagnostics.py similarity index 100% rename from tests/unit/compute/v2/test_server_diagnostics.py rename to openstack/tests/unit/compute/v2/test_server_diagnostics.py diff --git a/tests/unit/compute/v2/test_server_group.py b/openstack/tests/unit/compute/v2/test_server_group.py similarity index 100% rename from tests/unit/compute/v2/test_server_group.py rename to openstack/tests/unit/compute/v2/test_server_group.py diff --git a/tests/unit/compute/v2/test_server_interface.py b/openstack/tests/unit/compute/v2/test_server_interface.py similarity index 100% rename from tests/unit/compute/v2/test_server_interface.py rename to openstack/tests/unit/compute/v2/test_server_interface.py diff --git a/tests/unit/compute/v2/test_server_ip.py b/openstack/tests/unit/compute/v2/test_server_ip.py similarity index 100% rename from tests/unit/compute/v2/test_server_ip.py rename to openstack/tests/unit/compute/v2/test_server_ip.py diff --git a/tests/unit/compute/v2/test_server_migration.py b/openstack/tests/unit/compute/v2/test_server_migration.py similarity index 100% rename from tests/unit/compute/v2/test_server_migration.py rename to openstack/tests/unit/compute/v2/test_server_migration.py diff --git a/tests/unit/compute/v2/test_server_remote_console.py b/openstack/tests/unit/compute/v2/test_server_remote_console.py similarity index 100% rename from tests/unit/compute/v2/test_server_remote_console.py rename to openstack/tests/unit/compute/v2/test_server_remote_console.py diff --git a/tests/unit/compute/v2/test_service.py b/openstack/tests/unit/compute/v2/test_service.py similarity index 100% rename from tests/unit/compute/v2/test_service.py rename to openstack/tests/unit/compute/v2/test_service.py diff --git a/tests/unit/compute/v2/test_usage.py b/openstack/tests/unit/compute/v2/test_usage.py similarity index 100% rename from tests/unit/compute/v2/test_usage.py rename to openstack/tests/unit/compute/v2/test_usage.py diff --git a/tests/unit/compute/v2/test_volume_attachment.py b/openstack/tests/unit/compute/v2/test_volume_attachment.py similarity index 100% rename from tests/unit/compute/v2/test_volume_attachment.py rename to openstack/tests/unit/compute/v2/test_volume_attachment.py diff --git a/tests/unit/fake/v2/__init__.py b/openstack/tests/unit/config/__init__.py similarity index 100% rename from tests/unit/fake/v2/__init__.py rename to openstack/tests/unit/config/__init__.py diff --git a/tests/unit/config/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/base.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/base.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/base.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/base.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/test_cloud_config.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/test_cloud_config.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/test_cloud_config.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/test_cloud_config.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/test_config.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/test_config.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/test_config.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/test_config.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/test_environ.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/test_environ.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/test_environ.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/test_environ.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/test_from_conf.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/test_from_conf.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/test_from_conf.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/test_from_conf.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/test_from_session.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/test_from_session.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/test_from_session.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/test_from_session.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/test_init.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/test_init.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/test_init.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/test_init.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/test_json.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/test_json.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/test_json.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/test_json.cpython-310.pyc diff --git a/tests/unit/config/__pycache__/test_loader.cpython-310.pyc b/openstack/tests/unit/config/__pycache__/test_loader.cpython-310.pyc similarity index 100% rename from tests/unit/config/__pycache__/test_loader.cpython-310.pyc rename to openstack/tests/unit/config/__pycache__/test_loader.cpython-310.pyc diff --git a/tests/unit/config/base.py b/openstack/tests/unit/config/base.py similarity index 100% rename from tests/unit/config/base.py rename to openstack/tests/unit/config/base.py diff --git a/tests/unit/config/test_cloud_config.py b/openstack/tests/unit/config/test_cloud_config.py similarity index 100% rename from tests/unit/config/test_cloud_config.py rename to openstack/tests/unit/config/test_cloud_config.py diff --git a/tests/unit/config/test_config.py b/openstack/tests/unit/config/test_config.py similarity index 100% rename from tests/unit/config/test_config.py rename to openstack/tests/unit/config/test_config.py diff --git a/tests/unit/config/test_environ.py b/openstack/tests/unit/config/test_environ.py similarity index 100% rename from tests/unit/config/test_environ.py rename to openstack/tests/unit/config/test_environ.py diff --git a/tests/unit/config/test_from_conf.py b/openstack/tests/unit/config/test_from_conf.py similarity index 100% rename from tests/unit/config/test_from_conf.py rename to openstack/tests/unit/config/test_from_conf.py diff --git a/tests/unit/config/test_from_session.py b/openstack/tests/unit/config/test_from_session.py similarity index 100% rename from tests/unit/config/test_from_session.py rename to openstack/tests/unit/config/test_from_session.py diff --git a/tests/unit/config/test_init.py b/openstack/tests/unit/config/test_init.py similarity index 100% rename from tests/unit/config/test_init.py rename to openstack/tests/unit/config/test_init.py diff --git a/tests/unit/config/test_json.py b/openstack/tests/unit/config/test_json.py similarity index 100% rename from tests/unit/config/test_json.py rename to openstack/tests/unit/config/test_json.py diff --git a/tests/unit/config/test_loader.py b/openstack/tests/unit/config/test_loader.py similarity index 100% rename from tests/unit/config/test_loader.py rename to openstack/tests/unit/config/test_loader.py diff --git a/tests/unit/identity/__init__.py b/openstack/tests/unit/container_infrastructure_management/__init__.py similarity index 100% rename from tests/unit/identity/__init__.py rename to openstack/tests/unit/container_infrastructure_management/__init__.py diff --git a/tests/unit/container_infrastructure_management/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/container_infrastructure_management/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/container_infrastructure_management/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/container_infrastructure_management/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/identity/v2/__init__.py b/openstack/tests/unit/container_infrastructure_management/v1/__init__.py similarity index 100% rename from tests/unit/identity/v2/__init__.py rename to openstack/tests/unit/container_infrastructure_management/v1/__init__.py diff --git a/tests/unit/container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/container_infrastructure_management/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster.cpython-310.pyc b/openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster.cpython-310.pyc similarity index 100% rename from tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster.cpython-310.pyc rename to openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster.cpython-310.pyc diff --git a/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster_certificate.cpython-310.pyc b/openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster_certificate.cpython-310.pyc similarity index 100% rename from tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster_certificate.cpython-310.pyc rename to openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster_certificate.cpython-310.pyc diff --git a/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster_template.cpython-310.pyc b/openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster_template.cpython-310.pyc similarity index 100% rename from tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster_template.cpython-310.pyc rename to openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_cluster_template.cpython-310.pyc diff --git a/tests/unit/container_infrastructure_management/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/container_infrastructure_management/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/container_infrastructure_management/v1/__pycache__/test_service.cpython-310.pyc b/openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_service.cpython-310.pyc similarity index 100% rename from tests/unit/container_infrastructure_management/v1/__pycache__/test_service.cpython-310.pyc rename to openstack/tests/unit/container_infrastructure_management/v1/__pycache__/test_service.cpython-310.pyc diff --git a/tests/unit/container_infrastructure_management/v1/test_cluster.py b/openstack/tests/unit/container_infrastructure_management/v1/test_cluster.py similarity index 100% rename from tests/unit/container_infrastructure_management/v1/test_cluster.py rename to openstack/tests/unit/container_infrastructure_management/v1/test_cluster.py diff --git a/tests/unit/container_infrastructure_management/v1/test_cluster_certificate.py b/openstack/tests/unit/container_infrastructure_management/v1/test_cluster_certificate.py similarity index 100% rename from tests/unit/container_infrastructure_management/v1/test_cluster_certificate.py rename to openstack/tests/unit/container_infrastructure_management/v1/test_cluster_certificate.py diff --git a/tests/unit/container_infrastructure_management/v1/test_cluster_template.py b/openstack/tests/unit/container_infrastructure_management/v1/test_cluster_template.py similarity index 100% rename from tests/unit/container_infrastructure_management/v1/test_cluster_template.py rename to openstack/tests/unit/container_infrastructure_management/v1/test_cluster_template.py diff --git a/tests/unit/container_infrastructure_management/v1/test_proxy.py b/openstack/tests/unit/container_infrastructure_management/v1/test_proxy.py similarity index 100% rename from tests/unit/container_infrastructure_management/v1/test_proxy.py rename to openstack/tests/unit/container_infrastructure_management/v1/test_proxy.py diff --git a/tests/unit/container_infrastructure_management/v1/test_service.py b/openstack/tests/unit/container_infrastructure_management/v1/test_service.py similarity index 100% rename from tests/unit/container_infrastructure_management/v1/test_service.py rename to openstack/tests/unit/container_infrastructure_management/v1/test_service.py diff --git a/tests/unit/identity/v3/__init__.py b/openstack/tests/unit/database/__init__.py similarity index 100% rename from tests/unit/identity/v3/__init__.py rename to openstack/tests/unit/database/__init__.py diff --git a/tests/unit/database/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/database/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/database/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/database/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/image/__init__.py b/openstack/tests/unit/database/v1/__init__.py similarity index 100% rename from tests/unit/image/__init__.py rename to openstack/tests/unit/database/v1/__init__.py diff --git a/tests/unit/database/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/database/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/database/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/database/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/database/v1/__pycache__/test_database.cpython-310.pyc b/openstack/tests/unit/database/v1/__pycache__/test_database.cpython-310.pyc similarity index 100% rename from tests/unit/database/v1/__pycache__/test_database.cpython-310.pyc rename to openstack/tests/unit/database/v1/__pycache__/test_database.cpython-310.pyc diff --git a/tests/unit/database/v1/__pycache__/test_flavor.cpython-310.pyc b/openstack/tests/unit/database/v1/__pycache__/test_flavor.cpython-310.pyc similarity index 100% rename from tests/unit/database/v1/__pycache__/test_flavor.cpython-310.pyc rename to openstack/tests/unit/database/v1/__pycache__/test_flavor.cpython-310.pyc diff --git a/tests/unit/database/v1/__pycache__/test_instance.cpython-310.pyc b/openstack/tests/unit/database/v1/__pycache__/test_instance.cpython-310.pyc similarity index 100% rename from tests/unit/database/v1/__pycache__/test_instance.cpython-310.pyc rename to openstack/tests/unit/database/v1/__pycache__/test_instance.cpython-310.pyc diff --git a/tests/unit/database/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/database/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/database/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/database/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/database/v1/__pycache__/test_user.cpython-310.pyc b/openstack/tests/unit/database/v1/__pycache__/test_user.cpython-310.pyc similarity index 100% rename from tests/unit/database/v1/__pycache__/test_user.cpython-310.pyc rename to openstack/tests/unit/database/v1/__pycache__/test_user.cpython-310.pyc diff --git a/tests/unit/database/v1/test_database.py b/openstack/tests/unit/database/v1/test_database.py similarity index 100% rename from tests/unit/database/v1/test_database.py rename to openstack/tests/unit/database/v1/test_database.py diff --git a/tests/unit/database/v1/test_flavor.py b/openstack/tests/unit/database/v1/test_flavor.py similarity index 100% rename from tests/unit/database/v1/test_flavor.py rename to openstack/tests/unit/database/v1/test_flavor.py diff --git a/tests/unit/database/v1/test_instance.py b/openstack/tests/unit/database/v1/test_instance.py similarity index 100% rename from tests/unit/database/v1/test_instance.py rename to openstack/tests/unit/database/v1/test_instance.py diff --git a/tests/unit/database/v1/test_proxy.py b/openstack/tests/unit/database/v1/test_proxy.py similarity index 100% rename from tests/unit/database/v1/test_proxy.py rename to openstack/tests/unit/database/v1/test_proxy.py diff --git a/tests/unit/database/v1/test_user.py b/openstack/tests/unit/database/v1/test_user.py similarity index 100% rename from tests/unit/database/v1/test_user.py rename to openstack/tests/unit/database/v1/test_user.py diff --git a/tests/unit/image/v1/__init__.py b/openstack/tests/unit/dns/__init__.py similarity index 100% rename from tests/unit/image/v1/__init__.py rename to openstack/tests/unit/dns/__init__.py diff --git a/tests/unit/dns/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/dns/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/dns/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/dns/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/dns/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/dns/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/dns/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/dns/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/dns/test_version.py b/openstack/tests/unit/dns/test_version.py similarity index 100% rename from tests/unit/dns/test_version.py rename to openstack/tests/unit/dns/test_version.py diff --git a/tests/unit/image/v2/__init__.py b/openstack/tests/unit/dns/v2/__init__.py similarity index 100% rename from tests/unit/image/v2/__init__.py rename to openstack/tests/unit/dns/v2/__init__.py diff --git a/tests/unit/dns/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/dns/v2/__pycache__/test_floating_ip.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/test_floating_ip.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/test_floating_ip.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/test_floating_ip.cpython-310.pyc diff --git a/tests/unit/dns/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/dns/v2/__pycache__/test_recordset.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/test_recordset.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/test_recordset.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/test_recordset.cpython-310.pyc diff --git a/tests/unit/dns/v2/__pycache__/test_zone.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/test_zone.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/test_zone.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/test_zone.cpython-310.pyc diff --git a/tests/unit/dns/v2/__pycache__/test_zone_export.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/test_zone_export.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/test_zone_export.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/test_zone_export.cpython-310.pyc diff --git a/tests/unit/dns/v2/__pycache__/test_zone_import.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/test_zone_import.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/test_zone_import.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/test_zone_import.cpython-310.pyc diff --git a/tests/unit/dns/v2/__pycache__/test_zone_share.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/test_zone_share.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/test_zone_share.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/test_zone_share.cpython-310.pyc diff --git a/tests/unit/dns/v2/__pycache__/test_zone_transfer.cpython-310.pyc b/openstack/tests/unit/dns/v2/__pycache__/test_zone_transfer.cpython-310.pyc similarity index 100% rename from tests/unit/dns/v2/__pycache__/test_zone_transfer.cpython-310.pyc rename to openstack/tests/unit/dns/v2/__pycache__/test_zone_transfer.cpython-310.pyc diff --git a/tests/unit/dns/v2/test_floating_ip.py b/openstack/tests/unit/dns/v2/test_floating_ip.py similarity index 100% rename from tests/unit/dns/v2/test_floating_ip.py rename to openstack/tests/unit/dns/v2/test_floating_ip.py diff --git a/tests/unit/dns/v2/test_proxy.py b/openstack/tests/unit/dns/v2/test_proxy.py similarity index 100% rename from tests/unit/dns/v2/test_proxy.py rename to openstack/tests/unit/dns/v2/test_proxy.py diff --git a/tests/unit/dns/v2/test_recordset.py b/openstack/tests/unit/dns/v2/test_recordset.py similarity index 100% rename from tests/unit/dns/v2/test_recordset.py rename to openstack/tests/unit/dns/v2/test_recordset.py diff --git a/tests/unit/dns/v2/test_zone.py b/openstack/tests/unit/dns/v2/test_zone.py similarity index 100% rename from tests/unit/dns/v2/test_zone.py rename to openstack/tests/unit/dns/v2/test_zone.py diff --git a/tests/unit/dns/v2/test_zone_export.py b/openstack/tests/unit/dns/v2/test_zone_export.py similarity index 100% rename from tests/unit/dns/v2/test_zone_export.py rename to openstack/tests/unit/dns/v2/test_zone_export.py diff --git a/tests/unit/dns/v2/test_zone_import.py b/openstack/tests/unit/dns/v2/test_zone_import.py similarity index 100% rename from tests/unit/dns/v2/test_zone_import.py rename to openstack/tests/unit/dns/v2/test_zone_import.py diff --git a/tests/unit/dns/v2/test_zone_share.py b/openstack/tests/unit/dns/v2/test_zone_share.py similarity index 100% rename from tests/unit/dns/v2/test_zone_share.py rename to openstack/tests/unit/dns/v2/test_zone_share.py diff --git a/tests/unit/dns/v2/test_zone_transfer.py b/openstack/tests/unit/dns/v2/test_zone_transfer.py similarity index 100% rename from tests/unit/dns/v2/test_zone_transfer.py rename to openstack/tests/unit/dns/v2/test_zone_transfer.py diff --git a/tests/unit/instance_ha/__init__.py b/openstack/tests/unit/fake/__init__.py similarity index 100% rename from tests/unit/instance_ha/__init__.py rename to openstack/tests/unit/fake/__init__.py diff --git a/tests/unit/fake/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/fake/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/fake/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/fake/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/fake/__pycache__/fake_service.cpython-310.pyc b/openstack/tests/unit/fake/__pycache__/fake_service.cpython-310.pyc similarity index 100% rename from tests/unit/fake/__pycache__/fake_service.cpython-310.pyc rename to openstack/tests/unit/fake/__pycache__/fake_service.cpython-310.pyc diff --git a/tests/unit/fake/fake_service.py b/openstack/tests/unit/fake/fake_service.py similarity index 100% rename from tests/unit/fake/fake_service.py rename to openstack/tests/unit/fake/fake_service.py diff --git a/tests/unit/instance_ha/v1/__init__.py b/openstack/tests/unit/fake/v1/__init__.py similarity index 100% rename from tests/unit/instance_ha/v1/__init__.py rename to openstack/tests/unit/fake/v1/__init__.py diff --git a/tests/unit/fake/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/fake/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/fake/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/fake/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/fake/v1/__pycache__/_proxy.cpython-310.pyc b/openstack/tests/unit/fake/v1/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/fake/v1/__pycache__/_proxy.cpython-310.pyc rename to openstack/tests/unit/fake/v1/__pycache__/_proxy.cpython-310.pyc diff --git a/tests/unit/fake/v1/__pycache__/fake.cpython-310.pyc b/openstack/tests/unit/fake/v1/__pycache__/fake.cpython-310.pyc similarity index 100% rename from tests/unit/fake/v1/__pycache__/fake.cpython-310.pyc rename to openstack/tests/unit/fake/v1/__pycache__/fake.cpython-310.pyc diff --git a/tests/unit/fake/v1/_proxy.py b/openstack/tests/unit/fake/v1/_proxy.py similarity index 100% rename from tests/unit/fake/v1/_proxy.py rename to openstack/tests/unit/fake/v1/_proxy.py diff --git a/tests/unit/fake/v1/fake.py b/openstack/tests/unit/fake/v1/fake.py similarity index 100% rename from tests/unit/fake/v1/fake.py rename to openstack/tests/unit/fake/v1/fake.py diff --git a/tests/unit/key_manager/__init__.py b/openstack/tests/unit/fake/v2/__init__.py similarity index 100% rename from tests/unit/key_manager/__init__.py rename to openstack/tests/unit/fake/v2/__init__.py diff --git a/tests/unit/fake/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/fake/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/fake/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/fake/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/fake/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/tests/unit/fake/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/fake/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/tests/unit/fake/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/tests/unit/fake/v2/__pycache__/fake.cpython-310.pyc b/openstack/tests/unit/fake/v2/__pycache__/fake.cpython-310.pyc similarity index 100% rename from tests/unit/fake/v2/__pycache__/fake.cpython-310.pyc rename to openstack/tests/unit/fake/v2/__pycache__/fake.cpython-310.pyc diff --git a/tests/unit/fake/v2/_proxy.py b/openstack/tests/unit/fake/v2/_proxy.py similarity index 100% rename from tests/unit/fake/v2/_proxy.py rename to openstack/tests/unit/fake/v2/_proxy.py diff --git a/tests/unit/fake/v2/fake.py b/openstack/tests/unit/fake/v2/fake.py similarity index 100% rename from tests/unit/fake/v2/fake.py rename to openstack/tests/unit/fake/v2/fake.py diff --git a/tests/unit/fakes.py b/openstack/tests/unit/fakes.py similarity index 100% rename from tests/unit/fakes.py rename to openstack/tests/unit/fakes.py diff --git a/tests/unit/fixtures/accelerator.json b/openstack/tests/unit/fixtures/accelerator.json similarity index 100% rename from tests/unit/fixtures/accelerator.json rename to openstack/tests/unit/fixtures/accelerator.json diff --git a/tests/unit/fixtures/bad-glance-version.json b/openstack/tests/unit/fixtures/bad-glance-version.json similarity index 100% rename from tests/unit/fixtures/bad-glance-version.json rename to openstack/tests/unit/fixtures/bad-glance-version.json diff --git a/tests/unit/fixtures/bad-placement.json b/openstack/tests/unit/fixtures/bad-placement.json similarity index 100% rename from tests/unit/fixtures/bad-placement.json rename to openstack/tests/unit/fixtures/bad-placement.json diff --git a/tests/unit/fixtures/baremetal.json b/openstack/tests/unit/fixtures/baremetal.json similarity index 100% rename from tests/unit/fixtures/baremetal.json rename to openstack/tests/unit/fixtures/baremetal.json diff --git a/tests/unit/fixtures/block-storage-version.json b/openstack/tests/unit/fixtures/block-storage-version.json similarity index 100% rename from tests/unit/fixtures/block-storage-version.json rename to openstack/tests/unit/fixtures/block-storage-version.json diff --git a/tests/unit/fixtures/clouds/clouds.yaml b/openstack/tests/unit/fixtures/clouds/clouds.yaml similarity index 100% rename from tests/unit/fixtures/clouds/clouds.yaml rename to openstack/tests/unit/fixtures/clouds/clouds.yaml diff --git a/tests/unit/fixtures/clouds/clouds_cache.yaml b/openstack/tests/unit/fixtures/clouds/clouds_cache.yaml similarity index 100% rename from tests/unit/fixtures/clouds/clouds_cache.yaml rename to openstack/tests/unit/fixtures/clouds/clouds_cache.yaml diff --git a/tests/unit/fixtures/clustering.json b/openstack/tests/unit/fixtures/clustering.json similarity index 100% rename from tests/unit/fixtures/clustering.json rename to openstack/tests/unit/fixtures/clustering.json diff --git a/tests/unit/fixtures/compute-version.json b/openstack/tests/unit/fixtures/compute-version.json similarity index 100% rename from tests/unit/fixtures/compute-version.json rename to openstack/tests/unit/fixtures/compute-version.json diff --git a/tests/unit/fixtures/discovery.json b/openstack/tests/unit/fixtures/discovery.json similarity index 100% rename from tests/unit/fixtures/discovery.json rename to openstack/tests/unit/fixtures/discovery.json diff --git a/tests/unit/fixtures/dns.json b/openstack/tests/unit/fixtures/dns.json similarity index 100% rename from tests/unit/fixtures/dns.json rename to openstack/tests/unit/fixtures/dns.json diff --git a/tests/unit/fixtures/image-version-broken.json b/openstack/tests/unit/fixtures/image-version-broken.json similarity index 100% rename from tests/unit/fixtures/image-version-broken.json rename to openstack/tests/unit/fixtures/image-version-broken.json diff --git a/tests/unit/fixtures/image-version-suburl.json b/openstack/tests/unit/fixtures/image-version-suburl.json similarity index 100% rename from tests/unit/fixtures/image-version-suburl.json rename to openstack/tests/unit/fixtures/image-version-suburl.json diff --git a/tests/unit/fixtures/image-version-v1.json b/openstack/tests/unit/fixtures/image-version-v1.json similarity index 100% rename from tests/unit/fixtures/image-version-v1.json rename to openstack/tests/unit/fixtures/image-version-v1.json diff --git a/tests/unit/fixtures/image-version-v2.json b/openstack/tests/unit/fixtures/image-version-v2.json similarity index 100% rename from tests/unit/fixtures/image-version-v2.json rename to openstack/tests/unit/fixtures/image-version-v2.json diff --git a/tests/unit/fixtures/image-version.json b/openstack/tests/unit/fixtures/image-version.json similarity index 100% rename from tests/unit/fixtures/image-version.json rename to openstack/tests/unit/fixtures/image-version.json diff --git a/tests/unit/fixtures/old-compute-version.json b/openstack/tests/unit/fixtures/old-compute-version.json similarity index 100% rename from tests/unit/fixtures/old-compute-version.json rename to openstack/tests/unit/fixtures/old-compute-version.json diff --git a/tests/unit/fixtures/placement.json b/openstack/tests/unit/fixtures/placement.json similarity index 100% rename from tests/unit/fixtures/placement.json rename to openstack/tests/unit/fixtures/placement.json diff --git a/tests/unit/fixtures/shared-file-system.json b/openstack/tests/unit/fixtures/shared-file-system.json similarity index 100% rename from tests/unit/fixtures/shared-file-system.json rename to openstack/tests/unit/fixtures/shared-file-system.json diff --git a/tests/unit/key_manager/v1/__init__.py b/openstack/tests/unit/identity/__init__.py similarity index 100% rename from tests/unit/key_manager/v1/__init__.py rename to openstack/tests/unit/identity/__init__.py diff --git a/tests/unit/identity/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/identity/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/identity/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/identity/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/identity/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/identity/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/identity/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/identity/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/identity/test_version.py b/openstack/tests/unit/identity/test_version.py similarity index 100% rename from tests/unit/identity/test_version.py rename to openstack/tests/unit/identity/test_version.py diff --git a/tests/unit/load_balancer/__init__.py b/openstack/tests/unit/identity/v2/__init__.py similarity index 100% rename from tests/unit/load_balancer/__init__.py rename to openstack/tests/unit/identity/v2/__init__.py diff --git a/tests/unit/identity/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/identity/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/identity/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/identity/v2/__pycache__/test_extension.cpython-310.pyc b/openstack/tests/unit/identity/v2/__pycache__/test_extension.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v2/__pycache__/test_extension.cpython-310.pyc rename to openstack/tests/unit/identity/v2/__pycache__/test_extension.cpython-310.pyc diff --git a/tests/unit/identity/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/identity/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/identity/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/identity/v2/__pycache__/test_role.cpython-310.pyc b/openstack/tests/unit/identity/v2/__pycache__/test_role.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v2/__pycache__/test_role.cpython-310.pyc rename to openstack/tests/unit/identity/v2/__pycache__/test_role.cpython-310.pyc diff --git a/tests/unit/identity/v2/__pycache__/test_tenant.cpython-310.pyc b/openstack/tests/unit/identity/v2/__pycache__/test_tenant.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v2/__pycache__/test_tenant.cpython-310.pyc rename to openstack/tests/unit/identity/v2/__pycache__/test_tenant.cpython-310.pyc diff --git a/tests/unit/identity/v2/__pycache__/test_user.cpython-310.pyc b/openstack/tests/unit/identity/v2/__pycache__/test_user.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v2/__pycache__/test_user.cpython-310.pyc rename to openstack/tests/unit/identity/v2/__pycache__/test_user.cpython-310.pyc diff --git a/tests/unit/identity/v2/test_extension.py b/openstack/tests/unit/identity/v2/test_extension.py similarity index 100% rename from tests/unit/identity/v2/test_extension.py rename to openstack/tests/unit/identity/v2/test_extension.py diff --git a/tests/unit/identity/v2/test_proxy.py b/openstack/tests/unit/identity/v2/test_proxy.py similarity index 100% rename from tests/unit/identity/v2/test_proxy.py rename to openstack/tests/unit/identity/v2/test_proxy.py diff --git a/tests/unit/identity/v2/test_role.py b/openstack/tests/unit/identity/v2/test_role.py similarity index 100% rename from tests/unit/identity/v2/test_role.py rename to openstack/tests/unit/identity/v2/test_role.py diff --git a/tests/unit/identity/v2/test_tenant.py b/openstack/tests/unit/identity/v2/test_tenant.py similarity index 100% rename from tests/unit/identity/v2/test_tenant.py rename to openstack/tests/unit/identity/v2/test_tenant.py diff --git a/tests/unit/identity/v2/test_user.py b/openstack/tests/unit/identity/v2/test_user.py similarity index 100% rename from tests/unit/identity/v2/test_user.py rename to openstack/tests/unit/identity/v2/test_user.py diff --git a/tests/unit/load_balancer/v2/__init__.py b/openstack/tests/unit/identity/v3/__init__.py similarity index 100% rename from tests/unit/load_balancer/v2/__init__.py rename to openstack/tests/unit/identity/v3/__init__.py diff --git a/tests/unit/identity/v3/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_application_credential.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_application_credential.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_application_credential.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_application_credential.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_credential.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_credential.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_credential.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_credential.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_domain.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_domain.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_domain.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_domain.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_domain_config.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_domain_config.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_domain_config.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_domain_config.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_endpoint.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_endpoint.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_endpoint.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_endpoint.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_federation_protocol.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_federation_protocol.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_federation_protocol.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_federation_protocol.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_group.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_group.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_group.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_group.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_identity_provider.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_identity_provider.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_identity_provider.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_identity_provider.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_limit.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_limit.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_limit.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_limit.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_mapping.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_mapping.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_mapping.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_mapping.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_policy.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_policy.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_policy.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_policy.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_project.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_project.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_project.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_project.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_region.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_region.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_region.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_region.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_registered_limit.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_registered_limit.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_registered_limit.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_registered_limit.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_role.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_role.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_role.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_role.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_role_assignment.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_role_assignment.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_role_assignment.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_role_assignment.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_role_domain_group_assignment.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_role_domain_group_assignment.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_role_domain_group_assignment.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_role_domain_group_assignment.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_role_domain_user_assignment.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_role_domain_user_assignment.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_role_domain_user_assignment.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_role_domain_user_assignment.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_role_project_group_assignment.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_role_project_group_assignment.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_role_project_group_assignment.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_role_project_group_assignment.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_role_project_user_assignment.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_role_project_user_assignment.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_role_project_user_assignment.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_role_project_user_assignment.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_role_system_group_assignment.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_role_system_group_assignment.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_role_system_group_assignment.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_role_system_group_assignment.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_role_system_user_assignment.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_role_system_user_assignment.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_role_system_user_assignment.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_role_system_user_assignment.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_service.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_service.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_service.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_service.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_trust.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_trust.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_trust.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_trust.cpython-310.pyc diff --git a/tests/unit/identity/v3/__pycache__/test_user.cpython-310.pyc b/openstack/tests/unit/identity/v3/__pycache__/test_user.cpython-310.pyc similarity index 100% rename from tests/unit/identity/v3/__pycache__/test_user.cpython-310.pyc rename to openstack/tests/unit/identity/v3/__pycache__/test_user.cpython-310.pyc diff --git a/tests/unit/identity/v3/test_application_credential.py b/openstack/tests/unit/identity/v3/test_application_credential.py similarity index 100% rename from tests/unit/identity/v3/test_application_credential.py rename to openstack/tests/unit/identity/v3/test_application_credential.py diff --git a/tests/unit/identity/v3/test_credential.py b/openstack/tests/unit/identity/v3/test_credential.py similarity index 100% rename from tests/unit/identity/v3/test_credential.py rename to openstack/tests/unit/identity/v3/test_credential.py diff --git a/tests/unit/identity/v3/test_domain.py b/openstack/tests/unit/identity/v3/test_domain.py similarity index 100% rename from tests/unit/identity/v3/test_domain.py rename to openstack/tests/unit/identity/v3/test_domain.py diff --git a/tests/unit/identity/v3/test_domain_config.py b/openstack/tests/unit/identity/v3/test_domain_config.py similarity index 100% rename from tests/unit/identity/v3/test_domain_config.py rename to openstack/tests/unit/identity/v3/test_domain_config.py diff --git a/tests/unit/identity/v3/test_endpoint.py b/openstack/tests/unit/identity/v3/test_endpoint.py similarity index 100% rename from tests/unit/identity/v3/test_endpoint.py rename to openstack/tests/unit/identity/v3/test_endpoint.py diff --git a/tests/unit/identity/v3/test_federation_protocol.py b/openstack/tests/unit/identity/v3/test_federation_protocol.py similarity index 100% rename from tests/unit/identity/v3/test_federation_protocol.py rename to openstack/tests/unit/identity/v3/test_federation_protocol.py diff --git a/tests/unit/identity/v3/test_group.py b/openstack/tests/unit/identity/v3/test_group.py similarity index 100% rename from tests/unit/identity/v3/test_group.py rename to openstack/tests/unit/identity/v3/test_group.py diff --git a/tests/unit/identity/v3/test_identity_provider.py b/openstack/tests/unit/identity/v3/test_identity_provider.py similarity index 100% rename from tests/unit/identity/v3/test_identity_provider.py rename to openstack/tests/unit/identity/v3/test_identity_provider.py diff --git a/tests/unit/identity/v3/test_limit.py b/openstack/tests/unit/identity/v3/test_limit.py similarity index 100% rename from tests/unit/identity/v3/test_limit.py rename to openstack/tests/unit/identity/v3/test_limit.py diff --git a/tests/unit/identity/v3/test_mapping.py b/openstack/tests/unit/identity/v3/test_mapping.py similarity index 100% rename from tests/unit/identity/v3/test_mapping.py rename to openstack/tests/unit/identity/v3/test_mapping.py diff --git a/tests/unit/identity/v3/test_policy.py b/openstack/tests/unit/identity/v3/test_policy.py similarity index 100% rename from tests/unit/identity/v3/test_policy.py rename to openstack/tests/unit/identity/v3/test_policy.py diff --git a/tests/unit/identity/v3/test_project.py b/openstack/tests/unit/identity/v3/test_project.py similarity index 100% rename from tests/unit/identity/v3/test_project.py rename to openstack/tests/unit/identity/v3/test_project.py diff --git a/tests/unit/identity/v3/test_proxy.py b/openstack/tests/unit/identity/v3/test_proxy.py similarity index 100% rename from tests/unit/identity/v3/test_proxy.py rename to openstack/tests/unit/identity/v3/test_proxy.py diff --git a/tests/unit/identity/v3/test_region.py b/openstack/tests/unit/identity/v3/test_region.py similarity index 100% rename from tests/unit/identity/v3/test_region.py rename to openstack/tests/unit/identity/v3/test_region.py diff --git a/tests/unit/identity/v3/test_registered_limit.py b/openstack/tests/unit/identity/v3/test_registered_limit.py similarity index 100% rename from tests/unit/identity/v3/test_registered_limit.py rename to openstack/tests/unit/identity/v3/test_registered_limit.py diff --git a/tests/unit/identity/v3/test_role.py b/openstack/tests/unit/identity/v3/test_role.py similarity index 100% rename from tests/unit/identity/v3/test_role.py rename to openstack/tests/unit/identity/v3/test_role.py diff --git a/tests/unit/identity/v3/test_role_assignment.py b/openstack/tests/unit/identity/v3/test_role_assignment.py similarity index 100% rename from tests/unit/identity/v3/test_role_assignment.py rename to openstack/tests/unit/identity/v3/test_role_assignment.py diff --git a/tests/unit/identity/v3/test_role_domain_group_assignment.py b/openstack/tests/unit/identity/v3/test_role_domain_group_assignment.py similarity index 100% rename from tests/unit/identity/v3/test_role_domain_group_assignment.py rename to openstack/tests/unit/identity/v3/test_role_domain_group_assignment.py diff --git a/tests/unit/identity/v3/test_role_domain_user_assignment.py b/openstack/tests/unit/identity/v3/test_role_domain_user_assignment.py similarity index 100% rename from tests/unit/identity/v3/test_role_domain_user_assignment.py rename to openstack/tests/unit/identity/v3/test_role_domain_user_assignment.py diff --git a/tests/unit/identity/v3/test_role_project_group_assignment.py b/openstack/tests/unit/identity/v3/test_role_project_group_assignment.py similarity index 100% rename from tests/unit/identity/v3/test_role_project_group_assignment.py rename to openstack/tests/unit/identity/v3/test_role_project_group_assignment.py diff --git a/tests/unit/identity/v3/test_role_project_user_assignment.py b/openstack/tests/unit/identity/v3/test_role_project_user_assignment.py similarity index 100% rename from tests/unit/identity/v3/test_role_project_user_assignment.py rename to openstack/tests/unit/identity/v3/test_role_project_user_assignment.py diff --git a/tests/unit/identity/v3/test_role_system_group_assignment.py b/openstack/tests/unit/identity/v3/test_role_system_group_assignment.py similarity index 100% rename from tests/unit/identity/v3/test_role_system_group_assignment.py rename to openstack/tests/unit/identity/v3/test_role_system_group_assignment.py diff --git a/tests/unit/identity/v3/test_role_system_user_assignment.py b/openstack/tests/unit/identity/v3/test_role_system_user_assignment.py similarity index 100% rename from tests/unit/identity/v3/test_role_system_user_assignment.py rename to openstack/tests/unit/identity/v3/test_role_system_user_assignment.py diff --git a/tests/unit/identity/v3/test_service.py b/openstack/tests/unit/identity/v3/test_service.py similarity index 100% rename from tests/unit/identity/v3/test_service.py rename to openstack/tests/unit/identity/v3/test_service.py diff --git a/tests/unit/identity/v3/test_trust.py b/openstack/tests/unit/identity/v3/test_trust.py similarity index 100% rename from tests/unit/identity/v3/test_trust.py rename to openstack/tests/unit/identity/v3/test_trust.py diff --git a/tests/unit/identity/v3/test_user.py b/openstack/tests/unit/identity/v3/test_user.py similarity index 100% rename from tests/unit/identity/v3/test_user.py rename to openstack/tests/unit/identity/v3/test_user.py diff --git a/tests/unit/message/__init__.py b/openstack/tests/unit/image/__init__.py similarity index 100% rename from tests/unit/message/__init__.py rename to openstack/tests/unit/image/__init__.py diff --git a/tests/unit/image/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/image/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/image/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/image/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/message/v2/__init__.py b/openstack/tests/unit/image/v1/__init__.py similarity index 100% rename from tests/unit/message/v2/__init__.py rename to openstack/tests/unit/image/v1/__init__.py diff --git a/tests/unit/image/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/image/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/image/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/image/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/image/v1/__pycache__/test_image.cpython-310.pyc b/openstack/tests/unit/image/v1/__pycache__/test_image.cpython-310.pyc similarity index 100% rename from tests/unit/image/v1/__pycache__/test_image.cpython-310.pyc rename to openstack/tests/unit/image/v1/__pycache__/test_image.cpython-310.pyc diff --git a/tests/unit/image/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/image/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/image/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/image/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/image/v1/test_image.py b/openstack/tests/unit/image/v1/test_image.py similarity index 100% rename from tests/unit/image/v1/test_image.py rename to openstack/tests/unit/image/v1/test_image.py diff --git a/tests/unit/image/v1/test_proxy.py b/openstack/tests/unit/image/v1/test_proxy.py similarity index 100% rename from tests/unit/image/v1/test_proxy.py rename to openstack/tests/unit/image/v1/test_proxy.py diff --git a/tests/unit/network/__init__.py b/openstack/tests/unit/image/v2/__init__.py similarity index 100% rename from tests/unit/network/__init__.py rename to openstack/tests/unit/image/v2/__init__.py diff --git a/tests/unit/image/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_cache.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_cache.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_cache.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_cache.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_image.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_image.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_image.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_image.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_member.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_member.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_member.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_member.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_metadef_namespace.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_metadef_object.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_metadef_object.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_metadef_object.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_metadef_object.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_metadef_property.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_metadef_property.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_metadef_property.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_metadef_property.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_metadef_resource_type.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_metadef_resource_type_association.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_metadef_resource_type_association.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_metadef_resource_type_association.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_metadef_resource_type_association.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_metadef_schema.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_schema.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_schema.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_schema.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_schema.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_service_info.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_service_info.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_service_info.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_service_info.cpython-310.pyc diff --git a/tests/unit/image/v2/__pycache__/test_task.cpython-310.pyc b/openstack/tests/unit/image/v2/__pycache__/test_task.cpython-310.pyc similarity index 100% rename from tests/unit/image/v2/__pycache__/test_task.cpython-310.pyc rename to openstack/tests/unit/image/v2/__pycache__/test_task.cpython-310.pyc diff --git a/tests/unit/image/v2/test_cache.py b/openstack/tests/unit/image/v2/test_cache.py similarity index 100% rename from tests/unit/image/v2/test_cache.py rename to openstack/tests/unit/image/v2/test_cache.py diff --git a/tests/unit/image/v2/test_image.py b/openstack/tests/unit/image/v2/test_image.py similarity index 100% rename from tests/unit/image/v2/test_image.py rename to openstack/tests/unit/image/v2/test_image.py diff --git a/tests/unit/image/v2/test_member.py b/openstack/tests/unit/image/v2/test_member.py similarity index 100% rename from tests/unit/image/v2/test_member.py rename to openstack/tests/unit/image/v2/test_member.py diff --git a/tests/unit/image/v2/test_metadef_namespace.py b/openstack/tests/unit/image/v2/test_metadef_namespace.py similarity index 100% rename from tests/unit/image/v2/test_metadef_namespace.py rename to openstack/tests/unit/image/v2/test_metadef_namespace.py diff --git a/tests/unit/image/v2/test_metadef_object.py b/openstack/tests/unit/image/v2/test_metadef_object.py similarity index 100% rename from tests/unit/image/v2/test_metadef_object.py rename to openstack/tests/unit/image/v2/test_metadef_object.py diff --git a/tests/unit/image/v2/test_metadef_property.py b/openstack/tests/unit/image/v2/test_metadef_property.py similarity index 100% rename from tests/unit/image/v2/test_metadef_property.py rename to openstack/tests/unit/image/v2/test_metadef_property.py diff --git a/tests/unit/image/v2/test_metadef_resource_type.py b/openstack/tests/unit/image/v2/test_metadef_resource_type.py similarity index 100% rename from tests/unit/image/v2/test_metadef_resource_type.py rename to openstack/tests/unit/image/v2/test_metadef_resource_type.py diff --git a/tests/unit/image/v2/test_metadef_resource_type_association.py b/openstack/tests/unit/image/v2/test_metadef_resource_type_association.py similarity index 100% rename from tests/unit/image/v2/test_metadef_resource_type_association.py rename to openstack/tests/unit/image/v2/test_metadef_resource_type_association.py diff --git a/tests/unit/image/v2/test_metadef_schema.py b/openstack/tests/unit/image/v2/test_metadef_schema.py similarity index 100% rename from tests/unit/image/v2/test_metadef_schema.py rename to openstack/tests/unit/image/v2/test_metadef_schema.py diff --git a/tests/unit/image/v2/test_proxy.py b/openstack/tests/unit/image/v2/test_proxy.py similarity index 100% rename from tests/unit/image/v2/test_proxy.py rename to openstack/tests/unit/image/v2/test_proxy.py diff --git a/tests/unit/image/v2/test_schema.py b/openstack/tests/unit/image/v2/test_schema.py similarity index 100% rename from tests/unit/image/v2/test_schema.py rename to openstack/tests/unit/image/v2/test_schema.py diff --git a/tests/unit/image/v2/test_service_info.py b/openstack/tests/unit/image/v2/test_service_info.py similarity index 100% rename from tests/unit/image/v2/test_service_info.py rename to openstack/tests/unit/image/v2/test_service_info.py diff --git a/tests/unit/image/v2/test_task.py b/openstack/tests/unit/image/v2/test_task.py similarity index 100% rename from tests/unit/image/v2/test_task.py rename to openstack/tests/unit/image/v2/test_task.py diff --git a/tests/unit/network/v2/__init__.py b/openstack/tests/unit/instance_ha/__init__.py similarity index 100% rename from tests/unit/network/v2/__init__.py rename to openstack/tests/unit/instance_ha/__init__.py diff --git a/tests/unit/instance_ha/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/instance_ha/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/instance_ha/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/instance_ha/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/object_store/__init__.py b/openstack/tests/unit/instance_ha/v1/__init__.py similarity index 100% rename from tests/unit/object_store/__init__.py rename to openstack/tests/unit/instance_ha/v1/__init__.py diff --git a/tests/unit/instance_ha/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/instance_ha/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/instance_ha/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/instance_ha/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/instance_ha/v1/__pycache__/test_host.cpython-310.pyc b/openstack/tests/unit/instance_ha/v1/__pycache__/test_host.cpython-310.pyc similarity index 100% rename from tests/unit/instance_ha/v1/__pycache__/test_host.cpython-310.pyc rename to openstack/tests/unit/instance_ha/v1/__pycache__/test_host.cpython-310.pyc diff --git a/tests/unit/instance_ha/v1/__pycache__/test_notification.cpython-310.pyc b/openstack/tests/unit/instance_ha/v1/__pycache__/test_notification.cpython-310.pyc similarity index 100% rename from tests/unit/instance_ha/v1/__pycache__/test_notification.cpython-310.pyc rename to openstack/tests/unit/instance_ha/v1/__pycache__/test_notification.cpython-310.pyc diff --git a/tests/unit/instance_ha/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/instance_ha/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/instance_ha/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/instance_ha/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/instance_ha/v1/__pycache__/test_segment.cpython-310.pyc b/openstack/tests/unit/instance_ha/v1/__pycache__/test_segment.cpython-310.pyc similarity index 100% rename from tests/unit/instance_ha/v1/__pycache__/test_segment.cpython-310.pyc rename to openstack/tests/unit/instance_ha/v1/__pycache__/test_segment.cpython-310.pyc diff --git a/tests/unit/instance_ha/v1/__pycache__/test_vmove.cpython-310.pyc b/openstack/tests/unit/instance_ha/v1/__pycache__/test_vmove.cpython-310.pyc similarity index 100% rename from tests/unit/instance_ha/v1/__pycache__/test_vmove.cpython-310.pyc rename to openstack/tests/unit/instance_ha/v1/__pycache__/test_vmove.cpython-310.pyc diff --git a/tests/unit/instance_ha/v1/test_host.py b/openstack/tests/unit/instance_ha/v1/test_host.py similarity index 100% rename from tests/unit/instance_ha/v1/test_host.py rename to openstack/tests/unit/instance_ha/v1/test_host.py diff --git a/tests/unit/instance_ha/v1/test_notification.py b/openstack/tests/unit/instance_ha/v1/test_notification.py similarity index 100% rename from tests/unit/instance_ha/v1/test_notification.py rename to openstack/tests/unit/instance_ha/v1/test_notification.py diff --git a/tests/unit/instance_ha/v1/test_proxy.py b/openstack/tests/unit/instance_ha/v1/test_proxy.py similarity index 100% rename from tests/unit/instance_ha/v1/test_proxy.py rename to openstack/tests/unit/instance_ha/v1/test_proxy.py diff --git a/tests/unit/instance_ha/v1/test_segment.py b/openstack/tests/unit/instance_ha/v1/test_segment.py similarity index 100% rename from tests/unit/instance_ha/v1/test_segment.py rename to openstack/tests/unit/instance_ha/v1/test_segment.py diff --git a/tests/unit/instance_ha/v1/test_vmove.py b/openstack/tests/unit/instance_ha/v1/test_vmove.py similarity index 100% rename from tests/unit/instance_ha/v1/test_vmove.py rename to openstack/tests/unit/instance_ha/v1/test_vmove.py diff --git a/tests/unit/object_store/v1/__init__.py b/openstack/tests/unit/key_manager/__init__.py similarity index 100% rename from tests/unit/object_store/v1/__init__.py rename to openstack/tests/unit/key_manager/__init__.py diff --git a/tests/unit/key_manager/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/key_manager/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/key_manager/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/key_manager/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/orchestration/__init__.py b/openstack/tests/unit/key_manager/v1/__init__.py similarity index 100% rename from tests/unit/orchestration/__init__.py rename to openstack/tests/unit/key_manager/v1/__init__.py diff --git a/tests/unit/key_manager/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/key_manager/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/key_manager/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/key_manager/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/key_manager/v1/__pycache__/test_container.cpython-310.pyc b/openstack/tests/unit/key_manager/v1/__pycache__/test_container.cpython-310.pyc similarity index 100% rename from tests/unit/key_manager/v1/__pycache__/test_container.cpython-310.pyc rename to openstack/tests/unit/key_manager/v1/__pycache__/test_container.cpython-310.pyc diff --git a/tests/unit/key_manager/v1/__pycache__/test_order.cpython-310.pyc b/openstack/tests/unit/key_manager/v1/__pycache__/test_order.cpython-310.pyc similarity index 100% rename from tests/unit/key_manager/v1/__pycache__/test_order.cpython-310.pyc rename to openstack/tests/unit/key_manager/v1/__pycache__/test_order.cpython-310.pyc diff --git a/tests/unit/key_manager/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/key_manager/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/key_manager/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/key_manager/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/key_manager/v1/__pycache__/test_secret.cpython-310.pyc b/openstack/tests/unit/key_manager/v1/__pycache__/test_secret.cpython-310.pyc similarity index 100% rename from tests/unit/key_manager/v1/__pycache__/test_secret.cpython-310.pyc rename to openstack/tests/unit/key_manager/v1/__pycache__/test_secret.cpython-310.pyc diff --git a/tests/unit/key_manager/v1/test_container.py b/openstack/tests/unit/key_manager/v1/test_container.py similarity index 100% rename from tests/unit/key_manager/v1/test_container.py rename to openstack/tests/unit/key_manager/v1/test_container.py diff --git a/tests/unit/key_manager/v1/test_order.py b/openstack/tests/unit/key_manager/v1/test_order.py similarity index 100% rename from tests/unit/key_manager/v1/test_order.py rename to openstack/tests/unit/key_manager/v1/test_order.py diff --git a/tests/unit/key_manager/v1/test_proxy.py b/openstack/tests/unit/key_manager/v1/test_proxy.py similarity index 100% rename from tests/unit/key_manager/v1/test_proxy.py rename to openstack/tests/unit/key_manager/v1/test_proxy.py diff --git a/tests/unit/key_manager/v1/test_secret.py b/openstack/tests/unit/key_manager/v1/test_secret.py similarity index 100% rename from tests/unit/key_manager/v1/test_secret.py rename to openstack/tests/unit/key_manager/v1/test_secret.py diff --git a/tests/unit/orchestration/v1/__init__.py b/openstack/tests/unit/load_balancer/__init__.py similarity index 100% rename from tests/unit/orchestration/v1/__init__.py rename to openstack/tests/unit/load_balancer/__init__.py diff --git a/tests/unit/load_balancer/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_amphora.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_amphora.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_amphora.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_amphora.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_availability_zone.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_availability_zone.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_availability_zone.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_availability_zone.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_availability_zone_profile.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_availability_zone_profile.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_availability_zone_profile.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_availability_zone_profile.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_flavor.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_flavor.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_flavor.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_flavor.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_flavor_profile.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_flavor_profile.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_flavor_profile.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_flavor_profile.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_health_monitor.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_health_monitor.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_health_monitor.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_health_monitor.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_l7policy.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_l7policy.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_l7policy.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_l7policy.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_l7rule.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_l7rule.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_l7rule.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_l7rule.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_listener.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_listener.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_listener.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_listener.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_load_balancer.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_load_balancer.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_load_balancer.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_load_balancer.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_member.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_member.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_member.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_member.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_pool.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_pool.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_pool.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_pool.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_provider.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_provider.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_provider.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_provider.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_quota.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_quota.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_quota.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_quota.cpython-310.pyc diff --git a/tests/unit/load_balancer/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/load_balancer/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/load_balancer/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/load_balancer/test_amphora.py b/openstack/tests/unit/load_balancer/test_amphora.py similarity index 100% rename from tests/unit/load_balancer/test_amphora.py rename to openstack/tests/unit/load_balancer/test_amphora.py diff --git a/tests/unit/load_balancer/test_availability_zone.py b/openstack/tests/unit/load_balancer/test_availability_zone.py similarity index 100% rename from tests/unit/load_balancer/test_availability_zone.py rename to openstack/tests/unit/load_balancer/test_availability_zone.py diff --git a/tests/unit/load_balancer/test_availability_zone_profile.py b/openstack/tests/unit/load_balancer/test_availability_zone_profile.py similarity index 100% rename from tests/unit/load_balancer/test_availability_zone_profile.py rename to openstack/tests/unit/load_balancer/test_availability_zone_profile.py diff --git a/tests/unit/load_balancer/test_flavor.py b/openstack/tests/unit/load_balancer/test_flavor.py similarity index 100% rename from tests/unit/load_balancer/test_flavor.py rename to openstack/tests/unit/load_balancer/test_flavor.py diff --git a/tests/unit/load_balancer/test_flavor_profile.py b/openstack/tests/unit/load_balancer/test_flavor_profile.py similarity index 100% rename from tests/unit/load_balancer/test_flavor_profile.py rename to openstack/tests/unit/load_balancer/test_flavor_profile.py diff --git a/tests/unit/load_balancer/test_health_monitor.py b/openstack/tests/unit/load_balancer/test_health_monitor.py similarity index 100% rename from tests/unit/load_balancer/test_health_monitor.py rename to openstack/tests/unit/load_balancer/test_health_monitor.py diff --git a/tests/unit/load_balancer/test_l7policy.py b/openstack/tests/unit/load_balancer/test_l7policy.py similarity index 100% rename from tests/unit/load_balancer/test_l7policy.py rename to openstack/tests/unit/load_balancer/test_l7policy.py diff --git a/tests/unit/load_balancer/test_l7rule.py b/openstack/tests/unit/load_balancer/test_l7rule.py similarity index 100% rename from tests/unit/load_balancer/test_l7rule.py rename to openstack/tests/unit/load_balancer/test_l7rule.py diff --git a/tests/unit/load_balancer/test_listener.py b/openstack/tests/unit/load_balancer/test_listener.py similarity index 100% rename from tests/unit/load_balancer/test_listener.py rename to openstack/tests/unit/load_balancer/test_listener.py diff --git a/tests/unit/load_balancer/test_load_balancer.py b/openstack/tests/unit/load_balancer/test_load_balancer.py similarity index 100% rename from tests/unit/load_balancer/test_load_balancer.py rename to openstack/tests/unit/load_balancer/test_load_balancer.py diff --git a/tests/unit/load_balancer/test_member.py b/openstack/tests/unit/load_balancer/test_member.py similarity index 100% rename from tests/unit/load_balancer/test_member.py rename to openstack/tests/unit/load_balancer/test_member.py diff --git a/tests/unit/load_balancer/test_pool.py b/openstack/tests/unit/load_balancer/test_pool.py similarity index 100% rename from tests/unit/load_balancer/test_pool.py rename to openstack/tests/unit/load_balancer/test_pool.py diff --git a/tests/unit/load_balancer/test_provider.py b/openstack/tests/unit/load_balancer/test_provider.py similarity index 100% rename from tests/unit/load_balancer/test_provider.py rename to openstack/tests/unit/load_balancer/test_provider.py diff --git a/tests/unit/load_balancer/test_quota.py b/openstack/tests/unit/load_balancer/test_quota.py similarity index 100% rename from tests/unit/load_balancer/test_quota.py rename to openstack/tests/unit/load_balancer/test_quota.py diff --git a/tests/unit/load_balancer/test_version.py b/openstack/tests/unit/load_balancer/test_version.py similarity index 100% rename from tests/unit/load_balancer/test_version.py rename to openstack/tests/unit/load_balancer/test_version.py diff --git a/tests/unit/placement/__init__.py b/openstack/tests/unit/load_balancer/v2/__init__.py similarity index 100% rename from tests/unit/placement/__init__.py rename to openstack/tests/unit/load_balancer/v2/__init__.py diff --git a/tests/unit/load_balancer/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/load_balancer/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/load_balancer/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/load_balancer/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/load_balancer/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/load_balancer/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/load_balancer/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/load_balancer/v2/test_proxy.py b/openstack/tests/unit/load_balancer/v2/test_proxy.py similarity index 100% rename from tests/unit/load_balancer/v2/test_proxy.py rename to openstack/tests/unit/load_balancer/v2/test_proxy.py diff --git a/tests/unit/placement/v1/__init__.py b/openstack/tests/unit/message/__init__.py similarity index 100% rename from tests/unit/placement/v1/__init__.py rename to openstack/tests/unit/message/__init__.py diff --git a/tests/unit/message/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/message/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/message/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/message/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/message/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/message/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/message/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/message/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/message/test_version.py b/openstack/tests/unit/message/test_version.py similarity index 100% rename from tests/unit/message/test_version.py rename to openstack/tests/unit/message/test_version.py diff --git a/tests/unit/shared_file_system/__init__.py b/openstack/tests/unit/message/v2/__init__.py similarity index 100% rename from tests/unit/shared_file_system/__init__.py rename to openstack/tests/unit/message/v2/__init__.py diff --git a/tests/unit/message/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/message/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/message/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/message/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/message/v2/__pycache__/test_claim.cpython-310.pyc b/openstack/tests/unit/message/v2/__pycache__/test_claim.cpython-310.pyc similarity index 100% rename from tests/unit/message/v2/__pycache__/test_claim.cpython-310.pyc rename to openstack/tests/unit/message/v2/__pycache__/test_claim.cpython-310.pyc diff --git a/tests/unit/message/v2/__pycache__/test_message.cpython-310.pyc b/openstack/tests/unit/message/v2/__pycache__/test_message.cpython-310.pyc similarity index 100% rename from tests/unit/message/v2/__pycache__/test_message.cpython-310.pyc rename to openstack/tests/unit/message/v2/__pycache__/test_message.cpython-310.pyc diff --git a/tests/unit/message/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/message/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/message/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/message/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/message/v2/__pycache__/test_queue.cpython-310.pyc b/openstack/tests/unit/message/v2/__pycache__/test_queue.cpython-310.pyc similarity index 100% rename from tests/unit/message/v2/__pycache__/test_queue.cpython-310.pyc rename to openstack/tests/unit/message/v2/__pycache__/test_queue.cpython-310.pyc diff --git a/tests/unit/message/v2/__pycache__/test_subscription.cpython-310.pyc b/openstack/tests/unit/message/v2/__pycache__/test_subscription.cpython-310.pyc similarity index 100% rename from tests/unit/message/v2/__pycache__/test_subscription.cpython-310.pyc rename to openstack/tests/unit/message/v2/__pycache__/test_subscription.cpython-310.pyc diff --git a/tests/unit/message/v2/test_claim.py b/openstack/tests/unit/message/v2/test_claim.py similarity index 100% rename from tests/unit/message/v2/test_claim.py rename to openstack/tests/unit/message/v2/test_claim.py diff --git a/tests/unit/message/v2/test_message.py b/openstack/tests/unit/message/v2/test_message.py similarity index 100% rename from tests/unit/message/v2/test_message.py rename to openstack/tests/unit/message/v2/test_message.py diff --git a/tests/unit/message/v2/test_proxy.py b/openstack/tests/unit/message/v2/test_proxy.py similarity index 100% rename from tests/unit/message/v2/test_proxy.py rename to openstack/tests/unit/message/v2/test_proxy.py diff --git a/tests/unit/message/v2/test_queue.py b/openstack/tests/unit/message/v2/test_queue.py similarity index 100% rename from tests/unit/message/v2/test_queue.py rename to openstack/tests/unit/message/v2/test_queue.py diff --git a/tests/unit/message/v2/test_subscription.py b/openstack/tests/unit/message/v2/test_subscription.py similarity index 100% rename from tests/unit/message/v2/test_subscription.py rename to openstack/tests/unit/message/v2/test_subscription.py diff --git a/tests/unit/shared_file_system/v2/__init__.py b/openstack/tests/unit/network/__init__.py similarity index 100% rename from tests/unit/shared_file_system/v2/__init__.py rename to openstack/tests/unit/network/__init__.py diff --git a/tests/unit/network/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/network/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/network/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/network/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/network/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/network/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/network/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/network/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/network/test_version.py b/openstack/tests/unit/network/test_version.py similarity index 100% rename from tests/unit/network/test_version.py rename to openstack/tests/unit/network/test_version.py diff --git a/tests/unit/workflow/__init__.py b/openstack/tests/unit/network/v2/__init__.py similarity index 100% rename from tests/unit/workflow/__init__.py rename to openstack/tests/unit/network/v2/__init__.py diff --git a/tests/unit/network/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_address_group.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_address_group.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_address_group.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_address_group.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_address_scope.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_address_scope.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_address_scope.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_address_scope.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_agent.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_agent.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_agent.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_agent.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_auto_allocated_topology.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_availability_zone.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_availability_zone.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_availability_zone.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_availability_zone.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_bgp_peer.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_bgp_peer.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_bgp_peer.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_bgp_peer.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_bgp_speaker.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_bgp_speaker.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_bgp_speaker.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_bgp_speaker.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_bgpvpn.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_default_security_group_rule.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_extension.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_extension.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_extension.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_extension.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_firewall_group.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_firewall_group.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_firewall_group.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_firewall_group.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_firewall_policy.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_firewall_rule.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_flavor.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_flavor.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_flavor.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_flavor.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_floating_ip.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_floating_ip.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_floating_ip.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_floating_ip.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_health_monitor.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_health_monitor.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_health_monitor.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_health_monitor.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_l3_conntrack_helper.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_listener.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_listener.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_listener.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_listener.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_load_balancer.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_load_balancer.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_load_balancer.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_load_balancer.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_local_ip.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_local_ip.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_local_ip.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_local_ip.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_local_ip_association.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_metering_label.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_metering_label.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_metering_label.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_metering_label.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_metering_label_rule.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_metering_label_rule.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_metering_label_rule.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_metering_label_rule.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_ndp_proxy.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_network.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_network.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_network.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_network.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_network_ip_availability.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_network_segment_range.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_pool.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_pool.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_pool.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_pool.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_pool_member.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_pool_member.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_pool_member.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_pool_member.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_port.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_port.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_port.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_port.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_port_forwarding.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_qos_bandwidth_limit_rule.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_qos_dscp_marking_rule.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_qos_minimum_bandwidth_rule.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_qos_minimum_packet_rate_rule.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_qos_policy.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_qos_policy.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_qos_policy.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_qos_policy.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_qos_rule_type.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_quota.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_quota.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_quota.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_quota.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_rbac_policy.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_router.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_router.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_router.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_router.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_security_group.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_security_group.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_security_group.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_security_group.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_security_group_rule.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_segment.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_segment.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_segment.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_segment.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_service_profile.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_service_profile.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_service_profile.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_service_profile.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_service_provider.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_service_provider.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_service_provider.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_service_provider.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_sfc_flow_classifier.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_sfc_flow_classifier.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_sfc_flow_classifier.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_sfc_flow_classifier.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_sfc_port_chain.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_sfc_port_chain.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_sfc_port_chain.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_sfc_port_chain.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_sfc_port_pair.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_sfc_port_pair.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_sfc_port_pair.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_sfc_port_pair.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_sfc_port_pair_group.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_sfc_port_pair_group.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_sfc_port_pair_group.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_sfc_port_pair_group.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_sfc_service_graph.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_sfc_service_graph.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_sfc_service_graph.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_sfc_service_graph.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_subnet.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_subnet.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_subnet.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_subnet.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_subnet_pool.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_tap_flow.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_tap_flow.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_tap_flow.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_tap_flow.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_tap_service.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_tap_service.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_tap_service.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_tap_service.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_trunk.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_trunk.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_trunk.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_trunk.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_vpn_endpoint_group.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_vpn_endpoint_group.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_vpn_endpoint_group.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_vpn_endpoint_group.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_vpn_ikepolicy.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_vpn_ikepolicy.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_vpn_ikepolicy.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_vpn_ikepolicy.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_vpn_ipsec_site_connection.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_vpn_ipsec_site_connection.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_vpn_ipsec_site_connection.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_vpn_ipsec_site_connection.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_vpn_ipsecpolicy.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_vpn_ipsecpolicy.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_vpn_ipsecpolicy.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_vpn_ipsecpolicy.cpython-310.pyc diff --git a/tests/unit/network/v2/__pycache__/test_vpn_service.cpython-310.pyc b/openstack/tests/unit/network/v2/__pycache__/test_vpn_service.cpython-310.pyc similarity index 100% rename from tests/unit/network/v2/__pycache__/test_vpn_service.cpython-310.pyc rename to openstack/tests/unit/network/v2/__pycache__/test_vpn_service.cpython-310.pyc diff --git a/tests/unit/network/v2/test_address_group.py b/openstack/tests/unit/network/v2/test_address_group.py similarity index 100% rename from tests/unit/network/v2/test_address_group.py rename to openstack/tests/unit/network/v2/test_address_group.py diff --git a/tests/unit/network/v2/test_address_scope.py b/openstack/tests/unit/network/v2/test_address_scope.py similarity index 100% rename from tests/unit/network/v2/test_address_scope.py rename to openstack/tests/unit/network/v2/test_address_scope.py diff --git a/tests/unit/network/v2/test_agent.py b/openstack/tests/unit/network/v2/test_agent.py similarity index 100% rename from tests/unit/network/v2/test_agent.py rename to openstack/tests/unit/network/v2/test_agent.py diff --git a/tests/unit/network/v2/test_auto_allocated_topology.py b/openstack/tests/unit/network/v2/test_auto_allocated_topology.py similarity index 100% rename from tests/unit/network/v2/test_auto_allocated_topology.py rename to openstack/tests/unit/network/v2/test_auto_allocated_topology.py diff --git a/tests/unit/network/v2/test_availability_zone.py b/openstack/tests/unit/network/v2/test_availability_zone.py similarity index 100% rename from tests/unit/network/v2/test_availability_zone.py rename to openstack/tests/unit/network/v2/test_availability_zone.py diff --git a/tests/unit/network/v2/test_bgp_peer.py b/openstack/tests/unit/network/v2/test_bgp_peer.py similarity index 100% rename from tests/unit/network/v2/test_bgp_peer.py rename to openstack/tests/unit/network/v2/test_bgp_peer.py diff --git a/tests/unit/network/v2/test_bgp_speaker.py b/openstack/tests/unit/network/v2/test_bgp_speaker.py similarity index 100% rename from tests/unit/network/v2/test_bgp_speaker.py rename to openstack/tests/unit/network/v2/test_bgp_speaker.py diff --git a/tests/unit/network/v2/test_bgpvpn.py b/openstack/tests/unit/network/v2/test_bgpvpn.py similarity index 100% rename from tests/unit/network/v2/test_bgpvpn.py rename to openstack/tests/unit/network/v2/test_bgpvpn.py diff --git a/tests/unit/network/v2/test_default_security_group_rule.py b/openstack/tests/unit/network/v2/test_default_security_group_rule.py similarity index 100% rename from tests/unit/network/v2/test_default_security_group_rule.py rename to openstack/tests/unit/network/v2/test_default_security_group_rule.py diff --git a/tests/unit/network/v2/test_extension.py b/openstack/tests/unit/network/v2/test_extension.py similarity index 100% rename from tests/unit/network/v2/test_extension.py rename to openstack/tests/unit/network/v2/test_extension.py diff --git a/tests/unit/network/v2/test_firewall_group.py b/openstack/tests/unit/network/v2/test_firewall_group.py similarity index 100% rename from tests/unit/network/v2/test_firewall_group.py rename to openstack/tests/unit/network/v2/test_firewall_group.py diff --git a/tests/unit/network/v2/test_firewall_policy.py b/openstack/tests/unit/network/v2/test_firewall_policy.py similarity index 100% rename from tests/unit/network/v2/test_firewall_policy.py rename to openstack/tests/unit/network/v2/test_firewall_policy.py diff --git a/tests/unit/network/v2/test_firewall_rule.py b/openstack/tests/unit/network/v2/test_firewall_rule.py similarity index 100% rename from tests/unit/network/v2/test_firewall_rule.py rename to openstack/tests/unit/network/v2/test_firewall_rule.py diff --git a/tests/unit/network/v2/test_flavor.py b/openstack/tests/unit/network/v2/test_flavor.py similarity index 100% rename from tests/unit/network/v2/test_flavor.py rename to openstack/tests/unit/network/v2/test_flavor.py diff --git a/tests/unit/network/v2/test_floating_ip.py b/openstack/tests/unit/network/v2/test_floating_ip.py similarity index 100% rename from tests/unit/network/v2/test_floating_ip.py rename to openstack/tests/unit/network/v2/test_floating_ip.py diff --git a/tests/unit/network/v2/test_health_monitor.py b/openstack/tests/unit/network/v2/test_health_monitor.py similarity index 100% rename from tests/unit/network/v2/test_health_monitor.py rename to openstack/tests/unit/network/v2/test_health_monitor.py diff --git a/tests/unit/network/v2/test_l3_conntrack_helper.py b/openstack/tests/unit/network/v2/test_l3_conntrack_helper.py similarity index 100% rename from tests/unit/network/v2/test_l3_conntrack_helper.py rename to openstack/tests/unit/network/v2/test_l3_conntrack_helper.py diff --git a/tests/unit/network/v2/test_listener.py b/openstack/tests/unit/network/v2/test_listener.py similarity index 100% rename from tests/unit/network/v2/test_listener.py rename to openstack/tests/unit/network/v2/test_listener.py diff --git a/tests/unit/network/v2/test_load_balancer.py b/openstack/tests/unit/network/v2/test_load_balancer.py similarity index 100% rename from tests/unit/network/v2/test_load_balancer.py rename to openstack/tests/unit/network/v2/test_load_balancer.py diff --git a/tests/unit/network/v2/test_local_ip.py b/openstack/tests/unit/network/v2/test_local_ip.py similarity index 100% rename from tests/unit/network/v2/test_local_ip.py rename to openstack/tests/unit/network/v2/test_local_ip.py diff --git a/tests/unit/network/v2/test_local_ip_association.py b/openstack/tests/unit/network/v2/test_local_ip_association.py similarity index 100% rename from tests/unit/network/v2/test_local_ip_association.py rename to openstack/tests/unit/network/v2/test_local_ip_association.py diff --git a/tests/unit/network/v2/test_metering_label.py b/openstack/tests/unit/network/v2/test_metering_label.py similarity index 100% rename from tests/unit/network/v2/test_metering_label.py rename to openstack/tests/unit/network/v2/test_metering_label.py diff --git a/tests/unit/network/v2/test_metering_label_rule.py b/openstack/tests/unit/network/v2/test_metering_label_rule.py similarity index 100% rename from tests/unit/network/v2/test_metering_label_rule.py rename to openstack/tests/unit/network/v2/test_metering_label_rule.py diff --git a/tests/unit/network/v2/test_ndp_proxy.py b/openstack/tests/unit/network/v2/test_ndp_proxy.py similarity index 100% rename from tests/unit/network/v2/test_ndp_proxy.py rename to openstack/tests/unit/network/v2/test_ndp_proxy.py diff --git a/tests/unit/network/v2/test_network.py b/openstack/tests/unit/network/v2/test_network.py similarity index 100% rename from tests/unit/network/v2/test_network.py rename to openstack/tests/unit/network/v2/test_network.py diff --git a/tests/unit/network/v2/test_network_ip_availability.py b/openstack/tests/unit/network/v2/test_network_ip_availability.py similarity index 100% rename from tests/unit/network/v2/test_network_ip_availability.py rename to openstack/tests/unit/network/v2/test_network_ip_availability.py diff --git a/tests/unit/network/v2/test_network_segment_range.py b/openstack/tests/unit/network/v2/test_network_segment_range.py similarity index 100% rename from tests/unit/network/v2/test_network_segment_range.py rename to openstack/tests/unit/network/v2/test_network_segment_range.py diff --git a/tests/unit/network/v2/test_pool.py b/openstack/tests/unit/network/v2/test_pool.py similarity index 100% rename from tests/unit/network/v2/test_pool.py rename to openstack/tests/unit/network/v2/test_pool.py diff --git a/tests/unit/network/v2/test_pool_member.py b/openstack/tests/unit/network/v2/test_pool_member.py similarity index 100% rename from tests/unit/network/v2/test_pool_member.py rename to openstack/tests/unit/network/v2/test_pool_member.py diff --git a/tests/unit/network/v2/test_port.py b/openstack/tests/unit/network/v2/test_port.py similarity index 100% rename from tests/unit/network/v2/test_port.py rename to openstack/tests/unit/network/v2/test_port.py diff --git a/tests/unit/network/v2/test_port_forwarding.py b/openstack/tests/unit/network/v2/test_port_forwarding.py similarity index 100% rename from tests/unit/network/v2/test_port_forwarding.py rename to openstack/tests/unit/network/v2/test_port_forwarding.py diff --git a/tests/unit/network/v2/test_proxy.py b/openstack/tests/unit/network/v2/test_proxy.py similarity index 100% rename from tests/unit/network/v2/test_proxy.py rename to openstack/tests/unit/network/v2/test_proxy.py diff --git a/tests/unit/network/v2/test_qos_bandwidth_limit_rule.py b/openstack/tests/unit/network/v2/test_qos_bandwidth_limit_rule.py similarity index 100% rename from tests/unit/network/v2/test_qos_bandwidth_limit_rule.py rename to openstack/tests/unit/network/v2/test_qos_bandwidth_limit_rule.py diff --git a/tests/unit/network/v2/test_qos_dscp_marking_rule.py b/openstack/tests/unit/network/v2/test_qos_dscp_marking_rule.py similarity index 100% rename from tests/unit/network/v2/test_qos_dscp_marking_rule.py rename to openstack/tests/unit/network/v2/test_qos_dscp_marking_rule.py diff --git a/tests/unit/network/v2/test_qos_minimum_bandwidth_rule.py b/openstack/tests/unit/network/v2/test_qos_minimum_bandwidth_rule.py similarity index 100% rename from tests/unit/network/v2/test_qos_minimum_bandwidth_rule.py rename to openstack/tests/unit/network/v2/test_qos_minimum_bandwidth_rule.py diff --git a/tests/unit/network/v2/test_qos_minimum_packet_rate_rule.py b/openstack/tests/unit/network/v2/test_qos_minimum_packet_rate_rule.py similarity index 100% rename from tests/unit/network/v2/test_qos_minimum_packet_rate_rule.py rename to openstack/tests/unit/network/v2/test_qos_minimum_packet_rate_rule.py diff --git a/tests/unit/network/v2/test_qos_policy.py b/openstack/tests/unit/network/v2/test_qos_policy.py similarity index 100% rename from tests/unit/network/v2/test_qos_policy.py rename to openstack/tests/unit/network/v2/test_qos_policy.py diff --git a/tests/unit/network/v2/test_qos_rule_type.py b/openstack/tests/unit/network/v2/test_qos_rule_type.py similarity index 100% rename from tests/unit/network/v2/test_qos_rule_type.py rename to openstack/tests/unit/network/v2/test_qos_rule_type.py diff --git a/tests/unit/network/v2/test_quota.py b/openstack/tests/unit/network/v2/test_quota.py similarity index 100% rename from tests/unit/network/v2/test_quota.py rename to openstack/tests/unit/network/v2/test_quota.py diff --git a/tests/unit/network/v2/test_rbac_policy.py b/openstack/tests/unit/network/v2/test_rbac_policy.py similarity index 100% rename from tests/unit/network/v2/test_rbac_policy.py rename to openstack/tests/unit/network/v2/test_rbac_policy.py diff --git a/tests/unit/network/v2/test_router.py b/openstack/tests/unit/network/v2/test_router.py similarity index 100% rename from tests/unit/network/v2/test_router.py rename to openstack/tests/unit/network/v2/test_router.py diff --git a/tests/unit/network/v2/test_security_group.py b/openstack/tests/unit/network/v2/test_security_group.py similarity index 100% rename from tests/unit/network/v2/test_security_group.py rename to openstack/tests/unit/network/v2/test_security_group.py diff --git a/tests/unit/network/v2/test_security_group_rule.py b/openstack/tests/unit/network/v2/test_security_group_rule.py similarity index 100% rename from tests/unit/network/v2/test_security_group_rule.py rename to openstack/tests/unit/network/v2/test_security_group_rule.py diff --git a/tests/unit/network/v2/test_segment.py b/openstack/tests/unit/network/v2/test_segment.py similarity index 100% rename from tests/unit/network/v2/test_segment.py rename to openstack/tests/unit/network/v2/test_segment.py diff --git a/tests/unit/network/v2/test_service_profile.py b/openstack/tests/unit/network/v2/test_service_profile.py similarity index 100% rename from tests/unit/network/v2/test_service_profile.py rename to openstack/tests/unit/network/v2/test_service_profile.py diff --git a/tests/unit/network/v2/test_service_provider.py b/openstack/tests/unit/network/v2/test_service_provider.py similarity index 100% rename from tests/unit/network/v2/test_service_provider.py rename to openstack/tests/unit/network/v2/test_service_provider.py diff --git a/tests/unit/network/v2/test_sfc_flow_classifier.py b/openstack/tests/unit/network/v2/test_sfc_flow_classifier.py similarity index 100% rename from tests/unit/network/v2/test_sfc_flow_classifier.py rename to openstack/tests/unit/network/v2/test_sfc_flow_classifier.py diff --git a/tests/unit/network/v2/test_sfc_port_chain.py b/openstack/tests/unit/network/v2/test_sfc_port_chain.py similarity index 100% rename from tests/unit/network/v2/test_sfc_port_chain.py rename to openstack/tests/unit/network/v2/test_sfc_port_chain.py diff --git a/tests/unit/network/v2/test_sfc_port_pair.py b/openstack/tests/unit/network/v2/test_sfc_port_pair.py similarity index 100% rename from tests/unit/network/v2/test_sfc_port_pair.py rename to openstack/tests/unit/network/v2/test_sfc_port_pair.py diff --git a/tests/unit/network/v2/test_sfc_port_pair_group.py b/openstack/tests/unit/network/v2/test_sfc_port_pair_group.py similarity index 100% rename from tests/unit/network/v2/test_sfc_port_pair_group.py rename to openstack/tests/unit/network/v2/test_sfc_port_pair_group.py diff --git a/tests/unit/network/v2/test_sfc_service_graph.py b/openstack/tests/unit/network/v2/test_sfc_service_graph.py similarity index 100% rename from tests/unit/network/v2/test_sfc_service_graph.py rename to openstack/tests/unit/network/v2/test_sfc_service_graph.py diff --git a/tests/unit/network/v2/test_subnet.py b/openstack/tests/unit/network/v2/test_subnet.py similarity index 100% rename from tests/unit/network/v2/test_subnet.py rename to openstack/tests/unit/network/v2/test_subnet.py diff --git a/tests/unit/network/v2/test_subnet_pool.py b/openstack/tests/unit/network/v2/test_subnet_pool.py similarity index 100% rename from tests/unit/network/v2/test_subnet_pool.py rename to openstack/tests/unit/network/v2/test_subnet_pool.py diff --git a/tests/unit/network/v2/test_tap_flow.py b/openstack/tests/unit/network/v2/test_tap_flow.py similarity index 100% rename from tests/unit/network/v2/test_tap_flow.py rename to openstack/tests/unit/network/v2/test_tap_flow.py diff --git a/tests/unit/network/v2/test_tap_service.py b/openstack/tests/unit/network/v2/test_tap_service.py similarity index 100% rename from tests/unit/network/v2/test_tap_service.py rename to openstack/tests/unit/network/v2/test_tap_service.py diff --git a/tests/unit/network/v2/test_trunk.py b/openstack/tests/unit/network/v2/test_trunk.py similarity index 100% rename from tests/unit/network/v2/test_trunk.py rename to openstack/tests/unit/network/v2/test_trunk.py diff --git a/tests/unit/network/v2/test_vpn_endpoint_group.py b/openstack/tests/unit/network/v2/test_vpn_endpoint_group.py similarity index 100% rename from tests/unit/network/v2/test_vpn_endpoint_group.py rename to openstack/tests/unit/network/v2/test_vpn_endpoint_group.py diff --git a/tests/unit/network/v2/test_vpn_ikepolicy.py b/openstack/tests/unit/network/v2/test_vpn_ikepolicy.py similarity index 100% rename from tests/unit/network/v2/test_vpn_ikepolicy.py rename to openstack/tests/unit/network/v2/test_vpn_ikepolicy.py diff --git a/tests/unit/network/v2/test_vpn_ipsec_site_connection.py b/openstack/tests/unit/network/v2/test_vpn_ipsec_site_connection.py similarity index 100% rename from tests/unit/network/v2/test_vpn_ipsec_site_connection.py rename to openstack/tests/unit/network/v2/test_vpn_ipsec_site_connection.py diff --git a/tests/unit/network/v2/test_vpn_ipsecpolicy.py b/openstack/tests/unit/network/v2/test_vpn_ipsecpolicy.py similarity index 100% rename from tests/unit/network/v2/test_vpn_ipsecpolicy.py rename to openstack/tests/unit/network/v2/test_vpn_ipsecpolicy.py diff --git a/tests/unit/network/v2/test_vpn_service.py b/openstack/tests/unit/network/v2/test_vpn_service.py similarity index 100% rename from tests/unit/network/v2/test_vpn_service.py rename to openstack/tests/unit/network/v2/test_vpn_service.py diff --git a/tests/unit/workflow/v2/__init__.py b/openstack/tests/unit/object_store/__init__.py similarity index 100% rename from tests/unit/workflow/v2/__init__.py rename to openstack/tests/unit/object_store/__init__.py diff --git a/tests/unit/object_store/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/object_store/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/object_store/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/object_store/__pycache__/__init__.cpython-310.pyc diff --git a/workflow/__init__.py b/openstack/tests/unit/object_store/v1/__init__.py similarity index 100% rename from workflow/__init__.py rename to openstack/tests/unit/object_store/v1/__init__.py diff --git a/tests/unit/object_store/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/object_store/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/object_store/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/object_store/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/object_store/v1/__pycache__/test_account.cpython-310.pyc b/openstack/tests/unit/object_store/v1/__pycache__/test_account.cpython-310.pyc similarity index 100% rename from tests/unit/object_store/v1/__pycache__/test_account.cpython-310.pyc rename to openstack/tests/unit/object_store/v1/__pycache__/test_account.cpython-310.pyc diff --git a/tests/unit/object_store/v1/__pycache__/test_container.cpython-310.pyc b/openstack/tests/unit/object_store/v1/__pycache__/test_container.cpython-310.pyc similarity index 100% rename from tests/unit/object_store/v1/__pycache__/test_container.cpython-310.pyc rename to openstack/tests/unit/object_store/v1/__pycache__/test_container.cpython-310.pyc diff --git a/tests/unit/object_store/v1/__pycache__/test_info.cpython-310.pyc b/openstack/tests/unit/object_store/v1/__pycache__/test_info.cpython-310.pyc similarity index 100% rename from tests/unit/object_store/v1/__pycache__/test_info.cpython-310.pyc rename to openstack/tests/unit/object_store/v1/__pycache__/test_info.cpython-310.pyc diff --git a/tests/unit/object_store/v1/__pycache__/test_obj.cpython-310.pyc b/openstack/tests/unit/object_store/v1/__pycache__/test_obj.cpython-310.pyc similarity index 100% rename from tests/unit/object_store/v1/__pycache__/test_obj.cpython-310.pyc rename to openstack/tests/unit/object_store/v1/__pycache__/test_obj.cpython-310.pyc diff --git a/tests/unit/object_store/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/object_store/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/object_store/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/object_store/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/object_store/v1/test_account.py b/openstack/tests/unit/object_store/v1/test_account.py similarity index 100% rename from tests/unit/object_store/v1/test_account.py rename to openstack/tests/unit/object_store/v1/test_account.py diff --git a/tests/unit/object_store/v1/test_container.py b/openstack/tests/unit/object_store/v1/test_container.py similarity index 100% rename from tests/unit/object_store/v1/test_container.py rename to openstack/tests/unit/object_store/v1/test_container.py diff --git a/tests/unit/object_store/v1/test_info.py b/openstack/tests/unit/object_store/v1/test_info.py similarity index 100% rename from tests/unit/object_store/v1/test_info.py rename to openstack/tests/unit/object_store/v1/test_info.py diff --git a/tests/unit/object_store/v1/test_obj.py b/openstack/tests/unit/object_store/v1/test_obj.py similarity index 100% rename from tests/unit/object_store/v1/test_obj.py rename to openstack/tests/unit/object_store/v1/test_obj.py diff --git a/tests/unit/object_store/v1/test_proxy.py b/openstack/tests/unit/object_store/v1/test_proxy.py similarity index 100% rename from tests/unit/object_store/v1/test_proxy.py rename to openstack/tests/unit/object_store/v1/test_proxy.py diff --git a/workflow/v2/__init__.py b/openstack/tests/unit/orchestration/__init__.py similarity index 100% rename from workflow/v2/__init__.py rename to openstack/tests/unit/orchestration/__init__.py diff --git a/tests/unit/orchestration/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/orchestration/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/orchestration/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/orchestration/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/orchestration/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/orchestration/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/orchestration/test_version.py b/openstack/tests/unit/orchestration/test_version.py similarity index 100% rename from tests/unit/orchestration/test_version.py rename to openstack/tests/unit/orchestration/test_version.py diff --git a/openstack/tests/unit/orchestration/v1/__init__.py b/openstack/tests/unit/orchestration/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/orchestration/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_resource.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_resource.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_resource.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_resource.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_software_config.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_software_config.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_software_config.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_software_config.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_software_deployment.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_software_deployment.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_software_deployment.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_software_deployment.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_stack.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_stack.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_stack.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_stack.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_stack_environment.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_stack_environment.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_stack_environment.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_stack_environment.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_stack_event.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_stack_event.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_stack_event.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_stack_event.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_stack_files.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_stack_files.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_stack_files.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_stack_files.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_stack_template.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_stack_template.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_stack_template.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_stack_template.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/__pycache__/test_template.cpython-310.pyc b/openstack/tests/unit/orchestration/v1/__pycache__/test_template.cpython-310.pyc similarity index 100% rename from tests/unit/orchestration/v1/__pycache__/test_template.cpython-310.pyc rename to openstack/tests/unit/orchestration/v1/__pycache__/test_template.cpython-310.pyc diff --git a/tests/unit/orchestration/v1/hello_world.yaml b/openstack/tests/unit/orchestration/v1/hello_world.yaml similarity index 100% rename from tests/unit/orchestration/v1/hello_world.yaml rename to openstack/tests/unit/orchestration/v1/hello_world.yaml diff --git a/tests/unit/orchestration/v1/helloworld.txt b/openstack/tests/unit/orchestration/v1/helloworld.txt similarity index 100% rename from tests/unit/orchestration/v1/helloworld.txt rename to openstack/tests/unit/orchestration/v1/helloworld.txt diff --git a/tests/unit/orchestration/v1/test_proxy.py b/openstack/tests/unit/orchestration/v1/test_proxy.py similarity index 100% rename from tests/unit/orchestration/v1/test_proxy.py rename to openstack/tests/unit/orchestration/v1/test_proxy.py diff --git a/tests/unit/orchestration/v1/test_resource.py b/openstack/tests/unit/orchestration/v1/test_resource.py similarity index 100% rename from tests/unit/orchestration/v1/test_resource.py rename to openstack/tests/unit/orchestration/v1/test_resource.py diff --git a/tests/unit/orchestration/v1/test_software_config.py b/openstack/tests/unit/orchestration/v1/test_software_config.py similarity index 100% rename from tests/unit/orchestration/v1/test_software_config.py rename to openstack/tests/unit/orchestration/v1/test_software_config.py diff --git a/tests/unit/orchestration/v1/test_software_deployment.py b/openstack/tests/unit/orchestration/v1/test_software_deployment.py similarity index 100% rename from tests/unit/orchestration/v1/test_software_deployment.py rename to openstack/tests/unit/orchestration/v1/test_software_deployment.py diff --git a/tests/unit/orchestration/v1/test_stack.py b/openstack/tests/unit/orchestration/v1/test_stack.py similarity index 100% rename from tests/unit/orchestration/v1/test_stack.py rename to openstack/tests/unit/orchestration/v1/test_stack.py diff --git a/tests/unit/orchestration/v1/test_stack_environment.py b/openstack/tests/unit/orchestration/v1/test_stack_environment.py similarity index 100% rename from tests/unit/orchestration/v1/test_stack_environment.py rename to openstack/tests/unit/orchestration/v1/test_stack_environment.py diff --git a/tests/unit/orchestration/v1/test_stack_event.py b/openstack/tests/unit/orchestration/v1/test_stack_event.py similarity index 100% rename from tests/unit/orchestration/v1/test_stack_event.py rename to openstack/tests/unit/orchestration/v1/test_stack_event.py diff --git a/tests/unit/orchestration/v1/test_stack_files.py b/openstack/tests/unit/orchestration/v1/test_stack_files.py similarity index 100% rename from tests/unit/orchestration/v1/test_stack_files.py rename to openstack/tests/unit/orchestration/v1/test_stack_files.py diff --git a/tests/unit/orchestration/v1/test_stack_template.py b/openstack/tests/unit/orchestration/v1/test_stack_template.py similarity index 100% rename from tests/unit/orchestration/v1/test_stack_template.py rename to openstack/tests/unit/orchestration/v1/test_stack_template.py diff --git a/tests/unit/orchestration/v1/test_template.py b/openstack/tests/unit/orchestration/v1/test_template.py similarity index 100% rename from tests/unit/orchestration/v1/test_template.py rename to openstack/tests/unit/orchestration/v1/test_template.py diff --git a/openstack/tests/unit/placement/__init__.py b/openstack/tests/unit/placement/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/placement/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/placement/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/placement/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/placement/__pycache__/__init__.cpython-310.pyc diff --git a/openstack/tests/unit/placement/v1/__init__.py b/openstack/tests/unit/placement/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/placement/v1/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/placement/v1/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/placement/v1/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/placement/v1/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/placement/v1/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/placement/v1/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/placement/v1/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/placement/v1/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/placement/v1/__pycache__/test_resource_class.cpython-310.pyc b/openstack/tests/unit/placement/v1/__pycache__/test_resource_class.cpython-310.pyc similarity index 100% rename from tests/unit/placement/v1/__pycache__/test_resource_class.cpython-310.pyc rename to openstack/tests/unit/placement/v1/__pycache__/test_resource_class.cpython-310.pyc diff --git a/tests/unit/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc b/openstack/tests/unit/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc similarity index 100% rename from tests/unit/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc rename to openstack/tests/unit/placement/v1/__pycache__/test_resource_provider.cpython-310.pyc diff --git a/tests/unit/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc b/openstack/tests/unit/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc similarity index 100% rename from tests/unit/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc rename to openstack/tests/unit/placement/v1/__pycache__/test_resource_provider_inventory.cpython-310.pyc diff --git a/tests/unit/placement/v1/__pycache__/test_trait.cpython-310.pyc b/openstack/tests/unit/placement/v1/__pycache__/test_trait.cpython-310.pyc similarity index 100% rename from tests/unit/placement/v1/__pycache__/test_trait.cpython-310.pyc rename to openstack/tests/unit/placement/v1/__pycache__/test_trait.cpython-310.pyc diff --git a/tests/unit/placement/v1/test_proxy.py b/openstack/tests/unit/placement/v1/test_proxy.py similarity index 100% rename from tests/unit/placement/v1/test_proxy.py rename to openstack/tests/unit/placement/v1/test_proxy.py diff --git a/tests/unit/placement/v1/test_resource_class.py b/openstack/tests/unit/placement/v1/test_resource_class.py similarity index 100% rename from tests/unit/placement/v1/test_resource_class.py rename to openstack/tests/unit/placement/v1/test_resource_class.py diff --git a/tests/unit/placement/v1/test_resource_provider.py b/openstack/tests/unit/placement/v1/test_resource_provider.py similarity index 100% rename from tests/unit/placement/v1/test_resource_provider.py rename to openstack/tests/unit/placement/v1/test_resource_provider.py diff --git a/tests/unit/placement/v1/test_resource_provider_inventory.py b/openstack/tests/unit/placement/v1/test_resource_provider_inventory.py similarity index 100% rename from tests/unit/placement/v1/test_resource_provider_inventory.py rename to openstack/tests/unit/placement/v1/test_resource_provider_inventory.py diff --git a/tests/unit/placement/v1/test_trait.py b/openstack/tests/unit/placement/v1/test_trait.py similarity index 100% rename from tests/unit/placement/v1/test_trait.py rename to openstack/tests/unit/placement/v1/test_trait.py diff --git a/openstack/tests/unit/shared_file_system/__init__.py b/openstack/tests/unit/shared_file_system/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/shared_file_system/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/shared_file_system/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/__pycache__/__init__.cpython-310.pyc diff --git a/openstack/tests/unit/shared_file_system/v2/__init__.py b/openstack/tests/unit/shared_file_system/v2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/shared_file_system/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_availability_zone.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_availability_zone.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_availability_zone.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_availability_zone.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_limit.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_limit.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_limit.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_limit.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_access_rule.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_access_rule.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_access_rule.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_access_rule.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_export_locations.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_export_locations.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_export_locations.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_export_locations.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_group.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_group.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_group.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_group.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_group_snapshot.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_group_snapshot.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_group_snapshot.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_group_snapshot.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_instance.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_instance.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_instance.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_instance.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_network.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_network.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_network.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_network.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_network_subnet.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_network_subnet.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_network_subnet.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_network_subnet.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_snapshot.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_snapshot.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_snapshot.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_snapshot.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_share_snapshot_instance.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_snapshot_instance.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_share_snapshot_instance.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_share_snapshot_instance.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_storage_pool.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_storage_pool.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_storage_pool.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_storage_pool.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/__pycache__/test_user_message.cpython-310.pyc b/openstack/tests/unit/shared_file_system/v2/__pycache__/test_user_message.cpython-310.pyc similarity index 100% rename from tests/unit/shared_file_system/v2/__pycache__/test_user_message.cpython-310.pyc rename to openstack/tests/unit/shared_file_system/v2/__pycache__/test_user_message.cpython-310.pyc diff --git a/tests/unit/shared_file_system/v2/test_availability_zone.py b/openstack/tests/unit/shared_file_system/v2/test_availability_zone.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_availability_zone.py rename to openstack/tests/unit/shared_file_system/v2/test_availability_zone.py diff --git a/tests/unit/shared_file_system/v2/test_limit.py b/openstack/tests/unit/shared_file_system/v2/test_limit.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_limit.py rename to openstack/tests/unit/shared_file_system/v2/test_limit.py diff --git a/tests/unit/shared_file_system/v2/test_proxy.py b/openstack/tests/unit/shared_file_system/v2/test_proxy.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_proxy.py rename to openstack/tests/unit/shared_file_system/v2/test_proxy.py diff --git a/tests/unit/shared_file_system/v2/test_share.py b/openstack/tests/unit/shared_file_system/v2/test_share.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share.py rename to openstack/tests/unit/shared_file_system/v2/test_share.py diff --git a/tests/unit/shared_file_system/v2/test_share_access_rule.py b/openstack/tests/unit/shared_file_system/v2/test_share_access_rule.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_access_rule.py rename to openstack/tests/unit/shared_file_system/v2/test_share_access_rule.py diff --git a/tests/unit/shared_file_system/v2/test_share_export_locations.py b/openstack/tests/unit/shared_file_system/v2/test_share_export_locations.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_export_locations.py rename to openstack/tests/unit/shared_file_system/v2/test_share_export_locations.py diff --git a/tests/unit/shared_file_system/v2/test_share_group.py b/openstack/tests/unit/shared_file_system/v2/test_share_group.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_group.py rename to openstack/tests/unit/shared_file_system/v2/test_share_group.py diff --git a/tests/unit/shared_file_system/v2/test_share_group_snapshot.py b/openstack/tests/unit/shared_file_system/v2/test_share_group_snapshot.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_group_snapshot.py rename to openstack/tests/unit/shared_file_system/v2/test_share_group_snapshot.py diff --git a/tests/unit/shared_file_system/v2/test_share_instance.py b/openstack/tests/unit/shared_file_system/v2/test_share_instance.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_instance.py rename to openstack/tests/unit/shared_file_system/v2/test_share_instance.py diff --git a/tests/unit/shared_file_system/v2/test_share_network.py b/openstack/tests/unit/shared_file_system/v2/test_share_network.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_network.py rename to openstack/tests/unit/shared_file_system/v2/test_share_network.py diff --git a/tests/unit/shared_file_system/v2/test_share_network_subnet.py b/openstack/tests/unit/shared_file_system/v2/test_share_network_subnet.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_network_subnet.py rename to openstack/tests/unit/shared_file_system/v2/test_share_network_subnet.py diff --git a/tests/unit/shared_file_system/v2/test_share_snapshot.py b/openstack/tests/unit/shared_file_system/v2/test_share_snapshot.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_snapshot.py rename to openstack/tests/unit/shared_file_system/v2/test_share_snapshot.py diff --git a/tests/unit/shared_file_system/v2/test_share_snapshot_instance.py b/openstack/tests/unit/shared_file_system/v2/test_share_snapshot_instance.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_share_snapshot_instance.py rename to openstack/tests/unit/shared_file_system/v2/test_share_snapshot_instance.py diff --git a/tests/unit/shared_file_system/v2/test_storage_pool.py b/openstack/tests/unit/shared_file_system/v2/test_storage_pool.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_storage_pool.py rename to openstack/tests/unit/shared_file_system/v2/test_storage_pool.py diff --git a/tests/unit/shared_file_system/v2/test_user_message.py b/openstack/tests/unit/shared_file_system/v2/test_user_message.py similarity index 100% rename from tests/unit/shared_file_system/v2/test_user_message.py rename to openstack/tests/unit/shared_file_system/v2/test_user_message.py diff --git a/tests/unit/test_connection.py b/openstack/tests/unit/test_connection.py similarity index 100% rename from tests/unit/test_connection.py rename to openstack/tests/unit/test_connection.py diff --git a/tests/unit/test_exceptions.py b/openstack/tests/unit/test_exceptions.py similarity index 100% rename from tests/unit/test_exceptions.py rename to openstack/tests/unit/test_exceptions.py diff --git a/tests/unit/test_fakes.py b/openstack/tests/unit/test_fakes.py similarity index 100% rename from tests/unit/test_fakes.py rename to openstack/tests/unit/test_fakes.py diff --git a/tests/unit/test_format.py b/openstack/tests/unit/test_format.py similarity index 100% rename from tests/unit/test_format.py rename to openstack/tests/unit/test_format.py diff --git a/tests/unit/test_hacking.py b/openstack/tests/unit/test_hacking.py similarity index 100% rename from tests/unit/test_hacking.py rename to openstack/tests/unit/test_hacking.py diff --git a/tests/unit/test_microversions.py b/openstack/tests/unit/test_microversions.py similarity index 100% rename from tests/unit/test_microversions.py rename to openstack/tests/unit/test_microversions.py diff --git a/tests/unit/test_missing_version.py b/openstack/tests/unit/test_missing_version.py similarity index 100% rename from tests/unit/test_missing_version.py rename to openstack/tests/unit/test_missing_version.py diff --git a/tests/unit/test_placement_rest.py b/openstack/tests/unit/test_placement_rest.py similarity index 100% rename from tests/unit/test_placement_rest.py rename to openstack/tests/unit/test_placement_rest.py diff --git a/tests/unit/test_proxy.py b/openstack/tests/unit/test_proxy.py similarity index 100% rename from tests/unit/test_proxy.py rename to openstack/tests/unit/test_proxy.py diff --git a/tests/unit/test_proxy_base.py b/openstack/tests/unit/test_proxy_base.py similarity index 100% rename from tests/unit/test_proxy_base.py rename to openstack/tests/unit/test_proxy_base.py diff --git a/tests/unit/test_resource.py b/openstack/tests/unit/test_resource.py similarity index 100% rename from tests/unit/test_resource.py rename to openstack/tests/unit/test_resource.py diff --git a/tests/unit/test_stats.py b/openstack/tests/unit/test_stats.py similarity index 100% rename from tests/unit/test_stats.py rename to openstack/tests/unit/test_stats.py diff --git a/tests/unit/test_utils.py b/openstack/tests/unit/test_utils.py similarity index 100% rename from tests/unit/test_utils.py rename to openstack/tests/unit/test_utils.py diff --git a/openstack/tests/unit/workflow/__init__.py b/openstack/tests/unit/workflow/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/workflow/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/workflow/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/workflow/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/workflow/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/workflow/__pycache__/test_cron_trigger.cpython-310.pyc b/openstack/tests/unit/workflow/__pycache__/test_cron_trigger.cpython-310.pyc similarity index 100% rename from tests/unit/workflow/__pycache__/test_cron_trigger.cpython-310.pyc rename to openstack/tests/unit/workflow/__pycache__/test_cron_trigger.cpython-310.pyc diff --git a/tests/unit/workflow/__pycache__/test_execution.cpython-310.pyc b/openstack/tests/unit/workflow/__pycache__/test_execution.cpython-310.pyc similarity index 100% rename from tests/unit/workflow/__pycache__/test_execution.cpython-310.pyc rename to openstack/tests/unit/workflow/__pycache__/test_execution.cpython-310.pyc diff --git a/tests/unit/workflow/__pycache__/test_version.cpython-310.pyc b/openstack/tests/unit/workflow/__pycache__/test_version.cpython-310.pyc similarity index 100% rename from tests/unit/workflow/__pycache__/test_version.cpython-310.pyc rename to openstack/tests/unit/workflow/__pycache__/test_version.cpython-310.pyc diff --git a/tests/unit/workflow/__pycache__/test_workflow.cpython-310.pyc b/openstack/tests/unit/workflow/__pycache__/test_workflow.cpython-310.pyc similarity index 100% rename from tests/unit/workflow/__pycache__/test_workflow.cpython-310.pyc rename to openstack/tests/unit/workflow/__pycache__/test_workflow.cpython-310.pyc diff --git a/tests/unit/workflow/test_cron_trigger.py b/openstack/tests/unit/workflow/test_cron_trigger.py similarity index 100% rename from tests/unit/workflow/test_cron_trigger.py rename to openstack/tests/unit/workflow/test_cron_trigger.py diff --git a/tests/unit/workflow/test_execution.py b/openstack/tests/unit/workflow/test_execution.py similarity index 100% rename from tests/unit/workflow/test_execution.py rename to openstack/tests/unit/workflow/test_execution.py diff --git a/tests/unit/workflow/test_version.py b/openstack/tests/unit/workflow/test_version.py similarity index 100% rename from tests/unit/workflow/test_version.py rename to openstack/tests/unit/workflow/test_version.py diff --git a/tests/unit/workflow/test_workflow.py b/openstack/tests/unit/workflow/test_workflow.py similarity index 100% rename from tests/unit/workflow/test_workflow.py rename to openstack/tests/unit/workflow/test_workflow.py diff --git a/openstack/tests/unit/workflow/v2/__init__.py b/openstack/tests/unit/workflow/v2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/workflow/v2/__pycache__/__init__.cpython-310.pyc b/openstack/tests/unit/workflow/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from tests/unit/workflow/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/tests/unit/workflow/v2/__pycache__/__init__.cpython-310.pyc diff --git a/tests/unit/workflow/v2/__pycache__/test_proxy.cpython-310.pyc b/openstack/tests/unit/workflow/v2/__pycache__/test_proxy.cpython-310.pyc similarity index 100% rename from tests/unit/workflow/v2/__pycache__/test_proxy.cpython-310.pyc rename to openstack/tests/unit/workflow/v2/__pycache__/test_proxy.cpython-310.pyc diff --git a/tests/unit/workflow/v2/test_proxy.py b/openstack/tests/unit/workflow/v2/test_proxy.py similarity index 100% rename from tests/unit/workflow/v2/test_proxy.py rename to openstack/tests/unit/workflow/v2/test_proxy.py diff --git a/utils.py b/openstack/utils.py similarity index 100% rename from utils.py rename to openstack/utils.py diff --git a/version.py b/openstack/version.py similarity index 100% rename from version.py rename to openstack/version.py diff --git a/warnings.py b/openstack/warnings.py similarity index 100% rename from warnings.py rename to openstack/warnings.py diff --git a/openstack/workflow/__init__.py b/openstack/workflow/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/workflow/__pycache__/__init__.cpython-310.pyc b/openstack/workflow/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from workflow/__pycache__/__init__.cpython-310.pyc rename to openstack/workflow/__pycache__/__init__.cpython-310.pyc diff --git a/workflow/__pycache__/version.cpython-310.pyc b/openstack/workflow/__pycache__/version.cpython-310.pyc similarity index 100% rename from workflow/__pycache__/version.cpython-310.pyc rename to openstack/workflow/__pycache__/version.cpython-310.pyc diff --git a/workflow/__pycache__/workflow_service.cpython-310.pyc b/openstack/workflow/__pycache__/workflow_service.cpython-310.pyc similarity index 100% rename from workflow/__pycache__/workflow_service.cpython-310.pyc rename to openstack/workflow/__pycache__/workflow_service.cpython-310.pyc diff --git a/openstack/workflow/v2/__init__.py b/openstack/workflow/v2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/workflow/v2/__pycache__/__init__.cpython-310.pyc b/openstack/workflow/v2/__pycache__/__init__.cpython-310.pyc similarity index 100% rename from workflow/v2/__pycache__/__init__.cpython-310.pyc rename to openstack/workflow/v2/__pycache__/__init__.cpython-310.pyc diff --git a/workflow/v2/__pycache__/_proxy.cpython-310.pyc b/openstack/workflow/v2/__pycache__/_proxy.cpython-310.pyc similarity index 100% rename from workflow/v2/__pycache__/_proxy.cpython-310.pyc rename to openstack/workflow/v2/__pycache__/_proxy.cpython-310.pyc diff --git a/workflow/v2/__pycache__/cron_trigger.cpython-310.pyc b/openstack/workflow/v2/__pycache__/cron_trigger.cpython-310.pyc similarity index 100% rename from workflow/v2/__pycache__/cron_trigger.cpython-310.pyc rename to openstack/workflow/v2/__pycache__/cron_trigger.cpython-310.pyc diff --git a/workflow/v2/__pycache__/execution.cpython-310.pyc b/openstack/workflow/v2/__pycache__/execution.cpython-310.pyc similarity index 100% rename from workflow/v2/__pycache__/execution.cpython-310.pyc rename to openstack/workflow/v2/__pycache__/execution.cpython-310.pyc diff --git a/workflow/v2/__pycache__/workflow.cpython-310.pyc b/openstack/workflow/v2/__pycache__/workflow.cpython-310.pyc similarity index 100% rename from workflow/v2/__pycache__/workflow.cpython-310.pyc rename to openstack/workflow/v2/__pycache__/workflow.cpython-310.pyc diff --git a/workflow/v2/_proxy.py b/openstack/workflow/v2/_proxy.py similarity index 100% rename from workflow/v2/_proxy.py rename to openstack/workflow/v2/_proxy.py diff --git a/workflow/v2/cron_trigger.py b/openstack/workflow/v2/cron_trigger.py similarity index 100% rename from workflow/v2/cron_trigger.py rename to openstack/workflow/v2/cron_trigger.py diff --git a/workflow/v2/execution.py b/openstack/workflow/v2/execution.py similarity index 100% rename from workflow/v2/execution.py rename to openstack/workflow/v2/execution.py diff --git a/workflow/v2/workflow.py b/openstack/workflow/v2/workflow.py similarity index 100% rename from workflow/v2/workflow.py rename to openstack/workflow/v2/workflow.py diff --git a/workflow/version.py b/openstack/workflow/version.py similarity index 100% rename from workflow/version.py rename to openstack/workflow/version.py diff --git a/workflow/workflow_service.py b/openstack/workflow/workflow_service.py similarity index 100% rename from workflow/workflow_service.py rename to openstack/workflow/workflow_service.py diff --git a/playbooks/acceptance/post.yaml b/playbooks/acceptance/post.yaml new file mode 100644 index 0000000..32d0f80 --- /dev/null +++ b/playbooks/acceptance/post.yaml @@ -0,0 +1,42 @@ +--- +# This could be running on localhost only, but then the devstack job would need +# to perform API call on the worker node. To keep the code a bit less crazy +# rather address all hosts and perform certain steps on the localhost (zuul +# executor). +- hosts: all + tasks: + # TODO: + # - clean the resources, which might have been created + + # Token is saved on the zuul executor node + - name: Check token file + delegate_to: localhost + ansible.builtin.stat: + path: "{{ zuul.executor.work_root }}/.{{ zuul.build }}" + register: token_file + + # no_log is important since content WILL in logs + - name: Read the token from file + delegate_to: localhost + no_log: true + ansible.builtin.slurp: + src: "{{ token_file.stat.path }}" + register: token_data + when: "token_file.stat.exists" + + - name: Delete data file + delegate_to: localhost + command: "shred {{ token_file.stat.path }}" + when: "token_file.stat.exists" + + # no_log is important since content WILL appear in logs + - name: Revoke token + no_log: true + ansible.builtin.uri: + url: "{{ openstack_credentials.auth.auth_url | default(auth_url) }}/v3/auth/tokens" + method: "DELETE" + headers: + X-Auth-Token: "{{ token_data['content'] | b64decode }}" + X-Subject-Token: "{{ token_data['content'] | b64decode }}" + status_code: 204 + when: "token_file.stat.exists and 'content' in token_data" diff --git a/playbooks/acceptance/pre.yaml b/playbooks/acceptance/pre.yaml new file mode 100644 index 0000000..091c9a3 --- /dev/null +++ b/playbooks/acceptance/pre.yaml @@ -0,0 +1,69 @@ +--- +- hosts: all + tasks: + - name: Get temporary token for the cloud + # nolog is important since content WILL appear in logs + no_log: true + ansible.builtin.uri: + url: "{{ openstack_credentials.auth.auth_url | default(auth_url) }}/v3/auth/tokens" + method: "POST" + body_format: "json" + body: + auth: + identity: + methods: ["password"] + password: + user: + name: "{{ openstack_credentials.auth.username | default(omit) }}" + id: "{{ openstack_credentials.auth.user_id | default(omit) }}" + password: "{{ openstack_credentials.auth.password }}" + domain: + name: "{{ openstack_credentials.auth.user_domain_name | default(omit) }}" + id: "{{ openstack_credentials.auth.user_domain_id | default(omit) }}" + scope: + project: + name: "{{ openstack_credentials.auth.project_name | default(omit) }}" + id: "{{ openstack_credentials.auth.project_id | default(omit) }}" + domain: + name: "{{ openstack_credentials.auth.project_domain_name | default(omit) }}" + id: "{{ openstack_credentials.auth.project_domain_id | default(omit) }}" + return_content: true + status_code: 201 + register: os_auth + + - name: Verify token + # nolog is important since content WILL appear in logs + no_log: true + ansible.builtin.uri: + url: "{{ openstack_credentials.auth.auth_url | default(auth_url) }}/v3/auth/tokens" + method: "GET" + headers: + X-Auth-Token: "{{ os_auth.x_subject_token }}" + X-Subject-Token: "{{ os_auth.x_subject_token }}" + + - name: Include deploy-clouds-config role + include_role: + name: deploy-clouds-config + vars: + cloud_config: + clouds: + acceptance: + profile: "{{ openstack_credentials.profile | default('') }}" + auth_type: "token" + auth: + auth_url: "{{ openstack_credentials.auth.auth_url | default(auth_url) }}" + project_name: "{{ openstack_credentials.auth.project_name | default('') }}" + project_domain_id: "{{ openstack_credentials.auth.project_domain_id | default('') }}" + project_domain_name: "{{ openstack_credentials.auth.project_domain_name | default('') }}" + token: "{{ os_auth.x_subject_token }}" + region_name: "{{ openstack_credentials.region_name | default('') }}" + verify: "{{ openstack_credentials.verify | default(true) }}" + + # Intruders might want to corrupt clouds.yaml to avoid revoking token in the post phase + # To prevent this we save token on the executor for later use. + - name: Save the token + delegate_to: localhost + copy: + dest: "{{ zuul.executor.work_root }}/.{{ zuul.build }}" + content: "{{ os_auth.x_subject_token }}" + mode: "0640" diff --git a/playbooks/acceptance/run-with-devstack.yaml b/playbooks/acceptance/run-with-devstack.yaml new file mode 100644 index 0000000..26dcdf6 --- /dev/null +++ b/playbooks/acceptance/run-with-devstack.yaml @@ -0,0 +1,19 @@ +--- +# Need to actually start devstack first +- hosts: all + roles: + - run-devstack + +- name: Get the token + ansible.builtin.import_playbook: pre.yaml + +# Run the rest +- hosts: all + roles: + - role: bindep + bindep_profile: test + bindep_dir: "{{ zuul_work_dir }}" + - test-setup + - ensure-tox + - get-devstack-os-environment + - tox diff --git a/playbooks/devstack/legacy-git.yaml b/playbooks/devstack/legacy-git.yaml new file mode 100644 index 0000000..96ba6d5 --- /dev/null +++ b/playbooks/devstack/legacy-git.yaml @@ -0,0 +1,11 @@ +- hosts: all + tasks: + + - name: Set openstacksdk libraries to master branch before functional tests + command: git checkout master + args: + chdir: "src/opendev.org/{{ item }}" + with_items: + - openstack/shade + - openstack/keystoneauth + - openstack/os-client-config diff --git a/playbooks/devstack/post.yaml b/playbooks/devstack/post.yaml new file mode 100644 index 0000000..c2ebc50 --- /dev/null +++ b/playbooks/devstack/post.yaml @@ -0,0 +1,9 @@ +- hosts: all + tasks: + - include_role: + name: fetch-tox-output + - include_role: + name: fetch-subunit-output + when: fetch_subunit|default(true)|bool + - include_role: + name: process-stackviz diff --git a/post_test_hook.sh b/post_test_hook.sh new file mode 100755 index 0000000..13421d4 --- /dev/null +++ b/post_test_hook.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# +# This is a script that kicks off a series of functional tests against a +# OpenStack devstack cloud. This script is intended to work as a gate +# in project-config for the Python SDK. + +DIR=$(cd $(dirname "$0") && pwd) + +echo "Running SDK functional test suite" +sudo -H -u stack -i <<! +export OS_CLOUD=devstack-admin +echo 'Running tests with:' +cat /etc/openstack/clouds.yaml + +cd ${DIR} +echo '=functional==============================================' +if [[ -n "$1" ]]; then + tox -e functional -- $1 +else + tox -e functional +fi +FUNCTIONAL_RESULT=\$? +echo '=examples================================================' +tox -e examples +EXAMPLES_RESULT=\$? +echo '=========================================================' +echo "Functional test result: \$FUNCTIONAL_RESULT" +echo "Examples test result: \$EXAMPLES_RESULT" +test \$FUNCTIONAL_RESULT == 0 -a \$EXAMPLES_RESULT == 0 +! +# TODO(thowe) For now we are going to ignore tests failures +# It is easier to change this script than the gate. The magic +# string fro this script should probably specify the -e option +# so the script will fail immediately if a command fails. +exit 0 diff --git a/releasenotes/notes/add-aggregates-fc563e237755112e.yaml b/releasenotes/notes/add-aggregates-fc563e237755112e.yaml new file mode 100644 index 0000000..8173314 --- /dev/null +++ b/releasenotes/notes/add-aggregates-fc563e237755112e.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Basic CRUD functionality was added on Host Aggregates. Actions are not + implemented yet (adding/removing hosts from Host Aggregates). diff --git a/releasenotes/notes/add-application-credentials-abab9106dea10c11.yaml b/releasenotes/notes/add-application-credentials-abab9106dea10c11.yaml new file mode 100644 index 0000000..9f48183 --- /dev/null +++ b/releasenotes/notes/add-application-credentials-abab9106dea10c11.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added CRUD support for `application credentials + <https://docs.openstack.org/keystone/latest/user/application_credentials.html>`_. diff --git a/releasenotes/notes/add-az-to-loadbalancer-da9bf1baaedc89a4.yaml b/releasenotes/notes/add-az-to-loadbalancer-da9bf1baaedc89a4.yaml new file mode 100644 index 0000000..321d4a0 --- /dev/null +++ b/releasenotes/notes/add-az-to-loadbalancer-da9bf1baaedc89a4.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Adds Octavia (load_balancer) support for the availability zone and + availability zone profile APIs. diff --git a/releasenotes/notes/add-block-storage-group-snapshots-954cc869227317c3.yaml b/releasenotes/notes/add-block-storage-group-snapshots-954cc869227317c3.yaml new file mode 100644 index 0000000..eb4e0f2 --- /dev/null +++ b/releasenotes/notes/add-block-storage-group-snapshots-954cc869227317c3.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for group snapshots to the block storage service. diff --git a/releasenotes/notes/add-block-storage-group-type-group-specs-d07047167224ec83.yaml b/releasenotes/notes/add-block-storage-group-type-group-specs-d07047167224ec83.yaml new file mode 100644 index 0000000..50ae352 --- /dev/null +++ b/releasenotes/notes/add-block-storage-group-type-group-specs-d07047167224ec83.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support for creating, updating and deleting group type group specs for + the block storage service. diff --git a/releasenotes/notes/add-block-storage-groups-bf5f1af714c9e505.yaml b/releasenotes/notes/add-block-storage-groups-bf5f1af714c9e505.yaml new file mode 100644 index 0000000..2f24f18 --- /dev/null +++ b/releasenotes/notes/add-block-storage-groups-bf5f1af714c9e505.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for groups to the block storage service. diff --git a/releasenotes/notes/add-block-storage-service-support-ce03092ce2d7e7b9.yaml b/releasenotes/notes/add-block-storage-service-support-ce03092ce2d7e7b9.yaml new file mode 100644 index 0000000..95fadb5 --- /dev/null +++ b/releasenotes/notes/add-block-storage-service-support-ce03092ce2d7e7b9.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added support for block storage services. diff --git a/releasenotes/notes/add-block-storage-summary-support-dd00d424c4e6a3b1.yaml b/releasenotes/notes/add-block-storage-summary-support-dd00d424c4e6a3b1.yaml new file mode 100644 index 0000000..4620d2e --- /dev/null +++ b/releasenotes/notes/add-block-storage-summary-support-dd00d424c4e6a3b1.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support for block storage summary. + diff --git a/releasenotes/notes/add-bulk-create-resources-12192ec9d76c7716.yaml b/releasenotes/notes/add-bulk-create-resources-12192ec9d76c7716.yaml new file mode 100644 index 0000000..896e17b --- /dev/null +++ b/releasenotes/notes/add-bulk-create-resources-12192ec9d76c7716.yaml @@ -0,0 +1,5 @@ +--- +features: + - Enabling Resource class for being able to create objects in bulk way. Add + first objects using that feature - Port, which now expose a proxy method + `create_ports` for creating multiple port objects at once. diff --git a/releasenotes/notes/add-cipher-list-support-to-octavia-b6b2b0053ca6b184.yaml b/releasenotes/notes/add-cipher-list-support-to-octavia-b6b2b0053ca6b184.yaml new file mode 100644 index 0000000..e29879d --- /dev/null +++ b/releasenotes/notes/add-cipher-list-support-to-octavia-b6b2b0053ca6b184.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Added the ``tls_ciphers`` properties to listener.py + and pool.py for storing stings of tls ciphers in + OpenSSL cipher string format. diff --git a/releasenotes/notes/add-compute-flavor-ops-12149e58299c413e.yaml b/releasenotes/notes/add-compute-flavor-ops-12149e58299c413e.yaml new file mode 100644 index 0000000..45c2d6b --- /dev/null +++ b/releasenotes/notes/add-compute-flavor-ops-12149e58299c413e.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add additional compute flavor operations (flavor_add_tenant_access, + flavor_remove_tenant_access, get_flavor_access, extra_specs fetching/updating). diff --git a/releasenotes/notes/add-current-user-id-49b6463e6bcc3b31.yaml b/releasenotes/notes/add-current-user-id-49b6463e6bcc3b31.yaml new file mode 100644 index 0000000..fd9a1be --- /dev/null +++ b/releasenotes/notes/add-current-user-id-49b6463e6bcc3b31.yaml @@ -0,0 +1,4 @@ +--- +features: + - Added a new property, 'current_user_id' which contains + the id of the currently authenticated user from the token. diff --git a/releasenotes/notes/add-cyborg-support-b9afca69f709c048.yaml b/releasenotes/notes/add-cyborg-support-b9afca69f709c048.yaml new file mode 100644 index 0000000..9688a5e --- /dev/null +++ b/releasenotes/notes/add-cyborg-support-b9afca69f709c048.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add support for Cyborg(accelerator) diff --git a/releasenotes/notes/add-dns-606cc018e01d40fa.yaml b/releasenotes/notes/add-dns-606cc018e01d40fa.yaml new file mode 100644 index 0000000..dcaab35 --- /dev/null +++ b/releasenotes/notes/add-dns-606cc018e01d40fa.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Adds support for `dns + <https://developer.openstack.org/api-ref/dns/>`_ service. diff --git a/releasenotes/notes/add-dns-domain-support-for-port-3fa4568330dda07e.yaml b/releasenotes/notes/add-dns-domain-support-for-port-3fa4568330dda07e.yaml new file mode 100644 index 0000000..7c24608 --- /dev/null +++ b/releasenotes/notes/add-dns-domain-support-for-port-3fa4568330dda07e.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + ``dns_domain`` attribute support has been added to the network + port resource diff --git a/releasenotes/notes/add-dns-zone-share-api-374e71cac504917f.yaml b/releasenotes/notes/add-dns-zone-share-api-374e71cac504917f.yaml new file mode 100644 index 0000000..1541c17 --- /dev/null +++ b/releasenotes/notes/add-dns-zone-share-api-374e71cac504917f.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add Designate (DNS) support for zone shares. diff --git a/releasenotes/notes/add-fakes-generator-72c53d34c995fcb2.yaml b/releasenotes/notes/add-fakes-generator-72c53d34c995fcb2.yaml new file mode 100644 index 0000000..06fa9c0 --- /dev/null +++ b/releasenotes/notes/add-fakes-generator-72c53d34c995fcb2.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add fake resource generator to ease unit testing in packages that depend on + openstacksdk. diff --git a/releasenotes/notes/add-find-backup-find-snapshot-v2-756a05ccd150db82.yaml b/releasenotes/notes/add-find-backup-find-snapshot-v2-756a05ccd150db82.yaml new file mode 100644 index 0000000..68789d3 --- /dev/null +++ b/releasenotes/notes/add-find-backup-find-snapshot-v2-756a05ccd150db82.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + The ``find_snapshot`` and ``find_backup`` methods have been added to the + v2 block storage proxy API. These were previously only available for the v3 + proxy API. diff --git a/releasenotes/notes/add-fip-portforwarding-methods-cffc14a6283cedfb.yaml b/releasenotes/notes/add-fip-portforwarding-methods-cffc14a6283cedfb.yaml new file mode 100644 index 0000000..274e86a --- /dev/null +++ b/releasenotes/notes/add-fip-portforwarding-methods-cffc14a6283cedfb.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add floating IP Port Forwarding related methods. diff --git a/releasenotes/notes/add-identity-domain-configuration-2e8bcaa20736b379.yaml b/releasenotes/notes/add-identity-domain-configuration-2e8bcaa20736b379.yaml new file mode 100644 index 0000000..6929c8b --- /dev/null +++ b/releasenotes/notes/add-identity-domain-configuration-2e8bcaa20736b379.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support for creating, updating and deleting domain configurations for + the identity service. diff --git a/releasenotes/notes/add-identity-group-users-proxy-method-e37f8983b2406819.yaml b/releasenotes/notes/add-identity-group-users-proxy-method-e37f8983b2406819.yaml new file mode 100644 index 0000000..88e67df --- /dev/null +++ b/releasenotes/notes/add-identity-group-users-proxy-method-e37f8983b2406819.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add possibility to list users in the group. diff --git a/releasenotes/notes/add-image-attributes-05b820a85cd09806.yaml b/releasenotes/notes/add-image-attributes-05b820a85cd09806.yaml new file mode 100644 index 0000000..6507b98 --- /dev/null +++ b/releasenotes/notes/add-image-attributes-05b820a85cd09806.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add image attributes is_hidden, hash_algo, hash_value diff --git a/releasenotes/notes/add-image-cache-support-3f8c13550a84d749.yaml b/releasenotes/notes/add-image-cache-support-3f8c13550a84d749.yaml new file mode 100644 index 0000000..36dc0fb --- /dev/null +++ b/releasenotes/notes/add-image-cache-support-3f8c13550a84d749.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for glance Cache API. diff --git a/releasenotes/notes/add-image-cache-support-78477e1686c52e56.yaml b/releasenotes/notes/add-image-cache-support-78477e1686c52e56.yaml new file mode 100644 index 0000000..36dc0fb --- /dev/null +++ b/releasenotes/notes/add-image-cache-support-78477e1686c52e56.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for glance Cache API. diff --git a/releasenotes/notes/add-image-metadef-namespace-support-b93557afdcf4272c.yaml b/releasenotes/notes/add-image-metadef-namespace-support-b93557afdcf4272c.yaml new file mode 100644 index 0000000..01514ff --- /dev/null +++ b/releasenotes/notes/add-image-metadef-namespace-support-b93557afdcf4272c.yaml @@ -0,0 +1,4 @@ +--- +features: + -| + Adds support to query metadef namespaces from glance. diff --git a/releasenotes/notes/add-image-metadef-property-fb87e5a7090e73ac.yaml b/releasenotes/notes/add-image-metadef-property-fb87e5a7090e73ac.yaml new file mode 100644 index 0000000..042d4c7 --- /dev/null +++ b/releasenotes/notes/add-image-metadef-property-fb87e5a7090e73ac.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added support for the ``MetadefProperty`` Image resource. diff --git a/releasenotes/notes/add-image-metadef-schema-b463825481bdf954.yaml b/releasenotes/notes/add-image-metadef-schema-b463825481bdf954.yaml new file mode 100644 index 0000000..f029759 --- /dev/null +++ b/releasenotes/notes/add-image-metadef-schema-b463825481bdf954.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add support for metadata definition schema resource in image service. \ No newline at end of file diff --git a/releasenotes/notes/add-image-schema-9c07c2789490718a.yaml b/releasenotes/notes/add-image-schema-9c07c2789490718a.yaml new file mode 100644 index 0000000..3217f99 --- /dev/null +++ b/releasenotes/notes/add-image-schema-9c07c2789490718a.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add support for schema resource in image service. diff --git a/releasenotes/notes/add-image-service-info-90d6063b5ba0735d.yaml b/releasenotes/notes/add-image-service-info-90d6063b5ba0735d.yaml new file mode 100644 index 0000000..ea84d0d --- /dev/null +++ b/releasenotes/notes/add-image-service-info-90d6063b5ba0735d.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add image service info discovery (import constraints and supported stores) diff --git a/releasenotes/notes/add-image-stage-1dbc3844a042fd26.yaml b/releasenotes/notes/add-image-stage-1dbc3844a042fd26.yaml new file mode 100644 index 0000000..bde7506 --- /dev/null +++ b/releasenotes/notes/add-image-stage-1dbc3844a042fd26.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for staging image data. diff --git a/releasenotes/notes/add-jmespath-support-f47b7a503dbbfda1.yaml b/releasenotes/notes/add-jmespath-support-f47b7a503dbbfda1.yaml new file mode 100644 index 0000000..2d157a3 --- /dev/null +++ b/releasenotes/notes/add-jmespath-support-f47b7a503dbbfda1.yaml @@ -0,0 +1,4 @@ +--- +features: + - All get and search functions can now take a jmespath expression in their + filters parameter. diff --git a/releasenotes/notes/add-limit-to-shared-file-2b443c2a00c75e6e.yaml b/releasenotes/notes/add-limit-to-shared-file-2b443c2a00c75e6e.yaml new file mode 100644 index 0000000..58ff44f --- /dev/null +++ b/releasenotes/notes/add-limit-to-shared-file-2b443c2a00c75e6e.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to list absolute resource limits on the shared + file system service. diff --git a/releasenotes/notes/add-list_flavor_access-e038253e953e6586.yaml b/releasenotes/notes/add-list_flavor_access-e038253e953e6586.yaml new file mode 100644 index 0000000..12f289f --- /dev/null +++ b/releasenotes/notes/add-list_flavor_access-e038253e953e6586.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add a list_flavor_access method to list all + the projects/tenants allowed to access a given flavor. diff --git a/releasenotes/notes/add-load-balancer-flavor-api-d2598e30347a19fc.yaml b/releasenotes/notes/add-load-balancer-flavor-api-d2598e30347a19fc.yaml new file mode 100644 index 0000000..462acc1 --- /dev/null +++ b/releasenotes/notes/add-load-balancer-flavor-api-d2598e30347a19fc.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds Octavia (load_balancer) support for the flavor APIs. diff --git a/releasenotes/notes/add-load-balancer-flavor-profile-api-e5a15157563eb75f.yaml b/releasenotes/notes/add-load-balancer-flavor-profile-api-e5a15157563eb75f.yaml new file mode 100644 index 0000000..1d674cc --- /dev/null +++ b/releasenotes/notes/add-load-balancer-flavor-profile-api-e5a15157563eb75f.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds Octavia (load_balancer) support for the flavor profile APIs. diff --git a/releasenotes/notes/add-load-balancer-listener-alpn-protocols-ded816c78bf2080c.yaml b/releasenotes/notes/add-load-balancer-listener-alpn-protocols-ded816c78bf2080c.yaml new file mode 100644 index 0000000..685c569 --- /dev/null +++ b/releasenotes/notes/add-load-balancer-listener-alpn-protocols-ded816c78bf2080c.yaml @@ -0,0 +1,3 @@ +--- +features: + - Adds ALPN protocols support for the Octavia (load_balancer) listeners. diff --git a/releasenotes/notes/add-load-balancer-pool-alpn-protocols-77f0c7015f176369.yaml b/releasenotes/notes/add-load-balancer-pool-alpn-protocols-77f0c7015f176369.yaml new file mode 100644 index 0000000..fd112b0 --- /dev/null +++ b/releasenotes/notes/add-load-balancer-pool-alpn-protocols-77f0c7015f176369.yaml @@ -0,0 +1,3 @@ +--- +features: + - Adds ALPN protocols support for the Octavia (load_balancer) pools. diff --git a/releasenotes/notes/add-load-balancer-provider-api-08bcfb72ddf5b247.yaml b/releasenotes/notes/add-load-balancer-provider-api-08bcfb72ddf5b247.yaml new file mode 100644 index 0000000..906e902 --- /dev/null +++ b/releasenotes/notes/add-load-balancer-provider-api-08bcfb72ddf5b247.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds Octavia (load_balancer) support for the providers APIs. diff --git a/releasenotes/notes/add-magnum-cluster-support-843fe2709b8f4789.yaml b/releasenotes/notes/add-magnum-cluster-support-843fe2709b8f4789.yaml new file mode 100644 index 0000000..28609a3 --- /dev/null +++ b/releasenotes/notes/add-magnum-cluster-support-843fe2709b8f4789.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added magnum cluster CRUD support to cloud abstraction layer. diff --git a/releasenotes/notes/add-manage-volume-support-a4fd90e3ff2fa0d0.yaml b/releasenotes/notes/add-manage-volume-support-a4fd90e3ff2fa0d0.yaml new file mode 100644 index 0000000..6d0a0ae --- /dev/null +++ b/releasenotes/notes/add-manage-volume-support-a4fd90e3ff2fa0d0.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added support for manage volume operation. diff --git a/releasenotes/notes/add-masakara-support-3f7df4436ac869cf.yaml b/releasenotes/notes/add-masakara-support-3f7df4436ac869cf.yaml new file mode 100644 index 0000000..baa5fd3 --- /dev/null +++ b/releasenotes/notes/add-masakara-support-3f7df4436ac869cf.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Ported in support for masakari/``instance_ha`` service from + `python-masakariclient`. diff --git a/releasenotes/notes/add-masakari-enabled-to-segment-0e83da869d2ab03f.yaml b/releasenotes/notes/add-masakari-enabled-to-segment-0e83da869d2ab03f.yaml new file mode 100644 index 0000000..97d01f5 --- /dev/null +++ b/releasenotes/notes/add-masakari-enabled-to-segment-0e83da869d2ab03f.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for the ``enabled`` field of the ``Segment`` resource for + the instance HA service (Masakari). diff --git a/releasenotes/notes/add-masakari-vmoves-873ad67830c92254.yaml b/releasenotes/notes/add-masakari-vmoves-873ad67830c92254.yaml new file mode 100644 index 0000000..ffe6d38 --- /dev/null +++ b/releasenotes/notes/add-masakari-vmoves-873ad67830c92254.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for the new ``VMove`` resource for the instance + HA service (Masakari). diff --git a/releasenotes/notes/add-metadef-object-5eec168baf039e80.yaml b/releasenotes/notes/add-metadef-object-5eec168baf039e80.yaml new file mode 100644 index 0000000..a1e037f --- /dev/null +++ b/releasenotes/notes/add-metadef-object-5eec168baf039e80.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for Image Metadef objects. diff --git a/releasenotes/notes/add-migrations-946adf16674d4b2a.yaml b/releasenotes/notes/add-migrations-946adf16674d4b2a.yaml new file mode 100644 index 0000000..f199f91 --- /dev/null +++ b/releasenotes/notes/add-migrations-946adf16674d4b2a.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support for the Compute service's migrations API, allowing users to + list all in-progress migrations for all servers. diff --git a/releasenotes/notes/add-new-field-progress-details-in-notification-resource-f7871acb6ffd46dc.yaml b/releasenotes/notes/add-new-field-progress-details-in-notification-resource-f7871acb6ffd46dc.yaml new file mode 100644 index 0000000..f0470b4 --- /dev/null +++ b/releasenotes/notes/add-new-field-progress-details-in-notification-resource-f7871acb6ffd46dc.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + In microversion 1.1, Masakari returns ``recovery_workflow_details`` information + of the notification in ``GET /notifications/{notification_id}`` API. Added + ``recovery_workflow_details`` attribute to Notification class to read the + recovery_workflow_details of the notification. diff --git a/releasenotes/notes/add-node-boot-mode-5f49882fdd86f35b.yaml b/releasenotes/notes/add-node-boot-mode-5f49882fdd86f35b.yaml new file mode 100644 index 0000000..b97ad34 --- /dev/null +++ b/releasenotes/notes/add-node-boot-mode-5f49882fdd86f35b.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support to display node fields ``boot_mode`` and ``secure_boot`` + which are introduced in API 1.75. diff --git a/releasenotes/notes/add-node-boot-mode-set-5718a8d6511b4826.yaml b/releasenotes/notes/add-node-boot-mode-set-5718a8d6511b4826.yaml new file mode 100644 index 0000000..23d6e43 --- /dev/null +++ b/releasenotes/notes/add-node-boot-mode-set-5718a8d6511b4826.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support for changing node states ``boot_mode`` and ``secure_boot`` + in sync with functionality introduced in API 1.76. diff --git a/releasenotes/notes/add-node-inventory-52f54e16777814e7.yaml b/releasenotes/notes/add-node-inventory-52f54e16777814e7.yaml new file mode 100644 index 0000000..5e4b841 --- /dev/null +++ b/releasenotes/notes/add-node-inventory-52f54e16777814e7.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Adds support for querying a node's hardware inventory as per functionality + introduced in API 1.81. \ No newline at end of file diff --git a/releasenotes/notes/add-node-vendor_passthru-29b384cadf795b48.yaml b/releasenotes/notes/add-node-vendor_passthru-29b384cadf795b48.yaml new file mode 100644 index 0000000..682ee49 --- /dev/null +++ b/releasenotes/notes/add-node-vendor_passthru-29b384cadf795b48.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add node vendor_passthru interface for Ironic API. diff --git a/releasenotes/notes/add-octavia-amphora-api-7f3586f6a4f31de4.yaml b/releasenotes/notes/add-octavia-amphora-api-7f3586f6a4f31de4.yaml new file mode 100644 index 0000000..af9a5b4 --- /dev/null +++ b/releasenotes/notes/add-octavia-amphora-api-7f3586f6a4f31de4.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds Octavia (load_balancer) support for the amphora APIs. diff --git a/releasenotes/notes/add-octavia-lb-failover-9a34c9577d78ad34.yaml b/releasenotes/notes/add-octavia-lb-failover-9a34c9577d78ad34.yaml new file mode 100644 index 0000000..d87404e --- /dev/null +++ b/releasenotes/notes/add-octavia-lb-failover-9a34c9577d78ad34.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added Octavia (load_balancer) load balancer failover. diff --git a/releasenotes/notes/add-octavia-lb-listener-stats-1538cc6e4f734353.yaml b/releasenotes/notes/add-octavia-lb-listener-stats-1538cc6e4f734353.yaml new file mode 100644 index 0000000..8fb7f9f --- /dev/null +++ b/releasenotes/notes/add-octavia-lb-listener-stats-1538cc6e4f734353.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added load balancer and listener get statistics methods. diff --git a/releasenotes/notes/add-octavia-listener-hsts-fields-50c621b71e56dc13.yaml b/releasenotes/notes/add-octavia-listener-hsts-fields-50c621b71e56dc13.yaml new file mode 100644 index 0000000..b97968a --- /dev/null +++ b/releasenotes/notes/add-octavia-listener-hsts-fields-50c621b71e56dc13.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added new fields to loadbalancer create/update listener API in order to + support new HTTP Strict Transport Security support. diff --git a/releasenotes/notes/add-octavia-tags-support-1c1cf94184e6ebb7.yaml b/releasenotes/notes/add-octavia-tags-support-1c1cf94184e6ebb7.yaml new file mode 100644 index 0000000..5eb3c85 --- /dev/null +++ b/releasenotes/notes/add-octavia-tags-support-1c1cf94184e6ebb7.yaml @@ -0,0 +1,10 @@ +--- +features: + - Add tags support for the Octavia (load_balancer) objects. + - | + Added support for the Octavia (load_balancer) L7 Policy "redirect_prefix" + capability. +fixes: + - | + Fixed the Octavia (load_balancer) load balancer objects to have + "flavor_id" instead of the nonexistent "flavor" field. diff --git a/releasenotes/notes/add-placement-resource-class-e1c644d978b886bc.yaml b/releasenotes/notes/add-placement-resource-class-e1c644d978b886bc.yaml new file mode 100644 index 0000000..c3631ab --- /dev/null +++ b/releasenotes/notes/add-placement-resource-class-e1c644d978b886bc.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added support for the ``ResourceClass`` Placement resource. diff --git a/releasenotes/notes/add-placement-resource-provider-aggregates-1310c0be6a4097d3.yaml b/releasenotes/notes/add-placement-resource-provider-aggregates-1310c0be6a4097d3.yaml new file mode 100644 index 0000000..e8385ed --- /dev/null +++ b/releasenotes/notes/add-placement-resource-provider-aggregates-1310c0be6a4097d3.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for aggregates to the ``ResourceProvider`` Placement resource. diff --git a/releasenotes/notes/add-placement-resource-provider-inventory-8714cafefae74810.yaml b/releasenotes/notes/add-placement-resource-provider-inventory-8714cafefae74810.yaml new file mode 100644 index 0000000..33cabac --- /dev/null +++ b/releasenotes/notes/add-placement-resource-provider-inventory-8714cafefae74810.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added support for the ``ResourceProviderInventory`` Placement resource. diff --git a/releasenotes/notes/add-placement-support-a2011eb1e900804d.yaml b/releasenotes/notes/add-placement-support-a2011eb1e900804d.yaml new file mode 100644 index 0000000..dd9ee1d --- /dev/null +++ b/releasenotes/notes/add-placement-support-a2011eb1e900804d.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add initial support for Placement. Currently the following resources are + supported: + + - ``ResourceProvider`` diff --git a/releasenotes/notes/add-placement-trait-29957d2c03edbfb9.yaml b/releasenotes/notes/add-placement-trait-29957d2c03edbfb9.yaml new file mode 100644 index 0000000..773d77f --- /dev/null +++ b/releasenotes/notes/add-placement-trait-29957d2c03edbfb9.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for the ``Trait`` Placement resource. diff --git a/releasenotes/notes/add-port-hardware-offload-type-1232c5ae3f62d7df.yaml b/releasenotes/notes/add-port-hardware-offload-type-1232c5ae3f62d7df.yaml new file mode 100644 index 0000000..b53e676 --- /dev/null +++ b/releasenotes/notes/add-port-hardware-offload-type-1232c5ae3f62d7df.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add ``hardware_offload_type`` attribute to ``port`` resource. Users + can set this attribute to a valid value defined in + ``neutron_lib.constants.VALID_HWOL_TYPES``, set "None" or leave it + undefined. diff --git a/releasenotes/notes/add-port-numa-affinity-policy-b42a85dbe26560d2.yaml b/releasenotes/notes/add-port-numa-affinity-policy-b42a85dbe26560d2.yaml new file mode 100644 index 0000000..2696cb4 --- /dev/null +++ b/releasenotes/notes/add-port-numa-affinity-policy-b42a85dbe26560d2.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Add ``numa_affinity_policy`` attribute to ``port`` resource. Users + can set this attribute to ``required``, ``deferred`` or ``legacy``. + This parameter is nullable. diff --git a/releasenotes/notes/add-propagate_uplink_status-to-port-0152d476c65979e3.yaml b/releasenotes/notes/add-propagate_uplink_status-to-port-0152d476c65979e3.yaml new file mode 100644 index 0000000..28bf681 --- /dev/null +++ b/releasenotes/notes/add-propagate_uplink_status-to-port-0152d476c65979e3.yaml @@ -0,0 +1,12 @@ +--- +features: + - | + Add ``propagate_uplink_status`` attribute to ``port`` resource. + Users can set this attribute to ``True`` or ``False``. + If it is set to ``True``, uplink status propagation is enabled. + Otherwise, it is disabled. + Neutron server needs to have the API extension + ``uplink-status-propagation`` in order to support this feature. + This feature can be used in SRIOV scenario, in which users + enable uplink status propagation of the SRIOV port + so that the link status of the VF will follow the PF. diff --git a/releasenotes/notes/add-server-console-078ed2696e5b04d9.yaml b/releasenotes/notes/add-server-console-078ed2696e5b04d9.yaml new file mode 100644 index 0000000..a3e7687 --- /dev/null +++ b/releasenotes/notes/add-server-console-078ed2696e5b04d9.yaml @@ -0,0 +1,6 @@ +--- +features: + - Added get_server_console method to fetch the console + log from a Server. On clouds that do not expose this + feature, a debug line will be logged and an empty + string will be returned. diff --git a/releasenotes/notes/add-server-migrations-6e31183196f14deb.yaml b/releasenotes/notes/add-server-migrations-6e31183196f14deb.yaml new file mode 100644 index 0000000..8e451ce --- /dev/null +++ b/releasenotes/notes/add-server-migrations-6e31183196f14deb.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Add support for the Compute service's server migrations API, allowing users + to list all migrations for a server as well as force complete or abort + in-progress migrations. diff --git a/releasenotes/notes/add-service-0bcc16eb026eade3.yaml b/releasenotes/notes/add-service-0bcc16eb026eade3.yaml new file mode 100644 index 0000000..e515dc7 --- /dev/null +++ b/releasenotes/notes/add-service-0bcc16eb026eade3.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added a new method `openstack.connection.Connection.add_service` which + allows the registration of Proxy/Resource classes defined externally. diff --git a/releasenotes/notes/add-sg-rules-bulk-f36a3e2326d74867.yaml b/releasenotes/notes/add-sg-rules-bulk-f36a3e2326d74867.yaml new file mode 100644 index 0000000..4776d33 --- /dev/null +++ b/releasenotes/notes/add-sg-rules-bulk-f36a3e2326d74867.yaml @@ -0,0 +1,5 @@ +--- +features: + - Added bulk create securtiy groups rules. With new proxy method + `create_security_group_rules` now it's possible to create multiple rules + for certain security group. diff --git a/releasenotes/notes/add-share-access-rules-to-shared-file-362bee34f7331186.yaml b/releasenotes/notes/add-share-access-rules-to-shared-file-362bee34f7331186.yaml new file mode 100644 index 0000000..005de87 --- /dev/null +++ b/releasenotes/notes/add-share-access-rules-to-shared-file-362bee34f7331186.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to create, list, get and delete share access rules with the + shared file system service. diff --git a/releasenotes/notes/add-share-network-subnet-to-shared-file-b5de3ce6ca723209.yaml b/releasenotes/notes/add-share-network-subnet-to-shared-file-b5de3ce6ca723209.yaml new file mode 100644 index 0000000..c61e18c --- /dev/null +++ b/releasenotes/notes/add-share-network-subnet-to-shared-file-b5de3ce6ca723209.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to create, list, get, and delete share network + subnets on the shared file system service. diff --git a/releasenotes/notes/add-share-network-to-shared-file-c5c9a6b8ccf1d958.yaml b/releasenotes/notes/add-share-network-to-shared-file-c5c9a6b8ccf1d958.yaml new file mode 100644 index 0000000..5177b99 --- /dev/null +++ b/releasenotes/notes/add-share-network-to-shared-file-c5c9a6b8ccf1d958.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to create, update, list, get, and delete share + networks on the shared file system service. diff --git a/releasenotes/notes/add-share-snapshot-instance-to-shared-file-4d935f12d67bf59d.yaml b/releasenotes/notes/add-share-snapshot-instance-to-shared-file-4d935f12d67bf59d.yaml new file mode 100644 index 0000000..385bc44 --- /dev/null +++ b/releasenotes/notes/add-share-snapshot-instance-to-shared-file-4d935f12d67bf59d.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to list and get share snapshot instances + on the shared file system service. diff --git a/releasenotes/notes/add-share-snapshot-to-shared-file-82ecedbdbed2e3c5.yaml b/releasenotes/notes/add-share-snapshot-to-shared-file-82ecedbdbed2e3c5.yaml new file mode 100644 index 0000000..294fddc --- /dev/null +++ b/releasenotes/notes/add-share-snapshot-to-shared-file-82ecedbdbed2e3c5.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Adds support to create, update, list, get, and delete share + snapshots to shared file system service. diff --git a/releasenotes/notes/add-share_group-to-shared-file-8cee20d8aa2afbb7.yaml b/releasenotes/notes/add-share_group-to-shared-file-8cee20d8aa2afbb7.yaml new file mode 100644 index 0000000..ae76ef0 --- /dev/null +++ b/releasenotes/notes/add-share_group-to-shared-file-8cee20d8aa2afbb7.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to create, update, list, get, and delete share + groups on the shared file system service. diff --git a/releasenotes/notes/add-shared-file-syste-share_instance-fffaea2d3a77ba24.yaml b/releasenotes/notes/add-shared-file-syste-share_instance-fffaea2d3a77ba24.yaml new file mode 100644 index 0000000..f14a7a4 --- /dev/null +++ b/releasenotes/notes/add-shared-file-syste-share_instance-fffaea2d3a77ba24.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Added support to list, get, reset status of, + and force delete share instances + (from shared file system service). diff --git a/releasenotes/notes/add-shared-file-system-locks-support-4859ca93f93a1056.yaml b/releasenotes/notes/add-shared-file-system-locks-support-4859ca93f93a1056.yaml new file mode 100644 index 0000000..c6dca56 --- /dev/null +++ b/releasenotes/notes/add-shared-file-system-locks-support-4859ca93f93a1056.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Added support to manipulate resource locks from the shared file system + service. + - | + Added support to restrict the visibility and deletion of the shared file + system share access rules. diff --git a/releasenotes/notes/add-shared-file-system-manage-unmanage-share-830e313f96e5fd2b.yaml b/releasenotes/notes/add-shared-file-system-manage-unmanage-share-830e313f96e5fd2b.yaml new file mode 100644 index 0000000..d349d6c --- /dev/null +++ b/releasenotes/notes/add-shared-file-system-manage-unmanage-share-830e313f96e5fd2b.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to manage and unmanage shares + from the shared file system service. \ No newline at end of file diff --git a/releasenotes/notes/add-shared-file-system-share-group-snapshot-c5099e6c8accf077.yaml b/releasenotes/notes/add-shared-file-system-share-group-snapshot-c5099e6c8accf077.yaml new file mode 100644 index 0000000..9c6b096 --- /dev/null +++ b/releasenotes/notes/add-shared-file-system-share-group-snapshot-c5099e6c8accf077.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support for list, show, update, delete, reset and create + Share Group Snapshots for Shared File Systems service. diff --git a/releasenotes/notes/add-shared-file-system-share-metadata-e0415bb71d8a0a48.yaml b/releasenotes/notes/add-shared-file-system-share-metadata-e0415bb71d8a0a48.yaml new file mode 100644 index 0000000..6461ec7 --- /dev/null +++ b/releasenotes/notes/add-shared-file-system-share-metadata-e0415bb71d8a0a48.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Added support to list, get, create, + update, and delete share metadata + from shared file system service. \ No newline at end of file diff --git a/releasenotes/notes/add-shared-file-system-share-resize-ddd650c2e32fed34.yaml b/releasenotes/notes/add-shared-file-system-share-resize-ddd650c2e32fed34.yaml new file mode 100644 index 0000000..b1adea6 --- /dev/null +++ b/releasenotes/notes/add-shared-file-system-share-resize-ddd650c2e32fed34.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added support for shrink/extend share actions. diff --git a/releasenotes/notes/add-shared-file-system-shares-2e1d44a1bb882d6d.yaml b/releasenotes/notes/add-shared-file-system-shares-2e1d44a1bb882d6d.yaml new file mode 100644 index 0000000..6946d23 --- /dev/null +++ b/releasenotes/notes/add-shared-file-system-shares-2e1d44a1bb882d6d.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added revert share to snapshot to shared + file system service. diff --git a/releasenotes/notes/add-shared-file-system-shares-e9f356a318045607.yaml b/releasenotes/notes/add-shared-file-system-shares-e9f356a318045607.yaml new file mode 100644 index 0000000..e7a1bcb --- /dev/null +++ b/releasenotes/notes/add-shared-file-system-shares-e9f356a318045607.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to create, update, list, get, and delete shares + (from shared file system service). diff --git a/releasenotes/notes/add-shared-file-systems-83a3767429fd5e8c.yaml b/releasenotes/notes/add-shared-file-systems-83a3767429fd5e8c.yaml new file mode 100644 index 0000000..9f770db --- /dev/null +++ b/releasenotes/notes/add-shared-file-systems-83a3767429fd5e8c.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Support for the OpenStack Shared File System API (manila) has been + introduced. + - | + Added support to list Shared File System Service API Versions + and Availability Zones. diff --git a/releasenotes/notes/add-shared-file-systems-export-location-a27c1741880c384b.yaml b/releasenotes/notes/add-shared-file-systems-export-location-a27c1741880c384b.yaml new file mode 100644 index 0000000..df1a124 --- /dev/null +++ b/releasenotes/notes/add-shared-file-systems-export-location-a27c1741880c384b.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to list and show Export Locations + for shares from the Shared File Systems service. diff --git a/releasenotes/notes/add-shelve_offload-427f6550fc55e622.yaml b/releasenotes/notes/add-shelve_offload-427f6550fc55e622.yaml new file mode 100644 index 0000000..0162c0e --- /dev/null +++ b/releasenotes/notes/add-shelve_offload-427f6550fc55e622.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds shelve_offload_server method to the compute proxy diff --git a/releasenotes/notes/add-show-all-images-flag-352748b6c3d99f3f.yaml b/releasenotes/notes/add-show-all-images-flag-352748b6c3d99f3f.yaml new file mode 100644 index 0000000..98c320b --- /dev/null +++ b/releasenotes/notes/add-show-all-images-flag-352748b6c3d99f3f.yaml @@ -0,0 +1,9 @@ +--- +features: + - Added flag "show_all" to list_images. The behavior of + Glance v2 to only show shared images if they have been + accepted by the user can be confusing, and the only way + to change it is to use search_images(filters=dict(member_status='all')) + which isn't terribly obvious. "show_all=True" will set + that flag, as well as disabling the filtering of images + in "deleted" state. diff --git a/releasenotes/notes/add-stack-events-b8674d7bb657e789.yaml b/releasenotes/notes/add-stack-events-b8674d7bb657e789.yaml new file mode 100644 index 0000000..cdc9367 --- /dev/null +++ b/releasenotes/notes/add-stack-events-b8674d7bb657e789.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The ``stack_events`` method and ``StackEvent`` Class have been + added to retrieve stack events \ No newline at end of file diff --git a/releasenotes/notes/add-stack-export-3ace746a8c80d766.yaml b/releasenotes/notes/add-stack-export-3ace746a8c80d766.yaml new file mode 100644 index 0000000..00d680b --- /dev/null +++ b/releasenotes/notes/add-stack-export-3ace746a8c80d766.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add ``export_stack`` to print stack infomation in a json format diff --git a/releasenotes/notes/add-stack-suspend-and-resume-26d4fc5904291d5d.yaml b/releasenotes/notes/add-stack-suspend-and-resume-26d4fc5904291d5d.yaml new file mode 100644 index 0000000..fa3eecd --- /dev/null +++ b/releasenotes/notes/add-stack-suspend-and-resume-26d4fc5904291d5d.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds ``suspend_stack`` and ``resume_stack`` to support stack non-lifecycle operations. \ No newline at end of file diff --git a/releasenotes/notes/add-storage-pool-to-shared-file-ad45da1b2510b412.yaml b/releasenotes/notes/add-storage-pool-to-shared-file-ad45da1b2510b412.yaml new file mode 100644 index 0000000..7303d35 --- /dev/null +++ b/releasenotes/notes/add-storage-pool-to-shared-file-ad45da1b2510b412.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support for retrieving storage pools information from + the Shared File Systems service. diff --git a/releasenotes/notes/add-support-allowed-cidrs-loadbalancer-listener-809e523a8bd6a7d5.yaml b/releasenotes/notes/add-support-allowed-cidrs-loadbalancer-listener-809e523a8bd6a7d5.yaml new file mode 100644 index 0000000..3d47aa3 --- /dev/null +++ b/releasenotes/notes/add-support-allowed-cidrs-loadbalancer-listener-809e523a8bd6a7d5.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added allowed_cidrs parameter into load balancer listener. diff --git a/releasenotes/notes/add-support-availability_zone-loadbalancer-a18aa1708d7859e2.yaml b/releasenotes/notes/add-support-availability_zone-loadbalancer-a18aa1708d7859e2.yaml new file mode 100644 index 0000000..0a0efef --- /dev/null +++ b/releasenotes/notes/add-support-availability_zone-loadbalancer-a18aa1708d7859e2.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added availability_zone parameter into load balancer. \ No newline at end of file diff --git a/releasenotes/notes/add-support-for-setting-static-routes-b3ce6cac2c5e9e51.yaml b/releasenotes/notes/add-support-for-setting-static-routes-b3ce6cac2c5e9e51.yaml new file mode 100644 index 0000000..0b7c577 --- /dev/null +++ b/releasenotes/notes/add-support-for-setting-static-routes-b3ce6cac2c5e9e51.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + The networking API v2 specification, which is implemented by OpenStack + Neutron, features an optional routes parameter - when updating a router + (PUT requests). Static routes are crucial for routers to handle traffic + from subnets not directly connected to a router. The routes parameter has + now been added to the OpenStackCloud.update_router method as a list of + dictionaries with destination and nexthop parameters. diff --git a/releasenotes/notes/add-system-role-assignment-693dd3e1da33a54d.yaml b/releasenotes/notes/add-system-role-assignment-693dd3e1da33a54d.yaml new file mode 100644 index 0000000..cb171b3 --- /dev/null +++ b/releasenotes/notes/add-system-role-assignment-693dd3e1da33a54d.yaml @@ -0,0 +1,11 @@ +--- +features: + - | + Add support for system role assignment. A system role assignment + ultimately controls access to system-level API calls. + + Good examples of system-level APIs include management of the + service catalog and compute hypervisors. + + `System role assignment API reference + <https://docs.openstack.org/api-ref/identity/v3/#system-role-assignments>`_. diff --git a/releasenotes/notes/add-tls-container-refs-params-for-octavia-pools-76f295cd2daa7f53.yaml b/releasenotes/notes/add-tls-container-refs-params-for-octavia-pools-76f295cd2daa7f53.yaml new file mode 100644 index 0000000..e7a87ad --- /dev/null +++ b/releasenotes/notes/add-tls-container-refs-params-for-octavia-pools-76f295cd2daa7f53.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Add both ``ca_tls_container_ref`` and ``crl_container_ref`` + parameters for Octavia pools, which can be used to store the ca + certificate used by backend servers and the revocation list file. diff --git a/releasenotes/notes/add-tls-version-support-for-octavia-7ecb372e6fb58101.yaml b/releasenotes/notes/add-tls-version-support-for-octavia-7ecb372e6fb58101.yaml new file mode 100644 index 0000000..d96dd0c --- /dev/null +++ b/releasenotes/notes/add-tls-version-support-for-octavia-7ecb372e6fb58101.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Added the ``tls_versions`` properties to listener.py + and pool.py for storing a python list of TLS protocol + versions to be used by the pools and listeners. diff --git a/releasenotes/notes/add-tls_enabled-parameter-for-octavia-pools-f0a23436d826b313.yaml b/releasenotes/notes/add-tls_enabled-parameter-for-octavia-pools-f0a23436d826b313.yaml new file mode 100644 index 0000000..e3cc867 --- /dev/null +++ b/releasenotes/notes/add-tls_enabled-parameter-for-octavia-pools-f0a23436d826b313.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add ``tls_enabled`` parameter for Octavia pools, it can be used to enable + TLS communications between a load balancer and its member servers. diff --git a/releasenotes/notes/add-unified-limit-5ac334a08e137a70.yaml b/releasenotes/notes/add-unified-limit-5ac334a08e137a70.yaml new file mode 100644 index 0000000..8bb65ec --- /dev/null +++ b/releasenotes/notes/add-unified-limit-5ac334a08e137a70.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added the unified limits basic CRUD methods. It includes two kinds of + resources: `registered_limit` and `limit`. diff --git a/releasenotes/notes/add-user-group-assignment-9c419b6c6bfe392c.yaml b/releasenotes/notes/add-user-group-assignment-9c419b6c6bfe392c.yaml new file mode 100644 index 0000000..266b5f3 --- /dev/null +++ b/releasenotes/notes/add-user-group-assignment-9c419b6c6bfe392c.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for user group assignments in identity service. diff --git a/releasenotes/notes/add-user-message-to-shared-file-85d7bbccf8347c4f.yaml b/releasenotes/notes/add-user-message-to-shared-file-85d7bbccf8347c4f.yaml new file mode 100644 index 0000000..b4d4492 --- /dev/null +++ b/releasenotes/notes/add-user-message-to-shared-file-85d7bbccf8347c4f.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support to list, get, and delete user messages + on the shared file system service. diff --git a/releasenotes/notes/add-volume-attachment-support-b5f9a9e78ba88355.yaml b/releasenotes/notes/add-volume-attachment-support-b5f9a9e78ba88355.yaml new file mode 100644 index 0000000..d540fd0 --- /dev/null +++ b/releasenotes/notes/add-volume-attachment-support-b5f9a9e78ba88355.yaml @@ -0,0 +1,11 @@ +--- +features: + - | + Added support for: + + * Create Attachment + * Update Attachment + * List Attachment + * Get Attachment + * Delete Attachment + * Complete Attachment diff --git a/releasenotes/notes/add-volume-extend-support-86e5c8cff5d6874e.yaml b/releasenotes/notes/add-volume-extend-support-86e5c8cff5d6874e.yaml new file mode 100644 index 0000000..b0816fb --- /dev/null +++ b/releasenotes/notes/add-volume-extend-support-86e5c8cff5d6874e.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add the ability to extend a volume size with extend_volume method. diff --git a/releasenotes/notes/add-volume-snapshot-manage-unmanage-support-fc0be2a3fb4427d1.yaml b/releasenotes/notes/add-volume-snapshot-manage-unmanage-support-fc0be2a3fb4427d1.yaml new file mode 100644 index 0000000..b54379a --- /dev/null +++ b/releasenotes/notes/add-volume-snapshot-manage-unmanage-support-fc0be2a3fb4427d1.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support for volume snapshot manage and volume + snapshot unmanage. diff --git a/releasenotes/notes/add-volume-transfer-support-28bf34a243d96e1b.yaml b/releasenotes/notes/add-volume-transfer-support-28bf34a243d96e1b.yaml new file mode 100644 index 0000000..40976dc --- /dev/null +++ b/releasenotes/notes/add-volume-transfer-support-28bf34a243d96e1b.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support for volume transfer create, find, + delete, get, list and accept. diff --git a/releasenotes/notes/add-volume-type-update-b84f50b7fa3b061d.yaml b/releasenotes/notes/add-volume-type-update-b84f50b7fa3b061d.yaml new file mode 100644 index 0000000..3e9f363 --- /dev/null +++ b/releasenotes/notes/add-volume-type-update-b84f50b7fa3b061d.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add support for updating block storage volume type objects. diff --git a/releasenotes/notes/add_description_create_user-0ddc9a0ef4da840d.yaml b/releasenotes/notes/add_description_create_user-0ddc9a0ef4da840d.yaml new file mode 100644 index 0000000..98dd190 --- /dev/null +++ b/releasenotes/notes/add_description_create_user-0ddc9a0ef4da840d.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add description parameter to create_user, available on Keystone v3 diff --git a/releasenotes/notes/add_designate_recordsets_support-69af0a6b317073e7.yaml b/releasenotes/notes/add_designate_recordsets_support-69af0a6b317073e7.yaml new file mode 100644 index 0000000..0d46496 --- /dev/null +++ b/releasenotes/notes/add_designate_recordsets_support-69af0a6b317073e7.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for Designate recordsets resources, with the + usual methods (search/list/get/create/update/delete). diff --git a/releasenotes/notes/add_designate_zones_support-35fa9b8b09995b43.yaml b/releasenotes/notes/add_designate_zones_support-35fa9b8b09995b43.yaml new file mode 100644 index 0000000..f5253af --- /dev/null +++ b/releasenotes/notes/add_designate_zones_support-35fa9b8b09995b43.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for Designate zones resources, with the + usual methods (search/list/get/create/update/delete). diff --git a/releasenotes/notes/add_heat_tag_support-135aa43ba1dce3bb.yaml b/releasenotes/notes/add_heat_tag_support-135aa43ba1dce3bb.yaml new file mode 100644 index 0000000..4e0a0ea --- /dev/null +++ b/releasenotes/notes/add_heat_tag_support-135aa43ba1dce3bb.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add tags support when creating a stack, as specified by the openstack + orchestration api at [1] + + [1]https://developer.openstack.org/api-ref/orchestration/v1/#create-stack diff --git a/releasenotes/notes/add_host_aggregate_support-471623faf45ec3c3.yaml b/releasenotes/notes/add_host_aggregate_support-471623faf45ec3c3.yaml new file mode 100644 index 0000000..6a6ff37 --- /dev/null +++ b/releasenotes/notes/add_host_aggregate_support-471623faf45ec3c3.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for host aggregates and host aggregate + membership. diff --git a/releasenotes/notes/add_image_import_support-6cea2e7d7a781071.yaml b/releasenotes/notes/add_image_import_support-6cea2e7d7a781071.yaml new file mode 100644 index 0000000..da0ffe5 --- /dev/null +++ b/releasenotes/notes/add_image_import_support-6cea2e7d7a781071.yaml @@ -0,0 +1,7 @@ +--- +features: + - Add ability to create image without upload data at the same time + - Add support for interoperable image import process as introduced in the + Image API v2.6 at [1] + + [1]https://developer.openstack.org/api-ref/image/v2/index.html#interoperable-image-import diff --git a/releasenotes/notes/add_influxdb_stats-665714d715302ad5.yaml b/releasenotes/notes/add_influxdb_stats-665714d715302ad5.yaml new file mode 100644 index 0000000..f88ae11 --- /dev/null +++ b/releasenotes/notes/add_influxdb_stats-665714d715302ad5.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add possibility to report API metrics into InfluxDB. diff --git a/releasenotes/notes/add_magnum_baymodel_support-e35e5aab0b14ff75.yaml b/releasenotes/notes/add_magnum_baymodel_support-e35e5aab0b14ff75.yaml new file mode 100644 index 0000000..21dbed6 --- /dev/null +++ b/releasenotes/notes/add_magnum_baymodel_support-e35e5aab0b14ff75.yaml @@ -0,0 +1,7 @@ +--- +features: + - Add support for Magnum baymodels, with the + usual methods (search/list/get/create/update/delete). Due to upcoming + rename in Magnum from baymodel to cluster_template, the shade + functionality uses the term cluster_template. However, baymodel aliases + are provided for each api call. diff --git a/releasenotes/notes/add_magnum_services_support-3d95f9dcc60b5573.yaml b/releasenotes/notes/add_magnum_services_support-3d95f9dcc60b5573.yaml new file mode 100644 index 0000000..3a32e3d --- /dev/null +++ b/releasenotes/notes/add_magnum_services_support-3d95f9dcc60b5573.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add support for listing Magnum services. diff --git a/releasenotes/notes/add_project_cleanup-39c3517b25a5372e.yaml b/releasenotes/notes/add_project_cleanup-39c3517b25a5372e.yaml new file mode 100644 index 0000000..f99c66f --- /dev/null +++ b/releasenotes/notes/add_project_cleanup-39c3517b25a5372e.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Project cleanup functionality. It provides a single method in the + connection object, which calls cleanup method in all supported services + (both part of the SDK itself and all "imported" in the runtime or through + the vendor_hook functionality). Cleanup is working in multiple threads + where possible (no dependencies between services). diff --git a/releasenotes/notes/add_server_group_support-dfa472e3dae7d34d.yaml b/releasenotes/notes/add_server_group_support-dfa472e3dae7d34d.yaml new file mode 100644 index 0000000..e903841 --- /dev/null +++ b/releasenotes/notes/add_server_group_support-dfa472e3dae7d34d.yaml @@ -0,0 +1,3 @@ +--- +features: + - Adds support to create and delete server groups. diff --git a/releasenotes/notes/add_support_port_binding_attrs-c70966724eb970f3.yaml b/releasenotes/notes/add_support_port_binding_attrs-c70966724eb970f3.yaml new file mode 100644 index 0000000..bcee489 --- /dev/null +++ b/releasenotes/notes/add_support_port_binding_attrs-c70966724eb970f3.yaml @@ -0,0 +1,5 @@ +--- +features: + - Add support for query of port binding extended attributes including + 'binding:host_id', 'binding:vnic_type', 'binding:vif_type', + 'binding:vif_details', and 'binding:profile'. diff --git a/releasenotes/notes/add_update_server-8761059d6de7e68b.yaml b/releasenotes/notes/add_update_server-8761059d6de7e68b.yaml new file mode 100644 index 0000000..5bbe898 --- /dev/null +++ b/releasenotes/notes/add_update_server-8761059d6de7e68b.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add update_server method to update name or description of a server. diff --git a/releasenotes/notes/add_update_service-28e590a7a7524053.yaml b/releasenotes/notes/add_update_service-28e590a7a7524053.yaml new file mode 100644 index 0000000..ff3e7be --- /dev/null +++ b/releasenotes/notes/add_update_service-28e590a7a7524053.yaml @@ -0,0 +1,6 @@ +--- +features: + - Add the ability to update a keystone service information. This feature is + not available on keystone v2.0. The new function, update_service(), allows + the user to update description, name of service, service type, and enabled + status. diff --git a/releasenotes/notes/add_vendor_hook-e87b6afb7f215a30.yaml b/releasenotes/notes/add_vendor_hook-e87b6afb7f215a30.yaml new file mode 100644 index 0000000..1ef8c2b --- /dev/null +++ b/releasenotes/notes/add_vendor_hook-e87b6afb7f215a30.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Add possibility to automatically invoke vendor hooks. This can be done + either through extending profile (vendor_hook), or passing `vendor_hook` + parameter to the connection. The format of the vendor_hook is the same as + in the setuptools (module.name:function_name). The hook will get connection + as the only parameter. diff --git a/releasenotes/notes/added-federation-support-3b65e531e57211f5.yaml b/releasenotes/notes/added-federation-support-3b65e531e57211f5.yaml new file mode 100644 index 0000000..8c7880e --- /dev/null +++ b/releasenotes/notes/added-federation-support-3b65e531e57211f5.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Adds support to create and manage Identity v3 Federation resources - + Specifically, Identity Providers, Mappings and Federation Protocols. diff --git a/releasenotes/notes/added-senlin-support-1eb4e47c31258f66.yaml b/releasenotes/notes/added-senlin-support-1eb4e47c31258f66.yaml new file mode 100644 index 0000000..ccc38b2 --- /dev/null +++ b/releasenotes/notes/added-senlin-support-1eb4e47c31258f66.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added support for senlin diff --git a/releasenotes/notes/allocation-api-04f6b3b7a0ccc850.yaml b/releasenotes/notes/allocation-api-04f6b3b7a0ccc850.yaml new file mode 100644 index 0000000..8ca573f --- /dev/null +++ b/releasenotes/notes/allocation-api-04f6b3b7a0ccc850.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds support for the baremetal allocation API. diff --git a/releasenotes/notes/allocation-update-910c36c1290e5121.yaml b/releasenotes/notes/allocation-update-910c36c1290e5121.yaml new file mode 100644 index 0000000..6b9147a --- /dev/null +++ b/releasenotes/notes/allocation-update-910c36c1290e5121.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Allows updating ``name`` and ``extra`` fields of a baremetal allocation. diff --git a/releasenotes/notes/alternate-auth-context-3939f1492a0e1355.yaml b/releasenotes/notes/alternate-auth-context-3939f1492a0e1355.yaml new file mode 100644 index 0000000..e454f5b --- /dev/null +++ b/releasenotes/notes/alternate-auth-context-3939f1492a0e1355.yaml @@ -0,0 +1,5 @@ +--- +features: + - Added methods for making new cloud connections + based on the current OpenStackCloud. This should enable working + more easily across projects or user accounts. diff --git a/releasenotes/notes/always-detail-cluster-templates-3eb4b5744ba327ac.yaml b/releasenotes/notes/always-detail-cluster-templates-3eb4b5744ba327ac.yaml new file mode 100644 index 0000000..cc98f8c --- /dev/null +++ b/releasenotes/notes/always-detail-cluster-templates-3eb4b5744ba327ac.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - Cluster Templates have data model and normalization + now. As a result, the detail parameter is now ignored + and detailed records are always returned. diff --git a/releasenotes/notes/auth-url-vexxhost-8d63cd17bde21320.yaml b/releasenotes/notes/auth-url-vexxhost-8d63cd17bde21320.yaml new file mode 100644 index 0000000..f32e1ec --- /dev/null +++ b/releasenotes/notes/auth-url-vexxhost-8d63cd17bde21320.yaml @@ -0,0 +1,9 @@ +--- +fixes: + - | + The ``v3password`` ``auth_type`` implies that the ``auth_url`` given + is a versioned endpoint and so discovery is skipped for auth. Previously + the ``auth_type`` for Vexxhost had been set to ``v3password`` due to v2 + being no longer available to give better errors to users. The ``auth_url`` + was unfortunately left unversioned, so authentication ceased working. The + ``auth_url`` has been changed to the versioned endpoint. diff --git a/releasenotes/notes/bail-on-failed-service-cf299c37d5647b08.yaml b/releasenotes/notes/bail-on-failed-service-cf299c37d5647b08.yaml new file mode 100644 index 0000000..5f004f8 --- /dev/null +++ b/releasenotes/notes/bail-on-failed-service-cf299c37d5647b08.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + When a known service cannot be resolved to a supported version, + an exception is now thrown instead of just returning a blank + Proxy object. This allows returning sane errors to users. diff --git a/releasenotes/notes/baremetal-configdrive-mkisofs-xorrisofs-075db4d7d80e5a13.yaml b/releasenotes/notes/baremetal-configdrive-mkisofs-xorrisofs-075db4d7d80e5a13.yaml new file mode 100644 index 0000000..008459e --- /dev/null +++ b/releasenotes/notes/baremetal-configdrive-mkisofs-xorrisofs-075db4d7d80e5a13.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + When generating a config drive for baremetal, "mkisofs" and "xorrisofs" + are now supported beside the already available "genisoimage" binary. + This is useful on environment where the "genisoimage" binary is not + available but "mkisofs" and/or "xorrisofs" are available. + diff --git a/releasenotes/notes/baremetal-details-09b27fba82111cfb.yaml b/releasenotes/notes/baremetal-details-09b27fba82111cfb.yaml new file mode 100644 index 0000000..f54d0db --- /dev/null +++ b/releasenotes/notes/baremetal-details-09b27fba82111cfb.yaml @@ -0,0 +1,12 @@ +--- +features: + - | + The objects returned by baremetal detailed listing functions + (``connection.baremetal.{nodes,ports,chassis,port_groups}``) are now + fully functional, e.g. can be directly updated or deleted. +deprecations: + - | + The following baremetal resource classes are no longer used and will be + removed in a future release: ``NodeDetail``, ``PortDetail``, + ``ChassisDetail`` and ``PortGroupDetail``. The regular ``Node``, ``Port``, + ``Chassis`` and ``PortGroup`` are now used instead. diff --git a/releasenotes/notes/baremetal-errors-5cc871e8df4c9d95.yaml b/releasenotes/notes/baremetal-errors-5cc871e8df4c9d95.yaml new file mode 100644 index 0000000..cc1fd8a --- /dev/null +++ b/releasenotes/notes/baremetal-errors-5cc871e8df4c9d95.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Adds support for error messages from the bare metal service. diff --git a/releasenotes/notes/baremetal-fields-1f6fbcd8bd1ea2aa.yaml b/releasenotes/notes/baremetal-fields-1f6fbcd8bd1ea2aa.yaml new file mode 100644 index 0000000..1331176 --- /dev/null +++ b/releasenotes/notes/baremetal-fields-1f6fbcd8bd1ea2aa.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fixes specifying fields when listing bare metal resources. diff --git a/releasenotes/notes/baremetal-fields-624546fa533a8287.yaml b/releasenotes/notes/baremetal-fields-624546fa533a8287.yaml new file mode 100644 index 0000000..053140d --- /dev/null +++ b/releasenotes/notes/baremetal-fields-624546fa533a8287.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Adds support for fetching specific fields when getting bare metal + `Node`, `Port`, `PortGroup`, `Chassis` and `Allocation` resources. diff --git a/releasenotes/notes/baremetal-fields-convert-857b8804327f1e86.yaml b/releasenotes/notes/baremetal-fields-convert-857b8804327f1e86.yaml new file mode 100644 index 0000000..07fa11f --- /dev/null +++ b/releasenotes/notes/baremetal-fields-convert-857b8804327f1e86.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixes conversion of the bare metal ``fields`` argument from SDK to + server-side field names (e.g. ``instance_id`` to ``instance_uuid``). diff --git a/releasenotes/notes/baremetal-introspection-973351b3ee76309e.yaml b/releasenotes/notes/baremetal-introspection-973351b3ee76309e.yaml new file mode 100644 index 0000000..7ab2885 --- /dev/null +++ b/releasenotes/notes/baremetal-introspection-973351b3ee76309e.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds support for the bare metal introspection service. diff --git a/releasenotes/notes/baremetal-maintenance-5cb95c6d898d4d72.yaml b/releasenotes/notes/baremetal-maintenance-5cb95c6d898d4d72.yaml new file mode 100644 index 0000000..4a309b9 --- /dev/null +++ b/releasenotes/notes/baremetal-maintenance-5cb95c6d898d4d72.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Implements updating the baremetal Node's ``maintenance_reason``. diff --git a/releasenotes/notes/baremetal-patch-feebd96b1b92f3b9.yaml b/releasenotes/notes/baremetal-patch-feebd96b1b92f3b9.yaml new file mode 100644 index 0000000..bcf4edb --- /dev/null +++ b/releasenotes/notes/baremetal-patch-feebd96b1b92f3b9.yaml @@ -0,0 +1,13 @@ +--- +features: + - | + Adds support for changing bare metal resources by providing a JSON patch. + Adds the following calls to the bare metal proxy: ``patch_node``, + ``patch_port``, ``patch_port_group`` and ``patch_chassis``. +deprecations: + - | + The ``set_node_instance_info`` call is deprecated, use ``patch_machine`` + with the same arguments instead. + - | + The ``purge_node_instance_info`` call is deprecated, use ``patch_machine`` + or ``update_machine`` instead. diff --git a/releasenotes/notes/baremetal-ports-cc0f56ae0d192aba.yaml b/releasenotes/notes/baremetal-ports-cc0f56ae0d192aba.yaml new file mode 100644 index 0000000..90adce1 --- /dev/null +++ b/releasenotes/notes/baremetal-ports-cc0f56ae0d192aba.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The ``OpenStackCloud`` bare metal NIC calls now support all microversions + supported by the SDK. Previously version 1.6 was hardcoded. diff --git a/releasenotes/notes/baremetal-reservation-40327923092e9647.yaml b/releasenotes/notes/baremetal-reservation-40327923092e9647.yaml new file mode 100644 index 0000000..9b5f770 --- /dev/null +++ b/releasenotes/notes/baremetal-reservation-40327923092e9647.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + Added ``wait_for_node_reservation`` to the baremetal proxy. +deprecations: + - | + The `OpenStackCloud` ``wait_for_baremetal_node_lock`` call is deprecated. + Generally, users should not have to call it. The new + ``wait_for_node_reservation`` from the baremetal proxy can be used when + needed. diff --git a/releasenotes/notes/baremetal-retired-fields-f56a4632ad4797d7.yaml b/releasenotes/notes/baremetal-retired-fields-f56a4632ad4797d7.yaml new file mode 100644 index 0000000..115febd --- /dev/null +++ b/releasenotes/notes/baremetal-retired-fields-f56a4632ad4797d7.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds ``is_retired`` and ``retired_reason`` to the baremetal Node schema. \ No newline at end of file diff --git a/releasenotes/notes/baremetal-retries-804f553b4e22b3bf.yaml b/releasenotes/notes/baremetal-retries-804f553b4e22b3bf.yaml new file mode 100644 index 0000000..b54dc1f --- /dev/null +++ b/releasenotes/notes/baremetal-retries-804f553b4e22b3bf.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Changes the ``baremetal.attach_vif_to_node`` call to retry HTTP CONFLICT + by default. While it's a valid error code when a VIF is already attached + to a node, the same code is also used when the target node is locked. + The latter happens more often, so the retries are now on by default and + can be disabled by setting ``retry_on_conflict`` to ``False``. diff --git a/releasenotes/notes/baremetal-retries-ff8aa8f73fb97415.yaml b/releasenotes/notes/baremetal-retries-ff8aa8f73fb97415.yaml new file mode 100644 index 0000000..c654c5b --- /dev/null +++ b/releasenotes/notes/baremetal-retries-ff8aa8f73fb97415.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + The bare metal operations now retry HTTP 409 and 503 by default. The number + of retries can be changes via the ``baremetal_status_code_retries`` + configuration option (defaulting to 5). diff --git a/releasenotes/notes/baremetal-traits-d1137318db33b8d1.yaml b/releasenotes/notes/baremetal-traits-d1137318db33b8d1.yaml new file mode 100644 index 0000000..7e706e6 --- /dev/null +++ b/releasenotes/notes/baremetal-traits-d1137318db33b8d1.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Implements add/remove/set traits API for bare metal nodes. diff --git a/releasenotes/notes/baremetal-update-80effb38aae8e02d.yaml b/releasenotes/notes/baremetal-update-80effb38aae8e02d.yaml new file mode 100644 index 0000000..45ddbb2 --- /dev/null +++ b/releasenotes/notes/baremetal-update-80effb38aae8e02d.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Correct updating bare metal resources. Previously an incorrect body used + to be sent. diff --git a/releasenotes/notes/baremetal-validate-ccce2a37d2a20d96.yaml b/releasenotes/notes/baremetal-validate-ccce2a37d2a20d96.yaml new file mode 100644 index 0000000..7783c2f --- /dev/null +++ b/releasenotes/notes/baremetal-validate-ccce2a37d2a20d96.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds support for bare metal node validation to the bare metal proxy. diff --git a/releasenotes/notes/baremetal-vif-122457118c722a9b.yaml b/releasenotes/notes/baremetal-vif-122457118c722a9b.yaml new file mode 100644 index 0000000..061d703 --- /dev/null +++ b/releasenotes/notes/baremetal-vif-122457118c722a9b.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Implements VIF attach/detach API for bare metal nodes. diff --git a/releasenotes/notes/baremetal-wait-e4571cdb150b188a.yaml b/releasenotes/notes/baremetal-wait-e4571cdb150b188a.yaml new file mode 100644 index 0000000..c104a7f --- /dev/null +++ b/releasenotes/notes/baremetal-wait-e4571cdb150b188a.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + The baremetal calls ``wait_for_nodes_provision_state``, + ``wait_for_allocation`` and the baremetal introspection call + ``wait_for_introspection`` now raise ``ResourceFailure`` on reaching + an error state instead of a generic ``SDKException``. diff --git a/releasenotes/notes/basic-api-cache-4ad8cf2754b004d1.yaml b/releasenotes/notes/basic-api-cache-4ad8cf2754b004d1.yaml new file mode 100644 index 0000000..7ac9f23 --- /dev/null +++ b/releasenotes/notes/basic-api-cache-4ad8cf2754b004d1.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add possibility to cache GET requests using dogpile cache. diff --git a/releasenotes/notes/block-storage-backup-5886e91fd6e423bf.yaml b/releasenotes/notes/block-storage-backup-5886e91fd6e423bf.yaml new file mode 100644 index 0000000..d6f8250 --- /dev/null +++ b/releasenotes/notes/block-storage-backup-5886e91fd6e423bf.yaml @@ -0,0 +1,3 @@ +--- +features: + - Implement block-storage.v2 Backup resource with restore functionality. diff --git a/releasenotes/notes/block-storage-init-return-95b465b4755f03ca.yaml b/releasenotes/notes/block-storage-init-return-95b465b4755f03ca.yaml new file mode 100644 index 0000000..6650ac8 --- /dev/null +++ b/releasenotes/notes/block-storage-init-return-95b465b4755f03ca.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Methods ``openstack.block_storage.v3.volume.Volume.init_attachment`` and + ``block_storage.init_volume_attachment`` now return the results of the POST + request instead of None. This replicates the behaviour of cinderclient; the + returned data is used by nova and ironic for managing volume attachments. \ No newline at end of file diff --git a/releasenotes/notes/block-storage-qs-0e3b69be2e709b65.yaml b/releasenotes/notes/block-storage-qs-0e3b69be2e709b65.yaml new file mode 100644 index 0000000..01adc56 --- /dev/null +++ b/releasenotes/notes/block-storage-qs-0e3b69be2e709b65.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add block storage QuotaSet resource and proxy methods. diff --git a/releasenotes/notes/block-storage-v3-9798d584d088c048.yaml b/releasenotes/notes/block-storage-v3-9798d584d088c048.yaml new file mode 100644 index 0000000..0ce997f --- /dev/null +++ b/releasenotes/notes/block-storage-v3-9798d584d088c048.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added support for block storage v3. diff --git a/releasenotes/notes/block_storage-type_encryption-121f8a222c822fb5.yaml b/releasenotes/notes/block_storage-type_encryption-121f8a222c822fb5.yaml new file mode 100644 index 0000000..deed229 --- /dev/null +++ b/releasenotes/notes/block_storage-type_encryption-121f8a222c822fb5.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add support for block storage type encryption parameters. diff --git a/releasenotes/notes/boot-on-server-group-a80e51850db24b3d.yaml b/releasenotes/notes/boot-on-server-group-a80e51850db24b3d.yaml new file mode 100644 index 0000000..4f4a39c --- /dev/null +++ b/releasenotes/notes/boot-on-server-group-a80e51850db24b3d.yaml @@ -0,0 +1,4 @@ +--- +features: + - Added ``group`` parameter to create_server to allow + booting a server into a specific server group. diff --git a/releasenotes/notes/bug-2001080-de52ead3c5466792.yaml b/releasenotes/notes/bug-2001080-de52ead3c5466792.yaml new file mode 100644 index 0000000..08f83f0 --- /dev/null +++ b/releasenotes/notes/bug-2001080-de52ead3c5466792.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + [`bug 2001080 <https://storyboard.openstack.org/#!/story/2001080>`_] + Project update will only update the enabled field of projects when + ``enabled=True`` or ``enabled=False`` is passed explicitly. The previous + behavior had ``enabled=True`` as the default. diff --git a/releasenotes/notes/bug-2010898-430da335e4df0efe.yaml b/releasenotes/notes/bug-2010898-430da335e4df0efe.yaml new file mode 100644 index 0000000..2d09fc7 --- /dev/null +++ b/releasenotes/notes/bug-2010898-430da335e4df0efe.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + [`bug 2010898 <https://storyboard.openstack.org/#!/story/2010898>`_] + Fix Swift endpoint url handling to determine info/caps url diff --git a/releasenotes/notes/cache-auth-in-keyring-773dd5f682cd1610.yaml b/releasenotes/notes/cache-auth-in-keyring-773dd5f682cd1610.yaml new file mode 100644 index 0000000..8e35c04 --- /dev/null +++ b/releasenotes/notes/cache-auth-in-keyring-773dd5f682cd1610.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support for optionally caching auth information int the local + keyring. Requires the installation of the python ``keyring`` package. diff --git a/releasenotes/notes/cache-in-use-volumes-c7fa8bb378106fe3.yaml b/releasenotes/notes/cache-in-use-volumes-c7fa8bb378106fe3.yaml new file mode 100644 index 0000000..4ac0b61 --- /dev/null +++ b/releasenotes/notes/cache-in-use-volumes-c7fa8bb378106fe3.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - Fixed caching the volume list when volumes are in + use. diff --git a/releasenotes/notes/catch-up-release-notes-e385fad34e9f3d6e.yaml b/releasenotes/notes/catch-up-release-notes-e385fad34e9f3d6e.yaml new file mode 100644 index 0000000..251fdb9 --- /dev/null +++ b/releasenotes/notes/catch-up-release-notes-e385fad34e9f3d6e.yaml @@ -0,0 +1,15 @@ +--- +features: + - Swiftclient instantiation now provides authentication + information so that long lived swiftclient objects can + reauthenticate if necessary. + - Add support for explicit v2password auth type. + - Add SSL support to VEXXHOST vendor profile. + - Add zetta.io cloud vendor profile. +fixes: + - Fix bug where project_domain_{name,id} was set even + if project_{name,id} was not set. +other: + - HPCloud vendor profile removed due to cloud shutdown. + - RunAbove vendor profile removed due to migration to + OVH. diff --git a/releasenotes/notes/change-attach-vol-return-value-4834a1f78392abb1.yaml b/releasenotes/notes/change-attach-vol-return-value-4834a1f78392abb1.yaml new file mode 100644 index 0000000..19db8eb --- /dev/null +++ b/releasenotes/notes/change-attach-vol-return-value-4834a1f78392abb1.yaml @@ -0,0 +1,8 @@ +--- +upgrade: + - | + The ``attach_volume`` method now always returns a ``volume_attachment`` + object. Previously, ``attach_volume`` would return a ``volume`` object if + it was called with ``wait=True`` and a ``volume_attachment`` object + otherwise. + diff --git a/releasenotes/notes/cinder_volume_backups_support-6f7ceab440853833.yaml b/releasenotes/notes/cinder_volume_backups_support-6f7ceab440853833.yaml new file mode 100644 index 0000000..380b653 --- /dev/null +++ b/releasenotes/notes/cinder_volume_backups_support-6f7ceab440853833.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for Cinder volume backup resources, with the + usual methods (search/list/get/create/delete). diff --git a/releasenotes/notes/cinderv2-norm-fix-037189c60b43089f.yaml b/releasenotes/notes/cinderv2-norm-fix-037189c60b43089f.yaml new file mode 100644 index 0000000..0847ee6 --- /dev/null +++ b/releasenotes/notes/cinderv2-norm-fix-037189c60b43089f.yaml @@ -0,0 +1,3 @@ +--- +fixes: + - Fixed the volume normalization function when used with cinder v2. diff --git a/releasenotes/notes/cleanup-objects-f99aeecf22ac13dd.yaml b/releasenotes/notes/cleanup-objects-f99aeecf22ac13dd.yaml new file mode 100644 index 0000000..e1e0752 --- /dev/null +++ b/releasenotes/notes/cleanup-objects-f99aeecf22ac13dd.yaml @@ -0,0 +1,6 @@ +--- +features: + - If shade has to create objects in swift to upload an + image, it will now delete those objects upon successful + image creation as they are no longer needed. They will + also be deleted on fatal import errors. diff --git a/releasenotes/notes/cloud-profile-status-e0d29b5e2f10e95c.yaml b/releasenotes/notes/cloud-profile-status-e0d29b5e2f10e95c.yaml new file mode 100644 index 0000000..b447ed0 --- /dev/null +++ b/releasenotes/notes/cloud-profile-status-e0d29b5e2f10e95c.yaml @@ -0,0 +1,6 @@ +--- +features: + - Add a field to vendor cloud profiles to indicate + active, deprecated and shutdown status. A message to + the user is triggered when attempting to use cloud + with either deprecated or shutdown status. diff --git a/releasenotes/notes/clustering-resource-deletion-bed869ba47c2aac1.yaml b/releasenotes/notes/clustering-resource-deletion-bed869ba47c2aac1.yaml new file mode 100644 index 0000000..877a571 --- /dev/null +++ b/releasenotes/notes/clustering-resource-deletion-bed869ba47c2aac1.yaml @@ -0,0 +1,13 @@ +--- +fixes: + - | + Fixed a regression in deleting Node and Cluster resources + in clustering caused by the addition of the ``location`` + property to all resource objects. Previously the delete + calls had directly returned the ``location`` field + returned in the headers from the clustering service pointing + to an Action resource that could be fetched to get status + on the delete operation. The delete calls now return an + Action resource directly that is correctly constructed + so that ``wait_for_status`` and ``wait_for_deleted`` + work as expected. diff --git a/releasenotes/notes/complete-aggregate-functions-45d5f2beeeac2b48.yaml b/releasenotes/notes/complete-aggregate-functions-45d5f2beeeac2b48.yaml new file mode 100644 index 0000000..3fafe61 --- /dev/null +++ b/releasenotes/notes/complete-aggregate-functions-45d5f2beeeac2b48.yaml @@ -0,0 +1,6 @@ +--- +features: + - Complete compute.aggregate functions to the latest state +fixes: + - aggregate.deleted property is renamed to 'is_deleted' to comply with the + naming convention diff --git a/releasenotes/notes/compute-microversion-2-17-b05cb87580b8d56a.yaml b/releasenotes/notes/compute-microversion-2-17-b05cb87580b8d56a.yaml new file mode 100644 index 0000000..e8f8c51 --- /dev/null +++ b/releasenotes/notes/compute-microversion-2-17-b05cb87580b8d56a.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Add support for Compute API microversion 2.17, which allows admins to + trigger a crash dump for a server. This can be useful for debugging + misbehaving guests. diff --git a/releasenotes/notes/compute-microversion-2-73-abae1d0c3740f76e.yaml b/releasenotes/notes/compute-microversion-2-73-abae1d0c3740f76e.yaml new file mode 100644 index 0000000..f3d89c2 --- /dev/null +++ b/releasenotes/notes/compute-microversion-2-73-abae1d0c3740f76e.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support for Compute API microversion 2.73, which allows admins to + specify a reason when locking a server. diff --git a/releasenotes/notes/compute-microversion-2-89-8c5187cc3bf6bd02.yaml b/releasenotes/notes/compute-microversion-2-89-8c5187cc3bf6bd02.yaml new file mode 100644 index 0000000..e22a340 --- /dev/null +++ b/releasenotes/notes/compute-microversion-2-89-8c5187cc3bf6bd02.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The 2.89 API microversion is now supported for the compute service. This + adds additional fields to the ``os-volume_attachments`` API, represented + by the ``openstack.compute.v2.volume_attachment.VolumeAttachment`` + resource. diff --git a/releasenotes/notes/compute-quota-set-e664412d089945d2.yaml b/releasenotes/notes/compute-quota-set-e664412d089945d2.yaml new file mode 100644 index 0000000..63f2389 --- /dev/null +++ b/releasenotes/notes/compute-quota-set-e664412d089945d2.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for QuotaSet in the compute service. diff --git a/releasenotes/notes/compute-quotas-b07a0f24dfac8444.yaml b/releasenotes/notes/compute-quotas-b07a0f24dfac8444.yaml new file mode 100644 index 0000000..6e17035 --- /dev/null +++ b/releasenotes/notes/compute-quotas-b07a0f24dfac8444.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add new APIs, OperatorCloud.get_compute_quotas(), OperatorCloud.set_compute_quotas() and OperatorCloud.delete_compute_quotas() to manage nova quotas for projects and users \ No newline at end of file diff --git a/releasenotes/notes/compute-restore-server-020bf091acc9f8df.yaml b/releasenotes/notes/compute-restore-server-020bf091acc9f8df.yaml new file mode 100644 index 0000000..9269c47 --- /dev/null +++ b/releasenotes/notes/compute-restore-server-020bf091acc9f8df.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + The ``openstack.compute.v2.server.Server`` object now provides a + ``restore`` method to restore it from a soft-deleted state, while the + compute proxy method provides an equivalent ``restore_server`` method. diff --git a/releasenotes/notes/compute-service-zone-2b25ec705b0156c4.yaml b/releasenotes/notes/compute-service-zone-2b25ec705b0156c4.yaml new file mode 100644 index 0000000..ea69aef --- /dev/null +++ b/releasenotes/notes/compute-service-zone-2b25ec705b0156c4.yaml @@ -0,0 +1,7 @@ +--- +upgrade: + - | + The ``zone`` attribute on compute ``Service`` objects + has been renamed to ``availability_zone`` to match all + of the other resources, and also to better integrate + with the ``Resource.location`` attribute. diff --git a/releasenotes/notes/compute-usage-defaults-5f5b2936f17ff400.yaml b/releasenotes/notes/compute-usage-defaults-5f5b2936f17ff400.yaml new file mode 100644 index 0000000..7ca6b37 --- /dev/null +++ b/releasenotes/notes/compute-usage-defaults-5f5b2936f17ff400.yaml @@ -0,0 +1,9 @@ +--- +features: + - get_compute_usage now has a default value for the start + parameter of 2010-07-06. That was the date the OpenStack + project started. It's completely impossible for someone + to have Nova usage data that goes back further in time. + Also, both the start and end date parameters now also + accept strings which will be parsed and timezones will + be properly converted to UTC which is what Nova expects. diff --git a/releasenotes/notes/compute-volume-attachment-proxy-method-rework-dc35fe9ca3af1c16.yaml b/releasenotes/notes/compute-volume-attachment-proxy-method-rework-dc35fe9ca3af1c16.yaml new file mode 100644 index 0000000..5962e6e --- /dev/null +++ b/releasenotes/notes/compute-volume-attachment-proxy-method-rework-dc35fe9ca3af1c16.yaml @@ -0,0 +1,13 @@ +--- +upgrade: + - | + The signatures of the various volume attachment-related methods in the + compute API proxy layer have changed. These were previously incomplete and + did not function as expected in many scenarios. Some callers may need to be + reworked. The affected proxy methods are: + + - ``create_volume_attachment`` + - ``delete_volume_attachment`` + - ``update_volume_attachment`` + - ``get_volume_attachment`` + - ``volume_attachments`` diff --git a/releasenotes/notes/conf-object-ctr-c0e1da0a67dad841.yaml b/releasenotes/notes/conf-object-ctr-c0e1da0a67dad841.yaml new file mode 100644 index 0000000..60bb035 --- /dev/null +++ b/releasenotes/notes/conf-object-ctr-c0e1da0a67dad841.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Added the ability to create a ``Connection`` from an ``oslo.config`` + ``CONF`` object. This is primarily intended to be used by OpenStack + services using SDK for inter-service communication. diff --git a/releasenotes/notes/config-aliases-0f6297eafd05c07c.yaml b/releasenotes/notes/config-aliases-0f6297eafd05c07c.yaml new file mode 100644 index 0000000..d398c2a --- /dev/null +++ b/releasenotes/notes/config-aliases-0f6297eafd05c07c.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Config values now support service-type aliases. The correct config names + are based on the official service type, such as + ``block_storage_api_version``, but with this change, legacy aliases such + as ``volume_api_version`` are also supported. diff --git a/releasenotes/notes/config-flavor-specs-ca712e17971482b6.yaml b/releasenotes/notes/config-flavor-specs-ca712e17971482b6.yaml new file mode 100644 index 0000000..4bb1e90 --- /dev/null +++ b/releasenotes/notes/config-flavor-specs-ca712e17971482b6.yaml @@ -0,0 +1,4 @@ +--- +features: + - Adds ability to add a config setting to clouds.yaml to + disable fetching extra_specs from flavors. diff --git a/releasenotes/notes/configdrive-f8ca9f94b2981db7.yaml b/releasenotes/notes/configdrive-f8ca9f94b2981db7.yaml new file mode 100644 index 0000000..4337a54 --- /dev/null +++ b/releasenotes/notes/configdrive-f8ca9f94b2981db7.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Supports Bare Metal API version 1.56, which allows building a config drive + on the server side from a provided dictionary. diff --git a/releasenotes/notes/container-search-b0f4253ce2deeda5.yaml b/releasenotes/notes/container-search-b0f4253ce2deeda5.yaml new file mode 100644 index 0000000..3587a7b --- /dev/null +++ b/releasenotes/notes/container-search-b0f4253ce2deeda5.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Containers are now searchable both with a JMESPath expression or a dict of + container attributes via the + ``openstack.connection.Connection.search_containers`` function. diff --git a/releasenotes/notes/create-object-data-870cb543543aa983.yaml b/releasenotes/notes/create-object-data-870cb543543aa983.yaml new file mode 100644 index 0000000..4e02550 --- /dev/null +++ b/releasenotes/notes/create-object-data-870cb543543aa983.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add a data parameter to ``openstack.connection.Connection.create_object`` + so that data can be passed in directly instead of through a file. diff --git a/releasenotes/notes/create-object-directory-98e2cae175cc5082.yaml b/releasenotes/notes/create-object-directory-98e2cae175cc5082.yaml new file mode 100644 index 0000000..08cce16 --- /dev/null +++ b/releasenotes/notes/create-object-directory-98e2cae175cc5082.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Added a ``create_directory_marker_object``' method to allow for easy + creation of zero-byte 'directory' marker objects. These are not needed + in most cases, but on some clouds they are used by Static + Web and Web Listings in swift to facilitate directory traversal. diff --git a/releasenotes/notes/create-stack-fix-12dbb59a48ac7442.yaml b/releasenotes/notes/create-stack-fix-12dbb59a48ac7442.yaml new file mode 100644 index 0000000..35bb8c0 --- /dev/null +++ b/releasenotes/notes/create-stack-fix-12dbb59a48ac7442.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - The create_stack() call was fixed to call the correct iterator + method and to return the updated stack object when waiting. diff --git a/releasenotes/notes/create-subnet-by-subnetpool-eba1129c67ed4d96.yaml b/releasenotes/notes/create-subnet-by-subnetpool-eba1129c67ed4d96.yaml new file mode 100644 index 0000000..bb7127a --- /dev/null +++ b/releasenotes/notes/create-subnet-by-subnetpool-eba1129c67ed4d96.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support for specifying the subnetpool to use when creating subnets + (``subnetpool_name_or_id``) diff --git a/releasenotes/notes/create_server_network_fix-c4a56b31d2850a4b.yaml b/releasenotes/notes/create_server_network_fix-c4a56b31d2850a4b.yaml new file mode 100644 index 0000000..9f9bd54 --- /dev/null +++ b/releasenotes/notes/create_server_network_fix-c4a56b31d2850a4b.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - The create_server() API call would not use the supplied 'network' + parameter if the 'nics' parameter was also supplied, even though it would + be an empty list. It now uses 'network' if 'nics' is not supplied or if + it is an empty list. diff --git a/releasenotes/notes/create_service_norm-319a97433d68fa6a.yaml b/releasenotes/notes/create_service_norm-319a97433d68fa6a.yaml new file mode 100644 index 0000000..2f6d018 --- /dev/null +++ b/releasenotes/notes/create_service_norm-319a97433d68fa6a.yaml @@ -0,0 +1,3 @@ +--- +fixes: + - The returned data from a create_service() call was not being normalized. diff --git a/releasenotes/notes/cron_triggers_proxy-51aa89e91bbb9798.yaml b/releasenotes/notes/cron_triggers_proxy-51aa89e91bbb9798.yaml new file mode 100644 index 0000000..c9ec391 --- /dev/null +++ b/releasenotes/notes/cron_triggers_proxy-51aa89e91bbb9798.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add workflow CronTrigger resource and proxy methods. diff --git a/releasenotes/notes/data-model-cf50d86982646370.yaml b/releasenotes/notes/data-model-cf50d86982646370.yaml new file mode 100644 index 0000000..66a814a --- /dev/null +++ b/releasenotes/notes/data-model-cf50d86982646370.yaml @@ -0,0 +1,8 @@ +--- +features: + - Explicit data model contracts are now defined for + Flavors, Images, Security Groups, Security Group Rules, + and Servers. + - Resources with data model contracts are now being returned with + 'location' attribute. The location carries cloud name, region + name and information about the project that owns the resource. diff --git a/releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml b/releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml new file mode 100644 index 0000000..49aba3c --- /dev/null +++ b/releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml @@ -0,0 +1,7 @@ +--- +issues: + - If there was only one cloud defined in clouds.yaml + os-client-config was requiring the cloud parameter + be passed. This is inconsistent with how the envvars + cloud works which WILL work without setting the cloud + parameter if it's the only cloud. diff --git a/releasenotes/notes/default-microversion-b2401727cb591002.yaml b/releasenotes/notes/default-microversion-b2401727cb591002.yaml new file mode 100644 index 0000000..3ef8ad9 --- /dev/null +++ b/releasenotes/notes/default-microversion-b2401727cb591002.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Versions set in config via ``*_api_version`` or ``OS_*_API_VERSION`` + that have a ``.`` in them will be also passed as the default microversion + to the Adapter constructor. An additional config option, + ``*_default_microversion`` has been added to support being more explicit. diff --git a/releasenotes/notes/delete-autocreated-1839187b0aa35022.yaml b/releasenotes/notes/delete-autocreated-1839187b0aa35022.yaml new file mode 100644 index 0000000..a0c2f8d --- /dev/null +++ b/releasenotes/notes/delete-autocreated-1839187b0aa35022.yaml @@ -0,0 +1,5 @@ +--- +features: + - Added new method, delete_autocreated_image_objects + that can be used to delete any leaked objects shade + may have created on behalf of the user. diff --git a/releasenotes/notes/delete-image-objects-9d4b4e0fff36a23f.yaml b/releasenotes/notes/delete-image-objects-9d4b4e0fff36a23f.yaml new file mode 100644 index 0000000..00ce499 --- /dev/null +++ b/releasenotes/notes/delete-image-objects-9d4b4e0fff36a23f.yaml @@ -0,0 +1,18 @@ +--- +fixes: + - Delete swift objects uploaded in service of uploading images + at the time that the corresponding image is deleted. On some clouds, + image uploads are accomplished by uploading the image to swift and + then running a task-import. As shade does this action on behalf of the + user, it is not reasonable to assume that the user would then be aware + of or manage the swift objects shade created, which led to an ongoing + leak of swift objects. + - Upload swift Large Objects as Static Large Objects by default. Shade + automatically uploads objects as Large Objects when they are over a + segment_size threshold. It had been doing this as Dynamic Large Objects, + which sound great, but which have the downside of not deleting their + sub-segments when the primary object is deleted. Since nothing in the + shade interface exposes that the object was segmented, the user would not + know they would also need to find and delete the segments. Instead, we + now upload as Static Large Objects which behave as expected and delete + segments when the object is deleted. diff --git a/releasenotes/notes/delete-obj-return-a3ecf0415b7a2989.yaml b/releasenotes/notes/delete-obj-return-a3ecf0415b7a2989.yaml new file mode 100644 index 0000000..381bcb9 --- /dev/null +++ b/releasenotes/notes/delete-obj-return-a3ecf0415b7a2989.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - The delete_object() method was not returning True/False, + similar to other delete methods. It is now consistent with + the other delete APIs. diff --git a/releasenotes/notes/delete_project-399f9b3107014dde.yaml b/releasenotes/notes/delete_project-399f9b3107014dde.yaml new file mode 100644 index 0000000..e4cf39f --- /dev/null +++ b/releasenotes/notes/delete_project-399f9b3107014dde.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - The delete_project() API now conforms to our standard of returning True + when the delete succeeds, or False when the project was not found. It + would previously raise an expection if the project was not found. diff --git a/releasenotes/notes/deprecate-remote_ip_prefix-metering-label-rules-843d5a962e4e428c.yaml b/releasenotes/notes/deprecate-remote_ip_prefix-metering-label-rules-843d5a962e4e428c.yaml new file mode 100644 index 0000000..351fb22 --- /dev/null +++ b/releasenotes/notes/deprecate-remote_ip_prefix-metering-label-rules-843d5a962e4e428c.yaml @@ -0,0 +1,7 @@ +--- +deprecations: + - | + Deprecate the use of 'remote_ip_prefix' in metering label rules, and it + will be removed in future releases. One should use instead the + 'source_ip_prefix' and/or 'destination_ip_prefix' parameters. For more + details, you can check the spec: https://review.opendev.org/#/c/744702/. diff --git a/releasenotes/notes/deprecated-compute-image-proxy-apis-986263f6aa1b1b25.yaml b/releasenotes/notes/deprecated-compute-image-proxy-apis-986263f6aa1b1b25.yaml new file mode 100644 index 0000000..c63ff82 --- /dev/null +++ b/releasenotes/notes/deprecated-compute-image-proxy-apis-986263f6aa1b1b25.yaml @@ -0,0 +1,12 @@ +--- +deprecations: + - | + The following Compute service proxy methods are now deprecated: + + * ``find_image`` + * ``get_image`` + * ``delete_image`` + * ``images`` + + These are proxy APIs for the Image service. You should use the Image + service instead via the Image service proxy methods. diff --git a/releasenotes/notes/deprecated-profile-762afdef0e8fc9e8.yaml b/releasenotes/notes/deprecated-profile-762afdef0e8fc9e8.yaml new file mode 100644 index 0000000..e09d17c --- /dev/null +++ b/releasenotes/notes/deprecated-profile-762afdef0e8fc9e8.yaml @@ -0,0 +1,6 @@ +--- +deprecations: + - | + ``openstack.profile.Profile`` has been deprecated and will be removed + in the ``1.0`` release. Users should use the functions in + ``openstack.config`` instead. diff --git a/releasenotes/notes/disable-service-39df96ef8a817785.yaml b/releasenotes/notes/disable-service-39df96ef8a817785.yaml new file mode 100644 index 0000000..aab0d58 --- /dev/null +++ b/releasenotes/notes/disable-service-39df96ef8a817785.yaml @@ -0,0 +1,12 @@ +--- +features: + - | + ``has_{service_type}`` is a boolean config option that allows + asserting that a given service does not exist or should not be used + in a given cloud. Doing this will now cause the corresponding + service ``Proxy`` object to not be created and in its place is + an object that will throw exceptions if used. + - | + ``{service_type}_disabled_reason`` is a new string config option + that can be set to indicate a reason why a service has been disabled. + This string will be used in exceptions or log warnings emitted. diff --git a/releasenotes/notes/dns-domain-parameter-d3acfc3287a9d632.yaml b/releasenotes/notes/dns-domain-parameter-d3acfc3287a9d632.yaml new file mode 100644 index 0000000..605cae2 --- /dev/null +++ b/releasenotes/notes/dns-domain-parameter-d3acfc3287a9d632.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added dns_domain parameter into the create_network and update_network + methods. diff --git a/releasenotes/notes/domain_operations_name_or_id-baba4cac5b67234d.yaml b/releasenotes/notes/domain_operations_name_or_id-baba4cac5b67234d.yaml new file mode 100644 index 0000000..6d58e43 --- /dev/null +++ b/releasenotes/notes/domain_operations_name_or_id-baba4cac5b67234d.yaml @@ -0,0 +1,4 @@ +--- +features: + - Added name_or_id parameter to domain operations, allowing + an admin to update/delete/get by domain name. diff --git a/releasenotes/notes/drop-Resource-allow_get-attribute-fec75b551fb79465.yaml b/releasenotes/notes/drop-Resource-allow_get-attribute-fec75b551fb79465.yaml new file mode 100644 index 0000000..422029a --- /dev/null +++ b/releasenotes/notes/drop-Resource-allow_get-attribute-fec75b551fb79465.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + The ``allow_get`` attribute of ``openstack.resource.Resource`` has been + removed. Use ``allow_fetch`` or ``allow_list`` instead. diff --git a/releasenotes/notes/drop-formatter-deserialize-30b19956fb79bb8d.yaml b/releasenotes/notes/drop-formatter-deserialize-30b19956fb79bb8d.yaml new file mode 100644 index 0000000..d8415bf --- /dev/null +++ b/releasenotes/notes/drop-formatter-deserialize-30b19956fb79bb8d.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + The ``openstack.format.Formatter`` class no longer defines a ``serialize`` + method to override. This was unused and unneccessary complexity. diff --git a/releasenotes/notes/drop-python27-b824f9ce51cb1ab7.yaml b/releasenotes/notes/drop-python27-b824f9ce51cb1ab7.yaml new file mode 100644 index 0000000..80f1f86 --- /dev/null +++ b/releasenotes/notes/drop-python27-b824f9ce51cb1ab7.yaml @@ -0,0 +1,3 @@ +--- +prelude: > + As of this release, python v2 is neither tested nor supported. diff --git a/releasenotes/notes/drop-senlin-cloud-layer-c06d496acc70b014.yaml b/releasenotes/notes/drop-senlin-cloud-layer-c06d496acc70b014.yaml new file mode 100644 index 0000000..784d97c --- /dev/null +++ b/releasenotes/notes/drop-senlin-cloud-layer-c06d496acc70b014.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - | + Cloud layer operations for Senlin service are dropped due to big amount of bugs there. diff --git a/releasenotes/notes/dropped-python-3.5-b154887cce87947c.yaml b/releasenotes/notes/dropped-python-3.5-b154887cce87947c.yaml new file mode 100644 index 0000000..a78c85f --- /dev/null +++ b/releasenotes/notes/dropped-python-3.5-b154887cce87947c.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - | + Python 3.5 is no longer supported. diff --git a/releasenotes/notes/dual-stack-networks-8a81941c97d28deb.yaml b/releasenotes/notes/dual-stack-networks-8a81941c97d28deb.yaml new file mode 100644 index 0000000..70e28e7 --- /dev/null +++ b/releasenotes/notes/dual-stack-networks-8a81941c97d28deb.yaml @@ -0,0 +1,8 @@ +--- +features: + - Added support for dual stack networks where the IPv4 subnet and the + IPv6 subnet have opposite public/private qualities. It is now possible + to add configuration to clouds.yaml that will indicate that a network + is public for v6 and private for v4, which is otherwise very difficult + to correctly infer while setting server attributes like private_v4, + public_v4 and public_v6. diff --git a/releasenotes/notes/endpoint-from-catalog-bad36cb0409a4e6a.yaml b/releasenotes/notes/endpoint-from-catalog-bad36cb0409a4e6a.yaml new file mode 100644 index 0000000..2db7bc9 --- /dev/null +++ b/releasenotes/notes/endpoint-from-catalog-bad36cb0409a4e6a.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add new method, 'endpoint_for' which will return the + raw endpoint for a given service from the current catalog. diff --git a/releasenotes/notes/expose-client-side-rate-limit-ddb82df7cb92091c.yaml b/releasenotes/notes/expose-client-side-rate-limit-ddb82df7cb92091c.yaml new file mode 100644 index 0000000..3d7b503 --- /dev/null +++ b/releasenotes/notes/expose-client-side-rate-limit-ddb82df7cb92091c.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Client-side rate limiting is now directly exposed via ``rate_limit`` + and ``concurrency`` parameters. A single value can be given that applies + to all services, or a dict of service-type and value if different + client-side rate or concurrency limits should be used for different + services. diff --git a/releasenotes/notes/false-not-attribute-error-49484d0fdc61f75d.yaml b/releasenotes/notes/false-not-attribute-error-49484d0fdc61f75d.yaml new file mode 100644 index 0000000..e474e02 --- /dev/null +++ b/releasenotes/notes/false-not-attribute-error-49484d0fdc61f75d.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - delete_image used to fail with an AttributeError if an invalid image + name or id was passed, rather than returning False which was the + intent. This is worthy of note because it's a behavior change, but the + previous behavior was a bug. diff --git a/releasenotes/notes/feature-server-metadata-50caf18cec532160.yaml b/releasenotes/notes/feature-server-metadata-50caf18cec532160.yaml new file mode 100644 index 0000000..e0a3f6c --- /dev/null +++ b/releasenotes/notes/feature-server-metadata-50caf18cec532160.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add new APIs, OpenStackCloud.set_server_metadata() and OpenStackCloud.delete_server_metadata() to manage metadata of existing nova compute instances diff --git a/releasenotes/notes/find_server-use-details-9a22e83ec6540c98.yaml b/releasenotes/notes/find_server-use-details-9a22e83ec6540c98.yaml new file mode 100644 index 0000000..79cd7c2 --- /dev/null +++ b/releasenotes/notes/find_server-use-details-9a22e83ec6540c98.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Make sure find_server returns server details when looking up by name. diff --git a/releasenotes/notes/fip_timeout-035c4bb3ff92fa1f.yaml b/releasenotes/notes/fip_timeout-035c4bb3ff92fa1f.yaml new file mode 100644 index 0000000..2f98ebb --- /dev/null +++ b/releasenotes/notes/fip_timeout-035c4bb3ff92fa1f.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - When creating a new server, the timeout was not being passed through to + floating IP creation, which could also timeout. diff --git a/releasenotes/notes/firewall-resources-c7589d288dd57e35.yaml b/releasenotes/notes/firewall-resources-c7589d288dd57e35.yaml new file mode 100644 index 0000000..92e4a09 --- /dev/null +++ b/releasenotes/notes/firewall-resources-c7589d288dd57e35.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Implement fwaas v2 resources for managing firewall groups, rules + and policies. diff --git a/releasenotes/notes/fix-compat-with-old-keystoneauth-66e11ee9d008b962.yaml b/releasenotes/notes/fix-compat-with-old-keystoneauth-66e11ee9d008b962.yaml new file mode 100644 index 0000000..80d09fb --- /dev/null +++ b/releasenotes/notes/fix-compat-with-old-keystoneauth-66e11ee9d008b962.yaml @@ -0,0 +1,7 @@ +--- +issues: + - Fixed a regression when using latest os-client-config with + the keystoneauth from stable/newton. Although this isn't a + super common combination, the added feature that broke the + interaction is really not worthy of the incompatibility, so + a workaround was added. diff --git a/releasenotes/notes/fix-config-drive-a148b7589f7e1022.yaml b/releasenotes/notes/fix-config-drive-a148b7589f7e1022.yaml new file mode 100644 index 0000000..cd08b87 --- /dev/null +++ b/releasenotes/notes/fix-config-drive-a148b7589f7e1022.yaml @@ -0,0 +1,6 @@ +--- +issues: + - Fixed an issue where nodepool could cause config_drive + to be passed explicitly as None, which was getting directly + passed through to the JSON. Also fix the same logic for key_name + and scheduler_hints while we're in there. diff --git a/releasenotes/notes/fix-delete-ips-1d4eebf7bc4d4733.yaml b/releasenotes/notes/fix-delete-ips-1d4eebf7bc4d4733.yaml new file mode 100644 index 0000000..7d8199d --- /dev/null +++ b/releasenotes/notes/fix-delete-ips-1d4eebf7bc4d4733.yaml @@ -0,0 +1,6 @@ +--- +issues: + - Fixed the logic in delete_ips and added regression + tests to cover it. The old logic was incorrectly looking + for floating ips using port syntax. It was also not + swallowing errors when it should. diff --git a/releasenotes/notes/fix-dns-return-c810d5e6736322f1.yaml b/releasenotes/notes/fix-dns-return-c810d5e6736322f1.yaml new file mode 100644 index 0000000..78b95de --- /dev/null +++ b/releasenotes/notes/fix-dns-return-c810d5e6736322f1.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixed issue where the dns methods were returning False instead of None + when resources were not found. + - | + Fixed jsonification under python3. diff --git a/releasenotes/notes/fix-endpoint-override-ac41baeec9549ab3.yaml b/releasenotes/notes/fix-endpoint-override-ac41baeec9549ab3.yaml new file mode 100644 index 0000000..0496f24 --- /dev/null +++ b/releasenotes/notes/fix-endpoint-override-ac41baeec9549ab3.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed issue where ``endpoint_override`` settings were not getting passed + to the Adapter constructor in ``get_session_client``. diff --git a/releasenotes/notes/fix-floating-ip-private-matching-84e369eee380a185.yaml b/releasenotes/notes/fix-floating-ip-private-matching-84e369eee380a185.yaml new file mode 100644 index 0000000..6ff00ef --- /dev/null +++ b/releasenotes/notes/fix-floating-ip-private-matching-84e369eee380a185.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixed an issue where an optimization in the logic to find floating ips + first when looking for public ip addresses broke finding the correct + private address. diff --git a/releasenotes/notes/fix-for-microversion-70cd686b6d6e3fd0.yaml b/releasenotes/notes/fix-for-microversion-70cd686b6d6e3fd0.yaml new file mode 100644 index 0000000..be402ef --- /dev/null +++ b/releasenotes/notes/fix-for-microversion-70cd686b6d6e3fd0.yaml @@ -0,0 +1,14 @@ +--- +fixes: + - | + In April 2019 the microversion support for the Server resource was increased + to ``2.72``. Unfortunately, due to an issue with version discovery documents, + this increase never actually became effective. A fix is coming in ``3.17.2`` of + ``keystoneauth`` which will unbreak version discovery and cause the microversion + support to start working. +upgrade: + - | + Due to the fix in microversion support in `keystoneauth`, Servers will be + fetched using microversion ``2.72``. Code that assumes the existence of a + ``flavor.id`` field in the Server record should be removed, as it does not exist + in new microversions and cannot be filled in behind the scenes. diff --git a/releasenotes/notes/fix-image-hw_qemu_guest_agent-bf1147e52c84b5e8.yaml b/releasenotes/notes/fix-image-hw_qemu_guest_agent-bf1147e52c84b5e8.yaml new file mode 100644 index 0000000..3d67a06 --- /dev/null +++ b/releasenotes/notes/fix-image-hw_qemu_guest_agent-bf1147e52c84b5e8.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + hw_qemu_guest_agent attribute of the image is a string boolean with values + `yes` and `no`. diff --git a/releasenotes/notes/fix-image-task-ae79502dd5c7ecba.yaml b/releasenotes/notes/fix-image-task-ae79502dd5c7ecba.yaml new file mode 100644 index 0000000..8a6513b --- /dev/null +++ b/releasenotes/notes/fix-image-task-ae79502dd5c7ecba.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixed a regression in image upload when the cloud uses the task + upload method. A refactor led to attempting to update the disk_format + and container_format values after the image had been imported. diff --git a/releasenotes/notes/fix-list-networks-a592725df64c306e.yaml b/releasenotes/notes/fix-list-networks-a592725df64c306e.yaml new file mode 100644 index 0000000..eecc255 --- /dev/null +++ b/releasenotes/notes/fix-list-networks-a592725df64c306e.yaml @@ -0,0 +1,3 @@ +--- +fixes: + - Fix for list_networks() ignoring any filters. diff --git a/releasenotes/notes/fix-microversion-354dc70deb2b2f0b.yaml b/releasenotes/notes/fix-microversion-354dc70deb2b2f0b.yaml new file mode 100644 index 0000000..3cb5745 --- /dev/null +++ b/releasenotes/notes/fix-microversion-354dc70deb2b2f0b.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Modify microversion handling. Microversion chosen by the client/user is + respected in the microversion negotiation. For features, requiring + particular microversion, it would be ensured it is supported by the server + side and required microversion is <= chosen microversion, otherwise call + will be rejected. diff --git a/releasenotes/notes/fix-missing-futures-a0617a1c1ce6e659.yaml b/releasenotes/notes/fix-missing-futures-a0617a1c1ce6e659.yaml new file mode 100644 index 0000000..94a2ab8 --- /dev/null +++ b/releasenotes/notes/fix-missing-futures-a0617a1c1ce6e659.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - Added missing dependency on futures library for python 2. + The depend was missed in testing due to it having been listed + in test-requirements already. diff --git a/releasenotes/notes/fix-neutron-endpoint-mangling-a9dd89dd09bc71ec.yaml b/releasenotes/notes/fix-neutron-endpoint-mangling-a9dd89dd09bc71ec.yaml new file mode 100644 index 0000000..0f4a2d1 --- /dev/null +++ b/releasenotes/notes/fix-neutron-endpoint-mangling-a9dd89dd09bc71ec.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed incorrect neutron endpoint mangling for the cases when the catalog + contains a versioned neutron endpoint. diff --git a/releasenotes/notes/fix-os_auth_type-v3multifactor-049cf52573d9e00e.yaml b/releasenotes/notes/fix-os_auth_type-v3multifactor-049cf52573d9e00e.yaml new file mode 100644 index 0000000..73a288c --- /dev/null +++ b/releasenotes/notes/fix-os_auth_type-v3multifactor-049cf52573d9e00e.yaml @@ -0,0 +1,12 @@ +--- +fixes: + - | + It is now possible to configure ``v3multifactor`` auth type using + environment variables. For example: + + export OS_AUTH_TYPE=v3multifactor + export OS_AUTH_METHODS=v3password,v3totp + export OS_USERNAME=admin + export OS_PASSWORD=password + export OS_PASSCODE=12345 + openstack server list diff --git a/releasenotes/notes/fix-properties-key-conflict-2161ca1faaad6731.yaml b/releasenotes/notes/fix-properties-key-conflict-2161ca1faaad6731.yaml new file mode 100644 index 0000000..d681f93 --- /dev/null +++ b/releasenotes/notes/fix-properties-key-conflict-2161ca1faaad6731.yaml @@ -0,0 +1,4 @@ +--- +issues: + - Images in the cloud with a string property named "properties" + caused image normalization to bomb. diff --git a/releasenotes/notes/fix-supplemental-fips-c9cd58aac12eb30e.yaml b/releasenotes/notes/fix-supplemental-fips-c9cd58aac12eb30e.yaml new file mode 100644 index 0000000..66a5f33 --- /dev/null +++ b/releasenotes/notes/fix-supplemental-fips-c9cd58aac12eb30e.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - Fixed an issue where shade could report a floating IP being attached + to a server erroneously due to only matching on fixed ip. Changed the + lookup to match on port ids. This adds an API call in the case where + the workaround is needed because of a bug in the cloud, but in most + cases it should have no difference. diff --git a/releasenotes/notes/fix-task-timing-048afea680adc62e.yaml b/releasenotes/notes/fix-task-timing-048afea680adc62e.yaml new file mode 100644 index 0000000..ef9e219 --- /dev/null +++ b/releasenotes/notes/fix-task-timing-048afea680adc62e.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fix a regression where the ``TaskManager.post_run_task`` ``elapsed_time`` + argument was not reflecting the time taken by the actual task. diff --git a/releasenotes/notes/fix-update-domain-af47b066ac52eb7f.yaml b/releasenotes/notes/fix-update-domain-af47b066ac52eb7f.yaml new file mode 100644 index 0000000..060461d --- /dev/null +++ b/releasenotes/notes/fix-update-domain-af47b066ac52eb7f.yaml @@ -0,0 +1,3 @@ +--- +fixes: + - Fix for update_domain() where 'name' was not updatable. diff --git a/releasenotes/notes/fix-yaml-load-3e6bd852afe549b4.yaml b/releasenotes/notes/fix-yaml-load-3e6bd852afe549b4.yaml new file mode 100644 index 0000000..ac34188 --- /dev/null +++ b/releasenotes/notes/fix-yaml-load-3e6bd852afe549b4.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed an issue where importing openstacksdk changed the behavior of + ``yaml.load`` globally. diff --git a/releasenotes/notes/fixed-magnum-type-7406f0a60525f858.yaml b/releasenotes/notes/fixed-magnum-type-7406f0a60525f858.yaml new file mode 100644 index 0000000..bc0f768 --- /dev/null +++ b/releasenotes/notes/fixed-magnum-type-7406f0a60525f858.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - Fixed magnum service_type. shade was using it as 'container' + but the correct type is 'container-infra'. It's possible that on + old clouds with magnum shade may now do the wrong thing. If that + occurs, please file a bug. diff --git a/releasenotes/notes/flavor-cloud-layer-0b4d130ac1c5e7c4.yaml b/releasenotes/notes/flavor-cloud-layer-0b4d130ac1c5e7c4.yaml new file mode 100644 index 0000000..5c35b42 --- /dev/null +++ b/releasenotes/notes/flavor-cloud-layer-0b4d130ac1c5e7c4.yaml @@ -0,0 +1,4 @@ +--- +other: + - Flavor operations of the cloud layer are switched to the rely on + the proxy layer diff --git a/releasenotes/notes/flavor_fix-a53c6b326dc34a2c.yaml b/releasenotes/notes/flavor_fix-a53c6b326dc34a2c.yaml new file mode 100644 index 0000000..9a7ba7d --- /dev/null +++ b/releasenotes/notes/flavor_fix-a53c6b326dc34a2c.yaml @@ -0,0 +1,7 @@ +--- +features: + - Flavors will always contain an 'extra_specs' attribute. Client cruft, + such as 'links', 'HUMAN_ID', etc. has been removed. +fixes: + - Setting and unsetting flavor extra specs now works. This had + been broken since the 1.2.0 release. diff --git a/releasenotes/notes/floating_ip_normalization-41e0edcdb0c98aee.yaml b/releasenotes/notes/floating_ip_normalization-41e0edcdb0c98aee.yaml new file mode 100644 index 0000000..82de33d --- /dev/null +++ b/releasenotes/notes/floating_ip_normalization-41e0edcdb0c98aee.yaml @@ -0,0 +1,10 @@ +--- +upgrade: + - | + No Munch conversion and normalization of the floating ips is happening + anymore. For Neutron network a pure FloatingIP object is being returned, + for Nova still munch object. +deprecations: + - | + search_floating_ips method is deprecated and should not be used anymore. It + is going to be dropped approximately after one major cycle. diff --git a/releasenotes/notes/fnmatch-name-or-id-f658fe26f84086c8.yaml b/releasenotes/notes/fnmatch-name-or-id-f658fe26f84086c8.yaml new file mode 100644 index 0000000..dcdccd2 --- /dev/null +++ b/releasenotes/notes/fnmatch-name-or-id-f658fe26f84086c8.yaml @@ -0,0 +1,5 @@ +--- +features: + - name_or_id parameters to search/get methods now support + filename-like globbing. This means search_servers('nb0*') + will return all servers whose names start with 'nb0'. diff --git a/releasenotes/notes/force_ipv4_no_ipv6_address-9842168b5d05d262.yaml b/releasenotes/notes/force_ipv4_no_ipv6_address-9842168b5d05d262.yaml new file mode 100644 index 0000000..8cca5a2 --- /dev/null +++ b/releasenotes/notes/force_ipv4_no_ipv6_address-9842168b5d05d262.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + Cloud with the `force_ipv4` flag will no longer return a + `public_v6` value, even if one is provided by the cloud. This is + to avoid having entries for unconfigured interfaces. diff --git a/releasenotes/notes/futurist-b54b0f449d410997.yaml b/releasenotes/notes/futurist-b54b0f449d410997.yaml new file mode 100644 index 0000000..1d1ca20 --- /dev/null +++ b/releasenotes/notes/futurist-b54b0f449d410997.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Switched to the ``futurist`` library for managing background + concurrent tasks. Introduced a new ``pool_executor`` parameter + to `Connection` that allows passing any any futurist Executor + for cases where the default ``ThreadPoolExecutor`` would not + be appropriate. diff --git a/releasenotes/notes/generate-form-signature-294ca46812f291d6.yaml b/releasenotes/notes/generate-form-signature-294ca46812f291d6.yaml new file mode 100644 index 0000000..5028950 --- /dev/null +++ b/releasenotes/notes/generate-form-signature-294ca46812f291d6.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added methods to manage object store temp-url keys and + generate signatures needed for FormPost middleware. diff --git a/releasenotes/notes/get-limits-c383c512f8e01873.yaml b/releasenotes/notes/get-limits-c383c512f8e01873.yaml new file mode 100644 index 0000000..58ed1e1 --- /dev/null +++ b/releasenotes/notes/get-limits-c383c512f8e01873.yaml @@ -0,0 +1,3 @@ +--- +features: + - Allow to retrieve the limits of a specific project diff --git a/releasenotes/notes/get-object-raw-e58284e59c81c8ef.yaml b/releasenotes/notes/get-object-raw-e58284e59c81c8ef.yaml new file mode 100644 index 0000000..d854d8e --- /dev/null +++ b/releasenotes/notes/get-object-raw-e58284e59c81c8ef.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added ``get_object_raw`` method for downloading an object from swift + and returning a raw requests Response object. diff --git a/releasenotes/notes/get-server-by-id-none-3e8538800fa09d82.yaml b/releasenotes/notes/get-server-by-id-none-3e8538800fa09d82.yaml new file mode 100644 index 0000000..b3ef3fe --- /dev/null +++ b/releasenotes/notes/get-server-by-id-none-3e8538800fa09d82.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + The ``get_server_by_id`` method is supposed to return ``None`` if the + server in question can't be found, but a regression was introduced + causing it to raise ``ResourceNotFound`` instead. This has been corrected + and ``get_server_by_id`` returns ``None`` correctly again. diff --git a/releasenotes/notes/get-usage-72d249ff790d1b8f.yaml b/releasenotes/notes/get-usage-72d249ff790d1b8f.yaml new file mode 100644 index 0000000..4b447f4 --- /dev/null +++ b/releasenotes/notes/get-usage-72d249ff790d1b8f.yaml @@ -0,0 +1,3 @@ +--- +features: + - Allow to retrieve the usage of a specific project diff --git a/releasenotes/notes/get_compute_usage-01811dccd60dc92a.yaml b/releasenotes/notes/get_compute_usage-01811dccd60dc92a.yaml new file mode 100644 index 0000000..7eaf869 --- /dev/null +++ b/releasenotes/notes/get_compute_usage-01811dccd60dc92a.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + cloud.get_compute_usage method return instance of compute.usage.Usage class + instead of munch. diff --git a/releasenotes/notes/get_object_api-968483adb016bce1.yaml b/releasenotes/notes/get_object_api-968483adb016bce1.yaml new file mode 100644 index 0000000..bc830d5 --- /dev/null +++ b/releasenotes/notes/get_object_api-968483adb016bce1.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added a new API call, OpenStackCloud.get_object(), to download objects from swift. diff --git a/releasenotes/notes/glance-image-pagination-0b4dfef22b25852b.yaml b/releasenotes/notes/glance-image-pagination-0b4dfef22b25852b.yaml new file mode 100644 index 0000000..3b134fc --- /dev/null +++ b/releasenotes/notes/glance-image-pagination-0b4dfef22b25852b.yaml @@ -0,0 +1,4 @@ +--- +issues: + - Fixed an issue where glance image list pagination was being ignored, + leading to truncated image lists. diff --git a/releasenotes/notes/glance-image-stores-2baa66e6743a2f2d.yaml b/releasenotes/notes/glance-image-stores-2baa66e6743a2f2d.yaml new file mode 100644 index 0000000..8721e1f --- /dev/null +++ b/releasenotes/notes/glance-image-stores-2baa66e6743a2f2d.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for specifying stores when doing glance image uploads. diff --git a/releasenotes/notes/global-request-id-d7c0736f43929165.yaml b/releasenotes/notes/global-request-id-d7c0736f43929165.yaml new file mode 100644 index 0000000..b2677a0 --- /dev/null +++ b/releasenotes/notes/global-request-id-d7c0736f43929165.yaml @@ -0,0 +1,11 @@ +--- +features: + - | + Added support for setting ``global_request_id`` on a ``Connection``. + If done, this will cause all requests sent to send the request id + header to the OpenStack services. Since ``Connection`` can otherwise + be used multi-threaded, add a method ``global_request`` that returns + a new ``Connection`` based on the old ``Connection`` but on which + the new ``global_request_id`` has been set. Since a ``Connection`` + can be used as a context manager, this also means the ``global_request`` + method can be used in ``with`` statements. diff --git a/releasenotes/notes/grant-revoke-assignments-231d3f9596a1ae75.yaml b/releasenotes/notes/grant-revoke-assignments-231d3f9596a1ae75.yaml new file mode 100644 index 0000000..9776030 --- /dev/null +++ b/releasenotes/notes/grant-revoke-assignments-231d3f9596a1ae75.yaml @@ -0,0 +1,3 @@ +--- +features: + - add granting and revoking of roles from groups and users diff --git a/releasenotes/notes/identity-auth-url-f3ae8ef22d2bcab6.yaml b/releasenotes/notes/identity-auth-url-f3ae8ef22d2bcab6.yaml new file mode 100644 index 0000000..3009b09 --- /dev/null +++ b/releasenotes/notes/identity-auth-url-f3ae8ef22d2bcab6.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The ``auth_url`` will be used for the default value of + ``identity_endpoint_override`` in the absence of project or system-scope + information. This should simplify some actions such as listing available + projects. diff --git a/releasenotes/notes/image-flavor-by-name-54865b00ebbf1004.yaml b/releasenotes/notes/image-flavor-by-name-54865b00ebbf1004.yaml new file mode 100644 index 0000000..6548121 --- /dev/null +++ b/releasenotes/notes/image-flavor-by-name-54865b00ebbf1004.yaml @@ -0,0 +1,9 @@ +--- +features: + - The image and flavor parameters for create_server + now accept name in addition to id and dict. If given + as a name or id, shade will do a get_image or a + get_flavor to find the matching image or flavor. + If you have an id already and are not using any caching + and the extra lookup is annoying, passing the id in + as "dict(id='my-id')" will avoid the lookup. diff --git a/releasenotes/notes/image-from-volume-9acf7379f5995b5b.yaml b/releasenotes/notes/image-from-volume-9acf7379f5995b5b.yaml new file mode 100644 index 0000000..6461f5e --- /dev/null +++ b/releasenotes/notes/image-from-volume-9acf7379f5995b5b.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added ability to create an image from a volume. diff --git a/releasenotes/notes/image-id-filter-key-b9b6b52139a27cbe.yaml b/releasenotes/notes/image-id-filter-key-b9b6b52139a27cbe.yaml new file mode 100644 index 0000000..6b501bf --- /dev/null +++ b/releasenotes/notes/image-id-filter-key-b9b6b52139a27cbe.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + It is now possible to filter ``openstack.image.v2.Image`` resources by ID + using the ``id`` filter. While this is of little value when used with + single IDs, it can be useful when combined with operators like ``in:`` + to e.g. filter by multiple image IDs. diff --git a/releasenotes/notes/image-import-proxy-params-f19d8b6166104ebe.yaml b/releasenotes/notes/image-import-proxy-params-f19d8b6166104ebe.yaml new file mode 100644 index 0000000..56b59f4 --- /dev/null +++ b/releasenotes/notes/image-import-proxy-params-f19d8b6166104ebe.yaml @@ -0,0 +1,12 @@ +--- +features: + - | + The ``openstack.image.Image.import_image`` method and ``import_image`` + image proxy method now accept the following additional paramters: + + - ``remote_region`` + - ``remote_image_id`` + - ``remote_service_interface`` + + These are required to support the ``glance-download`` image import + method. diff --git a/releasenotes/notes/image-import-support-97052cdbc8ce449b.yaml b/releasenotes/notes/image-import-support-97052cdbc8ce449b.yaml new file mode 100644 index 0000000..707d92e --- /dev/null +++ b/releasenotes/notes/image-import-support-97052cdbc8ce449b.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Added support for using the image import feature when creating an + image. SDK will now fall back to using image import if there is an + error during PUT. diff --git a/releasenotes/notes/image-proxy-layer-kwarg-only-arguments-94c9b2033d386160.yaml b/releasenotes/notes/image-proxy-layer-kwarg-only-arguments-94c9b2033d386160.yaml new file mode 100644 index 0000000..882bd86 --- /dev/null +++ b/releasenotes/notes/image-proxy-layer-kwarg-only-arguments-94c9b2033d386160.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + The signatures of the ``openstack.image.v2.import_image`` has changed. All + arguments except ``image`` and ``method`` are now kwarg-only. diff --git a/releasenotes/notes/image-update-76bd3bf24c1c1380.yaml b/releasenotes/notes/image-update-76bd3bf24c1c1380.yaml new file mode 100644 index 0000000..47599e0 --- /dev/null +++ b/releasenotes/notes/image-update-76bd3bf24c1c1380.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + When using the Image API, it is no longer possible to set arbitrary + properties, not known to the SDK, via ``image.update_image`` API. diff --git a/releasenotes/notes/improve-metrics-5d7ce70ce4021d72.yaml b/releasenotes/notes/improve-metrics-5d7ce70ce4021d72.yaml new file mode 100644 index 0000000..86d2759 --- /dev/null +++ b/releasenotes/notes/improve-metrics-5d7ce70ce4021d72.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + API metrics emitted by OpenStackSDK to StatsD now contain status_code + part of the metric name in order to improve information precision. diff --git a/releasenotes/notes/infer-secgroup-source-58d840aaf1a1f485.yaml b/releasenotes/notes/infer-secgroup-source-58d840aaf1a1f485.yaml new file mode 100644 index 0000000..f3f35f4 --- /dev/null +++ b/releasenotes/notes/infer-secgroup-source-58d840aaf1a1f485.yaml @@ -0,0 +1,9 @@ +--- +features: + - If a cloud does not have a neutron service, it is now + assumed that Nova will be the source of security groups. + To handle clouds that have nova-network and do not have + the security group extension, setting secgroup_source to + None will prevent attempting to use them at all. If the + cloud has neutron but it is not a functional source of + security groups, set secgroup_source to nova. diff --git a/releasenotes/notes/introduce-source-and-destination-ip-prefixes-into-metering-label-rules-e04b797adac5d0d0.yaml b/releasenotes/notes/introduce-source-and-destination-ip-prefixes-into-metering-label-rules-e04b797adac5d0d0.yaml new file mode 100644 index 0000000..5de538b --- /dev/null +++ b/releasenotes/notes/introduce-source-and-destination-ip-prefixes-into-metering-label-rules-e04b797adac5d0d0.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add ``source_ip_prefix`` and ``destination_ip_prefix`` to Neutron metering + label rules. \ No newline at end of file diff --git a/releasenotes/notes/introspection-node-6a3b7d55839ef82c.yaml b/releasenotes/notes/introspection-node-6a3b7d55839ef82c.yaml new file mode 100644 index 0000000..4638e89 --- /dev/null +++ b/releasenotes/notes/introspection-node-6a3b7d55839ef82c.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fixes using a full `Node` object as an argument to `start_introspection`. diff --git a/releasenotes/notes/ironic-conductors-support-3bf27e8b2f0299ba.yaml b/releasenotes/notes/ironic-conductors-support-3bf27e8b2f0299ba.yaml new file mode 100644 index 0000000..e2aea13 --- /dev/null +++ b/releasenotes/notes/ironic-conductors-support-3bf27e8b2f0299ba.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Support for Ironic Conductor API. diff --git a/releasenotes/notes/ironic-deploy-steps-2c0f39d7d2a13289.yaml b/releasenotes/notes/ironic-deploy-steps-2c0f39d7d2a13289.yaml new file mode 100644 index 0000000..b6adb8c --- /dev/null +++ b/releasenotes/notes/ironic-deploy-steps-2c0f39d7d2a13289.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds ``deploy_steps`` to baremetal node provisioning. diff --git a/releasenotes/notes/ironic-deploy-template-support-fa56005365ed6e4d.yaml b/releasenotes/notes/ironic-deploy-template-support-fa56005365ed6e4d.yaml new file mode 100644 index 0000000..d8b13ea --- /dev/null +++ b/releasenotes/notes/ironic-deploy-template-support-fa56005365ed6e4d.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Support Deploy Templates for Ironic API \ No newline at end of file diff --git a/releasenotes/notes/ironic-introspection_rules_support-18b0488a76800122.yaml b/releasenotes/notes/ironic-introspection_rules_support-18b0488a76800122.yaml new file mode 100644 index 0000000..7aede06 --- /dev/null +++ b/releasenotes/notes/ironic-introspection_rules_support-18b0488a76800122.yaml @@ -0,0 +1,3 @@ +features: + - | + Add support for Ironic Inspector Introspection Rules API. diff --git a/releasenotes/notes/ironic-microversion-ba5b0f36f11196a6.yaml b/releasenotes/notes/ironic-microversion-ba5b0f36f11196a6.yaml new file mode 100644 index 0000000..62e3627 --- /dev/null +++ b/releasenotes/notes/ironic-microversion-ba5b0f36f11196a6.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for passing Ironic microversion to the ironicclient + constructor in get_legacy_client. diff --git a/releasenotes/notes/ironic-node-shard-35f2557c3dbfff1d.yaml b/releasenotes/notes/ironic-node-shard-35f2557c3dbfff1d.yaml new file mode 100644 index 0000000..d4e334f --- /dev/null +++ b/releasenotes/notes/ironic-node-shard-35f2557c3dbfff1d.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds support for Node shards to baremetal service. diff --git a/releasenotes/notes/ironic-volume_target-support-8130361804366787.yaml b/releasenotes/notes/ironic-volume_target-support-8130361804366787.yaml new file mode 100644 index 0000000..eed88c5 --- /dev/null +++ b/releasenotes/notes/ironic-volume_target-support-8130361804366787.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Support for Ironic Volume Target API. diff --git a/releasenotes/notes/ksa-discovery-86a4ef00d85ea87f.yaml b/releasenotes/notes/ksa-discovery-86a4ef00d85ea87f.yaml new file mode 100644 index 0000000..fa27dce --- /dev/null +++ b/releasenotes/notes/ksa-discovery-86a4ef00d85ea87f.yaml @@ -0,0 +1,5 @@ +--- +other: + - | + All endpoint discovery logic is now handled by keystoneauth. There should + be no behavior differences. diff --git a/releasenotes/notes/less-file-hashing-d2497337da5acbef.yaml b/releasenotes/notes/less-file-hashing-d2497337da5acbef.yaml new file mode 100644 index 0000000..4d0fd1a --- /dev/null +++ b/releasenotes/notes/less-file-hashing-d2497337da5acbef.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - shade will now only generate file hashes for glance + images if both hashes are empty. If only one is given, + the other will be treated as an empty string. diff --git a/releasenotes/notes/list-all_projects-filter-27f1d471a7848507.yaml b/releasenotes/notes/list-all_projects-filter-27f1d471a7848507.yaml new file mode 100644 index 0000000..cb90309 --- /dev/null +++ b/releasenotes/notes/list-all_projects-filter-27f1d471a7848507.yaml @@ -0,0 +1,33 @@ +--- +features: + - | + A number of APIs support passing an admin-only ``all_projects`` filter when + listing certain resources, allowing you to retrieve resources from all + projects rather than just the current projects. This filter is now + explicitly supported at the proxy layer for services and resources that + support it. These are: + + * Block storage (v2) + + * ``find_snapshot`` + * ``snapshots`` + * ``find_volume`` + * ``volumes`` + + * Block storage (v3) + + * ``find_snapshot`` + * ``snapshots`` + * ``find_volume`` + * ``volumes`` + + * Compute (v2) + + * ``find_server`` + * ``find_server_group`` + * ``server_groups`` + + * Workflow (v2) + + * ``find_cron_triggers`` + * ``cron_triggers`` diff --git a/releasenotes/notes/list-az-names-a38c277d1192471b.yaml b/releasenotes/notes/list-az-names-a38c277d1192471b.yaml new file mode 100644 index 0000000..7b49271 --- /dev/null +++ b/releasenotes/notes/list-az-names-a38c277d1192471b.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added list_availability_zone_names API call. diff --git a/releasenotes/notes/list-network-resources-empty-list-6aa760c01e7d97d7.yaml b/releasenotes/notes/list-network-resources-empty-list-6aa760c01e7d97d7.yaml new file mode 100644 index 0000000..2c7be2c --- /dev/null +++ b/releasenotes/notes/list-network-resources-empty-list-6aa760c01e7d97d7.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Basic networking list calls in the cloud layer been fixed to return + an empty list if neutron is not running. diff --git a/releasenotes/notes/list-role-assignments-keystone-v2-b127b12b4860f50c.yaml b/releasenotes/notes/list-role-assignments-keystone-v2-b127b12b4860f50c.yaml new file mode 100644 index 0000000..df0d96b --- /dev/null +++ b/releasenotes/notes/list-role-assignments-keystone-v2-b127b12b4860f50c.yaml @@ -0,0 +1,3 @@ +--- +features: + - Implement list_role_assignments for keystone v2, using roles_for_user. diff --git a/releasenotes/notes/list-servers-all-projects-349e6dc665ba2e8d.yaml b/releasenotes/notes/list-servers-all-projects-349e6dc665ba2e8d.yaml new file mode 100644 index 0000000..c993d2d --- /dev/null +++ b/releasenotes/notes/list-servers-all-projects-349e6dc665ba2e8d.yaml @@ -0,0 +1,6 @@ +--- +features: + - Add 'all_projects' parameter to list_servers and + search_servers which will tell Nova to return servers for all projects + rather than just for the current project. This is only available to + cloud admins. diff --git a/releasenotes/notes/load-yaml-3177efca78e5c67a.yaml b/releasenotes/notes/load-yaml-3177efca78e5c67a.yaml new file mode 100644 index 0000000..2438f83 --- /dev/null +++ b/releasenotes/notes/load-yaml-3177efca78e5c67a.yaml @@ -0,0 +1,7 @@ +--- +features: + - Added a flag, 'load_yaml_config' that defaults to True. + If set to false, no clouds.yaml files will be loaded. This + is beneficial if os-client-config wants to be used inside of + a service where end-user clouds.yaml files would make things + more confusing. diff --git a/releasenotes/notes/location-server-resource-af77fdab5d35d421.yaml b/releasenotes/notes/location-server-resource-af77fdab5d35d421.yaml new file mode 100644 index 0000000..d548881 --- /dev/null +++ b/releasenotes/notes/location-server-resource-af77fdab5d35d421.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Corrected the location property on the ``Server`` resource to + use the ``project_id`` from the remote resource rather than the + information from the token of the user. diff --git a/releasenotes/notes/log-request-ids-37507cb6eed9a7da.yaml b/releasenotes/notes/log-request-ids-37507cb6eed9a7da.yaml new file mode 100644 index 0000000..6c81b77 --- /dev/null +++ b/releasenotes/notes/log-request-ids-37507cb6eed9a7da.yaml @@ -0,0 +1,5 @@ +--- +other: + - The contents of x-openstack-request-id are no longer + added to object returned. Instead, they are logged to + a logger named 'openstack.cloud.request_ids'. diff --git a/releasenotes/notes/machine-get-update-microversions-4b910e63cebd65e2.yaml b/releasenotes/notes/machine-get-update-microversions-4b910e63cebd65e2.yaml new file mode 100644 index 0000000..7c0f477 --- /dev/null +++ b/releasenotes/notes/machine-get-update-microversions-4b910e63cebd65e2.yaml @@ -0,0 +1,11 @@ +--- +features: + - | + The ``get_machine``, ``update_machine`` and ``patch_machine`` calls now + support all Bare Metal API microversions supported by the SDK. Previously + they used 1.6 unconditionally. +upgrade: + - | + The baremetal API now returns ``available`` as provision state for nodes + available for deployment. Previously, ``None`` could be returned for API + version 1.1 (early Kilo) and older. diff --git a/releasenotes/notes/magic-fixes-dca4ae4dac2441a8.yaml b/releasenotes/notes/magic-fixes-dca4ae4dac2441a8.yaml new file mode 100644 index 0000000..570e4dc --- /dev/null +++ b/releasenotes/notes/magic-fixes-dca4ae4dac2441a8.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - Refactor ``OpenStackConfig._fix_backward_madness()`` into + ``OpenStackConfig.magic_fixes()`` that allows subclasses + to inject more fixup magic into the flow during + ``get_one_cloud()`` processing. diff --git a/releasenotes/notes/make-cloud-region-standalone-848a2c4b5f3ebc29.yaml b/releasenotes/notes/make-cloud-region-standalone-848a2c4b5f3ebc29.yaml new file mode 100644 index 0000000..d5745f4 --- /dev/null +++ b/releasenotes/notes/make-cloud-region-standalone-848a2c4b5f3ebc29.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Updated the ``openstack.config.cloud_config.CloudRegion`` object to be + able to store and retreive cache settings and the password callback object + without needing an ``openstack.config.loader.OpenStackConfig`` object. diff --git a/releasenotes/notes/make-rest-client-dd3d365632a26fa0.yaml b/releasenotes/notes/make-rest-client-dd3d365632a26fa0.yaml new file mode 100644 index 0000000..8e34e51 --- /dev/null +++ b/releasenotes/notes/make-rest-client-dd3d365632a26fa0.yaml @@ -0,0 +1,4 @@ +--- +deprecations: + - Renamed session_client to make_rest_client. session_client + will continue to be supported for backwards compatability. diff --git a/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml b/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml new file mode 100644 index 0000000..7326978 --- /dev/null +++ b/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml @@ -0,0 +1,6 @@ +--- +features: + - Add version argument to make_rest_client and plumb + version discovery through get_session_client so that + versioned endpoints are properly found if unversioned + are in the catalog. diff --git a/releasenotes/notes/make_object_metadata_easier.yaml-e9751723e002e06f.yaml b/releasenotes/notes/make_object_metadata_easier.yaml-e9751723e002e06f.yaml new file mode 100644 index 0000000..eaa7183 --- /dev/null +++ b/releasenotes/notes/make_object_metadata_easier.yaml-e9751723e002e06f.yaml @@ -0,0 +1,5 @@ +--- +features: + - create_object() now has a "metadata" parameter that can be used to create + an object with metadata of each key and value pair in that dictionary + - Add an update_object() function that updates the metadata of a swift object diff --git a/releasenotes/notes/merge-shade-os-client-config-29878734ad643e33.yaml b/releasenotes/notes/merge-shade-os-client-config-29878734ad643e33.yaml new file mode 100644 index 0000000..f7718aa --- /dev/null +++ b/releasenotes/notes/merge-shade-os-client-config-29878734ad643e33.yaml @@ -0,0 +1,4 @@ +--- +other: + - The shade and os-client-config libraries have been + merged into python-openstacksdk. diff --git a/releasenotes/notes/meta-passthrough-d695bff4f9366b65.yaml b/releasenotes/notes/meta-passthrough-d695bff4f9366b65.yaml new file mode 100644 index 0000000..13eb7ca --- /dev/null +++ b/releasenotes/notes/meta-passthrough-d695bff4f9366b65.yaml @@ -0,0 +1,7 @@ +--- +features: + - Added a parameter to create_image 'meta' which allows + for providing parameters to the API that will not have + any type conversions performed. For the simple case, + the existing kwargs approach to image metadata is still + the best bet. diff --git a/releasenotes/notes/metadata-key-name-bugfix-77612a825c5145d7.yaml b/releasenotes/notes/metadata-key-name-bugfix-77612a825c5145d7.yaml new file mode 100644 index 0000000..892fb85 --- /dev/null +++ b/releasenotes/notes/metadata-key-name-bugfix-77612a825c5145d7.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - Fixed a bug related to metadata's key name. An exception was + raised when setting it to "delete"," clear" or "key" diff --git a/releasenotes/notes/min-max-legacy-version-301242466ddefa93.yaml b/releasenotes/notes/min-max-legacy-version-301242466ddefa93.yaml new file mode 100644 index 0000000..30a3802 --- /dev/null +++ b/releasenotes/notes/min-max-legacy-version-301242466ddefa93.yaml @@ -0,0 +1,15 @@ +--- +features: + - Add min_version and max_version to get_legacy_client + and to get_session_endpoint. At the moment this is only + really fully plumbed through for cinder, which has extra + special fun around volume, volumev2 and volumev3. Min and max + versions to both methods will look through the options available + in the service catalog and try to return the latest one available + from the span of requested versions. This means a user can say + volume_api_version=None, min_version=2, max_version=3 will get + an endpoint from get_session_endpoint or a Client from cinderclient + that will be either v2 or v3 but not v1. In the future, min and max + version for get_session_endpoint should be able to sort out + appropriate endpoints via version discovery, but that does not + currently exist. diff --git a/releasenotes/notes/mtu-settings-8ce8b54d096580a2.yaml b/releasenotes/notes/mtu-settings-8ce8b54d096580a2.yaml new file mode 100644 index 0000000..4de74d6 --- /dev/null +++ b/releasenotes/notes/mtu-settings-8ce8b54d096580a2.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + create_network now exposes the mtu api option in accordance to network + v2 api. This allows the operator to adjust the given MTU value which + is needed in various complex network deployments. diff --git a/releasenotes/notes/multiple-updates-b48cc2f6db2e526d.yaml b/releasenotes/notes/multiple-updates-b48cc2f6db2e526d.yaml new file mode 100644 index 0000000..5df3f6d --- /dev/null +++ b/releasenotes/notes/multiple-updates-b48cc2f6db2e526d.yaml @@ -0,0 +1,14 @@ +--- +features: + - Removed unneeded calls that were made when deleting servers with + floating ips. + - Added pagination support for volume listing. +upgrade: + - Removed designateclient as a dependency. All designate operations + are now performed with direct REST calls using keystoneauth + Adapter. + - Server creation calls are now done with direct REST calls. +fixes: + - Fixed a bug related to neutron endpoints that did not have trailing + slashes. + - Fixed issue with ports not having a created_at attribute. diff --git a/releasenotes/notes/munch-sub-dict-e1619c71c26879cb.yaml b/releasenotes/notes/munch-sub-dict-e1619c71c26879cb.yaml new file mode 100644 index 0000000..2fc59a2 --- /dev/null +++ b/releasenotes/notes/munch-sub-dict-e1619c71c26879cb.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed a regression with sub-dicts of server objects + were not usable with object notation. diff --git a/releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml b/releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml new file mode 100644 index 0000000..3341c9f --- /dev/null +++ b/releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml @@ -0,0 +1,6 @@ +--- +features: + - Added nat_source flag for networks. In some more complex clouds there + can not only be more than one valid network on a server that NAT can + attach to, there can also be more than one valid network from which to + get a NAT address. Allow flagging a network so that it can be found. diff --git a/releasenotes/notes/nat-source-support-92aaf6b336d0b848.yaml b/releasenotes/notes/nat-source-support-92aaf6b336d0b848.yaml new file mode 100644 index 0000000..efd8713 --- /dev/null +++ b/releasenotes/notes/nat-source-support-92aaf6b336d0b848.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for networks being configured as the + primary nat_source in clouds.yaml. diff --git a/releasenotes/notes/net_provider-dd64b697476b7094.yaml b/releasenotes/notes/net_provider-dd64b697476b7094.yaml new file mode 100644 index 0000000..65a0073 --- /dev/null +++ b/releasenotes/notes/net_provider-dd64b697476b7094.yaml @@ -0,0 +1,3 @@ +--- +features: + - Network provider options are now accepted in create_network(). diff --git a/releasenotes/notes/network-data-bd94e4a499ba3e0d.yaml b/releasenotes/notes/network-data-bd94e4a499ba3e0d.yaml new file mode 100644 index 0000000..22e5bd7 --- /dev/null +++ b/releasenotes/notes/network-data-bd94e4a499ba3e0d.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixes ``openstack.baremetal.configdrive.build`` to actually handle the + ``network_data`` argument. diff --git a/releasenotes/notes/network-data-deb5772edc111428.yaml b/releasenotes/notes/network-data-deb5772edc111428.yaml new file mode 100644 index 0000000..3cd9e2d --- /dev/null +++ b/releasenotes/notes/network-data-deb5772edc111428.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Adds support for `network_data + <https://specs.openstack.org/openstack/nova-specs/specs/liberty/implemented/metadata-service-network-info.html>`_ + when building baremetal configdrives. diff --git a/releasenotes/notes/network-list-e6e9dafdd8446263.yaml b/releasenotes/notes/network-list-e6e9dafdd8446263.yaml new file mode 100644 index 0000000..8f793c2 --- /dev/null +++ b/releasenotes/notes/network-list-e6e9dafdd8446263.yaml @@ -0,0 +1,10 @@ +--- +features: + - Support added for configuring metadata about networks + for a cloud in a list of dicts, rather than in the + external_network and internal_network entries. The dicts + support a name, a routes_externally field, a nat_destination + field and a default_interface field. +deprecations: + - external_network and internal_network are deprecated and + should be replaced with the list of network dicts. diff --git a/releasenotes/notes/network-qos-rule-filter-keys-324e3222510fd362.yaml b/releasenotes/notes/network-qos-rule-filter-keys-324e3222510fd362.yaml new file mode 100644 index 0000000..28b35a1 --- /dev/null +++ b/releasenotes/notes/network-qos-rule-filter-keys-324e3222510fd362.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Added two filtering keys to ``QoSRuleType`` class query mapping, used for + filtering the "list" command: "all_rules", to list all network QoS rule + types implemented in Neutron, and "all_supported", to list all network QoS + rule types supported by at least one networking mechanism driver. diff --git a/releasenotes/notes/network-quotas-b98cce9ffeffdbf4.yaml b/releasenotes/notes/network-quotas-b98cce9ffeffdbf4.yaml new file mode 100644 index 0000000..a58cbea --- /dev/null +++ b/releasenotes/notes/network-quotas-b98cce9ffeffdbf4.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add new APIs, OperatorCloud.get_network_quotas(), OperatorCloud.set_network_quotas() and OperatorCloud.delete_network_quotas() to manage neutron quotas for projects and users \ No newline at end of file diff --git a/releasenotes/notes/network-security-group-query-parameter-id-f6dda45b2c09dbaa.yaml b/releasenotes/notes/network-security-group-query-parameter-id-f6dda45b2c09dbaa.yaml new file mode 100644 index 0000000..5b0db68 --- /dev/null +++ b/releasenotes/notes/network-security-group-query-parameter-id-f6dda45b2c09dbaa.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + The ``id`` field was added a query parameter for security_groups. A single + security group id, or a list of security group ids can be passed. For + example:: + + conn.network.security_groups(id=['f959e85a-1a87-4b5c-ae56-dc917ceeb584', + 'a55c0100-7ded-40af-9c61-1d1b9a9c2692']) diff --git a/releasenotes/notes/network_add_bgp_resources-c182dc2873d6db18.yaml b/releasenotes/notes/network_add_bgp_resources-c182dc2873d6db18.yaml new file mode 100644 index 0000000..5356c77 --- /dev/null +++ b/releasenotes/notes/network_add_bgp_resources-c182dc2873d6db18.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + Add BGP Speaker and BGP Peer resources, and introduce support for CRUD + operations for these. Additional REST operations introduced for speakers: + add_bgp_peer, remove_bgp_peer, add_gateway_network, remove_gateway_network, + get_advertised_routes, get_bgp_dragents, add_bgp_speaker_to_draget, + remove_bgp_speaker_from_dragent. + One new REST method is added to agents to cover the features + of Dynamic Routing Agents schedulers: get_bgp_speakers_hosted_by_dragent diff --git a/releasenotes/notes/network_add_bgpvpn_resources-b3bd0b568c3c99db.yaml b/releasenotes/notes/network_add_bgpvpn_resources-b3bd0b568c3c99db.yaml new file mode 100644 index 0000000..daa777f --- /dev/null +++ b/releasenotes/notes/network_add_bgpvpn_resources-b3bd0b568c3c99db.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add BGPVPN, BGPVPN Network Association, BGPVPN Port Association, + and BGPVPN Router Association resources and introduce support + for CRUD operations for these. + diff --git a/releasenotes/notes/network_add_sfc_resources-8a52c0c8c1f8e932.yaml b/releasenotes/notes/network_add_sfc_resources-8a52c0c8c1f8e932.yaml new file mode 100644 index 0000000..382257b --- /dev/null +++ b/releasenotes/notes/network_add_sfc_resources-8a52c0c8c1f8e932.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Add SFC resources: FlowClassifier, PortChain, PortPair, PortPairGroup + and ServiceGraph resources and introduce support for CRUD operations + for these. diff --git a/releasenotes/notes/network_add_taas_resources-86a947265e11ce84.yaml b/releasenotes/notes/network_add_taas_resources-86a947265e11ce84.yaml new file mode 100644 index 0000000..54fb373 --- /dev/null +++ b/releasenotes/notes/network_add_taas_resources-86a947265e11ce84.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add ``Tap Service`` and ``Tap Flow`` resources, and introduce support for + CRUD operations for these. diff --git a/releasenotes/notes/neutron-discovery-54399116d5f810ee.yaml b/releasenotes/notes/neutron-discovery-54399116d5f810ee.yaml new file mode 100644 index 0000000..e102a1e --- /dev/null +++ b/releasenotes/notes/neutron-discovery-54399116d5f810ee.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Added workaround for using neutron on older clouds where the version + discovery document requires auth. diff --git a/releasenotes/notes/neutron_availability_zone_extension-675c2460ebb50a09.yaml b/releasenotes/notes/neutron_availability_zone_extension-675c2460ebb50a09.yaml new file mode 100644 index 0000000..058f40b --- /dev/null +++ b/releasenotes/notes/neutron_availability_zone_extension-675c2460ebb50a09.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + ``availability_zone_hints`` now accepted for ``create_network()`` when + ``network_availability_zone`` extension is enabled on target cloud. + - | + ``availability_zone_hints`` now accepted for ``create_router()`` when + ``router_availability_zone`` extension is enabled on target cloud. diff --git a/releasenotes/notes/new-floating-attributes-213cdf5681d337e1.yaml b/releasenotes/notes/new-floating-attributes-213cdf5681d337e1.yaml new file mode 100644 index 0000000..61f4ec1 --- /dev/null +++ b/releasenotes/notes/new-floating-attributes-213cdf5681d337e1.yaml @@ -0,0 +1,4 @@ +--- +features: + - Added support for created_at, updated_at, description + and revision_number attributes for floating ips. diff --git a/releasenotes/notes/no-import-fallback-a09b5d5a11299933.yaml b/releasenotes/notes/no-import-fallback-a09b5d5a11299933.yaml new file mode 100644 index 0000000..6f897a3 --- /dev/null +++ b/releasenotes/notes/no-import-fallback-a09b5d5a11299933.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + Image upload will no longer fall back to attempting to use + the import workflow if the initial upload does not work. diff --git a/releasenotes/notes/no-inspect-associated-563e272785bb6016.yaml b/releasenotes/notes/no-inspect-associated-563e272785bb6016.yaml new file mode 100644 index 0000000..c2faab6 --- /dev/null +++ b/releasenotes/notes/no-inspect-associated-563e272785bb6016.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Machine inspection is now blocked for machines associated with an instance. + This is to avoid "stealing" a machine from under a provisioner (e.g. Nova). diff --git a/releasenotes/notes/no-more-troveclient-0a4739c21432ac63.yaml b/releasenotes/notes/no-more-troveclient-0a4739c21432ac63.yaml new file mode 100644 index 0000000..1096921 --- /dev/null +++ b/releasenotes/notes/no-more-troveclient-0a4739c21432ac63.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - troveclient is no longer a hard dependency. Users + who were using shade to construct a troveclient + Client object should use os_client_config.make_legacy_client + instead. diff --git a/releasenotes/notes/no-start-task-manager-56773f3ea5eb3a59.yaml b/releasenotes/notes/no-start-task-manager-56773f3ea5eb3a59.yaml new file mode 100644 index 0000000..e40507d --- /dev/null +++ b/releasenotes/notes/no-start-task-manager-56773f3ea5eb3a59.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixed a regression in the new `TaskManager` code which caused programs that + were passing in a `TaskManager` that they had been running `start` on to + fail due to a double call. diff --git a/releasenotes/notes/node-boot-devices-2ab4991d75a2ab52.yaml b/releasenotes/notes/node-boot-devices-2ab4991d75a2ab52.yaml new file mode 100644 index 0000000..c568d9e --- /dev/null +++ b/releasenotes/notes/node-boot-devices-2ab4991d75a2ab52.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Adds ``get_boot_device`` and ``get_supported_boot_devices`` to + ``openstack.baremetal.v1.Node``. + - | + Adds ``get_node_boot_device`` and ``get_node_supported_boot_devices`` + to the baremetal Proxy. diff --git a/releasenotes/notes/node-consoles-63589f22da98a689.yaml b/releasenotes/notes/node-consoles-63589f22da98a689.yaml new file mode 100644 index 0000000..95a2451 --- /dev/null +++ b/releasenotes/notes/node-consoles-63589f22da98a689.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Adds ``get_console`` and ``set_console_state`` to + ``openstack.baremetal.v1.Node``. + - | + Adds ``get_node_console``, ``enable_node_console`` and + ``disable_node_console`` to the baremetal Proxy. diff --git a/releasenotes/notes/node-create-027ea99193f344ef.yaml b/releasenotes/notes/node-create-027ea99193f344ef.yaml new file mode 100644 index 0000000..3f74ff2 --- /dev/null +++ b/releasenotes/notes/node-create-027ea99193f344ef.yaml @@ -0,0 +1,9 @@ +--- +upgrade: + - | + Changes the baremetal ``create_node`` call to be closer to how Ironic + behaves. If no provision state is requested, the default state of the + current microversion is used (which usually means ``enroll``). + If the ``available`` state is requested, the node does not go through + cleaning (it won't work without creating ports), an old API version is + used to achieve this provision state. diff --git a/releasenotes/notes/node-inject-nmi-53d12681026e0b6c.yaml b/releasenotes/notes/node-inject-nmi-53d12681026e0b6c.yaml new file mode 100644 index 0000000..41f0654 --- /dev/null +++ b/releasenotes/notes/node-inject-nmi-53d12681026e0b6c.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Adds ``inject_nmi`` ``openstack.baremetal.v1.Node``. + - | + Adds ``inject_nmi_to_node`` to the baremetal Proxy. diff --git a/releasenotes/notes/node-owner-7f4b083ff9da8cce.yaml b/releasenotes/notes/node-owner-7f4b083ff9da8cce.yaml new file mode 100644 index 0000000..88fb5f3 --- /dev/null +++ b/releasenotes/notes/node-owner-7f4b083ff9da8cce.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The ``openstack.baremetal.v1.Node`` resource now has an ``owner`` property + which was added in the baremetal API `microversion 1.50`_. + + .. _microversion 1.50: https://docs.openstack.org/ironic/latest/contributor/webapi-version-history.html#id7 diff --git a/releasenotes/notes/node-set-provision-state-3472cbd81c47458f.yaml b/releasenotes/notes/node-set-provision-state-3472cbd81c47458f.yaml new file mode 100644 index 0000000..f75f6df --- /dev/null +++ b/releasenotes/notes/node-set-provision-state-3472cbd81c47458f.yaml @@ -0,0 +1,11 @@ +--- +features: + - | + Adds ``set_provision_state`` and ``wait_for_provision_state`` to + ``openstack.baremetal.v1.Node``. + - | + Adds ``node_set_provision_state`` and ``wait_for_nodes_provision_state`` + to the baremetal Proxy. + - | + The ``node_set_provision_state`` call now supports provision states + up to the Queens release. diff --git a/releasenotes/notes/norm_role_assignments-a13f41768e62d40c.yaml b/releasenotes/notes/norm_role_assignments-a13f41768e62d40c.yaml new file mode 100644 index 0000000..39ee276 --- /dev/null +++ b/releasenotes/notes/norm_role_assignments-a13f41768e62d40c.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - Role assignments were being returned as plain dicts instead of Munch objects. + This has been corrected. diff --git a/releasenotes/notes/normalize-images-1331bea7bfffa36a.yaml b/releasenotes/notes/normalize-images-1331bea7bfffa36a.yaml new file mode 100644 index 0000000..bbe2dfb --- /dev/null +++ b/releasenotes/notes/normalize-images-1331bea7bfffa36a.yaml @@ -0,0 +1,6 @@ +--- +features: + - Image dicts that are returned are now normalized across glance v1 + and glance v2. Extra key/value properties are now both in the root + dict and in a properties dict. Additionally, cloud and region have + been added like they are for server. diff --git a/releasenotes/notes/normalize-machine-290d9f2a3b3a7ef0.yaml b/releasenotes/notes/normalize-machine-290d9f2a3b3a7ef0.yaml new file mode 100644 index 0000000..04b36e4 --- /dev/null +++ b/releasenotes/notes/normalize-machine-290d9f2a3b3a7ef0.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fixes normalization of bare metal machines in the ``patch_machine`` call. diff --git a/releasenotes/notes/nova-flavor-to-rest-0a5757e35714a690.yaml b/releasenotes/notes/nova-flavor-to-rest-0a5757e35714a690.yaml new file mode 100644 index 0000000..1e1f501 --- /dev/null +++ b/releasenotes/notes/nova-flavor-to-rest-0a5757e35714a690.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - Nova flavor operations are now handled via REST calls + instead of via novaclient. There should be no noticable + difference. diff --git a/releasenotes/notes/nova-old-microversion-5e4b8e239ba44096.yaml b/releasenotes/notes/nova-old-microversion-5e4b8e239ba44096.yaml new file mode 100644 index 0000000..013ed82 --- /dev/null +++ b/releasenotes/notes/nova-old-microversion-5e4b8e239ba44096.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - Nova microversion is being requested. Since shade is not yet + actively microversion aware, but has been dealing with the 2.0 structures + anyway, this should not affect anyone. diff --git a/releasenotes/notes/object-checksum-generation-ea1c1e47d2290054.yaml b/releasenotes/notes/object-checksum-generation-ea1c1e47d2290054.yaml new file mode 100644 index 0000000..e27a873 --- /dev/null +++ b/releasenotes/notes/object-checksum-generation-ea1c1e47d2290054.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add flag for disabling object checksum generation + diff --git a/releasenotes/notes/object-chunked-data-ee619b7d4759b8d2.yaml b/releasenotes/notes/object-chunked-data-ee619b7d4759b8d2.yaml new file mode 100644 index 0000000..99c317a --- /dev/null +++ b/releasenotes/notes/object-chunked-data-ee619b7d4759b8d2.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixed an issue where passing an iterator to the ``data`` parameter of + ``create_object`` for chunked uploads failed due to attempting to + calculate the length of the data. diff --git a/releasenotes/notes/object-search-a5f5ec4b2df3e045.yaml b/releasenotes/notes/object-search-a5f5ec4b2df3e045.yaml new file mode 100644 index 0000000..1ac05e9 --- /dev/null +++ b/releasenotes/notes/object-search-a5f5ec4b2df3e045.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Objects are now searchable both with a JMESPath expression or a dict of + object attributes via the + ``openstack.connection.Connection.search_object`` function. diff --git a/releasenotes/notes/old-placement-4b3c34abb8fe7b81.yaml b/releasenotes/notes/old-placement-4b3c34abb8fe7b81.yaml new file mode 100644 index 0000000..402e873 --- /dev/null +++ b/releasenotes/notes/old-placement-4b3c34abb8fe7b81.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Workaround an issue using openstacksdk with older versions of + the placement service that are missing a status field in + their version discovery doc. diff --git a/releasenotes/notes/optimize-server-console-1d27c107b9a1cdc3.yaml b/releasenotes/notes/optimize-server-console-1d27c107b9a1cdc3.yaml new file mode 100644 index 0000000..9cb44b4 --- /dev/null +++ b/releasenotes/notes/optimize-server-console-1d27c107b9a1cdc3.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Optimizes compute server console creation by adding older + get_server_console method to the server and create_console proxy method + calling appropriate method depending on the supported microversion. diff --git a/releasenotes/notes/option-precedence-1fecab21fdfb2c33.yaml b/releasenotes/notes/option-precedence-1fecab21fdfb2c33.yaml new file mode 100644 index 0000000..06e6bd2 --- /dev/null +++ b/releasenotes/notes/option-precedence-1fecab21fdfb2c33.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - Reverse the order of option selction in + ``OpenStackConfig._validate_auth()`` to prefer auth options + passed in (from argparse) over those found in clouds.yaml. + This allows the application to override config profile + auth settings. diff --git a/releasenotes/notes/port-device-profile-af91e25c45321691.yaml b/releasenotes/notes/port-device-profile-af91e25c45321691.yaml new file mode 100644 index 0000000..e6abf24 --- /dev/null +++ b/releasenotes/notes/port-device-profile-af91e25c45321691.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add ``device_profile`` attribute to ``port`` resource. This parameter + can be define during the port creation. This parameter is nullable string. diff --git a/releasenotes/notes/power-wait-751083852f958cb4.yaml b/releasenotes/notes/power-wait-751083852f958cb4.yaml new file mode 100644 index 0000000..359f1d3 --- /dev/null +++ b/releasenotes/notes/power-wait-751083852f958cb4.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Support waiting for bare metal power states. diff --git a/releasenotes/notes/project-cleanup-exclude-option-65cba962eaa5b61a.yaml b/releasenotes/notes/project-cleanup-exclude-option-65cba962eaa5b61a.yaml new file mode 100644 index 0000000..17516d5 --- /dev/null +++ b/releasenotes/notes/project-cleanup-exclude-option-65cba962eaa5b61a.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Project cleanup now supports skipping specific resources, + which will be kept as-is. Resource names are based on the + resource registry names, e. g. "block_storage.volume". diff --git a/releasenotes/notes/project-cleanup-swift-f67615e5c3ab8fd8.yaml b/releasenotes/notes/project-cleanup-swift-f67615e5c3ab8fd8.yaml new file mode 100644 index 0000000..8e62029 --- /dev/null +++ b/releasenotes/notes/project-cleanup-swift-f67615e5c3ab8fd8.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Project cleanup now supports cleaning Swift (object-store). If supported + by the server bulk deletion is used. Currently only filtering based on + updated_at (last_modified) is supported. diff --git a/releasenotes/notes/provision-state-negotiation-0155b4d0e932054c.yaml b/releasenotes/notes/provision-state-negotiation-0155b4d0e932054c.yaml new file mode 100644 index 0000000..3656cf9 --- /dev/null +++ b/releasenotes/notes/provision-state-negotiation-0155b4d0e932054c.yaml @@ -0,0 +1,12 @@ +--- +fixes: + - | + Fixes API version negotiation in the following bare metal node calls: + + * ``set_node_provision_state`` + * ``set_node_power_state`` + * ``patch_node`` + + Previously an unexpectingly low version could be negotiated, breaking + certain features, for example calling the ``provide`` provisioning action + with a node name. diff --git a/releasenotes/notes/python-3.5-629817cec092d528.yaml b/releasenotes/notes/python-3.5-629817cec092d528.yaml new file mode 100644 index 0000000..472ef33 --- /dev/null +++ b/releasenotes/notes/python-3.5-629817cec092d528.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + openstacksdk does not test or support python2 as of 0.40, + but the releases have still accidentally worked (except for + 0.44 which was broken for python2). We're now explicitly + marking releases as requiring >= 3.5 so that things don't + attempt to install something that's bound to be broken. diff --git a/releasenotes/notes/qos-min-pps-rule-52df1b150b1d3f68.yaml b/releasenotes/notes/qos-min-pps-rule-52df1b150b1d3f68.yaml new file mode 100644 index 0000000..dfa95c7 --- /dev/null +++ b/releasenotes/notes/qos-min-pps-rule-52df1b150b1d3f68.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added QoS minimum packet rate rule object and introduced support for CRUD + operations. diff --git a/releasenotes/notes/qos-port-network-policy-cab43faa0f8bc036.yaml b/releasenotes/notes/qos-port-network-policy-cab43faa0f8bc036.yaml new file mode 100644 index 0000000..e472ddf --- /dev/null +++ b/releasenotes/notes/qos-port-network-policy-cab43faa0f8bc036.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + ``qos_network_policy_id`` attribute support has been added to the network + port resource diff --git a/releasenotes/notes/r1-cab94ae7d749a1ec.yaml b/releasenotes/notes/r1-cab94ae7d749a1ec.yaml new file mode 100644 index 0000000..3f429a3 --- /dev/null +++ b/releasenotes/notes/r1-cab94ae7d749a1ec.yaml @@ -0,0 +1,31 @@ +--- +prelude: > + This is a first major release of OpenStackSDK. + + From now on interface can be considered stable and will also in future + strictly follow SemVer model. This release includes work in ensuring + methods and attribute naming are consistent across the code basis and first + steps in implementing even more generalizations in the processing logic. + + Microversion support is now considered as stable and session will be + established with the highest version supported by both client and server. +upgrade: + - | + This release includes work in enforcing consistency of the cloud layer + methods. Now they all return SDK resource objects where previously Munch + objects could have been returned. This leads to few important facts: + + - Return object types of various cloud.XXX calls now rely on proxy layer + functions and strictly return SDK resources. + - Some attributes of various resources may be named differently to + follow SDK attribute naming convention. + - Returned objects may forbid setting attributes (read-only attributes). + + Mentioned changes are affecting Ansible modules (which rely on + OpenStackSDK). Historically Ansible modules return to the Ansible engine + whatever SDK returns to it. Under some conditions Ansible may decide to + unset properties (if it decides it contain sensitive information). While + this is correct SDK forbids setting of some attributes what leads to + errors. This release is therefore marking incompatibility with OpenStack + Ansible modules in R1.X.X and the work on fixing it is being done in + R2.X.X of modules repository. diff --git a/releasenotes/notes/r1-d4efe289ebf0cbcd.yaml b/releasenotes/notes/r1-d4efe289ebf0cbcd.yaml new file mode 100644 index 0000000..c2e79ad --- /dev/null +++ b/releasenotes/notes/r1-d4efe289ebf0cbcd.yaml @@ -0,0 +1,40 @@ +--- +prelude: > + This is a final R1.0 release of the OpenStackSDK. A few technical issues + caused us not to reach this milestone cleanly, therefore we decided to one + more time explicitly log everything what should be considered as R1.0. For + detailed list of changes please see individual release notes from 0.99.0 to + 0.103.0. Most important changes are explicitly repeated here. There were + issues with maintainability of multiple available access interfaces, which + forced us to consider what we are able to maintain in the long run and what + we can not. That means that certain things were dropped, which is why we + are releasing this as a major release. R1.0 is considered as a first major + release with corresponding promise regarding backwards-compatibility. +features: + - | + Cloud layer is now consistently returning ``Resource`` class objects. + Previously this was not always the case. + - | + API response caching is implemented deep inside the code which will + minimize roundtrips for repeated requests. + - | + The majority of services were verified and adapted to the latest state of + the API. + - | + Certain code reorganization to further help in code reduction has been made + (metadata, tag and quota support moved to standalone common classes). +upgrade: + - | + Cloud layer methods are returning ``Resource`` class objects instead of + ``Munch`` objects. In some cases this cause renaming of the attributes. + ``Resource`` class is ``Munch`` compatible and allows both dictionary and + attribute base access. + - | + Some historical methods, which were never properly tested were dropped. +deprecations: + - | + ``Munch`` is dropped as a dependency. The project has no releases since + multiple years and was causing huge performance impact already during + import. This has directly no negative imapct to SDK users (it now starts + faster), but in the code we copied used ``Munch`` pieces. They are going to + be consistently eliminated in next releases. diff --git a/releasenotes/notes/rackspace-block-storage-v2-fe0dd69b9e037599.yaml b/releasenotes/notes/rackspace-block-storage-v2-fe0dd69b9e037599.yaml new file mode 100644 index 0000000..e6b81f9 --- /dev/null +++ b/releasenotes/notes/rackspace-block-storage-v2-fe0dd69b9e037599.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + Rackspace Cloud's vendor profile has been updated to use v2 + of the Block Storage API. This introduces an endpoint override + for the service based on ``region_name`` and ``project_id``. diff --git a/releasenotes/notes/register-machine-72ac3e65a1ed55b1.yaml b/releasenotes/notes/register-machine-72ac3e65a1ed55b1.yaml new file mode 100644 index 0000000..ba1eaac --- /dev/null +++ b/releasenotes/notes/register-machine-72ac3e65a1ed55b1.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + The default behavior of the ``register_machine`` call has been modified to + run cleaning by default, if enabled in Ironic. You can pass + ``provision_state="enroll"/"manageable"`` to avoid it. diff --git a/releasenotes/notes/remote-address-group-id-6291816888cb3de7.yaml b/releasenotes/notes/remote-address-group-id-6291816888cb3de7.yaml new file mode 100644 index 0000000..e1ce095 --- /dev/null +++ b/releasenotes/notes/remote-address-group-id-6291816888cb3de7.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixes a regression sending an unsupported field + ``remote_address_group_id`` when creating security groups with an + older Neutron (introduced 0.53.0). diff --git a/releasenotes/notes/remote-profile-100218d08b25019d.yaml b/releasenotes/notes/remote-profile-100218d08b25019d.yaml new file mode 100644 index 0000000..5cfe09d --- /dev/null +++ b/releasenotes/notes/remote-profile-100218d08b25019d.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Vendor profiles can now be fetched from an RFC 5785 compliant URL on a + cloud, namely, ``https://example.com/.well-known/openstack/api``. A cloud + can manage their own vendor profile and serve it from that URL, allowing + a user to simply list ``https://example.com`` as the profile name. diff --git a/releasenotes/notes/remove-auto-container-527f1807605b42c0.yaml b/releasenotes/notes/remove-auto-container-527f1807605b42c0.yaml new file mode 100644 index 0000000..ef36ff6 --- /dev/null +++ b/releasenotes/notes/remove-auto-container-527f1807605b42c0.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + ``openstack.connection.Connection.create_object`` no longer creates + a container if one doesn't exist. It is the user's responsibility to + create a container before using it. diff --git a/releasenotes/notes/remove-block-store-details-classes-158ab1f46655320a.yaml b/releasenotes/notes/remove-block-store-details-classes-158ab1f46655320a.yaml new file mode 100644 index 0000000..b53b6b1 --- /dev/null +++ b/releasenotes/notes/remove-block-store-details-classes-158ab1f46655320a.yaml @@ -0,0 +1,6 @@ +--- +deprecations: + - | + Requesting volumes or backups with details from block_storage will return + objects of classes Volume and Backup correspondingly, instead + of VolumeDetail and BackupDetail. diff --git a/releasenotes/notes/remove-cloud-caching-layer-2b0384870a45e8a3.yaml b/releasenotes/notes/remove-cloud-caching-layer-2b0384870a45e8a3.yaml new file mode 100644 index 0000000..e8f60b0 --- /dev/null +++ b/releasenotes/notes/remove-cloud-caching-layer-2b0384870a45e8a3.yaml @@ -0,0 +1,7 @@ +--- +upgrade: + - | + The cloud-layer caching functionality has been removed in favour of the + proxy-layer caching functionality first introduced in openstacksdk 1.0.0. + This migration to proxy-layer caching was designed to be transparent to + end-users and there should be no user-facing impact from this removal. diff --git a/releasenotes/notes/remove-magnumclient-875b3e513f98f57c.yaml b/releasenotes/notes/remove-magnumclient-875b3e513f98f57c.yaml new file mode 100644 index 0000000..249d172 --- /dev/null +++ b/releasenotes/notes/remove-magnumclient-875b3e513f98f57c.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - magnumclient is no longer a direct dependency as + magnum API calls are now made directly via REST. diff --git a/releasenotes/notes/remove-metric-fe5ddfd52b43c852.yaml b/releasenotes/notes/remove-metric-fe5ddfd52b43c852.yaml new file mode 100644 index 0000000..971c4e2 --- /dev/null +++ b/releasenotes/notes/remove-metric-fe5ddfd52b43c852.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + Removed the metric service. It is not an OpenStack service and does not + have an entry in service-types-authority. diff --git a/releasenotes/notes/remove-novaclient-3f8d4db20d5f9582.yaml b/releasenotes/notes/remove-novaclient-3f8d4db20d5f9582.yaml new file mode 100644 index 0000000..27db18c --- /dev/null +++ b/releasenotes/notes/remove-novaclient-3f8d4db20d5f9582.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - All Nova interactions are done via direct REST calls. + python-novaclient is no longer a direct dependency of + openstack.cloud. diff --git a/releasenotes/notes/remove-serverdetails-resource-f66cb278b224627d.yaml b/releasenotes/notes/remove-serverdetails-resource-f66cb278b224627d.yaml new file mode 100644 index 0000000..4f50e55 --- /dev/null +++ b/releasenotes/notes/remove-serverdetails-resource-f66cb278b224627d.yaml @@ -0,0 +1,5 @@ +--- +deprecations: + - | + Listing servers with details `servers(details=True)` will return + instances of the Server class instead of ServerDetails. diff --git a/releasenotes/notes/removed-deprecated-things-8700fe3592c3bf18.yaml b/releasenotes/notes/removed-deprecated-things-8700fe3592c3bf18.yaml new file mode 100644 index 0000000..120c7d1 --- /dev/null +++ b/releasenotes/notes/removed-deprecated-things-8700fe3592c3bf18.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + In anticipation of the upcoming 1.0 release, all the things that have been + marked as deprecated have been removed. diff --git a/releasenotes/notes/removed-glanceclient-105c7fba9481b9be.yaml b/releasenotes/notes/removed-glanceclient-105c7fba9481b9be.yaml new file mode 100644 index 0000000..b926f4b --- /dev/null +++ b/releasenotes/notes/removed-glanceclient-105c7fba9481b9be.yaml @@ -0,0 +1,28 @@ +--- +prelude: > + The ``shade`` and ``os-client-config`` libraries have been merged + in to openstacksdk. As a result, their functionality is being + integrated into the sdk functionality, and in some cases is replacing + exisiting things. + + The ``openstack.profile.Profile`` and + ``openstack.auth.base.BaseAuthPlugin`` classes are no more. Profile has + been replace by ``openstack.config.cloud_region.CloudRegion`` from + `os-client-config + <https://opendev.org/openstack/os-client-config>`_ + ``openstack.auth.base.BaseAuthPlugin`` has been replaced with the Auth + plugins from keystoneauth. + + Service proxy names on the ``openstack.connection.Connection`` are all + based on the official names from the OpenStack Service Types Authority. + + ``openstack.proxy.Proxy`` is now a subclass of + ``keystoneauth1.adapter.Adapter``. Removed local logic that duplicates + keystoneauth logic. This means every proxy also has direct REST primitives + available. + + .. code-block:: python + + connection = connection.Connection() + servers = connection.compute.servers() + server_response = connection.compute.get('/servers') diff --git a/releasenotes/notes/removed-meter-6f6651b6e452e000.yaml b/releasenotes/notes/removed-meter-6f6651b6e452e000.yaml new file mode 100644 index 0000000..c4c5a1e --- /dev/null +++ b/releasenotes/notes/removed-meter-6f6651b6e452e000.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + Meter and Alarm services have been removed. The Ceilometer REST API has + been deprecated for quite some time and is no longer supported. diff --git a/releasenotes/notes/removed-profile-437f3038025b0fb3.yaml b/releasenotes/notes/removed-profile-437f3038025b0fb3.yaml new file mode 100644 index 0000000..84bc3bd --- /dev/null +++ b/releasenotes/notes/removed-profile-437f3038025b0fb3.yaml @@ -0,0 +1,8 @@ +--- +upgrade: + - The Profile object has been replaced with the use of + CloudRegion objects from openstack.config. + - The openstacksdk specific Session object has been removed. + - Proxy objects are now subclasses of + keystoneauth1.adapter.Adapter. + - REST interactions all go through TaskManager now. diff --git a/releasenotes/notes/removed-profile-b033d870937868a1.yaml b/releasenotes/notes/removed-profile-b033d870937868a1.yaml new file mode 100644 index 0000000..c5cac15 --- /dev/null +++ b/releasenotes/notes/removed-profile-b033d870937868a1.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + ``openstack.profile.Profile`` has been removed. ``openstack.config`` + should be used directly instead. diff --git a/releasenotes/notes/removed-swiftclient-aff22bfaeee5f59f.yaml b/releasenotes/notes/removed-swiftclient-aff22bfaeee5f59f.yaml new file mode 100644 index 0000000..4927c1e --- /dev/null +++ b/releasenotes/notes/removed-swiftclient-aff22bfaeee5f59f.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - Removed swiftclient as a dependency. All swift operations + are now performed with direct REST calls using keystoneauth + Adapter. diff --git a/releasenotes/notes/rename-base-proxy-b9fcb22d373864a2.yaml b/releasenotes/notes/rename-base-proxy-b9fcb22d373864a2.yaml new file mode 100644 index 0000000..f34cdd9 --- /dev/null +++ b/releasenotes/notes/rename-base-proxy-b9fcb22d373864a2.yaml @@ -0,0 +1,5 @@ +--- +deprecations: + - | + `openstack.proxy.BaseProxy` has been renamed to `openstack.proxy.Proxy`. + A ``BaseProxy`` class remains for easing transition. diff --git a/releasenotes/notes/rename-resource-methods-5f2a716b08156765.yaml b/releasenotes/notes/rename-resource-methods-5f2a716b08156765.yaml new file mode 100644 index 0000000..071371c --- /dev/null +++ b/releasenotes/notes/rename-resource-methods-5f2a716b08156765.yaml @@ -0,0 +1,12 @@ +--- +upgrade: + - | + ``openstack.resource.Resource.get`` has been renamed to + ``openstack.resource.Resource.fetch`` to prevent conflicting with a + ``dict`` method of the same name. While most consumer code is unlikely + to call this method directly, this is a breaking change. + - | + ``openstack.resource.Resource.update`` has been renamed to + ``openstack.resource.Resource.commit`` to prevent conflicting with a + ``dict`` method of the same name. While most consumer code is unlikely + to call this method directly, this is a breaking change. diff --git a/releasenotes/notes/rename-service-force-down-6f462d62959a5315.yaml b/releasenotes/notes/rename-service-force-down-6f462d62959a5315.yaml new file mode 100644 index 0000000..bad5c79 --- /dev/null +++ b/releasenotes/notes/rename-service-force-down-6f462d62959a5315.yaml @@ -0,0 +1,9 @@ +--- +upgrade: + - | + compute.force_service_down function is renamed to + update_service_forced_down to better fit the operation meaning. + - | + compute.v2.service.force_down is renamed to set_forced_down to fit the operation meaning. + - | + return of compute.service modification operations is changed to be the service itself diff --git a/releasenotes/notes/renamed-bare-metal-b1cdbc52af14e042.yaml b/releasenotes/notes/renamed-bare-metal-b1cdbc52af14e042.yaml new file mode 100644 index 0000000..d39f1a1 --- /dev/null +++ b/releasenotes/notes/renamed-bare-metal-b1cdbc52af14e042.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - Renamed bare-metal to baremetal to align with the official + service type. diff --git a/releasenotes/notes/renamed-block-store-bc5e0a7315bfeb67.yaml b/releasenotes/notes/renamed-block-store-bc5e0a7315bfeb67.yaml new file mode 100644 index 0000000..3d5a5d3 --- /dev/null +++ b/releasenotes/notes/renamed-block-store-bc5e0a7315bfeb67.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - The block_store service object has been renamed to block_storage to + align the API with the official service types. diff --git a/releasenotes/notes/renamed-cluster-743da6d321fffcba.yaml b/releasenotes/notes/renamed-cluster-743da6d321fffcba.yaml new file mode 100644 index 0000000..0796d92 --- /dev/null +++ b/releasenotes/notes/renamed-cluster-743da6d321fffcba.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - Renamed cluster to clustering to align with the official + service type. diff --git a/releasenotes/notes/renamed-telemetry-c08ae3e72afca24f.yaml b/releasenotes/notes/renamed-telemetry-c08ae3e72afca24f.yaml new file mode 100644 index 0000000..5929d4f --- /dev/null +++ b/releasenotes/notes/renamed-telemetry-c08ae3e72afca24f.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - Renamed telemetry to meter to align with the official + service type. diff --git a/releasenotes/notes/replace-appdirs-with-platformdirs-d3f5bcbe726b7829.yaml b/releasenotes/notes/replace-appdirs-with-platformdirs-d3f5bcbe726b7829.yaml new file mode 100644 index 0000000..01a0815 --- /dev/null +++ b/releasenotes/notes/replace-appdirs-with-platformdirs-d3f5bcbe726b7829.yaml @@ -0,0 +1,8 @@ +--- +upgrade: + - | + The ``appdirs`` dependency is replaced by a requirement for + ``platformdirs`` 3.0.0 or later. Users on macOS may need to move + configuration files to ``*/Library/Application Support``. See its release + notes for further details: + https://platformdirs.readthedocs.io/en/latest/changelog.html#platformdirs-3-0-0-2023-02-06 diff --git a/releasenotes/notes/request-stats-9d70480bebbdb4d6.yaml b/releasenotes/notes/request-stats-9d70480bebbdb4d6.yaml new file mode 100644 index 0000000..04748ca --- /dev/null +++ b/releasenotes/notes/request-stats-9d70480bebbdb4d6.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added support for collecting and reporting stats on calls made to + statsd and prometheus. diff --git a/releasenotes/notes/resource-find-filter-by-name-e647e5c507ff4b6c.yaml b/releasenotes/notes/resource-find-filter-by-name-e647e5c507ff4b6c.yaml new file mode 100644 index 0000000..f736cf9 --- /dev/null +++ b/releasenotes/notes/resource-find-filter-by-name-e647e5c507ff4b6c.yaml @@ -0,0 +1,7 @@ +--- +other: + - | + ``openstack.resource.Resource.find`` now can use the database back-end to + filter by name. If the resource class has "name" in the query parameters, + this function will add this filter parameter in the "list" command, instead + of retrieving the whole list and then manually filtering. diff --git a/releasenotes/notes/resource2-migration-835590b300bef621.yaml b/releasenotes/notes/resource2-migration-835590b300bef621.yaml new file mode 100644 index 0000000..ecf6adc --- /dev/null +++ b/releasenotes/notes/resource2-migration-835590b300bef621.yaml @@ -0,0 +1,11 @@ +--- +upgrade: + - | + The ``Resource2`` and ``Proxy2`` migration has been completed. The original + ``Resource`` and ``Proxy`` clases have been removed and replaced with + ``Resource2`` and ``Proxy2``. +deprecations: + - | + The ``shade`` functionality that has been merged in to openstacksdk is + found in ``openstack.cloud`` currently. None of these interfaces should + be relied upon as the merge has not yet completed. diff --git a/releasenotes/notes/retrieve-detailed-view-for-find-proxy-methods-947a3280732c448a.yaml b/releasenotes/notes/retrieve-detailed-view-for-find-proxy-methods-947a3280732c448a.yaml new file mode 100644 index 0000000..347ac2a --- /dev/null +++ b/releasenotes/notes/retrieve-detailed-view-for-find-proxy-methods-947a3280732c448a.yaml @@ -0,0 +1,25 @@ +--- +features: + - | + The following proxy ``find_*`` operations will now retrieve a detailed + resource by default when retrieving by name: + + * Block storage (v2) + + * ``find_volume`` + * ``find_snapshot`` + * ``find_backup`` + + * Block storage (v3) + + * ``find_volume`` + * ``find_snapshot`` + * ``find_backup`` + * ``find_group`` + * ``find_group_snapshot`` + + * Compute (v2) + + * ``find_image`` + * ``find_server`` + * ``find_hypervisor`` diff --git a/releasenotes/notes/revert-futurist-34acc42fd3f0e7f3.yaml b/releasenotes/notes/revert-futurist-34acc42fd3f0e7f3.yaml new file mode 100644 index 0000000..28712cd --- /dev/null +++ b/releasenotes/notes/revert-futurist-34acc42fd3f0e7f3.yaml @@ -0,0 +1,8 @@ +--- +upgrade: + - | + Removed the dependency on futurist, which isn't necessary. + Users can still pass futurist executors if they want, as + the API is the same, but if nothing is passed, + ``concurrent.futures.ThreadPoolExecutor`` will be used as + the default. diff --git a/releasenotes/notes/rework-compute-hypervisor-a62f275a0fd1f074.yaml b/releasenotes/notes/rework-compute-hypervisor-a62f275a0fd1f074.yaml new file mode 100644 index 0000000..c82bf62 --- /dev/null +++ b/releasenotes/notes/rework-compute-hypervisor-a62f275a0fd1f074.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Compute Hypervisor resource and functions are reworked to comply 2.88 + microversion with deprecating misleading attributes. diff --git a/releasenotes/notes/router-extraroute-atomic-1a0c84c3fd90ceb1.yaml b/releasenotes/notes/router-extraroute-atomic-1a0c84c3fd90ceb1.yaml new file mode 100644 index 0000000..4edd5c9 --- /dev/null +++ b/releasenotes/notes/router-extraroute-atomic-1a0c84c3fd90ceb1.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for methods of Neutron extension: ``extraroute-atomic``. diff --git a/releasenotes/notes/router_ext_gw-b86582317bca8b39.yaml b/releasenotes/notes/router_ext_gw-b86582317bca8b39.yaml new file mode 100644 index 0000000..84d9a1a --- /dev/null +++ b/releasenotes/notes/router_ext_gw-b86582317bca8b39.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - No longer fail in list_router_interfaces() if a router does + not have the external_gateway_info key. diff --git a/releasenotes/notes/sdk-helper-41f8d815cfbcfb00.yaml b/releasenotes/notes/sdk-helper-41f8d815cfbcfb00.yaml new file mode 100644 index 0000000..a18b57d --- /dev/null +++ b/releasenotes/notes/sdk-helper-41f8d815cfbcfb00.yaml @@ -0,0 +1,4 @@ +--- +features: + - Added helper method for constructing OpenStack SDK + Connection objects. diff --git a/releasenotes/notes/search_resource-b9c2f772e01d3b2c.yaml b/releasenotes/notes/search_resource-b9c2f772e01d3b2c.yaml new file mode 100644 index 0000000..70efca4 --- /dev/null +++ b/releasenotes/notes/search_resource-b9c2f772e01d3b2c.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add search_resources method implementing generic search interface accepting + resource name (as "service.resource"), name_or_id and list of additional + filters and returning 0 or many resources matching those. This interface is + primarily designed to be used by Ansible modules. diff --git a/releasenotes/notes/server-actions-microversion-support-f14b293d9c3d3d5e.yaml b/releasenotes/notes/server-actions-microversion-support-f14b293d9c3d3d5e.yaml new file mode 100644 index 0000000..1421a70 --- /dev/null +++ b/releasenotes/notes/server-actions-microversion-support-f14b293d9c3d3d5e.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Server actions such as reboot and resize will now default to the + latest microversion instead of 2.1 as before. diff --git a/releasenotes/notes/server-create-error-id-66c698c7e633fb8b.yaml b/releasenotes/notes/server-create-error-id-66c698c7e633fb8b.yaml new file mode 100644 index 0000000..673c7dc --- /dev/null +++ b/releasenotes/notes/server-create-error-id-66c698c7e633fb8b.yaml @@ -0,0 +1,4 @@ +--- +features: + - server creation errors now include the server id in the + Exception to allow people to clean up. diff --git a/releasenotes/notes/server-security-groups-840ab28c04f359de.yaml b/releasenotes/notes/server-security-groups-840ab28c04f359de.yaml new file mode 100644 index 0000000..d9de793 --- /dev/null +++ b/releasenotes/notes/server-security-groups-840ab28c04f359de.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add the `add_server_security_groups` and `remove_server_security_groups` + functions to add and remove security groups from a specific server. diff --git a/releasenotes/notes/service_enabled_flag-c917b305d3f2e8fd.yaml b/releasenotes/notes/service_enabled_flag-c917b305d3f2e8fd.yaml new file mode 100644 index 0000000..089d297 --- /dev/null +++ b/releasenotes/notes/service_enabled_flag-c917b305d3f2e8fd.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - Keystone service descriptions were missing an attribute describing whether + or not the service was enabled. A new 'enabled' boolean attribute has been + added to the service data. diff --git a/releasenotes/notes/session-client-b581a6e5d18c8f04.yaml b/releasenotes/notes/session-client-b581a6e5d18c8f04.yaml new file mode 100644 index 0000000..1121901 --- /dev/null +++ b/releasenotes/notes/session-client-b581a6e5d18c8f04.yaml @@ -0,0 +1,6 @@ +--- +features: + - Added kwargs and argparse processing for session_client. +deprecations: + - Renamed simple_client to session_client. simple_client + will remain as an alias for backwards compat. diff --git a/releasenotes/notes/set-bootable-volume-454a7a41e7e77d08.yaml b/releasenotes/notes/set-bootable-volume-454a7a41e7e77d08.yaml new file mode 100644 index 0000000..c7d84fe --- /dev/null +++ b/releasenotes/notes/set-bootable-volume-454a7a41e7e77d08.yaml @@ -0,0 +1,4 @@ +--- +features: + - Added a ``set_volume_bootable`` call to allow toggling the bootable state + of a volume. diff --git a/releasenotes/notes/shade-helper-568f8cb372eef6d9.yaml b/releasenotes/notes/shade-helper-568f8cb372eef6d9.yaml new file mode 100644 index 0000000..70aab0a --- /dev/null +++ b/releasenotes/notes/shade-helper-568f8cb372eef6d9.yaml @@ -0,0 +1,4 @@ +--- +features: + - Added helper method for constructing shade + OpenStackCloud objects. diff --git a/releasenotes/notes/shade-into-connection-81191fb3d0ddaf6e.yaml b/releasenotes/notes/shade-into-connection-81191fb3d0ddaf6e.yaml new file mode 100644 index 0000000..7fdbf3b --- /dev/null +++ b/releasenotes/notes/shade-into-connection-81191fb3d0ddaf6e.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + All of the methods formerly part of the ``shade`` library have been added + to the `openstack.connection.Connection`` object. diff --git a/releasenotes/notes/shade-location-b0d2e5cae743b738.yaml b/releasenotes/notes/shade-location-b0d2e5cae743b738.yaml new file mode 100644 index 0000000..616a475 --- /dev/null +++ b/releasenotes/notes/shade-location-b0d2e5cae743b738.yaml @@ -0,0 +1,8 @@ +--- +upgrade: + - | + The base ``Resource`` field ``location`` is no longer drawn from the + ``Location`` HTTP header, but is instead a dict containing information + about cloud, domain and project. The location dict is a feature of shade + objects and is being added to all objects as part of the alignment of + shade and sdk. diff --git a/releasenotes/notes/snap-updated_at-a46711b6160e3a26.yaml b/releasenotes/notes/snap-updated_at-a46711b6160e3a26.yaml new file mode 100644 index 0000000..927d6d1 --- /dev/null +++ b/releasenotes/notes/snap-updated_at-a46711b6160e3a26.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added support for the updated_at attribute for volume snapshots. diff --git a/releasenotes/notes/stack-update-5886e91fd6e423bf.yaml b/releasenotes/notes/stack-update-5886e91fd6e423bf.yaml new file mode 100644 index 0000000..29a1552 --- /dev/null +++ b/releasenotes/notes/stack-update-5886e91fd6e423bf.yaml @@ -0,0 +1,4 @@ +--- +features: + - Implement update_stack to perform the update action on existing + orchestration stacks. diff --git a/releasenotes/notes/started-using-reno-242e2b0cd27f9480.yaml b/releasenotes/notes/started-using-reno-242e2b0cd27f9480.yaml new file mode 100644 index 0000000..d7cfb51 --- /dev/null +++ b/releasenotes/notes/started-using-reno-242e2b0cd27f9480.yaml @@ -0,0 +1,3 @@ +--- +other: +- Started using reno for release notes. diff --git a/releasenotes/notes/stateful-security-group-f32a78b9bbb49874.yaml b/releasenotes/notes/stateful-security-group-f32a78b9bbb49874.yaml new file mode 100644 index 0000000..d0d8945 --- /dev/null +++ b/releasenotes/notes/stateful-security-group-f32a78b9bbb49874.yaml @@ -0,0 +1,4 @@ +--- +features: + - New stateful parameter can be used in security group + diff --git a/releasenotes/notes/stop-using-tenant-id-42eb35139ba9eeff.yaml b/releasenotes/notes/stop-using-tenant-id-42eb35139ba9eeff.yaml new file mode 100644 index 0000000..5e4cbb0 --- /dev/null +++ b/releasenotes/notes/stop-using-tenant-id-42eb35139ba9eeff.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Stop sending tenant_id attribute to Neutron. diff --git a/releasenotes/notes/story-2010784-21d23043155497f5.yaml b/releasenotes/notes/story-2010784-21d23043155497f5.yaml new file mode 100644 index 0000000..557eef5 --- /dev/null +++ b/releasenotes/notes/story-2010784-21d23043155497f5.yaml @@ -0,0 +1,33 @@ +--- +upgrade: + - | + Many cloud administrators use universal cloud-wide credentials. This is + supported in keystone via 'inherited' roles that can be applied cloud- + or domain-wide. + + In previous releases, these credentials could not be usefully defined + within ```clouds.yaml``` because ```clouds.yaml``` supports only + specifying a single domain and project for auth purposes. This project + or domain could not be overridden on the commandline. +fixes: + - | + When some config settings are specified multiple times, the order of + precendence has been changed to prefer command-line or env settings over + those found in ```clouds.yaml```. The same reordering has been done when + a setting is specified multiple times within ```clouds.yaml```; now a + higher-level setting will take precedence over that specified within + the auth section. + + Affected settings are: + + - ``domain_id`` + - ``domain_name`` + - ``user_domain_id`` + - ``user_domain_name`` + - ``project_domain_id`` + - ``project_domain_name`` + - ``auth-token`` + - ``project_id`` + - ``tenant_id`` + - ``project_name`` + - ``tenant_name`` diff --git a/releasenotes/notes/stream-object-6ecd43511dca726b.yaml b/releasenotes/notes/stream-object-6ecd43511dca726b.yaml new file mode 100644 index 0000000..9e102c8 --- /dev/null +++ b/releasenotes/notes/stream-object-6ecd43511dca726b.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added ``stream_object`` method for getting object content in an iterator. diff --git a/releasenotes/notes/stream-to-file-91f48d6dcea399c6.yaml b/releasenotes/notes/stream-to-file-91f48d6dcea399c6.yaml new file mode 100644 index 0000000..60e6d64 --- /dev/null +++ b/releasenotes/notes/stream-to-file-91f48d6dcea399c6.yaml @@ -0,0 +1,3 @@ +--- +features: + - get_object now supports streaming output directly to a file. diff --git a/releasenotes/notes/strict-mode-d493abc0c3e87945.yaml b/releasenotes/notes/strict-mode-d493abc0c3e87945.yaml new file mode 100644 index 0000000..ea81b13 --- /dev/null +++ b/releasenotes/notes/strict-mode-d493abc0c3e87945.yaml @@ -0,0 +1,6 @@ +--- +features: + - Added 'strict' mode, which is set by passing strict=True + to the OpenStackCloud constructor. strict mode tells shade + to only return values in resources that are part of shade's + declared data model contract. diff --git a/releasenotes/notes/strict-proxies-4a315f68f387ee89.yaml b/releasenotes/notes/strict-proxies-4a315f68f387ee89.yaml new file mode 100644 index 0000000..ae2e11b --- /dev/null +++ b/releasenotes/notes/strict-proxies-4a315f68f387ee89.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Added new option for Connection, ``strict_proxies``. When set to ``True``, + Connection will throw a ``ServiceDiscoveryException`` if the endpoint for + a given service doesn't work. This is useful for OpenStack services using + sdk to talk to other OpenStack services where it can be expected that the + deployer config is correct and errors should be reported immediately. diff --git a/releasenotes/notes/support_stdin_image_upload-305c04fb2daeb32c.yaml b/releasenotes/notes/support_stdin_image_upload-305c04fb2daeb32c.yaml new file mode 100644 index 0000000..0d315e9 --- /dev/null +++ b/releasenotes/notes/support_stdin_image_upload-305c04fb2daeb32c.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add support for creating image from STDIN (i.e. from OSC). When creating from STDIN however, no checksum verification is possible, and thus validate_checksum must be also set to False. diff --git a/releasenotes/notes/swift-set-metadata-c18c60e440f9e4a7.yaml b/releasenotes/notes/swift-set-metadata-c18c60e440f9e4a7.yaml new file mode 100644 index 0000000..6fe599e --- /dev/null +++ b/releasenotes/notes/swift-set-metadata-c18c60e440f9e4a7.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + It is now possible to pass `metadata` parameter directly into the create_container, + create_object object_store methods and will not be ignored. diff --git a/releasenotes/notes/swift-upload-lock-d18f3d42b3a0719a.yaml b/releasenotes/notes/swift-upload-lock-d18f3d42b3a0719a.yaml new file mode 100644 index 0000000..27848a5 --- /dev/null +++ b/releasenotes/notes/swift-upload-lock-d18f3d42b3a0719a.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - Fixed an issue where a section of code that was supposed to be resetting + the SwiftService object was instead resetting the protective mutex around + the SwiftService object leading to an exception of "__exit__" diff --git a/releasenotes/notes/switch-coe-to-proxy-c18789ed27cc1d95.yaml b/releasenotes/notes/switch-coe-to-proxy-c18789ed27cc1d95.yaml new file mode 100644 index 0000000..ad4e0e3 --- /dev/null +++ b/releasenotes/notes/switch-coe-to-proxy-c18789ed27cc1d95.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Convert container_infrastructure_management cloud operations to rely fully + on service proxy with all resource classes created. diff --git a/releasenotes/notes/switch-nova-to-created_at-45b7b50af6a2d59e.yaml b/releasenotes/notes/switch-nova-to-created_at-45b7b50af6a2d59e.yaml new file mode 100644 index 0000000..68cf0a5 --- /dev/null +++ b/releasenotes/notes/switch-nova-to-created_at-45b7b50af6a2d59e.yaml @@ -0,0 +1,5 @@ +--- +features: + - The `created` field which was returned by the Nova API is now returned as + `created_at` as well when not using strict mode for consistency with other + models. diff --git a/releasenotes/notes/switch-to-warnings-333955d19afc99ca.yaml b/releasenotes/notes/switch-to-warnings-333955d19afc99ca.yaml new file mode 100644 index 0000000..a55c71f --- /dev/null +++ b/releasenotes/notes/switch-to-warnings-333955d19afc99ca.yaml @@ -0,0 +1,7 @@ +--- +upgrade: + - | + Warnings about deprecated behavior or deprecated/modified APIs are now + raised using the ``warnings`` module, rather than the ``logging`` module. + This allows users to filter these warnings or silence them entirely if + necessary. diff --git a/releasenotes/notes/task-manager-parameter-c6606653532248f2.yaml b/releasenotes/notes/task-manager-parameter-c6606653532248f2.yaml new file mode 100644 index 0000000..e1e2c4b --- /dev/null +++ b/releasenotes/notes/task-manager-parameter-c6606653532248f2.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + A new ``task_manager`` parameter to ``Connection`` has been added for + passing a TaskManager object. This was present in shade and is used by + nodepool, but was missing from the Connection constructor. diff --git a/releasenotes/notes/toggle-port-security-f5bc606e82141feb.yaml b/releasenotes/notes/toggle-port-security-f5bc606e82141feb.yaml new file mode 100644 index 0000000..821a20f --- /dev/null +++ b/releasenotes/notes/toggle-port-security-f5bc606e82141feb.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + Added a new property, 'port_security_enabled' which is a boolean + to enable or disable port_secuirty during network creation. The + default behavior will enable port security, security group and + anti spoofing will act as before. When the attribute is set to + False, security group and anti spoofing are disabled on the ports + created on this network. diff --git a/releasenotes/notes/unprocessed-2d75133911945869.yaml b/releasenotes/notes/unprocessed-2d75133911945869.yaml new file mode 100644 index 0000000..d873809 --- /dev/null +++ b/releasenotes/notes/unprocessed-2d75133911945869.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Supports fetching raw (unprocessed) introspection data from the bare metal + introspection service. diff --git a/releasenotes/notes/unshelve-to-specific-host-84666d440dce4a73.yaml b/releasenotes/notes/unshelve-to-specific-host-84666d440dce4a73.yaml new file mode 100644 index 0000000..5a73890 --- /dev/null +++ b/releasenotes/notes/unshelve-to-specific-host-84666d440dce4a73.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add SDK support for Nova microversion 2.91. This microversion + allows specifying a destination host to unshelve a shelve + offloaded server. And availability zone can be set to None to unpin + the availability zone of a server. diff --git a/releasenotes/notes/update-role-property-b16e902e913c7b25.yaml b/releasenotes/notes/update-role-property-b16e902e913c7b25.yaml new file mode 100644 index 0000000..c35cec0 --- /dev/null +++ b/releasenotes/notes/update-role-property-b16e902e913c7b25.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added the newly supported ``description`` parameter and the missing + ``domain_id`` parameter to ``Role`` resource. diff --git a/releasenotes/notes/update_endpoint-f87c1f42d0c0d1ef.yaml b/releasenotes/notes/update_endpoint-f87c1f42d0c0d1ef.yaml new file mode 100644 index 0000000..a7b6a45 --- /dev/null +++ b/releasenotes/notes/update_endpoint-f87c1f42d0c0d1ef.yaml @@ -0,0 +1,8 @@ +--- +features: + - Added update_endpoint as a new function that allows + the user to update a created endpoint with new values + rather than deleting and recreating that endpoint. + This feature only works with keystone v3, with v2 it + will raise an exception stating the feature is not + available. diff --git a/releasenotes/notes/update_workflow-ecdef6056ef2687b.yaml b/releasenotes/notes/update_workflow-ecdef6056ef2687b.yaml new file mode 100644 index 0000000..516004f --- /dev/null +++ b/releasenotes/notes/update_workflow-ecdef6056ef2687b.yaml @@ -0,0 +1,3 @@ +features: + - | + Added ``update_workflow`` to the workflow proxy. diff --git a/releasenotes/notes/use-interface-ip-c5cb3e7c91150096.yaml b/releasenotes/notes/use-interface-ip-c5cb3e7c91150096.yaml new file mode 100644 index 0000000..14a4fd4 --- /dev/null +++ b/releasenotes/notes/use-interface-ip-c5cb3e7c91150096.yaml @@ -0,0 +1,13 @@ +--- +fixes: + - shade now correctly does not try to attach a floating ip with auto_ip + if the cloud has given a public IPv6 address and the calling context + supports IPv6 routing. shade has always used this logic to determine + the server 'interface_ip', but the auto floating ip was incorrectly only + looking at the 'public_v4' value to determine whether the server needed + additional networking. +upgrade: + - If your cloud presents a default split IPv4/IPv6 stack with a public + v6 and a private v4 address and you have the expectation that auto_ip + should procure a v4 floating ip, you need to set 'force_ipv4' to True in + your clouds.yaml entry for the cloud. diff --git a/releasenotes/notes/use-proxy-layer-dfc3764d52bc1f2a.yaml b/releasenotes/notes/use-proxy-layer-dfc3764d52bc1f2a.yaml new file mode 100644 index 0000000..5e9882d --- /dev/null +++ b/releasenotes/notes/use-proxy-layer-dfc3764d52bc1f2a.yaml @@ -0,0 +1,7 @@ +--- +upgrade: + - | + Networking functions of the cloud layer return now resource objects + `openstack.resource`. While those still implement Munch interface and are + accessible as dictionary modification of an instance might be causing + issues (i.e. forbidden). diff --git a/releasenotes/notes/v4-fixed-ip-325740fdae85ffa9.yaml b/releasenotes/notes/v4-fixed-ip-325740fdae85ffa9.yaml new file mode 100644 index 0000000..99fe5b8 --- /dev/null +++ b/releasenotes/notes/v4-fixed-ip-325740fdae85ffa9.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Re-added support for `v4-fixed-ip` and `v6-fixed-ip` in the `nics` + parameter to `create_server`. These are aliaes for `fixed_ip` provided + by novaclient which shade used to use. The switch to REST didn't include + support for these aliases, resulting in a behavior regression. diff --git a/releasenotes/notes/validate-machine-dcf528b8f587e3f0.yaml b/releasenotes/notes/validate-machine-dcf528b8f587e3f0.yaml new file mode 100644 index 0000000..0f73ae8 --- /dev/null +++ b/releasenotes/notes/validate-machine-dcf528b8f587e3f0.yaml @@ -0,0 +1,5 @@ +--- +deprecations: + - | + The ``OpenStackCloud.validate_node`` call was deprecated in favor of + ``OpenStackCloud.validate_machine``. diff --git a/releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml b/releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml new file mode 100644 index 0000000..8fdded4 --- /dev/null +++ b/releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml @@ -0,0 +1,3 @@ +--- +other: + - Add betacloud region for Germany diff --git a/releasenotes/notes/vendor-add-limestonenetworks-99b2ffab9fc23b08.yaml b/releasenotes/notes/vendor-add-limestonenetworks-99b2ffab9fc23b08.yaml new file mode 100644 index 0000000..d0e8332 --- /dev/null +++ b/releasenotes/notes/vendor-add-limestonenetworks-99b2ffab9fc23b08.yaml @@ -0,0 +1,4 @@ +--- +other: + - | + Add Limestone Networks vendor info for us-dfw-1 and us-slc regions diff --git a/releasenotes/notes/vendor-update-betacloud-37dac22d8d91a3c5.yaml b/releasenotes/notes/vendor-update-betacloud-37dac22d8d91a3c5.yaml new file mode 100644 index 0000000..f2e249d --- /dev/null +++ b/releasenotes/notes/vendor-update-betacloud-37dac22d8d91a3c5.yaml @@ -0,0 +1,3 @@ +--- +other: + - Update betacloud region for Germany diff --git a/releasenotes/notes/vendor-updates-f11184ba56bb27cf.yaml b/releasenotes/notes/vendor-updates-f11184ba56bb27cf.yaml new file mode 100644 index 0000000..e1d6d41 --- /dev/null +++ b/releasenotes/notes/vendor-updates-f11184ba56bb27cf.yaml @@ -0,0 +1,4 @@ +--- +other: + - Add citycloud regions for Buffalo, Frankfurt, Karlskrona and Los Angles + - Add new DreamCompute cloud and deprecate DreamHost cloud diff --git a/releasenotes/notes/version-command-70c37dd7f880e9ae.yaml b/releasenotes/notes/version-command-70c37dd7f880e9ae.yaml new file mode 100644 index 0000000..db9b5d6 --- /dev/null +++ b/releasenotes/notes/version-command-70c37dd7f880e9ae.yaml @@ -0,0 +1,4 @@ +--- +features: + - The installed version can now be quickly checked with ``python -m + openstack version``. diff --git a/releasenotes/notes/version-discovery-a501c4e9e9869f77.yaml b/releasenotes/notes/version-discovery-a501c4e9e9869f77.yaml new file mode 100644 index 0000000..c55792f --- /dev/null +++ b/releasenotes/notes/version-discovery-a501c4e9e9869f77.yaml @@ -0,0 +1,13 @@ +--- +features: + - Version discovery is now done via the keystoneauth + library. shade still has one behavioral difference + from default keystoneauth behavior, which is that + shade will use a version it understands if it can + find one even if the user has requested a different + version. This change opens the door for shade to + start being able to consume API microversions as + needed. +upgrade: + - keystoneauth version 3.2.0 or higher is required + because of version discovery. diff --git a/releasenotes/notes/vol-updated_at-274c3a2bb94c8939.yaml b/releasenotes/notes/vol-updated_at-274c3a2bb94c8939.yaml new file mode 100644 index 0000000..e233714 --- /dev/null +++ b/releasenotes/notes/vol-updated_at-274c3a2bb94c8939.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added support for the updated_at attribute for volume objects. diff --git a/releasenotes/notes/volume-quotas-5b674ee8c1f71eb6.yaml b/releasenotes/notes/volume-quotas-5b674ee8c1f71eb6.yaml new file mode 100644 index 0000000..2507aac --- /dev/null +++ b/releasenotes/notes/volume-quotas-5b674ee8c1f71eb6.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add new APIs, OperatorCloud.get_volume_quotas(), OperatorCloud.set_volume_quotas() and OperatorCloud.delete_volume_quotas() to manage cinder quotas for projects and users \ No newline at end of file diff --git a/releasenotes/notes/volume-types-a07a14ae668e7dd2.yaml b/releasenotes/notes/volume-types-a07a14ae668e7dd2.yaml new file mode 100644 index 0000000..59fea21 --- /dev/null +++ b/releasenotes/notes/volume-types-a07a14ae668e7dd2.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add support for listing volume types. + - Add support for managing volume type access. diff --git a/releasenotes/notes/volume-update-876e6540c8471440.yaml b/releasenotes/notes/volume-update-876e6540c8471440.yaml new file mode 100644 index 0000000..18ac0ed --- /dev/null +++ b/releasenotes/notes/volume-update-876e6540c8471440.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added ``update_volume`` to the block storage proxy. diff --git a/releasenotes/notes/volume_connector-api-f001e6f5fc4d1688.yaml b/releasenotes/notes/volume_connector-api-f001e6f5fc4d1688.yaml new file mode 100644 index 0000000..776263c --- /dev/null +++ b/releasenotes/notes/volume_connector-api-f001e6f5fc4d1688.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds support for the baremetal volume connector API. diff --git a/releasenotes/notes/wait-on-image-snapshot-27cd2eacab2fabd8.yaml b/releasenotes/notes/wait-on-image-snapshot-27cd2eacab2fabd8.yaml new file mode 100644 index 0000000..ae434e2 --- /dev/null +++ b/releasenotes/notes/wait-on-image-snapshot-27cd2eacab2fabd8.yaml @@ -0,0 +1,7 @@ +--- +features: + - Adds a new pair of options to create_image_snapshot(), wait and timeout, + to have the function wait until the image snapshot being created goes + into an active state. + - Adds a new function wait_for_image() which will wait for an image to go + into an active state. diff --git a/releasenotes/notes/wait-provision-state-no-fail-efa74dd39f687df8.yaml b/releasenotes/notes/wait-provision-state-no-fail-efa74dd39f687df8.yaml new file mode 100644 index 0000000..5c4fbca --- /dev/null +++ b/releasenotes/notes/wait-provision-state-no-fail-efa74dd39f687df8.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Adds an ability for the bare metal ``wait_for_nodes_provision_state`` call + to return an object with nodes that succeeded, failed or timed out instead + of raising an exception. diff --git a/releasenotes/notes/wait_for_server-8dc8446b7c673d36.yaml b/releasenotes/notes/wait_for_server-8dc8446b7c673d36.yaml new file mode 100644 index 0000000..58bc54c --- /dev/null +++ b/releasenotes/notes/wait_for_server-8dc8446b7c673d36.yaml @@ -0,0 +1,3 @@ +--- +features: + - New wait_for_server() API call to wait for a server to reach ACTIVE status. diff --git a/releasenotes/notes/wait_for_status_delete_callback_param-68d30161e23340bb.yaml b/releasenotes/notes/wait_for_status_delete_callback_param-68d30161e23340bb.yaml new file mode 100644 index 0000000..1e088ef --- /dev/null +++ b/releasenotes/notes/wait_for_status_delete_callback_param-68d30161e23340bb.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + The ``Resource.wait_for_status``, ``Resource.wait_for_delete``, and related + proxy wrappers now accept a ``callback`` argument that can be used to pass + a callback function. When provided, the wait function will attempt to + retrieve a ``progress`` value from the resource in question and pass it to + the callback function each time it iterates. diff --git a/releasenotes/notes/wire-in-retries-10898f7bc81e2269.yaml b/releasenotes/notes/wire-in-retries-10898f7bc81e2269.yaml new file mode 100644 index 0000000..a3de250 --- /dev/null +++ b/releasenotes/notes/wire-in-retries-10898f7bc81e2269.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Allows configuring Session's ``connect_retries`` and + ``status_code_retries`` via the cloud configuration (options + ``<service type>_connect_retries``, ``connect_retries``, + ``<service type>_status_code_retries`` and ``status_code_retries``). diff --git a/releasenotes/notes/workaround-transitive-deps-1e7a214f3256b77e.yaml b/releasenotes/notes/workaround-transitive-deps-1e7a214f3256b77e.yaml new file mode 100644 index 0000000..aa1b361 --- /dev/null +++ b/releasenotes/notes/workaround-transitive-deps-1e7a214f3256b77e.yaml @@ -0,0 +1,9 @@ +--- +fixes: + - Added requests and Babel to the direct dependencies list to work around + issues with pip installation, entrypoints and transitive dependencies + with conflicting exclusion ranges. Packagers of shade do not need to + add these two new requirements to shade's dependency list - they are + transitive depends and should be satisfied by the other things in the + requirements list. Both will be removed from the list again once the + python client libraries that pull them in have been removed. diff --git a/releasenotes/notes/xenapi-use-agent-ecc33e520da81ffa.yaml b/releasenotes/notes/xenapi-use-agent-ecc33e520da81ffa.yaml new file mode 100644 index 0000000..eeb3ed7 --- /dev/null +++ b/releasenotes/notes/xenapi-use-agent-ecc33e520da81ffa.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Updated the Rackspace vendor entry to use `"False"` for the value of + `xenapi_use_agent` instead of `false`, because that's what the remote + side expects. The recent update to use the Resource layer exposed + the incorrect setting causing image uploads to Rackspace to fail. diff --git a/releasenotes/source/2023.1.rst b/releasenotes/source/2023.1.rst new file mode 100644 index 0000000..d123847 --- /dev/null +++ b/releasenotes/source/2023.1.rst @@ -0,0 +1,6 @@ +=========================== +2023.1 Series Release Notes +=========================== + +.. release-notes:: + :branch: stable/2023.1 diff --git a/releasenotes/source/2023.2.rst b/releasenotes/source/2023.2.rst new file mode 100644 index 0000000..a4838d7 --- /dev/null +++ b/releasenotes/source/2023.2.rst @@ -0,0 +1,6 @@ +=========================== +2023.2 Series Release Notes +=========================== + +.. release-notes:: + :branch: stable/2023.2 diff --git a/releasenotes/source/_static/.placeholder b/releasenotes/source/_static/.placeholder new file mode 100644 index 0000000..e69de29 diff --git a/releasenotes/source/_templates/.placeholder b/releasenotes/source/_templates/.placeholder new file mode 100644 index 0000000..e69de29 diff --git a/releasenotes/source/conf.py b/releasenotes/source/conf.py new file mode 100644 index 0000000..ac4be8e --- /dev/null +++ b/releasenotes/source/conf.py @@ -0,0 +1,278 @@ +# -*- coding: utf-8 -*- +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# oslo.config Release Notes documentation build configuration file, created by +# sphinx-quickstart on Tue Nov 3 17:40:50 2015. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'openstackdocstheme', + 'reno.sphinxext', +] + +# openstackdocstheme options +openstackdocs_repo_name = 'openstack/openstacksdk' +openstackdocs_use_storyboard = False + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +# source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +copyright = '2017, Various members of the OpenStack Foundation' + +# Release notes are version independent. +# The short X.Y version. +version = '' +# The full version, including alpha/beta/rc tags. +release = '' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# today = '' +# Else, today_fmt is used as the format for a strftime call. +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'native' + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +# keep_warnings = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'openstackdocs' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# "<project> v<release> documentation". +# html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +# html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# html_additional_pages = {} + +# If false, no module index is generated. +# html_domain_indices = True + +# If false, no index is generated. +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a <link> tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'shadeReleaseNotesdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + 'index', + 'shadeReleaseNotes.tex', + 'Shade Release Notes Documentation', + 'Shade Developers', + 'manual', + ), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# latex_use_parts = False + +# If true, show page references after internal links. +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + 'index', + 'shadereleasenotes', + 'shade Release Notes Documentation', + ['shade Developers'], + 1, + ) +] + +# If true, show URL addresses after external links. +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + 'index', + 'shadeReleaseNotes', + 'shade Release Notes Documentation', + 'shade Developers', + 'shadeReleaseNotes', + 'A client library for interacting with OpenStack clouds', + 'Miscellaneous', + ), +] + +# Documents to append as an appendix to all manuals. +# texinfo_appendices = [] + +# If false, no module index is generated. +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# texinfo_no_detailmenu = False + +# -- Options for Internationalization output ------------------------------ +locale_dirs = ['locale/'] diff --git a/releasenotes/source/index.rst b/releasenotes/source/index.rst new file mode 100644 index 0000000..cf39fb8 --- /dev/null +++ b/releasenotes/source/index.rst @@ -0,0 +1,22 @@ +============================ + openstacksdk Release Notes +============================ + +.. toctree:: + :maxdepth: 1 + + unreleased + 2023.2 + 2023.1 + zed + yoga + xena + wallaby + victoria + ussuri + train + stein + rocky + queens + pike + ocata diff --git a/releasenotes/source/ocata.rst b/releasenotes/source/ocata.rst new file mode 100644 index 0000000..ebe62f4 --- /dev/null +++ b/releasenotes/source/ocata.rst @@ -0,0 +1,6 @@ +=================================== + Ocata Series Release Notes +=================================== + +.. release-notes:: + :branch: origin/stable/ocata diff --git a/releasenotes/source/pike.rst b/releasenotes/source/pike.rst new file mode 100644 index 0000000..e43bfc0 --- /dev/null +++ b/releasenotes/source/pike.rst @@ -0,0 +1,6 @@ +=================================== + Pike Series Release Notes +=================================== + +.. release-notes:: + :branch: stable/pike diff --git a/releasenotes/source/queens.rst b/releasenotes/source/queens.rst new file mode 100644 index 0000000..36ac616 --- /dev/null +++ b/releasenotes/source/queens.rst @@ -0,0 +1,6 @@ +=================================== + Queens Series Release Notes +=================================== + +.. release-notes:: + :branch: stable/queens diff --git a/releasenotes/source/rocky.rst b/releasenotes/source/rocky.rst new file mode 100644 index 0000000..40dd517 --- /dev/null +++ b/releasenotes/source/rocky.rst @@ -0,0 +1,6 @@ +=================================== + Rocky Series Release Notes +=================================== + +.. release-notes:: + :branch: stable/rocky diff --git a/releasenotes/source/stein.rst b/releasenotes/source/stein.rst new file mode 100644 index 0000000..efaceb6 --- /dev/null +++ b/releasenotes/source/stein.rst @@ -0,0 +1,6 @@ +=================================== + Stein Series Release Notes +=================================== + +.. release-notes:: + :branch: stable/stein diff --git a/releasenotes/source/train.rst b/releasenotes/source/train.rst new file mode 100644 index 0000000..5839003 --- /dev/null +++ b/releasenotes/source/train.rst @@ -0,0 +1,6 @@ +========================== +Train Series Release Notes +========================== + +.. release-notes:: + :branch: stable/train diff --git a/releasenotes/source/unreleased.rst b/releasenotes/source/unreleased.rst new file mode 100644 index 0000000..875030f --- /dev/null +++ b/releasenotes/source/unreleased.rst @@ -0,0 +1,5 @@ +============================ +Current Series Release Notes +============================ + +.. release-notes:: diff --git a/releasenotes/source/ussuri.rst b/releasenotes/source/ussuri.rst new file mode 100644 index 0000000..e21e50e --- /dev/null +++ b/releasenotes/source/ussuri.rst @@ -0,0 +1,6 @@ +=========================== +Ussuri Series Release Notes +=========================== + +.. release-notes:: + :branch: stable/ussuri diff --git a/releasenotes/source/victoria.rst b/releasenotes/source/victoria.rst new file mode 100644 index 0000000..4efc7b6 --- /dev/null +++ b/releasenotes/source/victoria.rst @@ -0,0 +1,6 @@ +============================= +Victoria Series Release Notes +============================= + +.. release-notes:: + :branch: stable/victoria diff --git a/releasenotes/source/wallaby.rst b/releasenotes/source/wallaby.rst new file mode 100644 index 0000000..d77b565 --- /dev/null +++ b/releasenotes/source/wallaby.rst @@ -0,0 +1,6 @@ +============================ +Wallaby Series Release Notes +============================ + +.. release-notes:: + :branch: stable/wallaby diff --git a/releasenotes/source/xena.rst b/releasenotes/source/xena.rst new file mode 100644 index 0000000..1be85be --- /dev/null +++ b/releasenotes/source/xena.rst @@ -0,0 +1,6 @@ +========================= +Xena Series Release Notes +========================= + +.. release-notes:: + :branch: stable/xena diff --git a/releasenotes/source/yoga.rst b/releasenotes/source/yoga.rst new file mode 100644 index 0000000..43cafde --- /dev/null +++ b/releasenotes/source/yoga.rst @@ -0,0 +1,6 @@ +========================= +Yoga Series Release Notes +========================= + +.. release-notes:: + :branch: unmaintained/yoga diff --git a/releasenotes/source/zed.rst b/releasenotes/source/zed.rst new file mode 100644 index 0000000..9608c05 --- /dev/null +++ b/releasenotes/source/zed.rst @@ -0,0 +1,6 @@ +======================== +Zed Series Release Notes +======================== + +.. release-notes:: + :branch: stable/zed diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ad1c7e9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,13 @@ +cryptography>=2.7 # BSD/Apache-2.0 +decorator>=4.4.1 # BSD +dogpile.cache>=0.6.5 # BSD +iso8601>=0.1.11 # MIT +jmespath>=0.9.0 # MIT +jsonpatch!=1.20,>=1.16 # BSD +keystoneauth1>=3.18.0 # Apache-2.0 +netifaces>=0.10.4 # MIT +os-service-types>=1.7.0 # Apache-2.0 +pbr!=2.1.0,>=2.0.0 # Apache-2.0 +platformdirs>=3 # MIT License +PyYAML>=3.13 # MIT +requestsexceptions>=1.2.0 # Apache-2.0 diff --git a/roles/deploy-clouds-config/README.rst b/roles/deploy-clouds-config/README.rst new file mode 100644 index 0000000..e69de29 diff --git a/roles/deploy-clouds-config/defaults/main.yaml b/roles/deploy-clouds-config/defaults/main.yaml new file mode 100644 index 0000000..9739eb1 --- /dev/null +++ b/roles/deploy-clouds-config/defaults/main.yaml @@ -0,0 +1 @@ +zuul_work_dir: "{{ zuul.project.src_dir }}" diff --git a/roles/deploy-clouds-config/tasks/main.yaml b/roles/deploy-clouds-config/tasks/main.yaml new file mode 100644 index 0000000..f10533b --- /dev/null +++ b/roles/deploy-clouds-config/tasks/main.yaml @@ -0,0 +1,11 @@ +- name: Create OpenStack config dir + ansible.builtin.file: + dest: ~/.config/openstack + state: directory + recurse: true + +- name: Deploy clouds.yaml + ansible.builtin.template: + src: clouds.yaml.j2 + dest: ~/.config/openstack/clouds.yaml + mode: 0440 diff --git a/roles/deploy-clouds-config/templates/clouds.yaml.j2 b/roles/deploy-clouds-config/templates/clouds.yaml.j2 new file mode 100644 index 0000000..267d900 --- /dev/null +++ b/roles/deploy-clouds-config/templates/clouds.yaml.j2 @@ -0,0 +1,2 @@ +--- +{{ cloud_config | to_nice_yaml }} diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..f1a3521 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,55 @@ +[metadata] +name = openstacksdk +summary = An SDK for building applications to work with OpenStack +description_file = + README.rst +author = OpenStack +author_email = openstack-discuss@lists.openstack.org +home_page = https://docs.openstack.org/openstacksdk/ +classifier = + Environment :: OpenStack + Intended Audience :: Information Technology + Intended Audience :: System Administrators + License :: OSI Approved :: Apache Software License + Operating System :: POSIX :: Linux + Programming Language :: Python + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 + Programming Language :: Python :: 3.9 + Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 +python_requires = >=3.7 + +[files] +packages = + openstack + +# TODO(mordred) Move this to an OSC command before 1.0 +[entry_points] +console_scripts = + openstack-inventory = openstack.cloud.cmd.inventory:main + +[mypy] +show_column_numbers = true +show_error_context = true +ignore_missing_imports = true +# follow_imports = normal +follow_imports = skip +incremental = true +check_untyped_defs = true +warn_unused_ignores = false +# keep this in-sync with 'mypy.exclude' in '.pre-commit-config.yaml' +# TODO(stephenfin) Eventually we should remove everything here except the +# unit tests module +exclude = (?x)( + openstack/tests/ansible + | openstack/tests/functional + | openstack/tests/unit + | openstack/tests/fixtures.py + | openstack/cloud + | openstack/fixture + | doc + | examples + | releasenotes + ) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..83c92e2 --- /dev/null +++ b/setup.py @@ -0,0 +1,19 @@ +# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT +import setuptools + +setuptools.setup(setup_requires=['pbr>=2.0.0'], pbr=True) diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..b771e0c --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,13 @@ +coverage!=4.4,>=4.0 # Apache-2.0 +ddt>=1.0.1 # MIT +fixtures>=3.0.0 # Apache-2.0/BSD +hacking>=3.1.0,<4.0.0 # Apache-2.0 +jsonschema>=3.2.0 # MIT +oslo.config>=6.1.0 # Apache-2.0 +oslotest>=3.2.0 # Apache-2.0 +prometheus-client>=0.4.2 # Apache-2.0 +requests-mock>=1.2.0 # Apache-2.0 +statsd>=3.3.0 +stestr>=1.0.0 # Apache-2.0 +testscenarios>=0.4 # Apache-2.0/BSD +testtools>=2.2.0 # MIT diff --git a/tools/keystone_version.py b/tools/keystone_version.py new file mode 100644 index 0000000..8ca504e --- /dev/null +++ b/tools/keystone_version.py @@ -0,0 +1,92 @@ +# Copyright (c) 2017 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pprint +import sys +from urllib import parse as urlparse + +import openstack.config + + +def print_versions(r): + if 'version' in r: + for version in r['version']: + print_version(version) + if 'values' in r: + for version in r['values']: + print_version(version) + if isinstance(r, list): + for version in r: + print_version(version) + + +def print_version(version): + if version['status'] in ('CURRENT', 'stable'): + print( + "\tVersion ID: {id} updated {updated}".format( + id=version.get('id'), updated=version.get('updated') + ) + ) + + +verbose = '-v' in sys.argv +ran = [] +for cloud in openstack.config.OpenStackConfig().get_all_clouds(): + if cloud.name in ran: + continue + ran.append(cloud.name) + # We don't actually need a compute client - but we'll be getting full urls + # anyway. Without this SSL cert info becomes wrong. + c = cloud.get_session_client('compute') + endpoint = cloud.config['auth']['auth_url'] + try: + print(endpoint) + r = c.get(endpoint).json() + if verbose: + pprint.pprint(r) + except Exception as e: + print("Error with {cloud}: {e}".format(cloud=cloud.name, e=str(e))) + continue + if 'version' in r: + print_version(r['version']) + url = urlparse.urlparse(endpoint) + parts = url.path.split(':') + if len(parts) == 2: + path, port = parts + else: + path = url.path + port = None + stripped = path.rsplit('/', 2)[0] + if port: + stripped = '{stripped}:{port}'.format(stripped=stripped, port=port) + endpoint = urlparse.urlunsplit( + (url.scheme, url.netloc, stripped, url.params, url.query) + ) + print(" also {endpoint}".format(endpoint=endpoint)) + try: + r = c.get(endpoint).json() + if verbose: + pprint.pprint(r) + except Exception: + print("\tUnauthorized") + continue + if 'version' in r: + print_version(r) + elif 'versions' in r: + print_versions(r['versions']) + else: + print("\n\nUNKNOWN\n\n{r}".format(r=r)) + else: + print_versions(r['versions']) diff --git a/tools/nova_version.py b/tools/nova_version.py new file mode 100644 index 0000000..ad8ea0c --- /dev/null +++ b/tools/nova_version.py @@ -0,0 +1,61 @@ +# Copyright (c) 2017 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import openstack.config + +ran = [] +for cloud in openstack.config.OpenStackConfig().get_all_clouds(): + if cloud.name in ran: + continue + ran.append(cloud.name) + c = cloud.get_session_client('compute') + try: + raw_endpoint = c.get_endpoint() + have_current = False + endpoint = raw_endpoint.rsplit('/', 2)[0] + print(endpoint) + r = c.get(endpoint).json() + except Exception: + print("Error with %s" % cloud.name) + continue + for version in r['versions']: + if version['status'] == 'CURRENT': + have_current = True + print( + "\tVersion ID: {id} updated {updated}".format( + id=version.get('id'), updated=version.get('updated') + ) + ) + print("\tVersion Max: {max}".format(max=version.get('version'))) + print( + "\tVersion Min: {min}".format(min=version.get('min_version')) + ) + if not have_current: + for version in r['versions']: + if version['status'] == 'SUPPORTED': + have_current = True + print( + "\tVersion ID: {id} updated {updated}".format( + id=version.get('id'), updated=version.get('updated') + ) + ) + print( + "\tVersion Max: {max}".format(max=version.get('version')) + ) + print( + "\tVersion Min: {min}".format( + min=version.get('min_version') + ) + ) diff --git a/tools/print-services.py b/tools/print-services.py new file mode 100644 index 0000000..6b9c95b --- /dev/null +++ b/tools/print-services.py @@ -0,0 +1,135 @@ +# Copyright 2018 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import importlib +import warnings + +import os_service_types + +from openstack import _log +from openstack import service_description + +_logger = _log.setup_logging('openstack') +_service_type_manager = os_service_types.ServiceTypes() + + +def make_names(): + imports = ['from openstack import service_description'] + services = [] + + for service in _service_type_manager.services: + service_type = service['service_type'] + if service_type == 'ec2-api': + # NOTE(mordred) It doesn't make any sense to use ec2-api + # from openstacksdk. The credentials API calls are all calls + # on identity endpoints. + continue + desc_class = _find_service_description_class(service_type) + + st = service_type.replace('-', '_') + + if desc_class.__module__ != 'openstack.service_description': + base_mod, dm = desc_class.__module__.rsplit('.', 1) + imports.append( + 'from {base_mod} import {dm}'.format(base_mod=base_mod, dm=dm) + ) + else: + dm = 'service_description' + + dc = desc_class.__name__ + services.append( + "{st} = {dm}.{dc}(service_type='{service_type}')".format( + st=st, dm=dm, dc=dc, service_type=service_type + ), + ) + + # Register the descriptor class with every known alias. Don't + # add doc strings though - although they are supported, we don't + # want to give anybody any bad ideas. Making a second descriptor + # does not introduce runtime cost as the descriptors all use + # the same _proxies dict on the instance. + for alias_name in _get_aliases(st): + if alias_name[-1].isdigit(): + continue + services.append( + '{alias_name} = {st}'.format(alias_name=alias_name, st=st) + ) + services.append('') + print("# Generated file, to change, run tools/print-services.py") + for imp in sorted(imports): + print(imp) + print('\n') + print("class ServicesMixin:\n") + for service in services: + if service: + print(" {service}".format(service=service)) + else: + print() + + +def _get_aliases(service_type, aliases=None): + # We make connection attributes for all official real type names + # and aliases. Three services have names they were called by in + # openstacksdk that are not covered by Service Types Authority aliases. + # Include them here - but take heed, no additional values should ever + # be added to this list. + # that were only used in openstacksdk resource naming. + LOCAL_ALIASES = { + 'baremetal': 'bare_metal', + 'block_storage': 'block_store', + 'clustering': 'cluster', + } + all_types = set(_service_type_manager.get_aliases(service_type)) + if aliases: + all_types.update(aliases) + if service_type in LOCAL_ALIASES: + all_types.add(LOCAL_ALIASES[service_type]) + all_aliases = set() + for alias in all_types: + all_aliases.add(alias.replace('-', '_')) + return all_aliases + + +def _find_service_description_class(service_type): + package_name = f'openstack.{service_type}'.replace('-', '_') + module_name = service_type.replace('-', '_') + '_service' + class_name = ''.join( + [part.capitalize() for part in module_name.split('_')] + ) + + # We have some exceptions :( + # This should have been called 'shared-filesystem' + if service_type == 'shared-file-system': + class_name = 'SharedFilesystemService' + + try: + import_name = '.'.join([package_name, module_name]) + service_description_module = importlib.import_module(import_name) + except ImportError as e: + # ImportWarning is ignored by default. This warning is here + # as an opt-in for people trying to figure out why something + # didn't work. + warnings.warn( + f"Could not import {service_type} service description: {str(e)}", + ImportWarning, + ) + return service_description.ServiceDescription + + # There are no cases in which we should have a module but not the class + # inside it. + service_description_class = getattr(service_description_module, class_name) + return service_description_class + + +make_names() diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..693535a --- /dev/null +++ b/tox.ini @@ -0,0 +1,166 @@ +[tox] +minversion = 4.3.0 +envlist = pep8,py3 + +[testenv] +description = + Run unit tests. +passenv = + OS_* + OPENSTACKSDK_* +setenv = + LANG=en_US.UTF-8 + LANGUAGE=en_US:en + LC_ALL=C + OS_LOG_CAPTURE={env:OS_LOG_CAPTURE:true} + OS_STDOUT_CAPTURE={env:OS_STDOUT_CAPTURE:true} + OS_STDERR_CAPTURE={env:OS_STDERR_CAPTURE:true} +deps = + -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} + -r{toxinidir}/test-requirements.txt + -r{toxinidir}/requirements.txt +commands = + stestr run {posargs} + stestr slowest + +[testenv:functional{,-py37,-py38,-py39,-py310,-py311,-py312}] +description = + Run functional tests. +# Some jobs (especially heat) takes longer, therefore increase default timeout +# This timeout should not be smaller, than the longest individual timeout +setenv = + {[testenv]setenv} + OS_TEST_TIMEOUT=600 + OPENSTACKSDK_FUNC_TEST_TIMEOUT_LOAD_BALANCER=600 + OPENSTACKSDK_EXAMPLE_CONFIG_KEY=functional + OPENSTACKSDK_FUNC_TEST_TIMEOUT_PROJECT_CLEANUP=1200 +commands = + stestr --test-path ./openstack/tests/functional/{env:OPENSTACKSDK_TESTS_SUBDIR:} run --serial {posargs} + stestr slowest + +# Acceptance tests are the ones running on real clouds +[testenv:acceptance-regular-user] +description = + Run acceptance tests. +# This env intends to test functions of a regular user without admin privileges +# Some jobs (especially heat) takes longer, therefore increase default timeout +# This timeout should not be smaller, than the longest individual timeout +setenv = + {[testenv]setenv} + OS_TEST_TIMEOUT=600 + OPENSTACKSDK_FUNC_TEST_TIMEOUT_LOAD_BALANCER=600 + # OPENSTACKSDK_DEMO_CLOUD and OS_CLOUD should point to the cloud to test + # Othee clouds are explicitly set empty to let tests detect absense + OPENSTACKSDK_DEMO_CLOUD_ALT= + OPENSTACKSDK_OPERATOR_CLOUD= +commands = + stestr --test-path ./openstack/tests/functional/{env:OPENSTACKSDK_TESTS_SUBDIR:} run --serial {posargs} --include-list include-acceptance-regular-user.txt + stestr slowest + +[testenv:pep8] +description = + Run style checks. +deps = + pre-commit +commands = + pre-commit run --all-files --show-diff-on-failure + +[testenv:venv] +description = + Run specified command in a virtual environment with all dependencies installed. +deps = + -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} + -r{toxinidir}/test-requirements.txt + -r{toxinidir}/requirements.txt + -r{toxinidir}/doc/requirements.txt +commands = {posargs} + +[testenv:debug] +description = + Run specified tests through oslo_debug_helper, which allows use of pdb. +# allow 1 year, or 31536000 seconds, to debug a test before it times out +setenv = + OS_TEST_TIMEOUT=31536000 +allowlist_externals = find +commands = + find . -type f -name "*.pyc" -delete + oslo_debug_helper -t openstack/tests {posargs} + +[testenv:cover] +description = + Run unit tests and generate coverage report. +setenv = + {[testenv]setenv} + PYTHON=coverage run --source openstack --parallel-mode +commands = + stestr run {posargs} + coverage combine + coverage html -d cover + coverage xml -o cover/coverage.xml + +[testenv:ansible] +description = + Run ansible tests. +# Need to pass some env vars for the Ansible playbooks +passenv = + HOME + USER + ANSIBLE_VAR_* +deps = + {[testenv]deps} + ansible +commands = {toxinidir}/extras/run-ansible-tests.sh -e {envdir} {posargs} + +[testenv:docs] +description = + Build documentation in HTML format. +deps = + -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} + -r{toxinidir}/doc/requirements.txt +commands = + sphinx-build -W --keep-going -b html -j auto doc/source/ doc/build/html + +[testenv:pdf-docs] +description = + Build documentation in PDF format. +deps = {[testenv:docs]deps} +allowlist_externals = + make +commands = + sphinx-build -W --keep-going -b latex -j auto doc/source/ doc/build/pdf + make -C doc/build/pdf + +[testenv:releasenotes] +description = + Build release note documentation in HTML format. +deps = + -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} + -r{toxinidir}/doc/requirements.txt +commands = + sphinx-build -W --keep-going -b html -j auto releasenotes/source releasenotes/build/html + +[flake8] +application-import-names = openstack +# The following are ignored on purpose. It's not super worth it to fix them. +# However, if you feel strongly about it, patches will be accepted to fix them +# if they fix ALL of the occurances of one and only one of them. +# E203 Black will put spaces after colons in list comprehensions +# E501 Black takes care of line length for us +# H238 New Style Classes are the default in Python3 +# H301 Black will put commas after imports that can't fit on one line +# H4 Are about docstrings and there's just a huge pile of pre-existing issues. +# W503 Is supposed to be off by default but in the latest pycodestyle isn't. +# Also, both openstacksdk and Donald Knuth disagree with the rule. Line +# breaks should occur before the binary operator for readability. +ignore = E203, E501, H301, H238, H4, W503 +import-order-style = pep8 +show-source = True +exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build,openstack/_services_mixin.py + +[flake8:local-plugins] +extension = + O300 = _hacking:assert_no_setupclass +paths = ./openstack + +[doc8] +extensions = .rst, .yaml diff --git a/zuul.d/acceptance-jobs.yaml b/zuul.d/acceptance-jobs.yaml new file mode 100644 index 0000000..3a94fdc --- /dev/null +++ b/zuul.d/acceptance-jobs.yaml @@ -0,0 +1,156 @@ +--- +- semaphore: + name: acceptance-cleura + max: 1 + +- job: + name: openstacksdk-acceptance-base + parent: openstack-tox + description: | + Acceptance test of the OpenStackSDK on real clouds. + + .. zuul:jobsvar::openstack_credentials + :type: dict + + This is expected to be a Zuul Secret with these keys: + + .. zuul:jobvar: auth + :type: dict + + Dictionary with authentication information with mandatory auth_url + and others. The structure mimics `clouds.yaml` structure. + + By default all jobs that inherit from here are non voting. + + attempts: 1 + voting: false + timeout: 3600 + pre-run: + - playbooks/acceptance/pre.yaml + post-run: + - playbooks/acceptance/post.yaml + vars: + tox_envlist: acceptance-regular-user + tox_environment: + OPENSTACKSDK_DEMO_CLOUD: acceptance + OS_CLOUD: acceptance + OS_TEST_CLOUD: acceptance + +# Acceptance tests for devstack are different from running for real cloud since +# we need to actually deploy devstack first and API is available only on the +# devstack host. +- job: + name: openstacksdk-acceptance-devstack + parent: openstacksdk-functional-devstack + description: Acceptance test of the OpenStackSDK on real clouds. + attempts: 1 + run: + - playbooks/acceptance/run-with-devstack.yaml + post-run: + - playbooks/acceptance/post.yaml + vars: + tox_envlist: acceptance-regular-user + tox_environment: + OPENSTACKSDK_DEMO_CLOUD: acceptance + OS_CLOUD: acceptance + OS_TEST_CLOUD: acceptance + auth_url: "https://{{ hostvars['controller']['nodepool']['private_ipv4'] }}/identity" + secrets: + - secret: credentials-devstack + name: openstack_credentials + +- job: + name: openstacksdk-acceptance-cleura + parent: openstacksdk-acceptance-base + description: Acceptance tests of the OpenStackSDK on Cleura + semaphores: + - name: acceptance-cleura + secrets: + - secret: credentials-cleura + name: openstack_credentials + pass-to-parent: true + +# Devstack secret is not specifying auth_url because of how Zuul treats secrets. +# Auth_url comes extra in the job vars and is being used if no auth_url in the +# secret is present. +- secret: + name: credentials-devstack + data: + auth: + username: demo + password: secretadmin + project_domain_id: default + project_name: demo + user_domain_id: default + region_name: RegionOne + verify: false + +# Contact: tobias [xdot] rydberg [mat] citynetwork [xdot] eu +- secret: + name: credentials-cleura + data: + auth: + auth_url: https://fra1.citycloud.com:5000 + user_domain_name: !encrypted/pkcs1-oaep + - B2+GBOl0HqQJ0umGR/8y6Y1SS+O6h7OK6rTa54797UavexKVxx2RZ144wPmW+IogX2QU2 + tWtGBveQnZTpI19nxlnLmQQA+YSz8RIzJoFuStBmiITyCHQnvRJPc7kObjnZJLuoVwCT2 + Rl3u1iGzJb/ZZvVDjvYH2ZW7a6aH+Ct7HfB+CGhvhETeoMAFDgb29QJ5U/T3OkVdTMwCY + XDtdwg2JvoErd2gnNCqYDcIiOMO6lXKcc+35VQtGMGfoaUvu+iMlEi9pJqbdVd7qz5lgY + AWBPG1mYt1mOaP8RRvzywhyRPnnnFgfUe2rf2ZozEUa7j4ObwXt7D8oRYXm+USEpk+YfD + 9V3CvGvAgmPuuidGWwnZdPcNX/w/VW5p9oWRgJFYChb5+XCu7y0tFJX/usduZEY9/MvJs + Iv0+OFf1TXc29qFqwGYVSyfimBroGFdYXmHSwK7wHJ1GUsdSRhQz4eYIdk+6c4LNx9JgO + 5Z+3Q29tlh9WwuuQKE/JlKJ/1I9LC0RmyJyxSaiTLDiL+7J2O/hULmyZimbXVcYuXqDdo + KAdPryYhmWWyBFkZfUa88GxwVf+WDLQqXhv+CDGRusbW2opVvv6p7NUwLh9PPOGnRLsS2 + y1fZDVtz60ZMp8MQPACYjlzvc2lF5Z1Cvskr3O9KbT27V7AyLXmU+tbMrDLpC0= + project_domain_name: !encrypted/pkcs1-oaep + - B2+GBOl0HqQJ0umGR/8y6Y1SS+O6h7OK6rTa54797UavexKVxx2RZ144wPmW+IogX2QU2 + tWtGBveQnZTpI19nxlnLmQQA+YSz8RIzJoFuStBmiITyCHQnvRJPc7kObjnZJLuoVwCT2 + Rl3u1iGzJb/ZZvVDjvYH2ZW7a6aH+Ct7HfB+CGhvhETeoMAFDgb29QJ5U/T3OkVdTMwCY + XDtdwg2JvoErd2gnNCqYDcIiOMO6lXKcc+35VQtGMGfoaUvu+iMlEi9pJqbdVd7qz5lgY + AWBPG1mYt1mOaP8RRvzywhyRPnnnFgfUe2rf2ZozEUa7j4ObwXt7D8oRYXm+USEpk+YfD + 9V3CvGvAgmPuuidGWwnZdPcNX/w/VW5p9oWRgJFYChb5+XCu7y0tFJX/usduZEY9/MvJs + Iv0+OFf1TXc29qFqwGYVSyfimBroGFdYXmHSwK7wHJ1GUsdSRhQz4eYIdk+6c4LNx9JgO + 5Z+3Q29tlh9WwuuQKE/JlKJ/1I9LC0RmyJyxSaiTLDiL+7J2O/hULmyZimbXVcYuXqDdo + KAdPryYhmWWyBFkZfUa88GxwVf+WDLQqXhv+CDGRusbW2opVvv6p7NUwLh9PPOGnRLsS2 + y1fZDVtz60ZMp8MQPACYjlzvc2lF5Z1Cvskr3O9KbT27V7AyLXmU+tbMrDLpC0= + project_name: !encrypted/pkcs1-oaep + - IRSHyf964g3q7vHY08reyx69cGDLG/+kkEnZ4fs4qiwBw1RL1wKW3r3Omi1PLXDHHCHfC + jlRrwvZh80CzG3nqt94WSiASjn4XvZtCV0++UZxCkdEs/2SXN1YYpBGLqotM91NhQHCpo + Xu6KD7U8ckZgjAQFzV/rF7pnFSvzb14PQqBiQ4Ei7nFyrg6sW20ratjC+pBboUORPvPjG + wuY/lt8kRXYnPlI/oeFngXMl/WD7z5k0kLwUcg/z9x3uF6b6xozR8Vzjal13RR7FU5Tu7 + T5Qr8uREPHlK8aU90XnNrlJqIAfIFuAlmZCeckIMlVqGjGBekI2W/zPXhL/SjR2SNeTIl + SwKfInnT0SfGqKTAjgPJAocZSNppt4ql1EsS3Rdp8SQ0EGW7pXs73svexNRhh4k1m7gM1 + 54OoyS2wtMaTR3Q3L92ZuT2DdxmPbvXThbRO5P2g0yDpp/HuWkQyHq9b1tZD+p7akU7p+ + g8fIQFKFueFP0T6XszQSPySjjaTZOWd0CQC2oTlivcf7oZ4etp22Zh7IDCXWLX39C2LkF + XLBaEa9LRxn1UwJ2bz2nUPjqDsOz2nRskC9Yz0XOOEKMokJ4POj+uac1iRfAf+hAGd9uE + 7rNIp/7oV5ABOimJ5bgCI1SWAsz2F1lRq+bulzbONLmWfPik52bo/elXTxRais= + username: !encrypted/pkcs1-oaep + - bTHRzdAYEKXeFhrU3sBRN19ygO2t2zzXdeuB4DQq7Q+7VW7Apo8Vo1eaqpqjUnpI2jPG+ + DJSg0ZG3tUsnRwwKo3N8RzwFNWj5wcUEtHjmFgMmLBvlv9Jv6OeN7R7AH7b21agTMTvwz + X7hGWbYSEgDLn80uNTwcm4GVA0mycXDtIvZ4lPiCGkUJYav9++YbGYzDyiy2pBgVU0r5G + 7GTO+cHQWUw+LL/scBijL4khLIxiHNgUNNfgAYOI/JQ720DxXSDF30SN8fRy0H0jl54Gr + w0exl9QPBjI+o+qvFKq2Bni8dTp96MaC8pDxP/1/R8mEMYD2Ei3Ame1dfeUz7OgrQfpQv + xlDSE/sM2/g0PG3YlpG+aCllZ1el2qM/B+pyq5JXf26swp1RdjehvUSIi3gQaqkC3qpRt + 2FgZDKdHW6PYRmRlCphS5WK1otdCQEvyJ+s4QB4PooMcD4rqAf5hURGd5zr/aajqmEgXX + eJKeLQrQD+4yJWeopcq7a66R3LeL07Dko2LWWlL6adGeQ5yd3eIZK7zwObTVE64DSbXDs + 3UI8U6Qa3EMlrfEk8TXcK1QW2EM1JFiPBSm9e8zojTtg/caAyROXgn1T9qv0FKMcJZrOo + Qt+n7vv1wkCSUoUEQFIadcMUn5EoXeTcRbjAOsRFN/OOh6+4jyNTh17cOC5dkc= + password: !encrypted/pkcs1-oaep + - FbeRKkCs2YlDYm944EUuUbY2mVcTwSgE00gMZokmXR2WjKqRsuLFpkOe9opndwqV1tUyj + mxAGizoGlzI+Lg8VnS47zShM+UqgaNzC148iY+WBuLXAEoxS3c9Gxz03Gm/Q2Tu6MJoCG + OY8JvQkq+pjwkV61sIawTfQRTZkwjFO8F/viSOuF75PDZthY5SuMN5MEJ8B8Ska0WNbjw + Edo623gZnyZsPvZwnqnP+yK0HW0smohKkvjHPZ5SGFiQ0G3eTSHaL5wrYWbkcZ5Gb4UgX + x1edebv0ata0fZ8nhIwTrDIVe9icuijuV1ZkvHMGPvB50fkup4/QyObx6QUhL6D0mXaK5 + fIq+dgrzkvcoODrwpXvBVxjNYnM+DBeMbN0V8d4vDvsRPsWCxIenETse1gD0PJyXx29br + /Vild1xO1JnxoU469fl/gzdntyoV/QaLDteLKMFJISAFuVrcCEUz63s37iKAy6LnCtv/J + PjciFvc2OR0cGUC/an3xtmqi18GWcWdinaBA0+OEnArdOdSc79MTZnMifICAeCQ3yiEnA + 001hbBrRYTHgitpo4gYJOFMVufhcfvq6yB9wi3MqvpKP8wGH2SyNz7y5Gy9zbUgQFsRP7 + 2h3LRDRCVGYBVgBLD5mcIMn93HddOko8Q8RO8qVZM13R39dgGAi0KMEhF3bpjA= + +# We define additional project entity not to handle acceptance jobs in +# already complex enough general project entity. +- project: + post-review: + jobs: + - openstacksdk-acceptance-devstack + - openstacksdk-acceptance-cleura diff --git a/zuul.d/functional-jobs.yaml b/zuul.d/functional-jobs.yaml new file mode 100644 index 0000000..b0933a8 --- /dev/null +++ b/zuul.d/functional-jobs.yaml @@ -0,0 +1,469 @@ +--- +# Definitions of functional jobs +- job: + name: openstacksdk-functional-devstack-minimum + parent: devstack-tox-functional + description: | + Minimum job for devstack-based functional tests + post-run: playbooks/devstack/post.yaml + roles: + # NOTE: We pull in roles from the tempest repo for stackviz processing. + - zuul: opendev.org/openstack/tempest + required-projects: + # These jobs will DTRT when openstacksdk triggers them, but we want to + # make sure stable branches of openstacksdk never get cloned by other + # people, since stable branches of openstacksdk are, well, not actually + # things. + - name: openstack/openstacksdk + override-branch: master + - name: openstack/os-client-config + override-branch: master + timeout: 9000 + vars: + devstack_localrc: + Q_ML2_PLUGIN_EXT_DRIVERS: qos,port_security + Q_AGENT: openvswitch + Q_ML2_TENANT_NETWORK_TYPE: vxlan + Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch + devstack_services: + # OVN services + ovn-controller: false + ovn-northd: false + ovs-vswitchd: false + ovsdb-server: false + q-ovn-metadata-agent: false + # Neutron services + q-agt: true + q-dhcp: true + q-l3: true + q-metering: true + q-svc: true + # sdk doesn't need vnc access + n-cauth: false + n-novnc: false + # sdk testing uses config drive only + n-api-meta: false + q-meta: false + tox_environment: + # Do we really need to set this? It's cargo culted + PYTHONUNBUFFERED: 'true' + # Is there a way we can query the localconf variable to get these + # rather than setting them explicitly? + OPENSTACKSDK_HAS_DESIGNATE: 0 + OPENSTACKSDK_HAS_HEAT: 0 + OPENSTACKSDK_HAS_MAGNUM: 0 + OPENSTACKSDK_HAS_NEUTRON: 1 + OPENSTACKSDK_HAS_SWIFT: 1 + tox_install_siblings: false + tox_envlist: functional + zuul_copy_output: + '{{ ansible_user_dir }}/stackviz': logs + zuul_work_dir: src/opendev.org/openstack/openstacksdk + +- job: + name: openstacksdk-functional-devstack-base + parent: openstacksdk-functional-devstack-minimum + description: | + Base job for devstack-based functional tests + vars: + devstack_plugins: + neutron: https://opendev.org/openstack/neutron + devstack_local_conf: + post-config: + $CINDER_CONF: + DEFAULT: + osapi_max_limit: 6 + +- job: + name: openstacksdk-functional-devstack + parent: openstacksdk-functional-devstack-base + description: | + Run openstacksdk functional tests against a master devstack + required-projects: + - openstack/heat + vars: + devstack_localrc: + DISABLE_AMP_IMAGE_BUILD: true + Q_SERVICE_PLUGIN_CLASSES: qos,trunk + # TODO(frickler): drop this once heat no longer needs it + KEYSTONE_ADMIN_ENDPOINT: true + devstack_plugins: + heat: https://opendev.org/openstack/heat + tox_environment: + OPENSTACKSDK_HAS_HEAT: 1 + devstack_services: + neutron-qos: true + neutron-trunk: true + neutron-port-forwarding: true + +- job: + name: openstacksdk-functional-devstack-networking + parent: openstacksdk-functional-devstack + description: | + Run openstacksdk functional tests against a devstack with advanced + networking services enabled. + required-projects: + - openstack/designate + - openstack/octavia + vars: + configure_swap_size: 4096 + devstack_local_conf: + post-config: + $OCTAVIA_CONF: + DEFAULT: + debug: true + controller_worker: + amphora_driver: amphora_noop_driver + compute_driver: compute_noop_driver + network_driver: network_noop_driver + certificates: + cert_manager: local_cert_manager + devstack_localrc: + Q_SERVICE_PLUGIN_CLASSES: qos,trunk + devstack_plugins: + designate: https://opendev.org/openstack/designate + octavia: https://opendev.org/openstack/octavia + devstack_services: + designate: true + octavia: true + o-api: true + o-cw: true + o-hm: true + o-hk: true + neutron-dns: true + s-account: false + s-container: false + s-object: false + s-proxy: false + h-eng: false + h-api: false + h-api-cfn: false + tox_environment: + OPENSTACKSDK_HAS_DESIGNATE: 1 + OPENSTACKSDK_HAS_SWIFT: 0 + OPENSTACKSDK_HAS_HEAT: 0 + +- job: + name: openstacksdk-functional-devstack-networking-ext + parent: openstacksdk-functional-devstack-networking + description: | + Run openstacksdk functional tests against a devstack with super advanced + networking services enabled (VPNaas, FWaas) which still require ovs. + required-projects: + - openstack/neutron-fwaas + - openstack/neutron-vpnaas + vars: + INSTALL_OVN: False + configure_swap_size: 4096 + devstack_local_conf: + post-config: + $OCTAVIA_CONF: + DEFAULT: + debug: true + controller_worker: + amphora_driver: amphora_noop_driver + compute_driver: compute_noop_driver + network_driver: network_noop_driver + certificates: + cert_manager: local_cert_manager + $NEUTRON_CONF: + DEFAULT: + router_distributed: True + l3_ha: True + "/$NEUTRON_CORE_PLUGIN_CONF": + ovs: + tunnel_bridge: br-tun + bridge_mappings: public:br-ex + $NEUTRON_L3_CONF: + DEFAULT: + agent_mode: dvr_snat + agent: + availability_zone: nova + debug_iptables_rules: True + $NEUTRON_DHCP_CONF: + agent: + availability_zone: nova + devstack_localrc: + Q_SERVICE_PLUGIN_CLASSES: qos,trunk + NETWORK_API_EXTENSIONS: "agent,binding,dhcp_agent_scheduler,external-net,ext-gw-mode,extra_dhcp_opts,quotas,router,security-group,subnet_allocation,network-ip-availability,auto-allocated-topology,timestamp_core,tag,service-type,rbac-policies,standard-attr-description,pagination,sorting,project-id,fwaas_v2,vpnaas" + Q_AGENT: openvswitch + Q_ML2_TENANT_NETWORK_TYPE: vxlan + Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch + IPSEC_PACKAGE: libreswan + devstack_plugins: + designate: https://opendev.org/openstack/designate + octavia: https://opendev.org/openstack/octavia + neutron-fwaas: https://opendev.org/openstack/neutron-fwaas.git + neutron-vpnaas: https://opendev.org/openstack/neutron-vpnaas.git + devstack_services: + designate: true + octavia: true + o-api: true + o-cw: true + o-hm: true + o-hk: true + neutron-dns: true + s-account: false + s-container: false + s-object: false + s-proxy: false + h-eng: false + h-api: false + h-api-cfn: false + q-fwaas-v2: true + tox_environment: + OPENSTACKSDK_HAS_DESIGNATE: 1 + OPENSTACKSDK_HAS_SWIFT: 0 + OPENSTACKSDK_HAS_HEAT: 0 + +- job: + name: openstacksdk-functional-devstack-tips + parent: openstacksdk-functional-devstack + description: | + Run openstacksdk functional tests with tips of library dependencies + against a master devstack. + required-projects: + - openstack/keystoneauth + - openstack/openstacksdk + - openstack/os-client-config + vars: + tox_install_siblings: true + +- job: + name: openstacksdk-functional-devstack-magnum + parent: openstacksdk-functional-devstack + description: | + Run openstacksdk functional tests against a master devstack with magnum + required-projects: + - openstack/magnum + - openstack/python-magnumclient + vars: + devstack_plugins: + magnum: https://opendev.org/openstack/magnum + devstack_localrc: + MAGNUM_GUEST_IMAGE_URL: https://tarballs.openstack.org/magnum/images/fedora-atomic-f23-dib.qcow2 + MAGNUM_IMAGE_NAME: fedora-atomic-f23-dib + devstack_services: + s-account: false + s-container: false + s-object: false + s-proxy: false + tox_environment: + OPENSTACKSDK_HAS_SWIFT: 0 + OPENSTACKSDK_HAS_MAGNUM: 1 + +- job: + name: openstacksdk-functional-devstack-senlin + parent: openstacksdk-functional-devstack + description: | + Run openstacksdk functional tests against a master devstack with senlin + required-projects: + - openstack/senlin + vars: + devstack_plugins: + senlin: https://opendev.org/openstack/senlin + devstack_services: + s-account: false + s-container: false + s-object: false + s-proxy: false + tox_environment: + OPENSTACKSDK_HAS_SWIFT: 0 + OPENSTACKSDK_HAS_SENLIN: 1 + +- job: + name: openstacksdk-functional-devstack-ironic + parent: openstacksdk-functional-devstack-minimum + description: | + Run openstacksdk functional tests against a master devstack with ironic + required-projects: + - openstack/ironic + - openstack/ironic-python-agent-builder + vars: + devstack_localrc: + OVERRIDE_PUBLIC_BRIDGE_MTU: 1400 + IRONIC_BAREMETAL_BASIC_OPS: true + IRONIC_BUILD_DEPLOY_RAMDISK: false + IRONIC_CALLBACK_TIMEOUT: 600 + IRONIC_DEPLOY_DRIVER: ipmi + IRONIC_RAMDISK_TYPE: tinyipa + IRONIC_VM_COUNT: 2 + IRONIC_VM_LOG_DIR: '{{ devstack_base_dir }}/ironic-bm-logs' + IRONIC_VM_SPECS_RAM: 1024 + devstack_plugins: + ironic: https://opendev.org/openstack/ironic + devstack_services: + c-api: false + c-bak: false + c-sch: false + c-vol: false + cinder: false + s-account: false + s-container: false + s-object: false + s-proxy: false + n-api: false + n-api-meta: false + n-cauth: false + n-cond: false + n-cpu: false + n-novnc: false + n-obj: false + n-sch: false + nova: false + placement-api: false + dstat: false + tox_environment: + OPENSTACKSDK_HAS_IRONIC: 1 + # NOTE(dtantsur): this job cannot run many regular tests (e.g. compute + # tests will take too long), so limiting it to baremetal tests only. + OPENSTACKSDK_TESTS_SUBDIR: baremetal + zuul_copy_output: + '{{ devstack_base_dir }}/ironic-bm-logs': logs + +- job: + name: openstacksdk-ansible-functional-devstack + parent: openstacksdk-functional-devstack + description: | + Run openstacksdk ansible functional tests against a master devstack + using released version of ansible. + vars: + tox_envlist: ansible + +- job: + name: openstacksdk-ansible-stable-2.8-functional-devstack + parent: openstacksdk-ansible-functional-devstack + description: | + Run openstacksdk ansible functional tests against a master devstack + using git stable-2.8 branch version of ansible. + required-projects: + - name: github.com/ansible/ansible + override-checkout: stable-2.8 + - name: openstack/openstacksdk + override-checkout: master + - name: openstack/devstack + override-checkout: master + vars: + # test-matrix grabs branch from the zuul branch setting. If the job + # is triggered by ansible, that branch will be devel which doesn't + # make sense to devstack. Override so that we run the right thing. + test_matrix_branch: master + tox_install_siblings: true + +- job: + name: openstacksdk-ansible-stable-2.9-functional-devstack + parent: openstacksdk-ansible-functional-devstack + description: | + Run openstacksdk ansible functional tests against a master devstack + using git stable-2.9 branch version of ansible. + required-projects: + - name: github.com/ansible/ansible + override-checkout: stable-2.9 + - name: openstack/openstacksdk + override-checkout: master + - name: openstack/devstack + override-checkout: master + vars: + # test-matrix grabs branch from the zuul branch setting. If the job + # is triggered by ansible, that branch will be devel which doesn't + # make sense to devstack. Override so that we run the right thing. + test_matrix_branch: master + tox_install_siblings: true + +- job: + name: openstacksdk-functional-devstack-masakari + parent: openstacksdk-functional-devstack-minimum + description: | + Run openstacksdk functional tests against a master devstack with masakari + required-projects: + - openstack/masakari + - openstack/masakari-monitors + vars: + devstack_plugins: + masakari: https://opendev.org/openstack/masakari + devstack_services: + masakari-api: true + masakari-engine: true + tox_environment: + OPENSTACKSDK_HAS_MASAKARI: 1 + OPENSTACKSDK_TESTS_SUBDIR: instance_ha + zuul_copy_output: + '{{ devstack_base_dir }}/masakari-logs': logs + +- job: + name: openstacksdk-functional-devstack-manila + parent: openstacksdk-functional-devstack-minimum + description: | + Run openstacksdk functional tests against a master devstack with manila + required-projects: + - openstack/manila + - openstack/openstacksdk + vars: + devstack_localrc: + # Set up manila with a fake driver - makes things super fast and should + # have no impact on the API + MANILA_INSTALL_TEMPEST_PLUGIN_SYSTEMWIDE: false + SHARE_DRIVER: manila.tests.share.drivers.dummy.DummyDriver + MANILA_CONFIGURE_GROUPS: alpha,beta,gamma,membernet + MANILA_CONFIGURE_DEFAULT_TYPES: true + MANILA_SERVICE_IMAGE_ENABLED: false + MANILA_SHARE_MIGRATION_PERIOD_TASK_INTERVAL: 1 + MANILA_SERVER_MIGRATION_PERIOD_TASK_INTERVAL: 10 + MANILA_REPLICA_STATE_UPDATE_INTERVAL: 10 + MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: 'snapshot_support=True create_share_from_snapshot_support=True revert_to_snapshot_support=True mount_snapshot_support=True' + MANILA_ENABLED_BACKENDS: alpha,beta,gamma + MANILA_OPTGROUP_alpha_driver_handles_share_servers: false + MANILA_OPTGROUP_alpha_replication_domain: DUMMY_DOMAIN + MANILA_OPTGROUP_alpha_share_backend_name: ALPHA + MANILA_OPTGROUP_alpha_share_driver: manila.tests.share.drivers.dummy.DummyDriver + MANILA_OPTGROUP_beta_driver_handles_share_servers: false + MANILA_OPTGROUP_beta_replication_domain: DUMMY_DOMAIN + MANILA_OPTGROUP_beta_share_backend_name: BETA + MANILA_OPTGROUP_beta_share_driver: manila.tests.share.drivers.dummy.DummyDriver + MANILA_OPTGROUP_gamma_driver_handles_share_servers: true + MANILA_OPTGROUP_gamma_network_config_group: membernet + MANILA_OPTGROUP_gamma_share_backend_name: GAMMA + MANILA_OPTGROUP_gamma_share_driver: manila.tests.share.drivers.dummy.DummyDriver + MANILA_OPTGROUP_gamma_admin_network_config_group: membernet + MANILA_OPTGROUP_membernet_network_api_class: manila.network.standalone_network_plugin.StandaloneNetworkPlugin + MANILA_OPTGROUP_membernet_network_plugin_ipv4_enabled: true + MANILA_OPTGROUP_membernet_standalone_network_plugin_allowed_ip_ranges: 10.0.0.10-10.0.0.209 + MANILA_OPTGROUP_membernet_standalone_network_plugin_gateway: 10.0.0.1 + MANILA_OPTGROUP_membernet_standalone_network_plugin_mask: 24 + MANILA_OPTGROUP_membernet_standalone_network_plugin_network_type: vlan + MANILA_OPTGROUP_membernet_standalone_network_plugin_segmentation_id: 1010 + devstack_plugins: + manila: https://opendev.org/openstack/manila + devstack_services: + c-api: false + c-bak: false + c-sch: false + c-vol: false + cinder: false + s-account: false + s-container: false + s-object: false + s-proxy: false + n-api: false + n-api-meta: false + n-cauth: false + n-cond: false + n-cpu: false + n-novnc: false + n-obj: false + n-sch: false + nova: false + placement-api: false + dstat: false + tox_environment: + OPENSTACKSDK_HAS_MANILA: 1 + OPENSTACKSDK_TESTS_SUBDIR: shared_file_system + +- project-template: + name: openstacksdk-functional-tips + check: + jobs: + - openstacksdk-functional-devstack-tips + gate: + jobs: + - openstacksdk-functional-devstack-tips diff --git a/zuul.d/metal-jobs.yaml b/zuul.d/metal-jobs.yaml new file mode 100644 index 0000000..a9da322 --- /dev/null +++ b/zuul.d/metal-jobs.yaml @@ -0,0 +1,32 @@ +--- +# Definitions of Ironic based jobs with a dedicated project entry to keep them +# out of general entry. +- job: + name: metalsmith-integration-openstacksdk-src + parent: metalsmith-integration-glance-netboot-cirros-direct + required-projects: + - openstack/openstacksdk + +- job: + name: bifrost-integration-openstacksdk-src + parent: bifrost-integration-tinyipa-ubuntu-jammy + required-projects: + - openstack/ansible-collections-openstack + - openstack/openstacksdk + +- job: + name: ironic-inspector-tempest-openstacksdk-src + parent: ironic-inspector-tempest + required-projects: + - openstack/openstacksdk + +- project: + check: + jobs: + # Ironic jobs, non-voting to avoid tight coupling + - ironic-inspector-tempest-openstacksdk-src: + voting: false + - bifrost-integration-openstacksdk-src: + voting: false + - metalsmith-integration-openstacksdk-src: + voting: false diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml new file mode 100644 index 0000000..284d200 --- /dev/null +++ b/zuul.d/project.yaml @@ -0,0 +1,48 @@ +--- +# Central project entity. It pulls general templates and basic jobs. +# functional-jobs, metal-jobs and acceptance-jobs are being +# merged with this entity into singe one. +- project: + templates: + - check-requirements + - openstack-python3-jobs + - openstacksdk-functional-tips + - openstacksdk-tox-tips + - os-client-config-tox-tips + - osc-tox-unit-tips + - publish-openstack-docs-pti + - release-notes-jobs-python3 + check: + jobs: + - opendev-buildset-registry + - nodepool-build-image-siblings: + voting: false + - dib-nodepool-functional-openstack-centos-8-stream-src: + voting: false + - openstacksdk-functional-devstack + - openstacksdk-functional-devstack-networking + - openstacksdk-functional-devstack-networking-ext + - openstacksdk-functional-devstack-senlin + - openstacksdk-functional-devstack-magnum: + voting: false + - openstacksdk-functional-devstack-manila: + voting: false + - openstacksdk-functional-devstack-masakari: + voting: false + - openstacksdk-functional-devstack-ironic: + voting: false + - osc-functional-devstack-tips: + voting: false + - ansible-collections-openstack-functional-devstack: + voting: false + gate: + jobs: + - opendev-buildset-registry + - nodepool-build-image-siblings: + voting: false + - dib-nodepool-functional-openstack-centos-8-stream-src: + voting: false + - openstacksdk-functional-devstack + - openstacksdk-functional-devstack-networking + - openstacksdk-functional-devstack-networking-ext + - openstacksdk-functional-devstack-senlin -- GitLab