- Add PBSStorageCredential model to database schema (fingerprint now required) - Create PBS credentials API router with CRUD operations - Add PBS login functionality to backup service before discovery - Create PBSCredentialsModal component for managing credentials - Integrate PBS credentials management into ServerStoragesModal - Update storage service to extract PBS IP and datastore info - Add helpful hint about finding fingerprint on PBS dashboard - Auto-accept fingerprint during login using stored credentials
136 lines
4.1 KiB
Plaintext
136 lines
4.1 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "sqlite"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model InstalledScript {
|
|
id Int @id @default(autoincrement())
|
|
script_name String
|
|
script_path String
|
|
container_id String?
|
|
server_id Int?
|
|
execution_mode String
|
|
installation_date DateTime? @default(now())
|
|
status String
|
|
output_log String?
|
|
web_ui_ip String?
|
|
web_ui_port Int?
|
|
server Server? @relation(fields: [server_id], references: [id], onDelete: SetNull)
|
|
lxc_config LXCConfig?
|
|
|
|
@@map("installed_scripts")
|
|
}
|
|
|
|
model Server {
|
|
id Int @id @default(autoincrement())
|
|
name String @unique
|
|
ip String
|
|
user String
|
|
password String?
|
|
auth_type String? @default("password")
|
|
ssh_key String?
|
|
ssh_key_passphrase String?
|
|
ssh_port Int? @default(22)
|
|
color String?
|
|
created_at DateTime? @default(now())
|
|
updated_at DateTime? @updatedAt
|
|
ssh_key_path String?
|
|
key_generated Boolean? @default(false)
|
|
installed_scripts InstalledScript[]
|
|
backups Backup[]
|
|
pbs_credentials PBSStorageCredential[]
|
|
|
|
@@map("servers")
|
|
}
|
|
|
|
model LXCConfig {
|
|
id Int @id @default(autoincrement())
|
|
installed_script_id Int @unique
|
|
installed_script InstalledScript @relation(fields: [installed_script_id], references: [id], onDelete: Cascade)
|
|
|
|
// Basic settings
|
|
arch String?
|
|
cores Int?
|
|
memory Int?
|
|
hostname String?
|
|
swap Int?
|
|
onboot Int? // 0 or 1
|
|
ostype String?
|
|
unprivileged Int? // 0 or 1
|
|
|
|
// Network settings (net0)
|
|
net_name String?
|
|
net_bridge String?
|
|
net_hwaddr String?
|
|
net_ip_type String? // 'dhcp' or 'static'
|
|
net_ip String? // IP with CIDR for static
|
|
net_gateway String?
|
|
net_type String? // usually 'veth'
|
|
net_vlan Int?
|
|
|
|
// Storage
|
|
rootfs_storage String?
|
|
rootfs_size String?
|
|
|
|
// Features
|
|
feature_keyctl Int? // 0 or 1
|
|
feature_nesting Int? // 0 or 1
|
|
feature_fuse Int? // 0 or 1
|
|
feature_mount String? // other mount features
|
|
|
|
// Tags
|
|
tags String?
|
|
|
|
// Advanced/raw settings (lxc.* entries and other uncommon settings)
|
|
advanced_config String? // Text blob for advanced settings
|
|
|
|
// Metadata
|
|
synced_at DateTime?
|
|
config_hash String? // Hash of server config for diff detection
|
|
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime @updatedAt
|
|
|
|
@@map("lxc_configs")
|
|
}
|
|
|
|
model Backup {
|
|
id Int @id @default(autoincrement())
|
|
container_id String
|
|
server_id Int
|
|
hostname String
|
|
backup_name String
|
|
backup_path String
|
|
size BigInt?
|
|
created_at DateTime?
|
|
storage_name String
|
|
storage_type String // 'local', 'storage', or 'pbs'
|
|
discovered_at DateTime @default(now())
|
|
server Server @relation(fields: [server_id], references: [id], onDelete: Cascade)
|
|
|
|
@@index([container_id])
|
|
@@index([server_id])
|
|
@@map("backups")
|
|
}
|
|
|
|
model PBSStorageCredential {
|
|
id Int @id @default(autoincrement())
|
|
server_id Int
|
|
storage_name String
|
|
pbs_ip String
|
|
pbs_datastore String
|
|
pbs_password String
|
|
pbs_fingerprint String
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime @updatedAt
|
|
server Server @relation(fields: [server_id], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([server_id, storage_name])
|
|
@@index([server_id])
|
|
@@map("pbs_storage_credentials")
|
|
}
|