From 25b9de91a2d77913583b02f42f00d7de2bd3e1ec Mon Sep 17 00:00:00 2001
From: Kendall Nelson <kennelson11@gmail.com>
Date: Thu, 17 Dec 2020 13:55:56 -0800
Subject: [PATCH] Remove Retired Karbor Support

As announced on the openstack-discuss ML[1], Karbor is retiring
this cycle (Wallaby).

Needed-By: https://review.opendev.org/c/openstack/karbor/+/767032

[1] http://lists.openstack.org/pipermail/openstack-discuss/2020-November/018643.html

Change-Id: I222cf302e507f6a9de0347c79ec536aa7be22bb6
---
 README.rst                                    |   1 -
 ansible/group_vars/all.yml                    |   4 -
 ansible/inventory/all-in-one                  |  13 --
 ansible/inventory/multinode                   |  13 --
 ansible/roles/common/defaults/main.yml        |   2 -
 ansible/roles/common/tasks/config.yml         |   1 -
 .../templates/cron-logrotate-karbor.conf.j2   |   3 -
 ansible/roles/haproxy/tasks/precheck.yml      |  13 --
 ansible/roles/horizon/defaults/main.yml       |   1 -
 ansible/roles/horizon/tasks/config.yml        |   1 -
 ansible/roles/karbor/defaults/main.yml        | 129 ------------------
 ansible/roles/karbor/handlers/main.yml        |  45 ------
 ansible/roles/karbor/tasks/bootstrap.yml      |  36 -----
 .../roles/karbor/tasks/bootstrap_service.yml  |  20 ---
 .../roles/karbor/tasks/check-containers.yml   |  16 ---
 ansible/roles/karbor/tasks/check.yml          |   1 -
 ansible/roles/karbor/tasks/config.yml         |  84 ------------
 ansible/roles/karbor/tasks/copy-certs.yml     |   6 -
 .../roles/karbor/tasks/deploy-containers.yml  |   2 -
 ansible/roles/karbor/tasks/deploy.yml         |  11 --
 ansible/roles/karbor/tasks/loadbalancer.yml   |   7 -
 ansible/roles/karbor/tasks/main.yml           |   2 -
 ansible/roles/karbor/tasks/precheck.yml       |  24 ----
 ansible/roles/karbor/tasks/pull.yml           |  11 --
 ansible/roles/karbor/tasks/reconfigure.yml    |   2 -
 ansible/roles/karbor/tasks/register.yml       |   7 -
 ansible/roles/karbor/tasks/stop.yml           |   6 -
 ansible/roles/karbor/tasks/upgrade.yml        |   9 --
 .../roles/karbor/templates/karbor-api.json.j2 |  18 ---
 .../templates/karbor-operationengine.json.j2  |  18 ---
 .../templates/karbor-protection.json.j2       |  24 ----
 ansible/roles/karbor/templates/karbor.conf.j2 |  67 ---------
 .../providers.d/openstack-infra.conf.j2       |  24 ----
 ansible/site.yml                              |  19 ---
 etc/kolla/globals.yml                         |   2 -
 etc/kolla/passwords.yml                       |   4 -
 kolla_ansible/cmd/genpwd.py                   |   3 +-
 ...emove-karbor-support-c2d9414bedd3d5f7.yaml |   7 +
 tests/templates/inventory.j2                  |  13 --
 39 files changed, 8 insertions(+), 661 deletions(-)
 delete mode 100644 ansible/roles/common/templates/cron-logrotate-karbor.conf.j2
 delete mode 100644 ansible/roles/karbor/defaults/main.yml
 delete mode 100644 ansible/roles/karbor/handlers/main.yml
 delete mode 100644 ansible/roles/karbor/tasks/bootstrap.yml
 delete mode 100644 ansible/roles/karbor/tasks/bootstrap_service.yml
 delete mode 100644 ansible/roles/karbor/tasks/check-containers.yml
 delete mode 100644 ansible/roles/karbor/tasks/check.yml
 delete mode 100644 ansible/roles/karbor/tasks/config.yml
 delete mode 100644 ansible/roles/karbor/tasks/copy-certs.yml
 delete mode 100644 ansible/roles/karbor/tasks/deploy-containers.yml
 delete mode 100644 ansible/roles/karbor/tasks/deploy.yml
 delete mode 100644 ansible/roles/karbor/tasks/loadbalancer.yml
 delete mode 100644 ansible/roles/karbor/tasks/main.yml
 delete mode 100644 ansible/roles/karbor/tasks/precheck.yml
 delete mode 100644 ansible/roles/karbor/tasks/pull.yml
 delete mode 100644 ansible/roles/karbor/tasks/reconfigure.yml
 delete mode 100644 ansible/roles/karbor/tasks/register.yml
 delete mode 100644 ansible/roles/karbor/tasks/stop.yml
 delete mode 100644 ansible/roles/karbor/tasks/upgrade.yml
 delete mode 100644 ansible/roles/karbor/templates/karbor-api.json.j2
 delete mode 100644 ansible/roles/karbor/templates/karbor-operationengine.json.j2
 delete mode 100644 ansible/roles/karbor/templates/karbor-protection.json.j2
 delete mode 100644 ansible/roles/karbor/templates/karbor.conf.j2
 delete mode 100644 ansible/roles/karbor/templates/providers.d/openstack-infra.conf.j2
 create mode 100644 releasenotes/notes/remove-karbor-support-c2d9414bedd3d5f7.yaml

