diff --git a/ansible/roles/ceilometer/defaults/main.yml b/ansible/roles/ceilometer/defaults/main.yml
index c09dc09e37e8c17235c21aa1d1a6db13f85c4fff..4af83c9cbdb37047b0fdeef1a40bf60ee54bffa4 100644
--- a/ansible/roles/ceilometer/defaults/main.yml
+++ b/ansible/roles/ceilometer/defaults/main.yml
@@ -11,6 +11,7 @@ ceilometer_services:
       - "{{ node_config_directory }}/ceilometer-notification/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
       - "kolla_logs:/var/log/kolla/"
+      - "{{ kolla_dev_repos_directory ~ '/ceilometer/ceilometer:/var/lib/kolla/venv/lib/python2.7/site-packages/ceilometer' if ceilometer_dev_mode | bool else '' }}"
   ceilometer-central:
     container_name: ceilometer_central
     group: ceilometer-central
@@ -21,6 +22,7 @@ ceilometer_services:
       - "/etc/localtime:/etc/localtime:ro"
       - "ceilometer:/var/lib/ceilometer/"
       - "kolla_logs:/var/log/kolla/"
+      - "{{ kolla_dev_repos_directory ~ '/ceilometer/ceilometer:/var/lib/kolla/venv/lib/python2.7/site-packages/ceilometer' if ceilometer_dev_mode | bool else '' }}"
   ceilometer-compute:
     container_name: ceilometer_compute
     group: ceilometer-compute
@@ -34,6 +36,7 @@ ceilometer_services:
       - "ceilometer:/var/lib/ceilometer/"
       - "kolla_logs:/var/log/kolla/"
       - "nova_libvirt:/var/lib/libvirt"
+      - "{{ kolla_dev_repos_directory ~ '/ceilometer/ceilometer:/var/lib/kolla/venv/lib/python2.7/site-packages/ceilometer' if ceilometer_dev_mode | bool else '' }}"
 
 
 ####################
@@ -63,3 +66,11 @@ ceilometer_logging_debug: "{{ openstack_logging_debug }}"
 ceilometer_keystone_user: "ceilometer"
 
 openstack_ceilometer_auth: "{{ openstack_auth }}"
+
+
+####################
+# Kolla
+####################
+ceilometer_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
+ceilometer_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
+ceilometer_dev_mode: "{{ kolla_dev_mode }}"
diff --git a/ansible/roles/ceilometer/handlers/main.yml b/ansible/roles/ceilometer/handlers/main.yml
index b646447035f71742457c53f50f19f1bea7d8b5ac..4a74a8205a9a83b024f67704adaae808315d354f 100644
--- a/ansible/roles/ceilometer/handlers/main.yml
+++ b/ansible/roles/ceilometer/handlers/main.yml
@@ -16,7 +16,7 @@
     common_options: "{{ docker_common_options }}"
     name: "{{ service.container_name }}"
     image: "{{ service.image }}"
-    volumes: "{{ service.volumes }}"
+    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
   when:
     - kolla_action != "config"
     - inventory_hostname in groups[service.group]
@@ -45,7 +45,7 @@
     common_options: "{{ docker_common_options }}"
     name: "{{ service.container_name }}"
     image: "{{ service.image }}"
-    volumes: "{{ service.volumes }}"
+    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
   when:
     - kolla_action != "config"
     - inventory_hostname in groups[service.group]
@@ -73,7 +73,7 @@
     name: "{{ service.container_name }}"
     image: "{{ service.image }}"
     privileged: "{{ service.privileged | default(False) }}"
-    volumes: "{{ service.volumes }}"
+    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
   when:
     - kolla_action != "config"
     - inventory_hostname in groups[service.group]
diff --git a/ansible/roles/ceilometer/tasks/bootstrap_service.yml b/ansible/roles/ceilometer/tasks/bootstrap_service.yml
index bab27d19d36e12989b4f868b9085eb193176734c..a4df22365b35c73722fdabc5130c0225de36c945 100644
--- a/ansible/roles/ceilometer/tasks/bootstrap_service.yml
+++ b/ansible/roles/ceilometer/tasks/bootstrap_service.yml
@@ -11,7 +11,7 @@
       KOLLA_BOOTSTRAP:
       KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
       CEILOMETER_DATABASE_TYPE: "gnocchi"
-    image: "{{ ceilometer_notification.image }}"
+    image: "{{ ceilometer_notification.image | reject('equalto', '')|list }}"
     labels:
       BOOTSTRAP:
     name: "bootstrap_ceilometer"
diff --git a/ansible/roles/ceilometer/tasks/clone.yml b/ansible/roles/ceilometer/tasks/clone.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8fb02fa6ef2ad557ec0891bcf2434404cbf03f6f
--- /dev/null
+++ b/ansible/roles/ceilometer/tasks/clone.yml
@@ -0,0 +1,6 @@
+---
+- name: Cloning ceilometer source repository for development
+  git:
+    repo: "{{ ceilometer_git_repository }}"
+    dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
+    update: "{{ ceilometer_dev_repos_pull }}"
diff --git a/ansible/roles/ceilometer/tasks/config.yml b/ansible/roles/ceilometer/tasks/config.yml
index 4146b1610577a544888515f13f8d1d79b7925743..150e38666bf338fac73b282f9bbffe05b4e052fc 100644
--- a/ansible/roles/ceilometer/tasks/config.yml
+++ b/ansible/roles/ceilometer/tasks/config.yml
@@ -195,7 +195,7 @@
     name: "{{ item.value.container_name }}"
     image: "{{ item.value.image }}"
     privileged: "{{ item.value.privileged | default(False) }}"
-    volumes: "{{ item.value.volumes }}"
+    volumes: "{{ item.value.volumes | reject('equalto', '')|list }}"
   register: check_ceilometer_containers
   when:
     - kolla_action != "config"
diff --git a/ansible/roles/ceilometer/tasks/deploy.yml b/ansible/roles/ceilometer/tasks/deploy.yml
index 53fcf05bd6fdabd0924d87b7afc721f114c64cc0..f9b3659b23cae92aa6c760d1c147c1c5ad96ad06 100644
--- a/ansible/roles/ceilometer/tasks/deploy.yml
+++ b/ansible/roles/ceilometer/tasks/deploy.yml
@@ -6,6 +6,9 @@
   when: inventory_hostname in groups['ceilometer'] or
         inventory_hostname in groups['compute']
 
+- include: clone.yml
+  when: ceilometer_dev_mode | bool
+
 - include: bootstrap.yml
   when: inventory_hostname in groups['ceilometer']