diff --git a/README.rst b/README.rst
index 0d3300c68c..eb03779456 100644
--- a/README.rst
+++ b/README.rst
@@ -66,7 +66,6 @@ Kolla Ansible deploys containers for the following OpenStack projects:
 - `Tacker <https://docs.openstack.org/tacker/latest/>`__
 - `Trove <https://docs.openstack.org/trove/latest/>`__
 - `Venus <https://docs.openstack.org/venus/latest/>`__
-- `Vitrage <https://docs.openstack.org/vitrage/latest/>`__ (deprecated)
 - `Watcher <https://docs.openstack.org/watcher/latest/>`__
 - `Zun <https://docs.openstack.org/zun/latest/>`__
 
diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 64ea14c04c..a86551f9fb 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -660,12 +660,6 @@ zun_cni_daemon_port: "9036"
 zun_internal_fqdn: "{{ kolla_internal_fqdn }}"
 zun_external_fqdn: "{{ kolla_external_fqdn }}"
 
-vitrage_internal_fqdn: "{{ kolla_internal_fqdn }}"
-vitrage_external_fqdn: "{{ kolla_external_fqdn }}"
-vitrage_api_port: "8999"
-vitrage_api_public_port: "{{ haproxy_single_external_frontend_public_port if haproxy_single_external_frontend | bool else vitrage_api_port }}"
-vitrage_api_listen_port: "{{ vitrage_api_port }}"
-
 public_protocol: "{{ 'https' if kolla_enable_tls_external | bool else 'http' }}"
 internal_protocol: "{{ 'https' if kolla_enable_tls_internal | bool else 'http' }}"
 
@@ -786,7 +780,6 @@ enable_horizon_neutron_vpnaas: "{{ enable_neutron_vpnaas | bool }}"
 enable_horizon_octavia: "{{ enable_octavia | bool }}"
 enable_horizon_tacker: "{{ enable_tacker | bool }}"
 enable_horizon_trove: "{{ enable_trove | bool }}"
-enable_horizon_vitrage: "{{ enable_vitrage | bool }}"
 enable_horizon_watcher: "{{ enable_watcher | bool }}"
 enable_horizon_zun: "{{ enable_zun | bool }}"
 enable_influxdb: "{{ enable_cloudkitty | bool and cloudkitty_storage_backend == 'influxdb' }}"
@@ -848,7 +841,6 @@ enable_telegraf: "no"
 enable_trove: "no"
 enable_trove_singletenant: "no"
 enable_venus: "no"
-enable_vitrage: "no"
 enable_watcher: "no"
 enable_zun: "no"
 
@@ -1248,12 +1240,6 @@ prometheus_msteams_webhook_url:
 prometheus_public_endpoint: "{{ prometheus_external_fqdn | kolla_url(public_protocol, prometheus_public_port) }}"
 prometheus_internal_endpoint: "{{ prometheus_internal_fqdn | kolla_url(internal_protocol, prometheus_port) }}"
 
-############
-# Vitrage
-############
-enable_vitrage_prometheus_datasource: "{{ enable_prometheus | bool }}"
-
-
 ####################
 # InfluxDB options
 ####################
@@ -1299,9 +1285,6 @@ s3_secret_key:
 # telemetry data.
 telegraf_enable_docker_input: "no"
 
-vitrage_internal_endpoint: "{{ kolla_internal_fqdn | kolla_url(internal_protocol, vitrage_api_port) }}"
-vitrage_public_endpoint: "{{ kolla_external_fqdn | kolla_url(public_protocol, vitrage_api_public_port) }}"
-
 ####################
 # Grafana
 ####################
diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index 26fa845a05..77514bfe8b 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -137,9 +137,6 @@ compute
 [tacker:children]
 control
 
-[vitrage:children]
-control
-
 [trove:children]
 control
 
@@ -515,22 +512,6 @@ tacker
 [tacker-conductor:children]
 tacker
 
-# Vitrage
-[vitrage-api:children]
-vitrage
-
-[vitrage-notifier:children]
-vitrage
-
-[vitrage-graph:children]
-vitrage
-
-[vitrage-ml:children]
-vitrage
-
-[vitrage-persistor:children]
-vitrage
-
 # Blazar
 [blazar-api:children]
 blazar
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index bc2a9063db..c05a042732 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -158,9 +158,6 @@ control
 [trove:children]
 control
 
-[vitrage:children]
-control
-
 [watcher:children]
 control
 
@@ -534,22 +531,6 @@ tacker
 [tacker-conductor:children]
 tacker
 
-# Vitrage
-[vitrage-api:children]
-vitrage
-
-[vitrage-notifier:children]
-vitrage
-
-[vitrage-graph:children]
-vitrage
-
-[vitrage-ml:children]
-vitrage
-
-[vitrage-persistor:children]
-vitrage
-
 # Blazar
 [blazar-api:children]
 blazar
diff --git a/ansible/roles/aodh/defaults/main.yml b/ansible/roles/aodh/defaults/main.yml
index e43c824810..5f54eb5491 100644
--- a/ansible/roles/aodh/defaults/main.yml
+++ b/ansible/roles/aodh/defaults/main.yml
@@ -90,8 +90,6 @@ aodh_database_shard:
 aodh_notification_topics:
   - name: notifications
     enabled: "{{ enable_ceilometer | bool }}"
-  - name: vitrage_notifications
-    enabled: "{{ enable_vitrage | bool }}"
 
 aodh_enabled_notification_topics: "{{ aodh_notification_topics | selectattr('enabled', 'equalto', true) | list }}"
 
diff --git a/ansible/roles/cinder/defaults/main.yml b/ansible/roles/cinder/defaults/main.yml
index dbeb27389c..db000ae035 100644
--- a/ansible/roles/cinder/defaults/main.yml
+++ b/ansible/roles/cinder/defaults/main.yml
@@ -283,8 +283,6 @@ cinder_enabled_backends: "{{ cinder_backends | selectattr('enabled', 'equalto',
 cinder_notification_topics:
   - name: notifications
     enabled: "{{ enable_ceilometer | bool }}"
-  - name: vitrage_notifications
-    enabled: "{{ enable_vitrage | bool }}"
 
 cinder_enabled_notification_topics: "{{ cinder_notification_topics | selectattr('enabled', 'equalto', true) | list }}"
 
diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index 20a44f5aa1..06c2b8556e 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -256,7 +256,6 @@
       - { name: "tacker", enabled: "{{ enable_tacker | bool }}" }
       - { name: "trove", enabled: "{{ enable_trove | bool }}" }
       - { name: "venus", enabled: "{{ enable_venus | bool }}" }
-      - { name: "vitrage", enabled: "{{ enable_vitrage | bool }}" }
       - { name: "watcher", enabled: "{{ enable_watcher | bool }}" }
       - { name: "zun", enabled: "{{ enable_zun | bool }}" }
   template:
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 f68293d5d0..ee761a34f0 100644
--- a/ansible/roles/common/templates/conf/filter/01-rewrite.conf.j2
+++ b/ansible/roles/common/templates/conf/filter/01-rewrite.conf.j2
@@ -8,7 +8,7 @@
   </rule>
   <rule>
     key     programname
