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  }