# auberge dns migrate
Migrate all A records to new IP address
## Synopsis
```bash
auberge dns migrate --ip <IP> [OPTIONS]
```
## Alias
`auberge d m`
## Description
Updates all existing A records to point to a new IP address. Useful for server migrations.
Shows a table of old vs new IPs before making changes (dry run by default is recommended).
## Options
| -i, --ip IP | New IP address (required) | None |
| -n, --dry-run | Preview without updating | false |
| -P, --production | Use production API (default: sandbox) | false |
## Examples
```bash
# Preview migration
auberge dns migrate --ip 10.0.0.5 --dry-run
# Execute migration
auberge dns migrate --ip 10.0.0.5
# Production API
auberge dns migrate --ip 10.0.0.5 --production
```
## Dry Run Output
```
CLOUDFLARE DNS
[DRY RUN] DNS Migration Preview
--------------------------------------------------
SUBDOMAIN CURRENT NEW
--------------------------------------------------
blocky 192.168.1.10 -> 10.0.0.5
freshrss 192.168.1.10 -> 10.0.0.5
baikal 192.168.1.10 -> 10.0.0.5
calibre 192.168.1.10 -> 10.0.0.5
navidrome 192.168.1.10 -> 10.0.0.5
Would update 5 A record(s).
```
## Execution Output
```
CLOUDFLARE DNS
DNS Migration
--------------------------------------------------
SUBDOMAIN CURRENT NEW
--------------------------------------------------
blocky 192.168.1.10 -> 10.0.0.5
freshrss 192.168.1.10 -> 10.0.0.5
baikal 192.168.1.10 -> 10.0.0.5
Updated 3 A record(s).
```
## Migration Process
1. **Query all A records** from Cloudflare
2. **Filter records** to migrate (only A records)
3. **Show preview** of changes
4. **Update each record** to new IP
5. **Report results**
## Use Cases
**VPS migration**:
```bash
# 1. Preview changes
auberge dns migrate --ip 10.0.0.5 --dry-run
# 2. Verify preview is correct
# 3. Execute migration
auberge dns migrate --ip 10.0.0.5
# 4. Verify records
auberge dns list
```
**Disaster recovery**:
```bash
# Quickly point all records to new server
auberge dns migrate --ip 203.0.113.5
```
## Workflow for Server Migration
1. **Prepare new server**:
```bash
auberge ansible bootstrap newserver --ip 10.0.0.5
auberge ansible run --host newserver
```
2. **Test before DNS migration**:
```bash
echo "10.0.0.5 freshrss.example.com" | sudo tee -a /etc/hosts
curl https://freshrss.example.com
```
3. **Migrate DNS** (dry run first):
```bash
auberge dns migrate --ip 10.0.0.5 --dry-run
auberge dns migrate --ip 10.0.0.5
```
4. **Verify migration**:
```bash
auberge dns list
dig freshrss.example.com
```
## Safety Features
**Dry run recommended**: Always preview with --dry-run first
**Only A records**: Doesn't touch CNAME, MX, TXT, etc.
**Atomic updates**: Each record updated independently
## Record Types Affected
**Affected**:
- A records (IPv4)
**Not affected**:
- AAAA records (IPv6) - use set-all or set individually
- CNAME records
- MX records
- TXT records
- NS records
## Troubleshooting
**No records updated**:
- Check you have A records: `auberge dns list`
- Verify IP format is valid
**Partial update**:
- Some records updated, some failed
- Check Cloudflare API status
- Manually fix failed records with `auberge dns set`
## Related Commands
- [auberge dns list](list.md) - Verify migration
- [auberge dns set](set.md) - Fix individual records
- [auberge dns set-all](set-all.md) - Bulk create records
## See Also
- [DNS Management](../../dns/README.md)
- [Migration Guide](../../backup-restore/migration.md)