constellation/debugd/internal/cdbg/state/state.go

79 lines
3.4 KiB
Go
Raw Normal View History

package state
import (
"errors"
"github.com/edgelesssys/constellation/internal/cloud/cloudtypes"
2022-06-07 10:50:12 -04:00
"github.com/edgelesssys/constellation/internal/config"
"github.com/edgelesssys/constellation/internal/state"
)
// Code in this file is mostly copied from constellation-controlPlane
// TODO: import as package from controlPlane once it is properly refactored
func GetScalingGroupsFromConfig(stat state.ConstellationState, config *config.Config) (controlPlanes, workers cloudtypes.ScalingGroup, err error) {
switch {
2022-07-29 02:10:51 -04:00
case len(stat.GCPControlPlaneInstances) != 0:
return getGCPInstances(stat, config)
2022-07-29 02:10:51 -04:00
case len(stat.AzureControlPlaneInstances) != 0:
return getAzureInstances(stat, config)
2022-07-29 02:10:51 -04:00
case len(stat.QEMUControlPlaneInstances) != 0:
return getQEMUInstances(stat, config)
default:
2022-06-07 11:15:23 -04:00
return cloudtypes.ScalingGroup{}, cloudtypes.ScalingGroup{}, errors.New("no instances to init")
}
}
func getGCPInstances(stat state.ConstellationState, _ *config.Config) (controlPlanes, workers cloudtypes.ScalingGroup, err error) {
2022-07-29 02:10:51 -04:00
if len(stat.GCPControlPlaneInstances) == 0 {
return cloudtypes.ScalingGroup{}, cloudtypes.ScalingGroup{}, errors.New("no control-plane workers available, can't create Constellation without any instance")
}
// GroupID of controlPlanes is empty, since they currently do not scale.
2022-07-29 02:10:51 -04:00
controlPlanes = cloudtypes.ScalingGroup{Instances: stat.GCPControlPlaneInstances}
2022-07-29 02:10:51 -04:00
if len(stat.GCPWorkerInstances) == 0 {
return cloudtypes.ScalingGroup{}, cloudtypes.ScalingGroup{}, errors.New("no worker workers available, can't create Constellation with one instance")
}
// TODO: make min / max configurable and abstract autoscaling for different cloud providers
2022-07-29 02:10:51 -04:00
workers = cloudtypes.ScalingGroup{Instances: stat.GCPWorkerInstances}
return
}
func getAzureInstances(stat state.ConstellationState, _ *config.Config) (controlPlanes, workers cloudtypes.ScalingGroup, err error) {
2022-07-29 02:10:51 -04:00
if len(stat.AzureControlPlaneInstances) == 0 {
return cloudtypes.ScalingGroup{}, cloudtypes.ScalingGroup{}, errors.New("no control-plane workers available, can't create Constellation cluster without any instance")
}
2022-06-07 11:15:23 -04:00
// GroupID of controlPlanes is empty, since they currently do not scale.
2022-07-29 02:10:51 -04:00
controlPlanes = cloudtypes.ScalingGroup{Instances: stat.AzureControlPlaneInstances}
2022-07-29 02:10:51 -04:00
if len(stat.AzureWorkerInstances) == 0 {
return cloudtypes.ScalingGroup{}, cloudtypes.ScalingGroup{}, errors.New("no worker workers available, can't create Constellation cluster with one instance")
}
// TODO: make min / max configurable and abstract autoscaling for different cloud providers
2022-07-29 02:10:51 -04:00
workers = cloudtypes.ScalingGroup{Instances: stat.AzureWorkerInstances}
return
}
func getQEMUInstances(stat state.ConstellationState, _ *config.Config) (controlPlanes, workers cloudtypes.ScalingGroup, err error) {
2022-07-29 02:10:51 -04:00
controlPlaneMap := stat.QEMUControlPlaneInstances
if len(controlPlaneMap) == 0 {
return cloudtypes.ScalingGroup{}, cloudtypes.ScalingGroup{}, errors.New("no controlPlanes available, can't create Constellation without any instance")
}
2022-06-07 11:15:23 -04:00
// QEMU does not support autoscaling
2022-07-29 02:10:51 -04:00
controlPlanes = cloudtypes.ScalingGroup{Instances: stat.QEMUControlPlaneInstances}
2022-06-07 11:15:23 -04:00
2022-07-29 02:10:51 -04:00
if len(stat.QEMUWorkerInstances) == 0 {
return cloudtypes.ScalingGroup{}, cloudtypes.ScalingGroup{}, errors.New("no workers available, can't create Constellation with one instance")
}
2022-06-07 11:15:23 -04:00
// QEMU does not support autoscaling
2022-07-29 02:10:51 -04:00
workers = cloudtypes.ScalingGroup{Instances: stat.QEMUWorkerInstances}
return
}