summaryrefslogtreecommitdiff
path: root/tasks
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-04-27 21:15:30 -0700
committerElizabeth Hunt <me@liz.coffee>2025-04-27 21:25:52 -0700
commitdaef0cf448af17357b552245f39067a9d340ce3d (patch)
treef65a660f7232f057b0c14e477c166006bfb83f87 /tasks
parent1dcdfe34a74708f88aad68af965f4bb5c79adff1 (diff)
downloadinfra-daef0cf448af17357b552245f39067a9d340ce3d.tar.gz
infra-daef0cf448af17357b552245f39067a9d340ce3d.zip
Waow
Diffstat (limited to 'tasks')
-rw-r--r--tasks/copy-rendered-templates-recursive.yml58
-rw-r--r--tasks/manage-docker-compose-service.yml23
-rw-r--r--tasks/manage-docker-swarm-service.yml16
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
+