--- # Unifi Migration Playbook # MongoDB -> databases (.81), Unifi app -> network-services (.121) # # Usage: # ansible-playbook playbooks/migrate-unifi.yml --tags=setup-nfs # ansible-playbook playbooks/migrate-unifi.yml --tags=stop-old # ansible-playbook playbooks/migrate-unifi.yml --tags=deploy # ansible-playbook playbooks/migrate-unifi.yml # full migration - name: Setup NFS mount on network-services hosts: network-services gather_facts: no become: yes tags: [setup-nfs, deploy] tasks: - name: Create mount directory file: path: /mnt/nas/docker state: directory mode: '0755' - name: Check if NFS already in fstab shell: grep -q "192.168.1.251:/volume1/docker" /etc/fstab register: fstab_check ignore_errors: yes changed_when: false - name: Add NFS mount to fstab lineinfile: path: /etc/fstab line: "192.168.1.251:/volume1/docker /mnt/nas/docker nfs defaults 0 0" state: present when: fstab_check.rc != 0 - name: Mount NFS shell: mount -a changed_when: false - name: Verify mount stat: path: /mnt/nas/docker/unifi register: mount_check - name: Fail if mount not working fail: msg: "NFS mount failed - /mnt/nas/docker/unifi not accessible" when: not mount_check.stat.exists - name: Stop Unifi on docker666 hosts: docker666 gather_facts: no tags: [stop-old] tasks: - name: Stop old Unifi stack shell: | cd /volume1/docker/unifi docker compose down register: stop_result ignore_errors: yes - name: Show result debug: msg: "{{ stop_result.stdout_lines | default(['Stopped']) }}" - name: Deploy MongoDB on databases hosts: databases gather_facts: no tags: [deploy, deploy-mongo] tasks: - name: Ensure database network exists shell: docker network inspect database >/dev/null 2>&1 || docker network create database changed_when: false - name: Create compose directory file: path: /home/docker/appdata/mongodb state: directory mode: '0755' - name: Copy MongoDB compose copy: src: "../compose-files/databases/mongodb/docker-compose.yml" dest: /home/docker/appdata/mongodb/docker-compose.yml mode: '0644' - name: Deploy MongoDB shell: | cd /home/docker/appdata/mongodb docker compose pull docker compose up -d - name: Wait for MongoDB shell: | for i in $(seq 1 30); do if docker exec unifi-db mongo --eval "db.adminCommand('ping')" 2>/dev/null | grep -q "ok"; then echo "MongoDB ready" exit 0 fi sleep 2 done exit 1 register: mongo_wait changed_when: false - name: Deploy Unifi on network-services hosts: network-services gather_facts: no tags: [deploy, deploy-unifi] tasks: - name: Ensure proxy network exists shell: docker network inspect proxy >/dev/null 2>&1 || docker network create proxy changed_when: false - name: Create compose directory file: path: /root/docker/appdata/unifi state: directory mode: '0755' - name: Copy Unifi compose copy: src: "../compose-files/network-services/unifi/docker-compose.yml" dest: /root/docker/appdata/unifi/docker-compose.yml mode: '0644' - name: Deploy Unifi shell: | cd /root/docker/appdata/unifi docker compose pull docker compose up -d - name: Wait for Unifi startup pause: seconds: 60 prompt: "Waiting for Unifi to initialize..." - name: Check Unifi status shell: docker ps --filter name=unifi --format "table {{'{{'}}.Names{{'}}'}}\t{{'{{'}}.Status{{'}}'}}" register: unifi_status - name: Show status debug: msg: "{{ unifi_status.stdout_lines }}" - name: Migration summary hosts: localhost gather_facts: no tags: [always] tasks: - name: Next steps debug: msg: - "============================================" - "UNIFI MIGRATION SUMMARY" - "============================================" - "MongoDB: 192.168.1.81:27017" - "Unifi: https://192.168.1.121:8443" - "" - "UPDATE YOUR 4 APs:" - " ssh admin@" - " set-inform http://192.168.1.121:8080/inform" - "" - "Or from Unifi UI: Settings > System > Advanced" - " Set 'Inform Host' to: 192.168.1.121" - "" - "CLEANUP (after APs reconnect):" - " ssh docker666 'cd /volume1/docker/unifi && docker compose down'" - "============================================"