From ddad15c07e9101eca3fae0f94715bd2359b686a5 Mon Sep 17 00:00:00 2001
From: Jeffrey Zhang <zhang.lei.fly@gmail.com>
Date: Sun, 4 Jun 2017 22:32:15 +0800
Subject: [PATCH] Remove ceilometer-api and ceilometer-collector services

* remove ceilometer-api and ceilometer-collector service
* use ceilometer-notification to publish message to proper backend
* remove useless ceilometer_database_type and ceilometer_event_type
  variables
* sync event_definitions.yaml, event_pipeline.yaml and pipeline.yaml
  file with upstream

Change-Id: Ib39053cb5f70bd11ee61d3f26d5b28accecd7190
---
 ansible/group_vars/all.yml                    | 12 ----
 ansible/roles/ceilometer/defaults/main.yml    | 31 +--------
 ansible/roles/ceilometer/handlers/main.yml    | 49 --------------
 ansible/roles/ceilometer/tasks/bootstrap.yml  | 67 +------------------
 .../ceilometer/tasks/bootstrap_service.yml    |  2 +-
 ansible/roles/ceilometer/tasks/config.yml     | 28 +-------
 ansible/roles/ceilometer/tasks/precheck.yml   | 29 +-------
 ansible/roles/ceilometer/tasks/register.yml   | 20 ------
 ansible/roles/ceilometer/tasks/upgrade.yml    | 12 ++++
 .../templates/ceilometer-api.json.j2          | 13 ----
 .../templates/ceilometer-collector.json.j2    | 32 ---------
 .../ceilometer/templates/ceilometer.conf.j2   | 35 ----------
 .../templates/event_definitions.yaml.j2       | 52 +++++++++++---
 .../templates/event_pipeline.yaml.j2          |  8 ++-
 .../ceilometer/templates/pipeline.yaml.j2     | 14 ++--
 .../templates/wsgi-ceilometer-api.conf.j2     | 24 -------
 .../templates/conf/filter/01-rewrite.conf.j2  |  4 +-
 ansible/roles/haproxy/tasks/precheck.yml      | 12 ----
 .../roles/haproxy/templates/haproxy.cfg.j2    | 16 -----
 etc/kolla/globals.yml                         |  9 ---
 ...eter-useless-service-4e210ddc1c48ac48.yaml |  8 +++
 21 files changed, 81 insertions(+), 396 deletions(-)
 delete mode 100644 ansible/roles/ceilometer/templates/ceilometer-collector.json.j2
 delete mode 100644 ansible/roles/ceilometer/templates/wsgi-ceilometer-api.conf.j2
 create mode 100644 releasenotes/notes/remove-ceilometer-useless-service-4e210ddc1c48ac48.yaml

diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index da6c863a05..bb7d702cfd 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -140,8 +140,6 @@ aodh_api_port: "8042"
 
 barbican_api_port: "9311"
 
-ceilometer_api_port: "8777"
-
 cinder_api_port: "8776"
 
 congress_api_port: "1789"
@@ -473,16 +471,6 @@ glance_backend_ceph: "{{ enable_ceph }}"
 glance_backend_vmware: "no"
 glance_file_datadir_volume: "glance"
 
-#######################
-# Ceilometer options
-#######################
-# Valid options are [ mongodb, mysql, gnocchi ]
-ceilometer_database_type: "mongodb"
-
-# Valid options are [ mongodb, gnocchi, panko ]
-ceilometer_event_type: "mongodb"
-
-
 #######################
 # Barbican options
 #######################
diff --git a/ansible/roles/ceilometer/defaults/main.yml b/ansible/roles/ceilometer/defaults/main.yml
index 187e3e283e..5580ebe228 100644
--- a/ansible/roles/ceilometer/defaults/main.yml
+++ b/ansible/roles/ceilometer/defaults/main.yml
@@ -2,6 +2,7 @@
 project_name: "ceilometer"
 
 ceilometer_services:
+# TODO(jeffrey4l): ceilometer_api_image is still required for bootstrap service. Remove this after use ceilometer notification image instead
   ceilometer-api:
     container_name: ceilometer_api
     group: ceilometer-api
@@ -31,16 +32,6 @@ ceilometer_services:
       - "/etc/localtime:/etc/localtime:ro"
       - "ceilometer:/var/lib/ceilometer/"
       - "kolla_logs:/var/log/kolla/"
-  ceilometer-collector:
-    container_name: ceilometer_collector
-    group: ceilometer-collector
-    enabled: True
-    image: "{{ ceilometer_collector_image_full }}"
-    volumes:
-      - "{{ node_config_directory }}/ceilometer-collector/:{{ container_config_directory }}/:ro"
-      - "/etc/localtime:/etc/localtime:ro"
-      - "ceilometer:/var/lib/ceilometer/"
-      - "kolla_logs:/var/log/kolla/"
   ceilometer-compute:
     container_name: ceilometer_compute
     group: ceilometer-compute
@@ -56,17 +47,6 @@ ceilometer_services:
       - "nova_libvirt:/var/lib/libvirt"
 
 
