diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 9b5922f3e6..92f804c07d 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -100,10 +100,10 @@ docker_runtime_directory: ""
 docker_log_max_file: 5
 docker_log_max_size: 50m
 
-# Valid options are [ never, on-failure, always, unless-stopped ]
+# Valid options are [ no, on-failure, always, unless-stopped ]
 docker_restart_policy: "unless-stopped"
 
-# '0' means unlimited retries
+# '0' means unlimited retries (applies only to 'on-failure' policy)
 docker_restart_policy_retry: "10"
 
 # Common options used throughout Docker
diff --git a/ansible/library/kolla_docker.py b/ansible/library/kolla_docker.py
index 492a0b1dc7..dee7a0df2b 100644
--- a/ansible/library/kolla_docker.py
+++ b/ansible/library/kolla_docker.py
@@ -14,6 +14,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# FIXME(yoctozepto): this module does *not* validate "common_options" which are
+# a hacky way to seed most usages of kolla_docker in kolla-ansible ansible
+# playbooks - caution has to be exerted when setting "common_options"
+
+# FIXME(yoctozepto): restart_policy is *not* checked in the container
+
 import json
 import os
 import shlex
@@ -156,17 +162,17 @@ options:
     type: bool
   restart_policy:
     description:
-      - Determine what docker does when the container exits
+      - When docker restarts the container (does not affect checks)
     required: False
     type: str
     choices:
-      - never
+      - no
       - on-failure
       - always
       - unless-stopped
   restart_retries:
     description:
-      - How many times to attempt a restart if restart_policy is set
+      - How many times to attempt a restart if 'on-failure' policy is set
     type: int
     default: 10
   volumes:
@@ -675,16 +681,17 @@ class DockerWorker(object):
             dimensions = self.parse_dimensions(dimensions)
             options.update(dimensions)
 
-        if self.params.get('restart_policy') in ['on-failure',
-                                                 'always',
-                                                 'unless-stopped']:
-            policy = {'Name': self.params.get('restart_policy')}
+        restart_policy = self.params.get('restart_policy')
+
+        if restart_policy is not None:
+            restart_policy = {'Name': restart_policy}
             # NOTE(Jeffrey4l): MaximumRetryCount is only needed for on-failure
             # policy
-            if self.params.get('restart_policy') == 'on-failure':
+            if restart_policy['Name'] == 'on-failure':
                 retries = self.params.get('restart_retries')
-                policy['MaximumRetryCount'] = retries
-            options['restart_policy'] = policy
+                if retries is not None:
+                    restart_policy['MaximumRetryCount'] = retries
+            options['restart_policy'] = restart_policy
 
         if binds:
             options['binds'] = binds
@@ -917,7 +924,6 @@ def generate_module():
         remove_on_exit=dict(required=False, type='bool', default=True),
         restart_policy=dict(required=False, type='str', choices=[
                             'no',
-                            'never',
                             'on-failure',
                             'always',
                             'unless-stopped']),
