Sanitized mirror from private repository - 2026-04-05 11:54:56 UTC
This commit is contained in:
6
ansible/roles/docker_stack/defaults/main.yml
Normal file
6
ansible/roles/docker_stack/defaults/main.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
# Default variables for docker_stack role
|
||||
|
||||
stack_deploy: true
|
||||
stack_pull_images: true
|
||||
stack_health_wait: 10
|
||||
107
ansible/roles/docker_stack/tasks/main.yml
Normal file
107
ansible/roles/docker_stack/tasks/main.yml
Normal file
@@ -0,0 +1,107 @@
|
||||
---
|
||||
# Docker Stack Deployment Role
|
||||
# Deploys docker-compose stacks to hosts
|
||||
#
|
||||
# Required variables:
|
||||
# stack_name: Name of the stack/directory
|
||||
# stack_compose_file: Path to the compose file (relative to repo root)
|
||||
#
|
||||
# Optional variables:
|
||||
# stack_env_file: Path to .env file (relative to repo root)
|
||||
# stack_config_files: List of additional config files to copy
|
||||
# stack_deploy: Whether to deploy the stack (default: true)
|
||||
# stack_pull_images: Whether to pull images first (default: true)
|
||||
|
||||
- name: Ensure stack directory exists
|
||||
ansible.builtin.file:
|
||||
path: "{{ docker_data_path }}/{{ stack_name }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Ensure stack subdirectories exist
|
||||
ansible.builtin.file:
|
||||
path: "{{ docker_data_path }}/{{ stack_name }}/{{ item }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
loop: "{{ stack_subdirs | default(['config', 'data']) }}"
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Copy docker-compose file from repo
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../../{{ stack_compose_file }}"
|
||||
dest: "{{ docker_data_path }}/{{ stack_name }}/docker-compose.yml"
|
||||
mode: '0644'
|
||||
backup: true
|
||||
register: compose_file_result
|
||||
when: stack_compose_file is defined
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Copy docker-compose content directly
|
||||
ansible.builtin.copy:
|
||||
content: "{{ stack_compose_content }}"
|
||||
dest: "{{ docker_data_path }}/{{ stack_name }}/docker-compose.yml"
|
||||
mode: '0644'
|
||||
backup: true
|
||||
register: compose_content_result
|
||||
when:
|
||||
- stack_compose_content is defined
|
||||
- stack_compose_file is not defined
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Copy environment file from repo
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../../{{ stack_env_file }}"
|
||||
dest: "{{ docker_data_path }}/{{ stack_name }}/.env"
|
||||
mode: '0600'
|
||||
backup: true
|
||||
when: stack_env_file is defined
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Copy environment content directly
|
||||
ansible.builtin.copy:
|
||||
content: "{{ stack_env_content }}"
|
||||
dest: "{{ docker_data_path }}/{{ stack_name }}/.env"
|
||||
mode: '0600'
|
||||
when:
|
||||
- stack_env_content is defined
|
||||
- stack_env_file is not defined
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Copy additional config files
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../../{{ item.src }}"
|
||||
dest: "{{ docker_data_path }}/{{ stack_name }}/{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
backup: true
|
||||
loop: "{{ stack_config_files | default([]) }}"
|
||||
when: stack_config_files is defined
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Pull Docker images
|
||||
ansible.builtin.command:
|
||||
cmd: docker compose pull
|
||||
chdir: "{{ docker_data_path }}/{{ stack_name }}"
|
||||
register: pull_result
|
||||
when: stack_pull_images | default(true)
|
||||
changed_when: "'Downloaded' in pull_result.stdout"
|
||||
failed_when: false
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Deploy stack with docker compose
|
||||
ansible.builtin.command:
|
||||
cmd: docker compose up -d --remove-orphans
|
||||
chdir: "{{ docker_data_path }}/{{ stack_name }}"
|
||||
register: deploy_result
|
||||
when: stack_deploy | default(true)
|
||||
changed_when:
|
||||
- "'Started' in deploy_result.stdout or 'Created' in deploy_result.stdout"
|
||||
- compose_file_result.changed | default(false) or compose_content_result.changed | default(false)
|
||||
become: "{{ ansible_become | default(false) }}"
|
||||
|
||||
- name: Wait for stack to be healthy
|
||||
ansible.builtin.pause:
|
||||
seconds: "{{ stack_health_wait | default(5) }}"
|
||||
when:
|
||||
- stack_deploy | default(true)
|
||||
- stack_health_wait | default(5) > 0
|
||||
Reference in New Issue
Block a user