diff --git a/ansible/roles/cinder/tasks/do_reconfigure.yml b/ansible/roles/cinder/tasks/do_reconfigure.yml new file mode 100644 index 0000000000..bcede38508 --- /dev/null +++ b/ansible/roles/cinder/tasks/do_reconfigure.yml @@ -0,0 +1,79 @@ +--- +- 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: cinder_api, group: cinder-api } + - { name: cinder_scheduler, group: cinder-scheduler } + - { name: cinder_volume, group: cinder-volume } + - { name: cinder_backup, group: cinder-backup } + +- include: config.yml + +- name: Check the configs + command: docker exec {{ item.name }} /usr/local/bin/kolla_set_configs --check + changed_when: false + failed_when: false + register: check_results + when: inventory_hostname in groups[item.group] + with_items: + - { name: cinder_api, group: cinder-api } + - { name: cinder_scheduler, group: cinder-scheduler } + - { name: cinder_volume, group: cinder-volume } + - { name: cinder_backup, group: cinder-backup } + +# NOTE(jeffrey4l): when config_strategy == 'COPY_ALWAYS' +# and container env['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE', +# just remove the container and start again +- 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: cinder_api, group: cinder-api } + - { name: cinder_scheduler, group: cinder-scheduler } + - { name: cinder_volume, group: cinder-volume } + - { name: cinder_backup, group: cinder-backup } + +- name: Remove the containers + kolla_docker: + name: "{{ item[0]['name'] }}" + action: "remove_container" + register: remove_containers + when: + - 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: cinder_api, group: cinder-api }, + { name: cinder_scheduler, group: cinder-scheduler }, + { name: cinder_volume, group: cinder-volume }, + { name: cinder_backup, group: cinder-backup }] + - container_envs.results + - check_results.results + +- include: start.yml + when: remove_containers.changed + +- name: Restart containers + kolla_docker: + name: "{{ item[0]['name'] }}" + action: "restart_container" + when: + - config_strategy == 'COPY_ALWAYS' + - item[1]['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE' + - item[2]['rc'] == 1 + - inventory_hostname in groups[item[0]['group']] + with_together: + - [{ name: cinder_api, group: cinder-api }, + { name: cinder_scheduler, group: cinder-scheduler }, + { name: cinder_volume, group: cinder-volume }, + { name: cinder_backup, group: cinder-backup }] + - container_envs.results + - check_results.results diff --git a/ansible/roles/cinder/tasks/reconfigure.yml b/ansible/roles/cinder/tasks/reconfigure.yml index ed97d539c0..82618690f2 100644 --- a/ansible/roles/cinder/tasks/reconfigure.yml +++ b/ansible/roles/cinder/tasks/reconfigure.yml @@ -1 +1,7 @@ --- +- include: do_reconfigure.yml + serial: "30%" + when: inventory_hostname in groups['cinder-api'] + or inventory_hostname in groups['cinder-scheduler'] + or inventory_hostname in groups['cinder-volume'] + or inventory_hostname in groups['cinder-backup'] diff --git a/docker/base/set_configs.py b/docker/base/set_configs.py index 16e3c35eb0..83b635c309 100644 --- a/docker/base/set_configs.py +++ b/docker/base/set_configs.py @@ -282,9 +282,15 @@ def execute_config_check(): dest = config_file.get('dest') perm = config_file.get('perm') owner = config_file.get('owner') + optional = config_file.get('optional', False) if not os.path.exists(dest): - LOG.error('Dest file not exist: %s', dest) - sys.exit(1) + if optional: + LOG.info('Dest file does not exist, but is optional: %s', + dest) + return + else: + LOG.error('Dest file does not exist and is: %s', dest) + sys.exit(1) # check content with open(source) as fp1, open(dest) as fp2: if fp1.read() != fp2.read():