mirror of https://github.com/portainer/portainer
201 lines
5.0 KiB
Go
201 lines
5.0 KiB
Go
package migrator
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
werrors "github.com/pkg/errors"
|
|
portainer "github.com/portainer/portainer/api"
|
|
)
|
|
|
|
func migrationError(err error, context string) error {
|
|
return werrors.Wrap(err, "failed in "+context)
|
|
}
|
|
|
|
// Migrate checks the database version and migrate the existing data to the most recent data model.
|
|
func (m *Migrator) Migrate() error {
|
|
// set DB to updating status
|
|
err := m.versionService.StoreIsUpdating(true)
|
|
if err != nil {
|
|
return migrationError(err, "StoreIsUpdating")
|
|
}
|
|
|
|
if m.currentDBVersion < 17 {
|
|
return migrationError(err, "migrating from less than Portainer 1.21.0 is not supported, please contact Portainer support.")
|
|
}
|
|
|
|
// Portainer 1.21.0
|
|
if m.currentDBVersion < 18 {
|
|
err := m.updateUsersToDBVersion18()
|
|
if err != nil {
|
|
return migrationError(err, "updateUsersToDBVersion18")
|
|
}
|
|
|
|
err = m.updateEndpointsToDBVersion18()
|
|
if err != nil {
|
|
return migrationError(err, "updateEndpointsToDBVersion18")
|
|
}
|
|
|
|
err = m.updateEndpointGroupsToDBVersion18()
|
|
if err != nil {
|
|
return migrationError(err, "updateEndpointGroupsToDBVersion18")
|
|
}
|
|
|
|
err = m.updateRegistriesToDBVersion18()
|
|
if err != nil {
|
|
return migrationError(err, "updateRegistriesToDBVersion18")
|
|
}
|
|
}
|
|
|
|
// Portainer 1.22.0
|
|
if m.currentDBVersion < 19 {
|
|
err := m.updateSettingsToDBVersion19()
|
|
if err != nil {
|
|
return migrationError(err, "updateSettingsToDBVersion19")
|
|
}
|
|
}
|
|
|
|
// Portainer 1.22.1
|
|
if m.currentDBVersion < 20 {
|
|
err := m.updateUsersToDBVersion20()
|
|
if err != nil {
|
|
return migrationError(err, "updateUsersToDBVersion20")
|
|
}
|
|
|
|
err = m.updateSettingsToDBVersion20()
|
|
if err != nil {
|
|
return migrationError(err, "updateSettingsToDBVersion20")
|
|
}
|
|
|
|
err = m.updateSchedulesToDBVersion20()
|
|
if err != nil {
|
|
return migrationError(err, "updateSchedulesToDBVersion20")
|
|
}
|
|
}
|
|
|
|
// Portainer 1.23.0
|
|
// DBVersion 21 is missing as it was shipped as via hotfix 1.22.2
|
|
if m.currentDBVersion < 22 {
|
|
err := m.updateResourceControlsToDBVersion22()
|
|
if err != nil {
|
|
return migrationError(err, "updateResourceControlsToDBVersion22")
|
|
}
|
|
|
|
err = m.updateUsersAndRolesToDBVersion22()
|
|
if err != nil {
|
|
return migrationError(err, "updateUsersAndRolesToDBVersion22")
|
|
}
|
|
}
|
|
|
|
// Portainer 1.24.0
|
|
if m.currentDBVersion < 23 {
|
|
migrateLog.Info("Migrating to DB 23")
|
|
err := m.updateTagsToDBVersion23()
|
|
if err != nil {
|
|
return migrationError(err, "updateTagsToDBVersion23")
|
|
}
|
|
|
|
err = m.updateEndpointsAndEndpointGroupsToDBVersion23()
|
|
if err != nil {
|
|
return migrationError(err, "updateEndpointsAndEndpointGroupsToDBVersion23")
|
|
}
|
|
}
|
|
|
|
// Portainer 1.24.1
|
|
if m.currentDBVersion < 24 {
|
|
migrateLog.Info("Migrating to DB 24")
|
|
err := m.updateSettingsToDB24()
|
|
if err != nil {
|
|
return migrationError(err, "updateSettingsToDB24")
|
|
}
|
|
}
|
|
|
|
// Portainer 2.0.0
|
|
if m.currentDBVersion < 25 {
|
|
migrateLog.Info("Migrating to DB 25")
|
|
err := m.updateSettingsToDB25()
|
|
if err != nil {
|
|
return migrationError(err, "updateSettingsToDB25")
|
|
}
|
|
|
|
err = m.updateStacksToDB24()
|
|
if err != nil {
|
|
return migrationError(err, "updateStacksToDB24")
|
|
}
|
|
}
|
|
|
|
// Portainer 2.1.0
|
|
if m.currentDBVersion < 26 {
|
|
migrateLog.Info("Migrating to DB 26")
|
|
err := m.updateEndpointSettingsToDB25()
|
|
if err != nil {
|
|
return migrationError(err, "updateEndpointSettingsToDB25")
|
|
}
|
|
}
|
|
|
|
// Portainer 2.2.0
|
|
if m.currentDBVersion < 27 {
|
|
migrateLog.Info("Migrating to DB 27")
|
|
err := m.updateStackResourceControlToDB27()
|
|
if err != nil {
|
|
return migrationError(err, "updateStackResourceControlToDB27")
|
|
}
|
|
}
|
|
|
|
// Portainer 2.6.0
|
|
if m.currentDBVersion < 30 {
|
|
migrateLog.Info("Migrating to DB 30")
|
|
err := m.migrateDBVersionToDB30()
|
|
if err != nil {
|
|
return migrationError(err, "migrateDBVersionToDB30")
|
|
}
|
|
}
|
|
|
|
// Portainer 2.9.0
|
|
if m.currentDBVersion < 32 {
|
|
err := m.migrateDBVersionToDB32()
|
|
if err != nil {
|
|
return migrationError(err, "migrateDBVersionToDB32")
|
|
}
|
|
}
|
|
|
|
// Portainer 2.9.1, 2.9.2
|
|
if m.currentDBVersion < 33 {
|
|
migrateLog.Info("Migrating to DB 33")
|
|
err := m.migrateDBVersionToDB33()
|
|
if err != nil {
|
|
return migrationError(err, "migrateDBVersionToDB33")
|
|
}
|
|
}
|
|
|
|
// Portainer 2.10
|
|
if m.currentDBVersion < 34 {
|
|
migrateLog.Info("Migrating to DB 34")
|
|
if err := m.migrateDBVersionToDB34(); err != nil {
|
|
return migrationError(err, "migrateDBVersionToDB34")
|
|
}
|
|
}
|
|
|
|
// Portainer 2.9.3 (yep out of order, but 2.10 is EE only)
|
|
if m.currentDBVersion < 35 {
|
|
migrateLog.Info("Migrating to DB 35")
|
|
if err := m.migrateDBVersionToDB35(); err != nil {
|
|
return migrationError(err, "migrateDBVersionToDB35")
|
|
}
|
|
}
|
|
|
|
if m.currentDBVersion < 36 {
|
|
migrateLog.Info("Migrating to DB 36")
|
|
if err := m.migrateDBVersionToDB36(); err != nil {
|
|
return migrationError(err, "migrateDBVersionToDB36")
|
|
}
|
|
}
|
|
err = m.versionService.StoreDBVersion(portainer.DBVersion)
|
|
if err != nil {
|
|
return migrationError(err, "StoreDBVersion")
|
|
}
|
|
migrateLog.Info(fmt.Sprintf("Updated DB version to %d", portainer.DBVersion))
|
|
|
|
// reset DB updating status
|
|
return m.versionService.StoreIsUpdating(false)
|
|
}
|