diff --git a/README.rst b/README.rst
index d89fed10f2204a4feead20fde8a7f3831c070cf4..be2e40a19ed105c643bb612bc4b075c6c214479e 100644
--- a/README.rst
+++ b/README.rst
@@ -69,7 +69,6 @@ Kolla Ansible deploys containers for the following OpenStack projects:
 - `Solum <https://docs.openstack.org/solum/latest/>`__
 - `Swift <https://docs.openstack.org/swift/latest/>`__
 - `Tacker <https://docs.openstack.org/tacker/latest/>`__
-- `Tempest <https://docs.openstack.org/tempest/latest/>`__
 - `Trove <https://docs.openstack.org/trove/latest/>`__
 - `Vitrage <https://docs.openstack.org/vitrage/latest/>`__
 - `Vmtp <https://vmtp.readthedocs.io/en/latest/>`__
diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index b39bf30aec2889098a78dd09012e3fb6bc0aa49e..b42f2e2fae8aee10f90b7b19281542b22d701346 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -699,7 +699,6 @@ enable_swift_s3api: "no"
 enable_swift_recon: "no"
 enable_tacker: "no"
 enable_telegraf: "no"
-enable_tempest: "no"
 enable_trove: "no"
 enable_trove_singletenant: "no"
 enable_vitrage: "no"
diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index 6fb17046dd7da9268d7371048bd6f72bc91e4395..f94d4f81cf8cbd9124d82c7a26d41f1c3f1793da 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -190,10 +190,6 @@ control
 [vitrage:children]
 control
 
-# Tempest
-[tempest:children]
-control
-
 [senlin:children]
 control
 
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index c9aae9b04081c047d34fe9774d89dd40e0234b40..b1dd794f076f842dcb24d91f04bc976c62e5db51 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -208,10 +208,6 @@ control
 [trove:children]
 control
 
-# Tempest
-[tempest:children]
-control
-
 [senlin:children]
 control
 
diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index 4685791ed7c8b6d16e33b435f1b71257c00d1fcc..5915ac02dd5215dd45f904f02fe8d5029e50ff1c 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -222,7 +222,6 @@
       - { name: "storm", enabled: "{{ enable_storm | bool }}" }
       - { name: "swift", enabled: "{{ enable_swift | bool }}" }
       - { name: "tacker", enabled: "{{ enable_tacker | bool }}" }
-      - { name: "tempest", enabled: "{{ enable_tempest | bool }}" }
       - { name: "trove", enabled: "{{ enable_trove | bool }}" }
       - { name: "vitrage", enabled: "{{ enable_vitrage | bool }}" }
       - { name: "watcher", enabled: "{{ enable_watcher | bool }}" }
