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
This commit is contained in:
Jeffrey Zhang 2016-03-01 00:45:55 +08:00
parent 3aedf52489
commit b694408abc
2 changed files with 86 additions and 21 deletions

View File

@ -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'),

View File

@ -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: Remove the keystone container
- name: Containers config strategy
kolla_docker:
name: "keystone"
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 containers
kolla_docker:
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