diff --git a/ansible/roles/aodh/tasks/bootstrap_service.yml b/ansible/roles/aodh/tasks/bootstrap_service.yml
index ce099f5f20..1edd8581fd 100644
--- a/ansible/roles/aodh/tasks/bootstrap_service.yml
+++ b/ansible/roles/aodh/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_aodh"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ aodh_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[aodh_api.group][0] }}"
diff --git a/ansible/roles/barbican/tasks/bootstrap_service.yml b/ansible/roles/barbican/tasks/bootstrap_service.yml
index 0410f975f2..9b4618a3c0 100644
--- a/ansible/roles/barbican/tasks/bootstrap_service.yml
+++ b/ansible/roles/barbican/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_barbican"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ barbican_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[barbican_api.group][0] }}"
diff --git a/ansible/roles/blazar/tasks/bootstrap_service.yml b/ansible/roles/blazar/tasks/bootstrap_service.yml
index b59b8aed19..71fb97a560 100644
--- a/ansible/roles/blazar/tasks/bootstrap_service.yml
+++ b/ansible/roles/blazar/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_blazar"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ blazar_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[blazar_api.group][0] }}"
diff --git a/ansible/roles/ceilometer/tasks/bootstrap_service.yml b/ansible/roles/ceilometer/tasks/bootstrap_service.yml
index 3860060eab..617df689cb 100644
--- a/ansible/roles/ceilometer/tasks/bootstrap_service.yml
+++ b/ansible/roles/ceilometer/tasks/bootstrap_service.yml
@@ -15,7 +15,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_ceilometer"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ ceilometer_notification.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[ceilometer_notification.group][0] }}"
diff --git a/ansible/roles/ceph/tasks/bootstrap_osds.yml b/ansible/roles/ceph/tasks/bootstrap_osds.yml
index aef33395e7..471e547222 100644
--- a/ansible/roles/ceph/tasks/bootstrap_osds.yml
+++ b/ansible/roles/ceph/tasks/bootstrap_osds.yml
@@ -78,7 +78,7 @@
       BOOTSTRAP:
     name: "bootstrap_osd_{{ item.0 }}"
     privileged: True
-    restart_policy: "never"
+    restart_policy: no
     volumes:
       - "{{ node_config_directory }}/ceph-osd/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
@@ -139,7 +139,7 @@
       BOOTSTRAP:
     name: "bootstrap_osd_cache_{{ item.0 }}"
     privileged: True
-    restart_policy: "never"
+    restart_policy: no
     volumes:
       - "{{ node_config_directory }}/ceph-osd/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
diff --git a/ansible/roles/ceph/tasks/generate_cluster.yml b/ansible/roles/ceph/tasks/generate_cluster.yml
index 121e36aaa4..fd23756ec8 100644
--- a/ansible/roles/ceph/tasks/generate_cluster.yml
+++ b/ansible/roles/ceph/tasks/generate_cluster.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_ceph_mon"
-    restart_policy: "never"
+    restart_policy: no
     volumes:
       - "{{ node_config_directory }}/ceph-mon/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
diff --git a/ansible/roles/cinder/tasks/bootstrap_service.yml b/ansible/roles/cinder/tasks/bootstrap_service.yml
index c45ab06476..e97e579752 100644
--- a/ansible/roles/cinder/tasks/bootstrap_service.yml
+++ b/ansible/roles/cinder/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_cinder"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ cinder_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[cinder_api.group][0] }}"
diff --git a/ansible/roles/cinder/tasks/upgrade.yml b/ansible/roles/cinder/tasks/upgrade.yml
index 79865c7774..7f267399c3 100644
--- a/ansible/roles/cinder/tasks/upgrade.yml
+++ b/ansible/roles/cinder/tasks/upgrade.yml
@@ -27,7 +27,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_cinder"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ cinder_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[cinder_api.group][0] }}"
diff --git a/ansible/roles/cloudkitty/tasks/bootstrap_service.yml b/ansible/roles/cloudkitty/tasks/bootstrap_service.yml
index 35305c7d13..19ea71d187 100644
--- a/ansible/roles/cloudkitty/tasks/bootstrap_service.yml
+++ b/ansible/roles/cloudkitty/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_cloudkitty"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ cloudkitty_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[cloudkitty_api.group][0] }}"
diff --git a/ansible/roles/congress/tasks/bootstrap_service.yml b/ansible/roles/congress/tasks/bootstrap_service.yml
index 85fcb131c4..61f001d4b7 100644
--- a/ansible/roles/congress/tasks/bootstrap_service.yml
+++ b/ansible/roles/congress/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_congress"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ congress_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[congress_api.group][0] }}"
diff --git a/ansible/roles/cyborg/tasks/bootstrap_service.yml b/ansible/roles/cyborg/tasks/bootstrap_service.yml
index 164aeae2d7..bbba4b8510 100644
--- a/ansible/roles/cyborg/tasks/bootstrap_service.yml
+++ b/ansible/roles/cyborg/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_cyborg"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ cyborg_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[cyborg_api.group][0] }}"
diff --git a/ansible/roles/designate/tasks/bootstrap_service.yml b/ansible/roles/designate/tasks/bootstrap_service.yml
index b7928f91d9..7c82e95477 100644
--- a/ansible/roles/designate/tasks/bootstrap_service.yml
+++ b/ansible/roles/designate/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_designate"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ designate_central.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[designate_central.group][0] }}"
diff --git a/ansible/roles/freezer/tasks/bootstrap_service.yml b/ansible/roles/freezer/tasks/bootstrap_service.yml
index d926c35c32..a70b29454e 100644
--- a/ansible/roles/freezer/tasks/bootstrap_service.yml
+++ b/ansible/roles/freezer/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_freezer"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ freezer_api.volumes | reject('equalto', '') | list }}"
   run_once: True
   delegate_to: "{{ groups[freezer_api.group][0] }}"
