diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index 2445019e925f715c9b6df0aa0823bf2ab95b9382..c6720e6fc2c283598076531d60f2584e26e85d84 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -630,9 +630,15 @@ watcher
 [senlin-api:children]
 senlin
 
+[senlin-conductor:children]
+senlin
+
 [senlin-engine:children]
 senlin
 
+[senlin-health-manager:children]
+senlin
+
 # Searchlight
 [searchlight-api:children]
 searchlight
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index a3bf77aec7d9929bc09a24748275267f8d7b76ee..887c3941911683a1ee5422f34a4fbf85007cbe19 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -649,9 +649,15 @@ watcher
 [senlin-api:children]
 senlin
 
+[senlin-conductor:children]
+senlin
+
 [senlin-engine:children]
 senlin
 
+[senlin-health-manager:children]
+senlin
+
 # Searchlight
 [searchlight-api:children]
 searchlight
diff --git a/ansible/roles/common/templates/conf/filter/01-rewrite-0.12.conf.j2 b/ansible/roles/common/templates/conf/filter/01-rewrite-0.12.conf.j2
index c8c821b3a051a9688e8802b4e60153b83ecafa2e..0b49f398322a7b1033f2e5f06eb85106dd5d405e 100644
--- a/ansible/roles/common/templates/conf/filter/01-rewrite-0.12.conf.j2
+++ b/ansible/roles/common/templates/conf/filter/01-rewrite-0.12.conf.j2
@@ -21,7 +21,7 @@
     rewriterule18 programname ^(trove-api|trove-conductor|trove-manage|trove-taskmanager)$ openstack_python
     rewriterule19 programname ^(congress-server)$ openstack_python
     rewriterule20 programname ^(murano-api|murano-engine)$ openstack_python
-    rewriterule21 programname ^(senlin-api|senlin-engine)$ openstack_python
+    rewriterule21 programname ^(senlin-api|senlin-conductor|senlin-engine|senlin-health-manager)$ openstack_python
     rewriterule22 programname ^(watcher-api|watcher-applier|watcher-db-manage|watcher-decision-engine)$ openstack_python
     rewriterule23 programname ^(freezer-api|freezer-api_access|freezer-manage)$ openstack_python
     rewriterule24 programname ^(octavia-api|octavia-health-manager|octavia-housekeeping|octavia-worker)$ openstack_python
diff --git a/ansible/roles/common/templates/conf/filter/01-rewrite-0.14.conf.j2 b/ansible/roles/common/templates/conf/filter/01-rewrite-0.14.conf.j2
index 8cafb7a7214b43b9a233fc0a72a09b7bca11be03..363dbbcf689f3ff4248c78bd521262fde516ff8e 100644
--- a/ansible/roles/common/templates/conf/filter/01-rewrite-0.14.conf.j2
+++ b/ansible/roles/common/templates/conf/filter/01-rewrite-0.14.conf.j2
@@ -108,7 +108,7 @@
   </rule>
   <rule>
     key     programname
-    pattern ^(senlin-api|senlin-engine)$
+    pattern ^(senlin-api|senlin-conductor|senlin-engine|senlin-health-manager)$
     tag openstack_python
   </rule>
   <rule>
diff --git a/ansible/roles/senlin/defaults/main.yml b/ansible/roles/senlin/defaults/main.yml
index 91bce201ae18d1070ca7441f2e02e280b46d49d0..25a488976120f89f33a24505d0a993e1449f3ae3 100644
--- a/ansible/roles/senlin/defaults/main.yml
+++ b/ansible/roles/senlin/defaults/main.yml
@@ -22,6 +22,13 @@ senlin_services:
         external: true
         port: "{{ senlin_api_port }}"
         listen_port: "{{ senlin_api_listen_port }}"
+  senlin-conductor:
+    container_name: senlin_conductor
+    group: senlin-conductor
+    enabled: true
+    image: "{{ senlin_conductor_image_full }}"
+    volumes: "{{ senlin_conductor_default_volumes + senlin_conductor_extra_volumes }}"
+    dimensions: "{{ senlin_conductor_dimensions }}"
   senlin-engine:
     container_name: senlin_engine
     group: senlin-engine
