func()

in cmd/e2e-test/node/delete.go [50:132]


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
}