From b87ae7dcceff47a31be6e276b4018f85110e4b76 Mon Sep 17 00:00:00 2001
From: Jakob Meng <code@jakobmeng.de>
Date: Wed, 20 Jul 2022 10:12:10 +0200
Subject: [PATCH] Dropped symbolic links and plugin routing for deprecated
 module names

With Ansible OpenStack collection 2.0.0 we break backward
compatibility to older releases, mainly due to breaking changes
coming with openstacksdk >=0.99.0. For example, results will change
for most Ansible modules in this collection.

We take this opportunity to drop the symbolic links with prefix
os_ in plugins/modules and the plugin routing in meta/runtime.yml.
This means users have to call modules of the Ansible OpenStack
collection using their FQCN (Fully Qualified Collection Name) such
as openstack.cloud.server. Short module names such as os_server
will now raise an Ansible error. This also decreases the likelihood
of incompatible Ansible code going undetected.

Symbolic links were introduced to keep our collection backward
compatible to user code which was written for old(er) Ansible releases
which did not have support for collections and where OpenStack modules
where named with a prefix os_ such as os_server which is nowadays
known and stored as openstack.cloud.server.

In Ansible aka ansible-base 2.10, a internal routing table
lib/ansible/config/ansible_builtin_runtime.yml [1] was introduced which
Ansible uses to resolve deprecated module names missing the FQCN (Fully
Qualified Collection Name). Additionally, collections can define their
own plugin routing table in meta/runtime.yml [2] which we did.

In ansible-base 2.10 and ansible-core 2.11 or later, if a user uses a
short module name and the collections keyword is not used, Ansible
will first look in the internal routing table, get an FQCN, and then
looks in the collection for that FQCN. If there is another routing
entry for that new name in that collection's meta/runtime.yml,
Ansible will continue with that redirect. If it does not find another
redirect, Ansible will look for the plugin itself, so it will not
find a redirect in the collection before looking at its internal
redirects. Except if the user uses a FQCN, then it looks directly in
that collection.

Ansible 2.9 and 2.8 do not have any notion of these redirects with a
plugin routing table, backward compatibility with deprecated os_*
module names is solely achieved with symbolic links. Ansible releases
older than 2.11 are EOL [3], so usage of os_* symlinks should reduce
soon.

[1] https://github.com/ansible/ansible/blob/devel/lib/ansible/config/ansible_builtin_runtime.yml
[2] https://github.com/openstack/ansible-collections-openstack/blob/master/meta/runtime.yml
[3] https://docs.ansible.com/ansible/devel/reference_appendices/release_and_maintenance.html

Change-Id: I28cc05c95419b72552899c926721eb87fb6f0868
---
 meta/runtime.yml                              | 540 +-----------------
 plugins/module_utils/openstack.py             |  31 +-
 plugins/modules/compute_flavor_info.py        |   4 -
 plugins/modules/container.py                  |   1 -
 plugins/modules/identity_domain_info.py       |   4 -
 plugins/modules/identity_user_info.py         |   4 -
 plugins/modules/image.py                      |   2 -
 plugins/modules/image_info.py                 |   4 -
 plugins/modules/keypair.py                    |   1 -
 plugins/modules/networks_info.py              |   5 -
 plugins/modules/os_auth.py                    |   1 -
 plugins/modules/os_client_config.py           |   1 -
 plugins/modules/os_coe_cluster.py             |   1 -
 plugins/modules/os_coe_cluster_template.py    |   1 -
 plugins/modules/os_flavor_info.py             |   1 -
 plugins/modules/os_floating_ip.py             |   1 -
 plugins/modules/os_group.py                   |   1 -
 plugins/modules/os_group_info.py              |   1 -
 plugins/modules/os_image.py                   |   1 -
 plugins/modules/os_image_info.py              |   1 -
 plugins/modules/os_ironic.py                  |   1 -
 plugins/modules/os_ironic_inspect.py          |   1 -
 plugins/modules/os_ironic_node.py             |   1 -
 plugins/modules/os_keypair.py                 |   1 -
 plugins/modules/os_keystone_domain.py         |   1 -
 plugins/modules/os_keystone_domain_info.py    |   1 -
 plugins/modules/os_keystone_endpoint.py       |   1 -
 .../os_keystone_federation_protocol.py        |   1 -
 .../os_keystone_federation_protocol_info.py   |   1 -
 .../modules/os_keystone_identity_provider.py  |   1 -
 .../os_keystone_identity_provider_info.py     |   1 -
 plugins/modules/os_keystone_mapping.py        |   1 -
 plugins/modules/os_keystone_mapping_info.py   |   1 -
 plugins/modules/os_keystone_role.py           |   1 -
 plugins/modules/os_keystone_service.py        |   1 -
 plugins/modules/os_listener.py                |   1 -
 plugins/modules/os_loadbalancer.py            |   1 -
 plugins/modules/os_member.py                  |   1 -
 plugins/modules/os_network.py                 |   1 -
 plugins/modules/os_networks_info.py           |   1 -
 plugins/modules/os_nova_flavor.py             |   1 -
 plugins/modules/os_nova_host_aggregate.py     |   1 -
 plugins/modules/os_object.py                  |   1 -
 plugins/modules/os_pool.py                    |   1 -
 plugins/modules/os_port.py                    |   1 -
 plugins/modules/os_port_info.py               |   1 -
 plugins/modules/os_project.py                 |   1 -
 plugins/modules/os_project_access.py          |   1 -
 plugins/modules/os_project_info.py            |   1 -
 plugins/modules/os_quota.py                   |   1 -
 plugins/modules/os_recordset.py               |   1 -
 plugins/modules/os_router.py                  |   1 -
 plugins/modules/os_routers_info.py            |   1 -
 plugins/modules/os_security_group.py          |   1 -
 plugins/modules/os_security_group_rule.py     |   1 -
 plugins/modules/os_server.py                  |   1 -
 plugins/modules/os_server_action.py           |   1 -
 plugins/modules/os_server_group.py            |   1 -
 plugins/modules/os_server_info.py             |   1 -
 plugins/modules/os_server_metadata.py         |   1 -
 plugins/modules/os_server_volume.py           |   1 -
 plugins/modules/os_stack.py                   |   1 -
 plugins/modules/os_subnet.py                  |   1 -
 plugins/modules/os_subnets_info.py            |   1 -
 plugins/modules/os_user.py                    |   1 -
 plugins/modules/os_user_group.py              |   1 -
 plugins/modules/os_user_info.py               |   1 -
 plugins/modules/os_user_role.py               |   1 -
 plugins/modules/os_volume.py                  |   1 -
 plugins/modules/os_volume_snapshot.py         |   1 -
 plugins/modules/os_zone.py                    |   1 -
 plugins/modules/port_info.py                  |   2 -
 plugins/modules/project_info.py               |   4 -
 plugins/modules/routers_info.py               |   2 -
 plugins/modules/security_group_rule.py        |   1 -
 plugins/modules/server.py                     |   1 -
 plugins/modules/server_action.py              |   2 -
 plugins/modules/server_info.py                |   4 -
 plugins/modules/subnets_info.py               |   5 -
 tools/groups-to-routing.py                    | 128 -----
 80 files changed, 8 insertions(+), 798 deletions(-)
 delete mode 120000 plugins/modules/container.py
 delete mode 120000 plugins/modules/os_auth.py
 delete mode 120000 plugins/modules/os_client_config.py
 delete mode 120000 plugins/modules/os_coe_cluster.py
 delete mode 120000 plugins/modules/os_coe_cluster_template.py
 delete mode 120000 plugins/modules/os_flavor_info.py
 delete mode 120000 plugins/modules/os_floating_ip.py
 delete mode 120000 plugins/modules/os_group.py
 delete mode 120000 plugins/modules/os_group_info.py
 delete mode 120000 plugins/modules/os_image.py
 delete mode 120000 plugins/modules/os_image_info.py
 delete mode 120000 plugins/modules/os_ironic.py
 delete mode 120000 plugins/modules/os_ironic_inspect.py
 delete mode 120000 plugins/modules/os_ironic_node.py
 delete mode 120000 plugins/modules/os_keypair.py
 delete mode 120000 plugins/modules/os_keystone_domain.py
 delete mode 120000 plugins/modules/os_keystone_domain_info.py
 delete mode 120000 plugins/modules/os_keystone_endpoint.py
 delete mode 120000 plugins/modules/os_keystone_federation_protocol.py
 delete mode 120000 plugins/modules/os_keystone_federation_protocol_info.py
 delete mode 120000 plugins/modules/os_keystone_identity_provider.py
 delete mode 120000 plugins/modules/os_keystone_identity_provider_info.py
 delete mode 120000 plugins/modules/os_keystone_mapping.py
 delete mode 120000 plugins/modules/os_keystone_mapping_info.py
 delete mode 120000 plugins/modules/os_keystone_role.py
 delete mode 120000 plugins/modules/os_keystone_service.py
 delete mode 120000 plugins/modules/os_listener.py
 delete mode 120000 plugins/modules/os_loadbalancer.py
 delete mode 120000 plugins/modules/os_member.py
 delete mode 120000 plugins/modules/os_network.py
 delete mode 120000 plugins/modules/os_networks_info.py
 delete mode 120000 plugins/modules/os_nova_flavor.py
 delete mode 120000 plugins/modules/os_nova_host_aggregate.py
 delete mode 120000 plugins/modules/os_object.py
 delete mode 120000 plugins/modules/os_pool.py
 delete mode 120000 plugins/modules/os_port.py
 delete mode 120000 plugins/modules/os_port_info.py
 delete mode 120000 plugins/modules/os_project.py
 delete mode 120000 plugins/modules/os_project_access.py
 delete mode 120000 plugins/modules/os_project_info.py
 delete mode 120000 plugins/modules/os_quota.py
 delete mode 120000 plugins/modules/os_recordset.py
 delete mode 120000 plugins/modules/os_router.py
 delete mode 120000 plugins/modules/os_routers_info.py
 delete mode 120000 plugins/modules/os_security_group.py
 delete mode 120000 plugins/modules/os_security_group_rule.py
 delete mode 120000 plugins/modules/os_server.py
 delete mode 120000 plugins/modules/os_server_action.py
 delete mode 120000 plugins/modules/os_server_group.py
 delete mode 120000 plugins/modules/os_server_info.py
 delete mode 120000 plugins/modules/os_server_metadata.py
 delete mode 120000 plugins/modules/os_server_volume.py
 delete mode 120000 plugins/modules/os_stack.py
 delete mode 120000 plugins/modules/os_subnet.py
 delete mode 120000 plugins/modules/os_subnets_info.py
 delete mode 120000 plugins/modules/os_user.py
 delete mode 120000 plugins/modules/os_user_group.py
 delete mode 120000 plugins/modules/os_user_info.py
 delete mode 120000 plugins/modules/os_user_role.py
 delete mode 120000 plugins/modules/os_volume.py
 delete mode 120000 plugins/modules/os_volume_snapshot.py
 delete mode 120000 plugins/modules/os_zone.py
 delete mode 100644 tools/groups-to-routing.py

