portainer/portainer

View on GitHub
api/datastore/migrator/migrate_dbversion70.go

Summary

Maintainability
A
35 mins
Test Coverage
package migrator

import (
    portainer "github.com/portainer/portainer/api"

    "github.com/rs/zerolog/log"
)

func (m *Migrator) migrateDBVersionToDB70() error {
    log.Info().Msg("add IngressAvailabilityPerNamespace field")
    if err := m.updateIngressFieldsForEnvDB70(); err != nil {
        return err
    }

    endpoints, err := m.endpointService.Endpoints()
    if err != nil {
        return err
    }

    for _, endpoint := range endpoints {
        // copy snapshots to new object
        log.Info().Msg("moving snapshots from endpoint to new object")
        snapshot := portainer.Snapshot{EndpointID: endpoint.ID}

        if len(endpoint.Snapshots) > 0 {
            snapshot.Docker = &endpoint.Snapshots[len(endpoint.Snapshots)-1]
        }

        if len(endpoint.Kubernetes.Snapshots) > 0 {
            snapshot.Kubernetes = &endpoint.Kubernetes.Snapshots[len(endpoint.Kubernetes.Snapshots)-1]
        }

        // save new object
        err = m.snapshotService.Create(&snapshot)
        if err != nil {
            return err
        }

        // set to nil old fields
        log.Info().Msg("deleting snapshot from endpoint")
        endpoint.Snapshots = []portainer.DockerSnapshot{}
        endpoint.Kubernetes.Snapshots = []portainer.KubernetesSnapshot{}

        // update endpoint
        err = m.endpointService.UpdateEndpoint(endpoint.ID, &endpoint)
        if err != nil {
            return err
        }
    }

    return nil
}

func (m *Migrator) updateIngressFieldsForEnvDB70() error {
    endpoints, err := m.endpointService.Endpoints()
    if err != nil {
        return err
    }

    for _, endpoint := range endpoints {
        endpoint.Kubernetes.Configuration.IngressAvailabilityPerNamespace = true
        endpoint.Kubernetes.Configuration.AllowNoneIngressClass = false
        endpoint.PostInitMigrations.MigrateIngresses = true

        err = m.endpointService.UpdateEndpoint(endpoint.ID, &endpoint)
        if err != nil {
            return err
        }
    }
    return nil
}