From d701ae50150475f58db910889e0855bc64be4ee7 Mon Sep 17 00:00:00 2001
From: Michal Nasiadka <mnasiadka@gmail.com>
Date: Wed, 24 Apr 2024 16:49:14 +0200
Subject: [PATCH] Drop Sahara

It's inactive and hasn't produced a 2024.1 release [1].

[1]: https://governance.openstack.org/tc/reference/emerging-technology-and-inactive-projects.html#current-inactive-projects

Change-Id: I888963751b6e1ed080588297c2889e700431516c
---
 README.rst                                    |   1 -
 ansible/group_vars/all.yml                    |   8 -
 ansible/inventory/all-in-one                  |  10 -
 ansible/inventory/multinode                   |  10 -
 .../templates/event_definitions.yaml.j2       |  25 ---
 ansible/roles/common/defaults/main.yml        |   2 -
 ansible/roles/common/tasks/config.yml         |   1 -
 .../templates/conf/filter/01-rewrite.conf.j2  |   5 -
 .../templates/cron-logrotate-sahara.conf.j2   |   3 -
 ansible/roles/horizon/defaults/main.yml       |   1 -
 ansible/roles/horizon/tasks/config.yml        |   1 -
 ansible/roles/loadbalancer/tasks/precheck.yml |  13 --
 ansible/roles/sahara/defaults/main.yml        | 171 ------------------
 ansible/roles/sahara/handlers/main.yml        |  33 ----
 ansible/roles/sahara/tasks/bootstrap.yml      |  38 ----
 .../roles/sahara/tasks/bootstrap_service.yml  |  20 --
 .../roles/sahara/tasks/check-containers.yml   |  18 --
 ansible/roles/sahara/tasks/check.yml          |   1 -
 ansible/roles/sahara/tasks/clone.yml          |   8 -
 ansible/roles/sahara/tasks/config.yml         |  83 ---------
 .../roles/sahara/tasks/config_validate.yml    |   7 -
 ansible/roles/sahara/tasks/copy-certs.yml     |   6 -
 .../roles/sahara/tasks/deploy-containers.yml  |   2 -
 ansible/roles/sahara/tasks/deploy.yml         |  14 --
 ansible/roles/sahara/tasks/loadbalancer.yml   |   7 -
 ansible/roles/sahara/tasks/main.yml           |   2 -
 ansible/roles/sahara/tasks/precheck.yml       |  26 ---
 ansible/roles/sahara/tasks/pull.yml           |   3 -
 ansible/roles/sahara/tasks/reconfigure.yml    |   2 -
 ansible/roles/sahara/tasks/register.yml       |   7 -
 ansible/roles/sahara/tasks/stop.yml           |   6 -
 ansible/roles/sahara/tasks/upgrade.yml        |   9 -
 .../roles/sahara/templates/sahara-api.json.j2 |  29 ---
 .../sahara/templates/sahara-engine.json.j2    |  29 ---
 ansible/roles/sahara/templates/sahara.conf.j2 |  72 --------
 ansible/roles/sahara/vars/main.yml            |   2 -
 ansible/site.yml                              |  21 ---
 etc/kolla/globals.yml                         |   2 -
 etc/kolla/passwords.yml                       |   3 -
 .../notes/drop-sahara-9242926ee36e5316.yaml   |   4 +
 tests/templates/inventory.j2                  |  10 -
 41 files changed, 4 insertions(+), 711 deletions(-)
 delete mode 100644 ansible/roles/common/templates/cron-logrotate-sahara.conf.j2
 delete mode 100644 ansible/roles/sahara/defaults/main.yml
 delete mode 100644 ansible/roles/sahara/handlers/main.yml
 delete mode 100644 ansible/roles/sahara/tasks/bootstrap.yml
 delete mode 100644 ansible/roles/sahara/tasks/bootstrap_service.yml
 delete mode 100644 ansible/roles/sahara/tasks/check-containers.yml
 delete mode 100644 ansible/roles/sahara/tasks/check.yml
 delete mode 100644 ansible/roles/sahara/tasks/clone.yml
 delete mode 100644 ansible/roles/sahara/tasks/config.yml
 delete mode 100644 ansible/roles/sahara/tasks/config_validate.yml
 delete mode 100644 ansible/roles/sahara/tasks/copy-certs.yml
 delete mode 100644 ansible/roles/sahara/tasks/deploy-containers.yml
 delete mode 100644 ansible/roles/sahara/tasks/deploy.yml
 delete mode 100644 ansible/roles/sahara/tasks/loadbalancer.yml
 delete mode 100644 ansible/roles/sahara/tasks/main.yml
 delete mode 100644 ansible/roles/sahara/tasks/precheck.yml
 delete mode 100644 ansible/roles/sahara/tasks/pull.yml
 delete mode 100644 ansible/roles/sahara/tasks/reconfigure.yml
 delete mode 100644 ansible/roles/sahara/tasks/register.yml
 delete mode 100644 ansible/roles/sahara/tasks/stop.yml
 delete mode 100644 ansible/roles/sahara/tasks/upgrade.yml
 delete mode 100644 ansible/roles/sahara/templates/sahara-api.json.j2
 delete mode 100644 ansible/roles/sahara/templates/sahara-engine.json.j2
 delete mode 100644 ansible/roles/sahara/templates/sahara.conf.j2
 delete mode 100644 ansible/roles/sahara/vars/main.yml
 create mode 100644 releasenotes/notes/drop-sahara-9242926ee36e5316.yaml

diff --git a/README.rst b/README.rst
index 353293bfa9..231a6479c2 100644
--- a/README.rst
+++ b/README.rst
@@ -62,7 +62,6 @@ Kolla Ansible deploys containers for the following OpenStack projects:
 - `Neutron <https://docs.openstack.org/neutron/latest/>`__
 - `Nova <https://docs.openstack.org/nova/latest/>`__
 - `Octavia <https://docs.openstack.org/octavia/latest/>`__