diff --git a/ansible/roles/glance/tasks/bootstrap_service.yml b/ansible/roles/glance/tasks/bootstrap_service.yml
index c460aff68e..bbbf8c00d5 100644
--- a/ansible/roles/glance/tasks/bootstrap_service.yml
+++ b/ansible/roles/glance/tasks/bootstrap_service.yml
@@ -30,7 +30,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_glance"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ glance_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ glance_api_hosts[0] }}"
diff --git a/ansible/roles/glance/tasks/rolling_upgrade.yml b/ansible/roles/glance/tasks/rolling_upgrade.yml
index 71ef9de722..d53134e701 100644
--- a/ansible/roles/glance/tasks/rolling_upgrade.yml
+++ b/ansible/roles/glance/tasks/rolling_upgrade.yml
@@ -41,7 +41,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_glance"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ glance_api.volumes }}"
   run_once: True
   delegate_to: "{{ glance_api_hosts[0] }}"
@@ -62,7 +62,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_glance"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ glance_api.volumes }}"
   run_once: True
   delegate_to: "{{ glance_api_hosts[0] }}"
@@ -92,7 +92,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_glance"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ glance_api.volumes }}"
   run_once: True
   delegate_to: "{{ glance_api_hosts[0] }}"
diff --git a/ansible/roles/gnocchi/tasks/bootstrap_service.yml b/ansible/roles/gnocchi/tasks/bootstrap_service.yml
index 0b0c42e366..0992575a59 100644
--- a/ansible/roles/gnocchi/tasks/bootstrap_service.yml
+++ b/ansible/roles/gnocchi/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_gnocchi"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ gnocchi_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[gnocchi_api.group][0] }}"
diff --git a/ansible/roles/heat/tasks/bootstrap_service.yml b/ansible/roles/heat/tasks/bootstrap_service.yml
index 9d2ae0b044..8f6a757380 100644
--- a/ansible/roles/heat/tasks/bootstrap_service.yml
+++ b/ansible/roles/heat/tasks/bootstrap_service.yml
@@ -22,7 +22,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_heat"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ heat_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[heat_api.group][0] }}"
diff --git a/ansible/roles/horizon/tasks/bootstrap_service.yml b/ansible/roles/horizon/tasks/bootstrap_service.yml
index 4ad45a8d65..213d71fab1 100644
--- a/ansible/roles/horizon/tasks/bootstrap_service.yml
+++ b/ansible/roles/horizon/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_horizon"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ horizon.volumes }}"
   run_once: True
   delegate_to: "{{ groups[horizon.group][0] }}"
diff --git a/ansible/roles/ironic/tasks/bootstrap.yml b/ansible/roles/ironic/tasks/bootstrap.yml
index 3ed859d657..cb4511a106 100644
--- a/ansible/roles/ironic/tasks/bootstrap.yml
+++ b/ansible/roles/ironic/tasks/bootstrap.yml
@@ -68,6 +68,6 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_ironic_pxe"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ ironic_pxe.volumes }}"
   when: inventory_hostname in groups[ironic_pxe.group]