@@ -29,6 +36,13 @@ senlin_services:
     image: "{{ senlin_engine_image_full }}"
     volumes: "{{ senlin_engine_default_volumes + senlin_engine_extra_volumes }}"
     dimensions: "{{ senlin_engine_dimensions }}"
+  senlin-health-manager:
+    container_name: senlin_health_manager
+    group: senlin-health-manager
+    enabled: true
+    image: "{{ senlin_health_manager_image_full }}"
+    volumes: "{{ senlin_health_manager_default_volumes + senlin_health_manager_extra_volumes }}"
+    dimensions: "{{ senlin_health_manager_dimensions }}"
 
 ####################
 # Database
@@ -44,31 +58,53 @@ senlin_database_address: "{{ database_address | put_address_in_context('url') }}
 senlin_install_type: "{{ kolla_install_type }}"
 senlin_tag: "{{ openstack_release }}"
 
+senlin_conductor_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ senlin_install_type }}-senlin-conductor"
+senlin_conductor_tag: "{{ senlin_tag }}"
+senlin_conductor_image_full: "{{ senlin_conductor_image }}:{{ senlin_conductor_tag }}"
+
 senlin_engine_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ senlin_install_type }}-senlin-engine"
 senlin_engine_tag: "{{ senlin_tag }}"
 senlin_engine_image_full: "{{ senlin_engine_image }}:{{ senlin_engine_tag }}"
 
+senlin_health_manager_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ senlin_install_type }}-senlin-health-manager"
+senlin_health_manager_tag: "{{ senlin_tag }}"
+senlin_health_manager_image_full: "{{ senlin_health_manager_image }}:{{ senlin_health_manager_tag }}"
+
 senlin_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ senlin_install_type }}-senlin-api"
 senlin_api_tag: "{{ senlin_tag }}"
 senlin_api_image_full: "{{ senlin_api_image }}:{{ senlin_api_tag }}"
 
 senlin_api_dimensions: "{{ default_container_dimensions }}"
+senlin_conductor_dimensions: "{{ default_container_dimensions }}"
 senlin_engine_dimensions: "{{ default_container_dimensions }}"
+senlin_health_manager_dimensions: "{{ default_container_dimensions }}"
 
 senlin_api_default_volumes:
   - "{{ node_config_directory }}/senlin-api/:{{ container_config_directory }}/:ro"
   - "/etc/localtime:/etc/localtime:ro"
   - "kolla_logs:/var/log/kolla/"
   - "{{ kolla_dev_repos_directory ~ '/senlin/senlin:/var/lib/kolla/venv/lib/python2.7/site-packages/senlin' if senlin_dev_mode | bool else '' }}"
+senlin_conductor_default_volumes:
+  - "{{ node_config_directory }}/senlin-conductor/:{{ container_config_directory }}/:ro"
+  - "/etc/localtime:/etc/localtime:ro"
+  - "kolla_logs:/var/log/kolla/"
+  - "{{ kolla_dev_repos_directory ~ '/senlin/senlin:/var/lib/kolla/venv/lib/python2.7/site-packages/senlin' if senlin_dev_mode | bool else '' }}"
 senlin_engine_default_volumes:
   - "{{ node_config_directory }}/senlin-engine/:{{ container_config_directory }}/:ro"
   - "/etc/localtime:/etc/localtime:ro"
   - "kolla_logs:/var/log/kolla/"
   - "{{ kolla_dev_repos_directory ~ '/senlin/senlin:/var/lib/kolla/venv/lib/python2.7/site-packages/senlin' if senlin_dev_mode | bool else '' }}"
+senlin_health_manager_default_volumes:
+  - "{{ node_config_directory }}/senlin-health-manager/:{{ container_config_directory }}/:ro"
+  - "/etc/localtime:/etc/localtime:ro"
+  - "kolla_logs:/var/log/kolla/"
+  - "{{ kolla_dev_repos_directory ~ '/senlin/senlin:/var/lib/kolla/venv/lib/python2.7/site-packages/senlin' if senlin_dev_mode | bool else '' }}"
 
 senlin_extra_volumes: "{{ default_extra_volumes }}"
 senlin_api_extra_volumes: "{{ senlin_extra_volumes }}"
