diff --git a/ansible/roles/aodh/tasks/config.yml b/ansible/roles/aodh/tasks/config.yml
index 90179933a93a977bd2429a1919357b1bbb01fbc5..971477aec038c1a7aa1f70d8819674d4652c4304 100644
--- a/ansible/roles/aodh/tasks/config.yml
+++ b/ansible/roles/aodh/tasks/config.yml
@@ -53,6 +53,11 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/aodh/policy.json"
-    dest: "{{ node_config_directory }}/aodh/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "aodh-api"
+    - "aodh-evaluator"
+    - "aodh-listener"
+    - "aodh-notifier"
   when:
     aodh_policy.stat.exists
diff --git a/ansible/roles/barbican/tasks/config.yml b/ansible/roles/barbican/tasks/config.yml
index fab9b3ddacf67bb5aae5c410745c303af1fd58f9..0b71c1ce5f8cde52ba4690ebbc85c18bff8eaa86 100644
--- a/ansible/roles/barbican/tasks/config.yml
+++ b/ansible/roles/barbican/tasks/config.yml
@@ -59,6 +59,10 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/barbican/policy.json"
-    dest: "{{ node_config_directory }}/barbican/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "barbican-api"
+    - "barbican-keystone-listener"
+    - "barbican-worker"
   when:
     barbican_policy.stat.exists
diff --git a/ansible/roles/ceilometer/tasks/config.yml b/ansible/roles/ceilometer/tasks/config.yml
index 63c77f38d6f534157f4d5deaa1a11301464eb9d5..e4c6cdf7b33e4b994ced362575142065c7901684 100644
--- a/ansible/roles/ceilometer/tasks/config.yml
+++ b/ansible/roles/ceilometer/tasks/config.yml
@@ -67,6 +67,12 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/ceilometer/policy.json"
-    dest: "{{ node_config_directory }}/ceilometer/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "ceilometer-notification"
+    - "ceilometer-collector"
+    - "ceilometer-api"
+    - "ceilometer-central"
+    - "ceilometer-compute"
   when:
     ceilometer_policy.stat.exists
diff --git a/ansible/roles/cinder/tasks/config.yml b/ansible/roles/cinder/tasks/config.yml
index 9daa82c444fcb9793f44bae3fcad9090a201882c..49f187946428a18b0a7f8b12eb5eed51f559f87d 100644
--- a/ansible/roles/cinder/tasks/config.yml
+++ b/ansible/roles/cinder/tasks/config.yml
@@ -46,7 +46,12 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/cinder/policy.json"
-    dest: "{{ node_config_directory }}/cinder/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "cinder-api"
+    - "cinder-backup"
+    - "cinder-scheduler"
+    - "cinder-volume"
   when:
     cinder_policy.stat.exists
 
diff --git a/ansible/roles/cloudkitty/tasks/config.yml b/ansible/roles/cloudkitty/tasks/config.yml
index ea3d13cbbfa7261e3817a439793b39715b4fcb8f..d614334ca455df83ed891fc05ff13c66c40f2023 100644
--- a/ansible/roles/cloudkitty/tasks/config.yml
+++ b/ansible/roles/cloudkitty/tasks/config.yml
@@ -40,6 +40,9 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/cloudkitty/policy.json"
-    dest: "{{ node_config_directory }}/cloudkitty/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "cloudkitty-api"
+    - "cloudkitty-processor"
   when:
     cloudkitty_policy.stat.exists
diff --git a/ansible/roles/congress/tasks/config.yml b/ansible/roles/congress/tasks/config.yml
index 0e9a63135624c2668ed1e247a4569e7c99a93d9c..f447726597cb296544666d1ebb2f38112de57a0e 100644
--- a/ansible/roles/congress/tasks/config.yml
+++ b/ansible/roles/congress/tasks/config.yml
@@ -43,6 +43,10 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/congress/policy.json"
-    dest: "{{ node_config_directory }}/congress/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "congress-api"
+    - "congress-policy-engine"
+    - "congress-datasource"
   when:
     congress_policy.stat.exists
diff --git a/ansible/roles/glance/tasks/config.yml b/ansible/roles/glance/tasks/config.yml
index 743815ba88b38d80e23368643698c2b0654a4ce8..d88993353c99a2fb24f907a9e015c78ebbae51df 100644
--- a/ansible/roles/glance/tasks/config.yml
+++ b/ansible/roles/glance/tasks/config.yml
@@ -37,6 +37,8 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/glance/policy.json"
-    dest: "{{ node_config_directory }}/glance/policy.json"
+    dest: "{{ node_config_directory }}/{{ item.service }}/policy.json"
   when:
-    glance_policy.stat.exists
+    - inventory_hostname in groups[item.group]
+    - glance_policy.stat.exists
+  with_items: "{{ glance_service_groups }}"
diff --git a/ansible/roles/gnocchi/tasks/config.yml b/ansible/roles/gnocchi/tasks/config.yml
index b6fa16dd077342c0b4e83372e4faf2796f302c2e..5e74dca2662bcb576d01bbde637aae312292c467 100644
--- a/ansible/roles/gnocchi/tasks/config.yml
+++ b/ansible/roles/gnocchi/tasks/config.yml
@@ -58,6 +58,10 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/gnocchi/policy.json"
-    dest: "{{ node_config_directory }}/gnocchi/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "gnocchi-api"
+    - "gnocchi-statsd"
+    - "gnocchi-metricd"
   when:
     gnocchi_policy.stat.exists