-####################
-# Database
-####################
-ceilometer_database_name: "ceilometer"
-ceilometer_database_user: "ceilometer"
-ceilometer_database_port: "{{ mongodb_port if ceilometer_database_type == 'mongodb' else database_port }}"
-
-ceilometer_database_mongodb_address: "{% for host in groups['mongodb'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ ceilometer_database_port }}{% if not loop.last %},{% endif %}{% endfor %}"
-ceilometer_database_mysql_address: "{{ kolla_internal_fqdn }}"
-
-
 ####################
 # Docker
 ####################
@@ -77,6 +57,7 @@ ceilometer_notification_image: "{{ docker_registry ~ '/' if docker_registry else
 ceilometer_notification_tag: "{{ ceilometer_tag }}"
 ceilometer_notification_image_full: "{{ ceilometer_notification_image }}:{{ ceilometer_notification_tag }}"
 
+# TODO(jeffrey4l): ceilometer_api_image is still required for bootstrap service. Remove this after use ceilometer notification image instead
 ceilometer_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ ceilometer_install_type }}-ceilometer-api"
 ceilometer_api_tag: "{{ ceilometer_tag }}"
 ceilometer_api_image_full: "{{ ceilometer_api_image }}:{{ ceilometer_api_tag }}"
@@ -85,10 +66,6 @@ ceilometer_central_image: "{{ docker_registry ~ '/' if docker_registry else '' }
 ceilometer_central_tag: "{{ ceilometer_tag }}"
 ceilometer_central_image_full: "{{ ceilometer_central_image }}:{{ ceilometer_central_tag }}"
 
-ceilometer_collector_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ ceilometer_install_type }}-ceilometer-collector"
-ceilometer_collector_tag: "{{ ceilometer_tag }}"
-ceilometer_collector_image_full: "{{ ceilometer_collector_image }}:{{ ceilometer_collector_tag }}"
-
 ceilometer_compute_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ ceilometer_install_type }}-ceilometer-compute"
 ceilometer_compute_tag: "{{ ceilometer_tag }}"
 ceilometer_compute_image_full: "{{ ceilometer_compute_image }}:{{ ceilometer_compute_tag }}"
@@ -97,10 +74,6 @@ ceilometer_compute_image_full: "{{ ceilometer_compute_image }}:{{ ceilometer_com
 ####################
 # OpenStack
 ####################
-ceilometer_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ ceilometer_api_port }}"
-ceilometer_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ ceilometer_api_port }}"
-ceilometer_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ ceilometer_api_port }}"
-
 ceilometer_logging_debug: "{{ openstack_logging_debug }}"
 
 ceilometer_keystone_user: "ceilometer"
diff --git a/ansible/roles/ceilometer/handlers/main.yml b/ansible/roles/ceilometer/handlers/main.yml
index a5bcf9788f..162cacc2ce 100644
--- a/ansible/roles/ceilometer/handlers/main.yml
+++ b/ansible/roles/ceilometer/handlers/main.yml
@@ -1,28 +1,4 @@
 ---
-- name: Restart ceilometer-api container
-  vars:
-    service_name: "ceilometer-api"
-    service: "{{ ceilometer_services[service_name] }}"
-    config_json: "{{ ceilometer_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
-    ceilometer_conf: "{{ ceilometer_confs.results|selectattr('item.key', 'equalto', service_name)|first }}"
-    policy_json: "{{ ceilometer_policy_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
-    ceilometer_api_container: "{{ check_ceilometer_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
-  kolla_docker:
-    action: "recreate_or_restart_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ service.container_name }}"
-    image: "{{ service.image }}"
-    volumes: "{{ service.volumes }}"
-  when:
-    - action != "config"
-    - inventory_hostname in groups[service.group]
-    - service.enabled | bool
-    - config_json.changed | bool
-      or ceilometer_conf.changed | bool
-      or policy_json.changed | bool
-      or wsgi_ceilometer_api.changed | bool
-      or ceilometer_api_container.changed | bool
-
 - name: Restart ceilometer-notification container
   vars:
     service_name: "ceilometer-notification"
@@ -72,31 +48,6 @@
       or policy_json.changed | bool
       or ceilometer_central_container.changed | bool
 
-- name: Restart ceilometer-collector container
-  vars:
-    service_name: "ceilometer-collector"
-    service: "{{ ceilometer_services[service_name] }}"
-    config_json: "{{ ceilometer_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
-    ceilometer_conf: "{{ ceilometer_confs.results|selectattr('item.key', 'equalto', service_name)|first }}"
-    policy_json: "{{ ceilometer_policy_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
-    ceilometer_collector_container: "{{ check_ceilometer_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
-    panko_conf: "{{ panko_confs.results|selectattr('item.key', 'equalto', service_name)|first }}"
-  kolla_docker:
-    action: "recreate_or_restart_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ service.container_name }}"
-    image: "{{ service.image }}"
-    volumes: "{{ service.volumes }}"
-  when:
-    - action != "config"
-    - inventory_hostname in groups[service.group]
-    - service.enabled | bool
-    - config_json.changed | bool
-      or ceilometer_conf.changed | bool
-      or policy_json.changed | bool
-      or ceilometer_collector_container.changed | bool
-      or panko_conf.changed | bool
-
 - name: Restart ceilometer-compute container
   vars:
     service_name: "ceilometer-compute"