diff --git a/README.rst b/README.rst
index 3b532c0111..920121f5f2 100644
--- a/README.rst
+++ b/README.rst
@@ -53,7 +53,6 @@ Kolla-Ansible deploys containers for the following OpenStack projects:
 - `Heat <https://docs.openstack.org/heat/latest/>`__
 - `Horizon <https://docs.openstack.org/horizon/latest/>`__
 - `Ironic <https://docs.openstack.org/ironic/latest/>`__
-- `Karbor <https://docs.openstack.org/karbor/latest/>`__
 - `Keystone <https://docs.openstack.org/keystone/latest/>`__
 - `Kuryr <https://docs.openstack.org/kuryr/latest/>`__
 - `Magnum <https://docs.openstack.org/magnum/latest/>`__
diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index b72ffea5c8..6f52a0e533 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -340,8 +340,6 @@ iscsi_port: "3260"
 
 kafka_port: "9092"
 
-karbor_api_port: "8799"
-
 keystone_public_port: "5000"
 keystone_public_listen_port: "{{ keystone_public_port }}"
 keystone_admin_port: "35357"
@@ -604,7 +602,6 @@ enable_horizon_designate: "{{ enable_designate | bool }}"
 enable_horizon_freezer: "{{ enable_freezer | bool }}"
 enable_horizon_heat: "{{ enable_heat | bool }}"
 enable_horizon_ironic: "{{ enable_ironic | bool }}"
-enable_horizon_karbor: "{{ enable_karbor | bool }}"
 enable_horizon_magnum: "{{ enable_magnum | bool }}"
 enable_horizon_manila: "{{ enable_manila | bool }}"
 enable_horizon_masakari: "{{ enable_masakari | bool }}"
@@ -627,7 +624,6 @@ enable_ironic_ipxe: "no"
 enable_ironic_neutron_agent: "{{ enable_neutron | bool and enable_ironic | bool }}"
 enable_ironic_pxe_uefi: "no"
 enable_iscsid: "{{ (enable_cinder | bool and enable_cinder_backend_iscsi | bool) or enable_ironic | bool }}"
-enable_karbor: "no"
 enable_kafka: "{{ enable_monasca | bool }}"
 enable_kuryr: "no"
 enable_magnum: "no"
diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index afe0a2909f..ef29a05595 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -56,9 +56,6 @@ control
 [kafka:children]
 control
 
-[karbor:children]
-control
-
 [kibana:children]
 control
 
@@ -353,16 +350,6 @@ ironic
 [tgtd:children]
 storage
 
-# Karbor
-[karbor-api:children]
-karbor
-
-[karbor-protection:children]
-karbor
-
-[karbor-operationengine:children]
-karbor
-
 # Manila
 [manila-api:children]
 manila
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index f91025eaeb..36731ca9f4 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -80,9 +80,6 @@ monitoring
 [kafka:children]
 control
 
-[karbor:children]
-control
-
 [kibana:children]
 control
 
@@ -371,16 +368,6 @@ ironic
 [tgtd:children]
 storage
 
-# Karbor
-[karbor-api:children]
-karbor
-
-[karbor-protection:children]
-karbor
-
-[karbor-operationengine:children]
-karbor
-
 # Manila
 [manila-api:children]
 manila
diff --git a/ansible/roles/common/defaults/main.yml b/ansible/roles/common/defaults/main.yml
index 9c493160bb..937c4f2789 100644
--- a/ansible/roles/common/defaults/main.yml
+++ b/ansible/roles/common/defaults/main.yml
@@ -134,8 +134,6 @@ fluentd_input_openstack_services:
     enabled: "{{ enable_ironic | bool }}"
   - name: ironic-inspector
     enabled: "{{ enable_ironic | bool }}"
-  - name: karbor
-    enabled: "{{ enable_karbor | bool }}"
   - name: keystone
     enabled: "{{ enable_keystone | bool }}"
   - name: kuryr
diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index 2c4c54ad78..d5071b1899 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -190,7 +190,6 @@
       - { name: "ironic-inspector", enabled: "{{ enable_ironic | bool }}" }
       - { name: "iscsid", enabled: "{{ enable_iscsid | bool }}" }
       - { name: "kafka", enabled: "{{ enable_kafka | bool }}" }
-      - { name: "karbor", enabled: "{{ enable_karbor | bool }}" }
       - { name: "keepalived", enabled: "{{ enable_haproxy | bool }}" }
       - { name: "keystone", enabled: "{{ enable_keystone | bool }}" }
       - { name: "kibana", enabled: "{{ enable_kibana | bool }}" }
