github.com/in4it/ecs-deploy@v0.0.42-0.20240508120354-ed77ff16df25/api/migration.go (about)

     1  package api
     2  
     3  import (
     4  	"github.com/in4it/ecs-deploy/provider/ecs"
     5  	"github.com/in4it/ecs-deploy/service"
     6  	"github.com/juju/loggo"
     7  
     8  	"strconv"
     9  	"strings"
    10  	"time"
    11  )
    12  
    13  // logging
    14  var migrationLogger = loggo.GetLogger("migration")
    15  
    16  // Migration struct
    17  type Migration struct {
    18  }
    19  
    20  func (m *Migration) run(apiVersion string) error {
    21  	var runningMajor, runningMinor int
    22  	v := strings.Split(apiVersion, ".")
    23  	if len(v) > 1 {
    24  		runningMajor, _ = strconv.Atoi(v[0])
    25  		runningMinor, _ = strconv.Atoi(v[1])
    26  	} else {
    27  		runningMajor = 1
    28  		runningMinor = 0
    29  	}
    30  	if runningMajor == 1 && runningMinor < 2 {
    31  		migrationLogger.Infof("Starting migration from %v to %v", apiVersion, m.getApiVersion())
    32  		var dss service.DynamoServices
    33  		s := service.NewService()
    34  		e := ecs.ECS{}
    35  		err := s.GetServices(&dss)
    36  		if err != nil {
    37  			return err
    38  		}
    39  		for _, ds := range dss.Services {
    40  			// doing one per half second not to overload db
    41  			s.ClusterName = ds.C
    42  			s.ServiceName = ds.S
    43  			d, err := s.GetLastDeploy()
    44  			if err != nil {
    45  				return err
    46  			}
    47  			cpuReservation, cpuLimit, memoryReservation, memoryLimit := e.GetContainerLimits(*d.DeployData)
    48  			s.UpdateServiceLimits(s.ClusterName, s.ServiceName, cpuReservation, cpuLimit, memoryReservation, memoryLimit)
    49  			time.Sleep(500 * time.Millisecond)
    50  		}
    51  		s.SetApiVersion(m.getApiVersion())
    52  		migrationLogger.Infof("Updated API version to %v", m.getApiVersion())
    53  	}
    54  	return nil
    55  }
    56  
    57  func (m *Migration) getApiVersion() string {
    58  	return apiVersion
    59  }