You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ansible-homelab/roles/deploy_portainer_stack/tasks/main.yml

69 lines
2.5 KiB
YAML

- name: Stack {{ portainer_stack_name }} | Create a directory if it does not exist
ansible.builtin.file:
path: '{{ directories.docker_compose_directory }}/{{ portainer_stack_name }}'
state: directory
mode: '0755'
- name: Stack {{ portainer_stack_name }} | Template Docker Compose File
ansible.builtin.template:
src: '{{ portainer_stack_name }}.j2'
dest: '{{ directories.docker_compose_directory }}/{{ portainer_stack_name }}/docker-compose.yml'
owner: root
group: root
mode: 0440
vars:
template_vars: '{{ portainer_stack_template_vars }}'
- name: Stack {{ portainer_stack_name }} | Ensure required directories
ansible.builtin.file:
path: '{{ item }}'
state: directory
mode: '0755'
with_items: '{{ portainer_stack_directories }}'
- name: Stack {{ portainer_stack_name }} | Find docker volumes
ansible.builtin.shell: docker volume ls -f name={{ portainer_stack_name }} --format
'{{ '{{' }} .Name {{ '}}' }}'
register: find_volumes
changed_when: false
- name: Stack {{ portainer_stack_name }} | Find docker volumes that need to be restored
ansible.builtin.script: scripts/find-volumes-to-restore.py
environment:
EXISTING_VOLUMES: '{{ find_volumes.stdout_lines }}'
STACK_NAME: '{{ portainer_stack_name }}'
DOCKER_COMPOSE_DIR: '{{ directories.docker_compose_directory }}'
args:
executable: python3
register: python_output
changed_when: false
- name: Stack {{ portainer_stack_name }} | Build list of volumes to restore.
ansible.builtin.set_fact:
restore_volumes: "{{ restore_volumes | default([]) + [{'name':item}] }}"
with_items: '{{ python_output.stdout_lines | list }}'
- name: Stack {{ portainer_stack_name }} | Restore any missing volumes from S3
ansible.builtin.include_role:
name: chatton.docker_backup.docker_s3_volume_restore
when: restore_volumes is defined
vars:
docker_backup_restore_force: false
docker_backup_restore_latest_s3_key: true
docker_backup_fail_on_no_s3_backups: false
docker_backup_s3_volume: '{{ volume }}'
with_items: '{{ restore_volumes }}'
loop_control:
loop_var: volume
- name: Stack {{ portainer_stack_name }} | Update Portainer.
chatton.portainer.portainer_stack:
username: admin
password: '{{ portainer.password }}'
base_url: '{{ portainer_base_url }}'
docker_compose_file_path: '{{ directories.docker_compose_directory }}/{{ portainer_stack_name
}}/docker-compose.yml'
stack_name: '{{ portainer_stack_name }}'
endpoint_id: '{{ portainer_stack_endpoint_id }}'
state: present