diff --git a/ansible/roles/ironic/tasks/bootstrap_service.yml b/ansible/roles/ironic/tasks/bootstrap_service.yml
index cbb27021ca..35739a714c 100644
--- a/ansible/roles/ironic/tasks/bootstrap_service.yml
+++ b/ansible/roles/ironic/tasks/bootstrap_service.yml
@@ -18,7 +18,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_ironic"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ ironic_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[ironic_api.group][0] }}"
@@ -39,7 +39,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_ironic_inspector"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ ironic_inspector.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[ironic_inspector.group][0] }}"
diff --git a/ansible/roles/ironic/tasks/rolling_upgrade.yml b/ansible/roles/ironic/tasks/rolling_upgrade.yml
index 2b502fec1b..d51d506ffe 100644
--- a/ansible/roles/ironic/tasks/rolling_upgrade.yml
+++ b/ansible/roles/ironic/tasks/rolling_upgrade.yml
@@ -36,7 +36,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_ironic"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ ironic_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[ironic_api.group][0] }}"
diff --git a/ansible/roles/karbor/tasks/bootstrap_service.yml b/ansible/roles/karbor/tasks/bootstrap_service.yml
index 0d272eb8e7..806f8a52ea 100644
--- a/ansible/roles/karbor/tasks/bootstrap_service.yml
+++ b/ansible/roles/karbor/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_karbor"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ karbor_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[karbor_api.group][0] }}"
diff --git a/ansible/roles/keystone/handlers/main.yml b/ansible/roles/keystone/handlers/main.yml
index fa6b30e0c1..b6ddfaf804 100644
--- a/ansible/roles/keystone/handlers/main.yml
+++ b/ansible/roles/keystone/handlers/main.yml
@@ -18,7 +18,7 @@
     labels:
       KOLLA_UPGRADE:
     name: "init_upgrade_database"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ service.volumes|reject('equalto', '')|list }}"
     dimensions: "{{ service.dimensions }}"
   run_once: True
@@ -87,7 +87,7 @@
     labels:
       KOLLA_UPGRADE:
     name: "finish_upgrade_database"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ service.volumes|reject('equalto', '')|list }}"
     dimensions: "{{ service.dimensions }}"
   run_once: True
diff --git a/ansible/roles/keystone/tasks/bootstrap_service.yml b/ansible/roles/keystone/tasks/bootstrap_service.yml
index b499a69161..0a296fb2b8 100644
--- a/ansible/roles/keystone/tasks/bootstrap_service.yml
+++ b/ansible/roles/keystone/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_keystone"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ keystone.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups['keystone'][0] }}"
diff --git a/ansible/roles/magnum/tasks/bootstrap_service.yml b/ansible/roles/magnum/tasks/bootstrap_service.yml
index 35bca46386..40e3272301 100644
--- a/ansible/roles/magnum/tasks/bootstrap_service.yml
+++ b/ansible/roles/magnum/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_magnum"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ magnum_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[magnum_api.group][0] }}"
diff --git a/ansible/roles/manila/tasks/bootstrap_service.yml b/ansible/roles/manila/tasks/bootstrap_service.yml
index 29cac2ac12..0371bf06ab 100644
--- a/ansible/roles/manila/tasks/bootstrap_service.yml
+++ b/ansible/roles/manila/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_manila"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ manila_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[manila_api.group][0] }}"
diff --git a/ansible/roles/mariadb/handlers/main.yml b/ansible/roles/mariadb/handlers/main.yml
index 76ff2757cf..7ac1f0f6ba 100644
--- a/ansible/roles/mariadb/handlers/main.yml
+++ b/ansible/roles/mariadb/handlers/main.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "{{ service.container_name }}"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ service.volumes }}"
     dimensions: "{{ service.dimensions }}"
   when:
@@ -117,7 +117,7 @@
     labels:
       UPGRADE:
     name: "upgrade_mariadb"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ service.volumes }}"
   no_log: true
   when:
@@ -183,7 +183,7 @@
     labels:
       UPGRADE:
     name: "upgrade_mariadb"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ service.volumes }}"
   no_log: true
   when:
diff --git a/ansible/roles/mariadb/tasks/backup.yml b/ansible/roles/mariadb/tasks/backup.yml
index f6ad91c34c..1895b61cac 100644
--- a/ansible/roles/mariadb/tasks/backup.yml
+++ b/ansible/roles/mariadb/tasks/backup.yml
@@ -6,7 +6,7 @@
     common_options: "{{ docker_common_options }}"
     image: "{{ xtrabackup_image_full }}"
     name: "xtrabackup"
-    restart_policy: "never"
+    restart_policy: no
     remove_on_exit: True
     environment:
       BACKUP_TYPE: "{{ mariadb_backup_type }}"
diff --git a/ansible/roles/mariadb/tasks/bootstrap_cluster.yml b/ansible/roles/mariadb/tasks/bootstrap_cluster.yml
index aeb8bb7fa8..e843fcc0d8 100644
--- a/ansible/roles/mariadb/tasks/bootstrap_cluster.yml
+++ b/ansible/roles/mariadb/tasks/bootstrap_cluster.yml
@@ -17,7 +17,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_mariadb"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ service.volumes }}"
   notify:
     - Bootstrap MariaDB cluster
diff --git a/ansible/roles/mariadb/tasks/recover_cluster.yml b/ansible/roles/mariadb/tasks/recover_cluster.yml
index 1dbc3a5f7c..c00e8552e3 100644
--- a/ansible/roles/mariadb/tasks/recover_cluster.yml
+++ b/ansible/roles/mariadb/tasks/recover_cluster.yml
@@ -41,7 +41,7 @@
         labels:
           BOOTSTRAP:
         name: mariadb_wsrep_recovery
-        restart_policy: "never"
+        restart_policy: no
         volumes: "{{ mariadb_service.volumes }}"
 
     - name: Copying MariaDB log file to /tmp
@@ -135,7 +135,7 @@
     labels:
       BOOTSTRAP:
     name: "{{ mariadb_service.container_name }}"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ mariadb_service.volumes }}"
   when:
     - bootstrap_host is defined
@@ -193,7 +193,7 @@
     labels:
       BOOTSTRAP:
     name: "{{ mariadb_service.container_name }}"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ mariadb_service.volumes }}"
   when:
     - bootstrap_host is defined
diff --git a/ansible/roles/mistral/tasks/bootstrap_service.yml b/ansible/roles/mistral/tasks/bootstrap_service.yml
index 83f148c29b..dc001d1dc1 100644
--- a/ansible/roles/mistral/tasks/bootstrap_service.yml
+++ b/ansible/roles/mistral/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_mistral"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ mistral_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[mistral_api.group][0] }}"
diff --git a/ansible/roles/monasca/tasks/bootstrap_service.yml b/ansible/roles/monasca/tasks/bootstrap_service.yml
index a2b53cc683..f1826c5a0b 100644
--- a/ansible/roles/monasca/tasks/bootstrap_service.yml
+++ b/ansible/roles/monasca/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_monasca"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ monasca_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[monasca_api.group][0] }}"
diff --git a/ansible/roles/mongodb/tasks/bootstrap.yml b/ansible/roles/mongodb/tasks/bootstrap.yml
index 9eeab0aaa6..c899eb07c6 100644
--- a/ansible/roles/mongodb/tasks/bootstrap.yml
+++ b/ansible/roles/mongodb/tasks/bootstrap.yml
@@ -10,7 +10,7 @@
       KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
     image: "{{ mongodb_image_full }}"
     name: "bootstrap_mongodb"
-    restart_policy: "never"
+    restart_policy: no
     volumes:
       - "{{ node_config_directory }}/mongodb/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