+senlin_conductor_extra_volumes: "{{ senlin_extra_volumes }}"
 senlin_engine_extra_volumes: "{{ senlin_extra_volumes }}"
+senlin_health_manager_extra_volumes: "{{ senlin_extra_volumes }}"
 
 ####################
 # OpenStack
diff --git a/ansible/roles/senlin/handlers/main.yml b/ansible/roles/senlin/handlers/main.yml
index d792e47ddc98efa476a61646bfc19f2211ae04c0..51fbe4604e8336c0ad49af1947eec93a397ec89f 100644
--- a/ansible/roles/senlin/handlers/main.yml
+++ b/ansible/roles/senlin/handlers/main.yml
@@ -14,6 +14,21 @@
   when:
     - kolla_action != "config"
 
+- name: Restart senlin-conductor container
+  vars:
+    service_name: "senlin-conductor"
+    service: "{{ senlin_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|reject('equalto', '')|list }}"
+    dimensions: "{{ service.dimensions }}"
+  when:
+    - kolla_action != "config"
+
 - name: Restart senlin-engine container
   vars:
     service_name: "senlin-engine"
@@ -28,3 +43,18 @@
     dimensions: "{{ service.dimensions }}"
   when:
     - kolla_action != "config"
+
+- name: Restart senlin-health-manager container
+  vars:
+    service_name: "senlin-health-manager"
+    service: "{{ senlin_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|reject('equalto', '')|list }}"
+    dimensions: "{{ service.dimensions }}"
+  when:
+    - kolla_action != "config"
diff --git a/ansible/roles/senlin/tasks/deploy.yml b/ansible/roles/senlin/tasks/deploy.yml
index 33fa32cf6e991616e87125a91d186dbccb28f0ce..e7077189c070801ec32eb3976706633e47bc1168 100644
--- a/ansible/roles/senlin/tasks/deploy.yml
+++ b/ansible/roles/senlin/tasks/deploy.yml
@@ -4,7 +4,9 @@
 
 - include_tasks: config.yml
   when: inventory_hostname in groups['senlin-api'] or
-        inventory_hostname in groups['senlin-engine']
+        inventory_hostname in groups['senlin-conductor'] or
+        inventory_hostname in groups['senlin-engine'] or
+        inventory_hostname in groups['senlin-health-manager']
 
 - include_tasks: clone.yml
   when: senlin_dev_mode | bool
diff --git a/ansible/roles/senlin/templates/senlin-conductor.json.j2 b/ansible/roles/senlin/templates/senlin-conductor.json.j2
new file mode 100644
index 0000000000000000000000000000000000000000..1a612d8efcc92536c8650a870479a2a57ae16999
--- /dev/null
+++ b/ansible/roles/senlin/templates/senlin-conductor.json.j2
@@ -0,0 +1,24 @@
+{
+    "command": "senlin-conductor --config-file /etc/senlin/senlin.conf",
+    "config_files": [
+        {
+            "source": "{{ container_config_directory }}/senlin.conf",
+            "dest": "/etc/senlin/senlin.conf",
+            "owner": "senlin",
+            "perm": "0600"
+        }{% if senlin_policy_file is defined %},
+        {
+            "source": "{{ container_config_directory }}/{{ senlin_policy_file }}",
+            "dest": "/etc/senlin/{{ senlin_policy_file }}",
+            "owner": "senlin",
+            "perm": "0600"
+        }{% endif %}
+    ],
+    "permissions": [
+        {
+            "path": "/var/log/kolla/senlin",
+            "owner": "senlin:senlin",
+            "recurse": true
+        }
+    ]
+}
diff --git a/ansible/roles/senlin/templates/senlin-health-manager.json.j2 b/ansible/roles/senlin/templates/senlin-health-manager.json.j2
new file mode 100644
index 0000000000000000000000000000000000000000..68196e1170b7e22b05f0f78773a3acf5fe310190
--- /dev/null
+++ b/ansible/roles/senlin/templates/senlin-health-manager.json.j2
@@ -0,0 +1,24 @@
+{
+    "command": "senlin-health-manager --config-file /etc/senlin/senlin.conf",
+    "config_files": [
+        {
+            "source": "{{ container_config_directory }}/senlin.conf",
+            "dest": "/etc/senlin/senlin.conf",
+            "owner": "senlin",
+            "perm": "0600"
+        }{% if senlin_policy_file is defined %},
+        {
+            "source": "{{ container_config_directory }}/{{ senlin_policy_file }}",
+            "dest": "/etc/senlin/{{ senlin_policy_file }}",
+            "owner": "senlin",
+            "perm": "0600"
+        }{% endif %}
+    ],
+    "permissions": [
+        {
+            "path": "/var/log/kolla/senlin",
+            "owner": "senlin:senlin",
+            "recurse": true
+        }
+    ]
+}
diff --git a/ansible/roles/senlin/templates/senlin.conf.j2 b/ansible/roles/senlin/templates/senlin.conf.j2
index baa0a52eb9cdb3727dd71eb636c3d516222c91b5..fbe31a72ac1e0776bd04663286a8db7321b217b2 100644
--- a/ansible/roles/senlin/templates/senlin.conf.j2
+++ b/ansible/roles/senlin/templates/senlin.conf.j2
@@ -3,10 +3,6 @@ debug = {{ senlin_logging_debug }}
 
 log_dir = /var/log/kolla/senlin
 
