diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst new file mode 100644 index 0000000000000000000000000000000000000000..790776c3ec2def918502970b4d43124a51ba7bad --- /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 0000000000000000000000000000000000000000..cf66c368caa0aa610f5173a04cb26e9ffc0bd52e --- /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 0000000000000000000000000000000000000000..67db8588217f266eb561f75fae738656325deac9 --- /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 0000000000000000000000000000000000000000..90f8a7aefdd7b34f87308221618b9d758afe7edc --- /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 0000000000000000000000000000000000000000..a3a0625699d8a056680fba28888d8ee49ec1ebff --- /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 0000000000000000000000000000000000000000..e34d87810327418b16e5198066cdcc0ad5f3b27a --- /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 0000000000000000000000000000000000000000..efceab818b9e468d13ec85ce56b5f14c06306438 --- /dev/null +++ b/babel.cfg @@ -0,0 +1 @@ +[python: **.py] diff --git a/bindep.txt b/bindep.txt new file mode 100644 index 0000000000000000000000000000000000000000..a74f386aed3f46d6080df4435b001bcdc5eed766 --- /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 0000000000000000000000000000000000000000..d1a53c15db0db1698122bf2d407e6aa43974d936 --- /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 0000000000000000000000000000000000000000..925ca4dc8b8b113dfb176fff5ba82cf99536f3d5 --- /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 0000000000000000000000000000000000000000..b41ba20d9b49b50e31c5ab74aedac3069a6a0c79 --- /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 0000000000000000000000000000000000000000..2c141c5e5d90ee2dec4a3e92ecbfb6e4f51a8c51 --- /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 0000000000000000000000000000000000000000..e1640e46d8aec35ed2dc4eca705bbc0e81158001 --- /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 0000000000000000000000000000000000000000..b1cd2f37dcbcc85358d9d37fd1984adef8e15944 --- /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 0000000000000000000000000000000000000000..b02175c12a0fe8c9ab8eabec1cb4332387684379 --- /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 0000000000000000000000000000000000000000..34000b9869c51a7bca711518220a9edc614200ba --- /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 0000000000000000000000000000000000000000..76b8954ea9653f9beafb61ff4034cf856878a072 --- /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 0000000000000000000000000000000000000000..b2901ff3f3643b16828e5b959b1e6a8c6538a69e --- /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 0000000000000000000000000000000000000000..c651c76ecc0e97518b0b3e89fc7a8498799d64a7 --- /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 0000000000000000000000000000000000000000..b91d359855b1a0a0c50b191d5acf7dc3962551ea --- /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 0000000000000000000000000000000000000000..eeffbac87b58e6aab7739802c963da483669f0c7 --- /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 0000000000000000000000000000000000000000..36c5aa13bf930f0d58fb67552ac717819d07721a --- /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 0000000000000000000000000000000000000000..275a418b243491e39f65ed516cf347842bda257f --- /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 0000000000000000000000000000000000000000..3bdbde41d1d18011eb969c527c9d1ba229b88e6c --- /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 0000000000000000000000000000000000000000..d935708cd80721bb9878fee9efc7e27aa399268a --- /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 0000000000000000000000000000000000000000..33255ae9af74fe2e6a8e43795359771cf3809a52 --- /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 0000000000000000000000000000000000000000..b4eb5e488e4080db39188166d992047629848e54 --- /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 0000000000000000000000000000000000000000..72cfaa5101556075750591faa2949c7f71483235 --- /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 0000000000000000000000000000000000000000..11637239d3d4e75cc01bd72c9c107fc7dfce82bf --- /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 0000000000000000000000000000000000000000..ea85414787ac684dc476e24c3503c72d59fcefd7 --- /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 0000000000000000000000000000000000000000..b4909ad32ce28344dc8e567fd59ec1964246380d --- /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 0000000000000000000000000000000000000000..2359de00ca38d6c8696f6743729223471e25085d --- /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 0000000000000000000000000000000000000000..5e1ea395c1f69067174586155aebef9a454cb952 --- /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 0000000000000000000000000000000000000000..21833c31413a0e1a0f3e07120e12615b3a5dff80 --- /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 0000000000000000000000000000000000000000..9f9d1de886de7c4bd7a438a1e94fcd46adab0e6c --- /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 0000000000000000000000000000000000000000..3e85f6f98548ec61221b3eb4d18bc992c8a743d9 --- /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 0000000000000000000000000000000000000000..cbfd9665e2bddf109dccb6689398ec2dcbfdb114 --- /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 0000000000000000000000000000000000000000..8f2661d0962784f2bf19d9bfabfff456a1b3f451 --- /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 0000000000000000000000000000000000000000..af56db52c89fe36bdc03ad0f786e29770b491025 --- /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 0000000000000000000000000000000000000000..1be15eca3aaa6fca93b627853bdbd2a1a6165446 --- /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 0000000000000000000000000000000000000000..6fd798668f3cb313426ae6072b41e5bef410e5b7 --- /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 0000000000000000000000000000000000000000..da958e318b0bda99e931a0e7fe8d4e43e7986d9f --- /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 0000000000000000000000000000000000000000..99b59939dbf1d1f8c8d958ef20cf6704b75cc32b --- /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 0000000000000000000000000000000000000000..bf282b2149f4c5714f0d404398cb1b0908b9545d --- /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 0000000000000000000000000000000000000000..eb7bc623cea46c4a8b32aa6ba2cdbe7aee768ef0 --- /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 0000000000000000000000000000000000000000..79137844d510b9773e5a86a5bd5fdcdef66560d1 --- /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 0000000000000000000000000000000000000000..4f8d3645c44d169d40c4bc14229123aa04bba83b --- /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 0000000000000000000000000000000000000000..c3c71dce0785ef6641effbd9cfabce268a3ab0af --- /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 0000000000000000000000000000000000000000..bac8a106d9d54dfc3af26deeab10ac597fec6975 --- /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 0000000000000000000000000000000000000000..5630bbcd8535766605230c4405401f3d472c74ef --- /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 0000000000000000000000000000000000000000..0e0b4572e20bafa7c9bc51bc6ae1dd5ffdd31adc --- /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 0000000000000000000000000000000000000000..44256b34a1ebeb3813a8965862fb6c32a89ef6d9 --- /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 0000000000000000000000000000000000000000..c2d26808348b5bbd48b96a37e4cc26514c309cfa --- /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 0000000000000000000000000000000000000000..9d94441441393e05293cad83a8857971ef7e40c5 --- /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 0000000000000000000000000000000000000000..9065a49319246bee68e0fd7d2dae11d6834419f7 --- /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 0000000000000000000000000000000000000000..ac53905e4096ab2acf070fbb7d6fe090d96e94d2 --- /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 0000000000000000000000000000000000000000..1efd12b7a7b99c12ad0615e5954c95c0b834d835 --- /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 0000000000000000000000000000000000000000..6c8a27eee68a3dbb2abd65abcb37eb12c9abb25e --- /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 0000000000000000000000000000000000000000..ac30f88306914ec65e10930cf51dc2fc7e39e142 --- /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 0000000000000000000000000000000000000000..fc5f4ac0f86d15b63eb287fff09ea15ebbb36925 --- /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 0000000000000000000000000000000000000000..094bac5e9a17417d0101d690eaba42c2d7daf686 --- /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 0000000000000000000000000000000000000000..64adc4fdd8ef58cba6f54f238ea5b8cbb4f39d0c --- /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 0000000000000000000000000000000000000000..dc6b5d021de2143ff6529d9681c5dfd2ff538cd9 --- /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 0000000000000000000000000000000000000000..19e302f987bfcd2e1327f326afd54fa79773f0aa --- /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 0000000000000000000000000000000000000000..7522e7116422a195b376587db63c29e5604366f8 --- /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 0000000000000000000000000000000000000000..fcef096562d0a14097f67e42fef800825a9cf2c6 --- /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 0000000000000000000000000000000000000000..1c270e364ebfb964e247d0674f5cc4f3f5ed72a3 --- /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 0000000000000000000000000000000000000000..7aace3f3c41ab8146d95f11a8a80ef1164f5ba87 --- /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 0000000000000000000000000000000000000000..38e4da488f67ca876ed4285b6c225e65394f1f2e --- /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 0000000000000000000000000000000000000000..557c8d4ebad5c564f3bc36a671a984247e4190b9 --- /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 0000000000000000000000000000000000000000..b21aba0c49c8ef6763336d7c53a39e38ab6ba32c --- /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 0000000000000000000000000000000000000000..c5bca1866e96eb28f5bef43415ad8530a4cb0b00 --- /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 0000000000000000000000000000000000000000..6799ba283d3fec0471ee0815163e3cd7cd0e9786 --- /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 0000000000000000000000000000000000000000..46bf497532ecc107b078998691c1ef681cbd9eaf --- /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 0000000000000000000000000000000000000000..b2b693bbf0712382b7d2e84a003cbce981b2b9b2 --- /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 0000000000000000000000000000000000000000..99e33063a090b76122de945e0910e1619d89b310 --- /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 0000000000000000000000000000000000000000..3752b88fb989be3e4fc9da5657423f5b5b7d0b28 --- /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 0000000000000000000000000000000000000000..8c53c54182ae42899edcccfda02b2401acf0a126 --- /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 0000000000000000000000000000000000000000..fac47fa2a1b03ad12c1c2fb448d80ca34cc81cb8 --- /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 0000000000000000000000000000000000000000..1afe30ed0a988e2a64c5878ba13f1f6b8df969ae --- /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 0000000000000000000000000000000000000000..10911a3df3acd50ee80b6041a435f6b2fd3b06ec --- /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 0000000000000000000000000000000000000000..e0b5caeec821aab73732c2f8fa79d05ab3f6b8be --- /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 0000000000000000000000000000000000000000..2b611e9dc22138007360f8c6a40541869e77202e --- /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 0000000000000000000000000000000000000000..711d80375fb34453ba21a7ff269d384a9893e26b --- /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 0000000000000000000000000000000000000000..361842c50d22e407f297005d30379304955ee95b --- /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 0000000000000000000000000000000000000000..a742f999693d34202f9e39699ab21cfd974e21a8 --- /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 0000000000000000000000000000000000000000..fa286d8e373acdaa57742f7e73e0fef92757a6b1 --- /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 0000000000000000000000000000000000000000..c9f3fa41f299de3d07361fe2b73fa13331298ee5 --- /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 0000000000000000000000000000000000000000..864b41204dd1c6adf2752940b4623cad5ac3a2f3 --- /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 0000000000000000000000000000000000000000..2a3a756a0659f1e5d920e13fa2a2c1bb1e24d3a6 --- /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 0000000000000000000000000000000000000000..f47baa55d04a8ae7bf07a3c72c3f9438e0162467 --- /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 0000000000000000000000000000000000000000..c7b5ae2d9748bd116c377f6113512e9d3e481117 --- /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 0000000000000000000000000000000000000000..5e09cf616640f9f91f11694cbb901cf4173869e3 --- /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 0000000000000000000000000000000000000000..172511407d2468614d0c7f8c2955407eea83cd1e --- /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 0000000000000000000000000000000000000000..383795c2ac96865c151b6a79c9021e98f5931eeb --- /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 0000000000000000000000000000000000000000..94374354602d230edccfa95de71727da964bf0bb --- /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 0000000000000000000000000000000000000000..9849c7833ac6d1f06c7dd792bb00b22e902945fd --- /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 0000000000000000000000000000000000000000..1fabe14b29fb6ee143351e40e31b563e957ecbb0 --- /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 0000000000000000000000000000000000000000..0135180830158e7781463bf991d68517fd331c80 --- /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 0000000000000000000000000000000000000000..87a606389412f6aa62a91cde6d34eea243d4d8cb --- /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 0000000000000000000000000000000000000000..9e1bd1176c1099d07a5708228e1c6d835ecae02b --- /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 0000000000000000000000000000000000000000..e55e63afad43a6842d1102ff348608c13825ea8b --- /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 0000000000000000000000000000000000000000..f987d08613bafc9a3667cdfbcee3f5a9cfc1faa9 --- /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 0000000000000000000000000000000000000000..14e691ed20a7d9c7df5efec39f78ac6d5de7c4e1 --- /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 0000000000000000000000000000000000000000..2bf0e18656e49fe711cc7fc98d6fde5921cedced --- /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 0000000000000000000000000000000000000000..45c2bd91ab65190ff9bbb19e6898c8d3f61d5516 --- /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 0000000000000000000000000000000000000000..3ffae22125b7d7b62e5327bf87fe2279c30fc970 --- /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 0000000000000000000000000000000000000000..93525a80f5e0f6b778480404de1533219c56ed39 --- /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 0000000000000000000000000000000000000000..b1da156385d2b67e0e3e12b742acb7875d6a4e41 --- /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 0000000000000000000000000000000000000000..6275e254b5beac86861b8f713fd1db3f742fb71b --- /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 0000000000000000000000000000000000000000..ba8bc28565990c9bcd148f08b5c23afa823095d0 --- /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 0000000000000000000000000000000000000000..18c2c98c7e3f0c2fda9a8cb4d26fcfc6c3af035e --- /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 0000000000000000000000000000000000000000..a291fa5c0827ab8def18c90794e6c44909e6c1ac --- /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 0000000000000000000000000000000000000000..5835928ac5401fbeb347e39c7455a40012fa929a --- /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 0000000000000000000000000000000000000000..ec6e8fd0a36e9cfed3bd2da854bc5e28b564010f --- /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 0000000000000000000000000000000000000000..35211aec447f83c9ebf1d84314c202fd2d680545 --- /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 0000000000000000000000000000000000000000..5b2eea172d1f3b86a9454dedb7025a0fd50f6b78 --- /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 0000000000000000000000000000000000000000..78717e20295d8e2421040e8f298e27aa1d4846b5 --- /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 0000000000000000000000000000000000000000..963f235db6e1ce93a782d403493f01001263687f --- /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 0000000000000000000000000000000000000000..ba4b9db575b840f2785b5eabf390cbe431baebc9 --- /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 0000000000000000000000000000000000000000..113ecd32e0227efc3d3938179e1f1f62eba70946 --- /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 0000000000000000000000000000000000000000..83e8f0b2e8c05a1a4a944c71df485c7b6d3bb6b9 --- /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 0000000000000000000000000000000000000000..2382ca978cb1203925b0154085e4d8c4f56caf0a --- /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 0000000000000000000000000000000000000000..2215db8f06b6ad58c2b608d32da95cf82595910d --- /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 0000000000000000000000000000000000000000..9f4c79f146c7feebc6777a3398d85e13eabd94c0 --- /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 0000000000000000000000000000000000000000..c72ec408a68f89ffe111e3852471010ab363cc8e --- /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 0000000000000000000000000000000000000000..3d1d6abc0763cbf42673821b947dd6ee01e33316 --- /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 0000000000000000000000000000000000000000..f8135e3e159b58e991370c53bca23bb87f1825a7 --- /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 0000000000000000000000000000000000000000..064b9d247273b059c03c97ec04a6f5fae85acc83 --- /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 0000000000000000000000000000000000000000..69a7d7a31627e03c9af261c594b7220379fff33c --- /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 0000000000000000000000000000000000000000..69a287b9cc39c42c63e17585cf849b83bcc5d469 --- /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 0000000000000000000000000000000000000000..eaef7b3b45fb6724261e3593ce1888eea95fcd15 --- /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 0000000000000000000000000000000000000000..433880a861796ffd8984facd7dece0ab80d8f78f --- /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 0000000000000000000000000000000000000000..2185f58ba6b55cef27085318e2f34165affc7b41 --- /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 0000000000000000000000000000000000000000..b8e802e620bb45965d65982b9e3223552f8bdcd1 --- /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 0000000000000000000000000000000000000000..e738c75295df0143d9a71fe3478135fee50b6013 --- /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 0000000000000000000000000000000000000000..32ce79968cb60b9d739a8454a09f4d751f39e5eb --- /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 0000000000000000000000000000000000000000..edb734f2a872e7ef370a95235849f6e8339c538a --- /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 0000000000000000000000000000000000000000..8ec0a432281aa939226c3bcf195233c94d780165 --- /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 0000000000000000000000000000000000000000..a12aa284b3d07bd35930054b0e35eb7429fe142b --- /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 0000000000000000000000000000000000000000..d84754f279b492f9da67ffb3b5aea67a79622fb5 --- /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 0000000000000000000000000000000000000000..779c7d6ce047f9742b73711473f0dab186dc6aeb --- /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 0000000000000000000000000000000000000000..58ae94374e8882136239c4783d69727a08c98d62 --- /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 0000000000000000000000000000000000000000..decc992e29e2f7faf99b783757155858d75ee9fb --- /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 0000000000000000000000000000000000000000..3cab1ec47a398bffc9688005d020014bafbc150e --- /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 0000000000000000000000000000000000000000..00b832ed04e604f8fa54b5f13ccc098d25d6fcd2 --- /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 0000000000000000000000000000000000000000..ad665f9eda3c197a90f35cf657191cc9812fc804 --- /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 0000000000000000000000000000000000000000..c114e0c36c54388a0af6a249473502bfc5c3678c --- /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 0000000000000000000000000000000000000000..d8534c0d9f04c4d7b270b75a4ddd95522406285f --- /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 0000000000000000000000000000000000000000..9cdd4e5d7b200fc06aab20c29ea4332fe53d5dd3 --- /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 0000000000000000000000000000000000000000..b982b0e67b5808f4faed432badc067dee1871d7a --- /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 0000000000000000000000000000000000000000..0d786887f3266d9a4fe29b13591b8b8b3230874b --- /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 0000000000000000000000000000000000000000..8d58bb7324c54cb033c898691aaa610cfa466f58 --- /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 0000000000000000000000000000000000000000..8d6c60891cd294b6b42e428e4b6b32ae0e95379c --- /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 0000000000000000000000000000000000000000..45fee1b1eb722864673e47235428398f316875bb --- /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 0000000000000000000000000000000000000000..6959db4ac2d9f4c49cedcf107d7d0bedf422d2f2 --- /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 0000000000000000000000000000000000000000..d390065363b8b391b73040d9c3b4a2739be9da9a --- /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 0000000000000000000000000000000000000000..cd2f369619a55778d2f80f3853dd8460678e8225 --- /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 0000000000000000000000000000000000000000..f30ff2ffc875f4ebe9f3fe5effe5559d7b14f546 --- /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 0000000000000000000000000000000000000000..ba02f3e177de69f3fc470daaabb154b89a388eb2 --- /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 0000000000000000000000000000000000000000..8a5d91dfc1f96a126372f05fb86ea5d8045d33ff --- /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 0000000000000000000000000000000000000000..5dc072c75a34d1d697412fc012c444baa0d75c16 --- /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 0000000000000000000000000000000000000000..a3afefe89536636e1a9770ef09fab9d8115c67e0 --- /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 0000000000000000000000000000000000000000..7b00e93bf6076184d2070a9199052439a5606a9d --- /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 0000000000000000000000000000000000000000..be84fe6daff8c5f37adab25b7e261a9c2bc26362 --- /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 0000000000000000000000000000000000000000..922606fb455e5b74c51b490c75fe0d3d822f140b --- /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 0000000000000000000000000000000000000000..cdd63dad2e7ad188da97c20579446b03a6774e61 --- /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 0000000000000000000000000000000000000000..6587f596fbf74ec4a41da6922478650fcbf14d77 --- /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 0000000000000000000000000000000000000000..9ce7c0851e5d61324ceb246b9fa10b0b299b169a --- /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 0000000000000000000000000000000000000000..ac0fdef664d0d365541e4e0321635b4f66eaa03f --- /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 0000000000000000000000000000000000000000..1be8f6be8c4937f60a0498ff21aab2a1fbabb8fc --- /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 0000000000000000000000000000000000000000..74d4be3f58b14b5153d1775dd702bcd1af47a016 --- /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 0000000000000000000000000000000000000000..0191df12b7e0fc65d9acd7ada7f93b706fe1d56f --- /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 0000000000000000000000000000000000000000..df44b6fade58a437941f81fe7273b01165eca4a1 --- /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 0000000000000000000000000000000000000000..6dbb3b102128207dc1f8595abe2b1d21b6b5f46e --- /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 0000000000000000000000000000000000000000..fbf17725a6f15bafdad7a17d656e2a0aa3c2127a --- /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 0000000000000000000000000000000000000000..90fdb8558c56c902aedffa29d774e4b9b165c6c9 --- /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 0000000000000000000000000000000000000000..2be9147d46c460a984a406c23368512615891eea --- /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 0000000000000000000000000000000000000000..3218b40a788b8b8b6b43ed46244c89eb2d42a3b0 --- /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 0000000000000000000000000000000000000000..7148f21192121875bbf04e2291f1903ab53e188c --- /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 0000000000000000000000000000000000000000..2318d803bb821413ca6d21a0b981512209ed3569 --- /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 0000000000000000000000000000000000000000..e70be2fa401dff10ea1362734819860d3196dcd9 --- /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 0000000000000000000000000000000000000000..817f77e89201904eb0e8b5bb8e2a91959ce2e2a8 --- /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 0000000000000000000000000000000000000000..77860a6a09a4018ab5fabd17a0ff31d23905ab36 --- /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 0000000000000000000000000000000000000000..d616e71a92439827e106a5014e64bdd7b4c7e73c --- /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 0000000000000000000000000000000000000000..c02302f2d5398daebcfbbab0f74cc62988e07b9a --- /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 0000000000000000000000000000000000000000..634bd8f3f40e5d567f729925f9000335256fff5d --- /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 0000000000000000000000000000000000000000..2c2baa3eeee9fb09de525a718394f54298ffae70 --- /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 0000000000000000000000000000000000000000..5836f539dbb5bd5f1e868bf2798c40bc22ba8c21 --- /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 0000000000000000000000000000000000000000..5b0d02836b25a679073ee3f3334d7d35ae2f4bcc --- /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 0000000000000000000000000000000000000000..9f5c2c4c436e746a9145b4de22f109093f423d89 --- /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 0000000000000000000000000000000000000000..82d7df631975b34449d86792ee56431f01739c59 --- /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 0000000000000000000000000000000000000000..53f5136b49c9f525811cbbc57d13a12fdf7e6ba9 --- /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 0000000000000000000000000000000000000000..f818ffc910cd0870203ffa5d955a33bce0f15e27 --- /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 0000000000000000000000000000000000000000..a7abcc65e01712e87433ddb91f0c2c98bb6c872a --- /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 0000000000000000000000000000000000000000..d9fdd37d001c53a45eeeedf5d1860c41a11632d5 --- /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 0000000000000000000000000000000000000000..ee7b1dc14b6d265160e4b1e7d677e93dcd72e5c5 --- /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 0000000000000000000000000000000000000000..dabc9afd3896805dcb963cfd94ff19100e476d3e --- /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 0000000000000000000000000000000000000000..bf7d109f3e71d1d1d11458f1c4656b21ea9ebc8a --- /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 0000000000000000000000000000000000000000..28defa2374ba7ef8a8ae6629fd6f88ebac2f3016 --- /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 0000000000000000000000000000000000000000..366113d8676b997a274de55933845b79f1a89ab6 --- /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 0000000000000000000000000000000000000000..4cd8a97129c064de0a6f3f3caf302005286b3091 --- /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 0000000000000000000000000000000000000000..fe6c4462aeedf05edf979074c5cab091b67b7b75 --- /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 0000000000000000000000000000000000000000..1b1bc7642b30185f278248a007c4aee82701c258 --- /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 0000000000000000000000000000000000000000..f8a8174e4c6d71756d65a2c2f4f061915d6c70e9 --- /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 0000000000000000000000000000000000000000..dd242f95858978971849e09fb62ea01868552b4d --- /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 0000000000000000000000000000000000000000..2506b1123e3854c7e8e5394e2e1ca20fc9de946a --- /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 0000000000000000000000000000000000000000..db8c8546b5730ee6cae47411a8ec98960736529e --- /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 0000000000000000000000000000000000000000..ba334a76ae2c1ddd6f7e85ea9ca62aace3c5dc0a --- /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 0000000000000000000000000000000000000000..8ecdfe3f5a7f07da736f0dcc02d495e55d9cbc70 --- /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 0000000000000000000000000000000000000000..baa85e87dc95ae0e523ac98e65fe29b486f56275 --- /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 0000000000000000000000000000000000000000..abdfcdc9e8709bf39203811050d9080ef8c82ebf --- /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 0000000000000000000000000000000000000000..8ef6ef99029152074f82e4285328e5cf40350236 --- /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 0000000000000000000000000000000000000000..063a3d7ec530ad2e0fa9109fe4a8fcaa2b314c74 --- /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 0000000000000000000000000000000000000000..2824e0c5aef997bb5d5a7c0d462ea36983652771 --- /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 0000000000000000000000000000000000000000..d9f44c963125f32eb128e9e4338f9f29257dbad9 --- /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 0000000000000000000000000000000000000000..5e9771c9305d0ab90876152412bc694edbbbb466 --- /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 0000000000000000000000000000000000000000..7346d0058788b13de97e870ab3771dbc494b5349 --- /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 0000000000000000000000000000000000000000..02585f5f55b400de9d126b8db0c1ecdcc8c32ced --- /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 0000000000000000000000000000000000000000..dcdda5be6657b75888b67965dc849ac705746634 --- /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 0000000000000000000000000000000000000000..fdb945ee45edcb4a041aa3a0d254537597020ff6 --- /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 0000000000000000000000000000000000000000..6ba7ae3f308de24033c4d6727e6e098312e46ef2 --- /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 0000000000000000000000000000000000000000..1fe3bfb741d2002bd89cb68877922e6d9ebaafa7 --- /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 0000000000000000000000000000000000000000..c6ef3d78fc504fc5cfc72414ff58bc636f78091a --- /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 0000000000000000000000000000000000000000..7f5dffd83607a69fffa474975fc3cfd6ea58e430 --- /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 0000000000000000000000000000000000000000..5d51cba101df1cc946be8a1ac5f96932e87cc063 --- /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 0000000000000000000000000000000000000000..03107fdc020b2c7d99e8856468a0e372650c04eb --- /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 0000000000000000000000000000000000000000..de2c0f552003f22a2462a1f13730d01aa62df117 --- /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 0000000000000000000000000000000000000000..2f9548a0c4fd5ff344f8f21cd500ccab2d6dd225 --- /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 0000000000000000000000000000000000000000..e70fff6eb9556869e5276f98fbcaf227969f9d59 --- /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 0000000000000000000000000000000000000000..c20ba943e8d9790f5b605d49265da3d3f5a67bd8 --- /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 0000000000000000000000000000000000000000..8332ee48d2d935c5a3ef7782ef4453c6ec87b472 --- /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 0000000000000000000000000000000000000000..92bae8988e6c59de75adfc22ac6a5d5859965f07 --- /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 0000000000000000000000000000000000000000..3e6652e99510324bf3b90d1707283c7e004eda81 --- /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 0000000000000000000000000000000000000000..76b6659c6e540ed8265dcd928d3b71dafe797024 --- /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 0000000000000000000000000000000000000000..601e7b181112ef4dddf7aa074d10d03b9d3d2485 --- /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 0000000000000000000000000000000000000000..2f53627b0b5b961d1bf280e70a6244a0b9fa9e18 --- /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 0000000000000000000000000000000000000000..8d0a56e7a8f2cd1e253e9053f84a478475865cb0 --- /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 0000000000000000000000000000000000000000..1eebf3787e21827f730590c72d674dbe943e68b9 --- /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 0000000000000000000000000000000000000000..c89d1ee86e15c445a5e547ece5105b3efb35b7b9 --- /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 0000000000000000000000000000000000000000..8f8889b50ef2bfd183a07e24107298cdc4f1c981 --- /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 0000000000000000000000000000000000000000..0aa2c6a3b42fcf5308567b82679255a48b503a18 --- /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 0000000000000000000000000000000000000000..57b97ba0bdb20afa16dbee0a834eb33526a1893e --- /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 0000000000000000000000000000000000000000..8a702f9a92f7bfba9d16426c651b7bc932f66d97 --- /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 0000000000000000000000000000000000000000..7f90f426122cf66525ecd742a3f4fd3aa66129b5 --- /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 0000000000000000000000000000000000000000..2a5e6f01c774710c67df0309da7484aa2e66a8ae --- /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 0000000000000000000000000000000000000000..c661cd676eb664635e08bfa9f9445d570361d617 --- /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 0000000000000000000000000000000000000000..b94bc73b2eba4919fd6b5188fe02c265bcb5d5de --- /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 0000000000000000000000000000000000000000..9e1456029934a14070f239f7421f3f25851429f5 --- /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 0000000000000000000000000000000000000000..1fff01f075cf5f937da0bd13d58c23da1cdd08c4 --- /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 0000000000000000000000000000000000000000..e67f97c29d763245e1ed32f82e50b7d48df01519 --- /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 0000000000000000000000000000000000000000..b9c5af91a9162ea00e6cebecd12d9bb22028c9ad --- /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 0000000000000000000000000000000000000000..1bf0335f2970bb7b1f0ad9adb5035a57629e35a2 --- /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 0000000000000000000000000000000000000000..ff063779c691ffe13c3b1407e70dccc317bf565e --- /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 0000000000000000000000000000000000000000..34360fc59d0b4dee538a94adb2c34cf7df8099c5 --- /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 0000000000000000000000000000000000000000..6b8274ab70d30e8de372d084371158af08939be8 --- /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 0000000000000000000000000000000000000000..5593e6d94b4f6315ba812d4dbc800020cf2c27b6 --- /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 0000000000000000000000000000000000000000..a3700d087538a7dc6f8c64de7408d07d8b6137a8 --- /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 0000000000000000000000000000000000000000..da386ce6d0077845ba2da4efa65240ec54a06010 --- /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 0000000000000000000000000000000000000000..35fd5a61a0bd9489bc1b206fa1a39f7197a181bd --- /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 0000000000000000000000000000000000000000..147d6b54f51bff2e21a097cd7cfcf3afc764e485 --- /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 0000000000000000000000000000000000000000..4c5d8af035f5381bf91ff400622897acc55462c7 --- /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 0000000000000000000000000000000000000000..9d78df43613f2c544d8c1f52541a47755f1d2f06 --- /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 0000000000000000000000000000000000000000..07584c1aae98ed467996706b62df8e883a4695b4 --- /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 0000000000000000000000000000000000000000..4f046da7e3ca5d082442334527ed29fe824ef52a --- /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 0000000000000000000000000000000000000000..c5ff15ec1ed1a496ff89541f06c357b5a3fddf34 --- /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 0000000000000000000000000000000000000000..8810a9cccce1c4dc73868ce021ad705fe671d094 --- /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 0000000000000000000000000000000000000000..2badbcec62af0bd664cb04673ceb459c6003bf96 --- /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 0000000000000000000000000000000000000000..76cf6a7e83208987674daedd449173a3cacbbd8c --- /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 0000000000000000000000000000000000000000..a9fa4824df93366b5a2b87da616c69aa2ed5869d --- /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 0000000000000000000000000000000000000000..6169582033a95728bbb4f941441af625ce7ccfb3 --- /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 0000000000000000000000000000000000000000..30f846ad7d77062944c781ed4748164c6c8eeec1 --- /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 0000000000000000000000000000000000000000..12b59a9f20020ddab1e58b916ba3c5832ff843ea --- /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 0000000000000000000000000000000000000000..d07f025121ec070dea21c83a5120fc0615c580ce --- /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 0000000000000000000000000000000000000000..9bcf7840c3fd25c6d2cc4ef52e99084355c70455 --- /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 0000000000000000000000000000000000000000..c5479e79b5cd6c02664f2c6ce285e908d411f68d --- /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 0000000000000000000000000000000000000000..8c6f6f27cb47748f09063aa2107a467ae628a7ea --- /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 0000000000000000000000000000000000000000..900f2461b25f846c2e3a617734803eee7f74a7e9 --- /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 0000000000000000000000000000000000000000..1f2c55ddf021d1f0723424435ad9473ef1c8d86a --- /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 0000000000000000000000000000000000000000..6b94a701792d4b32b402b229d78971c3fef5c803 --- /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 0000000000000000000000000000000000000000..ce80a1da3e8d7a6e5259f67fb1dd6268c9a73d28 --- /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 0000000000000000000000000000000000000000..b592d36142bb4e5b8444ea7149fcf3bef134601f --- /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 0000000000000000000000000000000000000000..98d904027dda61b47727807e29c7d792bfae32f1 --- /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 0000000000000000000000000000000000000000..c000236427be9b45a47ce1e2714d45f3a10b4193 --- /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 0000000000000000000000000000000000000000..05c52768ba26fbe23b88297dcfb837bc3fe3aa64 --- /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 0000000000000000000000000000000000000000..19b7b01766a22204e587fe1157edf088cd91f521 --- /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 0000000000000000000000000000000000000000..edffe5ce480085a31df0bc611eb3a1ca4117da85 --- /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 0000000000000000000000000000000000000000..6d5ed5a8cf34e38b76bebdf6a359d0513c9e32b8 --- /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 0000000000000000000000000000000000000000..e15072058b0100b340a5fabb4a413068c04dcbec --- /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 0000000000000000000000000000000000000000..062da1d7a47d5426899a94c7ebac8d4da4a16d50 --- /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 0000000000000000000000000000000000000000..83126d407cded8683998cf5e33015b03f4ec2eb6 --- /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 0000000000000000000000000000000000000000..2d0c860a9e14d7947a23873815a00c411b5071c1 --- /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 0000000000000000000000000000000000000000..8af566ebc7e2788b96beb1fe9f67011ba65d93c0 --- /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 0000000000000000000000000000000000000000..2e652b8a2de8ae587a764e4bbd308e8d40b52f97 --- /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 0000000000000000000000000000000000000000..5d66c447358cfe19e6c8042595637409f3b7bd1e --- /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 0000000000000000000000000000000000000000..02f912decaf67ae237a1379e67ee9c8775738341 --- /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 0000000000000000000000000000000000000000..da94f2756039aace6dc1ff7b0217f9d6f388f3a7 --- /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 0000000000000000000000000000000000000000..3842f57099bd3e097707f3f9cfdb810e8e1a8da7 --- /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 0000000000000000000000000000000000000000..84e65000cfb2e5dc0fe11c1dd003d29e39e27fd7 --- /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 0000000000000000000000000000000000000000..3333062bce8632bff35d4b497df0273bad9106db --- /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 0000000000000000000000000000000000000000..718b7201e4e8b4a22b456bbe4d3443de21229738 --- /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 0000000000000000000000000000000000000000..16a6d277879e7eaa42adb2dd661b8525bcff4449 --- /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 0000000000000000000000000000000000000000..14bf753fb222d84bd9ae4a6a816676060827a0c3 --- /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 0000000000000000000000000000000000000000..21cbce3aa25ef0da09b08845aa97dbec6ac2447a --- /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 0000000000000000000000000000000000000000..74b51c8028157601f032e3298345be0406f4b8ac --- /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 0000000000000000000000000000000000000000..3e8478cc3ca1698b8a30055a47454d0846ea3ff4 --- /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 0000000000000000000000000000000000000000..81bc6b0dd4c5b3d46ddd15aa802a4ca35b09576d --- /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 0000000000000000000000000000000000000000..fee6fe9316075d2c79250edb7406cd45ca1452e0 --- /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 0000000000000000000000000000000000000000..5a5d75930740d95d0a76ac5275af6894b19aee7f --- /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 0000000000000000000000000000000000000000..f90e000b4269c8b774210fa0cf74889d068a8055 --- /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 0000000000000000000000000000000000000000..0a185ba636f3e3fd2048fab70d5c0fe6e2beafa5 --- /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 0000000000000000000000000000000000000000..e5524e348cb6b0136a6e8902b7c8f38bdd0dd879 --- /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 0000000000000000000000000000000000000000..5236faea0f5e715cebee0585b79f48d5fa8fa153 --- /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 0000000000000000000000000000000000000000..30491909c2ce943a0d50e4beea4b317e7b586fae --- /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 0000000000000000000000000000000000000000..292cfc04d00c44c20c19db5fbabd384b1c3640bf --- /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 0000000000000000000000000000000000000000..d0c53f6b8b79ed3f9419a6176ea6e65a45dab527 --- /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 0000000000000000000000000000000000000000..7eb96a9a5f3e779545d103399a59431b8213b354 --- /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 0000000000000000000000000000000000000000..8dda658215c3ea6599afdbd39b80784aef06834b --- /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 0000000000000000000000000000000000000000..8838f44f4e2cf2ea363153e888316c15281dbd09 --- /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 0000000000000000000000000000000000000000..b57b797404a53608b8e9c99de31ba85e49e835ef --- /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 0000000000000000000000000000000000000000..2ef5817b9a85dc12b56b5183eaf424028e57851b --- /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 0000000000000000000000000000000000000000..8ab028b4c671c9df413d1fa46b545419fc6cd21b --- /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 0000000000000000000000000000000000000000..1f3491a19f0c5d23873702acec39b0d1b71a907d --- /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 0000000000000000000000000000000000000000..e9c70a887f24d76250d2b7967e143d6011f1f78a --- /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 0000000000000000000000000000000000000000..1b45f4f171a3a43c2e5922526c73bfe82f4ea50b --- /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 0000000000000000000000000000000000000000..9a518908c3fbe27172ec05c92b77d3a59ddaab8a --- /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 0000000000000000000000000000000000000000..33342c125d9b93b4f60df199bcf8adf9e92c8e38 --- /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 0000000000000000000000000000000000000000..6040bfa5a1a7c3a878ae2ad2b1d953f0e5d92585 --- /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 0000000000000000000000000000000000000000..bac5e960253830964973b83c334772cb7663b04c --- /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 0000000000000000000000000000000000000000..eec6b43c0b1c46749791b8cf7df1977c8f2cd637 --- /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 0000000000000000000000000000000000000000..232202b56bc4a0df22a03db0518d3653bfe48f13 --- /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 0000000000000000000000000000000000000000..40972ad938e3841ad600fdf151dff3532415478f --- /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 0000000000000000000000000000000000000000..0b058335bd406fa4d037e6c8a6dbefa18f6f3b2a --- /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 0000000000000000000000000000000000000000..793265d873bda1f1246a843d9e0086dc4f6ef847 --- /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 0000000000000000000000000000000000000000..95638a60b441e931a6f9a00524510d8f91162243 --- /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 0000000000000000000000000000000000000000..4063c48739cbba698847536196a4b1aac7c55577 --- /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 0000000000000000000000000000000000000000..9184599901d85195471afda8c3655229c1b9fd61 --- /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 0000000000000000000000000000000000000000..86649b83a779e5a16da769000e3f75db0c6be16f --- /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 0000000000000000000000000000000000000000..de3b21f66c78ce4e4a866be34b663feb6c4eaed1 --- /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 0000000000000000000000000000000000000000..8d66f71fe7d96662df4bfcf88d88094eafb15bec --- /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 0000000000000000000000000000000000000000..828af768e381a005e087705717f322c65cfff25c --- /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 0000000000000000000000000000000000000000..62ec283a12e3c2624e4203ac07abc1367067444d --- /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 0000000000000000000000000000000000000000..8f8950e52b6a8b6c52c5f786d6b11a7115e8d235 --- /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 0000000000000000000000000000000000000000..3eeeb4a7aec443244aa60ff83fb150f67499e25a --- /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 0000000000000000000000000000000000000000..ec238ef2275de0ad316887e4ebe682f5841359f6 --- /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 0000000000000000000000000000000000000000..ef602a9a6099413b3795325fde68784f20ce1708 --- /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 0000000000000000000000000000000000000000..a6edc6a5e6a1f3f1c59eae8c296665e018895445 --- /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 0000000000000000000000000000000000000000..5c1f39de9929396122c8352bc0acd0b13a1a67f2 --- /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 0000000000000000000000000000000000000000..34d1893fe1c420209e9b7c0ca30a84d82f121eb4 --- /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 0000000000000000000000000000000000000000..946381190e7910c522dfb0d9348af54392662f67 --- /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 0000000000000000000000000000000000000000..a5595abd1e939e6c40bb7abf7898bcef953fe489 --- /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 0000000000000000000000000000000000000000..7eb758051cb02d91461cb332a8d010f7e75f50de --- /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 0000000000000000000000000000000000000000..076415e5e0174c05cd057a1d75cb73fb630b400d --- /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 0000000000000000000000000000000000000000..479923817f94a761bb8a4cbeeba578f913e48970 --- /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 0000000000000000000000000000000000000000..2f3521d63b360df4fde6454a90c3405152c2656b --- /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 0000000000000000000000000000000000000000..a49061919baacd4fc36a73a4ec1d5eb87d828805 --- /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 0000000000000000000000000000000000000000..11da214d011a31f96199d10fe13fb4c191a0734f --- /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 0000000000000000000000000000000000000000..bbe9413cfb93ace51a2ab53c41dd57b7ae433167 --- /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 0000000000000000000000000000000000000000..e7730e7fb52d31661beef5d8f2b3cdd2c0a5dddd --- /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 0000000000000000000000000000000000000000..9c719e1799c34a2043cd1fc56b0cd94f85a1a2e5 --- /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 0000000000000000000000000000000000000000..616ed041b540a1df291a98832983af01ba1ef6b3 --- /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 0000000000000000000000000000000000000000..77d540e8a3095fc0086ccc21586a840124ea611b --- /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 0000000000000000000000000000000000000000..f8ca94a22e4971f6d2a4ed8e17c6535c461c196a --- /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 0000000000000000000000000000000000000000..393af8d1b163447716c9709881cc035194619296 --- /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 0000000000000000000000000000000000000000..2ac3b84383399ed78b66f835b32cfa8c97879dfa --- /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 0000000000000000000000000000000000000000..2ac3b84383399ed78b66f835b32cfa8c97879dfa --- /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 0000000000000000000000000000000000000000..b616dcb4ccdcec7d98be5926029458efb88c84d1 --- /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 0000000000000000000000000000000000000000..ff0f0b4ed3111017ac1d8d8a15b663f0e52893be --- /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 0000000000000000000000000000000000000000..ddeb5e99ff5ec064b6e28a1b2b4367581d605455 --- /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 0000000000000000000000000000000000000000..e6f18807ad5c90181f70ba7def76a453761ff61a --- /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 0000000000000000000000000000000000000000..4217a206e8be12b8197e3c59178ffbb51ee0c0b7 --- /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 0000000000000000000000000000000000000000..da56e634311b211744e781f2227156e63aee3039 --- /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 0000000000000000000000000000000000000000..a5618e418ad6bb357f734d49526a53a8eee103c3 --- /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 0000000000000000000000000000000000000000..9fc2c9fcb2046fe20710f1cf89b4c60ae68559c6 --- /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 0000000000000000000000000000000000000000..ab84811d566790320668505862245b75d9c8c590 --- /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 0000000000000000000000000000000000000000..2c9a9c4b3ead10da7425aad1138b860e7aef22c5 --- /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 0000000000000000000000000000000000000000..d4250efec3dc2fe715e9c2388614097844bb4ff6 --- /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 0000000000000000000000000000000000000000..6fce1a3a2e2ccc07cccf4c5e890b8237c3a3e87c --- /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 0000000000000000000000000000000000000000..988b4d970e7fdb784fde2307e611137edf70528f --- /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 0000000000000000000000000000000000000000..db53e81f38d6a75a0ca5bb0a7a3f9dbb4508b554 --- /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 0000000000000000000000000000000000000000..50de0fde24ec16cd71bd9265225e246bf047020f --- /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 0000000000000000000000000000000000000000..50a5e817028b2913ae159157d2b486bcfff49fe9 --- /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 0000000000000000000000000000000000000000..069480b4526cb83e33845af661111e3bb7696a46 --- /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 0000000000000000000000000000000000000000..a80fc33f1ee1259bbbab0bff5d0f87cf20e1182e --- /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 0000000000000000000000000000000000000000..b3eb290f080a16462f21829dd8f6e15330bfbd8f --- /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 0000000000000000000000000000000000000000..791a652357baa8b791a3c6d261fa262b98899823 --- /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 0000000000000000000000000000000000000000..44be08213cb8c1a50ef4ef571aad577b0bad362f --- /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 0000000000000000000000000000000000000000..12eecbaa877d0387217f3f8d076dd4d116507166 --- /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 0000000000000000000000000000000000000000..b01387ba96656c90c1be517a00f25222f84f3a91 --- /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 0000000000000000000000000000000000000000..0025dd6228dfdf2d99d84c9810f3b7b2013d1c1c --- /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 0000000000000000000000000000000000000000..17f989e4141bb130580e223b8eae3e0f21a31542 --- /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 0000000000000000000000000000000000000000..bb25a81a16132c1f723ce6f8f6d76f527b836512 --- /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 0000000000000000000000000000000000000000..b43413ff5cf19498c9f40fd0cd0487c6bc2f2cd6 --- /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 0000000000000000000000000000000000000000..95d3a118bfe799cbc5764770412e5736857c88eb --- /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 0000000000000000000000000000000000000000..2cedba5beed180a832b40719fb22135136c6ab05 --- /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 0000000000000000000000000000000000000000..b9eb8b8a089d505b2437770e4fa143246f861903 --- /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 0000000000000000000000000000000000000000..73c0e3fb594d79013374d911781cd10a334080dc --- /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 0000000000000000000000000000000000000000..33ea2e7c51e3bd35acc5b738ef0f34910a543899 --- /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 0000000000000000000000000000000000000000..972d2b632cdefdb879ab76d52cfd06ba9ab8e339 --- /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 0000000000000000000000000000000000000000..b1ca00c625611e37d7bb15eb052ef696fded17ce --- /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 0000000000000000000000000000000000000000..5f274ed7d46b8b4c37561a975216d180c2c600fe --- /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 0000000000000000000000000000000000000000..1d02959eac9338568baf1f3d5d733f62ac5f4a81 --- /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 0000000000000000000000000000000000000000..14ed166f2fb97c85bbe8fb1596e6975134a1a458 --- /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 0000000000000000000000000000000000000000..62773e7673c0585df1db411d26f3925f5387a9d6 --- /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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..32d0f80ade1482f249c7819e137f886b1b1493c6 --- /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 0000000000000000000000000000000000000000..091c9a32e127d8140033a348f0ec308daf5cd3e9 --- /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 0000000000000000000000000000000000000000..26dcdf68ee23c39eca4369a758a268794810d0c1 --- /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 0000000000000000000000000000000000000000..96ba6d5506c7369346957a17b9957e0442ede2c1 --- /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 0000000000000000000000000000000000000000..c2ebc5074907c37384fdde0b5e9e93b33dde6fda --- /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 0000000000000000000000000000000000000000..13421d423939ca1e12fe8e67feb52c9cb808ac65 --- /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 0000000000000000000000000000000000000000..81733146bbca33966ec59b44637c0bf2a53ecdac --- /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 0000000000000000000000000000000000000000..9f48183038e6e90cd47b9fc9c2a9ee0c2d83267c --- /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 0000000000000000000000000000000000000000..321d4a0f1e263d10ff653049b9900ab727d3d6f8 --- /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 0000000000000000000000000000000000000000..eb4e0f266db78c78cc935997822f4c29122073dd --- /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 0000000000000000000000000000000000000000..50ae352a07012164834cba16eec0e52b53ae3bb6 --- /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 0000000000000000000000000000000000000000..2f24f1812ad0c355018941930fa3a842d222bb13 --- /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 0000000000000000000000000000000000000000..95fadb580503b5a866014f964ebc62c869ca16b5 --- /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 0000000000000000000000000000000000000000..4620d2e3b708c0291d65fba51451f8056011bf3c --- /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 0000000000000000000000000000000000000000..896e17bdbf3188f3bb50a3a6819417220eeb5c13 --- /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 0000000000000000000000000000000000000000..e29879d5d42bdf3528a098140852f780b35da649 --- /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 0000000000000000000000000000000000000000..45c2d6b9d1147ad6f4b83084ab6b090dafbcc082 --- /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 0000000000000000000000000000000000000000..fd9a1bece79d42e3af87496c63842a714204a9bf --- /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 0000000000000000000000000000000000000000..9688a5e24c7fdc1297ddc4ac098b747cdb79a9fb --- /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 0000000000000000000000000000000000000000..dcaab35dcfdaca4c5af01f1e4da1b478b86c224d --- /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 0000000000000000000000000000000000000000..7c24608b47ac20790e0e4be58ac5f677db131511 --- /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 0000000000000000000000000000000000000000..1541c174457652a5a27eea555232ecd6d8835374 --- /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 0000000000000000000000000000000000000000..06fa9c0398b9dbe06d78f7ad9626d61df9e912c6 --- /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 0000000000000000000000000000000000000000..68789d3b826bd65cfcf79aff7ec9524bc0c166ea --- /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 0000000000000000000000000000000000000000..274e86a0e91f679d1d23e4b3e86108f60e128019 --- /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 0000000000000000000000000000000000000000..6929c8be6f041af4d4583d992e59ce2ed809706b --- /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 0000000000000000000000000000000000000000..88e67dfa67de65495a764f0ca57ead2df42176ac --- /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 0000000000000000000000000000000000000000..6507b9892fc2341bee7b7e0270eb6b22cca6d879 --- /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 0000000000000000000000000000000000000000..36dc0fb8337e2d01ad6394919b23608737ed0588 --- /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 0000000000000000000000000000000000000000..36dc0fb8337e2d01ad6394919b23608737ed0588 --- /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 0000000000000000000000000000000000000000..01514fff0cc2a1a8d12d67df813e25e4522e872a --- /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 0000000000000000000000000000000000000000..042d4c71a15d9b5fc7e7b41c429d8cc972380143 --- /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 0000000000000000000000000000000000000000..f029759321d1b737caadbb7b19f084adab731481 --- /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 0000000000000000000000000000000000000000..3217f998da69f4a0d5154c327a37c3cbdcea758b --- /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 0000000000000000000000000000000000000000..ea84d0d096c346e701e96e2089821f3912499a09 --- /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 0000000000000000000000000000000000000000..bde7506dfcc80cd5b6d906ea4509b58903afab81 --- /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 0000000000000000000000000000000000000000..2d157a3c8adf0dba5ec53c24b1c0466b76c0d089 --- /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 0000000000000000000000000000000000000000..58ff44f09764ee1adca2d3190c61494ee130c80e --- /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 0000000000000000000000000000000000000000..12f289f8ba1176e6895c59f1fd5752b63e48c941 --- /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 0000000000000000000000000000000000000000..462acc13538a0d66f3931ac7ac3ac09192dcba28 --- /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 0000000000000000000000000000000000000000..1d674cc51d67e18052e7ccf1bfb938fa3b089ba0 --- /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 0000000000000000000000000000000000000000..685c5695b50d56f629d6bcc050e676dcba0ff2c9 --- /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 0000000000000000000000000000000000000000..fd112b0bd2911a3e4df64c32b61953f17a564a52 --- /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 0000000000000000000000000000000000000000..906e9026a9e49a3ae2b961a44bb1c3d20ec2f189 --- /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 0000000000000000000000000000000000000000..28609a335563bb1afd15ec844781267aeb440d3a --- /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 0000000000000000000000000000000000000000..6d0a0aedfdcffd92364c6f51f99d0839ac1356a1 --- /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 0000000000000000000000000000000000000000..baa5fd37ebd9310026f34c456d9f9c0f6fab43ab --- /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 0000000000000000000000000000000000000000..97d01f59b012d3171cc88e5ca32836dddae127fa --- /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 0000000000000000000000000000000000000000..ffe6d382c80e5ecbec15ec27216c32bd3c0efd27 --- /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 0000000000000000000000000000000000000000..a1e037f78e5d4d2c12341c2b9cff24b3dffcc3b3 --- /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 0000000000000000000000000000000000000000..f199f91f2b0622a33328b15f1e30f9af60468391 --- /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 0000000000000000000000000000000000000000..f0470b45db5f8df17b9acb262acb67aa2357eefc --- /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 0000000000000000000000000000000000000000..b97ad34726a73789f9f70abd70ee4c87a355262c --- /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 0000000000000000000000000000000000000000..23d6e439a766c16fd6e18dd78a6afb6105b972ee --- /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 0000000000000000000000000000000000000000..5e4b84128de2c587bee897cc7fd3df4531e7dd4b --- /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 0000000000000000000000000000000000000000..682ee4943e9b7fb155aa34fb9b1db9e2f55c6912 --- /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 0000000000000000000000000000000000000000..af9a5b4091a89debdda77810046751c90a01ba32 --- /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 0000000000000000000000000000000000000000..d87404ed9c5c688b3e2a28f23ec3444205fce096 --- /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 0000000000000000000000000000000000000000..8fb7f9f0953e97d890f27fe5c95c037236085af7 --- /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 0000000000000000000000000000000000000000..b97968a86111dfdf354eeb72d5f40b0572677962 --- /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 0000000000000000000000000000000000000000..5eb3c85e8152a74f8720f107ad663536f37b3f3b --- /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 0000000000000000000000000000000000000000..c3631abde0ded4a399a4cf64aa5ad415c898c1d0 --- /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 0000000000000000000000000000000000000000..e8385edad1468875f40abdaba322792a72c5ac9b --- /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 0000000000000000000000000000000000000000..33cabac4e8d51a3bb7e1dbbff7f8194d849d7aac --- /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 0000000000000000000000000000000000000000..dd9ee1d4342b3365273959020689e27130d27b67 --- /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 0000000000000000000000000000000000000000..773d77fd15687302623ec03f5a9fd226796c4f87 --- /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 0000000000000000000000000000000000000000..b53e6765ad18e6ce3593c90cb5ab44c07077f501 --- /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 0000000000000000000000000000000000000000..2696cb40e47e62e79c7784b4fa3f607d605fb93f --- /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 0000000000000000000000000000000000000000..28bf68160cd247387fffc59e1716fc118b9c2c9d --- /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 0000000000000000000000000000000000000000..a3e76872ea43aa19044d1f0fd92f16f48d765f2d --- /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 0000000000000000000000000000000000000000..8e451cedab7d2eee1775eec58bb9c48725b9cbab --- /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 0000000000000000000000000000000000000000..e515dc75203252893ff1e994c0d720844fe6fcdb --- /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 0000000000000000000000000000000000000000..4776d33667a7687a433b2f2dd7eba82b11abf5e5 --- /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 0000000000000000000000000000000000000000..005de8728b26dd83085c6949bdb20e02587db6c8 --- /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 0000000000000000000000000000000000000000..c61e18c6dd784b96f127d7e04ea0b27bf3034d8f --- /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 0000000000000000000000000000000000000000..5177b997781cf59ed2ded4ff78d9e5425e954f7c --- /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 0000000000000000000000000000000000000000..385bc44f95c9ccd556914ff1220267aeca2486e4 --- /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 0000000000000000000000000000000000000000..294fddca07cbc2097864a88a61bedfe05b2f99d5 --- /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 0000000000000000000000000000000000000000..ae76ef0553ad59bf05ae6035d0a395521a019e75 --- /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 0000000000000000000000000000000000000000..f14a7a4cf78a33fd0fe9103d21e4199159d3b475 --- /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 0000000000000000000000000000000000000000..c6dca560132673be15235b120e8207a0c2a4358d --- /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 0000000000000000000000000000000000000000..d349d6c902905eea3d24571facc9c7345b699b23 --- /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 0000000000000000000000000000000000000000..9c6b09686571d3a97287d10275b7967d4deb7b11 --- /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 0000000000000000000000000000000000000000..6461ec7b7f90505f4953c49d5a61c538d7c246ae --- /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 0000000000000000000000000000000000000000..b1adea6265e0d3804a7ac1ba20ae8db832a74013 --- /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 0000000000000000000000000000000000000000..6946d2313c1143bb8c5fc923046d8ed4d3baf9fd --- /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 0000000000000000000000000000000000000000..e7a1bcb01d40e6e068f8957e7c013a4e76e0ca8b --- /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 0000000000000000000000000000000000000000..9f770db32fd1ea213507a1d26f860f18905c8ffe --- /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 0000000000000000000000000000000000000000..df1a1243a935201281234efcd03dd88f0bd566b9 --- /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 0000000000000000000000000000000000000000..0162c0e551583c5bc86ee2aa8d6d301dcfda71ed --- /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 0000000000000000000000000000000000000000..98c320b263912d84e708809f91696799170d1f02 --- /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 0000000000000000000000000000000000000000..cdc9367f0aed2dd016e8eb4ff800de23609b14cf --- /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 0000000000000000000000000000000000000000..00d680b0faf697fe412f627c9e98f6f62eee3d36 --- /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 0000000000000000000000000000000000000000..fa3eecd469eb1a21691f1d85ace563a4d9b176b3 --- /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 0000000000000000000000000000000000000000..7303d35601cc904214f940cc468fbc83281a800b --- /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 0000000000000000000000000000000000000000..3d47aa397571fe1a795180ec36e8cbc7ba22b532 --- /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 0000000000000000000000000000000000000000..0a0efef263ec732f8ba7c3c086c4ffe5c6b0442a --- /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 0000000000000000000000000000000000000000..0b7c577ddd88a5719201a237777b6c0186904c3b --- /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 0000000000000000000000000000000000000000..cb171b3efd36428c60947513505f5120c92ef48b --- /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 0000000000000000000000000000000000000000..e7a87adbcdf7985906f08923f89df782c09b886d --- /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 0000000000000000000000000000000000000000..d96dd0c9e43ce4f49ac548e8df4886afa77c3d54 --- /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 0000000000000000000000000000000000000000..e3cc8675a298b6d2f50483561e523e602a95c764 --- /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 0000000000000000000000000000000000000000..8bb65ec01eef97191bba163c195780c392df2873 --- /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 0000000000000000000000000000000000000000..266b5f3c48eaf145e1a6594e9887b965c2db8e12 --- /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 0000000000000000000000000000000000000000..b4d4492309290e198a553e7becce94d5584a5a9a --- /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 0000000000000000000000000000000000000000..d540fd0587f05672ebfe6405f092a72ec8bb9d92 --- /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 0000000000000000000000000000000000000000..b0816fb8a8572ba258687e50658238b284ebad54 --- /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 0000000000000000000000000000000000000000..b54379ad4d7325422b81049cdeda7b0726230dc5 --- /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 0000000000000000000000000000000000000000..40976dcab08405ad24eb052c7142f310da08d5a5 --- /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 0000000000000000000000000000000000000000..3e9f3630a2e806bacca5f0f0e6c5c2fb5159106a --- /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 0000000000000000000000000000000000000000..98dd190bff77a2ca1a24f4523532523317fd9835 --- /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 0000000000000000000000000000000000000000..0d464961b9edd1c2e0e66d77ae589dfb3dc0a1ec --- /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 0000000000000000000000000000000000000000..f5253af0fc5151ad136ebf13d93a94de1a648ff1 --- /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 0000000000000000000000000000000000000000..4e0a0ea873ba647b063652d1a348b8f8cf0a082f --- /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 0000000000000000000000000000000000000000..6a6ff37a1f9606ea744da534c8ca6dca3514c4c4 --- /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 0000000000000000000000000000000000000000..da0ffe599844a111c5c4ae4542ef4a916a2ca1db --- /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 0000000000000000000000000000000000000000..f88ae1147d6118b3e013aeca2b373effef8d68df --- /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 0000000000000000000000000000000000000000..21dbed6f1be25d8e486663f0bfdacae7e6164c7d --- /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 0000000000000000000000000000000000000000..3a32e3ddeaed56466d6ee03a2c50455fc21c0d7f --- /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 0000000000000000000000000000000000000000..f99c66fc92636689e5a48c6c71022258d908da90 --- /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 0000000000000000000000000000000000000000..e9038413469ca17b1eb913292eea4fdc8342b7a7 --- /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 0000000000000000000000000000000000000000..bcee489ca85b8cea084640c68762783d82d5c929 --- /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 0000000000000000000000000000000000000000..5bbe898d415408c63a6a17f5de132a9dfb5847c9 --- /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 0000000000000000000000000000000000000000..ff3e7befa48571e01a56289c8f89b91129be2c00 --- /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 0000000000000000000000000000000000000000..1ef8c2b85652d8b2eb7c774bd7408db32d8dd4db --- /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 0000000000000000000000000000000000000000..8c7880e6020bf597e4d4a592975297eaf526f1f2 --- /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 0000000000000000000000000000000000000000..ccc38b29e82732e218782c7ecd8442f2114e32c7 --- /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 0000000000000000000000000000000000000000..8ca573f1355f15d6ba15cdc92858a038c8785a05 --- /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 0000000000000000000000000000000000000000..6b9147a43d526c782d6c9f9fb64669430c8fb4cf --- /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 0000000000000000000000000000000000000000..e454f5b91e78812c43231cb5e506646097f987f2 --- /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 0000000000000000000000000000000000000000..cc98f8c9fcac3612032f9af0a632ae187c819b68 --- /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 0000000000000000000000000000000000000000..f32e1eccac0d62dd4a39d31f854d534e5a927c1a --- /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 0000000000000000000000000000000000000000..5f004f8cf444cb6cb8b3fa467d1b7bb8b532b7ee --- /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 0000000000000000000000000000000000000000..008459e8d999f35109b41a01324ba2a3460e2611 --- /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 0000000000000000000000000000000000000000..f54d0dbd1e4c342fa33be1cb2df33c7e3a8e71d9 --- /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 0000000000000000000000000000000000000000..cc1fd8a40c4caa9bf65d17c494131652b6caef2f --- /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 0000000000000000000000000000000000000000..13311762395337ef0cdc6c316f0f4100297a1a7e --- /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 0000000000000000000000000000000000000000..053140d58de5c2d0095730c9b65c46960cd7f596 --- /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 0000000000000000000000000000000000000000..07fa11f8481591d64b1c935cc1565c6871dd85f6 --- /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 0000000000000000000000000000000000000000..7ab2885bced3a74d72c49a2f1135855a5071e6c6 --- /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 0000000000000000000000000000000000000000..4a309b9fdf222f7c09c811da553ddd4b89ac3575 --- /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 0000000000000000000000000000000000000000..bcf4edb3ff1305dfe2c2bcc39f3fa7a3c4d96152 --- /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 0000000000000000000000000000000000000000..90adce120f9c0737d5e4d0b16ce05826103ffce2 --- /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 0000000000000000000000000000000000000000..9b5f7704e134c76ca7fa4c502caf28535378be1a --- /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 0000000000000000000000000000000000000000..115febd22b049302c319f4bea33ed561ba725a81 --- /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 0000000000000000000000000000000000000000..b54dc1f19c0ec5ecb610016069ec8e54a5e2007c --- /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 0000000000000000000000000000000000000000..c654c5b185595e81faca822e8a16a688c05ac685 --- /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 0000000000000000000000000000000000000000..7e706e611a049b5d30d5afff4d01d89e0c9776a5 --- /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 0000000000000000000000000000000000000000..45ddbb25445d494a376617b434a0e6110af6972b --- /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 0000000000000000000000000000000000000000..7783c2fb99f5c38d8cd11de5d313a0de42347187 --- /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 0000000000000000000000000000000000000000..061d703a184fe02bf78c2c0f6112a74cc802a9d7 --- /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 0000000000000000000000000000000000000000..c104a7fec79c0b603e97a0fdc955b537a7994b7e --- /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 0000000000000000000000000000000000000000..7ac9f23a229a1b1f203f2444060933640694319a --- /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 0000000000000000000000000000000000000000..d6f82506b3397bbbd09961804ceb6c453e913140 --- /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 0000000000000000000000000000000000000000..6650ac89afa635f37e45daeceedcfe8107d4ff37 --- /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 0000000000000000000000000000000000000000..01adc564e3d3676b24a9479dfa6106622374f023 --- /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 0000000000000000000000000000000000000000..0ce997f492763e8845288174cb565d1bad20d9db --- /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 0000000000000000000000000000000000000000..deed2290d4cae937a29bba1fc35148eb5d613561 --- /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 0000000000000000000000000000000000000000..4f4a39c23c089e748a3a41f5f46af0955c64ed94 --- /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 0000000000000000000000000000000000000000..08f83f06a25c4dc3bf0230352ebc780cb02a7620 --- /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 0000000000000000000000000000000000000000..2d09fc799a569f67f08a01d6f9503ad3b1883069 --- /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 0000000000000000000000000000000000000000..8e35c048a74b7015bb6a5f539d59de7b8b8e93d0 --- /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 0000000000000000000000000000000000000000..4ac0b61af68c99f70e90f7a97d0d253ed3baa65d --- /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 0000000000000000000000000000000000000000..251fdb966618517fda56c5fb89984f56dad90905 --- /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 0000000000000000000000000000000000000000..19db8ebef314d57a1c2e8d272fbb42377d05ecc0 --- /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 0000000000000000000000000000000000000000..380b653f434d1764702d6431af4f35aeb08cfa7d --- /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 0000000000000000000000000000000000000000..0847ee66711a6f35b273380397af84bfb918782c --- /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 0000000000000000000000000000000000000000..e1e0752fd1203c4adabe963e6ebaf6d52b36057c --- /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 0000000000000000000000000000000000000000..b447ed0a4645afbe5df2efbe1b185a5d87442e6c --- /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 0000000000000000000000000000000000000000..877a57171951711b85c99a18c0e9a20f453e0c55 --- /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 0000000000000000000000000000000000000000..3fafe6188559ae7adef6fd8b1d6bc298326d1a5b --- /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 0000000000000000000000000000000000000000..e8f8c51074a30151a60d6305d4b388011b04c893 --- /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 0000000000000000000000000000000000000000..f3d89c2a64e5687447ed5db41a8838ba7fb5f909 --- /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 0000000000000000000000000000000000000000..e22a340dc3f3b6f13e156f421b15de5b0171bf4e --- /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 0000000000000000000000000000000000000000..63f23898e6eef2e891a909c342e90a0e5691daee --- /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 0000000000000000000000000000000000000000..6e170359cb6949d0cb8a0a0fa8e13437b5b7e287 --- /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 0000000000000000000000000000000000000000..9269c4742bde625c76f826f02592df9124ae185f --- /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 0000000000000000000000000000000000000000..ea69aef6a8ab6e864322a2d6a597882475efc6c8 --- /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 0000000000000000000000000000000000000000..7ca6b37f5c4dd2df6eb07dbda7651d8ac01fde01 --- /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 0000000000000000000000000000000000000000..5962e6e82ede0f651f3555a4e9628e7b5117f59e --- /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 0000000000000000000000000000000000000000..60bb03594d915aca4184e279345420aa7795c9e8 --- /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 0000000000000000000000000000000000000000..d398c2ad9355763658d6497dadc677fb7f0247bd --- /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 0000000000000000000000000000000000000000..4bb1e9013e761748fdb15c2aaae417752b5d8d73 --- /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 0000000000000000000000000000000000000000..4337a5424a4f6851fada1c8290b2173a17713966 --- /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 0000000000000000000000000000000000000000..3587a7b5c23c346c7a48951ce170197fabe045c5 --- /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 0000000000000000000000000000000000000000..4e0255050ca43443ec962c3d73c532a8d2c3d3f8 --- /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 0000000000000000000000000000000000000000..08cce16655036ccff623508f55e1e41c43a97414 --- /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 0000000000000000000000000000000000000000..35bb8c0b68798704ea5372915ede856f64c818ce --- /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 0000000000000000000000000000000000000000..bb7127ac6a6117afa36e45aa0a015dceb282a02d --- /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 0000000000000000000000000000000000000000..9f9bd5474d51f627c6f3ec4488743e8e8bae864d --- /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 0000000000000000000000000000000000000000..2f6d018a67f9641ae6afd2ee6d1a0af312dfa717 --- /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 0000000000000000000000000000000000000000..c9ec39144b3882374ba073943e271f2b6c9cf923 --- /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 0000000000000000000000000000000000000000..66a814aaeec8590501b0e132e5e82d7e6492a8f0 --- /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 0000000000000000000000000000000000000000..49aba3c9cc04373c3387b50b2b1bff01d55ee2d2 --- /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 0000000000000000000000000000000000000000..3ef8ad9573259ab92dcaa1698915b8745dfc476b --- /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 0000000000000000000000000000000000000000..a0c2f8d7664bbde17bf38fb7e9eab9ce01d7dc51 --- /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 0000000000000000000000000000000000000000..00ce4998d1bd8e7b65040dc233127004b408722e --- /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 0000000000000000000000000000000000000000..381bcb99a9a18b96eea4bc1a90e45fbaaf6335cb --- /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 0000000000000000000000000000000000000000..e4cf39fb97b96a91c60a5a6562baa8c6a6d24c4d --- /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 0000000000000000000000000000000000000000..351fb2200de374e3109d333d04563d0da37cd36b --- /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 0000000000000000000000000000000000000000..c63ff8205d19e51e6c4983e7ec6309a6e6632523 --- /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 0000000000000000000000000000000000000000..e09d17c34574e3df06461b4206d8e572092da32d --- /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 0000000000000000000000000000000000000000..aab0d582440952d067635cf0273e9286b69ae5b1 --- /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 0000000000000000000000000000000000000000..605cae2a5a1b071ab1292bb431736eb39754d388 --- /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 0000000000000000000000000000000000000000..6d58e43c1e2374556dcd5aaa67cd2c864dd0dcf9 --- /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 0000000000000000000000000000000000000000..422029a735b0523b2e5b71e60d9b4369fc64d50b --- /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 0000000000000000000000000000000000000000..d8415bf62a97154c4c634b56affbf97a0f5e010f --- /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 0000000000000000000000000000000000000000..80f1f86f29a7737a70b5f77a43aef1c978818838 --- /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 0000000000000000000000000000000000000000..784d97cdc12ad53b33adfb08b1fef70ba93a1195 --- /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 0000000000000000000000000000000000000000..a78c85f45a82455fef70bbd81361a30c225ced5d --- /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 0000000000000000000000000000000000000000..70e28e7b15d377b55f1c88e156df93fe30eb18ac --- /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 0000000000000000000000000000000000000000..2db7bc9474823f7c256607062a0718869ef17d76 --- /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 0000000000000000000000000000000000000000..3d7b503f3b09c432373b6bc8217952fc84298ec8 --- /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 0000000000000000000000000000000000000000..e474e02661d2cb40b6e5b3c912eebfd5b30960d7 --- /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 0000000000000000000000000000000000000000..e0a3f6c836cfaaebf5346ed9d23fd5dad29460b9 --- /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 0000000000000000000000000000000000000000..79cd7c2fa9421b06528db451d241afe8887c681a --- /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 0000000000000000000000000000000000000000..2f98ebbda17228712ba29f779f8d0c1b8b46353a --- /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 0000000000000000000000000000000000000000..92e4a09bdf4f732a2b5df402a769a805b8ac1859 --- /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 0000000000000000000000000000000000000000..80d09fb83732cdfd6a3a95d5a5e2539ef0527933 --- /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 0000000000000000000000000000000000000000..cd08b87cfc3618251c10da121fe361fb062c1e8f --- /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 0000000000000000000000000000000000000000..7d8199dee6988dc78c031272a4406114ed46b593 --- /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 0000000000000000000000000000000000000000..78b95dedd098e36f2e1f846b0927a0b2712571ee --- /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 0000000000000000000000000000000000000000..0496f24cbb8b16fe20aede45c1c035ce3a4e4173 --- /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 0000000000000000000000000000000000000000..6ff00ef2735a24bbebd6e5bdf7e817728c19b58e --- /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 0000000000000000000000000000000000000000..be402ef98215b5b3b4ae0bf9f8ceb24c7b03f2c1 --- /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 0000000000000000000000000000000000000000..3d67a068a92fc623865a3727253b88419bd34035 --- /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 0000000000000000000000000000000000000000..8a6513b3ce0531d84e56853e9a410fbff103d56c --- /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 0000000000000000000000000000000000000000..eecc255e6c18bd5880719c41a25cf524e900a483 --- /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 0000000000000000000000000000000000000000..3cb5745b364b06b43c72c3523f157843a3df9d8c --- /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 0000000000000000000000000000000000000000..94a2ab8577a056c14bf074981a0f8db4beaae4d8 --- /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 0000000000000000000000000000000000000000..0f4a2d1c7f01712e919552786cc62451004c9d51 --- /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 0000000000000000000000000000000000000000..73a288cd6d16e1a0666b67540a835e706de4fcb5 --- /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 0000000000000000000000000000000000000000..d681f93caadaef92b7518ca855ca751444cf27b8 --- /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 0000000000000000000000000000000000000000..66a5f33c90be6d149db90d2c7ceaecff366692dd --- /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 0000000000000000000000000000000000000000..ef9e219e9763cc41fd4ca41e79f20aa9455af433 --- /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 0000000000000000000000000000000000000000..060461d095dc4d5bdedd3235834bd41d53a0610b --- /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 0000000000000000000000000000000000000000..ac34188ccadba498e1fd6087f9ee2d565443594e --- /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 0000000000000000000000000000000000000000..bc0f768bd0e54e9c223cd81a26ff5ac96426ae03 --- /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 0000000000000000000000000000000000000000..5c35b42aa3377310559083d0f1954d5b3ccdd34e --- /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 0000000000000000000000000000000000000000..9a7ba7de163dc0af4eb056437de836cd8d908952 --- /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 0000000000000000000000000000000000000000..82de33d141c241df70c1fa6c0f34798c2181680c --- /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 0000000000000000000000000000000000000000..dcdccd249733c250f5a42fff4cc5c1f6ecc37600 --- /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 0000000000000000000000000000000000000000..8cca5a205bf42c281b20dbd8991467f1ce263034 --- /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 0000000000000000000000000000000000000000..1d1ca2095c64759173a2ab370a3996fbf713eb39 --- /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 0000000000000000000000000000000000000000..50289502d82342d243c0297d818c29a0c1906381 --- /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 0000000000000000000000000000000000000000..58ed1e10024be51c7df3cf1f0c743d079e05d0ba --- /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 0000000000000000000000000000000000000000..d854d8ea4b7c83e2e0c16bbde3e4690ceded5c59 --- /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 0000000000000000000000000000000000000000..b3ef3fec3123bc302cf4b2648b3e03d21e7c5013 --- /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 0000000000000000000000000000000000000000..4b447f4d4caa0a77880867e36cbf1a56b33f4e9d --- /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 0000000000000000000000000000000000000000..7eaf86982cdef236368a5690b51f549d4826236e --- /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 0000000000000000000000000000000000000000..bc830d57cf721f3c2c5ed82f7fff3468ac1f62fe --- /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 0000000000000000000000000000000000000000..3b134fcb5c67c9a4982a8a5e7a952e8fedd5f27a --- /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 0000000000000000000000000000000000000000..8721e1f03578357eac861a4c7c63703bf96a3355 --- /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 0000000000000000000000000000000000000000..b2677a0c81baa0846698b9283bd26d651c22013c --- /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 0000000000000000000000000000000000000000..9776030ca6d8facfee49ae7b5da79b38356adafd --- /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 0000000000000000000000000000000000000000..3009b09477bb458ce0bc03a728500cd26b3e842a --- /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 0000000000000000000000000000000000000000..6548121046beb94e3d031e16f37a4648bb5e30e7 --- /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 0000000000000000000000000000000000000000..6461f5edfe6eb9c9badf83e4ecf4a2dc9af008a7 --- /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 0000000000000000000000000000000000000000..6b501bf4badbf5532a408636f4299b968394d694 --- /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 0000000000000000000000000000000000000000..56b59f4f1ddfc4ca5fdfe8369e2f93c361fbf92c --- /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 0000000000000000000000000000000000000000..707d92eb2b7d3025080c5683c8305add93b5371e --- /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 0000000000000000000000000000000000000000..882bd865353c312892d7273e8707d9a8b37994bc --- /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 0000000000000000000000000000000000000000..47599e0853720f2f52a69d10c7b57cfa76dfe90b --- /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 0000000000000000000000000000000000000000..86d275947ece49fde34033805b9ca5d0a9fd213b --- /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 0000000000000000000000000000000000000000..f3f35f4803b1c992ccd438890be5c8a49a1794d9 --- /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 0000000000000000000000000000000000000000..5de538b1474a331ec0d2e231dc96c71ccef800d8 --- /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 0000000000000000000000000000000000000000..4638e8959a052245e114fbd36d1b99c5547b600c --- /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 0000000000000000000000000000000000000000..e2aea13a21f1536d8a2d481fb97749c07f657ce1 --- /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 0000000000000000000000000000000000000000..b6adb8cd113f6a9d38c352a51cb9a839fe043870 --- /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 0000000000000000000000000000000000000000..d8b13ea7aaeafc4141594183b67be1b75b011b37 --- /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 0000000000000000000000000000000000000000..7aede0678644f58d03634d8a2ca61b3b90d6169e --- /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 0000000000000000000000000000000000000000..62e36277d6fdbcba25447188705cb0c94b7b8032 --- /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 0000000000000000000000000000000000000000..d4e334f7af5db250e15b35320507f8eebf5dce77 --- /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 0000000000000000000000000000000000000000..eed88c50b626a94d15594cf0e418ef1a559ee5f7 --- /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 0000000000000000000000000000000000000000..fa27dce9fe3f77b8c4830f6225dbbf1820679bf9 --- /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 0000000000000000000000000000000000000000..4d0fd1a1fcf7c6a5e9d77e0e63cd3201e309e320 --- /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 0000000000000000000000000000000000000000..cb90309e14567723cc4e796eed39348f54b1e95f --- /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 0000000000000000000000000000000000000000..7b492716ddf2cd58d550b9cadd527ff6789eb09d --- /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 0000000000000000000000000000000000000000..2c7be2c72a747025c99f21932360dfe6faeb95bf --- /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 0000000000000000000000000000000000000000..df0d96b3daf6cfde17a51f7a3a7dc17f06974ac3 --- /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 0000000000000000000000000000000000000000..c993d2d811a3cb656582b574baccdf79ea31a062 --- /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 0000000000000000000000000000000000000000..2438f83a4a6f02e3cd8f79fd56f8b5ac41ecb727 --- /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 0000000000000000000000000000000000000000..d548881d88a401e37b5b4cff804bda2e886c0281 --- /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 0000000000000000000000000000000000000000..6c81b7756612daa64681fb9f9b0389756283ba5e --- /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 0000000000000000000000000000000000000000..7c0f47749fb4bbde1d1648a9975ab8bb431fec44 --- /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 0000000000000000000000000000000000000000..570e4dccabf806243568e4d47322a7e707703536 --- /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 0000000000000000000000000000000000000000..d5745f42925950dc0e1ad3751a370b8e9308d7ba --- /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 0000000000000000000000000000000000000000..8e34e51980d3e246ba16f3272e4f359b20b1c685 --- /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 0000000000000000000000000000000000000000..7326978f9f857b7ce447e6b9230eb31a6900ce4f --- /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 0000000000000000000000000000000000000000..eaa71830747cc9fdf80f19f35f2e2e2ed499cb3a --- /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 0000000000000000000000000000000000000000..f7718aabb05aecba10d3fc14d20237a8bd7a01f7 --- /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 0000000000000000000000000000000000000000..13eb7ca2f525dcbcbcedaf6b271e9f7f22ab6e17 --- /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 0000000000000000000000000000000000000000..892fb85f26f666bd988a04b81c7e4b1efc1d3eac --- /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 0000000000000000000000000000000000000000..30a380225d8aae77cf9f0c823709e902a4f80f45 --- /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 0000000000000000000000000000000000000000..4de74d66243ea483a0630a2118a06107462aeaf7 --- /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 0000000000000000000000000000000000000000..5df3f6d51a60b964e19c29edc7fe8273e42c530a --- /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 0000000000000000000000000000000000000000..2fc59a2487547c5f65c32f4c29194a153d7eec8e --- /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 0000000000000000000000000000000000000000..3341c9f255f4b37bad499ff11f300983605476bb --- /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 0000000000000000000000000000000000000000..efd8713a456a49b743d02f33a1719a4445f1ca02 --- /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 0000000000000000000000000000000000000000..65a007302ede07d91d4cbadb071437dbbe285fab --- /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 0000000000000000000000000000000000000000..22e5bd7066942d3647a4f9c96b7c4c4b08532855 --- /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 0000000000000000000000000000000000000000..3cd9e2dbd8e9ea8411163b8ad1081053943df49c --- /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 0000000000000000000000000000000000000000..8f793c2bca526bcece0433300df35e87a65be6f3 --- /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 0000000000000000000000000000000000000000..28b35a11665746a220aeaa628039bb670b9e7a1b --- /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 0000000000000000000000000000000000000000..a58cbeab467866b7ae44ce5ec4b078e67cbd09c1 --- /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 0000000000000000000000000000000000000000..5b0db68082974a166e911dc50b8ac8c7664f42d2 --- /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 0000000000000000000000000000000000000000..5356c7773c1a9c0bd38e942a7ff3fc72b9d0dcac --- /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 0000000000000000000000000000000000000000..daa777f323719c9ac78943b62c4b0b366677ba19 --- /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 0000000000000000000000000000000000000000..382257b8a14e2913205a35d02d0608d55b2befd1 --- /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 0000000000000000000000000000000000000000..54fb3730b333f3eaac041c36d1dbebd11c9ed933 --- /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 0000000000000000000000000000000000000000..e102a1ef7bbe583468dd1ac6c664d67d5515da67 --- /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 0000000000000000000000000000000000000000..058f40bbc901e3f0b6275386136c454f673f29cb --- /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 0000000000000000000000000000000000000000..61f4ec1dbc9b58f7fa5c911283196abe736bd495 --- /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 0000000000000000000000000000000000000000..6f897a3041cddd568d96fdce14c202cfaddb6b5a --- /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 0000000000000000000000000000000000000000..c2faab6a95879e94dd2e7404e44728eb7cba7830 --- /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 0000000000000000000000000000000000000000..1096921a5f3be5f4d5f695421a81e79218164b9a --- /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 0000000000000000000000000000000000000000..e40507d12c688e359213a55f5f78c8c2b7efa84d --- /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 0000000000000000000000000000000000000000..c568d9e99b0634cf7773d812a176d1d28ba20834 --- /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 0000000000000000000000000000000000000000..95a2451d85162e0823ca9ce72dcd984cc6bf2934 --- /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 0000000000000000000000000000000000000000..3f74ff270328290275f4feb07168efbfce0225d8 --- /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 0000000000000000000000000000000000000000..41f065451540e4fb146df208d0040c2c8755766d --- /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 0000000000000000000000000000000000000000..88fb5f3d0511b2894b3d5b6ed369aca11b4460c1 --- /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 0000000000000000000000000000000000000000..f75f6dfec19e143b186336ad6cdfd896520d2900 --- /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 0000000000000000000000000000000000000000..39ee2765d5bc046f818d439d314d3cddcb1f24cb --- /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 0000000000000000000000000000000000000000..bbe2dfb51fb01481595ba2e0840731e357aa8f63 --- /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 0000000000000000000000000000000000000000..04b36e4d80f9e93db5dad642706e7b2387027df2 --- /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 0000000000000000000000000000000000000000..1e1f501c2db7845c3c0c419b052ffa7a9364897f --- /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 0000000000000000000000000000000000000000..013ed82fa319087f92d3a99b311933eb01d59234 --- /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 0000000000000000000000000000000000000000..e27a873963450b38f7d267683b6b94bd626b09c9 --- /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 0000000000000000000000000000000000000000..99c317a33dcb019ef06742772d3744991da3c36a --- /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 0000000000000000000000000000000000000000..1ac05e9bfd45afb9d27b668eab7a5e5bec598ce6 --- /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 0000000000000000000000000000000000000000..402e873433472751d0ffc626c86744bd9db99551 --- /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 0000000000000000000000000000000000000000..9cb44b4a85aeede741c7f2024d2ef3c2141b6fc6 --- /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 0000000000000000000000000000000000000000..06e6bd2f65cfe39221c225d1857bd1433c9fa1c1 --- /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 0000000000000000000000000000000000000000..e6abf24886124318fb4a5377b8da741b2022ba40 --- /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 0000000000000000000000000000000000000000..359f1d35bbb7f43e48a266517f316b64fe47c689 --- /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 0000000000000000000000000000000000000000..17516d552c7689bdf31c39fb7aa00068f143171a --- /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 0000000000000000000000000000000000000000..8e62029ed7203b0cfdf0d4f192d52c0f1aa1db60 --- /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 0000000000000000000000000000000000000000..3656cf9b3fc4baebf0dcc36b9ad3dafe3655fd95 --- /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 0000000000000000000000000000000000000000..472ef33f4054b9db0265468b54a6297a999fbec5 --- /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 0000000000000000000000000000000000000000..dfa95c708c5fe3510f54ed3754e673715585c944 --- /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 0000000000000000000000000000000000000000..e472ddf489082db060d2ac06c10ebc28e56b084c --- /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 0000000000000000000000000000000000000000..3f429a3bf270c01f71da42c7e875ec0ad91c62f6 --- /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 0000000000000000000000000000000000000000..c2e79ad64256ffe7ccde78c85e4b814f028029f0 --- /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 0000000000000000000000000000000000000000..e6b81f92f0512c80e8d91ba43bd634f174ce1d72 --- /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 0000000000000000000000000000000000000000..ba1eaaca648adc8721f0fc497544516b3fe3945c --- /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 0000000000000000000000000000000000000000..e1ce09505f784fa7bfdf767ef07c77b477bb62a2 --- /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 0000000000000000000000000000000000000000..5cfe09d6c90e8368b074ca7fd0b3cbacf95a1060 --- /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 0000000000000000000000000000000000000000..ef36ff6a3b657a832a67dc1f512582a65a410585 --- /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 0000000000000000000000000000000000000000..b53b6b18237c41653f0f4657c7a11edbaee79d9d --- /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 0000000000000000000000000000000000000000..e8f60b03274753cc7edbdbd977f786ccecb5988b --- /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 0000000000000000000000000000000000000000..249d1725bfae172f81cc8596b8486bf91a19b8b3 --- /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 0000000000000000000000000000000000000000..971c4e296b5dd43351e624149d180c42aa0ae000 --- /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 0000000000000000000000000000000000000000..27db18cb9e3840bf07d1b4478607293cc44d7819 --- /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 0000000000000000000000000000000000000000..4f50e55879e4725bb38f1df88d3e6471d8bbb615 --- /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 0000000000000000000000000000000000000000..120c7d1cb9486670e851124c745ff2c4eea89af2 --- /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 0000000000000000000000000000000000000000..b926f4b446a5d42ab5b917950cceaf67f111ac46 --- /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 0000000000000000000000000000000000000000..c4c5a1e451e65a0892766a4e8b0cd9e1e82eea2f --- /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 0000000000000000000000000000000000000000..84bc3bd269f0c03fbee15f8ad4d7096ca0fe23c6 --- /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 0000000000000000000000000000000000000000..c5cac152b4fafe8668922abceeda506d32493492 --- /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 0000000000000000000000000000000000000000..4927c1e68b009ab747f8065f51bc1fd683a7cc04 --- /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 0000000000000000000000000000000000000000..f34cdd9702c71c288bf12697f157f6af6f6d6b84 --- /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 0000000000000000000000000000000000000000..071371c7357ae2f2c166022417066915c9416430 --- /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 0000000000000000000000000000000000000000..bad5c790ba932062d3c9e9b77408d611d67a3e37 --- /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 0000000000000000000000000000000000000000..d39f1a1cb55f5b55edb92fd83b1d396844a0854a --- /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 0000000000000000000000000000000000000000..3d5a5d34cfee39dc4a5074bb913226e48cbab36d --- /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 0000000000000000000000000000000000000000..0796d92b88af6ee4be7958139b1719dfdc3b0500 --- /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 0000000000000000000000000000000000000000..5929d4f5512df01d02a061b0aee79b9a2bba7930 --- /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 0000000000000000000000000000000000000000..01a0815a2ff4d6298744a5ac827e2a8e79082524 --- /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 0000000000000000000000000000000000000000..04748cae694cb94fd6030582f5e7d20619e4ee98 --- /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 0000000000000000000000000000000000000000..f736cf93ccaa23cea9b143cc07169f9e0ea1c5f9 --- /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 0000000000000000000000000000000000000000..ecf6adc4dbeb9b9ca9388fdddaac5c4fd8c6637a --- /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 0000000000000000000000000000000000000000..347ac2aca3782f4fcfd3dbb54a085d95ba92a885 --- /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 0000000000000000000000000000000000000000..28712cd8f4ac5dafb9c9f80619f2737969049f33 --- /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 0000000000000000000000000000000000000000..c82bf62842752f157d2a48821c215db9bf4236e2 --- /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 0000000000000000000000000000000000000000..4edd5c9ffa8270165282d32b14f79ff992d1c2fc --- /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 0000000000000000000000000000000000000000..84d9a1ac04ab94996a107b98d21d1811cb5cc634 --- /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 0000000000000000000000000000000000000000..a18b57dc3af02fd2f84cd0dcf8fd9072e670fb6c --- /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 0000000000000000000000000000000000000000..70efca4a25c540356f50b9bf4342fced7b03935d --- /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 0000000000000000000000000000000000000000..1421a703d7f81027483001e33091374cfe6ea4ee --- /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 0000000000000000000000000000000000000000..673c7dcb86066ed8e51edf04d4640b5278ff4732 --- /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 0000000000000000000000000000000000000000..d9de793e99a29be456bdb2aca7adbb51d5f19b83 --- /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 0000000000000000000000000000000000000000..089d297c9b22ae34ae7f7d0c23c8649a7fdefc8e --- /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 0000000000000000000000000000000000000000..11219016b9881359cb9423aba5419c7e88e3ff34 --- /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 0000000000000000000000000000000000000000..c7d84fe03eb81580845bdcf6e60fce881ee70a52 --- /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 0000000000000000000000000000000000000000..70aab0a134bbd86bfb39f22829d9a716f94fe9aa --- /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 0000000000000000000000000000000000000000..7fdbf3b1148c0d2fe47a0a1957d2cf23fd5e120b --- /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 0000000000000000000000000000000000000000..616a475da12314ce604ec51a9675989ef1f1ae8d --- /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 0000000000000000000000000000000000000000..927d6d11a890e1afaa76f958473103fd8f34f85c --- /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 0000000000000000000000000000000000000000..29a155236b47bf0dfb93777e354d9a33c12195be --- /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 0000000000000000000000000000000000000000..d7cfb5145a2c8352fb6783b043c6f405a9ccc0c9 --- /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 0000000000000000000000000000000000000000..d0d8945e50d9ace8ceb1b1f656aa151e3e142992 --- /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 0000000000000000000000000000000000000000..5e4cbb010e0ab7453dd6590eb06027bf0582e4e3 --- /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 0000000000000000000000000000000000000000..557eef5f3b5f01f0dc256f8c420e71cfa7e32dd6 --- /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 0000000000000000000000000000000000000000..9e102c8fc020343430931fcd8f1dbad331b99377 --- /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 0000000000000000000000000000000000000000..60e6d64c8edc481b53522679698483e28693109d --- /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 0000000000000000000000000000000000000000..ea81b138bf837b6abd5000cbdd4f1edc6d71d220 --- /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 0000000000000000000000000000000000000000..ae2e11bc15427419b79f0144faa34a25a6ed1885 --- /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 0000000000000000000000000000000000000000..0d315e9f845892812a215509c76195a997411e06 --- /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 0000000000000000000000000000000000000000..6fe599ef49db52ba06bd12ffe79208161a7d1222 --- /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 0000000000000000000000000000000000000000..27848a5d2180c73140b52e385ce7fe3bf1375777 --- /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 0000000000000000000000000000000000000000..ad4e0e3e09fc9fd42953899859f8abb0855abc5c --- /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 0000000000000000000000000000000000000000..68cf0a5e3b1e77a8426ca64cffa19439927e37de --- /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 0000000000000000000000000000000000000000..a55c71f419c229d981f10c6057926a67865a4f52 --- /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 0000000000000000000000000000000000000000..e1e2c4b5bd488c62e546a4c4771712696cccde88 --- /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 0000000000000000000000000000000000000000..821a20fb676dc0736c27ed9d9be94400f6fec41e --- /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 0000000000000000000000000000000000000000..d8738090b8f834df623455aae11be309cf80764a --- /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 0000000000000000000000000000000000000000..5a73890a228a645ee118201c845229287f56f580 --- /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 0000000000000000000000000000000000000000..c35cec03f844831f54dd968deefe0e01ec230bf0 --- /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 0000000000000000000000000000000000000000..a7b6a458bf13365295a60dae3b1af5f44a201dc6 --- /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 0000000000000000000000000000000000000000..516004ff5512de84f6b88bb18d9d2643fb3968ee --- /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 0000000000000000000000000000000000000000..14a4fd4a1bf8826d7ebf0b4a15788f29fb3f08f3 --- /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 0000000000000000000000000000000000000000..5e9882d4fca2511feb03dadad921d0c1fe7cc65c --- /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 0000000000000000000000000000000000000000..99fe5b8d01af26e7803ac0cb909d44bd94ad25a4 --- /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 0000000000000000000000000000000000000000..0f73ae8d3bf7a8ee788a32c8382b0512dcde96f0 --- /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 0000000000000000000000000000000000000000..8fdded4b81343b0f9fd267523248e52fc01d7c0d --- /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 0000000000000000000000000000000000000000..d0e8332cfb5d088a81dbcfaa60794cb443d154a3 --- /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 0000000000000000000000000000000000000000..f2e249d19f8a32563cd52a3e588472cd07f8475b --- /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 0000000000000000000000000000000000000000..e1d6d41a2137873174ff6ca1c92100513a051029 --- /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 0000000000000000000000000000000000000000..db9b5d6729108aba2a025c90c7b7b1e9c3c1348f --- /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 0000000000000000000000000000000000000000..c55792fe82d812118f1ed3a2bc7dfd40b5352a73 --- /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 0000000000000000000000000000000000000000..e23371458cb7aea235ab98ba97db311160bef76e --- /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 0000000000000000000000000000000000000000..2507aacf2e52f305171acc9251d3424746d3ab62 --- /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 0000000000000000000000000000000000000000..59fea21bbae545b4f4f4f36126a81d9d4b8e7bb2 --- /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 0000000000000000000000000000000000000000..18ac0ed2265ede7c7b41da2a906d21c050883607 --- /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 0000000000000000000000000000000000000000..776263cf705c646a700839302340db47b177bd36 --- /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 0000000000000000000000000000000000000000..ae434e28b553f480d86c4ab56f2d5e58e7716f99 --- /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 0000000000000000000000000000000000000000..5c4fbca5a9c606bdab0561d1d31bde734d620ba1 --- /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 0000000000000000000000000000000000000000..58bc54c5cac0a15fa911354749a6a7d8b3c66969 --- /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 0000000000000000000000000000000000000000..1e088ef05440e6189a05f38c1996c695305cbc31 --- /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 0000000000000000000000000000000000000000..a3de250f7608cb4afa0ea1c2e7daed17aea834d7 --- /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 0000000000000000000000000000000000000000..aa1b361ddf6130ed6a3d97f8e430ca04351dcd17 --- /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 0000000000000000000000000000000000000000..eeb3ed77de48e9f740b689bb638a4bd8792d25c1 --- /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 0000000000000000000000000000000000000000..d1238479ba33504e2f0b15eda1be0c90b8a0c7e6 --- /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 0000000000000000000000000000000000000000..a4838d7d0e3a9aad21544f7b1011ac0af970a2a0 --- /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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/releasenotes/source/_templates/.placeholder b/releasenotes/source/_templates/.placeholder new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/releasenotes/source/conf.py b/releasenotes/source/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..ac4be8e194a37f33542052167c98ea5cfda885cd --- /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 0000000000000000000000000000000000000000..cf39fb80b962fe263c0548e78a1a51090ed26cb0 --- /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 0000000000000000000000000000000000000000..ebe62f42e1793ff713b1eca98e4453306b911cdd --- /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 0000000000000000000000000000000000000000..e43bfc0ce198dc0834a2835faa9338009de1542a --- /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 0000000000000000000000000000000000000000..36ac6160ca81bedfe9915584172a5596b147a5e6 --- /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 0000000000000000000000000000000000000000..40dd517b756831137a4e891032188997c495d9b2 --- /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 0000000000000000000000000000000000000000..efaceb667be6ab4353004858217b8904ef83af36 --- /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 0000000000000000000000000000000000000000..583900393c4a944f8399de94f5f6cbcaa51124d8 --- /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 0000000000000000000000000000000000000000..875030f9d0c2861c5d462afec734f496a485fc4f --- /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 0000000000000000000000000000000000000000..e21e50e0c616efa6319759a8533eb042b20e7bca --- /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 0000000000000000000000000000000000000000..4efc7b6f3b1117aae27fed2a9a8a9f7cadc7af8b --- /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 0000000000000000000000000000000000000000..d77b56599553b6fe996624b33c1663168342fb94 --- /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 0000000000000000000000000000000000000000..1be85be3ebf18741d311aa41096d417a99c970bf --- /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 0000000000000000000000000000000000000000..43cafdea8947690e39e3708bf01380931c20e2ef --- /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 0000000000000000000000000000000000000000..9608c05e45dc29fa7bd8c04c7dbb4cca6674d258 --- /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 0000000000000000000000000000000000000000..ad1c7e95a62fae322c86b62a9e25b4bfb8ce2fde --- /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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/roles/deploy-clouds-config/defaults/main.yaml b/roles/deploy-clouds-config/defaults/main.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9739eb171c593274c38958e0468c43f9dc50c6ce --- /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 0000000000000000000000000000000000000000..f10533bdabdb9278345c8e0a2859056e3a7da63c --- /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 0000000000000000000000000000000000000000..267d900659992cb92ffd93f2229168d435a561d6 --- /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 0000000000000000000000000000000000000000..f1a3521871aad31ef29f62b70b58d06fc9c3e930 --- /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 0000000000000000000000000000000000000000..83c92e22c850b3ea5def9fba8246f000d946c9f5 --- /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 0000000000000000000000000000000000000000..b771e0ca3e5ecd9c353608b69d112c24a7687e8b --- /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 0000000000000000000000000000000000000000..8ca504eb1e07ca1afdbcbe80fbf24f0302ed3ba2 --- /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 0000000000000000000000000000000000000000..ad8ea0cbce3ba148269903d2134d1dd6624cb797 --- /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 0000000000000000000000000000000000000000..6b9c95b8e552600d78fd45e36f166b11a7ea9b9c --- /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 0000000000000000000000000000000000000000..693535a1c81747fab2f414c1e47b59699d81e38e --- /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 0000000000000000000000000000000000000000..3a94fdc920e66bf0669d44978d48a7d5f9b43c85 --- /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 0000000000000000000000000000000000000000..b0933a8f989ffa08a1d789fbeda58d31c5a98277 --- /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 0000000000000000000000000000000000000000..a9da32274f6f83902436f23f8aa5d08ed3673796 --- /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 0000000000000000000000000000000000000000..284d200a2a1d2e02c5f778286740f207830ba840 --- /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