diff --git a/ansible/roles/murano/tasks/bootstrap_service.yml b/ansible/roles/murano/tasks/bootstrap_service.yml
index 8e7d7ea810..c1acf18ee2 100644
--- a/ansible/roles/murano/tasks/bootstrap_service.yml
+++ b/ansible/roles/murano/tasks/bootstrap_service.yml
@@ -12,7 +12,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_murano"
-    restart_policy: "never"
+    restart_policy: no
     volumes:
       - "{{ node_config_directory }}/murano-api/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
diff --git a/ansible/roles/neutron/tasks/bootstrap_service.yml b/ansible/roles/neutron/tasks/bootstrap_service.yml
index 9afb9c52c9..62c9e6374a 100644
--- a/ansible/roles/neutron/tasks/bootstrap_service.yml
+++ b/ansible/roles/neutron/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_neutron"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ neutron_server.volumes }}"
   run_once: True
   delegate_to: "{{ groups[neutron_server.group][0] }}"
@@ -36,7 +36,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_neutron_sfc"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ neutron_server.volumes }}"
   when:
     - enable_neutron_sfc | bool
diff --git a/ansible/roles/neutron/tasks/rolling_upgrade.yml b/ansible/roles/neutron/tasks/rolling_upgrade.yml
index 91a6688cff..b1dc000c1e 100644
--- a/ansible/roles/neutron/tasks/rolling_upgrade.yml
+++ b/ansible/roles/neutron/tasks/rolling_upgrade.yml
@@ -23,7 +23,7 @@
     labels:
       UPGRADE:
     name: "bootstrap_neutron"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ neutron_server.volumes }}"
   run_once: True
   delegate_to: "{{ groups['neutron-server'][0] }}"
@@ -79,7 +79,7 @@
     labels:
       UPGRADE:
     name: "bootstrap_neutron"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ neutron_server.volumes }}"
   run_once: True
   delegate_to: "{{ groups['neutron-server'][0] }}"
diff --git a/ansible/roles/nova/tasks/bootstrap_service.yml b/ansible/roles/nova/tasks/bootstrap_service.yml
index eed9d2cbea..295bb2ded5 100644
--- a/ansible/roles/nova/tasks/bootstrap_service.yml
+++ b/ansible/roles/nova/tasks/bootstrap_service.yml
@@ -18,7 +18,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_nova"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ nova_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[nova_api.group][0] }}"
diff --git a/ansible/roles/nova/tasks/create_cells.yml b/ansible/roles/nova/tasks/create_cells.yml
index f430124a6c..c46e2b4226 100644
--- a/ansible/roles/nova/tasks/create_cells.yml
+++ b/ansible/roles/nova/tasks/create_cells.yml
@@ -12,7 +12,7 @@
     labels:
       BOOTSTRAP:
     name: "create_cell0_nova"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ nova_api.volumes|reject('equalto', '')|list }}"
   register: map_cell0
   changed_when:
@@ -39,7 +39,7 @@
     labels:
       BOOTSTRAP:
     name: "list_cells_nova"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ nova_api.volumes|reject('equalto', '')|list }}"
   register: existing_cells_list
   changed_when: false
@@ -77,7 +77,7 @@
     labels:
       BOOTSTRAP:
     name: "create_cell_nova"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ nova_api.volumes|reject('equalto', '')|list }}"
   register: base_cell
   changed_when:
@@ -103,7 +103,7 @@
     labels:
       BOOTSTRAP:
     name: "create_cell_nova"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ nova_api.volumes|reject('equalto', '')|list }}"
   register: base_cell
   changed_when:
diff --git a/ansible/roles/nova/tasks/rolling_upgrade.yml b/ansible/roles/nova/tasks/rolling_upgrade.yml
index 962321975b..d1f1daeb93 100644
--- a/ansible/roles/nova/tasks/rolling_upgrade.yml
+++ b/ansible/roles/nova/tasks/rolling_upgrade.yml
@@ -40,7 +40,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_nova"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ nova_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[nova_api.group][0] }}"
diff --git a/ansible/roles/octavia/tasks/bootstrap_service.yml b/ansible/roles/octavia/tasks/bootstrap_service.yml
index 1c752cb701..af6d2fd6be 100644
--- a/ansible/roles/octavia/tasks/bootstrap_service.yml
+++ b/ansible/roles/octavia/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_octavia"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ octavia_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[octavia_api.group][0] }}"
diff --git a/ansible/roles/panko/tasks/bootstrap_service.yml b/ansible/roles/panko/tasks/bootstrap_service.yml
index e6e9dd3b2f..e5c690841b 100644
--- a/ansible/roles/panko/tasks/bootstrap_service.yml
+++ b/ansible/roles/panko/tasks/bootstrap_service.yml
@@ -15,7 +15,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_panko"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ panko_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[panko_api.group][0] }}"
diff --git a/ansible/roles/placement/tasks/bootstrap_service.yml b/ansible/roles/placement/tasks/bootstrap_service.yml
index 7d7b8e7b4f..480ff066a7 100644
--- a/ansible/roles/placement/tasks/bootstrap_service.yml
+++ b/ansible/roles/placement/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_placement"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ placement_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[placement_api.group][0] }}"
diff --git a/ansible/roles/placement/tasks/upgrade.yml b/ansible/roles/placement/tasks/upgrade.yml
index 96f61d7229..c5c755453e 100644
--- a/ansible/roles/placement/tasks/upgrade.yml
+++ b/ansible/roles/placement/tasks/upgrade.yml
@@ -28,7 +28,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_placement"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ placement_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[placement_api.group][0] }}"
diff --git a/ansible/roles/qinling/tasks/bootstrap_service.yml b/ansible/roles/qinling/tasks/bootstrap_service.yml
index 7428401cd5..6c95ebd5a9 100644
--- a/ansible/roles/qinling/tasks/bootstrap_service.yml
+++ b/ansible/roles/qinling/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_qinling"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ qinling_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[qinling_api.group][0] }}"
diff --git a/ansible/roles/rabbitmq/tasks/bootstrap.yml b/ansible/roles/rabbitmq/tasks/bootstrap.yml
index 2556d278e4..13e0933970 100644
--- a/ansible/roles/rabbitmq/tasks/bootstrap.yml
+++ b/ansible/roles/rabbitmq/tasks/bootstrap.yml
@@ -21,6 +21,6 @@
     labels:
       BOOTSTRAP:
     name: "{{ project_name }}_bootstrap"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ service.volumes }}"
   when: rabbitmq_volume is changed
diff --git a/ansible/roles/rally/tasks/bootstrap_service.yml b/ansible/roles/rally/tasks/bootstrap_service.yml
index c174ecef68..86da382c5f 100644
--- a/ansible/roles/rally/tasks/bootstrap_service.yml
+++ b/ansible/roles/rally/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_rally"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ rally.volumes }}"
   run_once: True
   delegate_to: "{{ groups[rally.group][0] }}"
