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:
parent
3aedf52489
commit
b694408abc
@ -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'),
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user