github.com/Axway/agent-sdk@v1.1.101/pkg/migrate/migrateall.go (about) 1 package migrate 2 3 import ( 4 "context" 5 6 apiv1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1" 7 "github.com/Axway/agent-sdk/pkg/util/log" 8 ) 9 10 // Migrator interface for performing a migration on a ResourceInstance 11 type Migrator interface { 12 Migrate(ctx context.Context, ri *apiv1.ResourceInstance) (*apiv1.ResourceInstance, error) 13 } 14 15 type migrateAll struct { 16 migrations []Migrator 17 logger log.FieldLogger 18 } 19 20 // NewMigrateAll creates a single Migrator out of a list of Migrators 21 func NewMigrateAll(m ...Migrator) Migrator { 22 logger := log.NewFieldLogger(). 23 WithPackage("migrate"). 24 WithComponent("migrateAll") 25 return &migrateAll{ 26 migrations: m, 27 logger: logger, 28 } 29 } 30 31 // Migrate passes the resource instance to each migrate func 32 func (m migrateAll) Migrate(ctx context.Context, ri *apiv1.ResourceInstance) (*apiv1.ResourceInstance, error) { 33 var err error 34 35 for _, mig := range m.migrations { 36 var e error 37 ri, e = mig.Migrate(ctx, ri) 38 if e != nil { 39 err = e 40 logger := log.NewLoggerFromContext(ctx) 41 42 logger.WithError(err).Error("failed to run migration for resource") 43 } 44 } 45 46 return ri, err 47 }