From 52905480b814154bacb4aa2a166e1af00d9726a3 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Thu, 9 Apr 2020 14:36:12 -0500 Subject: [PATCH] Remove all of the os_ prefixes The 2.10 transition has a routing.yml file that points each individual module from ansible/ansible to a new location. That means we can put: os_server: redirect: openstack.cloud.server into lib/ansible/config/routing.yml in ansible/ansible and have the result be the end user's playbooks still working with the old names while providing new names that are less ugly. This adds a routing file to our collection repo, as well as the script used to generate the new mapping. Change-Id: Ia5d18282b14ad0d86a347343be8bb477ae47130a --- docs/openstack_guidelines.rst | 14 +- meta/routing.yml | 307 ++++++++++++++++++++++++++++++++++ tests/sanity/ignore-2.10.txt | 2 + tests/sanity/ignore-2.9.txt | 2 + tools/groups-to-routing.py | 128 ++++++++++++++ 5 files changed, 443 insertions(+), 10 deletions(-) create mode 100644 meta/routing.yml create mode 100644 tools/groups-to-routing.py diff --git a/docs/openstack_guidelines.rst b/docs/openstack_guidelines.rst index 64302c8d..ac90eb0f 100644 --- a/docs/openstack_guidelines.rst +++ b/docs/openstack_guidelines.rst @@ -3,10 +3,8 @@ OpenStack Ansible Modules ========================= -These are a set of modules for interacting with OpenStack as either an admin -or an end user. If the module does not begin with ``os_``, it's either deprecated -or soon to be. This document serves as developer coding guidelines for -modules intended to be here. +These are a set of modules for interacting with the OpenStack API as either an admin +or an end user. .. contents:: :local: @@ -14,15 +12,11 @@ modules intended to be here. Naming ------ -* All module names should start with ``os_`` +* This is a collection named ``openstack.cloud``. There is no need for further namespace prefixing. * Name any module that a cloud consumer would expect to use after the logical resource it manages: - ``os_server`` not ``os_nova``. This naming convention acknowledges that the end user does not care + ``server`` not ``nova``. This naming convention acknowledges that the end user does not care which service manages the resource - that is a deployment detail. For example cloud consumers may not know whether their floating IPs are managed by Nova or Neutron. -* Name any module that a cloud admin would expect to use with the service and the resource: - ``os_keystone_domain``. -* If the module is one that a cloud admin and a cloud consumer could both use, - the cloud consumer rules apply. Interface --------- diff --git a/meta/routing.yml b/meta/routing.yml new file mode 100644 index 00000000..1ed0ebc5 --- /dev/null +++ b/meta/routing.yml @@ -0,0 +1,307 @@ +plugin_routing: + modules: + os_auth: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.auth + redirect: openstack.cloud.auth + os_client_config: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.config + redirect: openstack.cloud.config + os_coe_cluster: + deprecation: + removal_date: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.coe_cluster_template + redirect: openstack.cloud.coe_cluster_template + os_flavor_info: + deprecation: + removal_date: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.floating_ip + redirect: openstack.cloud.floating_ip + os_group: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_group + redirect: openstack.cloud.identity_group + os_group_info: + deprecation: + removal_date: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.image + redirect: openstack.cloud.image + os_image_info: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.image_info + redirect: openstack.cloud.image_info + os_ironic: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.baremetal_node + redirect: openstack.cloud.baremetal_node + os_ironic_inspect: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.baremetal_inspect + redirect: openstack.cloud.baremetal_inspect + os_ironic_node: + deprecation: + removal_date: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.keypair + redirect: openstack.cloud.keypair + os_keystone_domain: + deprecation: + removal_date: TBD + 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: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.endpoint + redirect: openstack.cloud.endpoint + os_keystone_federation_protocol: + deprecation: + removal_date: TBD + 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: TBD + 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: TBD + 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: TBD + 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: TBD + 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: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_role + redirect: openstack.cloud.identity_role + os_keystone_service: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.catalog_service + redirect: openstack.cloud.catalog_service + os_listener: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.lb_listener + redirect: openstack.cloud.lb_listener + os_loadbalancer: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.loadbalancer + redirect: openstack.cloud.loadbalancer + os_member: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.lb_member + redirect: openstack.cloud.lb_member + os_network: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.network + redirect: openstack.cloud.network + os_networks_info: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.networks_info + redirect: openstack.cloud.networks_info + os_nova_flavor: + deprecation: + removal_date: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.host_aggregate + redirect: openstack.cloud.host_aggregate + os_object: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.object + redirect: openstack.cloud.object + os_pool: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.lb_pool + redirect: openstack.cloud.lb_pool + os_port: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.port + redirect: openstack.cloud.port + os_port_info: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.port_info + redirect: openstack.cloud.port_info + os_project: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.project + redirect: openstack.cloud.project + os_project_access: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.project_access + redirect: openstack.cloud.project_access + os_project_info: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.project_info + redirect: openstack.cloud.project_info + os_quota: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.quota + redirect: openstack.cloud.quota + os_recordset: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.recordset + redirect: openstack.cloud.recordset + os_router: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.router + redirect: openstack.cloud.router + os_routers_info: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.routers_info + redirect: openstack.cloud.routers_info + os_security_group: + deprecation: + removal_date: TBD + 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: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server + redirect: openstack.cloud.server + os_server_action: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_action + redirect: openstack.cloud.server_action + os_server_group: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_group + redirect: openstack.cloud.server_group + os_server_info: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_info + redirect: openstack.cloud.server_info + os_server_metadata: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_metadata + redirect: openstack.cloud.server_metadata + os_server_volume: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.server_volume + redirect: openstack.cloud.server_volume + os_stack: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.stack + redirect: openstack.cloud.stack + os_subnet: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.subnet + redirect: openstack.cloud.subnet + os_subnets_info: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.subnets_info + redirect: openstack.cloud.subnets_info + os_user: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.identity_user + redirect: openstack.cloud.identity_user + os_user_group: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.group_assignment + redirect: openstack.cloud.group_assignment + os_user_info: + deprecation: + removal_date: TBD + 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: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.role_assignment + redirect: openstack.cloud.role_assignment + os_volume: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.volume + redirect: openstack.cloud.volume + os_volume_snapshot: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.volume_snapshot + redirect: openstack.cloud.volume_snapshot + os_zone: + deprecation: + removal_date: TBD + warning_text: os_ prefixed module names are deprecated, use openstack.cloud.dns_zone + redirect: openstack.cloud.dns_zone diff --git a/tests/sanity/ignore-2.10.txt b/tests/sanity/ignore-2.10.txt index 2c7f0df6..d0230072 100644 --- a/tests/sanity/ignore-2.10.txt +++ b/tests/sanity/ignore-2.10.txt @@ -14,3 +14,5 @@ tests/unit/modules/conftest.py future-import-boilerplate tests/unit/modules/conftest.py metaclass-boilerplate tests/unit/modules/utils.py future-import-boilerplate tests/unit/modules/utils.py metaclass-boilerplate +tools/groups-to-routing.py compile-2.7!skip +tools/groups-to-routing.py compile-3.5!skip diff --git a/tests/sanity/ignore-2.9.txt b/tests/sanity/ignore-2.9.txt index 2c7f0df6..d0230072 100644 --- a/tests/sanity/ignore-2.9.txt +++ b/tests/sanity/ignore-2.9.txt @@ -14,3 +14,5 @@ tests/unit/modules/conftest.py future-import-boilerplate tests/unit/modules/conftest.py metaclass-boilerplate tests/unit/modules/utils.py future-import-boilerplate tests/unit/modules/utils.py metaclass-boilerplate +tools/groups-to-routing.py compile-2.7!skip +tools/groups-to-routing.py compile-3.5!skip diff --git a/tools/groups-to-routing.py b/tools/groups-to-routing.py new file mode 100644 index 00000000..3b517136 --- /dev/null +++ b/tools/groups-to-routing.py @@ -0,0 +1,128 @@ +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_routing = 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_routing[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')) + +routing = dict(plugin_routing=dict(modules=module_routing)) + +yaml.dump(routing, open('meta/routing.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")