clustered-fucks/playbooks/migrate-unifi.yml
Maddox 8b46587b01 Add Unifi migration to network-services
- compose-files/network-services/unifi: Full stack (MongoDB + Unifi app)
- compose-files/databases/mongodb: Deprecated, kept for reference
- playbooks/deploy-unifi-local.yml: Local deployment with resource limits
- playbooks/migrate-unifi.yml: Original migration playbook (deprecated)

Stack runs locally on network-services (.121) with:
- unifi-db: MongoDB 4.4.29 (512M/1CPU)
- unifi: Network Application (1G/1CPU)
- Proper labels for autoheal and watchtower
2026-01-24 21:28:38 +00:00

169 lines
4.7 KiB
YAML

---
# 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@<AP-IP>"
- " 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'"
- "============================================"