diff --git a/ansible/roles/common/templates/cron-logrotate-karbor.conf.j2 b/ansible/roles/common/templates/cron-logrotate-karbor.conf.j2
deleted file mode 100644
index 7c77eb239d..0000000000
--- a/ansible/roles/common/templates/cron-logrotate-karbor.conf.j2
+++ /dev/null
@@ -1,3 +0,0 @@
-"/var/log/kolla/karbor/*.log"
-{
-}
diff --git a/ansible/roles/haproxy/tasks/precheck.yml b/ansible/roles/haproxy/tasks/precheck.yml
index b4f4eb0c0a..3b755a1ef5 100644
--- a/ansible/roles/haproxy/tasks/precheck.yml
+++ b/ansible/roles/haproxy/tasks/precheck.yml
@@ -382,19 +382,6 @@
     - haproxy_stat.find('ironic_inspector') == -1
     - haproxy_vip_prechecks
 
-- name: Checking free port for Karbor Admin HAProxy
-  wait_for:
-    host: "{{ kolla_internal_vip_address }}"
-    port: "{{ karbor_api_port }}"
-    connect_timeout: 1
-    timeout: 1
-    state: stopped
-  when:
-    - enable_karbor | bool
-    - inventory_hostname in groups['haproxy']
-    - haproxy_stat.find('karbor_api') == -1
-    - haproxy_vip_prechecks
-
 - name: Checking free port for Keystone Admin HAProxy
   wait_for:
     host: "{{ kolla_internal_vip_address }}"
diff --git a/ansible/roles/horizon/defaults/main.yml b/ansible/roles/horizon/defaults/main.yml
index b65856e804..d0a153da05 100644
--- a/ansible/roles/horizon/defaults/main.yml
+++ b/ansible/roles/horizon/defaults/main.yml
@@ -14,7 +14,6 @@ horizon_services:
       ENABLE_FREEZER: "{{ 'yes' if enable_horizon_freezer | bool else 'no' }}"
       ENABLE_HEAT: "{{ 'yes' if enable_horizon_heat | bool else 'no' }}"
       ENABLE_IRONIC: "{{ 'yes' if enable_horizon_ironic | bool else 'no' }}"
-      ENABLE_KARBOR: "{{ 'yes' if enable_horizon_karbor | bool else 'no' }}"
       ENABLE_MAGNUM: "{{ 'yes' if enable_horizon_magnum | bool else 'no' }}"
       ENABLE_MANILA: "{{ 'yes' if enable_horizon_manila | bool else 'no' }}"
       ENABLE_MASAKARI: "{{ 'yes' if enable_horizon_masakari | bool else 'no' }}"
diff --git a/ansible/roles/horizon/tasks/config.yml b/ansible/roles/horizon/tasks/config.yml
index 5247a1f356..e614af5a20 100644
--- a/ansible/roles/horizon/tasks/config.yml
+++ b/ansible/roles/horizon/tasks/config.yml
@@ -30,7 +30,6 @@
     - { name: "heat", enabled: "{{ enable_heat_horizon_policy_file }}" }
     - { name: "ironic", enabled: "{{ enable_horizon_ironic }}" }
     - { name: "keystone", enabled: "{{ enable_keystone_horizon_policy_file }}" }
-    - { name: "karbor", enabled: "{{ enable_horizon_karbor }}" }
     - { name: "magnum", enabled: "{{ enable_horizon_magnum }}" }
     - { name: "manila", enabled: "{{ enable_horizon_manila }}" }
     - { name: "masakari", enabled: "{{ enable_horizon_masakari }}" }