-- `Sahara <https://docs.openstack.org/sahara/latest/>`__ (deprecated)
 - `Senlin <https://docs.openstack.org/senlin/latest/>`__
 - Skyline (`APIServer <https://docs.openstack.org/skyline-apiserver/latest/>`__ and `Console <https://docs.openstack.org/skyline-console/latest/>`__)
 - `Swift <https://docs.openstack.org/swift/latest/>`__
diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 1174785a6e..c90ff177ae 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -613,12 +613,6 @@ rabbitmq_prometheus_port: "15692"
 redis_port: "6379"
 redis_sentinel_port: "26379"
 
-sahara_internal_fqdn: "{{ kolla_internal_fqdn }}"
-sahara_external_fqdn: "{{ kolla_external_fqdn }}"
-sahara_api_port: "8386"
-sahara_api_public_port: "{{ haproxy_single_external_frontend_public_port if haproxy_single_external_frontend | bool else sahara_api_port }}"
-sahara_api_listen_port: "{{ sahara_api_port }}"
-
 senlin_internal_fqdn: "{{ kolla_internal_fqdn }}"
 senlin_external_fqdn: "{{ kolla_external_fqdn }}"
 senlin_api_port: "8778"
@@ -810,7 +804,6 @@ enable_horizon_mistral: "{{ enable_mistral | bool }}"
 enable_horizon_murano: "{{ enable_murano | bool }}"
 enable_horizon_neutron_vpnaas: "{{ enable_neutron_vpnaas | bool }}"
 enable_horizon_octavia: "{{ enable_octavia | bool }}"
-enable_horizon_sahara: "{{ enable_sahara | bool }}"
 enable_horizon_senlin: "{{ enable_senlin | bool }}"
 enable_horizon_tacker: "{{ enable_tacker | bool }}"
 enable_horizon_trove: "{{ enable_trove | bool }}"
@@ -868,7 +861,6 @@ enable_placement: "{{ enable_nova | bool or enable_zun | bool }}"
 enable_prometheus: "no"
 enable_proxysql: "no"
 enable_redis: "no"
-enable_sahara: "no"
 enable_senlin: "no"
 enable_skyline: "no"
 enable_swift: "no"
diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index fcf447eb03..ce6f02ce94 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -121,9 +121,6 @@ monitoring
 [magnum:children]
 control
 
-[sahara:children]
-control
-
 [mistral:children]
 control
 
@@ -437,13 +434,6 @@ gnocchi
 [gnocchi-metricd:children]
 gnocchi
 
-# Sahara
-[sahara-api:children]
-sahara
-
-[sahara-engine:children]
-sahara
-
 # Ceilometer
 [ceilometer-central:children]
 ceilometer
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index 81e2912521..61cde984d3 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -139,9 +139,6 @@ control
 [magnum:children]
 control
 
-[sahara:children]
-control
-
 [mistral:children]
 control
 
@@ -400,13 +397,6 @@ magnum
 [magnum-conductor:children]
 magnum
 
-# Sahara
-[sahara-api:children]
-sahara
-
-[sahara-engine:children]
-sahara
-
 # Mistral
 [mistral-api:children]
 mistral
diff --git a/ansible/roles/ceilometer/templates/event_definitions.yaml.j2 b/ansible/roles/ceilometer/templates/event_definitions.yaml.j2
index d87e1dca86..051afb7a7b 100644
--- a/ansible/roles/ceilometer/templates/event_definitions.yaml.j2
+++ b/ansible/roles/ceilometer/templates/event_definitions.yaml.j2
@@ -144,31 +144,6 @@
       fields: ['_context_trustor_user_id', '_context_user_id']
     resource_id:
       fields: payload.stack_identity
-- event_type: sahara.cluster.*
-  traits: &sahara_crud
-    project_id:
-      fields: payload.project_id
-    user_id:
-      fields: _context_user_id
-    resource_id:
-      fields: payload.cluster_id
-- event_type: sahara.cluster.health
-  traits: &sahara_health
-    <<: *sahara_crud
-    verification_id:
-      fields: payload.verification_id
-    health_check_status:
-      fields: payload.health_check_status
-    health_check_name:
-      fields: payload.health_check_name
-    health_check_description:
-      fields: payload.health_check_description
-    created_at:
-      type: datetime
-      fields: payload.created_at
-    updated_at:
-      type: datetime
-      fields: payload.updated_at
 - event_type: ['identity.user.*', 'identity.project.*', 'identity.group.*', 'identity.role.*', 'identity.OS-TRUST:trust.*',
                'identity.region.*', 'identity.service.*', 'identity.endpoint.*', 'identity.policy.*']
   traits: &identity_crud
diff --git a/ansible/roles/common/defaults/main.yml b/ansible/roles/common/defaults/main.yml
index 136618b4b8..b78d0430ac 100644
--- a/ansible/roles/common/defaults/main.yml
+++ b/ansible/roles/common/defaults/main.yml
@@ -184,8 +184,6 @@ fluentd_input_openstack_services:
     enabled: "{{ enable_nova | bool }}"
   - name: octavia
     enabled: "{{ enable_octavia | bool }}"
-  - name: sahara
-    enabled: "{{ enable_sahara | bool }}"
   - name: senlin
     enabled: "{{ enable_senlin | bool }}"
   - name: tacker
diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index 9a10e9cdbb..9a3a654bac 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -253,7 +253,6 @@
       - { name: "prometheus", enabled: "{{ enable_prometheus | bool }}" }
       - { name: "proxysql", enabled: "{{ enable_proxysql | bool }}" }
       - { name: "rabbitmq", enabled: "{{ enable_rabbitmq | bool }}" }
-      - { name: "sahara", enabled: "{{ enable_sahara | bool }}" }
       - { name: "senlin", enabled: "{{ enable_senlin | bool }}" }
       - { name: "skyline", enabled: "{{ enable_skyline | bool }}" }
       - { name: "swift", enabled: "{{ enable_swift | bool }}" }