-    pattern ^(aodh_wsgi_access|barbican_api_uwsgi_access|zun_api_wsgi_access|vitrage_wsgi_access)$
+    pattern ^(aodh_wsgi_access|barbican_api_uwsgi_access|zun_api_wsgi_access)$
     tag wsgi_access
   </rule>
   <rule>
@@ -126,11 +126,6 @@
     pattern ^(tacker-server|tacker-conductor)$
     tag openstack_python
   </rule>
-  <rule>
-    key     programname
-    pattern ^(vitrage-ml|vitrage-notifier|vitrage-graph|vitrage-persistor)$
-    tag openstack_python
-</rule>
   <rule>
     key     programname
     pattern ^(blazar-api|blazar-manager)$
diff --git a/ansible/roles/common/templates/cron-logrotate-vitrage.conf.j2 b/ansible/roles/common/templates/cron-logrotate-vitrage.conf.j2
deleted file mode 100644
index 08409f080f..0000000000
--- a/ansible/roles/common/templates/cron-logrotate-vitrage.conf.j2
+++ /dev/null
@@ -1,3 +0,0 @@
-"/var/log/kolla/vitrage/*.log"
-{
-}
diff --git a/ansible/roles/horizon/defaults/main.yml b/ansible/roles/horizon/defaults/main.yml
index 1a5e44846c..dcf4b52631 100644
--- a/ansible/roles/horizon/defaults/main.yml
+++ b/ansible/roles/horizon/defaults/main.yml
@@ -19,7 +19,6 @@ horizon_services:
       ENABLE_OCTAVIA: "{{ 'yes' if enable_horizon_octavia | bool else 'no' }}"
       ENABLE_TACKER: "{{ 'yes' if enable_horizon_tacker | bool else 'no' }}"
       ENABLE_TROVE: "{{ 'yes' if enable_horizon_trove | bool else 'no' }}"
-      ENABLE_VITRAGE: "{{ 'yes' if enable_horizon_vitrage | bool else 'no' }}"
       ENABLE_WATCHER: "{{ 'yes' if enable_horizon_watcher | bool else 'no' }}"
       ENABLE_ZUN: "{{ 'yes' if enable_horizon_zun | bool else 'no' }}"
       FORCE_GENERATE: "{{ 'yes' if horizon_dev_mode | bool else 'no' }}"
diff --git a/ansible/roles/loadbalancer/tasks/precheck.yml b/ansible/roles/loadbalancer/tasks/precheck.yml
index b8ced61e0a..41cca0f75d 100644
--- a/ansible/roles/loadbalancer/tasks/precheck.yml
+++ b/ansible/roles/loadbalancer/tasks/precheck.yml
@@ -729,18 +729,6 @@
     - haproxy_stat.find('zun_api') == -1
     - haproxy_vip_prechecks
 
-- name: Checking free port for Vitrage API HAProxy
-  wait_for:
-    host: "{{ kolla_internal_vip_address }}"
-    port: "{{ vitrage_api_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - enable_vitrage | bool
-    - inventory_hostname in groups['loadbalancer']
-    - haproxy_stat.find('vitrage_api') == -1
-    - haproxy_vip_prechecks
-
 - name: Firewalld checks
   block:
     - name: Check if firewalld is running  # noqa command-instead-of-module
diff --git a/ansible/roles/neutron/defaults/main.yml b/ansible/roles/neutron/defaults/main.yml
index b76d773369..fe01a5fc82 100644
--- a/ansible/roles/neutron/defaults/main.yml
+++ b/ansible/roles/neutron/defaults/main.yml
@@ -762,8 +762,6 @@ neutron_notification_topics:
     enabled: "{{ enable_ceilometer | bool or enable_neutron_infoblox_ipam_agent | bool }}"
   - name: "{{ designate_notifications_topic_name }}"
     enabled: "{{ designate_enable_notifications_sink | bool }}"
-  - name: vitrage_notifications
-    enabled: "{{ enable_vitrage | bool }}"
 
 neutron_enabled_notification_topics: "{{ neutron_notification_topics | selectattr('enabled', 'equalto', true) | list }}"
 
diff --git a/ansible/roles/nova-cell/defaults/main.yml b/ansible/roles/nova-cell/defaults/main.yml
index 4e07db6e89..f47fb0c3f6 100644
--- a/ansible/roles/nova-cell/defaults/main.yml
+++ b/ansible/roles/nova-cell/defaults/main.yml
@@ -525,8 +525,6 @@ nova_notification_topics:
     enabled: "{{ enable_ceilometer | bool or enable_neutron_infoblox_ipam_agent | bool }}"
   - name: "{{ designate_notifications_topic_name }}"
     enabled: "{{ designate_enable_notifications_sink | bool }}"
-  - name: vitrage_notifications
-    enabled: "{{ enable_vitrage | bool }}"
 
 nova_enabled_notification_topics: "{{ nova_notification_topics | selectattr('enabled', 'equalto', true) | list }}"
 
diff --git a/ansible/roles/nova/defaults/main.yml b/ansible/roles/nova/defaults/main.yml
index 444603ddee..b571abb900 100644
--- a/ansible/roles/nova/defaults/main.yml
+++ b/ansible/roles/nova/defaults/main.yml
@@ -260,8 +260,6 @@ nova_notification_topics:
     enabled: "{{ enable_ceilometer | bool or enable_neutron_infoblox_ipam_agent | bool }}"
   - name: "{{ designate_notifications_topic_name }}"
     enabled: "{{ designate_enable_notifications_sink | bool }}"
-  - name: vitrage_notifications
-    enabled: "{{ enable_vitrage | bool }}"
 
 nova_enabled_notification_topics: "{{ nova_notification_topics | selectattr('enabled', 'equalto', true) | list }}"
 
diff --git a/ansible/roles/prometheus/templates/prometheus-alertmanager.yml.j2 b/ansible/roles/prometheus/templates/prometheus-alertmanager.yml.j2
index 9e2dbd016e..19d974e5d7 100644
--- a/ansible/roles/prometheus/templates/prometheus-alertmanager.yml.j2
+++ b/ansible/roles/prometheus/templates/prometheus-alertmanager.yml.j2
@@ -12,15 +12,6 @@ route:
 {% endif %}
 receivers:
   - name: default-receiver
-{% if enable_vitrage | bool and enable_vitrage_prometheus_datasource | bool %}
-    webhook_configs:
-      - send_resolved: true
-        url: '{{ vitrage_public_endpoint }}/v1/event'
-        http_config:
-          basic_auth:
-            username: '{{ keystone_admin_user }}'
-            password: '{{ keystone_admin_password }}'
-{% endif %}
 {% if enable_prometheus_msteams | bool %}
   - name: 'prometheus-msteams'
     webhook_configs:
diff --git a/ansible/roles/vitrage/defaults/main.yml b/ansible/roles/vitrage/defaults/main.yml
deleted file mode 100644
index 781e51d188..0000000000
--- a/ansible/roles/vitrage/defaults/main.yml
+++ /dev/null
@@ -1,300 +0,0 @@
----
-vitrage_services:
-  vitrage-api:
-    container_name: vitrage_api
-    group: vitrage-api
-    enabled: true
-    image: "{{ vitrage_api_image_full }}"
-    volumes: "{{ vitrage_api_default_volumes + vitrage_api_extra_volumes }}"
-    dimensions: "{{ vitrage_api_dimensions }}"
-    healthcheck: "{{ vitrage_api_healthcheck }}"
-    haproxy:
-      vitrage_api:
-        enabled: "{{ enable_vitrage }}"
-        mode: "http"
-        external: false
-        port: "{{ vitrage_api_port }}"
-      vitrage_api_external:
-        enabled: "{{ enable_vitrage }}"
-        mode: "http"
-        external: true
-        external_fqdn: "{{ vitrage_external_fqdn }}"
-        port: "{{ vitrage_api_public_port }}"
-  vitrage-notifier:
-    container_name: vitrage_notifier
-    group: vitrage-notifier
-    enabled: true
-    image: "{{ vitrage_notifier_image_full }}"
-    volumes: "{{ vitrage_notifier_default_volumes + vitrage_notifier_extra_volumes }}"
-    dimensions: "{{ vitrage_notifier_dimensions }}"
-    healthcheck: "{{ vitrage_notifier_healthcheck }}"
-  vitrage-graph:
-    container_name: vitrage_graph
-    group: vitrage-graph
-    enabled: true
-    image: "{{ vitrage_graph_image_full }}"
-    volumes: "{{ vitrage_graph_default_volumes + vitrage_graph_extra_volumes }}"
-    dimensions: "{{ vitrage_graph_dimensions }}"
-    healthcheck: "{{ vitrage_graph_healthcheck }}"
-  vitrage-ml:
-    container_name: vitrage_ml
-    group: vitrage-ml
-    enabled: true
-    image: "{{ vitrage_ml_image_full }}"
-    volumes: "{{ vitrage_ml_default_volumes + vitrage_ml_extra_volumes }}"
-    dimensions: "{{ vitrage_ml_dimensions }}"
-    healthcheck: "{{ vitrage_ml_healthcheck }}"
-  vitrage-persistor:
-    container_name: vitrage_persistor
-    group: vitrage-persistor
-    enabled: true
-    image: "{{ vitrage_persistor_image_full }}"
-    volumes: "{{ vitrage_persistor_default_volumes + vitrage_persistor_extra_volumes }}"
-    dimensions: "{{ vitrage_persistor_dimensions }}"
-    healthcheck: "{{ vitrage_persistor_healthcheck }}"
-
-####################
-# Config Validate
-####################
-vitrage_config_validation:
-  - generator: "/vitrage/etc/vitrage/vitrage-config-generator.conf"
-    config: "/etc/vitrage/vitrage.conf"
-
-####################
-## Database
-#####################
-vitrage_database_name: "vitrage"
-vitrage_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}vitrage{% endif %}"
-vitrage_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}"
-
-####################
-# Database sharding
-####################
-vitrage_database_shard_root_user: "{% if enable_proxysql | bool %}root_shard_{{ vitrage_database_shard_id }}{% else %}{{ database_user }}{% endif %}"
-vitrage_database_shard_id: "{{ mariadb_default_database_shard_id | int }}"
-vitrage_database_shard:
-  users:
-    - user: "{{ vitrage_database_user }}"
-      password: "{{ vitrage_database_password }}"
-  rules:
-    - schema: "{{ vitrage_database_name }}"
-      shard_id: "{{ vitrage_database_shard_id }}"
-
-
-####################
-# Docker
-####################
-
-vitrage_tag: "{{ openstack_tag }}"
-
-vitrage_graph_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/vitrage-graph"
-vitrage_graph_tag: "{{ vitrage_tag }}"
-vitrage_graph_image_full: "{{ vitrage_graph_image }}:{{ vitrage_graph_tag }}"
-
-vitrage_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/vitrage-api"
-vitrage_api_tag: "{{ vitrage_tag }}"
-vitrage_api_image_full: "{{ vitrage_api_image }}:{{ vitrage_api_tag }}"
-
-vitrage_notifier_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/vitrage-notifier"
-vitrage_notifier_tag: "{{ vitrage_tag }}"
-vitrage_notifier_image_full: "{{ vitrage_notifier_image }}:{{ vitrage_notifier_tag }}"
-
-vitrage_ml_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/vitrage-ml"
-vitrage_ml_tag: "{{ vitrage_tag }}"
-vitrage_ml_image_full: "{{ vitrage_ml_image }}:{{ vitrage_ml_tag }}"
-
-vitrage_persistor_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/vitrage-persistor"
-vitrage_persistor_tag: "{{ vitrage_tag }}"
-vitrage_persistor_image_full: "{{ vitrage_persistor_image }}:{{ vitrage_persistor_tag }}"
-
-vitrage_api_dimensions: "{{ default_container_dimensions }}"
-vitrage_notifier_dimensions: "{{ default_container_dimensions }}"
-vitrage_graph_dimensions: "{{ default_container_dimensions }}"
-vitrage_ml_dimensions: "{{ default_container_dimensions }}"
-vitrage_persistor_dimensions: "{{ default_container_dimensions }}"
-
-vitrage_api_enable_healthchecks: "{{ enable_container_healthchecks }}"
-vitrage_api_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
-vitrage_api_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
-vitrage_api_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-vitrage_api_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ vitrage_api_port }}"]
-vitrage_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
-vitrage_api_healthcheck:
-  interval: "{{ vitrage_api_healthcheck_interval }}"
-  retries: "{{ vitrage_api_healthcheck_retries }}"
-  start_period: "{{ vitrage_api_healthcheck_start_period }}"
-  test: "{% if vitrage_api_enable_healthchecks | bool %}{{ vitrage_api_healthcheck_test }}{% else %}NONE{% endif %}"
-  timeout: "{{ vitrage_api_healthcheck_timeout }}"
-
-vitrage_notifier_enable_healthchecks: "{{ enable_container_healthchecks }}"
-vitrage_notifier_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
-vitrage_notifier_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
-vitrage_notifier_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-vitrage_notifier_healthcheck_test: ["CMD-SHELL", "healthcheck_port vitrage-notifier {{ om_rpc_port }}"]
-vitrage_notifier_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
-vitrage_notifier_healthcheck:
-  interval: "{{ vitrage_notifier_healthcheck_interval }}"
-  retries: "{{ vitrage_notifier_healthcheck_retries }}"
-  start_period: "{{ vitrage_notifier_healthcheck_start_period }}"
-  test: "{% if vitrage_notifier_enable_healthchecks | bool %}{{ vitrage_notifier_healthcheck_test }}{% else %}NONE{% endif %}"
-  timeout: "{{ vitrage_notifier_healthcheck_timeout }}"
-
-vitrage_graph_enable_healthchecks: "{{ enable_container_healthchecks }}"
-vitrage_graph_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
-vitrage_graph_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
-vitrage_graph_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-vitrage_graph_healthcheck_test: ["CMD-SHELL", "healthcheck_port vitrage-graph {{ om_rpc_port }}"]
-vitrage_graph_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
-vitrage_graph_healthcheck:
-  interval: "{{ vitrage_graph_healthcheck_interval }}"
-  retries: "{{ vitrage_graph_healthcheck_retries }}"
-  start_period: "{{ vitrage_graph_healthcheck_start_period }}"
-  test: "{% if vitrage_graph_enable_healthchecks | bool %}{{ vitrage_graph_healthcheck_test }}{% else %}NONE{% endif %}"
-  timeout: "{{ vitrage_graph_healthcheck_timeout }}"
-
-vitrage_ml_enable_healthchecks: "{{ enable_container_healthchecks }}"
-vitrage_ml_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
-vitrage_ml_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
-vitrage_ml_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-vitrage_ml_healthcheck_test: ["CMD-SHELL", "healthcheck_port vitrage-ml {{ om_rpc_port }}"]
-vitrage_ml_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
-vitrage_ml_healthcheck:
-  interval: "{{ vitrage_ml_healthcheck_interval }}"
-  retries: "{{ vitrage_ml_healthcheck_retries }}"
-  start_period: "{{ vitrage_ml_healthcheck_start_period }}"
-  test: "{% if vitrage_ml_enable_healthchecks | bool %}{{ vitrage_ml_healthcheck_test }}{% else %}NONE{% endif %}"
-  timeout: "{{ vitrage_ml_healthcheck_timeout }}"
-
-vitrage_persistor_enable_healthchecks: "{{ enable_container_healthchecks }}"
-vitrage_persistor_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
-vitrage_persistor_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
-vitrage_persistor_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-vitrage_persistor_healthcheck_test: ["CMD-SHELL", "healthcheck_port vitrage-persistor {{ om_rpc_port }}"]
-vitrage_persistor_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
-vitrage_persistor_healthcheck:
-  interval: "{{ vitrage_persistor_healthcheck_interval }}"
-  retries: "{{ vitrage_persistor_healthcheck_retries }}"
-  start_period: "{{ vitrage_persistor_healthcheck_start_period }}"
-  test: "{% if vitrage_persistor_enable_healthchecks | bool %}{{ vitrage_persistor_healthcheck_test }}{% else %}NONE{% endif %}"
-  timeout: "{{ vitrage_persistor_healthcheck_timeout }}"
-
-vitrage_api_default_volumes:
-  - "{{ node_config_directory }}/vitrage-api/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
-  - "{{ kolla_dev_repos_directory ~ '/vitrage/vitrage:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/vitrage' if vitrage_dev_mode | bool else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-vitrage_notifier_default_volumes:
-  - "{{ node_config_directory }}/vitrage-notifier/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
-  - "{{ kolla_dev_repos_directory ~ '/vitrage/vitrage:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/vitrage' if vitrage_dev_mode | bool else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-vitrage_graph_default_volumes:
-  - "{{ node_config_directory }}/vitrage-graph/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
-  - "{{ kolla_dev_repos_directory ~ '/vitrage/vitrage:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/vitrage' if vitrage_dev_mode | bool else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-vitrage_ml_default_volumes:
-  - "{{ node_config_directory }}/vitrage-ml/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
-  - "{{ kolla_dev_repos_directory ~ '/vitrage/vitrage:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/vitrage' if vitrage_dev_mode | bool else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-vitrage_persistor_default_volumes:
-  - "{{ node_config_directory }}/vitrage-persistor/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
-  - "{{ kolla_dev_repos_directory ~ '/vitrage/vitrage:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/vitrage' if vitrage_dev_mode | bool else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-
-vitrage_extra_volumes: "{{ default_extra_volumes }}"
-vitrage_api_extra_volumes: "{{ vitrage_extra_volumes }}"
-vitrage_notifier_extra_volumes: "{{ vitrage_extra_volumes }}"
-vitrage_graph_extra_volumes: "{{ vitrage_extra_volumes }}"
-vitrage_ml_extra_volumes: "{{ vitrage_extra_volumes }}"
-vitrage_persistor_extra_volumes: "{{ vitrage_extra_volumes }}"
-
-####################
-# OpenStack
-####################
-vitrage_logging_debug: "{{ openstack_logging_debug }}"
-
-vitrage_keystone_user: "vitrage"
-
-openstack_vitrage_auth: "{{ openstack_auth }}"
-
-vitrage_api_workers: "{{ openstack_service_workers }}"
-
-#####################
-# Datasources
-#####################
-vitrage_notifier:
-  - name: "aodh"
-    enabled: "{{ enable_aodh | bool }}"
-  - name: "mistral"
-    enabled: "{{ enable_mistral | bool }}"
-  - name: "nova"
-    enabled: "{{ enable_nova | bool }}"
-
-vitrage_notifiers: "{{ vitrage_notifier | selectattr('enabled', 'equalto', true) | list }}"
-
-vitrage_datasource:
-  - name: "static"
-    enabled: true
-  - name: "nova.host,nova.instance,nova.zone"
-    enabled: "{{ enable_nova | bool }}"
-  - name: "aodh"
-    enabled: "{{ enable_aodh | bool }}"
-  - name: "collectd"
-    enabled: "{{ enable_collectd | bool }}"
-  - name: "cinder.volume"
-    enabled: "{{ enable_cinder | bool }}"
-  - name: "neutron.network,neutron.port"
-    enabled: "{{ enable_neutron | bool }}"
-  # TODO(egonzalez) Heat cannot be used with default policy.json due stacks:global_index=rule:deny_everybody.
-  # Document process to deploy vitrage+heat.
-  - name: "heat.stack"
-    enabled: "no"
-  - name: "prometheus"
-    enabled: "{{ enable_vitrage_prometheus_datasource | bool }}"
-
-vitrage_datasources: "{{ vitrage_datasource | selectattr('enabled', 'equalto', true) | list }}"
-
-
-####################
-# Kolla
-####################
-vitrage_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
-vitrage_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
-vitrage_dev_mode: "{{ kolla_dev_mode }}"
-vitrage_source_version: "{{ kolla_source_version }}"
-
-####################
-# Notifications
-####################
-vitrage_notification_topics:
-  - name: notifications
-    enabled: "{{ enable_ceilometer | bool }}"
-  - name: vitrage_notifications
-    enabled: True
-
-vitrage_enabled_notification_topics: "{{ vitrage_notification_topics | selectattr('enabled', 'equalto', true) | list }}"
-
-####################
-# Keystone
-####################
-vitrage_ks_services:
-  - name: "vitrage"
-    type: "rca"
-    description: "Root Cause Analysis Service"
-    endpoints:
-      - {'interface': 'internal', 'url': '{{ vitrage_internal_endpoint }}'}
-      - {'interface': 'public', 'url': '{{ vitrage_public_endpoint }}'}
-
-vitrage_ks_users:
-  - project: "service"
-    user: "{{ vitrage_keystone_user }}"
-    password: "{{ vitrage_keystone_password }}"
-    role: "admin"
diff --git a/ansible/roles/vitrage/handlers/main.yml b/ansible/roles/vitrage/handlers/main.yml
deleted file mode 100644
index 47327f4d9a..0000000000
--- a/ansible/roles/vitrage/handlers/main.yml
+++ /dev/null
@@ -1,80 +0,0 @@
----
-- name: Restart vitrage-api container
-  vars:
-    service_name: "vitrage-api"
-    service: "{{ vitrage_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 vitrage-notifier container
-  vars:
-    service_name: "vitrage-notifier"
-    service: "{{ vitrage_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 vitrage-graph container
-  vars:
-    service_name: "vitrage-graph"
-    service: "{{ vitrage_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 vitrage-ml container
-  vars:
-    service_name: "vitrage-ml"
-    service: "{{ vitrage_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 vitrage-persistor container
-  vars:
-    service_name: "vitrage-persistor"
-    service: "{{ vitrage_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"
diff --git a/ansible/roles/vitrage/tasks/bootstrap.yml b/ansible/roles/vitrage/tasks/bootstrap.yml
deleted file mode 100644
index 69be94dc64..0000000000
--- a/ansible/roles/vitrage/tasks/bootstrap.yml
+++ /dev/null
@@ -1,38 +0,0 @@
----
-- name: Creating vitrage 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: "{{ vitrage_database_shard_root_user }}"
-      login_password: "{{ database_password }}"
-      name: "{{ vitrage_database_name }}"
-  run_once: True
-  delegate_to: "{{ groups['vitrage-api'][0] }}"
-  when:
-    - not use_preconfigured_databases | bool
-
-- name: Creating vitrage 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: "{{ vitrage_database_shard_root_user }}"
-      login_password: "{{ database_password }}"
-      name: "{{ vitrage_database_user }}"
-      password: "{{ vitrage_database_password }}"
-      host: "%"
-      priv: "{{ vitrage_database_name }}.*:ALL"
-      append_privs: "yes"
-  run_once: True
-  delegate_to: "{{ groups['vitrage-api'][0] }}"
-  when:
-    - not use_preconfigured_databases | bool
-
-- import_tasks: bootstrap_service.yml
diff --git a/ansible/roles/vitrage/tasks/bootstrap_service.yml b/ansible/roles/vitrage/tasks/bootstrap_service.yml
deleted file mode 100644
index 6994ba741d..0000000000
--- a/ansible/roles/vitrage/tasks/bootstrap_service.yml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-- name: Running Vitrage bootstrap container
-  vars:
-    vitrage_api: "{{ vitrage_services['vitrage-api'] }}"
-  become: true
-  kolla_container:
-    action: "start_container"
-    common_options: "{{ docker_common_options }}"
-    detach: False
-    environment:
-      KOLLA_BOOTSTRAP:
-      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-    image: "{{ vitrage_api.image }}"
-    labels:
-      BOOTSTRAP:
-    name: "bootstrap_vitrage"
-    restart_policy: oneshot
-    volumes: "{{ vitrage_api.volumes | reject('equalto', '') | list }}"
-  run_once: True
-  delegate_to: "{{ groups[vitrage_api.group][0] }}"
diff --git a/ansible/roles/vitrage/tasks/check-containers.yml b/ansible/roles/vitrage/tasks/check-containers.yml
deleted file mode 100644
index 1175b1ad90..0000000000
--- a/ansible/roles/vitrage/tasks/check-containers.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-- name: Check vitrage containers
-  become: true
-  kolla_container:
-    action: "compare_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ item.value.container_name }}"
-    image: "{{ item.value.image }}"
-    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: "{{ vitrage_services }}"
-  notify:
-    - "Restart {{ item.key }} container"
diff --git a/ansible/roles/vitrage/tasks/check.yml b/ansible/roles/vitrage/tasks/check.yml
deleted file mode 100644
index ed97d539c0..0000000000
--- a/ansible/roles/vitrage/tasks/check.yml
+++ /dev/null
@@ -1 +0,0 @@
----
diff --git a/ansible/roles/vitrage/tasks/clone.yml b/ansible/roles/vitrage/tasks/clone.yml
deleted file mode 100644
index 439f99f3c3..0000000000
--- a/ansible/roles/vitrage/tasks/clone.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-- name: Cloning vitrage source repository for development
-  become: true
-  git:
-    repo: "{{ vitrage_git_repository }}"
-    dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
-    update: "{{ vitrage_dev_repos_pull }}"
-    version: "{{ vitrage_source_version }}"
diff --git a/ansible/roles/vitrage/tasks/config.yml b/ansible/roles/vitrage/tasks/config.yml
deleted file mode 100644
index 60d68e4f46..0000000000
--- a/ansible/roles/vitrage/tasks/config.yml
+++ /dev/null
@@ -1,110 +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: "{{ vitrage_services }}"
-
-- name: Check if policies shall be overwritten
-  stat:
-    path: "{{ item }}"
-  run_once: True
-  delegate_to: localhost
-  register: vitrage_policy
-  with_first_found:
-    - files: "{{ supported_policy_format_list }}"
-      paths:
-        - "{{ node_custom_config }}/vitrage/"
-      skip: true
-
-- name: Set vitrage policy file
-  set_fact:
-    vitrage_policy_file: "{{ vitrage_policy.results.0.stat.path | basename }}"
-    vitrage_policy_file_path: "{{ vitrage_policy.results.0.stat.path }}"
-  when:
-    - vitrage_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: "{{ vitrage_services }}"
-  notify:
-    - Restart {{ item.key }} container
-
-- name: Copying over vitrage.conf
-  vars:
-    service_name: "{{ item.key }}"
-  merge_configs:
-    sources:
-      - "{{ role_path }}/templates/vitrage.conf.j2"
-      - "{{ node_config_directory }}/config/global.conf"
-      - "{{ node_config_directory }}/config/messaging.conf"
-      - "{{ node_config_directory }}/config/vitrage.conf"
-      - "{{ node_config_directory }}/config/vitrage/{{ item.key }}.conf"
-      - "{{ node_config_directory }}/config/vitrage/{{ inventory_hostname }}/vitrage.conf"
-    dest: "{{ node_config_directory }}/{{ item.key }}/vitrage.conf"
-    mode: "0660"
-  become: true
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ vitrage_services }}"
-  notify:
-    - Restart {{ item.key }} container
-
-- name: Copying over wsgi-vitrage files for services
-  template:
-    src: "wsgi-vitrage.conf.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/wsgi-vitrage.conf"
-    mode: "0660"
-  become: true
-  with_items:
-    - "vitrage-api"
-  notify:
-    - Restart vitrage-api container
-
-- name: Copying over prometheus_conf.yml file for service
-  vars:
-    service: "{{ vitrage_services['vitrage-graph'] }}"
-  template:
-    src: "{{ node_custom_config }}/vitrage/prometheus_conf.yaml"
-    dest: "{{ node_config_directory }}/vitrage-graph/prometheus_conf.yaml"
-    mode: "0660"
-  become: true
-  when:
-    - enable_vitrage_prometheus_datasource | bool
-    - inventory_hostname in groups[service.group]
-    - service.enabled | bool
-  notify:
-    - Restart vitrage-graph container
-
-- name: Copying over existing policy file
-  template:
-    src: "{{ vitrage_policy_file_path }}"
-    dest: "{{ node_config_directory }}/{{ item.key }}/{{ vitrage_policy_file }}"
-    mode: "0660"
-  become: true
-  when:
-    - vitrage_policy_file is defined
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ vitrage_services }}"
-  notify:
-    - Restart {{ item.key }} container
diff --git a/ansible/roles/vitrage/tasks/config_validate.yml b/ansible/roles/vitrage/tasks/config_validate.yml
deleted file mode 100644
index 307e5b0bcc..0000000000
--- a/ansible/roles/vitrage/tasks/config_validate.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- import_role:
-    name: service-config-validate
-  vars:
-    service_config_validate_services: "{{ vitrage_services }}"
-    service_name: "{{ project_name }}"
-    service_config_validation: "{{ vitrage_config_validation }}"
diff --git a/ansible/roles/vitrage/tasks/copy-certs.yml b/ansible/roles/vitrage/tasks/copy-certs.yml
deleted file mode 100644
index bdd8fe3581..0000000000
--- a/ansible/roles/vitrage/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: "{{ vitrage_services }}"
diff --git a/ansible/roles/vitrage/tasks/deploy-containers.yml b/ansible/roles/vitrage/tasks/deploy-containers.yml
deleted file mode 100644
index eb24ab5c7a..0000000000
--- a/ansible/roles/vitrage/tasks/deploy-containers.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: check-containers.yml
diff --git a/ansible/roles/vitrage/tasks/deploy.yml b/ansible/roles/vitrage/tasks/deploy.yml
deleted file mode 100644
index 28649bcdcb..0000000000
--- a/ansible/roles/vitrage/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: vitrage_dev_mode | bool
-
-- import_tasks: bootstrap.yml
-
-- name: Flush handlers
-  meta: flush_handlers
diff --git a/ansible/roles/vitrage/tasks/loadbalancer.yml b/ansible/roles/vitrage/tasks/loadbalancer.yml
deleted file mode 100644
index 4fba573d24..0000000000
--- a/ansible/roles/vitrage/tasks/loadbalancer.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: "Configure loadbalancer for {{ project_name }}"
-  import_role:
-    name: loadbalancer-config
-  vars:
-    project_services: "{{ vitrage_services }}"
-  tags: always
diff --git a/ansible/roles/vitrage/tasks/main.yml b/ansible/roles/vitrage/tasks/main.yml
deleted file mode 100644
index bc5d1e6257..0000000000
--- a/ansible/roles/vitrage/tasks/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- include_tasks: "{{ kolla_action }}.yml"
diff --git a/ansible/roles/vitrage/tasks/precheck.yml b/ansible/roles/vitrage/tasks/precheck.yml
deleted file mode 100644
index 809f9d53df..0000000000
--- a/ansible/roles/vitrage/tasks/precheck.yml
+++ /dev/null
@@ -1,35 +0,0 @@
----
-- import_role:
-    name: service-precheck
-  vars:
-    service_precheck_services: "{{ vitrage_services }}"
-    service_name: "{{ project_name }}"
-
-- name: Get container facts
-  become: true
-  kolla_container_facts:
-    container_engine: "{{ kolla_container_engine }}"
-    name:
-      - vitrage_api
-  check_mode: false
-  register: container_facts
-
-- name: Checking free port for vitrage API
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ vitrage_api_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - container_facts['vitrage_api'] is not defined
-    - inventory_hostname in groups['vitrage-api']
-
-- name: Checking custom prometheus_conf.yaml exists
-  stat:
-    path: "{{ node_custom_config }}/vitrage/prometheus_conf.yaml"
-  delegate_to: localhost
-  register: result
-  run_once: true
-  failed_when: not result.stat.exists
-  when:
-    - enable_vitrage_prometheus_datasource | bool
diff --git a/ansible/roles/vitrage/tasks/pull.yml b/ansible/roles/vitrage/tasks/pull.yml
deleted file mode 100644
index 53f9c5fda1..0000000000
--- a/ansible/roles/vitrage/tasks/pull.yml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-- import_role:
-    role: service-images-pull
diff --git a/ansible/roles/vitrage/tasks/reconfigure.yml b/ansible/roles/vitrage/tasks/reconfigure.yml
deleted file mode 100644
index 5b10a7e111..0000000000
--- a/ansible/roles/vitrage/tasks/reconfigure.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: deploy.yml
diff --git a/ansible/roles/vitrage/tasks/register.yml b/ansible/roles/vitrage/tasks/register.yml
deleted file mode 100644
index 3c88a21bf5..0000000000
--- a/ansible/roles/vitrage/tasks/register.yml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-- import_role:
-    name: service-ks-register
-  vars:
-    service_ks_register_auth: "{{ openstack_vitrage_auth }}"
-    service_ks_register_services: "{{ vitrage_ks_services }}"
-    service_ks_register_users: "{{ vitrage_ks_users }}"
-
-- name: Adding vitrage user into admin project
-  become: true
-  kolla_toolbox:
-    container_engine: "{{ kolla_container_engine }}"
-    module_name: "os_user_role"
-    module_args:
-      user: "{{ vitrage_keystone_user }}"
-      role: "admin"
-      project: "admin"
-      auth: "{{ openstack_vitrage_auth }}"
-      endpoint_type: "{{ openstack_interface }}"
-      cacert: "{{ openstack_cacert }}"
-      region_name: "{{ openstack_region_name }}"
-  run_once: True
diff --git a/ansible/roles/vitrage/tasks/stop.yml b/ansible/roles/vitrage/tasks/stop.yml
deleted file mode 100644
index 411079e19f..0000000000
--- a/ansible/roles/vitrage/tasks/stop.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- import_role:
-    name: service-stop
-  vars:
-    project_services: "{{ vitrage_services }}"
-    service_name: "{{ project_name }}"
diff --git a/ansible/roles/vitrage/tasks/upgrade.yml b/ansible/roles/vitrage/tasks/upgrade.yml
deleted file mode 100644
index 6ba9f99799..0000000000
--- a/ansible/roles/vitrage/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/vitrage/templates/vitrage-api.json.j2 b/ansible/roles/vitrage/templates/vitrage-api.json.j2
deleted file mode 100644
index 34f2a9223e..0000000000
--- a/ansible/roles/vitrage/templates/vitrage-api.json.j2
+++ /dev/null
@@ -1,33 +0,0 @@
-{% set apache_cmd = 'apache2' if kolla_base_distro in ['ubuntu', 'debian'] else 'httpd' %}
-{% set apache_dir = 'apache2/conf-enabled' if kolla_base_distro in ['ubuntu', 'debian'] else 'httpd/conf.d' %}
-{% set apache_file = '000-default.conf' if kolla_base_distro in ['ubuntu', 'debian'] else 'vitrage-api.conf' %}
-{
-    "command": "/usr/sbin/{{ apache_cmd }} -DFOREGROUND",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/vitrage.conf",
-            "dest": "/etc/vitrage/vitrage.conf",
-            "owner": "vitrage",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/wsgi-vitrage.conf",
-            "dest": "/etc/{{ apache_dir }}/{{ apache_file }}",
-            "owner": "vitrage",
-            "perm": "0644"
-        }{% if vitrage_policy_file is defined %},
-        {
-            "source": "{{ container_config_directory }}/{{ vitrage_policy_file }}",
-            "dest": "/etc/vitrage/{{ vitrage_policy_file }}",
-            "owner": "vitrage",
-            "perm": "0600"
-        }{% endif %}
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/vitrage",
-            "owner": "vitrage:vitrage",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/vitrage/templates/vitrage-graph.json.j2 b/ansible/roles/vitrage/templates/vitrage-graph.json.j2
deleted file mode 100644
index 59b350712e..0000000000
--- a/ansible/roles/vitrage/templates/vitrage-graph.json.j2
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-    "command": "vitrage-graph --config-file /etc/vitrage/vitrage.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/vitrage.conf",
-            "dest": "/etc/vitrage/vitrage.conf",
-            "owner": "vitrage",
-            "perm": "0644"
-        }{% if enable_vitrage_prometheus_datasource | bool %},
-        {
-            "source": "{{ container_config_directory }}/prometheus_conf.yaml",
-            "dest": "/etc/vitrage/prometheus_conf.yaml",
-            "owner": "vitrage",
-            "perm": "0644"
-        }{% endif %}{% if vitrage_policy_file is defined %},
-        {
-            "source": "{{ container_config_directory }}/{{ vitrage_policy_file }}",
-            "dest": "/etc/vitrage/{{ vitrage_policy_file }}",
-            "owner": "vitrage",
-            "perm": "0600"
-        }{% endif %}
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/vitrage",
-            "owner": "vitrage:vitrage",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/vitrage/templates/vitrage-ml.json.j2 b/ansible/roles/vitrage/templates/vitrage-ml.json.j2
deleted file mode 100644
index 6c629e4008..0000000000
--- a/ansible/roles/vitrage/templates/vitrage-ml.json.j2
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "command": "vitrage-ml --config-file /etc/vitrage/vitrage.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/vitrage.conf",
-            "dest": "/etc/vitrage/vitrage.conf",
-            "owner": "vitrage",
-            "perm": "0644"
-        }{% if vitrage_policy_file is defined %},
-        {
-            "source": "{{ container_config_directory }}/{{ vitrage_policy_file }}",
-            "dest": "/etc/vitrage/{{ vitrage_policy_file }}",
-            "owner": "vitrage",
-            "perm": "0600"
-        }{% endif %}
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/vitrage",
-            "owner": "vitrage:vitrage",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/vitrage/templates/vitrage-notifier.json.j2 b/ansible/roles/vitrage/templates/vitrage-notifier.json.j2
deleted file mode 100644
index 8e0047aa09..0000000000
--- a/ansible/roles/vitrage/templates/vitrage-notifier.json.j2
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "command": "vitrage-notifier --config-file /etc/vitrage/vitrage.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/vitrage.conf",
-            "dest": "/etc/vitrage/vitrage.conf",
-            "owner": "vitrage",
-            "perm": "0644"
-        }{% if vitrage_policy_file is defined %},
-        {
-            "source": "{{ container_config_directory }}/{{ vitrage_policy_file }}",
-            "dest": "/etc/vitrage/{{ vitrage_policy_file }}",
-            "owner": "vitrage",
-            "perm": "0600"
-        }{% endif %}
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/vitrage",
-            "owner": "vitrage:vitrage",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/vitrage/templates/vitrage-persistor.json.j2 b/ansible/roles/vitrage/templates/vitrage-persistor.json.j2
deleted file mode 100644
index 8a3e917344..0000000000
--- a/ansible/roles/vitrage/templates/vitrage-persistor.json.j2
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "command": "vitrage-persistor --config-file /etc/vitrage/vitrage.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/vitrage.conf",
-            "dest": "/etc/vitrage/vitrage.conf",
-            "owner": "vitrage",
-            "perm": "0644"
-        }{% if vitrage_policy_file is defined %},
-        {
-            "source": "{{ container_config_directory }}/{{ vitrage_policy_file }}",
-            "dest": "/etc/vitrage/{{ vitrage_policy_file }}",
-            "owner": "vitrage",
-            "perm": "0600"
-        }{% endif %}
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/vitrage",
-            "owner": "vitrage:vitrage",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/vitrage/templates/vitrage.conf.j2 b/ansible/roles/vitrage/templates/vitrage.conf.j2
deleted file mode 100644
index 6d7129ea20..0000000000
--- a/ansible/roles/vitrage/templates/vitrage.conf.j2
+++ /dev/null
@@ -1,107 +0,0 @@
-[DEFAULT]
-debug = {{ vitrage_logging_debug }}
-log_dir = /var/log/kolla/vitrage
-
-{% if service_name == 'vitrage-api' %}
-# Force vitrage-api.log or will use app.wsgi
-log_file = /var/log/kolla/vitrage/vitrage-api.log
-{% endif %}
-
-{% if vitrage_notifiers %}
-notifiers = {{ vitrage_notifiers|map(attribute='name')|join(',') }}
-{% endif %}
-
-transport_url = {{ rpc_transport_url }}
-
-[database]
-connection = mysql+pymysql://{{ vitrage_database_user }}:{{ vitrage_database_password }}@{{ vitrage_database_address }}/{{ vitrage_database_name }}
-connection_recycle_time = {{ database_connection_recycle_time }}
-max_pool_size = {{ database_max_pool_size }}
-
-{% if vitrage_datasources %}
-[datasources]
-types = {{ vitrage_datasources|map(attribute='name')|join(',') }}
-{% endif %}
-
-[machine_learning]
-plugins = jaccard_correlation
-
-[keystone_authtoken]
-service_type = rca
-www_authenticate_uri = {{ keystone_internal_url }}
-auth_url = {{ keystone_internal_url }}
-auth_type = password
-project_domain_id = {{ default_project_domain_id }}
-user_domain_id = {{ default_user_domain_id }}
-project_name = service
-username = {{ vitrage_keystone_user }}
-password = {{ vitrage_keystone_password }}
-service_token_roles_required = True
-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 %}
-
-[service_credentials]
-auth_url = {{ keystone_internal_url }}
-region_name = {{ openstack_region_name }}
-auth_type = password
-project_domain_id = {{ default_project_domain_id }}
-user_domain_id = default
-project_name = admin
-password = {{ vitrage_keystone_password }}
-username = {{ vitrage_keystone_user }}
-interface = internal
-cafile = {{ openstack_cacert }}
-
-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 vitrage_enabled_notification_topics %}
-driver = messagingv2
-topics = {{ vitrage_enabled_notification_topics | map(attribute='name') | join(',') }}
-{% else %}
-driver = noop
-{% endif %}
-
-[oslo_messaging_rabbit]
-heartbeat_in_pthread = {{ service_name == 'vitrage-api' }}
-{% 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 %}
-
-[oslo_concurrency]
-lock_path = /var/lib/vitrage/tmp
-
-[oslo_middleware]
-enable_proxy_headers_parsing = True
-
-{% if vitrage_policy_file is defined %}
-[oslo_policy]
-policy_file = {{ vitrage_policy_file }}
-{% endif %}
-
-{% if enable_osprofiler | bool %}
-[profiler]
-enabled = true
-trace_sqlalchemy = true
-hmac_keys = {{ osprofiler_secret }}
-connection_string = {{ osprofiler_backend_connection_string }}
-{% endif %}
-
-{% if enable_vitrage_prometheus_datasource | bool %}
-[prometheus]
-config_file = /etc/vitrage/prometheus_conf.yaml
-{% endif %}
diff --git a/ansible/roles/vitrage/templates/wsgi-vitrage.conf.j2 b/ansible/roles/vitrage/templates/wsgi-vitrage.conf.j2
deleted file mode 100644
index 9b54e8b012..0000000000
--- a/ansible/roles/vitrage/templates/wsgi-vitrage.conf.j2
+++ /dev/null
@@ -1,43 +0,0 @@
-{% set vitrage_log_dir = '/var/log/kolla/vitrage' %}
-Listen {{ 'api' | kolla_address | put_address_in_context('url') }}:{{ vitrage_api_port }}
-
-ServerSignature Off
-ServerTokens Prod
-TraceEnable off
-TimeOut {{ kolla_httpd_timeout }}
-KeepAliveTimeout {{ kolla_httpd_keep_alive }}
-
-ErrorLog "{{ vitrage_log_dir }}/apache-error.log"
-<IfModule log_config_module>
-    CustomLog "{{ vitrage_log_dir }}/apache-access.log" common
-</IfModule>
-
-{% if vitrage_logging_debug | bool %}
-LogLevel info
-{% endif %}
-
-<VirtualHost *:{{ vitrage_api_port }}>
-
-  ## Vhost docroot
-  DocumentRoot "/var/www/cgi-bin/vitrage"
-
-  ## Directories, there should at least be a declaration for /var/www/cgi-bin/vitrage
-
-  <Directory "/var/www/cgi-bin/vitrage">
-    Options Indexes FollowSymLinks MultiViews
-    AllowOverride None
-    Require all granted
-  </Directory>
-
-  ## Logging
-  ErrorLog "{{ vitrage_log_dir }}/vitrage_wsgi_error.log"
-  ServerSignature Off
-  CustomLog "{{ vitrage_log_dir }}/vitrage_wsgi_access.log" combined
-  WSGIApplicationGroup %{GLOBAL}
-  WSGIDaemonProcess vitrage group=vitrage processes={{ vitrage_api_workers }} threads=1 user=vitrage
-  WSGIProcessGroup vitrage
-  WSGIScriptAlias / "/var/www/cgi-bin/vitrage/app.wsgi"
-{% if enable_vitrage_prometheus_datasource | bool %}
-  WSGIPassAuthorization On
-{% endif %}
-</VirtualHost>
diff --git a/ansible/roles/vitrage/vars/main.yml b/ansible/roles/vitrage/vars/main.yml
deleted file mode 100644
index ee0d018c05..0000000000
--- a/ansible/roles/vitrage/vars/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-project_name: "vitrage"
diff --git a/ansible/site.yml b/ansible/site.yml
index 0475d2c582..bfb0ba8d97 100644
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -70,7 +70,6 @@
         - enable_telegraf_{{ enable_telegraf | bool }}
         - enable_trove_{{ enable_trove | bool }}
         - enable_venus_{{ enable_venus | bool }}