diff --git a/ansible/roles/sahara/tasks/bootstrap_service.yml b/ansible/roles/sahara/tasks/bootstrap_service.yml
index 2a60cf6695..9a9a8395fd 100644
--- a/ansible/roles/sahara/tasks/bootstrap_service.yml
+++ b/ansible/roles/sahara/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_sahara"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ sahara_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[sahara_api.group][0] }}"
diff --git a/ansible/roles/searchlight/tasks/bootstrap_service.yml b/ansible/roles/searchlight/tasks/bootstrap_service.yml
index d210e24162..53c44a3838 100644
--- a/ansible/roles/searchlight/tasks/bootstrap_service.yml
+++ b/ansible/roles/searchlight/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_searchlight"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ searchlight_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[searchlight_api.group][0] }}"
diff --git a/ansible/roles/senlin/tasks/bootstrap_service.yml b/ansible/roles/senlin/tasks/bootstrap_service.yml
index c584b7a7ae..abbfa2e834 100644
--- a/ansible/roles/senlin/tasks/bootstrap_service.yml
+++ b/ansible/roles/senlin/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_senlin"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ senlin_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[senlin_api.group][0] }}"
diff --git a/ansible/roles/solum/tasks/bootstrap_service.yml b/ansible/roles/solum/tasks/bootstrap_service.yml
index fc63c094b5..231b963b69 100644
--- a/ansible/roles/solum/tasks/bootstrap_service.yml
+++ b/ansible/roles/solum/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_solum"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ solum_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[solum_api.group][0] }}"
diff --git a/ansible/roles/tacker/tasks/bootstrap_service.yml b/ansible/roles/tacker/tasks/bootstrap_service.yml
index bfbaf1e87c..573fcc7f90 100644
--- a/ansible/roles/tacker/tasks/bootstrap_service.yml
+++ b/ansible/roles/tacker/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_tacker"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ tacker_server.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[tacker_server.group][0] }}"
diff --git a/ansible/roles/trove/tasks/bootstrap_service.yml b/ansible/roles/trove/tasks/bootstrap_service.yml
index 7a6811b079..8e4f5e2735 100644
--- a/ansible/roles/trove/tasks/bootstrap_service.yml
+++ b/ansible/roles/trove/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_trove"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ trove_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[trove_api.group][0] }}"
diff --git a/ansible/roles/vitrage/tasks/bootstrap_service.yml b/ansible/roles/vitrage/tasks/bootstrap_service.yml
index 96daedfe48..771be16102 100644
--- a/ansible/roles/vitrage/tasks/bootstrap_service.yml
+++ b/ansible/roles/vitrage/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_vitrage"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ vitrage_api.volumes | reject('equalto', '') | list }}"
   run_once: True
   delegate_to: "{{ groups[vitrage_api.group][0] }}"
diff --git a/ansible/roles/watcher/tasks/bootstrap_service.yml b/ansible/roles/watcher/tasks/bootstrap_service.yml
index 089e9f2dc4..1323bddd4c 100644
--- a/ansible/roles/watcher/tasks/bootstrap_service.yml
+++ b/ansible/roles/watcher/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_watcher"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ watcher_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[watcher_api.group][0] }}"
diff --git a/ansible/roles/zun/tasks/bootstrap_service.yml b/ansible/roles/zun/tasks/bootstrap_service.yml
index 17abc43d87..686d393e8f 100644
--- a/ansible/roles/zun/tasks/bootstrap_service.yml
+++ b/ansible/roles/zun/tasks/bootstrap_service.yml
@@ -14,7 +14,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_zun"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ zun_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[zun_api.group][0] }}"
diff --git a/tests/templates/globals-default.j2 b/tests/templates/globals-default.j2
index fc40b8fa25..9ee430c3ae 100644
--- a/tests/templates/globals-default.j2
+++ b/tests/templates/globals-default.j2
@@ -2,7 +2,7 @@
 kolla_base_distro: "{{ base_distro }}"
 kolla_install_type: "{{ install_type }}"
 network_interface: "{{ api_interface_name }}"
-docker_restart_policy: "never"
+docker_restart_policy: "no"
 
 # Use a random router id, otherwise it may result in the same router id
 # in the CI gate.
diff --git a/tests/test_kolla_docker.py b/tests/test_kolla_docker.py
index b5982678ca..35be4ecbab 100644
--- a/tests/test_kolla_docker.py
+++ b/tests/test_kolla_docker.py
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# FIXME(yoctozepto): tests do not imitate how ansible would handle module args
+
 import copy
 import imp
 import os
@@ -71,7 +73,6 @@ class ModuleArgsTest(base.BaseTestCase):
             remove_on_exit=dict(required=False, type='bool', default=True),
             restart_policy=dict(
                 required=False, type='str', choices=['no',
-                                                     'never',
                                                      'on-failure',
                                                      'always',
                                                      'unless-stopped']),