diff --git a/ansible/roles/karbor/defaults/main.yml b/ansible/roles/karbor/defaults/main.yml
deleted file mode 100644
index 01d5fd09e3..0000000000
--- a/ansible/roles/karbor/defaults/main.yml
+++ /dev/null
@@ -1,129 +0,0 @@
----
-project_name: "karbor"
-
-karbor_services:
-  karbor-api:
-    container_name: karbor_api
-    group: karbor-api
-    enabled: true
-    image: "{{ karbor_api_image_full }}"
-    volumes: "{{ karbor_api_default_volumes + karbor_api_extra_volumes }}"
-    dimensions: "{{ karbor_api_dimensions }}"
-    haproxy:
-      karbor_api:
-        enabled: "{{ enable_karbor }}"
-        mode: "http"
-        external: false
-        port: "{{ karbor_api_port }}"
-      karbor_api_external:
-        enabled: "{{ enable_karbor }}"
-        mode: "http"
-        external: true
-        port: "{{ karbor_api_port }}"
-  karbor-protection:
-    container_name: karbor_protection
-    group: karbor-protection
-    enabled: true
-    image: "{{ karbor_protection_image_full }}"
-    volumes: "{{ karbor_protection_default_volumes + karbor_protection_extra_volumes }}"
-    dimensions: "{{ karbor_protection_dimensions }}"
-  karbor-operationengine:
-    container_name: karbor_operationengine
-    group: karbor-operationengine
-    enabled: true
-    image: "{{ karbor_operationengine_image_full }}"
-    volumes: "{{ karbor_operationengine_default_volumes + karbor_operationengine_extra_volumes }}"
-    dimensions: "{{ karbor_operationengine_dimensions }}"
-
-
-####################
-# Database
-####################
-karbor_database_name: "karbor"
-karbor_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}karbor{% endif %}"
-karbor_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}"
-
-
-####################
-# Docker
-####################
-karbor_install_type: "{{ kolla_install_type }}"
-karbor_tag: "{{ openstack_tag }}"
-
-karbor_protection_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ karbor_install_type }}-karbor-protection"
-karbor_protection_tag: "{{ karbor_tag }}"
-karbor_protection_image_full: "{{ karbor_protection_image }}:{{ karbor_protection_tag }}"
-
-
-karbor_operationengine_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ karbor_install_type }}-karbor-operationengine"
-karbor_operationengine_tag: "{{ karbor_tag }}"
-karbor_operationengine_image_full: "{{ karbor_operationengine_image }}:{{ karbor_operationengine_tag }}"
-
-karbor_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ karbor_install_type }}-karbor-api"
-karbor_api_tag: "{{ karbor_tag }}"
-karbor_api_image_full: "{{ karbor_api_image }}:{{ karbor_api_tag }}"
-
-karbor_api_dimensions: "{{ default_container_dimensions }}"
-karbor_protection_dimensions: "{{ default_container_dimensions }}"
-karbor_operationengine_dimensions: "{{ default_container_dimensions }}"
-
-karbor_protection_default_volumes:
-  - "{{ node_config_directory }}/karbor-protection/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-karbor_operationengine_default_volumes:
-  - "{{ node_config_directory }}/karbor-operationengine/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-karbor_api_default_volumes:
-  - "{{ node_config_directory }}/karbor-api/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-karbor_extra_volumes: "{{ default_extra_volumes }}"
-karbor_protection_extra_volumes: "{{ karbor_extra_volumes }}"
-karbor_operationengine_extra_volumes: "{{ karbor_extra_volumes }}"
-karbor_api_extra_volumes: "{{ karbor_extra_volumes }}"
-
-####################
-# OpenStack
-####################
-karbor_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ karbor_api_port }}/v1/%(project_id)s"
-karbor_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ karbor_api_port }}/v1/%(project_id)s"
-karbor_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ karbor_api_port }}/v1/%(project_id)s"
-
-karbor_logging_debug: "{{ openstack_logging_debug }}"
-
-karbor_keystone_user: "karbor"
-
-openstack_karbor_auth: "{{ openstack_auth }}"
-
-
-####################
-# Notification
-####################
-karbor_notification_topics:
-  - name: notifications
-    enabled: "{{ enable_ceilometer | bool }}"
-
-karbor_enabled_notification_topics: "{{ karbor_notification_topics | selectattr('enabled', 'equalto', true) | list }}"
-
-####################
-# Keystone
-####################
-karbor_ks_services:
-  - name: "karbor"
-    type: "data-protect"
-    description: "Application Data Protection Service"
-    endpoints:
-      - {'interface': 'admin', 'url': '{{ karbor_admin_endpoint }}'}
-      - {'interface': 'internal', 'url': '{{ karbor_internal_endpoint }}'}
-      - {'interface': 'public', 'url': '{{ karbor_public_endpoint }}'}
-
-karbor_ks_users:
-  - project: "service"
-    user: "{{ karbor_keystone_user }}"
-    password: "{{ karbor_keystone_password }}"
-    role: "admin"
diff --git a/ansible/roles/karbor/handlers/main.yml b/ansible/roles/karbor/handlers/main.yml
deleted file mode 100644
index 6865792ba0..0000000000
--- a/ansible/roles/karbor/handlers/main.yml
+++ /dev/null
@@ -1,45 +0,0 @@
----
-- name: Restart karbor-api container
-  vars:
-    service_name: "karbor-api"
-    service: "{{ karbor_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 }}"
-    dimensions: "{{ service.dimensions }}"
-  when:
-    - kolla_action != "config"
-
-- name: Restart karbor-protection container
-  vars:
-    service_name: "karbor-protection"
-    service: "{{ karbor_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 }}"
-    dimensions: "{{ service.dimensions }}"
-  when:
-    - kolla_action != "config"
-
-- name: Restart karbor-operationengine container
-  vars:
-    service_name: "karbor-operationengine"
-    service: "{{ karbor_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 }}"
-    dimensions: "{{ service.dimensions }}"
-  when:
-    - kolla_action != "config"
diff --git a/ansible/roles/karbor/tasks/bootstrap.yml b/ansible/roles/karbor/tasks/bootstrap.yml
deleted file mode 100644
index 06a80baeb6..0000000000
--- a/ansible/roles/karbor/tasks/bootstrap.yml
+++ /dev/null
@@ -1,36 +0,0 @@
----
-- name: Creating Karbor database
-  become: true
-  kolla_toolbox:
-    module_name: mysql_db
-    module_args:
-      login_host: "{{ database_address }}"
-      login_port: "{{ database_port }}"
-      login_user: "{{ database_user }}"
-      login_password: "{{ database_password }}"
-      name: "{{ karbor_database_name }}"
-  run_once: True
-  delegate_to: "{{ groups['karbor-api'][0] }}"
-  when:
-    - not use_preconfigured_databases | bool
-
-- name: Creating Karbor database user and setting permissions
-  become: true
-  kolla_toolbox:
-    module_name: mysql_user
-    module_args:
-      login_host: "{{ database_address }}"
-      login_port: "{{ database_port }}"
-      login_user: "{{ database_user }}"
-      login_password: "{{ database_password }}"
-      name: "{{ karbor_database_user }}"
-      password: "{{ karbor_database_password }}"
-      host: "%"
-      priv: "{{ karbor_database_name }}.*:ALL"
-      append_privs: "yes"
-  run_once: True
-  delegate_to: "{{ groups['karbor-api'][0] }}"
-  when:
-    - not use_preconfigured_databases | bool
-
-- import_tasks: bootstrap_service.yml
diff --git a/ansible/roles/karbor/tasks/bootstrap_service.yml b/ansible/roles/karbor/tasks/bootstrap_service.yml
deleted file mode 100644
index 806f8a52ea..0000000000
--- a/ansible/roles/karbor/tasks/bootstrap_service.yml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-- name: Running Karbor bootstrap container
-  vars:
-    karbor_api: "{{ karbor_services['karbor-api'] }}"
-  become: true
-  kolla_docker:
-    action: "start_container"
-    common_options: "{{ docker_common_options }}"
-    detach: False
-    environment:
-      KOLLA_BOOTSTRAP:
-      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-    image: "{{ karbor_api.image }}"
-    labels:
-      BOOTSTRAP:
-    name: "bootstrap_karbor"
-    restart_policy: no
-    volumes: "{{ karbor_api.volumes }}"
-  run_once: True
-  delegate_to: "{{ groups[karbor_api.group][0] }}"
diff --git a/ansible/roles/karbor/tasks/check-containers.yml b/ansible/roles/karbor/tasks/check-containers.yml
deleted file mode 100644
index cbfb448cf2..0000000000
--- a/ansible/roles/karbor/tasks/check-containers.yml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-- name: Check karbor 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: "{{ karbor_services }}"
-  notify:
-    - "Restart {{ item.key }} container"
diff --git a/ansible/roles/karbor/tasks/check.yml b/ansible/roles/karbor/tasks/check.yml
deleted file mode 100644
index ed97d539c0..0000000000
--- a/ansible/roles/karbor/tasks/check.yml
+++ /dev/null
@@ -1 +0,0 @@
----
diff --git a/ansible/roles/karbor/tasks/config.yml b/ansible/roles/karbor/tasks/config.yml
deleted file mode 100644
index 81125eb3a6..0000000000
--- a/ansible/roles/karbor/tasks/config.yml
+++ /dev/null
@@ -1,84 +0,0 @@
----
-- name: Ensuring config directories exist
-  file:
-    path: "{{ node_config_directory }}/{{ item.key }}/providers.d"
-    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: "{{ karbor_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: "{{ karbor_services }}"
-  notify:
-    - Restart {{ item.key }} container
-
-- name: Copying over karbor.conf
-  vars:
-    service_name: "{{ item.key }}"
-  merge_configs:
-    sources:
-      - "{{ role_path }}/templates/karbor.conf.j2"
-      - "{{ node_custom_config }}/global.conf"
-      - "{{ node_custom_config }}/karbor.conf"
-      - "{{ node_custom_config }}/karbor/{{ item.key }}.conf"
-      - "{{ node_custom_config }}/karbor/{{ inventory_hostname }}/karbor.conf"
-    dest: "{{ node_config_directory }}/{{ item.key }}/karbor.conf"
-    mode: "0660"
-  become: true
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ karbor_services }}"
-  notify:
-    - Restart {{ item.key }} container
-
-- name: Copying over provider configs
-  vars:
-    service_name: 'karbor-protection'
-    service: "{{ karbor_services[service_name] }}"
-  copy:
-    src: "{{ item }}"
-    dest: "{{ node_config_directory }}/{{ service_name }}/providers.d/"
-    mode: "0660"
-  become: true
-  with_fileglob:
-    - "{{ node_custom_config }}/karbor/{{ service_name }}/providers.d/*"
-  when:
-    - inventory_hostname in groups[service.group]
-    - service.enabled | bool
-  notify:
-    - Restart karbor-protection container
-
-- name: Copying over openstack-infra.conf
-  vars:
-    service_name: 'karbor-protection'
-    service: "{{ karbor_services[service_name] }}"
-  merge_configs:
-    sources:
-      - "{{ role_path }}/templates/providers.d/openstack-infra.conf.j2"
-      - "{{ node_custom_config }}/karbor/{{ service_name }}/providers.d/openstack-infra.conf"
-    dest: "{{ node_config_directory }}/{{ service_name }}/providers.d/openstack-infra.conf"
-    mode: "0660"
-  become: true
-  when:
-    - inventory_hostname in groups[service.group]
-    - service.enabled | bool
-  notify:
-    - Restart karbor-protection container
diff --git a/ansible/roles/karbor/tasks/copy-certs.yml b/ansible/roles/karbor/tasks/copy-certs.yml
deleted file mode 100644
index a8c1ce9824..0000000000
--- a/ansible/roles/karbor/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: "{{ karbor_services }}"
diff --git a/ansible/roles/karbor/tasks/deploy-containers.yml b/ansible/roles/karbor/tasks/deploy-containers.yml
deleted file mode 100644
index eb24ab5c7a..0000000000
--- a/ansible/roles/karbor/tasks/deploy-containers.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: check-containers.yml
diff --git a/ansible/roles/karbor/tasks/deploy.yml b/ansible/roles/karbor/tasks/deploy.yml
deleted file mode 100644
index d793a349da..0000000000
--- a/ansible/roles/karbor/tasks/deploy.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-- import_tasks: register.yml
-
-- import_tasks: config.yml
-
-- import_tasks: check-containers.yml
-
-- import_tasks: bootstrap.yml
-
-- name: Flush handlers
-  meta: flush_handlers
diff --git a/ansible/roles/karbor/tasks/loadbalancer.yml b/ansible/roles/karbor/tasks/loadbalancer.yml
deleted file mode 100644
index 17f71e00cd..0000000000
--- a/ansible/roles/karbor/tasks/loadbalancer.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: "Configure haproxy for {{ project_name }}"
-  import_role:
-    name: haproxy-config
-  vars:
-    project_services: "{{ karbor_services }}"
-  tags: always
diff --git a/ansible/roles/karbor/tasks/main.yml b/ansible/roles/karbor/tasks/main.yml
deleted file mode 100644
index bc5d1e6257..0000000000
--- a/ansible/roles/karbor/tasks/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- include_tasks: "{{ kolla_action }}.yml"
diff --git a/ansible/roles/karbor/tasks/precheck.yml b/ansible/roles/karbor/tasks/precheck.yml
deleted file mode 100644
index fd4a8da068..0000000000
--- a/ansible/roles/karbor/tasks/precheck.yml
+++ /dev/null
@@ -1,24 +0,0 @@
----
-- import_role:
-    name: service-precheck
-  vars:
-    service_precheck_services: "{{ karbor_services }}"
-    service_name: "{{ project_name }}"
-
-- name: Get container facts
-  become: true
-  kolla_container_facts:
-    name:
-      - karbor_api
-  register: container_facts
-
-- name: Checking free port for Karbor Admin
-  wait_for:
-    host: "{{ api_interface_address }}"
-    port: "{{ karbor_api_port }}"
-    connect_timeout: 1
-    timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['karbor-api']
-    - container_facts['karbor-api'] is not defined
diff --git a/ansible/roles/karbor/tasks/pull.yml b/ansible/roles/karbor/tasks/pull.yml
deleted file mode 100644
index 89bc29a003..0000000000
--- a/ansible/roles/karbor/tasks/pull.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-- name: Pulling karbor images
-  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: "{{ karbor_services }}"
diff --git a/ansible/roles/karbor/tasks/reconfigure.yml b/ansible/roles/karbor/tasks/reconfigure.yml
deleted file mode 100644
index 5b10a7e111..0000000000
--- a/ansible/roles/karbor/tasks/reconfigure.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: deploy.yml
diff --git a/ansible/roles/karbor/tasks/register.yml b/ansible/roles/karbor/tasks/register.yml
deleted file mode 100644
index 8002a69aed..0000000000
--- a/ansible/roles/karbor/tasks/register.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- import_role:
-    name: service-ks-register
-  vars:
-    service_ks_register_auth: "{{ openstack_karbor_auth }}"
-    service_ks_register_services: "{{ karbor_ks_services }}"
-    service_ks_register_users: "{{ karbor_ks_users }}"
diff --git a/ansible/roles/karbor/tasks/stop.yml b/ansible/roles/karbor/tasks/stop.yml
deleted file mode 100644
index 0db3f1ec1c..0000000000
--- a/ansible/roles/karbor/tasks/stop.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- import_role:
-    name: service-stop
-  vars:
-    project_services: "{{ karbor_services }}"
-    service_name: "{{ project_name }}"
diff --git a/ansible/roles/karbor/tasks/upgrade.yml b/ansible/roles/karbor/tasks/upgrade.yml
deleted file mode 100644
index 6ba9f99799..0000000000
--- a/ansible/roles/karbor/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/karbor/templates/karbor-api.json.j2 b/ansible/roles/karbor/templates/karbor-api.json.j2
deleted file mode 100644
index ccb784eaed..0000000000
--- a/ansible/roles/karbor/templates/karbor-api.json.j2
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-    "command": "karbor-api --config-file /etc/karbor/karbor.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/karbor.conf",
-            "dest": "/etc/karbor/karbor.conf",
-            "owner": "karbor",
-            "perm": "0600"
-        }
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/karbor",
-            "owner": "karbor:karbor",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/karbor/templates/karbor-operationengine.json.j2 b/ansible/roles/karbor/templates/karbor-operationengine.json.j2
deleted file mode 100644
index f61498ce65..0000000000
--- a/ansible/roles/karbor/templates/karbor-operationengine.json.j2
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-    "command": "karbor-operationengine --config-file /etc/karbor/karbor.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/karbor.conf",
-            "dest": "/etc/karbor/karbor.conf",
-            "owner": "karbor",
-            "perm": "0600"
-        }
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/karbor",
-            "owner": "karbor:karbor",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/karbor/templates/karbor-protection.json.j2 b/ansible/roles/karbor/templates/karbor-protection.json.j2
deleted file mode 100644
index e83b0eb722..0000000000
--- a/ansible/roles/karbor/templates/karbor-protection.json.j2
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "command": "karbor-protection --config-file /etc/karbor/karbor.conf",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/karbor.conf",
-            "dest": "/etc/karbor/karbor.conf",
-            "owner": "karbor",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/providers.d/*",
-            "dest": "/etc/karbor/providers.d/",
-            "owner": "karbor",
-            "perm": "0600"
-        }
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/karbor",
-            "owner": "karbor:karbor",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/karbor/templates/karbor.conf.j2 b/ansible/roles/karbor/templates/karbor.conf.j2
deleted file mode 100644
index 936f204f27..0000000000
--- a/ansible/roles/karbor/templates/karbor.conf.j2
+++ /dev/null
@@ -1,67 +0,0 @@
-[DEFAULT]
-debug = {{ karbor_logging_debug }}
-log_dir = /var/log/kolla/karbor
-transport_url = {{ rpc_transport_url }}
-
-{% if service_name == 'karbor-api' %}
-osapi_karbor_listen = {{ api_interface_address }}
-osapi_karbor_listen_port = {{ karbor_api_port }}
-osapi_karbor_workers = {{ openstack_service_workers }}
-{% endif %}
-
-[database]
-connection = mysql+pymysql://{{ karbor_database_user }}:{{ karbor_database_password }}@{{ karbor_database_address }}/{{ karbor_database_name }}
-connection_recycle_time = {{ database_connection_recycle_time }}
-max_pool_size = {{ database_max_pool_size }}
-max_retries = -1
-
-[trustee]
-user_domain_id = {{ default_user_domain_id }}
-username = {{ karbor_keystone_user }}
-password = {{ karbor_keystone_password }}
-auth_url = {{ keystone_admin_url }}
-auth_type = password
-cafile = {{ openstack_cacert }}
-
-[clients_keystone]
-auth_uri = {{ keystone_internal_url }}
-
-[karbor_client]
-version = 1
-service_type = data-protect
-service_name = karbor
-region_id = {{ openstack_region_name }}
-
-[keystone_authtoken]
-www_authenticate_uri = {{ keystone_internal_url }}
-auth_url = {{ keystone_admin_url }}
-project_domain_name = {{ default_project_domain_name }}
-auth_type = password
-project_domain_id = {{ default_project_domain_id }}
-user_domain_id = {{ default_user_domain_id }}
-project_name = service
-username = {{ karbor_keystone_user }}
-password = {{ karbor_keystone_password }}
-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 karbor_enabled_notification_topics %}
-driver = messagingv2
-topics = {{ karbor_enabled_notification_topics | map(attribute='name') | join(',') }}
-{% else %}
-driver = noop
-{% endif %}
-
-{% if om_enable_rabbitmq_tls | bool %}
-[oslo_messaging_rabbit]
-ssl = true
-ssl_ca_file = {{ om_rabbitmq_cacert }}
-{% endif %}
-
-[oslo_middleware]
-enable_proxy_headers_parsing = True
diff --git a/ansible/roles/karbor/templates/providers.d/openstack-infra.conf.j2 b/ansible/roles/karbor/templates/providers.d/openstack-infra.conf.j2
deleted file mode 100644
index 410256fb95..0000000000
--- a/ansible/roles/karbor/templates/providers.d/openstack-infra.conf.j2
+++ /dev/null
@@ -1,24 +0,0 @@
-[provider]
-name = OS Infra Provider
-description = This provider uses OpenStack's own services (swift, cinder) as storage
-id = {{ karbor_openstack_infra_id }}
-
-plugin=karbor-volume-protection-plugin
-plugin=karbor-image-protection-plugin
-plugin=karbor-server-protection-plugin
-bank=karbor-swift-bank-plugin
-
-[swift_client]
-swift_auth_url={{ keystone_internal_url }}/v3
-swift_auth_version=3
-swift_user=admin
-swift_key={{ keystone_admin_password }}
-swift_tenant_name=admin
-swift_project_domain_id = {{ default_project_domain_id }}
-swift_user_domain_id = {{ default_user_domain_id }}
-
-
-[swift_bank_plugin]
-lease_expire_window=120
-lease_renew_window=100
-lease_validity_window=100
diff --git a/ansible/site.yml b/ansible/site.yml
index 9fa73a5f27..55ba30d462 100644
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -39,7 +39,6 @@
         - enable_ironic_{{ enable_ironic | bool }}
         - enable_iscsid_{{ enable_iscsid | bool }}
         - enable_kafka_{{ enable_kafka | bool }}
-        - enable_karbor_{{ enable_karbor | bool }}
         - enable_keystone_{{ enable_keystone | bool }}
         - enable_kibana_{{ enable_kibana | bool }}
         - enable_kuryr_{{ enable_kuryr | bool }}
@@ -207,11 +206,6 @@
             tasks_from: loadbalancer
           tags: ironic
           when: enable_ironic | bool
-        - include_role:
-            name: karbor
-            tasks_from: loadbalancer
-          tags: karbor
-          when: enable_karbor | bool
         - include_role:
             name: keystone
             tasks_from: loadbalancer
@@ -598,19 +592,6 @@
         tags: storm,
         when: enable_storm | bool }
 
-- name: Apply role karbor
-  gather_facts: false
-  hosts:
-    - karbor-api
-    - karbor-protection
-    - karbor-operationengine
-    - '&enable_karbor_True'
-  serial: '{{ kolla_serial|default("0") }}'
-  roles:
-    - { role: karbor,
-        tags: karbor,
-        when: enable_karbor | bool }
-
 - name: Apply role swift
   gather_facts: false
   hosts:
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index 81550c986f..d10c88940e 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -303,7 +303,6 @@
 #enable_horizon_freezer: "{{ enable_freezer | bool }}"
 #enable_horizon_heat: "{{ enable_heat | bool }}"
 #enable_horizon_ironic: "{{ enable_ironic | bool }}"
-#enable_horizon_karbor: "{{ enable_karbor | bool }}"
 #enable_horizon_magnum: "{{ enable_magnum | bool }}"
 #enable_horizon_manila: "{{ enable_manila | bool }}"
 #enable_horizon_masakari: "{{ enable_masakari | bool }}"
@@ -326,7 +325,6 @@
 #enable_ironic_neutron_agent: "{{ enable_neutron | bool and enable_ironic | bool }}"
 #enable_ironic_pxe_uefi: "no"
 #enable_iscsid: "{{ (enable_cinder | bool and enable_cinder_backend_iscsi | bool) or enable_ironic | bool }}"
-#enable_karbor: "no"
 #enable_kafka: "{{ enable_monasca | bool }}"
 #enable_kibana: "{{ 'yes' if enable_central_logging | bool or enable_monasca | bool else 'no' }}"
 #enable_kuryr: "no"
diff --git a/etc/kolla/passwords.yml b/etc/kolla/passwords.yml
index b37e018a09..73d1765de5 100644
--- a/etc/kolla/passwords.yml
+++ b/etc/kolla/passwords.yml
@@ -71,10 +71,6 @@ glance_keystone_password:
 gnocchi_database_password:
 gnocchi_keystone_password:
 
-karbor_database_password:
-karbor_keystone_password:
-karbor_openstack_infra_id:
-
 kuryr_keystone_password:
 
 nova_database_password:
diff --git a/kolla_ansible/cmd/genpwd.py b/kolla_ansible/cmd/genpwd.py
index 40fcf8ae5a..f1aed498ea 100755
--- a/kolla_ansible/cmd/genpwd.py
+++ b/kolla_ansible/cmd/genpwd.py
@@ -112,8 +112,7 @@ def main():
                  'gnocchi_project_id',
                  'gnocchi_resource_id',
                  'gnocchi_user_id',
-                 'designate_pool_id',
-                 'karbor_openstack_infra_id']
+                 'designate_pool_id']
 
     # SSH key pair
     ssh_keys = ['kolla_ssh_key', 'nova_ssh_key',
diff --git a/releasenotes/notes/remove-karbor-support-c2d9414bedd3d5f7.yaml b/releasenotes/notes/remove-karbor-support-c2d9414bedd3d5f7.yaml
new file mode 100644
index 0000000000..abaa563eee
--- /dev/null
+++ b/releasenotes/notes/remove-karbor-support-c2d9414bedd3d5f7.yaml
@@ -0,0 +1,7 @@
+---
+upgrade:
+  - |
+    The Karbor project is no longer maintained and `retired since the Wallaby
+    cycle
+    <http://lists.openstack.org/pipermail/openstack-discuss/2020-November/018643.html>`__.
+    Its support and roles are also removed since Wallaby cycle.
diff --git a/tests/templates/inventory.j2 b/tests/templates/inventory.j2
index 8ea1ed0ccf..8e5ce2a3cd 100644
--- a/tests/templates/inventory.j2
+++ b/tests/templates/inventory.j2
@@ -94,9 +94,6 @@ monitoring
 [kafka:children]
 control
 
-[karbor:children]
-control
-
 [kibana:children]
 control
 
@@ -385,16 +382,6 @@ ironic
 [tgtd:children]
 storage
 
-# Karbor
-[karbor-api:children]
-karbor
-
-[karbor-protection:children]
-karbor
-
-[karbor-operationengine:children]
-karbor
-
 # Manila
 [manila-api:children]
 manila