cmd/e2e-test/node/delete.go (111 lines of code) (raw):

package node import ( "context" "fmt" sdk "github.com/aws/aws-sdk-go-v2/aws" awsconfig "github.com/aws/aws-sdk-go-v2/config" ec2sdk "github.com/aws/aws-sdk-go-v2/service/ec2" "github.com/aws/aws-sdk-go-v2/service/ec2/types" "github.com/aws/aws-sdk-go-v2/service/eks" s3sdk "github.com/aws/aws-sdk-go-v2/service/s3" ssmsdk "github.com/aws/aws-sdk-go-v2/service/ssm" "github.com/integrii/flaggy" "go.uber.org/zap" clientgo "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "github.com/aws/eks-hybrid/internal/cli" "github.com/aws/eks-hybrid/test/e2e" "github.com/aws/eks-hybrid/test/e2e/cluster" "github.com/aws/eks-hybrid/test/e2e/ec2" "github.com/aws/eks-hybrid/test/e2e/peered" "github.com/aws/eks-hybrid/test/e2e/ssm" ) type Delete struct { flaggy *flaggy.Subcommand configFile string instanceName string } func NewDeleteCommand() *Delete { cmd := &Delete{} deleteCmd := flaggy.NewSubcommand("delete") deleteCmd.Description = "Delete a Hybrid Node" deleteCmd.AddPositionalValue(&cmd.instanceName, "INSTANCE_NAME", 1, true, "Name of the instance to delete.") deleteCmd.String(&cmd.configFile, "f", "config-file", "Path tests config file.") cmd.flaggy = deleteCmd return cmd } func (d *Delete) Flaggy() *flaggy.Subcommand { return d.flaggy } func (d *Delete) Run(log *zap.Logger, opts *cli.GlobalOptions) error { ctx := context.Background() config, err := e2e.ReadConfig(d.configFile) if err != nil { return err } logger := e2e.NewLogger() aws, err := e2e.NewAWSConfig(ctx, awsconfig.WithRegion(config.ClusterRegion)) if err != nil { return fmt.Errorf("reading AWS configuration: %w", err) } ec2Client := ec2sdk.NewFromConfig(aws) eksClient := eks.NewFromConfig(aws) ssmClient := ssmsdk.NewFromConfig(aws) s3Client := s3sdk.NewFromConfig(aws) instances, err := ec2Client.DescribeInstances(ctx, &ec2sdk.DescribeInstancesInput{ Filters: []types.Filter{ { Name: sdk.String("tag:Name"), Values: []string{d.instanceName}, }, { Name: sdk.String("instance-state-name"), Values: []string{"running", "pending"}, }, }, }) if err != nil { return fmt.Errorf("describing instance %s: %w", d.instanceName, err) } if len(instances.Reservations) == 0 || len(instances.Reservations[0].Instances) == 0 { return fmt.Errorf("no instance found with name %s", d.instanceName) } instance := instances.Reservations[0].Instances[0] clientConfig, err := clientcmd.BuildConfigFromFlags("", cluster.KubeconfigPath(config.ClusterName)) if err != nil { return err } k8s, err := clientgo.NewForConfig(clientConfig) if err != nil { return err } jumpbox, err := peered.JumpboxInstance(ctx, ec2Client, config.ClusterName) if err != nil { return err } commandRunner := ssm.NewSSHOnSSMCommandRunner(ssmClient, *jumpbox.InstanceId, logger) cluster, err := peered.GetHybridCluster(ctx, eksClient, ec2Client, config.ClusterName) if err != nil { return err } node := peered.NodeCleanup{ EC2: ec2Client, S3: s3Client, K8s: k8s, RemoteCommandRunner: commandRunner, Logger: logger, Cluster: cluster, LogsBucket: config.LogsBucket, } if err := node.Cleanup(ctx, peered.PeerdNode{ Instance: ec2.Instance{ ID: *instance.InstanceId, IP: *instance.PrivateIpAddress, Name: d.instanceName, }, Name: d.instanceName, }); err != nil { return err } return nil }