diff --git a/ansible/roles/common/templates/conf/filter/01-rewrite.conf.j2 b/ansible/roles/common/templates/conf/filter/01-rewrite.conf.j2
index 79dee498ce..6c38c59702 100644
--- a/ansible/roles/common/templates/conf/filter/01-rewrite.conf.j2
+++ b/ansible/roles/common/templates/conf/filter/01-rewrite.conf.j2
@@ -16,11 +16,6 @@
     pattern ^(nova-api|nova-compute|nova-compute-ironic|nova-conductor|nova-manage|nova-novncproxy|nova-scheduler|nova-placement-api|placement-api|privsep-helper)$
     tag openstack_python
   </rule>
-  <rule>
-    key     programname
-    pattern ^(sahara-api|sahara-engine)$
-    tag openstack_python
-  </rule>
   <rule>
     key     programname
     pattern ^(neutron-server|neutron-openvswitch-agent|neutron-ns-metadata-proxy|neutron-metadata-agent|neutron-l3-agent|neutron-dhcp-agent)$
diff --git a/ansible/roles/common/templates/cron-logrotate-sahara.conf.j2 b/ansible/roles/common/templates/cron-logrotate-sahara.conf.j2
deleted file mode 100644
index 57a98d315c..0000000000
--- a/ansible/roles/common/templates/cron-logrotate-sahara.conf.j2
+++ /dev/null
@@ -1,3 +0,0 @@
-"/var/log/kolla/sahara/*.log"
-{
-}
diff --git a/ansible/roles/horizon/defaults/main.yml b/ansible/roles/horizon/defaults/main.yml
index fa1ea7b3ac..485c846c93 100644
--- a/ansible/roles/horizon/defaults/main.yml
+++ b/ansible/roles/horizon/defaults/main.yml
@@ -18,7 +18,6 @@ horizon_services:
       ENABLE_MURANO: "{{ 'yes' if enable_horizon_murano | bool else 'no' }}"
       ENABLE_NEUTRON_VPNAAS: "{{ 'yes' if enable_horizon_neutron_vpnaas | bool else 'no' }}"
       ENABLE_OCTAVIA: "{{ 'yes' if enable_horizon_octavia | bool else 'no' }}"
-      ENABLE_SAHARA: "{{ 'yes' if enable_horizon_sahara | bool else 'no' }}"
       ENABLE_SENLIN: "{{ 'yes' if enable_horizon_senlin | bool else 'no' }}"
       ENABLE_TACKER: "{{ 'yes' if enable_horizon_tacker | bool else 'no' }}"
       ENABLE_TROVE: "{{ 'yes' if enable_horizon_trove | bool else 'no' }}"
diff --git a/ansible/roles/horizon/tasks/config.yml b/ansible/roles/horizon/tasks/config.yml
index b6c387ea30..947d082cd3 100644
--- a/ansible/roles/horizon/tasks/config.yml
+++ b/ansible/roles/horizon/tasks/config.yml
@@ -37,7 +37,6 @@
     - { name: "neutron", enabled: "{{ enable_neutron_horizon_policy_file }}" }
     - { name: "nova", enabled: "{{ enable_nova_horizon_policy_file }}" }
     - { name: "octavia", enabled: "{{ enable_horizon_octavia }}" }
-    - { name: "sahara", enabled: "{{ enable_horizon_sahara }}" }
     - { name: "senlin", enabled: "{{ enable_horizon_senlin }}" }
     - { name: "tacker", enabled: "{{ enable_horizon_tacker }}" }
     - { name: "trove", enabled: "{{ enable_horizon_trove }}" }
diff --git a/ansible/roles/loadbalancer/tasks/precheck.yml b/ansible/roles/loadbalancer/tasks/precheck.yml
index 472d7c23f7..ccff2bce9a 100644
--- a/ansible/roles/loadbalancer/tasks/precheck.yml
+++ b/ansible/roles/loadbalancer/tasks/precheck.yml
@@ -689,19 +689,6 @@
     - haproxy_stat.find('outward_rabbitmq_management') == -1
     - haproxy_vip_prechecks
 
-- name: Checking free port for Sahara API HAProxy
-  wait_for:
-    host: "{{ kolla_internal_vip_address }}"
-    port: "{{ sahara_api_port }}"
-    connect_timeout: 1
-    timeout: 1
-    state: stopped
-  when:
-    - enable_sahara | bool
-    - inventory_hostname in groups['loadbalancer']
-    - haproxy_stat.find('sahara_api') == -1
-    - haproxy_vip_prechecks
-
 - name: Checking free port for Senlin API HAProxy
   wait_for:
     host: "{{ kolla_internal_vip_address }}"