diff --git a/meta/runtime.yml b/meta/runtime.yml
index 29e358e..b01d929 100644
--- a/meta/runtime.yml
+++ b/meta/runtime.yml
@@ -4,75 +4,52 @@ action_groups:
     - address_scope
     - auth
     - baremetal_inspect
-    - baremetal_inspect
-    - baremetal_node
     - baremetal_node
     - baremetal_node_action
-    - baremetal_node_action
     - baremetal_node_info
-    - baremetal_port_info
     - baremetal_port
-    - catalog_endpoint
-    - catalog_service
+    - baremetal_port_info
     - catalog_service
     - coe_cluster
     - coe_cluster_template
     - compute_flavor
-    - compute_flavor
-    - compute_flavor
     - compute_flavor_info
-    - compute_flavor_info
-    - compute_service_info
     - compute_service_info
     - config
-    - config
     - dns_zone
     - dns_zone_info
     - endpoint
-    - endpoint
     - federation_idp
-    - federation_idp
-    - federation_idp_info
     - federation_idp_info
     - federation_mapping
-    - federation_mapping
-    - federation_mapping_info
     - federation_mapping_info
     - floating_ip
     - floating_ip_info
     - group_assignment
-    - group_assignment
-    - host_aggregate
     - host_aggregate
     - identity_domain
-    - identity_domain
-    - identity_domain_info
     - identity_domain_info
     - identity_group
-    - identity_group
-    - identity_group_info
     - identity_group_info
     - identity_role
-    - identity_role
-    - identity_user
+    - identity_role_info
     - identity_user
     - identity_user_info
-    - identity_user_info
     - image
     - image_info
     - keypair
     - keypair_info
     - keystone_federation_protocol
     - keystone_federation_protocol_info
-    - lb_listener
+    - lb_health_monitor
     - lb_listener
     - lb_member
-    - lb_member
-    - lb_pool
     - lb_pool
     - loadbalancer
     - network
     - networks_info
+    - neutron_rbac_policies_info
+    - neutron_rbac_policy
     - object
     - object_container
     - port
@@ -83,7 +60,6 @@ action_groups:
     - quota
     - recordset
     - role_assignment
-    - role_assignment
     - router
     - routers_info
     - security_group
@@ -97,106 +73,9 @@ action_groups:
     - server_metadata
     - server_volume
     - stack
+    - stack_info
     - subnet
-    - subnets_info
     - subnet_pool
-    - volume
-    - volume_backup
-    - volume_backup_info
-    - volume_info
-    - volume_snapshot
-    - volume_snapshot_info
-  os:
-    - auth
-    - baremetal_inspect
-    - baremetal_inspect
-    - baremetal_node
-    - baremetal_node
-    - baremetal_node_action
-    - baremetal_node_action
-    - catalog_endpoint
-    - catalog_service
-    - catalog_service
-    - coe_cluster
-    - coe_cluster_template
-    - compute_flavor
-    - compute_flavor
-    - compute_flavor
-    - compute_flavor_info
-    - compute_flavor_info
-    - config
-    - config
-    - dns_zone
-    - dns_zone
-    - endpoint
-    - endpoint
-    - federation_idp
-    - federation_idp
-    - federation_idp_info
-    - federation_idp_info
-    - federation_mapping
-    - federation_mapping
-    - federation_mapping_info
-    - federation_mapping_info
-    - floating_ip
-    - group_assignment
-    - group_assignment
-    - host_aggregate
-    - host_aggregate
-    - identity_domain
-    - identity_domain
-    - identity_domain_info
-    - identity_domain_info
-    - identity_group
-    - identity_group
-    - identity_group_info
-    - identity_group_info
-    - identity_role
-    - identity_role
-    - identity_user
-    - identity_user
-    - identity_user_info
-    - identity_user_info
-    - image
-    - image_info
-    - keypair
-    - keypair_info
-    - keystone_federation_protocol
-    - keystone_federation_protocol_info
-    - lb_listener
-    - lb_listener
-    - lb_member
-    - lb_member
-    - lb_pool
-    - lb_pool
-    - loadbalancer
-    - network
-    - networks_info
-    - object
-    - object_container
-    - port
-    - port_info
-    - project
-    - project_access
-    - project_info
-    - quota
-    - recordset
-    - role_assignment
-    - role_assignment
-    - router
-    - routers_info
-    - security_group
-    - security_group_info
-    - security_group_rule
-    - security_group_rule_info
-    - server
-    - server_action
-    - server_group
-    - server_info
-    - server_metadata
-    - server_volume
-    - stack
-    - subnet
     - subnets_info
     - volume
     - volume_backup
