diff --git a/ansible/roles/ceilometer/tasks/register.yml b/ansible/roles/ceilometer/tasks/register.yml
index b05b9ad3c03a471eaf630b0b89dbfa66105ca23c..fa052f8861130ce7ccee27e2dcaa9a8d8c0e571b 100644
--- a/ansible/roles/ceilometer/tasks/register.yml
+++ b/ansible/roles/ceilometer/tasks/register.yml
@@ -32,3 +32,15 @@
     module_extra_vars:
      openstack_ceilometer_auth: "{{ openstack_ceilometer_auth }}"
   run_once: True
+
+- name: Associate the ResellerAdmin role and ceilometer user
+  kolla_toolbox:
+    module_name: "os_user_role"
+    module_args:
+      project: "service"
+      user: "{{ ceilometer_keystone_user }}"
+      role: "ResellerAdmin"
+      region_name: "{{ openstack_region_name }}"
+      auth: "{{ '{{ openstack_ceilometer_auth }}' }}"
+  when: enable_swift | bool
+  run_once: True
diff --git a/ansible/roles/swift/tasks/register.yml b/ansible/roles/swift/tasks/register.yml
index 1ebe64890183353b2ac26a28c715b9726dcb3bed..e74717dffb87abe073f28fca4c5aaa3e4fcbe82c 100644
--- a/ansible/roles/swift/tasks/register.yml
+++ b/ansible/roles/swift/tasks/register.yml
@@ -32,3 +32,14 @@
     module_extra_vars:
       openstack_swift_auth: "{{ openstack_swift_auth }}"
   run_once: True
+
+- name: Creating the ResellerAdmin role
+  kolla_toolbox:
+    module_name: "os_keystone_role"
+    module_args:
+      project: "service"
+      role: "ResellerAdmin"
+      region_name: "{{ openstack_region_name }}"
+      auth: "{{ '{{ openstack_swift_auth }}' }}"
+  when: enable_ceilometer | bool
+  run_once: True
diff --git a/ansible/roles/swift/templates/proxy-server.conf.j2 b/ansible/roles/swift/templates/proxy-server.conf.j2
index cd8a8db2f8a7db83ce18e1ba23f648ce54902541..4f39427114945eff98408007e42ba3af516377e9 100644
--- a/ansible/roles/swift/templates/proxy-server.conf.j2
+++ b/ansible/roles/swift/templates/proxy-server.conf.j2
@@ -10,7 +10,7 @@ log_level = INFO
 workers = {{ openstack_service_workers }}
 
 [pipeline:main]
-pipeline = catch_errors gatekeeper healthcheck cache container_sync bulk ratelimit authtoken keystoneauth slo dlo proxy-server
+pipeline = catch_errors gatekeeper healthcheck cache container_sync bulk ratelimit authtoken keystoneauth slo dlo {% if enable_ceilometer | bool %}ceilometer {% endif %}proxy-server
 
 [app:proxy-server]
 use = egg:swift#proxy
@@ -48,7 +48,17 @@ memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansi
 
 [filter:keystoneauth]
 use = egg:swift#keystoneauth
-operator_roles = admin,{{ keystone_default_user_role }}
+operator_roles = admin,{{ keystone_default_user_role }}{% if enable_ceilometer | bool %},ResellerAdmin{% endif %}
+
+{% if enable_ceilometer | bool %}
+[filter:ceilometer]
+paste.filter_factory = ceilometermiddleware.swift:filter_factory
+control_exchange = swift
+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 %}
+driver = messagingv2
+topic = notifications
+log_level = WARN
+{% endif %}
 
 [filter:container_sync]
 use = egg:swift#container_sync