aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Zhang <jeffrey.zhang@99cloud.net>2016-03-01 00:45:55 +0800
committerJeffrey Zhang <jeffrey.zhang@99cloud.net>2016-03-02 01:35:55 +0800
commitb694408abc377cdb8723c43babd7fac2dcf49be0 (patch)
tree2a269482c4a595338aa03bd1090263cb3f33a521
parent3aedf52489ed5bc68e43899ca21dae13fc2b5100 (diff)
downloadkolla-b694408abc377cdb8723c43babd7fac2dcf49be0.tar.gz
kolla-b694408abc377cdb8723c43babd7fac2dcf49be0.zip
Add kolla_docker action for reconfigure
add three actions used for reconfigure * restart_container * get_container_env * get_container_state Partially-implements: bp kolla-reconfig Change-Id: I63609ce47f044926ff276ab1188b10f44270a0b5
-rw-r--r--ansible/library/kolla_docker.py40
-rw-r--r--ansible/roles/keystone/tasks/do_reconfigure.yml65
2 files changed, 85 insertions, 20 deletions
diff --git a/ansible/library/kolla_docker.py b/ansible/library/kolla_docker.py
index 3b1e9bd61..08306c2bd 100644
--- a/ansible/library/kolla_docker.py
+++ b/ansible/library/kolla_docker.py
@@ -35,9 +35,12 @@ options:
choices:
- compare_image
- create_volume
+ - get_container_env
+ - get_container_state
- pull_image
- remove_container
- remove_volume
+ - restart_container
- start_container
- stop_container
api_version:
@@ -500,6 +503,30 @@ class DockerWorker(object):
if self.params.get('remove_on_exit'):
self.remove_container()
+ def get_container_env(self):
+ name = self.params.get('name')
+ info = self.get_container_info()
+ if not info:
+ self.module.fail_json(msg="No such container: {}".format(name))
+ else:
+ envs = dict()
+ for env in info['Config']['Env']:
+ if '=' in env:
+ key, value = env.split('=', 1)
+ else:
+ key, value = env, ''
+ envs[key] = value
+
+ self.module.exit_json(**envs)
+
+ def get_container_state(self):
+ name = self.params.get('name')
+ info = self.get_container_info()
+ if not info:
+ self.module.fail_json(msg="No such container: {}".format(name))
+ else:
+ self.module.exit_json(**info['State'])
+
def stop_container(self):
name = self.params.get('name')
container = self.check_container()
@@ -507,6 +534,16 @@ class DockerWorker(object):
self.changed = True
self.dc.stop(name)
+ def restart_container(self):
+ name = self.params.get('name')
+ info = self.get_container_info()
+ if not info:
+ self.module.fail_json(
+ msg="No such container: {}".format(name))
+ else:
+ self.changed = True
+ self.dc.restart(name)
+
def create_volume(self):
if not self.check_volume():
self.changed = True
@@ -533,9 +570,12 @@ def generate_module():
common_options=dict(required=False, type='dict', default=dict()),
action=dict(requried=True, type='str', choices=['compare_image',
'create_volume',
+ 'get_container_env',
+ 'get_container_state',
'pull_image',
'remove_container',
'remove_volume',
+ 'restart_container',
'start_container',
'stop_container']),
api_version=dict(required=False, type='str', default='auto'),
diff --git a/ansible/roles/keystone/tasks/do_reconfigure.yml b/ansible/roles/keystone/tasks/do_reconfigure.yml
index 8974a3558..1a7d1650b 100644
--- a/ansible/roles/keystone/tasks/do_reconfigure.yml
+++ b/ansible/roles/keystone/tasks/do_reconfigure.yml
@@ -1,39 +1,64 @@
---
+- name: Ensuring the containers up
+ kolla_docker:
+ name: "{{ item.name }}"
+ action: "get_container_state"
+ register: container_state
+ failed_when: container_state.Running == false
+ when: inventory_hostname in groups[item.group]
+ with_items:
+ - { name: keystone, group: keystone }
+
- include: config.yml
- name: Check the configs
- command: docker exec keystone /usr/local/bin/kolla_set_configs --check
+ command: docker exec {{ item.name }} /usr/local/bin/kolla_set_configs --check
changed_when: false
failed_when: false
- register: check_result
+ register: check_results
+ when: inventory_hostname in groups[item.group]
+ with_items:
+ - { name: keystone, group: keystone }
# NOTE(jeffrey4l): when config_strategy == 'COPY_ALWAYS'
# and container env['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE',
# just remove the container and start again
-- name: Container config strategy
- command: docker exec keystone printenv KOLLA_CONFIG_STRATEGY
- changed_when: false
- failed_when: false
- register: container_config_strategy
+- name: Containers config strategy
+ kolla_docker:
+ name: "{{ item.name }}"
+ action: "get_container_env"
+ register: container_envs
+ when: inventory_hostname in groups[item.group]
+ with_items:
+ - { name: keystone, group: keystone }
-- name: Remove the keystone container
+- name: Remove the containers
kolla_docker:
- name: "keystone"
+ name: "{{ item[0]['name'] }}"
action: "remove_container"
+ register: remove_containers
when:
- - config_strategy == "COPY_ONCE" or container_config_strategy.stdout == 'COPY_ONCE'
- - check_result.rc == 1
+ - config_strategy == "COPY_ONCE" or item[1]['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE'
+ - item[2]['rc'] == 1
+ - inventory_hostname in groups[item[0]['group']]
+ with_together:
+ - [{ name: keystone, group: keystone }]
+ - container_envs.results
+ - check_results.results
- include: start.yml
- when:
- - config_strategy == "COPY_ONCE" or container_config_strategy.stdout == 'COPY_ONCE'
- - check_result.rc == 1
+ when: remove_containers.changed
-- name: Restart keystone service
- # TODO(jeffrey4l): move to the kolla_docker module when
- # it has restart_container action
- command: docker restart keystone
+- name: Restart containers
+ kolla_docker:
+ name: "{{ item[0]['name'] }}"
+ action: "restart_container"
when:
- config_strategy == 'COPY_ALWAYS'
- - container_config_strategy.stdout != 'COPY_ONCE'
- - check_result.rc == 1
+ - item[1]['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE'
+ - item[2]['rc'] == 1
+ - inventory_hostname in groups[item[0]['group']]
+ with_together:
+ - [{ name: keystone, group: keystone }]
+ - container_envs.results
+ - check_results.results