-        - enable_vitrage_{{ enable_vitrage | bool }}
         - enable_watcher_{{ enable_watcher | bool }}
         - enable_zun_{{ enable_zun | bool }}
   tags: always
@@ -312,11 +311,6 @@
             tasks_from: loadbalancer
           tags: venus
           when: enable_venus | bool
-        - include_role:
-            name: vitrage
-            tasks_from: loadbalancer
-          tags: vitrage
-          when: enable_vitrage | bool
         - include_role:
             name: watcher
             tasks_from: loadbalancer
@@ -1014,24 +1008,6 @@
     - { role: zun,
         tags: zun }
 
-- name: Apply role vitrage
-  gather_facts: false
-  hosts:
-    - vitrage-api
-    - vitrage-graph
-    - vitrage-notifier
-    - vitrage-ml
-    - vitrage-persistor
-    - '&enable_vitrage_True'
-  serial: '{{ kolla_serial|default("0") }}'
-  max_fail_percentage: >-
-    {{ vitrage_max_fail_percentage |
-       default(kolla_max_fail_percentage) |
-       default(100) }}
-  roles:
-    - { role: vitrage,
-        tags: vitrage }
-
 - name: Apply role blazar
   gather_facts: false
   hosts:
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index 9ddcb18508..c6ffb2e9be 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -370,7 +370,6 @@ workaround_ansible_issue_8743: yes
 #enable_horizon_octavia: "{{ enable_octavia | bool }}"
 #enable_horizon_tacker: "{{ enable_tacker | bool }}"
 #enable_horizon_trove: "{{ enable_trove | bool }}"