diff --git a/ansible/roles/ceilometer/tasks/bootstrap.yml b/ansible/roles/ceilometer/tasks/bootstrap.yml
index 36dcfa60e7..22ec22504e 100644
--- a/ansible/roles/ceilometer/tasks/bootstrap.yml
+++ b/ansible/roles/ceilometer/tasks/bootstrap.yml
@@ -1,68 +1,3 @@
 ---
-- name: Creating Ceilometer MongoDB database
-  command: docker exec -t mongodb mongo --host {{ ceilometer_database_mongodb_address }} --eval 'db = db.getSiblingDB("{{ ceilometer_database_name }}"); db.createUser({user':' "{{ ceilometer_database_user }}", pwd':' "{{ ceilometer_database_password }}", roles':' [ "readWrite", "dbAdmin" ]})'
-  register: mongodb_ceilometer_database
-  run_once: true
-  changed_when: "{{ 'already' not in mongodb_ceilometer_database.stdout }}"
-  failed_when: "{{ mongodb_ceilometer_database.stdout.split()[4] != 'connecting' }}"
-  delegate_to: "{{ groups['mongodb'][0] }}"
-  when:
-    - ceilometer_database_type == "mongodb"
-
-- name: Creating external Ceilometer MySQL database by using given credential
-  kolla_toolbox:
-    module_name: mysql_db
-    module_args:
-      login_host: "{{ ceilometer_database_mysql_address }}"
-      login_port: "{{ ceilometer_database_port }}"
-      login_user: "{{ ceilometer_database_user }}"
-      login_password: "{{ ceilometer_database_password }}"
-      name: "{{ ceilometer_database_name }}"
-  register: mysql_access
-  failed_when: False
-  changed_when: False
-  run_once: True
-  when:
-    - ceilometer_database_type == "mysql"
-
-- name: Fallback to create internal Ceilometer MySQL database
-  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: "{{ ceilometer_database_name }}"
-  register: mysql_ceilometer_database
-  run_once: True
-  delegate_to: "{{ groups['ceilometer-api'][0] }}"
-  when:
-    - ceilometer_database_type == "mysql"
-    - mysql_access.failed
-
-- name: Creating Ceilometer database user and setting permissions
-  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: "{{ ceilometer_database_user }}"
-      password: "{{ ceilometer_database_password }}"
-      host: "%"
-      priv: "{{ ceilometer_database_name }}.*:ALL"
-      append_privs: "yes"
-  run_once: True
-  delegate_to: "{{ groups['ceilometer-api'][0] }}"
-  when:
-    - ceilometer_database_type == "mysql"
-    - mysql_access.failed
-
-# TODO(Jeffrey4l): fix idempotent when ceilometer_database_type == "gnocchi"
-# NOTE(vbel): bootstrapping of mysql db for ceilometer is idempotent
+# TODO(Jeffrey4l): fix idempotent
 - include: bootstrap_service.yml
-  when: ((ceilometer_database_type == "mongodb" and mongodb_ceilometer_database.changed)
-         or (ceilometer_database_type == "mysql" and mysql_ceilometer_database.changed )
-         or ceilometer_database_type == "gnocchi")
diff --git a/ansible/roles/ceilometer/tasks/bootstrap_service.yml b/ansible/roles/ceilometer/tasks/bootstrap_service.yml
index ed506266e8..c95b2e19bf 100644
--- a/ansible/roles/ceilometer/tasks/bootstrap_service.yml
+++ b/ansible/roles/ceilometer/tasks/bootstrap_service.yml
@@ -9,7 +9,7 @@
     environment:
       KOLLA_BOOTSTRAP:
       KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-      CEILOMETER_DATABASE_TYPE: "{{ ceilometer_database_type }}"
+      CEILOMETER_DATABASE_TYPE: "gnocchi"
     image: "{{ ceilometer_api.image }}"
     labels:
       BOOTSTRAP:
diff --git a/ansible/roles/ceilometer/tasks/config.yml b/ansible/roles/ceilometer/tasks/config.yml
index 254cf0520f..aaedbdc5c8 100644
--- a/ansible/roles/ceilometer/tasks/config.yml
+++ b/ansible/roles/ceilometer/tasks/config.yml
@@ -19,29 +19,10 @@
     - item.value.enabled | bool
   with_dict: "{{ ceilometer_services }}"
   notify:
-    - Restart ceilometer-api container
     - Restart ceilometer-notification container
     - Restart ceilometer-central container
-    - Restart ceilometer-collector container
     - Restart ceilometer-compute container
 
