mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-10-01 01:36:09 -04:00
2d8fcd9bf4
Co-authored-by: Malte Poll <mp@edgeless.systems> Co-authored-by: katexochen <katexochen@users.noreply.github.com> Co-authored-by: Daniel Weiße <dw@edgeless.systems> Co-authored-by: Thomas Tendyck <tt@edgeless.systems> Co-authored-by: Benedict Schlueter <bs@edgeless.systems> Co-authored-by: leongross <leon.gross@rub.de> Co-authored-by: Moritz Eckert <m1gh7ym0@gmail.com>
72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"time"
|
|
|
|
awsconfig "github.com/aws/aws-sdk-go-v2/config"
|
|
awsec2 "github.com/aws/aws-sdk-go-v2/service/ec2"
|
|
|
|
"github.com/edgelesssys/constellation/cli/cloudprovider"
|
|
"github.com/edgelesssys/constellation/cli/ec2"
|
|
"github.com/edgelesssys/constellation/internal/state"
|
|
)
|
|
|
|
// Client for the AWS EC2 API.
|
|
type Client struct {
|
|
api api
|
|
instances ec2.Instances
|
|
securityGroup string
|
|
timeout time.Duration
|
|
}
|
|
|
|
func newClient(api api) (*Client, error) {
|
|
return &Client{
|
|
api: api,
|
|
instances: make(map[string]ec2.Instance),
|
|
timeout: 2 * time.Minute,
|
|
}, nil
|
|
}
|
|
|
|
// NewFromDefault creates a Client from the default config.
|
|
func NewFromDefault(ctx context.Context) (*Client, error) {
|
|
cfg, err := awsconfig.LoadDefaultConfig(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return newClient(awsec2.NewFromConfig(cfg))
|
|
}
|
|
|
|
// GetState returns the current configuration of the Constellation,
|
|
// which can be stored and used through later CLI commands.
|
|
func (c *Client) GetState() (state.ConstellationState, error) {
|
|
if len(c.instances) == 0 {
|
|
return state.ConstellationState{}, errors.New("client has no instances")
|
|
}
|
|
if c.securityGroup == "" {
|
|
return state.ConstellationState{}, errors.New("client has no security group")
|
|
}
|
|
return state.ConstellationState{
|
|
CloudProvider: cloudprovider.AWS.String(),
|
|
EC2Instances: c.instances,
|
|
EC2SecurityGroup: c.securityGroup,
|
|
}, nil
|
|
}
|
|
|
|
// SetState sets a Client to an existing configuration.
|
|
func (c *Client) SetState(stat state.ConstellationState) error {
|
|
if stat.CloudProvider != cloudprovider.AWS.String() {
|
|
return errors.New("state is not aws state")
|
|
}
|
|
if len(stat.EC2Instances) == 0 {
|
|
return errors.New("state has no instances")
|
|
}
|
|
if stat.EC2SecurityGroup == "" {
|
|
return errors.New("state has no security group")
|
|
}
|
|
c.instances = stat.EC2Instances
|
|
c.securityGroup = stat.EC2SecurityGroup
|
|
return nil
|
|
}
|