mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-06-03 13:43:22 -04:00
monorepo
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>
This commit is contained in:
commit
2d8fcd9bf4
362 changed files with 50980 additions and 0 deletions
71
cli/ec2/client/client.go
Normal file
71
cli/ec2/client/client.go
Normal file
|
@ -0,0 +1,71 @@
|
|||
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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue