diff options
| author | Zuul <zuul@review.opendev.org> | 2021-08-05 21:00:59 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2021-08-05 21:00:59 +0000 |
| commit | 851f2c799cadfd36e42ba6fe4935875fdfdc6d42 (patch) | |
| tree | 663f3da206a8f5adc19215ff241461bcf33afc0f /ansible/library | |
| parent | 01c62fa1b68824adfbbd38bcb10921d3201c8aa9 (diff) | |
| parent | c3afbd3c5efb84a1df272bd44a46d4db60c69f0b (diff) | |
| download | kolla-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.py | 44 |
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') |
