diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index 6c089fbcde071dcc76bab0ab91f9cf6c8f66c9b4..4eb713e99d557f7283a9ca9b7808c3092379ba29 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -40,6 +40,7 @@ monitoring
 
 [etcd:children]
 control
+compute
 
 [karbor:children]
 control
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index c21426d505f67b988294a2860b3555e42f888f00..89b0ac8282131b3de9b50e601ab7389fb7567585 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -58,6 +58,7 @@ monitoring
 
 [etcd:children]
 control
+compute
 
 [influxdb:children]
 monitoring
diff --git a/ansible/roles/etcd/defaults/main.yml b/ansible/roles/etcd/defaults/main.yml
index 44c51bbcdfd15279eaf9ee2bd888a40327e7b385..b1ebfaf089403bb37b298ed1d6d4f2a443733c4a 100644
--- a/ansible/roles/etcd/defaults/main.yml
+++ b/ansible/roles/etcd/defaults/main.yml
@@ -19,6 +19,11 @@ etcd_services:
       ETCD_OUT_FILE: "/var/log/kolla/etcd/etcd.log"
       KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
     image: "{{ etcd_image_full }}"
+    host_in_groups: >-
+      {{
+      inventory_hostname in groups['control']
+      or (enable_kuryr | bool and inventory_hostname in groups['compute'])
+      }}
     volumes:
       - "{{ node_config_directory }}/etcd/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
diff --git a/ansible/roles/etcd/handlers/main.yml b/ansible/roles/etcd/handlers/main.yml
index 0b09a33cdb3a77930cba7f490a7df25709492b4e..1410478c873eb0898cfdb017fa6bc543618de5e8 100644
--- a/ansible/roles/etcd/handlers/main.yml
+++ b/ansible/roles/etcd/handlers/main.yml
@@ -14,7 +14,7 @@
     volumes: "{{ service.volumes }}"
   when:
     - action != "config"
-    - inventory_hostname in groups[service.group]
     - service.enabled | bool
+    - service.host_in_groups | bool
     - config_json.changed | bool
       or etcd_container.changed | bool
diff --git a/ansible/roles/etcd/tasks/bootstrap.yml b/ansible/roles/etcd/tasks/bootstrap.yml
deleted file mode 100644
index 86fc77ffa71aaeeb4d0fbb1403c650a26d4be860..0000000000000000000000000000000000000000
--- a/ansible/roles/etcd/tasks/bootstrap.yml
+++ /dev/null
@@ -1,19 +0,0 @@
----
-- name: Running etcd bootstrap container
-  vars:
-    etcd: "{{ etcd_services['etcd'] }}"
-  kolla_docker:
-    action: "start_container"
-    common_options: "{{ docker_common_options }}"
-    detach: False
-    environment:
-      KOLLA_BOOTSTRAP:
-      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-    image: "{{ etcd.image }}"
-    labels:
-      BOOTSTRAP:
-    name: "bootstrap_etcd"
-    restart_policy: "never"
-    volumes: "{{ etcd.volumes }}"
-  run_once: True
-  delegate_to: "{{ groups[etcd.group][0] }}"
diff --git a/ansible/roles/etcd/tasks/config.yml b/ansible/roles/etcd/tasks/config.yml
index 9d2e43b6ded310dfe9429e9482e4db3df9fa1d9d..dba8fef69714b94b97b13beeccd1ebe81ddd5fa3 100644
--- a/ansible/roles/etcd/tasks/config.yml
+++ b/ansible/roles/etcd/tasks/config.yml
@@ -5,8 +5,8 @@
     state: "directory"
     recurse: yes
   when:
-    - inventory_hostname in groups[item.value.group]
     - item.value.enabled | bool
+    - item.value.host_in_groups | bool
   with_dict: "{{ etcd_services }}"
 
 - name: Copying over config.json files for services
@@ -15,8 +15,8 @@
     dest: "{{ node_config_directory }}/{{ item.key }}/config.json"
   register: etcd_config_jsons
   when:
-    - inventory_hostname in groups[item.value.group]
     - item.value.enabled | bool
+    - item.value.host_in_groups | bool
   with_dict: "{{ etcd_services }}"
   notify:
     - Restart etcd container
@@ -31,8 +31,8 @@
   register: check_etcd_containers
   when:
     - action != "config"
-    - inventory_hostname in groups[item.value.group]
     - item.value.enabled | bool
+    - item.value.host_in_groups | bool
   with_dict: "{{ etcd_services }}"
   notify:
     - Restart etcd container
diff --git a/ansible/roles/etcd/tasks/deploy.yml b/ansible/roles/etcd/tasks/deploy.yml
index 9eca42dec516671cbf47a1444d8bea6bcdc4b41b..dd26ecc34d1b04e0a53cac19bc7751e77576b083 100644
--- a/ansible/roles/etcd/tasks/deploy.yml
+++ b/ansible/roles/etcd/tasks/deploy.yml
@@ -1,7 +1,5 @@
 ---
 - include: config.yml
 
-- include: bootstrap.yml
-
 - name: Flush handlers
   meta: flush_handlers
diff --git a/ansible/roles/etcd/tasks/pull.yml b/ansible/roles/etcd/tasks/pull.yml
index 8fa205c683db1e3662651ebf3452f5707c2713ab..c88e003aa5443f7e3127b063eae4804995105720 100644
--- a/ansible/roles/etcd/tasks/pull.yml
+++ b/ansible/roles/etcd/tasks/pull.yml
@@ -5,6 +5,6 @@
     common_options: "{{ docker_common_options }}"
     image: "{{ item.value.image }}"
   when:
-    - inventory_hostname in groups[item.value.group]
     - item.value.enabled | bool
+    - item.value.host_in_groups | bool
   with_dict: "{{ etcd_services }}"