@@ -204,410 +83,3 @@ action_groups:
     - volume_info
     - volume_snapshot
     - volume_snapshot_info
-    - os_auth
-    - os_client_config
-    - os_client_config
-    - os_coe_cluster
-    - os_coe_cluster_template
-    - os_endpoint
-    - os_flavor
-    - os_flavor_info
-    - os_flavor_info
-    - os_floating_ip
-    - os_group
-    - os_group
-    - os_group_info
-    - os_group_info
-    - os_image
-    - os_image_info
-    - os_ironic
-    - os_ironic
-    - os_ironic_inspect
-    - os_ironic_inspect
-    - os_ironic_node
-    - os_ironic_node
-    - os_keypair
-    - os_keystone_domain
-    - os_keystone_domain
-    - os_keystone_domain_info
-    - os_keystone_domain_info
-    - os_keystone_endpoint
-    - os_keystone_endpoint
-    - os_keystone_federation_protocol
-    - os_keystone_federation_protocol_info
-    - os_keystone_identity_provider
-    - os_keystone_identity_provider
-    - os_keystone_identity_provider_info
-    - os_keystone_identity_provider_info
-    - os_keystone_mapping
-    - os_keystone_mapping
-    - os_keystone_mapping_info
-    - os_keystone_mapping_info
-    - os_keystone_role
-    - os_keystone_role
-    - os_keystone_service
-    - os_keystone_service
-    - os_listener
-    - os_listener
-    - os_loadbalancer
-    - os_member
-    - os_member
-    - os_network
-    - os_networks_info
-    - os_nova_flavor
-    - os_nova_flavor
-    - os_nova_host_aggregate
-    - os_nova_host_aggregate
-    - os_object
-    - os_pool
-    - os_pool
-    - os_port
-    - os_port_info
-    - os_project
-    - os_project_access
-    - os_project_info
-    - os_quota
-    - os_recordset
-    - os_router
-    - os_routers_info
-    - os_security_group
-    - os_security_group_rule
-    - os_server
-    - os_server_action
-    - os_server_group
-    - os_server_info
-    - os_server_metadata
-    - os_server_volume
-    - os_stack
-    - os_subnet
-    - os_subnets_info
-    - os_user
-    - os_user
-    - os_user_group
-    - os_user_group
-    - os_user_info
-    - os_user_info
-    - os_user_role
-    - os_user_role
-    - os_volume
-    - os_volume_snapshot
-    - os_zone
-    - os_zone
-
-plugin_routing:
-  modules:
-    os_auth:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.auth
-      redirect: openstack.cloud.auth
-    os_client_config:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.config
-      redirect: openstack.cloud.config
-    os_coe_cluster:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.coe_cluster
-      redirect: openstack.cloud.coe_cluster
-    os_coe_cluster_template:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.coe_cluster_template
-      redirect: openstack.cloud.coe_cluster_template
-    os_endpoint:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.catalog_endpoint
-      redirect: openstack.cloud.catalog_endpoint
-    os_flavor:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.compute_flavor
-      redirect: openstack.cloud.compute_flavor
-    os_flavor_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.compute_flavor_info
-      redirect: openstack.cloud.compute_flavor_info
-    os_floating_ip:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.floating_ip
-      redirect: openstack.cloud.floating_ip
-    os_group:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_group
-      redirect: openstack.cloud.identity_group
-    os_group_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_group_info
-      redirect: openstack.cloud.identity_group_info
-    os_image:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.image
-      redirect: openstack.cloud.image
-    os_image_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.image_info
-      redirect: openstack.cloud.image_info
-    os_ironic:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.baremetal_node
-      redirect: openstack.cloud.baremetal_node
-    os_ironic_inspect:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.baremetal_inspect
-      redirect: openstack.cloud.baremetal_inspect
-    os_ironic_node:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.baremetal_node_action
-      redirect: openstack.cloud.baremetal_node_action
-    os_keypair:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.keypair
-      redirect: openstack.cloud.keypair
-    os_keystone_domain:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_domain
-      redirect: openstack.cloud.identity_domain
-    os_keystone_domain_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_domain_info
-      redirect: openstack.cloud.identity_domain_info
-    os_keystone_endpoint:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.endpoint
-      redirect: openstack.cloud.endpoint
-    os_keystone_federation_protocol:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.keystone_federation_protocol
-      redirect: openstack.cloud.keystone_federation_protocol
-    os_keystone_federation_protocol_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.keystone_federation_protocol_info
-      redirect: openstack.cloud.keystone_federation_protocol_info
-    os_keystone_identity_provider:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.federation_idp
-      redirect: openstack.cloud.federation_idp
-    os_keystone_identity_provider_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.federation_idp_info
-      redirect: openstack.cloud.federation_idp_info
-    os_keystone_mapping:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.federation_mapping
-      redirect: openstack.cloud.federation_mapping
-    os_keystone_mapping_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.federation_mapping_info
-      redirect: openstack.cloud.federation_mapping_info
-    os_keystone_role:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_role
-      redirect: openstack.cloud.identity_role
-    os_keystone_service:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.catalog_service
-      redirect: openstack.cloud.catalog_service
-    os_listener:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.lb_listener
-      redirect: openstack.cloud.lb_listener
-    os_loadbalancer:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.loadbalancer
-      redirect: openstack.cloud.loadbalancer
-    os_member:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.lb_member
-      redirect: openstack.cloud.lb_member
-    os_network:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.network
-      redirect: openstack.cloud.network
-    os_networks_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.networks_info
-      redirect: openstack.cloud.networks_info
-    os_nova_flavor:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.compute_flavor
-      redirect: openstack.cloud.compute_flavor
-    os_nova_host_aggregate:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.host_aggregate
-      redirect: openstack.cloud.host_aggregate
-    os_object:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.object
-      redirect: openstack.cloud.object
-    os_pool:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.lb_pool
-      redirect: openstack.cloud.lb_pool
-    os_port:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.port
-      redirect: openstack.cloud.port
-    os_port_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.port_info
-      redirect: openstack.cloud.port_info
-    os_project:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.project
-      redirect: openstack.cloud.project
-    os_project_access:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.project_access
-      redirect: openstack.cloud.project_access
-    os_project_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.project_info
-      redirect: openstack.cloud.project_info
-    os_quota:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.quota
-      redirect: openstack.cloud.quota
-    os_recordset:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.recordset
-      redirect: openstack.cloud.recordset
-    os_router:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.router
-      redirect: openstack.cloud.router
-    os_routers_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.routers_info
-      redirect: openstack.cloud.routers_info
-    os_security_group:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.security_group
-      redirect: openstack.cloud.security_group
-    os_security_group_rule:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.security_group_rule
-      redirect: openstack.cloud.security_group_rule
-    os_server:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server
-      redirect: openstack.cloud.server
-    os_server_action:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_action
-      redirect: openstack.cloud.server_action
-    os_server_group:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_group
-      redirect: openstack.cloud.server_group
-    os_server_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_info
-      redirect: openstack.cloud.server_info
-    os_server_metadata:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_metadata
-      redirect: openstack.cloud.server_metadata
-    os_server_volume:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_volume
-      redirect: openstack.cloud.server_volume
-    os_stack:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.stack
-      redirect: openstack.cloud.stack
-    os_subnet:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.subnet
-      redirect: openstack.cloud.subnet
-    os_subnets_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.subnets_info
-      redirect: openstack.cloud.subnets_info
-    os_user:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_user
-      redirect: openstack.cloud.identity_user
-    os_user_group:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.group_assignment
-      redirect: openstack.cloud.group_assignment
-    os_user_info:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_user_info
-      redirect: openstack.cloud.identity_user_info
-    os_user_role:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.role_assignment
-      redirect: openstack.cloud.role_assignment
-    os_volume:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.volume
-      redirect: openstack.cloud.volume
-    os_volume_snapshot:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.volume_snapshot
-      redirect: openstack.cloud.volume_snapshot
-    os_zone:
-      deprecation:
-        removal_date: 2021-12-12
-        warning_text: os_ prefixed module names are deprecated, use openstack.cloud.dns_zone
-      redirect: openstack.cloud.dns_zone
diff --git a/plugins/module_utils/openstack.py b/plugins/module_utils/openstack.py
index 21acf30..329405f 100644
--- a/plugins/module_utils/openstack.py
+++ b/plugins/module_utils/openstack.py
@@ -36,34 +36,7 @@ import os
 from ansible.module_utils.basic import AnsibleModule
 from ansible.module_utils.six import iteritems
 
