diff options
Diffstat (limited to 'tasks')
-rw-r--r-- | tasks/copy-rendered-templates-recursive.yml | 58 | ||||
-rw-r--r-- | tasks/manage-docker-compose-service.yml | 23 | ||||
-rw-r--r-- | tasks/manage-docker-swarm-service.yml | 16 |
3 files changed, 97 insertions, 0 deletions
diff --git a/tasks/copy-rendered-templates-recursive.yml b/tasks/copy-rendered-templates-recursive.yml new file mode 100644 index 0000000..e47c39c --- /dev/null +++ b/tasks/copy-rendered-templates-recursive.yml @@ -0,0 +1,58 @@ +--- + +- name: Create temporary directory on localhost + delegate_to: localhost + become: false + ansible.builtin.tempfile: + state: directory + register: tempdir + +- name: Ensure parent directories exist for rendered templates + delegate_to: localhost + become: false + ansible.builtin.file: + path: "{{ tempdir.path }}/{{ item.path | dirname }}" + state: directory + mode: "{{ mode | default('0755') }}" + with_filetree: "{{ render_dir }}" + when: item.state == "file" + +- name: Recursively render templates + delegate_to: localhost + become: false + ansible.builtin.template: + src: "{{ item.src }}" + dest: "{{ tempdir.path }}/{{ item.path }}" + mode: "{{ mode | default('0755') }}" + with_filetree: "{{ render_dir }}" + when: item.state == "file" + +- name: Sync rendered templates to remote host + delegate_to: localhost + become: false + ansible.builtin.synchronize: + src: "{{ tempdir.path }}/" + dest: "{{ tempdir.path }}/" + +- name: Remove local temporary directory + delegate_to: localhost + become: false + ansible.builtin.file: + path: "{{ tempdir.path }}" + state: absent + +- name: Update remote files + ansible.builtin.command: + cmd: bash -c 'cp -r {{ tempdir.path }}/* {{ destination_dir }}/' + +- name: Remove local temporary directory + delegate_to: localhost + become: false + ansible.builtin.file: + path: "{{ tempdir.path }}" + state: absent + +- name: Remove remote temporary directory + ansible.builtin.file: + path: "{{ tempdir.path }}" + state: absent diff --git a/tasks/manage-docker-compose-service.yml b/tasks/manage-docker-compose-service.yml new file mode 100644 index 0000000..793d2ac --- /dev/null +++ b/tasks/manage-docker-compose-service.yml @@ -0,0 +1,23 @@ +--- + +- name: "Copy rendered templates for {{ service_name }}" + ansible.builtin.import_tasks: copy-rendered-templates-recursive.yml + vars: + render_dir: "{{ template_render_dir }}" + destination_dir: "{{ service_destination_dir }}" + +- name: "Ensure {{ service_name }} service is enabled and started" + ansible.builtin.systemd_service: + state: "{{ state | default('restarted') }}" + enabled: true + daemon_reload: true + name: "docker-compose@{{ service_name }}" + +- name: "Perform rollout for {{ service_name }}" + with_items: "{{ rollout_services | default([]) }}" + ansible.builtin.shell: + cmd: "/usr/local/bin/docker-rollout rollout -f docker-compose.yml {{ item.rollout_extra_args | default('') }} {{ item.name }}" + chdir: "{{ service_destination_dir }}" + register: rollout_result + changed_when: "'Waiting for new containers to be healthy' in rollout_result.stdout" + failed_when: rollout_result.rc != 0 or 'Rolling back.' in rollout_result.stdout diff --git a/tasks/manage-docker-swarm-service.yml b/tasks/manage-docker-swarm-service.yml new file mode 100644 index 0000000..5332a3f --- /dev/null +++ b/tasks/manage-docker-swarm-service.yml @@ -0,0 +1,16 @@ +--- + +- name: "Copy rendered templates for {{ service_name }}" + ansible.builtin.import_tasks: copy-rendered-templates-recursive.yml + vars: + mode: "0777" + render_dir: "{{ template_render_dir }}" + destination_dir: "{{ service_destination_dir }}" + +- name: "Deploy stack for {{ service_name }}" + ansible.builtin.command: + cmd: "docker stack deploy --resolve-image changed --detach=false --compose-file {{ stack_file | default(service_destination_dir + '/stacks/docker-compose.yml') }} {{ service_name }}" + register: stack_result + changed_when: true + failed_when: stack_result.rc != 0 + |