diff --git a/ansible/roles/common/templates/cron-logrotate-tempest.conf.j2 b/ansible/roles/common/templates/cron-logrotate-tempest.conf.j2
deleted file mode 100644
index 2d0465cf268e325bcc4f0516d6c3a9aea989cdb7..0000000000000000000000000000000000000000
--- a/ansible/roles/common/templates/cron-logrotate-tempest.conf.j2
+++ /dev/null
@@ -1,3 +0,0 @@
-"/var/log/kolla/tempest/*.log"
-{
-}
diff --git a/ansible/roles/tempest/handlers/main.yml b/ansible/roles/tempest/handlers/main.yml
deleted file mode 100644
index 4078b42dfb842652951272ffb94df7c05256a368..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/handlers/main.yml
+++ /dev/null
@@ -1,15 +0,0 @@
----
-- name: Restart tempest container
-  vars:
-    service_name: "tempest"
-    service: "{{ tempest_services[service_name] }}"
-  become: true
-  kolla_docker:
-    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 }}"
-  when:
-    - kolla_action != "config"
diff --git a/ansible/roles/tempest/tasks/check-containers.yml b/ansible/roles/tempest/tasks/check-containers.yml
deleted file mode 100644
index 55159d70625d787f466f569f12047d2ee9c66481..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/check-containers.yml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-- name: Check tempest containers
-  become: true
-  kolla_docker:
-    action: "compare_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ item.value.container_name }}"
-    image: "{{ item.value.image }}"
-    volumes: "{{ item.value.volumes }}"
-    dimensions: "{{ item.value.dimensions }}"
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ tempest_services }}"
-  notify:
-    - "Restart {{ item.key }} container"
diff --git a/ansible/roles/tempest/tasks/check.yml b/ansible/roles/tempest/tasks/check.yml
deleted file mode 100644
index ed97d539c095cf1413af30cc23dea272095b97dd..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/check.yml
+++ /dev/null
@@ -1 +0,0 @@
----
diff --git a/ansible/roles/tempest/tasks/config.yml b/ansible/roles/tempest/tasks/config.yml
deleted file mode 100644
index eee199336fb22cf0baf64e64c04fa0e297cd4959..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/config.yml
+++ /dev/null
@@ -1,47 +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: "{{ tempest_services }}"
-
-- 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: "{{ tempest_services }}"
-  notify:
-    - Restart tempest container
-
-- name: Copying over tempest.conf
-  vars:
-    project_name: "tempest"
-  merge_configs:
-    sources:
-      - "{{ role_path }}/templates/tempest.conf.j2"
-      - "{{ node_custom_config }}/tempest.conf"
-    dest: "{{ node_config_directory }}/{{ item.key }}/tempest.conf"
-    mode: "0660"
-  become: true
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ tempest_services }}"
-  notify:
-    - Restart tempest container
diff --git a/ansible/roles/tempest/tasks/copy-certs.yml b/ansible/roles/tempest/tasks/copy-certs.yml
deleted file mode 100644
index f3c4ebca0d6492bd2071c6467939e121ac144f80..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/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: "{{ tempest_services }}"
diff --git a/ansible/roles/tempest/tasks/deploy-containers.yml b/ansible/roles/tempest/tasks/deploy-containers.yml
deleted file mode 100644
index eb24ab5c7a7bfaf98f711ffe96f0b76120874b14..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/deploy-containers.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: check-containers.yml
diff --git a/ansible/roles/tempest/tasks/deploy.yml b/ansible/roles/tempest/tasks/deploy.yml
deleted file mode 100644
index 49edff81e3ffb82131b22717c5d53728352a70c4..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/deploy.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- import_tasks: config.yml
-
-- import_tasks: check-containers.yml
-
-- name: Flush handlers
-  meta: flush_handlers
diff --git a/ansible/roles/tempest/tasks/main.yml b/ansible/roles/tempest/tasks/main.yml
deleted file mode 100644
index 9d7272561df8c9598af6f0f7638e1508a7ca3ae7..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/main.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Warn about deprecation
-  debug:
-    msg: >
-      tempest role is deprecated and will be removed in Xena
-
-- include_tasks: "{{ kolla_action }}.yml"
diff --git a/ansible/roles/tempest/tasks/precheck.yml b/ansible/roles/tempest/tasks/precheck.yml
deleted file mode 100644
index e1fdb52c620d464fc099119705d6c9c3350e81f5..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/precheck.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- import_role:
-    name: service-precheck
-  vars:
-    service_precheck_services: "{{ tempest_services }}"
-    service_name: "{{ project_name }}"
diff --git a/ansible/roles/tempest/tasks/pull.yml b/ansible/roles/tempest/tasks/pull.yml
deleted file mode 100644
index fb66d7dddc4ca31c730fe28cd1791eea1fdbd825..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/pull.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-- name: Pulling tempest image
-  become: true
-  kolla_docker:
-    action: "pull_image"
-    common_options: "{{ docker_common_options }}"
-    image: "{{ item.value.image }}"
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ tempest_services }}"
diff --git a/ansible/roles/tempest/tasks/reconfigure.yml b/ansible/roles/tempest/tasks/reconfigure.yml
deleted file mode 100644
index 5b10a7e111766fff1f9dd187cdcb8fea97dcadd1..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/reconfigure.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: deploy.yml
diff --git a/ansible/roles/tempest/tasks/stop.yml b/ansible/roles/tempest/tasks/stop.yml
deleted file mode 100644
index ff41f858b3a9abd2751b347be922aa351467be78..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/stop.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- import_role:
-    name: service-stop
-  vars:
-    project_services: "{{ tempest_services }}"
-    service_name: "{{ project_name }}"
diff --git a/ansible/roles/tempest/tasks/upgrade.yml b/ansible/roles/tempest/tasks/upgrade.yml
deleted file mode 100644
index 49edff81e3ffb82131b22717c5d53728352a70c4..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/tasks/upgrade.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- import_tasks: config.yml
-
-- import_tasks: check-containers.yml
-
-- name: Flush handlers
-  meta: flush_handlers
diff --git a/ansible/roles/tempest/templates/tempest.conf.j2 b/ansible/roles/tempest/templates/tempest.conf.j2
deleted file mode 100644
index a3972a16f3f0c55d30093f8f1c8096c85a781388..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/templates/tempest.conf.j2
+++ /dev/null
@@ -1,69 +0,0 @@
-[DEFAULT]
-debug = {{ openstack_logging_debug }}
-log_file = tempest.log
-use_stderr = False
-log_dir = /var/log/kolla/tempest/
-
-[auth]
-admin_username = {{ openstack_auth.username }}
-admin_password = {{ keystone_admin_password }}
-admin_project_name = {{ openstack_auth.project_name }}
-admin_domain_name = {{ openstack_auth.domain_name }}
-
-[dashboard]
-dashboard_url = {{ horizon_internal_endpoint }}
-login_url = {{ horizon_internal_endpoint }}/auth/login/
-
-[service_available]
-cinder = {{ enable_cinder }}
-neutron = {{ enable_neutron }}
-glance = {{ enable_glance }}
-swift = {{ enable_swift }}
-nova = {{ enable_nova }}
-heat = {{ enable_heat }}
-horizon = {{ enable_horizon }}
-ceilometer = {{ enable_ceilometer }}
-
-[compute]
-max_microversion = latest
-image_ref = {{ tempest_image_id }}
-image_ref_alt = {{ tempest_image_alt_id }}
-flavor_ref = {{ tempest_flavor_ref_id }}
-flavor_ref_alt = {{ tempest_flavor_ref_alt_id }}
-region = {{ openstack_region_name }}
-
-[identity]
-region = {{ openstack_region_name }}
-auth_version = v3
-uri = {{ keystone_admin_url }}/v2.0
-uri_v3 = {{ keystone_admin_url }}/v3
-ca_certificates_file = {{ openstack_cacert }}
-
-[image]
-region = {{ openstack_region_name }}
-http_image = {{ image_url }}
-
-[image-feature-enabled]
-api_v1 = False
-
-[network]
-region = {{ openstack_region_name }}
-public_network_id =  {{ tempest_public_network_id }}
-floating_network_name = {{ tempest_floating_network_name }}
-project_networks_reachable = false
-
-[object-storage]
-region = {{ openstack_region_name }}
-
-[orchestration]
-region = {{ openstack_region_name }}
-
-[volume]
-region = {{ openstack_region_name }}
-
-[volume-feature-enabled]
-api_v1 = True
-
-[validation]
-image_ssh_user = {{ tempest_image_ssh_user }}
-image_ssh_password = {{ tempest_image_ssh_password }}
diff --git a/ansible/roles/tempest/templates/tempest.json.j2 b/ansible/roles/tempest/templates/tempest.json.j2
deleted file mode 100644
index 14b95fd21690c3a3ef5eb1fe79a6baf59a0c9de9..0000000000000000000000000000000000000000
--- a/ansible/roles/tempest/templates/tempest.json.j2
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-    "command": "sleep infinity",
-    "config_files":[
-        {
-            "source": "{{ container_config_directory }}/tempest.conf",
-            "dest": "/etc/tempest/tempest.conf",
-            "owner": "tempest",
-            "perm": "0600"
-        }
-    ]
-}
diff --git a/ansible/site.yml b/ansible/site.yml
index 966501030273c193b0b8e2a6b6709e2deca85d5a..d96773fcd6db79ae741d295595f01086ce11689b 100644
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -73,7 +73,6 @@
         - enable_swift_{{ enable_swift | bool }}
         - enable_tacker_{{ enable_tacker | bool }}
         - enable_telegraf_{{ enable_telegraf | bool }}
