mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-12-21 21:55:27 -05:00
ff8830e718
Signed-off-by: Benedict Schlueter <bs@edgeless.systems>
125 lines
4.4 KiB
Go
125 lines
4.4 KiB
Go
package state
|
|
|
|
import (
|
|
"errors"
|
|
|
|
cmdc "github.com/edgelesssys/constellation/cli/cmd"
|
|
"github.com/edgelesssys/constellation/cli/gcp"
|
|
configc "github.com/edgelesssys/constellation/internal/config"
|
|
"github.com/edgelesssys/constellation/internal/state"
|
|
)
|
|
|
|
// Code in this file is mostly copied from constellation-coordinator
|
|
// TODO: import as package from coordinator once it is properly refactored
|
|
|
|
func GetScalingGroupsFromConfig(stat state.ConstellationState, config *configc.Config) (coordinators, nodes cmdc.ScalingGroup, err error) {
|
|
switch {
|
|
case len(stat.EC2Instances) != 0:
|
|
return getAWSInstances(stat, config)
|
|
case len(stat.GCPCoordinators) != 0:
|
|
return getGCPInstances(stat, config)
|
|
case len(stat.AzureCoordinators) != 0:
|
|
return getAzureInstances(stat, config)
|
|
default:
|
|
return cmdc.ScalingGroup{}, cmdc.ScalingGroup{}, errors.New("no instances to init")
|
|
}
|
|
}
|
|
|
|
func getAWSInstances(stat state.ConstellationState, _ *configc.Config) (coordinators, nodes cmdc.ScalingGroup, err error) {
|
|
coordinatorID, _, err := stat.EC2Instances.GetOne()
|
|
if err != nil {
|
|
return
|
|
}
|
|
coordinatorMap := stat.EC2Instances
|
|
var coordinatorInstances cmdc.Instances
|
|
for _, node := range coordinatorMap {
|
|
coordinatorInstances = append(coordinatorInstances, cmdc.Instance(node))
|
|
}
|
|
// GroupID of coordinators is empty, since they currently do not scale.
|
|
coordinators = cmdc.ScalingGroup{
|
|
Instances: coordinatorInstances,
|
|
GroupID: "",
|
|
}
|
|
nodeMap := stat.EC2Instances.GetOthers(coordinatorID)
|
|
if len(nodeMap) == 0 {
|
|
return cmdc.ScalingGroup{}, cmdc.ScalingGroup{}, errors.New("no nodes available, can't create Constellation with one instance")
|
|
}
|
|
|
|
var nodeInstances cmdc.Instances
|
|
for _, node := range nodeMap {
|
|
nodeInstances = append(nodeInstances, cmdc.Instance(node))
|
|
}
|
|
|
|
// TODO: make min / max configurable and abstract autoscaling for different cloud providers
|
|
// TODO: GroupID of nodes is empty, since they currently do not scale.
|
|
nodes = cmdc.ScalingGroup{Instances: nodeInstances, GroupID: ""}
|
|
|
|
return
|
|
}
|
|
|
|
func getGCPInstances(stat state.ConstellationState, config *configc.Config) (coordinators, nodes cmdc.ScalingGroup, err error) {
|
|
coordinatorMap := stat.GCPCoordinators
|
|
if len(coordinatorMap) == 0 {
|
|
return cmdc.ScalingGroup{}, cmdc.ScalingGroup{}, errors.New("no coordinators available, can't create Constellation without any instance")
|
|
}
|
|
var coordinatorInstances cmdc.Instances
|
|
for _, node := range coordinatorMap {
|
|
coordinatorInstances = append(coordinatorInstances, cmdc.Instance(node))
|
|
}
|
|
// GroupID of coordinators is empty, since they currently do not scale.
|
|
coordinators = cmdc.ScalingGroup{
|
|
Instances: coordinatorInstances,
|
|
GroupID: "",
|
|
}
|
|
|
|
nodeMap := stat.GCPNodes
|
|
if len(nodeMap) == 0 {
|
|
return cmdc.ScalingGroup{}, cmdc.ScalingGroup{}, errors.New("no nodes available, can't create Constellation with one instance")
|
|
}
|
|
|
|
var nodeInstances cmdc.Instances
|
|
for _, node := range nodeMap {
|
|
nodeInstances = append(nodeInstances, cmdc.Instance(node))
|
|
}
|
|
|
|
// TODO: make min / max configurable and abstract autoscaling for different cloud providers
|
|
nodes = cmdc.ScalingGroup{
|
|
Instances: nodeInstances,
|
|
GroupID: gcp.AutoscalingNodeGroup(stat.GCPProject, stat.GCPZone, stat.GCPNodeInstanceGroup, *config.AutoscalingNodeGroupsMin, *config.AutoscalingNodeGroupsMax),
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func getAzureInstances(stat state.ConstellationState, _ *configc.Config) (coordinators, nodes cmdc.ScalingGroup, err error) {
|
|
coordinatorMap := stat.AzureCoordinators
|
|
if len(coordinatorMap) == 0 {
|
|
return cmdc.ScalingGroup{}, cmdc.ScalingGroup{}, errors.New("no coordinators available, can't create Constellation without any instance")
|
|
}
|
|
var coordinatorInstances cmdc.Instances
|
|
for _, node := range coordinatorMap {
|
|
coordinatorInstances = append(coordinatorInstances, cmdc.Instance(node))
|
|
}
|
|
// GroupID of coordinators is empty, since they currently do not scale.
|
|
coordinators = cmdc.ScalingGroup{
|
|
Instances: coordinatorInstances,
|
|
GroupID: "",
|
|
}
|
|
nodeMap := stat.AzureNodes
|
|
if len(nodeMap) == 0 {
|
|
return cmdc.ScalingGroup{}, cmdc.ScalingGroup{}, errors.New("no nodes available, can't create Constellation with one instance")
|
|
}
|
|
|
|
var nodeInstances cmdc.Instances
|
|
for _, node := range nodeMap {
|
|
nodeInstances = append(nodeInstances, cmdc.Instance(node))
|
|
}
|
|
|
|
// TODO: make min / max configurable and abstract autoscaling for different cloud providers
|
|
nodes = cmdc.ScalingGroup{
|
|
Instances: nodeInstances,
|
|
GroupID: "",
|
|
}
|
|
return
|
|
}
|