-OVERRIDES = {'os_client_config': 'config',
-             'os_endpoint': 'catalog_endpoint',
-             'os_flavor': 'compute_flavor',
-             'os_flavor_info': 'compute_flavor_info',
-             'os_group': 'identity_group',
-             'os_group_info': 'identity_group_info',
-             'os_ironic': 'baremetal_node',
-             'os_ironic_inspect': 'baremetal_inspect',
-             'os_ironic_node': 'baremetal_node_action',
-             'os_keystone_domain': 'identity_domain',
-             'os_keystone_domain_info': 'identity_domain_info',
-             'os_keystone_endpoint': 'endpoint',
-             'os_keystone_identity_provider': 'federation_idp',
-             'os_keystone_identity_provider_info': 'federation_idp_info',
-             'os_keystone_mapping': 'federation_mapping',
-             'os_keystone_mapping_info': 'federation_mapping_info',
-             'os_keystone_role': 'identity_role',
-             'os_keystone_service': 'catalog_service',
-             'os_listener': 'lb_listener',
-             'os_member': 'lb_member',
-             'os_nova_flavor': 'compute_flavor',
-             'os_nova_host_aggregate': 'host_aggregate',
-             'os_pool': 'lb_pool',
-             'os_user': 'identity_user',
-             'os_user_group': 'group_assignment',
-             'os_user_info': 'identity_user_info',
-             'os_user_role': 'role_assignment',
-             'os_zone': 'dns_zone'}
+OVERRIDES = {}
 
 CUSTOM_VAR_PARAMS = ['min_ver', 'max_ver']
 
@@ -320,7 +293,7 @@ class OpenStackModule:
                 "The '%s' module has been renamed to '%s' in openstack "
                 "collection: openstack.cloud.%s" % (
                     self.module_name, new_module_name, new_module_name),
