195 lines
4.9 KiB
YAML
195 lines
4.9 KiB
YAML
|
---
|
||
|
- name: Dokku migration playbook
|
||
|
hosts: localhost
|
||
|
gather_facts: no
|
||
|
vars_files:
|
||
|
- config.yml
|
||
|
|
||
|
tasks:
|
||
|
- name: Create temporary directory for SSH keypair
|
||
|
tempfile:
|
||
|
state: directory
|
||
|
suffix: dokku_sync
|
||
|
register: temp_dir
|
||
|
|
||
|
- name: Generate SSH keypair
|
||
|
community.crypto.openssh_keypair:
|
||
|
path: "{{ temp_dir.path }}/dokku_sync_migration"
|
||
|
type: ed25519
|
||
|
owner: "{{ lookup('env', 'USER') }}"
|
||
|
group: "{{ lookup('env', 'USER') }}"
|
||
|
mode: '0600'
|
||
|
|
||
|
- name: Handle Source Server
|
||
|
hosts: source
|
||
|
gather_facts: yes
|
||
|
vars_files:
|
||
|
- config.yml
|
||
|
tasks:
|
||
|
- name: Get list of Dokku MariaDB services
|
||
|
shell: dokku mariadb:list | tail -n+2
|
||
|
register: mariadb_services
|
||
|
|
||
|
- name: Get list of Dokku PostgreSQL services
|
||
|
shell: dokku postgres:list | tail -n+2
|
||
|
register: postgres_services
|
||
|
|
||
|
- name: Get list of Dokku Redis services
|
||
|
shell: dokku redis:list | tail -n+2
|
||
|
register: redis_services
|
||
|
|
||
|
- name: Get list of Dokku MongoDB services
|
||
|
shell: dokku mongo:list | tail -n+2
|
||
|
register: mongo_services
|
||
|
|
||
|
- name: Save Dokku service lists to disk
|
||
|
copy:
|
||
|
content: |
|
||
|
mariadb_services: {{ mariadb_services.stdout_lines }}
|
||
|
postgres_services: {{ postgres_services.stdout_lines }}
|
||
|
redis_services: {{ redis_services.stdout_lines }}
|
||
|
mongo_services: {{ mongo_services.stdout_lines }}
|
||
|
dest: /tmp/dokku_services.yml
|
||
|
|
||
|
- name: Stop all Dokku apps
|
||
|
command: dokku ps:stop --all
|
||
|
|
||
|
- name: Stop all MariaDB services
|
||
|
command: dokku mariadb:stop {{ item }}
|
||
|
loop: "{{ mariadb_services.stdout_lines }}"
|
||
|
|
||
|
- name: Stop all PostgreSQL services
|
||
|
command: dokku postgres:stop {{ item }}
|
||
|
loop: "{{ postgres_services.stdout_lines }}"
|
||
|
|
||
|
- name: Stop all Redis services
|
||
|
command: dokku redis:stop {{ item }}
|
||
|
loop: "{{ redis_services.stdout_lines }}"
|
||
|
|
||
|
- name: Stop all MongoDB services
|
||
|
command: dokku mongo:stop {{ item }}
|
||
|
loop: "{{ mongo_services.stdout_lines }}"
|
||
|
|
||
|
- name: Stop Docker service
|
||
|
service:
|
||
|
name: docker
|
||
|
state: stopped
|
||
|
|
||
|
- name: Stop Docker socket service
|
||
|
service:
|
||
|
name: docker.socket
|
||
|
state: stopped
|
||
|
|
||
|
- name: Fetch Dokku service lists to local
|
||
|
fetch:
|
||
|
src: /tmp/dokku_services.yml
|
||
|
dest: /tmp/dokku_services.yml
|
||
|
flat: yes
|
||
|
|
||
|
- name: Handle Destination Server
|
||
|
hosts: destination
|
||
|
gather_facts: yes
|
||
|
vars_files:
|
||
|
- config.yml
|
||
|
tasks:
|
||
|
- name: Copy Dokku service lists to destination
|
||
|
copy:
|
||
|
src: /tmp/dokku_services.yml
|
||
|
dest: /tmp/dokku_services.yml
|
||
|
|
||
|
- name: Load Dokku service lists
|
||
|
include_vars:
|
||
|
file: /tmp/dokku_services.yml
|
||
|
|
||
|
- name: Stop all Dokku apps
|
||
|
command: dokku ps:stop --all
|
||
|
|
||
|
- name: Stop Docker service
|
||
|
service:
|
||
|
name: docker
|
||
|
state: stopped
|
||
|
|
||
|
- name: Stop Docker socket service
|
||
|
service:
|
||
|
name: docker.socket
|
||
|
state: stopped
|
||
|
|
||
|
- name: Create necessary directories
|
||
|
file:
|
||
|
path: "{{ item }}"
|
||
|
state: directory
|
||
|
owner: dokku
|
||
|
group: dokku
|
||
|
mode: '0755'
|
||
|
loop:
|
||
|
- /home/dokku/
|
||
|
- /home/data/
|
||
|
- /var/lib/dokku/
|
||
|
|
||
|
- name: Synchronize /home/dokku
|
||
|
synchronize:
|
||
|
src: "{{ source_host }}:/home/dokku/"
|
||
|
dest: /home/dokku/
|
||
|
archive: yes
|
||
|
delete: yes
|
||
|
|
||
|
- name: Synchronize /var/lib/dokku
|
||
|
synchronize:
|
||
|
src: "{{ source_host }}:/var/lib/dokku/"
|
||
|
dest: /var/lib/dokku/
|
||
|
archive: yes
|
||
|
delete: yes
|
||
|
|
||
|
- name: Synchronize /home/data
|
||
|
synchronize:
|
||
|
src: "{{ source_host }}:/home/data/"
|
||
|
dest: /home/data/
|
||
|
archive: yes
|
||
|
delete: yes
|
||
|
|
||
|
- name: Synchronize /home/git
|
||
|
synchronize:
|
||
|
src: "{{ source_host }}:/home/git/"
|
||
|
dest: /home/git/
|
||
|
archive: yes
|
||
|
delete: yes
|
||
|
|
||
|
- name: Start all MariaDB services
|
||
|
command: dokku mariadb:start {{ item }}
|
||
|
loop: "{{ mariadb_services }}"
|
||
|
|
||
|
- name: Start all PostgreSQL services
|
||
|
command: dokku postgres:start {{ item }}
|
||
|
loop: "{{ postgres_services }}"
|
||
|
|
||
|
- name: Start all Redis services
|
||
|
command: dokku redis:start {{ item }}
|
||
|
loop: "{{ redis_services }}"
|
||
|
|
||
|
- name: Start all MongoDB services
|
||
|
command: dokku mongo:start {{ item }}
|
||
|
loop: "{{ mongo_services }}"
|
||
|
|
||
|
- name: List Dokku apps
|
||
|
command: dokku apps:list
|
||
|
|
||
|
- name: Patch URLs in Dokku configuration files
|
||
|
find:
|
||
|
paths:
|
||
|
- /home/dokku/
|
||
|
patterns: ['VHOST', 'URLS']
|
||
|
recurse: yes
|
||
|
register: dokku_config_files
|
||
|
|
||
|
- name: Replace source host with destination host in configuration files
|
||
|
lineinfile:
|
||
|
path: "{{ item.path }}"
|
||
|
regexp: "{{ source_host }}"
|
||
|
line: "{{ destination_host }}"
|
||
|
loop: "{{ dokku_config_files.files }}"
|
||
|
|
||
|
- name: Display success message
|
||
|
debug:
|
||
|
msg: "SUCCESS"
|
||
|
|