Merge "Add kolla_docker action for reconfigure"

This commit is contained in:
Jenkins 2016-03-02 17:35:30 +00:00 committed by Gerrit Code Review
commit 69c7decf49
2 changed files with 86 additions and 21 deletions

View File

@ -35,9 +35,12 @@ options:
choices: choices:
- compare_image - compare_image
- create_volume - create_volume
- get_container_env
- get_container_state
- pull_image - pull_image
- remove_container - remove_container
- remove_volume - remove_volume
- restart_container
- start_container - start_container
- stop_container - stop_container
api_version: api_version:
@ -500,6 +503,30 @@ class DockerWorker(object):
if self.params.get('remove_on_exit'): if self.params.get('remove_on_exit'):
self.remove_container() 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): def stop_container(self):
name = self.params.get('name') name = self.params.get('name')
container = self.check_container() container = self.check_container()
@ -507,6 +534,16 @@ class DockerWorker(object):
self.changed = True self.changed = True
self.dc.stop(name) 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): def create_volume(self):
if not self.check_volume(): if not self.check_volume():
self.changed = True self.changed = True
@ -533,9 +570,12 @@ def generate_module():
common_options=dict(required=False, type='dict', default=dict()), common_options=dict(required=False, type='dict', default=dict()),
action=dict(requried=True, type='str', choices=['compare_image', action=dict(requried=True, type='str', choices=['compare_image',
'create_volume', 'create_volume',
'get_container_env',
'get_container_state',
'pull_image', 'pull_image',
'remove_container', 'remove_container',
'remove_volume', 'remove_volume',
'restart_container',
'start_container', 'start_container',
'stop_container']), 'stop_container']),
api_version=dict(required=False, type='str', default='auto'), 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 - include: config.yml
- name: Check the configs - 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 changed_when: false
failed_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' # NOTE(jeffrey4l): when config_strategy == 'COPY_ALWAYS'
# and container env['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE', # and container env['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE',
# just remove the container and start again # just remove the container and start again
- name: Container config strategy - name: Containers 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
kolla_docker: 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" action: "remove_container"
register: remove_containers
when: when:
- config_strategy == "COPY_ONCE" or container_config_strategy.stdout == 'COPY_ONCE' - config_strategy == "COPY_ONCE" or item[1]['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE'
- check_result.rc == 1 - 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 - include: start.yml
when: when: remove_containers.changed
- config_strategy == "COPY_ONCE" or container_config_strategy.stdout == 'COPY_ONCE'
- check_result.rc == 1
- name: Restart keystone service - name: Restart containers
# TODO(jeffrey4l): move to the kolla_docker module when kolla_docker:
# it has restart_container action name: "{{ item[0]['name'] }}"
command: docker restart keystone action: "restart_container"
when: when:
- config_strategy == 'COPY_ALWAYS' - config_strategy == 'COPY_ALWAYS'
- container_config_strategy.stdout != 'COPY_ONCE' - item[1]['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE'
- check_result.rc == 1 - item[2]['rc'] == 1
- inventory_hostname in groups[item[0]['group']]
with_together:
- [{ name: keystone, group: keystone }]
- container_envs.results
- check_results.results