-- name: Copying over wsgi-ceilometer-api.conf
-  vars:
-    service: "{{ ceilometer_services['ceilometer-api'] }}"
-  template:
-    src: "{{ item }}"
-    dest: "{{ node_config_directory }}/ceilometer-api/wsgi-ceilometer-api.conf"
-  with_first_found:
-    - "{{ node_custom_config }}/ceilometer/{{ inventory_hostname }}/wsgi-ceilometer-api.conf"
-    - "{{ node_custom_config }}/ceilometer/wsgi-ceilometer-api.conf"
-    - "wsgi-ceilometer-api.conf.j2"
-  register: wsgi_ceilometer_api
-  when:
-    - inventory_hostname in groups[service.group]
-    - service.enabled | bool
-  notify:
-    - Restart ceilometer-api container
-
 - name: Copying over ceilometer.conf
   vars:
     service_name: "{{ item.key }}"
@@ -61,10 +42,8 @@
     - inventory_hostname in groups[item.value.group]
   with_dict: "{{ ceilometer_services }}"
   notify:
-    - Restart ceilometer-api container
     - Restart ceilometer-notification container
     - Restart ceilometer-central container
-    - Restart ceilometer-collector container
     - Restart ceilometer-compute container
 
 - name: Copying over event and pipeline yaml for notification service
@@ -88,7 +67,6 @@
   vars:
     service_require_panko_conf:
       - ceilometer-notification
-      - ceilometer-collector
   merge_configs:
     sources:
       - "{{ role_path }}/../panko/templates/panko.conf.j2"
@@ -99,7 +77,7 @@
     dest: "{{ node_config_directory }}/{{ item.key }}/panko.conf"
   register: panko_confs
   when:
-    - ceilometer_event_type == 'panko'
+    - enable_panko | bool
     - item.value.enabled | bool
     - inventory_hostname in groups[item.value.group]
     - item.key in service_require_panko_conf
@@ -123,10 +101,8 @@
     - item.value.enabled | bool
   with_dict: "{{ ceilometer_services }}"
   notify:
-    - Restart ceilometer-api container
     - Restart ceilometer-notification container
     - Restart ceilometer-central container
-    - Restart ceilometer-collector container
     - Restart ceilometer-compute container
 
 # check whether the containers parameter is changed. If yes, trigger the handler.
@@ -145,8 +121,6 @@
     - item.value.enabled | bool
   with_dict: "{{ ceilometer_services }}"
   notify:
-    - Restart ceilometer-api container
     - Restart ceilometer-notification container
     - Restart ceilometer-central container
-    - Restart ceilometer-collector container
     - Restart ceilometer-compute container
diff --git a/ansible/roles/ceilometer/tasks/precheck.yml b/ansible/roles/ceilometer/tasks/precheck.yml
index 28b64bdbbb..ce5dff8b42 100644
--- a/ansible/roles/ceilometer/tasks/precheck.yml
+++ b/ansible/roles/ceilometer/tasks/precheck.yml
@@ -1,35 +1,8 @@
 ---
-- name: Get container facts
-  kolla_container_facts:
-    name:
-      - ceilometer_api
-  register: container_facts
-
-- name: Checking free port for Ceilometer API
-  wait_for:
-    host: "{{ api_interface_address }}"
-    port: "{{ ceilometer_api_port }}"
-    connect_timeout: 1
-    timeout: 1
-    state: stopped
-  when:
-    - container_facts['ceilometer_api'] is not defined
-    - inventory_hostname in groups['ceilometer-api']
-
-- name: Checking mongodb backend for ceilometer
-  run_once: True
-  local_action: fail msg="ceilometer_database_type set to 'mongodb' but mongodb is not enabled"
-  changed_when: false
-  when:
-    - enable_ceilometer | bool
-    - not enable_mongodb | bool
-    - ceilometer_database_type == "mongodb"
-
 - name: Checking gnocchi backend for ceilometer
   run_once: True
-  local_action: fail msg="ceilometer_database_type or ceilometer_event_type set to 'gnocchi' but gnocchi is not enabled"
+  local_action: fail msg="gnocchi is required but not enabled"
   changed_when: false
   when:
     - enable_ceilometer | bool
     - not enable_gnocchi | bool
-    - (ceilometer_database_type == "gnocchi" or ceilometer_event_type == "gnocchi")
diff --git a/ansible/roles/ceilometer/tasks/register.yml b/ansible/roles/ceilometer/tasks/register.yml
index f80d2ab8d1..2f81202f47 100644
--- a/ansible/roles/ceilometer/tasks/register.yml
+++ b/ansible/roles/ceilometer/tasks/register.yml
@@ -1,24 +1,4 @@
 ---
