From 6a737b19686c821c32778bb847c6548d51eef002 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rados=C5=82aw=20Piliszek?= <radoslaw.piliszek@gmail.com>
Date: Fri, 12 Jul 2019 17:15:42 +0200
Subject: [PATCH] Fix handling of docker restart policy
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Docker has no restart policy named 'never'. It has 'no'.
This has bitten us already (see [1]) and might bite us again whenever
we want to change the restart policy to 'no'.

This patch makes our docker integration honor all valid restart policies
and only valid restart policies.
All relevant docker restart policy usages are patched as well.

I added some FIXMEs around which are relevant to kolla-ansible docker
integration. They are not fixed in here to not alter behavior.

[1] https://review.opendev.org/667363

Change-Id: I1c9764fb9bbda08a71186091aced67433ad4e3d6
Signed-off-by: Radosław Piliszek <radoslaw.piliszek@gmail.com>
---
 ansible/group_vars/all.yml                    |  4 +--
 ansible/library/kolla_docker.py               | 28 +++++++++++--------
 .../roles/aodh/tasks/bootstrap_service.yml    |  2 +-
 .../barbican/tasks/bootstrap_service.yml      |  2 +-
 .../roles/blazar/tasks/bootstrap_service.yml  |  2 +-
 .../ceilometer/tasks/bootstrap_service.yml    |  2 +-
 ansible/roles/ceph/tasks/bootstrap_osds.yml   |  4 +--
 ansible/roles/ceph/tasks/generate_cluster.yml |  2 +-
 .../roles/cinder/tasks/bootstrap_service.yml  |  2 +-
 ansible/roles/cinder/tasks/upgrade.yml        |  2 +-
 .../cloudkitty/tasks/bootstrap_service.yml    |  2 +-
 .../congress/tasks/bootstrap_service.yml      |  2 +-
 .../roles/cyborg/tasks/bootstrap_service.yml  |  2 +-
 .../designate/tasks/bootstrap_service.yml     |  2 +-
 .../roles/freezer/tasks/bootstrap_service.yml |  2 +-
 .../roles/glance/tasks/bootstrap_service.yml  |  2 +-
 .../roles/glance/tasks/rolling_upgrade.yml    |  6 ++--
 .../roles/gnocchi/tasks/bootstrap_service.yml |  2 +-
 .../roles/heat/tasks/bootstrap_service.yml    |  2 +-
 .../roles/horizon/tasks/bootstrap_service.yml |  2 +-
 ansible/roles/ironic/tasks/bootstrap.yml      |  2 +-
 .../roles/ironic/tasks/bootstrap_service.yml  |  4 +--
 .../roles/ironic/tasks/rolling_upgrade.yml    |  2 +-
 .../roles/karbor/tasks/bootstrap_service.yml  |  2 +-
 ansible/roles/keystone/handlers/main.yml      |  4 +--
 .../keystone/tasks/bootstrap_service.yml      |  2 +-
 .../roles/magnum/tasks/bootstrap_service.yml  |  2 +-
 .../roles/manila/tasks/bootstrap_service.yml  |  2 +-
 ansible/roles/mariadb/handlers/main.yml       |  6 ++--
 ansible/roles/mariadb/tasks/backup.yml        |  2 +-
 .../roles/mariadb/tasks/bootstrap_cluster.yml |  2 +-
 .../roles/mariadb/tasks/recover_cluster.yml   |  6 ++--
 .../roles/mistral/tasks/bootstrap_service.yml |  2 +-
 .../roles/monasca/tasks/bootstrap_service.yml |  2 +-
 ansible/roles/mongodb/tasks/bootstrap.yml     |  2 +-
 .../roles/murano/tasks/bootstrap_service.yml  |  2 +-
 .../roles/neutron/tasks/bootstrap_service.yml |  4 +--
 .../roles/neutron/tasks/rolling_upgrade.yml   |  4 +--
 .../roles/nova/tasks/bootstrap_service.yml    |  2 +-
 ansible/roles/nova/tasks/create_cells.yml     |  8 +++---
 ansible/roles/nova/tasks/rolling_upgrade.yml  |  2 +-
 .../roles/octavia/tasks/bootstrap_service.yml |  2 +-
 .../roles/panko/tasks/bootstrap_service.yml   |  2 +-
 .../placement/tasks/bootstrap_service.yml     |  2 +-
 ansible/roles/placement/tasks/upgrade.yml     |  2 +-
 .../roles/qinling/tasks/bootstrap_service.yml |  2 +-
 ansible/roles/rabbitmq/tasks/bootstrap.yml    |  2 +-
 .../roles/rally/tasks/bootstrap_service.yml   |  2 +-
 .../roles/sahara/tasks/bootstrap_service.yml  |  2 +-
 .../searchlight/tasks/bootstrap_service.yml   |  2 +-
 .../roles/senlin/tasks/bootstrap_service.yml  |  2 +-
 .../roles/solum/tasks/bootstrap_service.yml   |  2 +-
 .../roles/tacker/tasks/bootstrap_service.yml  |  2 +-
 .../roles/trove/tasks/bootstrap_service.yml   |  2 +-
 .../roles/vitrage/tasks/bootstrap_service.yml |  2 +-
 .../roles/watcher/tasks/bootstrap_service.yml |  2 +-
 ansible/roles/zun/tasks/bootstrap_service.yml |  2 +-
 tests/templates/globals-default.j2            |  2 +-
 tests/test_kolla_docker.py                    |  3 +-
 59 files changed, 91 insertions(+), 84 deletions(-)

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 f182d7d689..ca2222b70c 100644
--- a/ansible/roles/glance/tasks/bootstrap_service.yml
+++ b/ansible/roles/glance/tasks/bootstrap_service.yml
@@ -32,7 +32,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_glance"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ glance_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[glance_api.group][0] }}"
diff --git a/ansible/roles/glance/tasks/rolling_upgrade.yml b/ansible/roles/glance/tasks/rolling_upgrade.yml
index c971507faa..1884b73246 100644
--- a/ansible/roles/glance/tasks/rolling_upgrade.yml
+++ b/ansible/roles/glance/tasks/rolling_upgrade.yml
@@ -43,7 +43,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_glance"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ glance_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[glance_api.group][0] }}"
@@ -64,7 +64,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_glance"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ glance_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[glance_api.group][0] }}"
@@ -94,7 +94,7 @@
     labels:
       BOOTSTRAP:
     name: "bootstrap_glance"
-    restart_policy: "never"
+    restart_policy: no
     volumes: "{{ glance_api.volumes }}"
   run_once: True
   delegate_to: "{{ groups[glance_api.group][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']),