diff --git a/ansible/roles/sahara/defaults/main.yml b/ansible/roles/sahara/defaults/main.yml
deleted file mode 100644
index 5c74b42295..0000000000
--- a/ansible/roles/sahara/defaults/main.yml
+++ /dev/null
@@ -1,171 +0,0 @@
----
-sahara_services:
-  sahara-api:
-    container_name: sahara_api
-    group: sahara-api
-    enabled: true
-    image: "{{ sahara_api_image_full }}"
-    volumes: "{{ sahara_api_default_volumes + sahara_api_extra_volumes }}"
-    dimensions: "{{ sahara_api_dimensions }}"
-    healthcheck: "{{ sahara_api_healthcheck }}"
-    haproxy:
-      sahara_api:
-        enabled: "{{ enable_sahara }}"
-        mode: "http"
-        external: false
-        port: "{{ sahara_api_port }}"
-        listen_port: "{{ sahara_api_listen_port }}"
-      sahara_api_external:
-        enabled: "{{ enable_sahara }}"
-        mode: "http"
-        external: true
-        external_fqdn: "{{ sahara_external_fqdn }}"
-        port: "{{ sahara_api_public_port }}"
-        listen_port: "{{ sahara_api_listen_port }}"
-  sahara-engine:
-    container_name: sahara_engine
-    group: sahara-engine
-    enabled: true
-    image: "{{ sahara_engine_image_full }}"
-    privileged: True
-    volumes: "{{ sahara_engine_default_volumes + sahara_engine_extra_volumes + lookup('vars', 'run_default_volumes_' + kolla_container_engine) }}"
-    dimensions: "{{ sahara_engine_dimensions }}"
-    healthcheck: "{{ sahara_engine_healthcheck }}"
-
-####################
-# Config Validate
-####################
-sahara_config_validation:
-  - generator: "/sahara/tools/config/config-generator.sahara.conf"
-    config: "/etc/sahara/sahara.conf"
-
-####################
-# Database
-####################
-sahara_database_name: "sahara"
-sahara_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}sahara{% endif %}"
-sahara_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}"
-
-####################
-# Database sharding
-####################
-sahara_database_shard_root_user: "{% if enable_proxysql | bool %}root_shard_{{ sahara_database_shard_id }}{% else %}{{ database_user }}{% endif %}"
-sahara_database_shard_id: "{{ mariadb_default_database_shard_id | int }}"
-sahara_database_shard:
-  users:
-    - user: "{{ sahara_database_user }}"
-      password: "{{ sahara_database_password }}"
-  rules:
-    - schema: "{{ sahara_database_name }}"
-      shard_id: "{{ sahara_database_shard_id }}"
-
-
-####################
-# Docker
-####################
-sahara_tag: "{{ openstack_tag }}"
-
-sahara_engine_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/sahara-engine"
-sahara_engine_tag: "{{ sahara_tag }}"
-sahara_engine_image_full: "{{ sahara_engine_image }}:{{ sahara_engine_tag }}"
-
-sahara_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/sahara-api"
-sahara_api_tag: "{{ sahara_tag }}"
-sahara_api_image_full: "{{ sahara_api_image }}:{{ sahara_api_tag }}"
-
-sahara_api_dimensions: "{{ default_container_dimensions }}"
-sahara_engine_dimensions: "{{ default_container_dimensions }}"
-
-sahara_api_enable_healthchecks: "{{ enable_container_healthchecks }}"
-sahara_api_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
-sahara_api_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
-sahara_api_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-sahara_api_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ sahara_api_port }}"]
-sahara_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
-sahara_api_healthcheck:
-  interval: "{{ sahara_api_healthcheck_interval }}"
-  retries: "{{ sahara_api_healthcheck_retries }}"
-  start_period: "{{ sahara_api_healthcheck_start_period }}"
-  test: "{% if sahara_api_enable_healthchecks | bool %}{{ sahara_api_healthcheck_test }}{% else %}NONE{% endif %}"
-  timeout: "{{ sahara_api_healthcheck_timeout }}"
-
-sahara_engine_enable_healthchecks: "{{ enable_container_healthchecks }}"
-sahara_engine_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
-sahara_engine_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
-sahara_engine_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-sahara_engine_healthcheck_test: ["CMD-SHELL", "healthcheck_port sahara-engine {{ om_rpc_port }}"]
-sahara_engine_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
-sahara_engine_healthcheck:
-  interval: "{{ sahara_engine_healthcheck_interval }}"
-  retries: "{{ sahara_engine_healthcheck_retries }}"
-  start_period: "{{ sahara_engine_healthcheck_start_period }}"
-  test: "{% if sahara_engine_enable_healthchecks | bool %}{{ sahara_engine_healthcheck_test }}{% else %}NONE{% endif %}"
-  timeout: "{{ sahara_engine_healthcheck_timeout }}"
-
-sahara_api_default_volumes:
-  - "{{ node_config_directory }}/sahara-api/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
-  - "sahara:/var/lib/sahara/"
-  - "kolla_logs:/var/log/kolla/"
-  - "{{ kolla_dev_repos_directory ~ '/sahara/sahara:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/sahara' if sahara_dev_mode | bool else '' }}"
-sahara_engine_default_volumes:
-  - "{{ node_config_directory }}/sahara-engine/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
-  - "sahara:/var/lib/sahara/"
-  - "kolla_logs:/var/log/kolla/"
-  - "/run:/run{{ ':shared' if kolla_container_engine == 'docker' else '' }}"
-  - "{{ kolla_dev_repos_directory ~ '/sahara/sahara:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/sahara' if sahara_dev_mode | bool else '' }}"
-
-sahara_extra_volumes: "{{ default_extra_volumes }}"
-sahara_api_extra_volumes: "{{ sahara_extra_volumes }}"
-sahara_engine_extra_volumes: "{{ sahara_extra_volumes }}"
-
-####################
-# OpenStack
-####################
-sahara_internal_endpoint: "{{ sahara_internal_fqdn | kolla_url(internal_protocol, sahara_api_port) }}"
-sahara_public_endpoint: "{{ sahara_external_fqdn | kolla_url(public_protocol, sahara_api_public_port) }}"
-
-sahara_logging_debug: "{{ openstack_logging_debug }}"
-
-sahara_keystone_user: "sahara"
-
-openstack_sahara_auth: "{{ openstack_auth }}"
-
-sahara_api_workers: "{{ openstack_service_workers }}"
-
-####################
-## Kolla
-#####################
-sahara_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
-sahara_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
-sahara_dev_mode: "{{ kolla_dev_mode }}"
-sahara_source_version: "{{ kolla_source_version }}"
-
-####################
-# Notifications
-####################
-sahara_notification_topics:
-  - name: notifications
-    enabled: "{{ enable_ceilometer | bool }}"
-
-sahara_enabled_notification_topics: "{{ sahara_notification_topics | selectattr('enabled', 'equalto', true) | list }}"
-
-####################
-# Keystone
-####################
-sahara_ks_services:
-  - name: "sahara"
-    type: "data-processing"
-    description: "Sahara Data Processing"
-    endpoints:
-      - {'interface': 'internal', 'url': '{{ sahara_internal_endpoint }}'}
-      - {'interface': 'public', 'url': '{{ sahara_public_endpoint }}'}
-
-sahara_ks_users:
-  - project: "service"
-    user: "{{ sahara_keystone_user }}"
-    password: "{{ sahara_keystone_password }}"
-    role: "admin"
diff --git a/ansible/roles/sahara/handlers/main.yml b/ansible/roles/sahara/handlers/main.yml
deleted file mode 100644
index eedc5c4ad8..0000000000
--- a/ansible/roles/sahara/handlers/main.yml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-- name: Restart sahara-api container
-  vars:
-    service_name: "sahara-api"
-    service: "{{ sahara_services[service_name] }}"
-  become: true
-  kolla_container:
-    action: "recreate_or_restart_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ service.container_name }}"
-    image: "{{ service.image }}"
-    volumes: "{{ service.volumes | reject('equalto', '') | list }}"
-    dimensions: "{{ service.dimensions }}"
-    healthcheck: "{{ service.healthcheck | default(omit) }}"
-  when:
-    - kolla_action != "config"
-
-- name: Restart sahara-engine container
-  vars:
-    service_name: "sahara-engine"
-    service: "{{ sahara_services[service_name] }}"
-  become: true
-  kolla_container:
-    action: "recreate_or_restart_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ service.container_name }}"
-    image: "{{ service.image }}"
-    volumes: "{{ service.volumes | reject('equalto', '') | list }}"
-    privileged: "{{ service.privileged | default(False) }}"
-    dimensions: "{{ service.dimensions }}"
-    healthcheck: "{{ service.healthcheck | default(omit) }}"
-  when:
-    - kolla_action != "config"
diff --git a/ansible/roles/sahara/tasks/bootstrap.yml b/ansible/roles/sahara/tasks/bootstrap.yml
deleted file mode 100644
index 4df9410f81..0000000000
--- a/ansible/roles/sahara/tasks/bootstrap.yml
+++ /dev/null
@@ -1,38 +0,0 @@
----
-- name: Creating sahara database
-  become: true
-  kolla_toolbox:
-    container_engine: "{{ kolla_container_engine }}"
-    module_name: mysql_db
-    module_args:
-      login_host: "{{ database_address }}"
-      login_port: "{{ database_port }}"
-      login_user: "{{ sahara_database_shard_root_user }}"
-      login_password: "{{ database_password }}"
-      name: "{{ sahara_database_name }}"
-  run_once: True
-  delegate_to: "{{ groups['sahara-api'][0] }}"
-  when:
-    - not use_preconfigured_databases | bool
-
-- name: Creating sahara database user and setting permissions
-  become: true
-  kolla_toolbox:
-    container_engine: "{{ kolla_container_engine }}"
-    module_name: mysql_user
-    module_args:
-      login_host: "{{ database_address }}"
-      login_port: "{{ database_port }}"
-      login_user: "{{ sahara_database_shard_root_user }}"
-      login_password: "{{ database_password }}"
-      name: "{{ sahara_database_user }}"
-      password: "{{ sahara_database_password }}"
-      host: "%"
-      priv: "{{ sahara_database_name }}.*:ALL"
-      append_privs: "yes"
-  run_once: True
-  delegate_to: "{{ groups['sahara-api'][0] }}"
-  when:
-    - not use_preconfigured_databases | bool
-
-- import_tasks: bootstrap_service.yml
diff --git a/ansible/roles/sahara/tasks/bootstrap_service.yml b/ansible/roles/sahara/tasks/bootstrap_service.yml
deleted file mode 100644
index 39cb3a7490..0000000000
--- a/ansible/roles/sahara/tasks/bootstrap_service.yml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-- name: Running Sahara bootstrap container
-  vars:
-    sahara_api: "{{ sahara_services['sahara-api'] }}"
-  become: true
-  kolla_container:
-    action: "start_container"
-    common_options: "{{ docker_common_options }}"
-    detach: False
-    environment:
-      KOLLA_BOOTSTRAP:
-      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-    image: "{{ sahara_api.image }}"
-    labels:
-      BOOTSTRAP:
-    name: "bootstrap_sahara"
-    restart_policy: oneshot
-    volumes: "{{ sahara_api.volumes | reject('equalto', '') | list }}"
-  run_once: True
-  delegate_to: "{{ groups[sahara_api.group][0] }}"
diff --git a/ansible/roles/sahara/tasks/check-containers.yml b/ansible/roles/sahara/tasks/check-containers.yml
deleted file mode 100644
index 4e8f499af5..0000000000
--- a/ansible/roles/sahara/tasks/check-containers.yml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-- name: Check sahara containers
-  become: true
-  kolla_container:
-    action: "compare_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ item.value.container_name }}"
-    image: "{{ item.value.image }}"
-    privileged: "{{ item.value.privileged | default(False) }}"
-    volumes: "{{ item.value.volumes | reject('equalto', '') | list }}"
-    dimensions: "{{ item.value.dimensions }}"
-    healthcheck: "{{ item.value.healthcheck | default(omit) }}"
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ sahara_services }}"
-  notify:
-    - "Restart {{ item.key }} container"
diff --git a/ansible/roles/sahara/tasks/check.yml b/ansible/roles/sahara/tasks/check.yml
deleted file mode 100644
index ed97d539c0..0000000000
--- a/ansible/roles/sahara/tasks/check.yml
+++ /dev/null
@@ -1 +0,0 @@
----
diff --git a/ansible/roles/sahara/tasks/clone.yml b/ansible/roles/sahara/tasks/clone.yml
deleted file mode 100644
index 6385f6c236..0000000000
--- a/ansible/roles/sahara/tasks/clone.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-- name: Cloning sahara source repository for development
-  become: true
-  git:
-    repo: "{{ sahara_git_repository }}"
-    dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
-    update: "{{ sahara_dev_repos_pull }}"
-    version: "{{ sahara_source_version }}"
diff --git a/ansible/roles/sahara/tasks/config.yml b/ansible/roles/sahara/tasks/config.yml
deleted file mode 100644
index bed6647e8b..0000000000
--- a/ansible/roles/sahara/tasks/config.yml
+++ /dev/null
@@ -1,83 +0,0 @@
----
-- name: Ensuring config directories exist
-  file:
-    path: "{{ node_config_directory }}/{{ item.key }}"
-    state: "directory"
-    owner: "{{ config_owner_user }}"
-    group: "{{ config_owner_group }}"
-    mode: "0770"
-  become: true
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ sahara_services }}"
-
-- name: Check if policies shall be overwritten
-  stat:
-    path: "{{ item }}"
-  delegate_to: localhost
-  run_once: True
-  register: sahara_policy
-  with_first_found:
-    - files: "{{ supported_policy_format_list }}"
-      paths:
-        - "{{ node_custom_config }}/sahara/"
-      skip: true
-
-- name: Set sahara policy file
-  set_fact:
-    sahara_policy_file: "{{ sahara_policy.results.0.stat.path | basename }}"
-    sahara_policy_file_path: "{{ sahara_policy.results.0.stat.path }}"
-  when:
-    - sahara_policy.results
-
-- include_tasks: copy-certs.yml
-  when:
-    - kolla_copy_ca_into_containers | bool
-
-- name: Copying over config.json files for services
-  template:
-    src: "{{ item.key }}.json.j2"
-    dest: "{{ node_config_directory }}/{{ item.key }}/config.json"
-    mode: "0660"
-  become: true
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ sahara_services }}"
-  notify:
-    - Restart {{ item.key }} container
-
-- name: Copying over sahara.conf
-  vars:
-    service_name: "{{ item.key }}"
-  merge_configs:
-    sources:
-      - "{{ role_path }}/templates/sahara.conf.j2"
-      - "{{ node_custom_config }}/global.conf"
-      - "{{ node_custom_config }}/sahara.conf"
-      - "{{ node_custom_config }}/sahara/{{ item.key }}.conf"
-      - "{{ node_custom_config }}/sahara/{{ inventory_hostname }}/sahara.conf"
-    dest: "{{ node_config_directory }}/{{ item.key }}/sahara.conf"
-    mode: "0660"
-  become: true
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ sahara_services }}"
-  notify:
-    - Restart {{ item.key }} container
-
-- name: Copying over existing policy file
-  template:
-    src: "{{ sahara_policy_file_path }}"
-    dest: "{{ node_config_directory }}/{{ item.key }}/{{ sahara_policy_file }}"
-    mode: "0660"
-  become: true
-  when:
-    - sahara_policy_file is defined
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ sahara_services }}"
-  notify:
-    - Restart {{ item.key }} container
diff --git a/ansible/roles/sahara/tasks/config_validate.yml b/ansible/roles/sahara/tasks/config_validate.yml
deleted file mode 100644
index ea503b9d88..0000000000
--- a/ansible/roles/sahara/tasks/config_validate.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- import_role:
-    name: service-config-validate
-  vars:
-    service_config_validate_services: "{{ sahara_services }}"
-    service_name: "{{ project_name }}"
-    service_config_validation: "{{ sahara_config_validation }}"
diff --git a/ansible/roles/sahara/tasks/copy-certs.yml b/ansible/roles/sahara/tasks/copy-certs.yml
deleted file mode 100644
index e407b87540..0000000000
--- a/ansible/roles/sahara/tasks/copy-certs.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: "Copy certificates and keys for {{ project_name }}"
-  import_role:
-    role: service-cert-copy
-  vars:
-    project_services: "{{ sahara_services }}"
diff --git a/ansible/roles/sahara/tasks/deploy-containers.yml b/ansible/roles/sahara/tasks/deploy-containers.yml
deleted file mode 100644
index eb24ab5c7a..0000000000
--- a/ansible/roles/sahara/tasks/deploy-containers.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: check-containers.yml
diff --git a/ansible/roles/sahara/tasks/deploy.yml b/ansible/roles/sahara/tasks/deploy.yml
deleted file mode 100644
index 968cdfe078..0000000000
--- a/ansible/roles/sahara/tasks/deploy.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- import_tasks: register.yml
-
-- import_tasks: config.yml
-
-- import_tasks: check-containers.yml
-
-- include_tasks: clone.yml
-  when: sahara_dev_mode | bool
-
-- import_tasks: bootstrap.yml
-
-- name: Flush handlers
-  meta: flush_handlers
diff --git a/ansible/roles/sahara/tasks/loadbalancer.yml b/ansible/roles/sahara/tasks/loadbalancer.yml
deleted file mode 100644
index 178ba1cafa..0000000000
--- a/ansible/roles/sahara/tasks/loadbalancer.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: "Configure loadbalancer for {{ project_name }}"
-  import_role:
-    name: loadbalancer-config
-  vars:
-    project_services: "{{ sahara_services }}"
-  tags: always
diff --git a/ansible/roles/sahara/tasks/main.yml b/ansible/roles/sahara/tasks/main.yml
deleted file mode 100644
index bc5d1e6257..0000000000
--- a/ansible/roles/sahara/tasks/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- include_tasks: "{{ kolla_action }}.yml"
diff --git a/ansible/roles/sahara/tasks/precheck.yml b/ansible/roles/sahara/tasks/precheck.yml
deleted file mode 100644
index a0e3080496..0000000000
--- a/ansible/roles/sahara/tasks/precheck.yml
+++ /dev/null
@@ -1,26 +0,0 @@
----
-- import_role:
-    name: service-precheck
-  vars:
-    service_precheck_services: "{{ sahara_services }}"
-    service_name: "{{ project_name }}"
-
-- name: Get container facts
-  become: true
-  kolla_container_facts:
-    container_engine: "{{ kolla_container_engine }}"
-    name:
-      - sahara_api
-  check_mode: false
-  register: container_facts
-
-- name: Checking free port for Sahara API
-  wait_for:
-    host: "{{ api_interface_address }}"
-    port: "{{ sahara_api_port }}"
-    connect_timeout: 1
-    timeout: 1
-    state: stopped
-  when:
-    - container_facts['sahara_api'] is not defined
-    - inventory_hostname in groups['sahara-api']
diff --git a/ansible/roles/sahara/tasks/pull.yml b/ansible/roles/sahara/tasks/pull.yml
deleted file mode 100644
index 53f9c5fda1..0000000000
--- a/ansible/roles/sahara/tasks/pull.yml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-- import_role:
-    role: service-images-pull
diff --git a/ansible/roles/sahara/tasks/reconfigure.yml b/ansible/roles/sahara/tasks/reconfigure.yml
deleted file mode 100644
index 5b10a7e111..0000000000
--- a/ansible/roles/sahara/tasks/reconfigure.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: deploy.yml
diff --git a/ansible/roles/sahara/tasks/register.yml b/ansible/roles/sahara/tasks/register.yml
deleted file mode 100644
index 17c71fae28..0000000000
--- a/ansible/roles/sahara/tasks/register.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- import_role:
-    name: service-ks-register
-  vars:
-    service_ks_register_auth: "{{ openstack_sahara_auth }}"
-    service_ks_register_services: "{{ sahara_ks_services }}"
-    service_ks_register_users: "{{ sahara_ks_users }}"
diff --git a/ansible/roles/sahara/tasks/stop.yml b/ansible/roles/sahara/tasks/stop.yml
deleted file mode 100644
index 28c1c535b1..0000000000
--- a/ansible/roles/sahara/tasks/stop.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- import_role:
-    name: service-stop
-  vars:
-    project_services: "{{ sahara_services }}"
-    service_name: "{{ project_name }}"
diff --git a/ansible/roles/sahara/tasks/upgrade.yml b/ansible/roles/sahara/tasks/upgrade.yml
deleted file mode 100644
index 6ba9f99799..0000000000
--- a/ansible/roles/sahara/tasks/upgrade.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-- import_tasks: config.yml
-
-- import_tasks: check-containers.yml
-
-- import_tasks: bootstrap_service.yml
-
-- name: Flush handlers
-  meta: flush_handlers
diff --git a/ansible/roles/sahara/templates/sahara-api.json.j2 b/ansible/roles/sahara/templates/sahara-api.json.j2
deleted file mode 100644
index 4c0378fda3..0000000000
--- a/ansible/roles/sahara/templates/sahara-api.json.j2
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-    "command": "sahara-api --config-file /etc/sahara/sahara.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/sahara.conf",
-            "dest": "/etc/sahara/sahara.conf",
-            "owner": "sahara",
-            "perm": "0600"
-        }{% if sahara_policy_file is defined %},
-        {
-            "source": "{{ container_config_directory }}/{{ sahara_policy_file }}",
-            "dest": "/etc/sahara/{{ sahara_policy_file }}",
-            "owner": "sahara",
-            "perm": "0600"
-        }{% endif %}
-    ],
-    "permissions": [
-        {
-            "path": "/var/lib/sahara",
-            "owner": "sahara:sahara",
-            "recurse": true
-        },
-        {
-            "path": "/var/log/kolla/sahara",
-            "owner": "sahara:sahara",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/sahara/templates/sahara-engine.json.j2 b/ansible/roles/sahara/templates/sahara-engine.json.j2
deleted file mode 100644
index 11f32fa6a9..0000000000
--- a/ansible/roles/sahara/templates/sahara-engine.json.j2
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-    "command": "sahara-engine --config-file /etc/sahara/sahara.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/sahara.conf",
-            "dest": "/etc/sahara/sahara.conf",
-            "owner": "sahara",
-            "perm": "0600"
-        }{% if sahara_policy_file is defined %},
-        {
-            "source": "{{ container_config_directory }}/{{ sahara_policy_file }}",
-            "dest": "/etc/sahara/{{ sahara_policy_file }}",
-            "owner": "sahara",
-            "perm": "0600"
-        }{% endif %}
-    ],
-    "permissions": [
-        {
-            "path": "/var/lib/sahara",
-            "owner": "sahara:sahara",
-            "recurse": true
-        },
-        {
-            "path": "/var/log/kolla/sahara",
-            "owner": "sahara:sahara",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/sahara/templates/sahara.conf.j2 b/ansible/roles/sahara/templates/sahara.conf.j2
deleted file mode 100644
index 938e9dec53..0000000000
--- a/ansible/roles/sahara/templates/sahara.conf.j2
+++ /dev/null
@@ -1,72 +0,0 @@
-[DEFAULT]
-debug = {{ sahara_logging_debug }}
-log_dir = /var/log/kolla/sahara
-port = {{ sahara_api_port }}
-host = {{ api_interface_address }}
-transport_url = {{ rpc_transport_url }}
-
-api_workers = {{ sahara_api_workers }}
-use_floating_ips = False
-use_namespaces = True
-use_rootwrap = True
-
-[database]
-connection = mysql+pymysql://{{ sahara_database_user }}:{{ sahara_database_password }}@{{ sahara_database_address }}/{{ sahara_database_name }}
-connection_recycle_time = {{ database_connection_recycle_time }}
-max_pool_size = {{ database_max_pool_size }}
-
-[keystone_authtoken]
-service_type = data-processing
-auth_url = {{ keystone_internal_url }}
-auth_type = password
-user_domain_name = {{ default_project_domain_name }}
-project_name = service
-project_domain_name = {{ default_project_domain_name }}
-username = {{ sahara_keystone_user }}
-password = {{ sahara_keystone_password }}
-cafile = {{ openstack_cacert }}
-region_name = {{ openstack_region_name }}
-
-memcache_security_strategy = ENCRYPT
-memcache_secret_key = {{ memcache_secret_key }}
-memcached_servers = {% for host in groups['memcached'] %}{{ 'api' | kolla_address(host) | put_address_in_context('memcache') }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %}
-
-[oslo_messaging_notifications]
-transport_url = {{ notify_transport_url }}
-{% if sahara_enabled_notification_topics %}
-driver = messagingv2
-topics = {{ sahara_enabled_notification_topics | map(attribute='name') | join(',') }}
-{% else %}
-driver = noop
-{% endif %}
-
-[oslo_messaging_rabbit]
-heartbeat_in_pthread = false
-{% if om_enable_rabbitmq_tls | bool %}
-ssl = true
-ssl_ca_file = {{ om_rabbitmq_cacert }}
-{% endif %}
-{% if om_enable_rabbitmq_high_availability | bool %}
-amqp_durable_queues = true
-{% endif %}
-{% if om_enable_rabbitmq_quorum_queues | bool %}
-rabbit_quorum_queue = true
-{% endif %}
-
-{% if sahara_policy_file is defined %}
-[oslo_policy]
-policy_file = {{ sahara_policy_file }}
-{% endif %}
-
-
-[profiler]
-enabled = False
-
-[trustee]
-project_domain_name = {{ default_project_domain_name }}
-project_name = service
-user_domain_name = {{ default_user_domain_name }}
-username = {{ sahara_keystone_user }}
-password = {{ sahara_keystone_password }}
-auth_url = {{ keystone_internal_url }}
-cafile = {{ openstack_cacert }}
diff --git a/ansible/roles/sahara/vars/main.yml b/ansible/roles/sahara/vars/main.yml
deleted file mode 100644
index 8a8430fe65..0000000000
--- a/ansible/roles/sahara/vars/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-project_name: "sahara"
diff --git a/ansible/site.yml b/ansible/site.yml
index d2d51a29e9..281c6a41d0 100644
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -66,7 +66,6 @@
         - enable_prometheus_{{ enable_prometheus | bool }}
         - enable_rabbitmq_{{ enable_rabbitmq | bool }}
         - enable_redis_{{ enable_redis | bool }}
-        - enable_sahara_{{ enable_sahara | bool }}
         - enable_senlin_{{ enable_senlin | bool }}
         - enable_skyline_{{ enable_skyline | bool }}
         - enable_swift_{{ enable_swift | bool }}
@@ -296,11 +295,6 @@
             role_rabbitmq_cluster_cookie:
             role_rabbitmq_groups:
           when: enable_rabbitmq | bool or enable_outward_rabbitmq | bool
-        - include_role:
-            name: sahara
-            tasks_from: loadbalancer
-          tags: sahara
-          when: enable_sahara | bool
         - include_role:
             name: senlin
             tasks_from: loadbalancer
@@ -819,21 +813,6 @@
     - { role: mistral,
         tags: mistral }
 
-- name: Apply role sahara
-  gather_facts: false
-  hosts:
-    - sahara-api
-    - sahara-engine
-    - '&enable_sahara_True'
-  serial: '{{ kolla_serial|default("0") }}'
-  max_fail_percentage: >-
-    {{ sahara_max_fail_percentage |
-       default(kolla_max_fail_percentage) |
-       default(100) }}
-  roles:
-    - { role: sahara,
-        tags: sahara }
-
 - name: Apply role manila
   gather_facts: false
   hosts:
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index e7f2e403e7..8e457f018d 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -370,7 +370,6 @@ workaround_ansible_issue_8743: yes
 #enable_horizon_murano: "{{ enable_murano | bool }}"
 #enable_horizon_neutron_vpnaas: "{{ enable_neutron_vpnaas | bool }}"
 #enable_horizon_octavia: "{{ enable_octavia | bool }}"
-#enable_horizon_sahara: "{{ enable_sahara | bool }}"
 #enable_horizon_senlin: "{{ enable_senlin | bool }}"
 #enable_horizon_tacker: "{{ enable_tacker | bool }}"
 #enable_horizon_trove: "{{ enable_trove | bool }}"
@@ -424,7 +423,6 @@ workaround_ansible_issue_8743: yes
 #enable_prometheus: "no"
 #enable_proxysql: "no"
 #enable_redis: "no"
-#enable_sahara: "no"
 #enable_senlin: "no"
 #enable_skyline: "no"
 #enable_swift: "no"
diff --git a/etc/kolla/passwords.yml b/etc/kolla/passwords.yml
index 07fac8aa97..064cce3e8d 100644
--- a/etc/kolla/passwords.yml
+++ b/etc/kolla/passwords.yml
@@ -92,9 +92,6 @@ cloudkitty_keystone_password:
 cyborg_database_password:
 cyborg_keystone_password:
 
-sahara_database_password:
-sahara_keystone_password:
-
 designate_database_password:
 designate_keystone_password:
 # This option must be UUID4 value in string format
diff --git a/releasenotes/notes/drop-sahara-9242926ee36e5316.yaml b/releasenotes/notes/drop-sahara-9242926ee36e5316.yaml
new file mode 100644
index 0000000000..7d50047db7
--- /dev/null
+++ b/releasenotes/notes/drop-sahara-9242926ee36e5316.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+  - |
+    Support for deploying ``Sahara`` has been dropped.
diff --git a/tests/templates/inventory.j2 b/tests/templates/inventory.j2
index f173cb884d..b44fb38465 100644
--- a/tests/templates/inventory.j2
+++ b/tests/templates/inventory.j2
@@ -191,9 +191,6 @@ control
 [magnum:children]
 control
 
-[sahara:children]
-control
-
 [mistral:children]
 control
 
@@ -452,13 +449,6 @@ magnum
 [magnum-conductor:children]
 magnum
 
-# Sahara
-[sahara-api:children]
-sahara
-
-[sahara-engine:children]
-sahara
-
 # Mistral
 [mistral-api:children]
 mistral