A Go-based CLI tool for recovering servers from backups to new cloud VMs. Features: - Multi-cloud support: Exoscale, Cloudscale, Hetzner Cloud - Backup sources: Local filesystem, Hetzner Storage Box - 6-stage restore pipeline with /etc whitelist protection - DNS migration with safety checks and auto-rollback - Dry-run by default, requires --yes to execute - Cloud-init for SSH key injection Packages: - cmd/recover-server: CLI commands (recover, migrate-dns, list, cleanup) - internal/providers: Cloud provider implementations - internal/backup: Backup source implementations - internal/restore: 6-stage restore pipeline - internal/dns: Exoscale DNS management - internal/ui: Prompts, progress, dry-run display - internal/config: Environment and host configuration 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package config
|
|
|
|
// HostConfig defines a recoverable host
|
|
type HostConfig struct {
|
|
Name string // Short name (proton, elektron, etc.)
|
|
FQDN string // Full domain name
|
|
DNSZone string // DNS zone for A/AAAA records
|
|
Services []string // Docker services to restore
|
|
BackupDir string // Subdirectory in backup source
|
|
}
|
|
|
|
// KnownHosts contains all configured hosts
|
|
var KnownHosts = map[string]HostConfig{
|
|
"proton": {
|
|
Name: "proton",
|
|
FQDN: "proton.obr.sh",
|
|
DNSZone: "obr.sh",
|
|
Services: []string{"gitea", "traefik", "portainer"},
|
|
BackupDir: "proton",
|
|
},
|
|
"photon": {
|
|
Name: "photon",
|
|
FQDN: "photon.obnh.io",
|
|
DNSZone: "obnh.io",
|
|
Services: []string{"gitea", "nginx"},
|
|
BackupDir: "photon",
|
|
},
|
|
"elektron": {
|
|
Name: "elektron",
|
|
FQDN: "elektron.obr.sh",
|
|
DNSZone: "obr.sh",
|
|
Services: []string{"gitea", "dns", "monitoring"},
|
|
BackupDir: "elektron",
|
|
},
|
|
"fry": {
|
|
Name: "fry",
|
|
FQDN: "fry.obr.sh",
|
|
DNSZone: "obr.sh",
|
|
Services: []string{"mastodon", "gitea", "traefik"},
|
|
BackupDir: "fry",
|
|
},
|
|
}
|
|
|
|
// GetHost returns host config by name
|
|
func GetHost(name string) (*HostConfig, bool) {
|
|
h, ok := KnownHosts[name]
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
return &h, true
|
|
}
|
|
|
|
// ListHosts returns all known host names
|
|
func ListHosts() []string {
|
|
hosts := make([]string, 0, len(KnownHosts))
|
|
for name := range KnownHosts {
|
|
hosts = append(hosts, name)
|
|
}
|
|
return hosts
|
|
}
|