-        - enable_tempest_{{ enable_tempest | bool }}
         - enable_trove_{{ enable_trove | bool }}
         - enable_vitrage_{{ enable_vitrage | bool }}
         - enable_vmtp_{{ enable_vmtp | bool }}
@@ -929,17 +928,6 @@
         tags: cyborg,
         when: enable_cyborg | bool }
 
-- name: Apply role tempest
-  gather_facts: false
-  hosts:
-    - tempest
-    - '&enable_tempest_True'
-  serial: '{{ kolla_serial|default("0") }}'
-  roles:
-    - { role: tempest,
-        tags: tempest,
-        when: enable_tempest | bool }
-
 - name: Apply role designate
   gather_facts: false
   hosts:
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index 98cc3eb55b539331b586aad87589ecf9f3b61d24..158643bd58f24b17af7a26b90c779b63c634bfb0 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -396,7 +396,6 @@
 #enable_swift_s3api: "no"
 #enable_tacker: "no"
 #enable_telegraf: "no"
-#enable_tempest: "no"
 #enable_trove: "no"
 #enable_trove_singletenant: "no"
 #enable_vitrage: "no"
@@ -677,19 +676,6 @@
 # Rolling upgrade were enable by default
 #swift_enable_rolling_upgrade: "yes"
 
-
-################################################
-# Tempest - The OpenStack Integration Test Suite
-################################################
-# The following values must be set when enabling tempest
-#tempest_image_id:
-#tempest_flavor_ref_id:
-#tempest_public_network_id:
-#tempest_floating_network_name:
-
-# tempest_image_alt_id: "{{ tempest_image_id }}"
-# tempest_flavor_ref_alt_id: "{{ tempest_flavor_ref_id }}"
-
 ###################################
 # VMware - OpenStack VMware support
 ###################################
diff --git a/releasenotes/notes/remove-tempest-role-75faf53de1f1f56d.yaml b/releasenotes/notes/remove-tempest-role-75faf53de1f1f56d.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..32c01cdd5a44b80756497578b44077819bb2635e
--- /dev/null
+++ b/releasenotes/notes/remove-tempest-role-75faf53de1f1f56d.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    The ``tempest`` project is not a service of OpenStack but its client.
+    Its images and support are removed since Xena cycle.
diff --git a/tests/templates/inventory.j2 b/tests/templates/inventory.j2
index f1e11671ac879c58b911ae561bff8f922c1250ef..887bc7179f3c9e2af939a9cfa1f6e9deaf0350f3 100644
--- a/tests/templates/inventory.j2
+++ b/tests/templates/inventory.j2
@@ -264,10 +264,6 @@ control
 [trove:children]
 control
 
-# Tempest
-[tempest:children]
-control
-
 [senlin:children]
 control