-- name: Creating the Ceilometer service and endpoint
-  kolla_toolbox:
-    module_name: "kolla_keystone_service"
-    module_args:
-      service_name: "ceilometer"
-      service_type: "metering"
-      description: "Openstack Telemetry"
-      endpoint_region: "{{ openstack_region_name }}"
-      url: "{{ item.url }}"
-      interface: "{{ item.interface }}"
-      region_name: "{{ openstack_region_name }}"
-      auth: "{{ '{{ openstack_ceilometer_auth }}' }}"
-    module_extra_vars:
-      openstack_ceilometer_auth: "{{ openstack_ceilometer_auth }}"
-  run_once: True
-  with_items:
-    - {'interface': 'admin', 'url': '{{ ceilometer_admin_endpoint }}'}
-    - {'interface': 'internal', 'url': '{{ ceilometer_internal_endpoint }}'}
-    - {'interface': 'public', 'url': '{{ ceilometer_public_endpoint }}'}
-
 - name: Creating the Ceilometer project, user, and role
   kolla_toolbox:
     module_name: "kolla_keystone_user"
diff --git a/ansible/roles/ceilometer/tasks/upgrade.yml b/ansible/roles/ceilometer/tasks/upgrade.yml
index c38db1adf4..93431db991 100644
--- a/ansible/roles/ceilometer/tasks/upgrade.yml
+++ b/ansible/roles/ceilometer/tasks/upgrade.yml
@@ -3,5 +3,17 @@
 
 - include: bootstrap_service.yml
 
+# TODO(jeffrey4l): ceilometer-api and ceilometer-collector are marked as
+# deprecated and will be removed already. Upgrade to Pike should remove
+# ceilometer-api and ceilometer-collector container. This task should be
+# remove in Q cycle.
+- name: Containers are being removed
+  kolla_docker:
+    name: "{{ item }}"
+    action: remove_container
+  with_items:
+    - ceilometer_api
+    - ceilometer_collector
+
 - name: Flush handlers
   meta: flush_handlers
diff --git a/ansible/roles/ceilometer/templates/ceilometer-api.json.j2 b/ansible/roles/ceilometer/templates/ceilometer-api.json.j2
index 271d5e0f79..fccdc6f6ab 100644
--- a/ansible/roles/ceilometer/templates/ceilometer-api.json.j2
+++ b/ansible/roles/ceilometer/templates/ceilometer-api.json.j2
@@ -9,19 +9,6 @@
             "dest": "/etc/ceilometer/ceilometer.conf",
             "owner": "ceilometer",
             "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/wsgi-ceilometer-api.conf",
-            "dest": "/etc/{{ apache_dir }}/{{ apache_file }}",
-            "owner": "ceilometer",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/policy.json",
-            "dest": "/etc/ceilometer/policy.json",
-            "owner": "ceilometer",
-            "perm": "0600",
-            "optional": true
         }
     ],
     "permissions": [
diff --git a/ansible/roles/ceilometer/templates/ceilometer-collector.json.j2 b/ansible/roles/ceilometer/templates/ceilometer-collector.json.j2
deleted file mode 100644
index 204dfc5f39..0000000000
--- a/ansible/roles/ceilometer/templates/ceilometer-collector.json.j2
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-    "command": "ceilometer-collector",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/ceilometer.conf",
-            "dest": "/etc/ceilometer/ceilometer.conf",
-            "owner": "ceilometer",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/policy.json",
-            "dest": "/etc/ceilometer/policy.json",
-            "owner": "ceilometer",
-            "perm": "0600",
-            "optional": true
-        },
-        {
-            "source": "{{ container_config_directory }}/panko.conf",
-            "dest": "/etc/panko/panko.conf",
-            "owner": "ceilometer",
-            "perm": "0600",
-            "optional": true
-        }
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/ceilometer",
-            "owner": "ceilometer:ceilometer",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/ceilometer/templates/ceilometer.conf.j2 b/ansible/roles/ceilometer/templates/ceilometer.conf.j2
index 2bcf8e9591..93ea7b99b4 100644
--- a/ansible/roles/ceilometer/templates/ceilometer.conf.j2
+++ b/ansible/roles/ceilometer/templates/ceilometer.conf.j2
@@ -5,35 +5,6 @@ log_dir = /var/log/kolla/ceilometer
 
 transport_url = rabbit://{% for host in groups['rabbitmq'] %}{{ rabbitmq_user }}:{{ rabbitmq_password }}@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ rabbitmq_port }}{% if not loop.last %},{% endif %}{% endfor %}
 
-{% if ceilometer_event_type == "mongodb" %}
-event_dispatchers = database
-{% elif ceilometer_event_type == "gnocchi" %}
-event_dispatchers = gnocchi
-{% elif ceilometer_event_type == "panko" %}
-event_dispatchers = panko
-{% endif %}
-
-{% if ceilometer_database_type == 'gnocchi' %}
-meter_dispatchers = gnocchi
-{% else %}
-meter_dispatchers = database
-{% endif %}
-
-[api]
-port = {{ ceilometer_api_port }}
-host = {{ api_interface_address }}
-
-[collector]
-
-[database]
-{% if ceilometer_database_type == "mongodb" %}
-event_connection = mongodb://{{ ceilometer_database_user }}:{{ ceilometer_database_password }}@{{ ceilometer_database_mongodb_address }}/{{ ceilometer_database_name }}
-metering_connection = mongodb://{{ ceilometer_database_user }}:{{ ceilometer_database_password }}@{{ ceilometer_database_mongodb_address }}/{{ ceilometer_database_name }}
-{% elif ceilometer_database_type == "mysql" %}
-event_connection = mysql+pymysql://{{ ceilometer_database_user }}:{{ ceilometer_database_password }}@{{ ceilometer_database_mysql_address }}:{{ ceilometer_database_port }}/{{ ceilometer_database_name }}
-metering_connection = mysql+pymysql://{{ ceilometer_database_user }}:{{ ceilometer_database_password }}@{{ ceilometer_database_mysql_address }}:{{ ceilometer_database_port }}/{{ ceilometer_database_name }}
-{% endif %}
-
 [keystone_authtoken]
 auth_uri = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_public_port }}
 project_domain_name = {{ default_project_domain_name }}
