aboutsummaryrefslogtreecommitdiff
path: root/ansible/library
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-08-05 21:00:59 +0000
committerGerrit Code Review <review@openstack.org>2021-08-05 21:00:59 +0000
commit851f2c799cadfd36e42ba6fe4935875fdfdc6d42 (patch)
tree663f3da206a8f5adc19215ff241461bcf33afc0f /ansible/library
parent01c62fa1b68824adfbbd38bcb10921d3201c8aa9 (diff)
parentc3afbd3c5efb84a1df272bd44a46d4db60c69f0b (diff)
downloadkolla-ansible-851f2c799cadfd36e42ba6fe4935875fdfdc6d42.tar.gz
kolla-ansible-851f2c799cadfd36e42ba6fe4935875fdfdc6d42.zip
Merge "Check config when checking the containers"
Diffstat (limited to 'ansible/library')
-rw-r--r--ansible/library/kolla_docker.py44
1 files changed, 43 insertions, 1 deletions
diff --git a/ansible/library/kolla_docker.py b/ansible/library/kolla_docker.py
index 22bd78b55..f5903ac53 100644
--- a/ansible/library/kolla_docker.py
+++ b/ansible/library/kolla_docker.py
@@ -264,6 +264,9 @@ EXAMPLES = '''
'''
+COMPARE_CONFIG_CMD = ['/usr/local/bin/kolla_set_configs', '--check']
+
+
def get_docker_client():
return docker.APIClient
@@ -348,7 +351,9 @@ class DockerWorker(object):
def compare_container(self):
container = self.check_container()
- if not container or self.check_container_differs():
+ if (not container or
+ self.check_container_differs() or
+ self.compare_config()):
self.changed = True
return self.changed
@@ -614,6 +619,43 @@ class DockerWorker(object):
if current_healthcheck:
return True
+ def compare_config(self):
+ try:
+ job = self.dc.exec_create(
+ self.params['name'],
+ COMPARE_CONFIG_CMD,
+ user='root',
+ )
+ output = self.dc.exec_start(job)
+ exec_inspect = self.dc.exec_inspect(job)
+ except docker.errors.APIError as e:
+ # NOTE(yoctozepto): If we have a client error, then the container
+ # cannot be used for config check (e.g., is restarting, or stopped
+ # in the mean time) - assume config is stale = return True.
+ # Else, propagate the server error back.
+ if e.is_client_error():
+ return True
+ else:
+ raise
+ # Exit codes:
+ # 0: not changed
+ # 1: changed
+ # 137: abrupt exit -> changed
+ # else: error
+ if exec_inspect['ExitCode'] == 0:
+ return False
+ elif exec_inspect['ExitCode'] == 1:
+ return True
+ elif exec_inspect['ExitCode'] == 137:
+ # NOTE(yoctozepto): This is Docker's command exit due to container
+ # exit. It means the container is unstable so we are better off
+ # marking it as requiring a restart due to config update.
+ return True
+ else:
+ raise Exception('Failed to compare container configuration: '
+ 'ExitCode: %s Message: %s' %
+ (exec_inspect['ExitCode'], output))
+
def parse_image(self):
full_image = self.params.get('image')