diff --git a/ansible/roles/heat/tasks/config.yml b/ansible/roles/heat/tasks/config.yml
index dca462a5081c193f91a8f95a0ece895f059302d9..125062f9057cda63aed85a29b1854773d8502e4c 100644
--- a/ansible/roles/heat/tasks/config.yml
+++ b/ansible/roles/heat/tasks/config.yml
@@ -50,6 +50,10 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/heat/policy.json"
-    dest: "{{ node_config_directory }}/heat/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "heat-api"
+    - "heat-api-cfn"
+    - "heat-engine"
   when:
     heat_policy.stat.exists
diff --git a/ansible/roles/ironic/tasks/config.yml b/ansible/roles/ironic/tasks/config.yml
index 797b4948240627e20221d4da9309b09c13006057..d082ecf08832f44940458dc3431baeaaed58dfe1 100644
--- a/ansible/roles/ironic/tasks/config.yml
+++ b/ansible/roles/ironic/tasks/config.yml
@@ -45,6 +45,11 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/ironic/policy.json"
-    dest: "{{ node_config_directory }}/ironic/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "ironic-api"
+    - "ironic-conductor"
+    - "ironic-inspector"
+    - "ironic-pxe"
   when:
     ironic_policy.stat.exists
diff --git a/ansible/roles/keystone/tasks/config.yml b/ansible/roles/keystone/tasks/config.yml
index e531d6869091840d75691d014a6184fadf267841..6951545716f6b620e716e4218bbdd9c6b49bdd2a 100644
--- a/ansible/roles/keystone/tasks/config.yml
+++ b/ansible/roles/keystone/tasks/config.yml
@@ -62,7 +62,10 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/keystone/policy.json"
-    dest: "{{ node_config_directory }}/keystone/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "keystone"
+    - "keystone-fernet"
   when:
     keystone_policy.stat.exists
 
diff --git a/ansible/roles/magnum/tasks/config.yml b/ansible/roles/magnum/tasks/config.yml
index 5baa4a6ca8b5e45e7611a05b9a096d89ec7105ea..2fa679bc614c6fa8704406f612d8a97afde6b6dd 100644
--- a/ansible/roles/magnum/tasks/config.yml
+++ b/ansible/roles/magnum/tasks/config.yml
@@ -40,6 +40,9 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/magnum/policy.json"
-    dest: "{{ node_config_directory }}/magnum/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "magnum-api"
+    - "magnum-conductor"
   when:
     magnum_policy.stat.exists
diff --git a/ansible/roles/manila/tasks/config.yml b/ansible/roles/manila/tasks/config.yml
index 5e03b4d47d2bb4c88cafb1ad86375941b148bd2c..c975cdd75e37768584bab5cd1fca9d16eec5bdb9 100644
--- a/ansible/roles/manila/tasks/config.yml
+++ b/ansible/roles/manila/tasks/config.yml
@@ -63,6 +63,11 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/manila/policy.json"
-    dest: "{{ node_config_directory }}/manila/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "manila-api"
+    - "manila-data"
+    - "manila-scheduler"
+    - "manila-share"
   when:
     manila_policy.stat.exists
diff --git a/ansible/roles/mistral/tasks/config.yml b/ansible/roles/mistral/tasks/config.yml
index 723074eac4438048669f2962ff42285e5bcc3c49..62f12d18a73dc70f36d453a1d03cbb9325a9b5ed 100644
--- a/ansible/roles/mistral/tasks/config.yml
+++ b/ansible/roles/mistral/tasks/config.yml
@@ -43,6 +43,10 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/mistral/policy.json"
-    dest: "{{ node_config_directory }}/mistral/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "mistral-api"
+    - "mistral-engine"
+    - "mistral-executor"
   when:
     mistral_policy.stat.exists
diff --git a/ansible/roles/murano/tasks/config.yml b/ansible/roles/murano/tasks/config.yml
index 779c277d546e3f274a1f0248531eda4ab6143cf0..725703f72af4c6d3d27d51f25d41795442cc051b 100644
--- a/ansible/roles/murano/tasks/config.yml
+++ b/ansible/roles/murano/tasks/config.yml
@@ -40,6 +40,9 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/murano/policy.json"
-    dest: "{{ node_config_directory }}/murano/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "murano-api"
+    - "murano-engine"
   when:
     murano_policy.stat.exists