@@ -59,9 +30,3 @@ project_domain_id = {{ default_project_domain_id }}
 user_domain_id = {{ default_user_domain_id }}
 auth_type = password
 interface = internal
-
-{% if ceilometer_database_type == 'gnocchi' %}
-[dispatcher_gnocchi]
-filter_service_activity = False
-url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ gnocchi_api_port }}
-{% endif %}
diff --git a/ansible/roles/ceilometer/templates/event_definitions.yaml.j2 b/ansible/roles/ceilometer/templates/event_definitions.yaml.j2
index 5f0d82ae5e..d87e1dca86 100644
--- a/ansible/roles/ceilometer/templates/event_definitions.yaml.j2
+++ b/ansible/roles/ceilometer/templates/event_definitions.yaml.j2
@@ -1,5 +1,5 @@
 ---
-- event_type: compute.instance.*
+- event_type: 'compute.instance.*'
   traits: &instance_traits
     tenant_id:
       fields: payload.tenant_id
@@ -7,6 +7,8 @@
       fields: payload.user_id
     instance_id:
       fields: payload.instance_id
+    resource_id:
+      fields: payload.instance_id
     host:
       fields: publisher_id.`split(., 1, 1)`
     service:
@@ -45,6 +47,11 @@
     deleted_at:
       type: datetime
       fields: payload.deleted_at
+- event_type: compute.instance.update
+  traits:
+    <<: *instance_traits
+    old_state:
+      fields: payload.old_state
 - event_type: compute.instance.exists
   traits:
     <<: *instance_traits
@@ -96,7 +103,7 @@
       fields: payload.image_id
     host:
       fields: payload.host
-- event_type: ['image.update', 'image.upload', 'image.delete']
+- event_type: ['image.create', 'image.update', 'image.upload', 'image.delete']
   traits: &glance_crud
     project_id:
       fields: payload.owner
@@ -127,6 +134,7 @@
     destination_ip:
       fields: payload.destination_ip
     bytes_sent:
+      type: int
       fields: payload.bytes_sent
 - event_type: orchestration.stack.*
   traits: &orchestration_crud
@@ -252,14 +260,6 @@
       fields: payload.target.metadata.object
     observer_id:
       fields: payload.observer.id
-- event_type: magnetodb.table.*
-  traits: &kv_store
-    resource_id:
-      fields: payload.table_uuid
-    user_id:
-      fields: _context_user_id
-    project_id:
-      fields: _context_tenant
 - event_type: ['network.*', 'subnet.*', 'port.*', 'router.*', 'floatingip.*', 'pool.*', 'vip.*', 'member.*', 'health_monitor.*', 'healthmonitor.*', 'listener.*', 'loadbalancer.*', 'firewall.*', 'firewall_policy.*', 'firewall_rule.*', 'vpnservice.*', 'ipsecpolicy.*', 'ikepolicy.*', 'ipsec_site_connection.*']
   traits: &network_traits
     user_id:
@@ -551,3 +551,35 @@
       fields: payload.info.db.statement
     db.params:
       fields: payload.info.db.params
+- event_type: 'magnum.bay.*'
+  traits: &magnum_bay_crud
+    id:
+      fields: payload.id
+    typeURI:
+      fields: payload.typeURI
+    eventType:
+      fields: payload.eventType
+    eventTime:
+      fields: payload.eventTime
+    action:
+      fields: payload.action
+    outcome:
+      fields: payload.outcome
+    initiator_id:
+      fields: payload.initiator.id
+    initiator_typeURI:
+      fields: payload.initiator.typeURI
+    initiator_name:
+      fields: payload.initiator.name
+    initiator_host_agent:
+      fields: payload.initiator.host.agent
+    initiator_host_address:
+      fields: payload.initiator.host.address
+    target_id:
+      fields: payload.target.id
+    target_typeURI:
+      fields: payload.target.typeURI
+    observer_id:
+      fields: payload.observer.id
+    observer_typeURI:
+      fields: payload.observer.typeURI
diff --git a/ansible/roles/ceilometer/templates/event_pipeline.yaml.j2 b/ansible/roles/ceilometer/templates/event_pipeline.yaml.j2
index 10275f7492..2b056acac1 100644
--- a/ansible/roles/ceilometer/templates/event_pipeline.yaml.j2
+++ b/ansible/roles/ceilometer/templates/event_pipeline.yaml.j2
@@ -8,6 +8,10 @@ sources:
 sinks:
     - name: event_sink
       transformers:
-      triggers:
       publishers:
-          - notifier://
+{% if enable_gnocchi | bool %}
+          - gnocchi://
+{% endif %}
+{% if enable_panko | bool %}
+          - panko://
+{% endif %}
diff --git a/ansible/roles/ceilometer/templates/pipeline.yaml.j2 b/ansible/roles/ceilometer/templates/pipeline.yaml.j2
index a5bd5148e7..53106399c2 100644
--- a/ansible/roles/ceilometer/templates/pipeline.yaml.j2
+++ b/ansible/roles/ceilometer/templates/pipeline.yaml.j2
@@ -1,20 +1,17 @@
 ---
 sources:
     - name: meter_source
-      interval: 600
       meters:
           - "*"
       sinks:
           - meter_sink
     - name: cpu_source
-      interval: 600
       meters:
           - "cpu"
       sinks:
           - cpu_sink
           - cpu_delta_sink
     - name: disk_source
-      interval: 600
       meters:
           - "disk.read.bytes"
           - "disk.read.requests"
@@ -27,7 +24,6 @@ sources:
       sinks:
           - disk_sink
     - name: network_source
-      interval: 600
       meters:
           - "network.incoming.bytes"
           - "network.incoming.packets"
@@ -39,7 +35,7 @@ sinks:
     - name: meter_sink
       transformers:
       publishers:
-          - notifier://
+          - gnocchi://
     - name: cpu_sink
       transformers:
           - name: "rate_of_change"
@@ -50,7 +46,7 @@ sinks:
                     type: "gauge"
                     scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))"
       publishers:
-          - notifier://
+          - gnocchi://
     - name: cpu_delta_sink
       transformers:
           - name: "delta"
@@ -59,7 +55,7 @@ sinks:
                     name: "cpu.delta"
                 growth_only: True
       publishers:
-          - notifier://
+          - gnocchi://
     - name: disk_sink
       transformers:
           - name: "rate_of_change"
@@ -74,7 +70,7 @@ sinks:
                         unit: "\\1/s"
                     type: "gauge"
       publishers:
-          - notifier://
+          - gnocchi://
     - name: network_sink
       transformers:
           - name: "rate_of_change"
@@ -89,4 +85,4 @@ sinks:
                         unit: "\\1/s"
                     type: "gauge"
       publishers:
-          - notifier://
+          - gnocchi://
diff --git a/ansible/roles/ceilometer/templates/wsgi-ceilometer-api.conf.j2 b/ansible/roles/ceilometer/templates/wsgi-ceilometer-api.conf.j2
deleted file mode 100644
index 4adb84bf29..0000000000
--- a/ansible/roles/ceilometer/templates/wsgi-ceilometer-api.conf.j2
+++ /dev/null
@@ -1,24 +0,0 @@
-{% set python_path = '/usr/lib/python2.7/site-packages' if kolla_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %}
-Listen {{ api_interface_address }}:{{ ceilometer_api_port }}
-
-<VirtualHost *:{{ ceilometer_api_port }}>
-    LogLevel info
-    ErrorLog /var/log/kolla/ceilometer/ceilometer-api.log
-    CustomLog /var/log/kolla/ceilometer/ceilometer-api-access.log combined
-
-    WSGIScriptReloading On
-    WSGIDaemonProcess ceilometer-api processes={{ openstack_service_workers }} threads=1 user=ceilometer group=ceilometer display-name=%{GROUP} python-path={{ python_path }}
-    WSGIProcessGroup ceilometer-api
-    WSGIScriptAlias / {{ python_path }}/ceilometer/api/app.wsgi
-
-    <Directory "{{ python_path }}/ceilometer/api">
-        <IfVersion >= 2.4>
-            Require all granted
-        </IfVersion>
-        <IfVersion < 2.4>
-            Order allow,deny
-            Allow from all
-        </IfVersion>
-    </Directory>
-
-</VirtualHost>
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 0039d80405..bd523c2f49 100644
--- a/ansible/roles/common/templates/conf/filter/01-rewrite.conf.j2
+++ b/ansible/roles/common/templates/conf/filter/01-rewrite.conf.j2
@@ -1,7 +1,7 @@
 <match kolla.var.log.kolla.*.*.log>
     @type rewrite_tag_filter
     capitalize_regex_backreference yes
-    rewriterule1 programname ^(horizon-access|ceilometer-api-access|keystone-apache-admin-access|keystone-apache-public-access|cinder-api-access)$ apache_access
+    rewriterule1 programname ^(horizon-access|keystone-apache-admin-access|keystone-apache-public-access|cinder-api-access)$ apache_access
     rewriterule2 programname ^(aodh_wsgi_access | zun_api_wsgi_access)$ wsgi_access
     rewriterule3 programname ^(nova-api|nova-compute|nova-conductor|nova-consoleauth|nova-manage|nova-novncproxy|nova-scheduler|nova-placement-api|placement-api|placement-api-access|privsep-helper).* openstack_python
     rewriterule4 programname ^(sahara-api|sahara-engine).* openstack_python