-#enable_horizon_vitrage: "{{ enable_vitrage | bool }}"
 #enable_horizon_watcher: "{{ enable_watcher | bool }}"
 #enable_horizon_zun: "{{ enable_zun | bool }}"
 #enable_influxdb: "{{ enable_cloudkitty | bool and cloudkitty_storage_backend == 'influxdb' }}"
@@ -427,7 +426,6 @@ workaround_ansible_issue_8743: yes
 #enable_trove: "no"
 #enable_trove_singletenant: "no"
 #enable_venus: "no"
-#enable_vitrage: "no"
 #enable_watcher: "no"
 #enable_zun: "no"
 
diff --git a/etc/kolla/passwords.yml b/etc/kolla/passwords.yml
index 8a24849c67..5ce37b5b54 100644
--- a/etc/kolla/passwords.yml
+++ b/etc/kolla/passwords.yml
@@ -148,9 +148,6 @@ tacker_keystone_password:
 zun_database_password:
 zun_keystone_password:
 
-vitrage_database_password:
-vitrage_keystone_password:
-
 venus_database_password:
 venus_keystone_password:
 
diff --git a/releasenotes/notes/drop-vitrage-b7d94fd6038e0d60.yaml b/releasenotes/notes/drop-vitrage-b7d94fd6038e0d60.yaml
new file mode 100644
index 0000000000..e6b141c827
--- /dev/null
+++ b/releasenotes/notes/drop-vitrage-b7d94fd6038e0d60.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+  - |
+    Support for deploying ``Vitrage`` has been dropped.
diff --git a/tests/templates/inventory.j2 b/tests/templates/inventory.j2
index aaada13372..92defd391a 100644
--- a/tests/templates/inventory.j2
+++ b/tests/templates/inventory.j2
@@ -210,9 +210,6 @@ control
 [trove:children]
 control
 
-[vitrage:children]
-control
-
 [watcher:children]
 control
 
@@ -579,19 +576,6 @@ tacker
 [tacker-conductor:children]
 tacker
 
-# Vitrage
-[vitrage-api:children]
-vitrage
-
-[vitrage-notifier:children]
-vitrage
-
-[vitrage-graph:children]
-vitrage
-
-[vitrage-ml:children]
-vitrage
-
 # Blazar
 [blazar-api:children]
 blazar