From a76535685f5d64b7efb261dba04733f5e011ec28 Mon Sep 17 00:00:00 2001
From: Dmitriy Rabotyagov <dmitriy.rabotyagov@cleura.com>
Date: Mon, 24 Feb 2025 13:56:45 +0100
Subject: [PATCH] Align on cinder service naming

With an effort [1][2] to align cinder service type naming to
`block-storage` we revert deprecation of some variables, which
were annoinced as deprecated in [3] and dperecate versioned
ones instead.

[1] https://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/thread/QQ7L44VE4MOWOQVOFCZQPTIVI35A6SCK/#X7BYL6AYQDMXAG7XXDNTSASWZCGEHQ37
[2] https://review.opendev.org/q/topic:%22remove-cinder-v2-crud%22
[3] https://review.opendev.org/c/openstack/openstack-ansible-os_cinder/+/934593

Depends-On: https://review.opendev.org/c/openstack/openstack-ansible/+/942580
Change-Id: I7a8e563fa60a62bdc24d5a3c9d7fa1a43f324b76
---
 defaults/main.yml                             | 21 ++++++++--
 ...sioned_service_types-75bad8363b5cbff7.yaml | 41 +++++++++++++++++++
 vars/main.yml                                 | 24 +++++++++--
 3 files changed, 78 insertions(+), 8 deletions(-)
 create mode 100644 releasenotes/notes/cinder_remove_versioned_service_types-75bad8363b5cbff7.yaml

diff --git a/defaults/main.yml b/defaults/main.yml
index ce29444e..edf51562 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -170,7 +170,6 @@ cinder_service_admin_tenant_name: "service"
 cinder_service_admin_username: "cinder"
 
 ## Cinder api service type and data
-cinder_service_name: cinder
 cinder_service_project_domain_id: default
 cinder_service_user_domain_id: default
 cinder_service_user_name: cinder
@@ -185,12 +184,26 @@ cinder_service_region: "{{ service_region | default('RegionOne') }}"
 cinder_service_port: 8776
 cinder_service_proto: http
 
+cinder_service_name: cinder
+cinder_service_type: block-storage
+cinder_service_description: "Cinder Volume Service"
+cinder_service_publicuri_proto: "{{ openstack_service_publicuri_proto | default(cinder_service_proto) }}"
+cinder_service_adminuri_proto: "{{ openstack_service_adminuri_proto | default(cinder_service_proto) }}"
+cinder_service_internaluri_proto: "{{ openstack_service_internaluri_proto | default(cinder_service_proto) }}"
+cinder_service_publicuri: "{{ cinder_service_publicuri_proto }}://{{ external_lb_vip_address }}:{{ cinder_service_port }}"
+cinder_service_publicurl: "{{ cinder_service_publicuri }}/v3/%(project_id)s"
+cinder_service_adminuri: "{{ cinder_service_adminuri_proto }}://{{ internal_lb_vip_address }}:{{ cinder_service_port }}"
+cinder_service_adminurl: "{{ cinder_service_adminuri }}/v3/%(project_id)s"
+cinder_service_internaluri: "{{ cinder_service_internaluri_proto }}://{{ internal_lb_vip_address }}:{{ cinder_service_port }}"
+cinder_service_internalurl: "{{ cinder_service_internaluri }}/v3/%(project_id)s"
+
+cinder_service_v3_enabled: true
 cinder_service_v3_name: cinderv3
 cinder_service_v3_type: volumev3
 cinder_service_v3_description: "Cinder Volume Service V3"
-cinder_service_v3_publicuri_proto: "{{ openstack_service_publicuri_proto | default(cinder_service_proto) }}"
-cinder_service_v3_adminuri_proto: "{{ openstack_service_adminuri_proto | default(cinder_service_proto) }}"
-cinder_service_v3_internaluri_proto: "{{ openstack_service_internaluri_proto | default(cinder_service_proto) }}"
+cinder_service_v3_publicuri_proto: "{{ openstack_service_publicuri_proto | default(cinder_service_publicuri_proto) }}"
+cinder_service_v3_adminuri_proto: "{{ openstack_service_adminuri_proto | default(cinder_service_adminuri_proto) }}"
+cinder_service_v3_internaluri_proto: "{{ openstack_service_internaluri_proto | default(cinder_service_internaluri_proto) }}"
 cinder_service_v3_publicuri: "{{ cinder_service_v3_publicuri_proto }}://{{ external_lb_vip_address }}:{{ cinder_service_port }}"
 cinder_service_v3_publicurl: "{{ cinder_service_v3_publicuri }}/v3/%(tenant_id)s"
 cinder_service_v3_adminuri: "{{ cinder_service_v3_adminuri_proto }}://{{ internal_lb_vip_address }}:{{ cinder_service_port }}"
