mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-05 07:26:36 +08:00
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package goose
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
presslygoose "github.com/pressly/goose/v3"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const versionNodeCapabilitiesJSON int64 = 202606020001
|
|
|
|
// migration202606020001 adds a future-proof JSON field for node capability
|
|
// summaries after the legacy v17 migration bridge.
|
|
func migration202606020001(backend string, ctx Context) *presslygoose.Migration {
|
|
return newGORMMigration(
|
|
versionNodeCapabilitiesJSON,
|
|
"202606020001_add_node_capabilities_json.go",
|
|
backend,
|
|
ctx,
|
|
migrateNodeCapabilitiesJSON,
|
|
)
|
|
}
|
|
|
|
func migrateNodeCapabilitiesJSON(ctx Context, db *gorm.DB, backend string) error {
|
|
if err := ctx.ApplyCurrentSchema(db, backend); err != nil {
|
|
return err
|
|
}
|
|
emptyJSON, err := json.Marshal([]string{})
|
|
if err != nil {
|
|
return fmt.Errorf("marshal default node capabilities: %w", err)
|
|
}
|
|
if err := db.Exec(
|
|
`UPDATE nodes SET capabilities_json = ? WHERE capabilities_json IS NULL OR TRIM(capabilities_json) = ''`,
|
|
string(emptyJSON),
|
|
).Error; err != nil {
|
|
return fmt.Errorf("backfill nodes.capabilities_json: %w", err)
|
|
}
|
|
return validateNodeCapabilitiesJSON(db)
|
|
}
|
|
|
|
func validateNodeCapabilitiesJSON(db *gorm.DB) error {
|
|
if db == nil {
|
|
return fmt.Errorf("database handle is nil")
|
|
}
|
|
if !db.Migrator().HasColumn("nodes", "capabilities_json") {
|
|
return fmt.Errorf("column nodes.capabilities_json is missing")
|
|
}
|
|
return nil
|
|
}
|