-                version='2.0.0', collection_name='openstack.cloud')
+                version='3.0.0', collection_name='openstack.cloud')
 
     def openstack_cloud_from_module(self):
         """Sets up connection to cloud using provided options. Checks if all
diff --git a/plugins/modules/compute_flavor_info.py b/plugins/modules/compute_flavor_info.py
index facaf58..05644ed 100644
--- a/plugins/modules/compute_flavor_info.py
+++ b/plugins/modules/compute_flavor_info.py
@@ -16,8 +16,6 @@ description:
       available to the flavor, or both. When specifying multiple filters,
       *ALL* filters must match on a flavor before that flavor is returned as
       a fact.
-    - This module was called C(openstack.cloud.compute_flavor_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.compute_flavor_info) module no longer returns C(ansible_facts)!
 notes:
     - The result contains a list of unsorted flavors.
 options:
@@ -206,8 +204,6 @@ class ComputeFlavorInfoModule(OpenStackModule):
         supports_check_mode=True
     )
 
-    deprecated_names = ('openstack.cloud.compute_flavor_facts')
-
     def run(self):
         name = self.params['name']
         vcpus = self.params['vcpus']
diff --git a/plugins/modules/container.py b/plugins/modules/container.py
deleted file mode 120000
index 0f5a250..0000000
--- a/plugins/modules/container.py
+++ /dev/null
@@ -1 +0,0 @@
-object_container.py
\ No newline at end of file
diff --git a/plugins/modules/identity_domain_info.py b/plugins/modules/identity_domain_info.py
index 4073c8d..c9f43d2 100644
--- a/plugins/modules/identity_domain_info.py
+++ b/plugins/modules/identity_domain_info.py
@@ -9,8 +9,6 @@ short_description: Retrieve information about one or more OpenStack domains
 author: OpenStack Ansible SIG
 description:
     - Retrieve information about a one or more OpenStack domains
-    - This module was called C(openstack.cloud.identity_domain_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.identity_domain_info) module no longer returns C(ansible_facts)!
 options:
    name:
      description:
@@ -99,8 +97,6 @@ class IdentityDomainInfoModule(OpenStackModule):
         supports_check_mode=True
     )
 
-    deprecated_names = ('openstack.cloud.identity_domain_facts')
-
     def run(self):
         name = self.params['name']
         filters = self.params['filters'] or {}
diff --git a/plugins/modules/identity_user_info.py b/plugins/modules/identity_user_info.py
index c3487b4..7fa03a8 100644
--- a/plugins/modules/identity_user_info.py
+++ b/plugins/modules/identity_user_info.py
@@ -9,8 +9,6 @@ short_description: Retrieve information about one or more OpenStack users
 author: OpenStack Ansible SIG
 description:
     - Retrieve information about a one or more OpenStack users
-    - This module was called C(openstack.cloud.identity_user_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.identity_user_info) module no longer returns C(ansible_facts)!
 options:
    name:
      description:
@@ -143,8 +141,6 @@ class IdentityUserInfoModule(OpenStackModule):
         supports_check_mode=True
     )
 
-    deprecated_names = ('openstack.cloud.identity_user_facts')
-
     def run(self):
         name = self.params['name']
         domain = self.params['domain']
diff --git a/plugins/modules/image.py b/plugins/modules/image.py
index 94f273a..8e0daf0 100644
--- a/plugins/modules/image.py
+++ b/plugins/modules/image.py
@@ -447,8 +447,6 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O
 
 class ImageModule(OpenStackModule):
 
-    deprecated_names = ('os_image', 'openstack.cloud.os_image')
-
     argument_spec = dict(
         name=dict(required=True, type='str'),
         id=dict(type='str'),
diff --git a/plugins/modules/image_info.py b/plugins/modules/image_info.py
index 1039e2f..8fdf906 100644
--- a/plugins/modules/image_info.py
+++ b/plugins/modules/image_info.py
@@ -10,8 +10,6 @@ short_description: Retrieve information about an image within OpenStack.
 author: OpenStack Ansible SIG
 description:
     - Retrieve information about a image image from OpenStack.
-    - This module was called C(openstack.cloud.image_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.image_info) module no longer returns C(ansible_facts)!
 options:
    image:
      description:
@@ -376,8 +374,6 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O
 
 class ImageInfoModule(OpenStackModule):
 
-    deprecated_names = ('openstack.cloud.os_image_facts', 'openstack.cloud.os_image_info')
-
     argument_spec = dict(
         image=dict(type='str', required=False),
         filters=dict(type='dict', required=False, aliases=['properties']),
diff --git a/plugins/modules/keypair.py b/plugins/modules/keypair.py
index df6bb5d..04763ea 100644
--- a/plugins/modules/keypair.py
+++ b/plugins/modules/keypair.py
@@ -84,7 +84,6 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import (
 
 
 class KeyPairModule(OpenStackModule):
-    deprecated_names = ('os_keypair', 'openstack.cloud.os_keypair')
 
     argument_spec = dict(
         name=dict(required=True),
diff --git a/plugins/modules/networks_info.py b/plugins/modules/networks_info.py
index 669fcdc..88dca30 100644
--- a/plugins/modules/networks_info.py
+++ b/plugins/modules/networks_info.py
@@ -10,8 +10,6 @@ short_description: Retrieve information about one or more OpenStack networks.
 author: OpenStack Ansible SIG
 description:
     - Retrieve information about one or more networks from OpenStack.
-    - This module was called C(openstack.cloud.networks_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.networks_info) module no longer returns C(ansible_facts)!
 options:
    name:
      description:
@@ -174,9 +172,6 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O
 
 
 class NetworkInfoModule(OpenStackModule):
-
-    deprecated_names = ('networks_facts', 'openstack.cloud.networks_facts')
-
     argument_spec = dict(
         name=dict(required=False, default=None),
         filters=dict(required=False, type='dict', default=None)
diff --git a/plugins/modules/os_auth.py b/plugins/modules/os_auth.py
deleted file mode 120000
index 064c1cb..0000000
--- a/plugins/modules/os_auth.py
+++ /dev/null
@@ -1 +0,0 @@
-auth.py
\ No newline at end of file
diff --git a/plugins/modules/os_client_config.py b/plugins/modules/os_client_config.py
deleted file mode 120000
index f85c6b1..0000000
--- a/plugins/modules/os_client_config.py
+++ /dev/null
@@ -1 +0,0 @@
-config.py
\ No newline at end of file
diff --git a/plugins/modules/os_coe_cluster.py b/plugins/modules/os_coe_cluster.py
deleted file mode 120000
index 16eab8a..0000000
--- a/plugins/modules/os_coe_cluster.py
+++ /dev/null
@@ -1 +0,0 @@
-coe_cluster.py
\ No newline at end of file
diff --git a/plugins/modules/os_coe_cluster_template.py b/plugins/modules/os_coe_cluster_template.py
deleted file mode 120000
index 2590bbb..0000000
--- a/plugins/modules/os_coe_cluster_template.py
+++ /dev/null
@@ -1 +0,0 @@
-coe_cluster_template.py
\ No newline at end of file
diff --git a/plugins/modules/os_flavor_info.py b/plugins/modules/os_flavor_info.py
deleted file mode 120000
index f61ab4e..0000000
--- a/plugins/modules/os_flavor_info.py
+++ /dev/null
@@ -1 +0,0 @@
-compute_flavor_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_floating_ip.py b/plugins/modules/os_floating_ip.py
deleted file mode 120000
index 42e93cf..0000000
--- a/plugins/modules/os_floating_ip.py
+++ /dev/null
@@ -1 +0,0 @@
-floating_ip.py
\ No newline at end of file
diff --git a/plugins/modules/os_group.py b/plugins/modules/os_group.py
deleted file mode 120000
index fe9ff36..0000000
--- a/plugins/modules/os_group.py
+++ /dev/null
@@ -1 +0,0 @@
-identity_group.py
\ No newline at end of file
diff --git a/plugins/modules/os_group_info.py b/plugins/modules/os_group_info.py
deleted file mode 120000
index b278189..0000000
--- a/plugins/modules/os_group_info.py
+++ /dev/null
@@ -1 +0,0 @@
-identity_group_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_image.py b/plugins/modules/os_image.py
deleted file mode 120000
index f085dce..0000000
--- a/plugins/modules/os_image.py
+++ /dev/null
@@ -1 +0,0 @@
-image.py
\ No newline at end of file
diff --git a/plugins/modules/os_image_info.py b/plugins/modules/os_image_info.py
deleted file mode 120000
index 5ab137a..0000000
--- a/plugins/modules/os_image_info.py
+++ /dev/null
@@ -1 +0,0 @@
-image_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_ironic.py b/plugins/modules/os_ironic.py
deleted file mode 120000
index d6b8b96..0000000
--- a/plugins/modules/os_ironic.py
+++ /dev/null
@@ -1 +0,0 @@
-baremetal_node.py
\ No newline at end of file
diff --git a/plugins/modules/os_ironic_inspect.py b/plugins/modules/os_ironic_inspect.py
deleted file mode 120000
index b8b043a..0000000
--- a/plugins/modules/os_ironic_inspect.py
+++ /dev/null
@@ -1 +0,0 @@
-baremetal_inspect.py
\ No newline at end of file
diff --git a/plugins/modules/os_ironic_node.py b/plugins/modules/os_ironic_node.py
deleted file mode 120000
index 4cfa6e6..0000000
--- a/plugins/modules/os_ironic_node.py
+++ /dev/null
@@ -1 +0,0 @@
-baremetal_node_action.py
\ No newline at end of file
diff --git a/plugins/modules/os_keypair.py b/plugins/modules/os_keypair.py
deleted file mode 120000
index 03083d0..0000000
--- a/plugins/modules/os_keypair.py
+++ /dev/null
@@ -1 +0,0 @@
-keypair.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_domain.py b/plugins/modules/os_keystone_domain.py
deleted file mode 120000
index 74ce157..0000000
--- a/plugins/modules/os_keystone_domain.py
+++ /dev/null
@@ -1 +0,0 @@
-identity_domain.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_domain_info.py b/plugins/modules/os_keystone_domain_info.py
deleted file mode 120000
index 611aef9..0000000
--- a/plugins/modules/os_keystone_domain_info.py
+++ /dev/null
@@ -1 +0,0 @@
-identity_domain_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_endpoint.py b/plugins/modules/os_keystone_endpoint.py
deleted file mode 120000
index 0035462..0000000
--- a/plugins/modules/os_keystone_endpoint.py
+++ /dev/null
@@ -1 +0,0 @@
-endpoint.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_federation_protocol.py b/plugins/modules/os_keystone_federation_protocol.py
deleted file mode 120000
index 25ef7fc..0000000
--- a/plugins/modules/os_keystone_federation_protocol.py
+++ /dev/null
@@ -1 +0,0 @@
-keystone_federation_protocol.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_federation_protocol_info.py b/plugins/modules/os_keystone_federation_protocol_info.py
deleted file mode 120000
index c05e963..0000000
--- a/plugins/modules/os_keystone_federation_protocol_info.py
+++ /dev/null
@@ -1 +0,0 @@
-keystone_federation_protocol_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_identity_provider.py b/plugins/modules/os_keystone_identity_provider.py
deleted file mode 120000
index ec2e838..0000000
--- a/plugins/modules/os_keystone_identity_provider.py
+++ /dev/null
@@ -1 +0,0 @@
-federation_idp.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_identity_provider_info.py b/plugins/modules/os_keystone_identity_provider_info.py
deleted file mode 120000
index c5ac8bc..0000000
--- a/plugins/modules/os_keystone_identity_provider_info.py
+++ /dev/null
@@ -1 +0,0 @@
-federation_idp_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_mapping.py b/plugins/modules/os_keystone_mapping.py
deleted file mode 120000
index a018548..0000000
--- a/plugins/modules/os_keystone_mapping.py
+++ /dev/null
@@ -1 +0,0 @@
-federation_mapping.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_mapping_info.py b/plugins/modules/os_keystone_mapping_info.py
deleted file mode 120000
index bb3223a..0000000
--- a/plugins/modules/os_keystone_mapping_info.py
+++ /dev/null
@@ -1 +0,0 @@
-federation_mapping_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_role.py b/plugins/modules/os_keystone_role.py
deleted file mode 120000
index 077bb64..0000000
--- a/plugins/modules/os_keystone_role.py
+++ /dev/null
@@ -1 +0,0 @@
-identity_role.py
\ No newline at end of file
diff --git a/plugins/modules/os_keystone_service.py b/plugins/modules/os_keystone_service.py
deleted file mode 120000
index 3e11885..0000000
--- a/plugins/modules/os_keystone_service.py
+++ /dev/null
@@ -1 +0,0 @@
-catalog_service.py
\ No newline at end of file
diff --git a/plugins/modules/os_listener.py b/plugins/modules/os_listener.py
deleted file mode 120000
index f784ebf..0000000
--- a/plugins/modules/os_listener.py
+++ /dev/null
@@ -1 +0,0 @@
-lb_listener.py
\ No newline at end of file
diff --git a/plugins/modules/os_loadbalancer.py b/plugins/modules/os_loadbalancer.py
deleted file mode 120000
index df6fc6e..0000000
--- a/plugins/modules/os_loadbalancer.py
+++ /dev/null
@@ -1 +0,0 @@
-loadbalancer.py
\ No newline at end of file
diff --git a/plugins/modules/os_member.py b/plugins/modules/os_member.py
deleted file mode 120000
index e39e0e6..0000000
--- a/plugins/modules/os_member.py
+++ /dev/null
@@ -1 +0,0 @@
-lb_member.py
\ No newline at end of file
diff --git a/plugins/modules/os_network.py b/plugins/modules/os_network.py
deleted file mode 120000
index 7a739ba..0000000
--- a/plugins/modules/os_network.py
+++ /dev/null
@@ -1 +0,0 @@
-network.py
\ No newline at end of file
diff --git a/plugins/modules/os_networks_info.py b/plugins/modules/os_networks_info.py
deleted file mode 120000
index 855d0e8..0000000
--- a/plugins/modules/os_networks_info.py
+++ /dev/null
@@ -1 +0,0 @@
-networks_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_nova_flavor.py b/plugins/modules/os_nova_flavor.py
deleted file mode 120000
index b2bb871..0000000
--- a/plugins/modules/os_nova_flavor.py
+++ /dev/null
@@ -1 +0,0 @@
-compute_flavor.py
\ No newline at end of file
diff --git a/plugins/modules/os_nova_host_aggregate.py b/plugins/modules/os_nova_host_aggregate.py
deleted file mode 120000
index c5656c9..0000000
--- a/plugins/modules/os_nova_host_aggregate.py
+++ /dev/null
@@ -1 +0,0 @@
-host_aggregate.py
\ No newline at end of file
diff --git a/plugins/modules/os_object.py b/plugins/modules/os_object.py
deleted file mode 120000
index e2c18bb..0000000
--- a/plugins/modules/os_object.py
+++ /dev/null
@@ -1 +0,0 @@
-object.py
\ No newline at end of file
diff --git a/plugins/modules/os_pool.py b/plugins/modules/os_pool.py
deleted file mode 120000
index e9caa19..0000000
--- a/plugins/modules/os_pool.py
+++ /dev/null
@@ -1 +0,0 @@
-lb_pool.py
\ No newline at end of file
diff --git a/plugins/modules/os_port.py b/plugins/modules/os_port.py
deleted file mode 120000
index 99c1f7f..0000000
--- a/plugins/modules/os_port.py
+++ /dev/null
@@ -1 +0,0 @@
-port.py
\ No newline at end of file
diff --git a/plugins/modules/os_port_info.py b/plugins/modules/os_port_info.py
deleted file mode 120000
index 2445b19..0000000
--- a/plugins/modules/os_port_info.py
+++ /dev/null
@@ -1 +0,0 @@
-port_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_project.py b/plugins/modules/os_project.py
deleted file mode 120000
index 41d1fa3..0000000
--- a/plugins/modules/os_project.py
+++ /dev/null
@@ -1 +0,0 @@
-project.py
\ No newline at end of file
diff --git a/plugins/modules/os_project_access.py b/plugins/modules/os_project_access.py
deleted file mode 120000
index 9de9e14..0000000
--- a/plugins/modules/os_project_access.py
+++ /dev/null
@@ -1 +0,0 @@
-project_access.py
\ No newline at end of file
diff --git a/plugins/modules/os_project_info.py b/plugins/modules/os_project_info.py
deleted file mode 120000
index bb015c9..0000000
--- a/plugins/modules/os_project_info.py
+++ /dev/null
@@ -1 +0,0 @@
-project_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_quota.py b/plugins/modules/os_quota.py
deleted file mode 120000
index 45b165f..0000000
--- a/plugins/modules/os_quota.py
+++ /dev/null
@@ -1 +0,0 @@
-quota.py
\ No newline at end of file
diff --git a/plugins/modules/os_recordset.py b/plugins/modules/os_recordset.py
deleted file mode 120000
index f3a191f..0000000
--- a/plugins/modules/os_recordset.py
+++ /dev/null
@@ -1 +0,0 @@
-recordset.py
\ No newline at end of file
diff --git a/plugins/modules/os_router.py b/plugins/modules/os_router.py
deleted file mode 120000
index 7a3bfa5..0000000
--- a/plugins/modules/os_router.py
+++ /dev/null
@@ -1 +0,0 @@
-router.py
\ No newline at end of file
diff --git a/plugins/modules/os_routers_info.py b/plugins/modules/os_routers_info.py
deleted file mode 120000
index bf5d3ba..0000000
--- a/plugins/modules/os_routers_info.py
+++ /dev/null
@@ -1 +0,0 @@
-routers_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_security_group.py b/plugins/modules/os_security_group.py
deleted file mode 120000
index 7e4c6c0..0000000
--- a/plugins/modules/os_security_group.py
+++ /dev/null
@@ -1 +0,0 @@
-security_group.py
\ No newline at end of file
diff --git a/plugins/modules/os_security_group_rule.py b/plugins/modules/os_security_group_rule.py
deleted file mode 120000
index 2ad5a0f..0000000
--- a/plugins/modules/os_security_group_rule.py
+++ /dev/null
@@ -1 +0,0 @@
-security_group_rule.py
\ No newline at end of file
diff --git a/plugins/modules/os_server.py b/plugins/modules/os_server.py
deleted file mode 120000
index 48c45cb..0000000
--- a/plugins/modules/os_server.py
+++ /dev/null
@@ -1 +0,0 @@
-server.py
\ No newline at end of file
diff --git a/plugins/modules/os_server_action.py b/plugins/modules/os_server_action.py
deleted file mode 120000
index 94d48b8..0000000
--- a/plugins/modules/os_server_action.py
+++ /dev/null
@@ -1 +0,0 @@
-server_action.py
\ No newline at end of file
diff --git a/plugins/modules/os_server_group.py b/plugins/modules/os_server_group.py
deleted file mode 120000
index 248acf8..0000000
--- a/plugins/modules/os_server_group.py
+++ /dev/null
@@ -1 +0,0 @@
-server_group.py
\ No newline at end of file
diff --git a/plugins/modules/os_server_info.py b/plugins/modules/os_server_info.py
deleted file mode 120000
index c166a5e..0000000
--- a/plugins/modules/os_server_info.py
+++ /dev/null
@@ -1 +0,0 @@
-server_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_server_metadata.py b/plugins/modules/os_server_metadata.py
deleted file mode 120000
index 1afd779..0000000
--- a/plugins/modules/os_server_metadata.py
+++ /dev/null
@@ -1 +0,0 @@
-server_metadata.py
\ No newline at end of file
diff --git a/plugins/modules/os_server_volume.py b/plugins/modules/os_server_volume.py
deleted file mode 120000
index c925bd7..0000000
--- a/plugins/modules/os_server_volume.py
+++ /dev/null
@@ -1 +0,0 @@
-server_volume.py
\ No newline at end of file
diff --git a/plugins/modules/os_stack.py b/plugins/modules/os_stack.py
deleted file mode 120000
index c0069ab..0000000
--- a/plugins/modules/os_stack.py
+++ /dev/null
@@ -1 +0,0 @@
-stack.py
\ No newline at end of file
diff --git a/plugins/modules/os_subnet.py b/plugins/modules/os_subnet.py
deleted file mode 120000
index e4e58a1..0000000
--- a/plugins/modules/os_subnet.py
+++ /dev/null
@@ -1 +0,0 @@
-subnet.py
\ No newline at end of file
diff --git a/plugins/modules/os_subnets_info.py b/plugins/modules/os_subnets_info.py
deleted file mode 120000
index 730830d..0000000
--- a/plugins/modules/os_subnets_info.py
+++ /dev/null
@@ -1 +0,0 @@
-subnets_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_user.py b/plugins/modules/os_user.py
deleted file mode 120000
index 7d89f34..0000000
--- a/plugins/modules/os_user.py
+++ /dev/null
@@ -1 +0,0 @@
-identity_user.py
\ No newline at end of file
diff --git a/plugins/modules/os_user_group.py b/plugins/modules/os_user_group.py
deleted file mode 120000
index 844c726..0000000
--- a/plugins/modules/os_user_group.py
+++ /dev/null
@@ -1 +0,0 @@
-group_assignment.py
\ No newline at end of file
diff --git a/plugins/modules/os_user_info.py b/plugins/modules/os_user_info.py
deleted file mode 120000
index 37158ce..0000000
--- a/plugins/modules/os_user_info.py
+++ /dev/null
@@ -1 +0,0 @@
-identity_user_info.py
\ No newline at end of file
diff --git a/plugins/modules/os_user_role.py b/plugins/modules/os_user_role.py
deleted file mode 120000
index eefa904..0000000
--- a/plugins/modules/os_user_role.py
+++ /dev/null
@@ -1 +0,0 @@
-role_assignment.py
\ No newline at end of file
diff --git a/plugins/modules/os_volume.py b/plugins/modules/os_volume.py
deleted file mode 120000
index 1d6acb7..0000000
--- a/plugins/modules/os_volume.py
+++ /dev/null
@@ -1 +0,0 @@
-volume.py
\ No newline at end of file
diff --git a/plugins/modules/os_volume_snapshot.py b/plugins/modules/os_volume_snapshot.py
deleted file mode 120000
index 8657aee..0000000
--- a/plugins/modules/os_volume_snapshot.py
+++ /dev/null
@@ -1 +0,0 @@
-volume_snapshot.py
\ No newline at end of file
diff --git a/plugins/modules/os_zone.py b/plugins/modules/os_zone.py
deleted file mode 120000
index e655254..0000000
--- a/plugins/modules/os_zone.py
+++ /dev/null
@@ -1 +0,0 @@
-dns_zone.py
\ No newline at end of file
diff --git a/plugins/modules/port_info.py b/plugins/modules/port_info.py
index 938dd42..41010fa 100644
--- a/plugins/modules/port_info.py
+++ b/plugins/modules/port_info.py
@@ -9,8 +9,6 @@ short_description: Retrieve information about ports within OpenStack.
 author: OpenStack Ansible SIG
 description:
     - Retrieve information about ports from OpenStack.
-    - This module was called C(openstack.cloud.port_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.port_info) module no longer returns C(ansible_facts)!
 options:
     port:
         description:
diff --git a/plugins/modules/project_info.py b/plugins/modules/project_info.py
index 0a0c357..5ed3344 100644
--- a/plugins/modules/project_info.py
+++ b/plugins/modules/project_info.py
@@ -9,8 +9,6 @@ short_description: Retrieve information about one or more OpenStack projects
 author: OpenStack Ansible SIG
 description:
     - Retrieve information about a one or more OpenStack projects
-    - This module was called C(openstack.cloud.project_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.project_info) module no longer returns C(ansible_facts)!
 options:
    name:
      description:
@@ -121,8 +119,6 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O
 
 
 class IdentityProjectInfoModule(OpenStackModule):
-    deprecated_names = ('project_facts', 'openstack.cloud.project_facts')
-
     argument_spec = dict(
         name=dict(required=False),
         domain=dict(required=False),
diff --git a/plugins/modules/routers_info.py b/plugins/modules/routers_info.py
index 37bbecb..5c08bfd 100644
--- a/plugins/modules/routers_info.py
+++ b/plugins/modules/routers_info.py
@@ -191,8 +191,6 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O
 
 class RouterInfoModule(OpenStackModule):
 
-    deprecated_names = ('os_routers_info', 'openstack.cloud.os_routers_info')
-
     argument_spec = dict(
         name=dict(required=False, default=None),
         filters=dict(required=False, type='dict', default={})
diff --git a/plugins/modules/security_group_rule.py b/plugins/modules/security_group_rule.py
index caf3a23..c4a530e 100644
--- a/plugins/modules/security_group_rule.py
+++ b/plugins/modules/security_group_rule.py
@@ -303,7 +303,6 @@ def _ports_match(protocol, module_min, module_max, rule_min, rule_max):
 
 
 class SecurityGroupRuleModule(OpenStackModule):
-    deprecated_names = ('os_security_group_rule', 'openstack.cloud.os_security_group_rule')
 
     argument_spec = dict(
         security_group=dict(required=True),
diff --git a/plugins/modules/server.py b/plugins/modules/server.py
index a3ca7d0..b281814 100644
--- a/plugins/modules/server.py
+++ b/plugins/modules/server.py
@@ -481,7 +481,6 @@ def _parse_meta(meta):
 
 
 class ServerModule(OpenStackModule):
-    deprecated_names = ('os_server', 'openstack.cloud.os_server')
 
     argument_spec = dict(
         name=dict(required=True),
diff --git a/plugins/modules/server_action.py b/plugins/modules/server_action.py
index 341ff37..c49d6c4 100644
--- a/plugins/modules/server_action.py
+++ b/plugins/modules/server_action.py
@@ -116,8 +116,6 @@ _admin_actions = ['pause', 'unpause', 'suspend', 'resume', 'lock', 'unlock', 'sh
 
 
 class ServerActionModule(OpenStackModule):
-    deprecated_names = ('os_server_action', 'openstack.cloud.os_server_action')
-
     argument_spec = dict(
         server=dict(required=True, type='str'),
         action=dict(required=True, type='str',
diff --git a/plugins/modules/server_info.py b/plugins/modules/server_info.py
index bac1d21..f8d6a4e 100644
--- a/plugins/modules/server_info.py
+++ b/plugins/modules/server_info.py
@@ -10,8 +10,6 @@ short_description: Retrieve information about one or more compute instances
 author: OpenStack Ansible SIG
 description:
     - Retrieve information about server instances from OpenStack.
-    - This module was called C(os_server_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.server_info) module no longer returns C(ansible_facts)!
 notes:
     - The result contains a list of servers.
 options:
@@ -62,8 +60,6 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O
 
 class ServerInfoModule(OpenStackModule):
 
-    deprecated_names = ('os_server_info', 'openstack.cloud.os_server_info')
-
     argument_spec = dict(
         server=dict(required=False),
         detailed=dict(required=False, type='bool', default=False),
diff --git a/plugins/modules/subnets_info.py b/plugins/modules/subnets_info.py
index 7a771b5..c0b374b 100644
--- a/plugins/modules/subnets_info.py
+++ b/plugins/modules/subnets_info.py
@@ -10,8 +10,6 @@ short_description: Retrieve information about one or more OpenStack subnets.
 author: OpenStack Ansible SIG
 description:
     - Retrieve information about one or more subnets from OpenStack.
-    - This module was called C(openstack.cloud.subnets_facts) before Ansible 2.9, returning C(ansible_facts).
-      Note that the M(openstack.cloud.subnets_info) module no longer returns C(ansible_facts)!
 options:
    name:
      description:
@@ -133,9 +131,6 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O
 
 
 class SubnetInfoModule(OpenStackModule):
-
-    deprecated_names = ('subnets_facts', 'openstack.cloud.subnets_facts')
-
     argument_spec = dict(
         name=dict(required=False, default=None, aliases=['subnet']),
         filters=dict(required=False, type='dict', default=None)
diff --git a/tools/groups-to-routing.py b/tools/groups-to-routing.py
deleted file mode 100644
index 7a09e42..0000000
--- a/tools/groups-to-routing.py
+++ /dev/null
@@ -1,128 +0,0 @@
-import os
-import yaml
-
-overrides = dict(
-    os_client_config='config',
-    os_endpoint='catalog_endpoint',
-    os_flavor_info='compute_flavor_info',
-    os_flavor='compute_flavor',
-    os_group_info='identity_group_info',
-    os_group='identity_group',
-    os_ironic_node='baremetal_node_action',
-    os_ironic_inspect='baremetal_inspect',
-    os_ironic='baremetal_node',
-    os_keystone_domain_info='identity_domain_info',
-    os_keystone_domain='identity_domain',
-    os_keystone_endpoint='endpoint',
-    os_keystone_identity_provider_info='federation_idp_info',
-    os_keystone_identity_provider='federation_idp',
-    os_keystone_mapping_info='federation_mapping_info',
-    os_keystone_mapping='federation_mapping',
-    os_keystone_role='identity_role',
-    os_keystone_service='catalog_service',
-    os_listener='lb_listener',
-    os_member='lb_member',
-    os_nova_flavor='compute_flavor',
-    os_nova_host_aggregate='host_aggregate',
-    os_pool='lb_pool',
-    os_user_group='group_assignment',
-    os_user_info='identity_user_info',
-    os_user_role='role_assignment',
-    os_user='identity_user',
-    os_zone='dns_zone',
-)
-
-old_list = []
-new_list = []
-module_runtime = dict()
-mapping = dict()
-os.system('git checkout HEAD^1 meta/action_groups.yml plugins ci')
-groups = yaml.safe_load(open('meta/action_groups.yml', 'r'))
-# Do override keys first so that they're done in sequence
-for module in list(overrides.keys()) + groups['os']:
-    old_list.append(module)
-    new_name = overrides.get(module, module.replace('os_', ''))
-    new_list.append(new_name)
-    mapping[module] = new_name
-    module_runtime[module] = dict(
-        deprecation=dict(
-            removal_date='TBD',
-            warning_text=(
-                'os_ prefixed module names are deprecated, use'
-                f' openstack.cloud.{new_name}'
-            ),
-        ),
-        redirect=f'openstack.cloud.{new_name}',
-    )
-
-groups['os'] = sorted(new_list) + sorted(old_list)
-groups['openstack'] = sorted(new_list)
-
-yaml.dump(groups, open('meta/action_groups.yml', 'w'))
-
-runtime = dict(plugin_runtime=dict(modules=module_runtime))
-
-yaml.dump(runtime, open('meta/runtime.yml', 'w'))
-
-
-def replace_content(content):
-    for old, new in mapping.items():
-        content = content.replace(
-            f'modules import {old}',
-            f'modules import {new}',
-        )
-        content = content.replace(
-            f'modules.{old}',
-            f'modules.{new}',
-        )
-        content = content.replace(
-            f'self.module = {old}',
-            f'self.module = {new}',
-        )
-        content = content.replace(
-            f'test_{old}',
-            f'test_{new}',
-        )
-        content = content.replace(
-            f'openstack.cloud.{old}',
-            f'openstack.cloud.{new}',
-        )
-        content = content.replace(
-            old,
-            f'openstack.cloud.{new}',
-        )
-        content = content.replace(
-            'module: openstack.cloud.',
-            'module: ',
-        )
-    return content
-
-
-for todo_path in ('ci', 'plugins', 'tests'):
-    for (dirpath, dirnames, filenames) in os.walk(todo_path):
-        for filename in filenames:
-            contents = None
-            oldfile = os.path.join(dirpath, filename)
-            with open(oldfile, 'r') as infile:
-                contents = replace_content(infile.read())
-            with open(oldfile, 'w') as outfile:
-                outfile.write(contents)
-            if filename.endswith('.py'):
-                old_file_base = os.path.splitext(filename)[0]
-                if old_file_base in mapping:
-                    new_file_base = mapping[old_file_base]
-                    newfile = os.path.join(dirpath, f'{new_file_base}.py')
-                    os.system(f'git mv {oldfile} {newfile}')
-                    os.system(f'ln -s {new_file_base}.py {oldfile}')
-                    os.system(f'git add {oldfile}')
-                    continue
-                if not filename.startswith('test_'):
-                    continue
-                old_file_module_base = old_file_base[5:]
-                new_file_base = mapping.get(old_file_module_base)
-                if not new_file_base:
-                    continue
-                newfile = os.path.join(dirpath, f'test_{new_file_base}.py')
-                os.system(f'git mv {oldfile} {newfile}')
-
-print("Edit tests/unit/modules/cloud/openstack/test_server.py by hand")
-- 
GitLab