diff --git a/ansible/roles/neutron/tasks/config.yml b/ansible/roles/neutron/tasks/config.yml
index 82921cd96e5e3cfe3bf5cf31d0eaf314773cebd4..bc18d0380807d9902e614d9a040e5645a32a5756 100644
--- a/ansible/roles/neutron/tasks/config.yml
+++ b/ansible/roles/neutron/tasks/config.yml
@@ -191,6 +191,15 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/neutron/policy.json"
-    dest: "{{ node_config_directory }}/neutron/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "neutron-dhcp-agent"
+    - "neutron-l3-agent"
+    - "neutron-linuxbridge-agent"
+    - "neutron-metadata-agent"
+    - "neutron-openvswitch-agent"
+    - "neutron-server"
+    - "neutron-lbaas-agent"
+    - "neutron-vpnaas-agent"
   when:
     neutron_policy.stat.exists
diff --git a/ansible/roles/nova/tasks/config.yml b/ansible/roles/nova/tasks/config.yml
index b8750b93006119e1bd46119564bb44cf2406facf..e7c7a06e3ab071e6da36a3ce8ac5b26c433f5ca8 100644
--- a/ansible/roles/nova/tasks/config.yml
+++ b/ansible/roles/nova/tasks/config.yml
@@ -91,6 +91,15 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/nova/policy.json"
-    dest: "{{ node_config_directory }}/nova/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "nova-api"
+    - "nova-compute"
+    - "nova-compute-ironic"
+    - "nova-conductor"
+    - "nova-consoleauth"
+    - "nova-novncproxy"
+    - "nova-scheduler"
+    - "nova-spicehtml5proxy"
   when:
     nova_policy.stat.exists
diff --git a/ansible/roles/sahara/tasks/config.yml b/ansible/roles/sahara/tasks/config.yml
index a83df50caed5fdbd8067738fbadb6aeda2defb72..59cda53143049f0df7ac426d722dbd438454e379 100644
--- a/ansible/roles/sahara/tasks/config.yml
+++ b/ansible/roles/sahara/tasks/config.yml
@@ -40,6 +40,9 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/sahara/policy.json"
-    dest: "{{ node_config_directory }}/sahara/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "sahara-api"
+    - "sahara-engine"
   when:
     sahara_policy.stat.exists
diff --git a/ansible/roles/searchlight/tasks/config.yml b/ansible/roles/searchlight/tasks/config.yml
index 4237b6bdd9941d6c3b040d8660157e315031b470..1bec9a7ac5d89fa41ab5b226a3f46cb9af13fc71 100644
--- a/ansible/roles/searchlight/tasks/config.yml
+++ b/ansible/roles/searchlight/tasks/config.yml
@@ -38,6 +38,9 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/searchlight/policy.json"
-    dest: "{{ node_config_directory }}/searchlight/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "searchlight-api"
+    - "searchlight-listener"
   when:
     searchlight_policy.stat.exists
diff --git a/ansible/roles/senlin/tasks/config.yml b/ansible/roles/senlin/tasks/config.yml
index 17ff0f83aa7760ae74bb5266a3a07f224cdf7138..54773529b4a58e9b11d6c0382003abdefcd80ab2 100644
--- a/ansible/roles/senlin/tasks/config.yml
+++ b/ansible/roles/senlin/tasks/config.yml
@@ -40,6 +40,9 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/senlin/policy.json"
-    dest: "{{ node_config_directory }}/senlin/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "senlin-api"
+    - "senlin-engine"
   when:
     senlin_policy.stat.exists
diff --git a/ansible/roles/swift/tasks/config.yml b/ansible/roles/swift/tasks/config.yml
index 10c26de5a693efbadff75c2332fde9881eb6eccc..3b81038ee945928bdb11f79ea92f68f229683617 100644
--- a/ansible/roles/swift/tasks/config.yml
+++ b/ansible/roles/swift/tasks/config.yml
@@ -160,6 +160,21 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/swift/policy.json"
-    dest: "{{ node_config_directory }}/swift/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "swift-account-auditor"
+    - "swift-account-reaper"
+    - "swift-account-replicator"
+    - "swift-account-server"
+    - "swift-container-auditor"
+    - "swift-container-replicator"
+    - "swift-container-server"
+    - "swift-container-updater"
+    - "swift-object-auditor"
+    - "swift-object-expirer"
+    - "swift-object-replicator"
+    - "swift-object-server"
+    - "swift-object-updater"
+    - "swift-proxy-server"
   when:
     swift_policy.stat.exists
diff --git a/ansible/roles/watcher/tasks/config.yml b/ansible/roles/watcher/tasks/config.yml
index 9d4ae9f7a9d0bc6615c73f10760a8b9a9727ece9..9f32f9398f611a3fde4acf79be1822d259a33309 100644
--- a/ansible/roles/watcher/tasks/config.yml
+++ b/ansible/roles/watcher/tasks/config.yml
@@ -43,6 +43,10 @@
 - name: Copying over existing policy.json
   template:
     src: "{{ node_custom_config }}/watcher/policy.json"
-    dest: "{{ node_config_directory }}/watcher/policy.json"
+    dest: "{{ node_config_directory }}/{{ item }}/policy.json"
+  with_items:
+    - "watcher-api"
+    - "watcher-engine"
+    - "watcher-applier"
   when:
     watcher_policy.stat.exists