-{% if service_name == 'senlin-engine' %}
-num_engine_workers = {{ openstack_service_workers }}
-{% endif %}
-
 transport_url = {{ rpc_transport_url }}
 
 {% if service_name == 'senlin-api' %}
@@ -24,10 +20,25 @@ service_project_name = service
 service_user_domain = default
 service_project_domain = default
 
+{% if service_name == 'senlin-conductor' %}
+[conductor]
+workers = {{ openstack_service_workers }}
+{% endif %}
+
 [database]
 connection = mysql+pymysql://{{ senlin_database_user }}:{{ senlin_database_password }}@{{ senlin_database_address }}/{{ senlin_database_name }}
 max_retries = -1
 
+{% if service_name == 'senlin-engine' %}
+[engine]
+workers = {{ openstack_service_workers }}
+{% endif %}
+
+{% if service_name == 'senlin-health-manager' %}
+[health_manager]
+workers = {{ openstack_service_workers }}
+{% endif %}
+
 [keystone_authtoken]
 www_authenticate_uri = {{ keystone_internal_url }}
 auth_url = {{ keystone_admin_url }}
diff --git a/ansible/site.yml b/ansible/site.yml
index b292cdc4f903fc80e938fff581510ab149db0f4d..045582bfbfa2856c188fcb49e5e720f66b234d51 100644
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -1128,7 +1128,9 @@
   gather_facts: false
   hosts:
     - senlin-api
+    - senlin-conductor
     - senlin-engine
+    - senlin-health-manager
     - '&enable_senlin_True'
   serial: '{{ kolla_serial|default("0") }}'
   roles:
diff --git a/releasenotes/notes/add-new-senlin-services-b53a9dc26453f947.yaml b/releasenotes/notes/add-new-senlin-services-b53a9dc26453f947.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..51d047ed7a90d4aa4bcd3fc5c8b5c2221fcf32dd
--- /dev/null
+++ b/releasenotes/notes/add-new-senlin-services-b53a9dc26453f947.yaml
@@ -0,0 +1,6 @@
+---
+features:
+  - |
+    Add support for two new Senlin services; ``senlin-conductor`` and
+    ``senlin-health-manager``. Both of these services are required
+    for Senlin to be fully functional starting with the Ussuri release.
diff --git a/tests/templates/inventory.j2 b/tests/templates/inventory.j2
index ad756a6b0d48528c3c1b9b09ee0f52bf65525c62..f63db24abb90c94cf87a770338bed1ab59e9bc0a 100644
--- a/tests/templates/inventory.j2
+++ b/tests/templates/inventory.j2
@@ -598,9 +598,15 @@ watcher
 [senlin-api:children]
 senlin
 
+[senlin-conductor:children]
+senlin
+
 [senlin-engine:children]
 senlin
 
+[senlin-health-manager:children]
+senlin
+
 # Searchlight
 [searchlight-api:children]
 searchlight