@@ -11,7 +11,7 @@
     rewriterule8 programname ^(heat-engine|heat-api|heat-api-cfn).* openstack_python
     rewriterule9 programname ^(glance-api|glance-registry).* openstack_python
     rewriterule10 programname ^(cloudkitty-storage-init|cloudkitty-processor|cloudkitty-dbsync|cloudkitty-api).* openstack_python
-    rewriterule11 programname ^(ceilometer-polling|ceilometer-collector|ceilometer-agent-notification|loadwsgi).* openstack_python
+    rewriterule11 programname ^(ceilometer-polling|ceilometer-agent-notification).* openstack_python
     rewriterule12 programname ^(barbican-worker|barbican-keystone-listener|barbican-db-manage|barbican-api|app).* openstack_python
     rewriterule13 programname ^(aodh-notifier|aodh-listener|aodh-evaluator|aodh-dbsync).* openstack_python
     rewriterule14 programname ^(cinder-api|cinder-scheduler|cinder-manage|cinder-volume|cinder-backup|privsep-helper).* openstack_python
diff --git a/ansible/roles/haproxy/tasks/precheck.yml b/ansible/roles/haproxy/tasks/precheck.yml
index 601eceb612..bc8840ef76 100644
--- a/ansible/roles/haproxy/tasks/precheck.yml
+++ b/ansible/roles/haproxy/tasks/precheck.yml
@@ -116,18 +116,6 @@
     - inventory_hostname in groups['haproxy']
     - haproxy_stat.find('barbican_api') == -1
 
-- name: Checking free port for Ceilometer API HAProxy
-  wait_for:
-    host: "{{ kolla_internal_vip_address }}"
-    port: "{{ ceilometer_api_port }}"
-    connect_timeout: 1
-    timeout: 1
-    state: stopped
-  when:
-    - enable_ceilometer | bool
-    - inventory_hostname in groups['haproxy']
-    - haproxy_stat.find('ceilometer_api') == -1
-
 - name: Checking free port for Cinder API HAProxy
   wait_for:
     host: "{{ kolla_internal_vip_address }}"
diff --git a/ansible/roles/haproxy/templates/haproxy.cfg.j2 b/ansible/roles/haproxy/templates/haproxy.cfg.j2
index ab022f3895..8896c2c8dc 100644
--- a/ansible/roles/haproxy/templates/haproxy.cfg.j2
+++ b/ansible/roles/haproxy/templates/haproxy.cfg.j2
@@ -710,22 +710,6 @@ listen barbican_api_external
 {% endif %}
 {% endif %}
 
-{% if enable_ceilometer | bool %}
-listen ceilometer_api
-  bind {{ kolla_internal_vip_address }}:{{ ceilometer_api_port }}
-{% for host in groups['ceilometer-api'] %}
-  server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ ceilometer_api_port }} check inter 2000 rise 2 fall 5
-{% endfor %}
-{% if haproxy_enable_external_vip | bool %}
-
-listen ceilometer_api_external
-  bind {{ kolla_external_vip_address }}:{{ ceilometer_api_port }} {{ tls_bind_info }}
-{% for host in groups['ceilometer-api'] %}
-  server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ ceilometer_api_port }} check inter 2000 rise 2 fall 5
-{% endfor %}
-{% endif %}
-{% endif %}
-
 {% if enable_aodh | bool %}
 listen aodh_api
   bind {{ kolla_internal_vip_address }}:{{ aodh_api_port }}
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index fe9b84614e..3b2532cd64 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -249,15 +249,6 @@ kolla_internal_vip_address: "10.10.10.254"
 #glance_backend_ceph: "no"
 #glance_backend_vmware: "no"
 
-#######################
-# Ceilometer options
-#######################
-# Valid options are [ mongodb, mysql, gnocchi ]
-#ceilometer_database_type: "mongodb"
-
-# Valid options are [ mongodb, gnocchi, panko ]
-#ceilometer_event_type: "mongodb"
-
 
 #######################
 # Barbican options
diff --git a/releasenotes/notes/remove-ceilometer-useless-service-4e210ddc1c48ac48.yaml b/releasenotes/notes/remove-ceilometer-useless-service-4e210ddc1c48ac48.yaml
new file mode 100644
index 0000000000..b2cc30e227
--- /dev/null
+++ b/releasenotes/notes/remove-ceilometer-useless-service-4e210ddc1c48ac48.yaml
@@ -0,0 +1,8 @@
+---
+upgrade:
+  - |
+    ceilometer-api is marked as deprecated and useless now by
+    Ib88957001de2a61f9625ca5584a2129216647841, it will not be deployed.
+    ceilometer-notification is marked as deprecated and useless now by
+    I25a6e0b9221844adb4412f1829d9e290b6e198a3, it will not be deployed.
+    ceilometer_database_type and ceilometer_event_type variable is ignored.