--- - 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"