diff --git a/releasenotes/notes/cinder_remove_versioned_service_types-75bad8363b5cbff7.yaml b/releasenotes/notes/cinder_remove_versioned_service_types-75bad8363b5cbff7.yaml
new file mode 100644
index 00000000..f588e4f3
--- /dev/null
+++ b/releasenotes/notes/cinder_remove_versioned_service_types-75bad8363b5cbff7.yaml
@@ -0,0 +1,41 @@
+---
+prelude: >
+    In order to support efforts on aligning Cinder service type naming across
+    various deployments and move on from version-specific service type to a
+    generic one, a Cinder service will be named as ``block-storage`` from
+    now on, which will be reflected in Keystone service catalog and endpoints.
+    Please check upgrade notes for more details.
+upgrade:
+  - |
+    In order to align with recommendations on Cinder service naming, os_cinder
+    role will introduce a new service in catalog named ``cinder`` of type
+    ``block-storage`` and corresponding set of endpoints representing them.
+    Upgrade script will create a new file `/etc/openstack_deploy/user_epoxy_upgrade.yml`
+    with defining ``cinder_service_v3_enabled: true`` which aims to keep old
+    version-based service type and endpoints intact.
+    If you want to remove old versioned-based endpoints and service type from
+    catalog you may simply undefine that variable, as it is ``False`` by
+    default.
+
+    All new deployments will not have ``cinderv3``/``volumev3``
+    service unless ``cinder_service_v3_enabled: true`` is defined.
+deprecations:
+  - |
+    In order to accomplish Cinder service naming alignment we had revised our
+    prior decision on deprecating following variables, which was introduced
+    previous cycle. Following variables should NOT be considered as
+    deprecated anymore:
+
+      - `cinder_service_description`
+      - `cinder_service_publicuri_proto`
+      - `cinder_service_adminuri_proto`
+      - `cinder_service_internaluri_proto`
+      - `cinder_service_type`
+      - `cinder_service_publicuri`
+      - `cinder_service_adminuri`
+      - `cinder_service_internaluri`
+
+  - |
+    Usage of version-based (``cinderv3``/``volumev3``) endpoints and service
+    type for Cinder is considered as a deprecated behaviour and will be removed
+    in the future.
diff --git a/vars/main.yml b/vars/main.yml
index 15572bd2..36af0a93 100644
--- a/vars/main.yml
+++ b/vars/main.yml
@@ -113,24 +113,40 @@ cinder_core_files:
     mode: "0640"
 
 cinder_service_endpoints:
+  - service: "{{ cinder_service_name }}"
+    interface: "public"
+    url: "{{ cinder_service_publicurl }}"
+    state: present
+  - service: "{{ cinder_service_name }}"
+    interface: "internal"
+    url: "{{ cinder_service_internalurl }}"
+    state: present
+  - service: "{{ cinder_service_name }}"
+    interface: "admin"
+    url: "{{ cinder_service_adminurl }}"
+    state: present
   - service: "{{ cinder_service_v3_name }}"
     interface: "public"
     url: "{{ cinder_service_v3_publicurl }}"
-    state: present
+    state: "{{ cinder_service_v3_enabled | ternary('present', 'absent') }}"
   - service: "{{ cinder_service_v3_name }}"
     interface: "internal"
     url: "{{ cinder_service_v3_internalurl }}"
-    state: present
+    state: "{{ cinder_service_v3_enabled | ternary('present', 'absent') }}"
   - service: "{{ cinder_service_v3_name }}"
     interface: "admin"
     url: "{{ cinder_service_v3_adminurl }}"
-    state: present
+    state: "{{ cinder_service_v3_enabled | ternary('present', 'absent') }}"
 
 cinder_service_catalog:
+  - name: "{{ cinder_service_name }}"
+    type: "{{ cinder_service_type }}"
+    description: "{{ cinder_service_description }}"
+    state: present
   - name: "{{ cinder_service_v3_name }}"
     type: "{{ cinder_service_v3_type }}"
     description: "{{ cinder_service_v3_description }}"
-    state: present
+    state: "{{ cinder_service_v3_enabled | ternary('present', 'absent') }}"
 
 _cinder_coordination_url: >-
   {{ cinder_coordination_driver }}://{{