Skip to content

Commit

Permalink
feat: add delete command
Browse files Browse the repository at this point in the history
  • Loading branch information
Artonus committed Feb 27, 2024
1 parent 9aa6161 commit bcfeab7
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 1 deletion.
54 changes: 54 additions & 0 deletions cmd/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package cmd

import (
"fmt"
"github.com/Artonus/hermes/internal/cmdutil"
"github.com/Artonus/hermes/internal/config"
"os"

"github.com/spf13/cobra"
)

// deleteCmd represents the delete command
var deleteCmd = &cobra.Command{
Use: "delete",
Short: "Delete files from S3.",
Long: `This command deletes all uploaded files from S3 bucket.`,
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println("delete called")
accessKey := os.Getenv("AWS_ACCESS_KEY_ID")
secretKey := os.Getenv("AWS_SECRET_ACCESS_KEY")
region := os.Getenv("AWS_REGION")
bucket := os.Getenv("AWS_BUCKET")
key := os.Getenv("NETAPP_KEY")
cfg := config.NewConfig(accessKey, secretKey, config.WithBucket(bucket), config.WithRegion(region), config.WithKey(key))

deleteClient, err := cmdutil.CreateDeleteClient(cfg)
if err != nil {
return err
}

res, deleteErr := deleteClient.Delete(cfg.Key)
if !res && deleteErr != nil {
return deleteErr
}
if res && deleteErr != nil {
fmt.Println(deleteErr.Error())
}
return nil
},
}

func init() {
rootCmd.AddCommand(deleteCmd)

// Here you will define your flags and configuration settings.

// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// deleteCmd.PersistentFlags().String("foo", "", "A help for foo")

// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// deleteCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
2 changes: 1 addition & 1 deletion cmd/post.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ var postCmd = &cobra.Command{
return err
}

fmt.Println("fetch completed")
fmt.Println("Files upload successful")
return nil
},
}
Expand Down
3 changes: 3 additions & 0 deletions internal/cmdutil/cmdutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ func CreateFetchClient(cfg *hermesConfig.HermesConfig) (data_service.DataFetcher
func CreatePostClient(cfg *hermesConfig.HermesConfig) (data_service.DataPoster, error) {
return create(cfg)
}
func CreateDeleteClient(cfg *hermesConfig.HermesConfig) (data_service.DataCleaner, error) {
return create(cfg)
}

func create(cfg *hermesConfig.HermesConfig) (*data_service.S3Service, error) {
s3Client, err := createS3Client(cfg)
Expand Down
4 changes: 4 additions & 0 deletions internal/data-service/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,7 @@ type DataFetcher interface {
type DataPoster interface {
Post(netAppKey, sourceDir string) error
}

type DataCleaner interface {
Delete(netAppKey string) (bool, error)
}
43 changes: 43 additions & 0 deletions internal/data-service/s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ package data_service

import (
"context"
"errors"
"fmt"
"github.com/Artonus/hermes/internal/util"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/feature/s3/manager"
"github.com/aws/aws-sdk-go-v2/service/s3"
"os"
"path/filepath"
"strings"
)

type S3Service struct {
Expand Down Expand Up @@ -108,3 +110,44 @@ func (s3Service *S3Service) Post(netAppKey, sourceDir string) error {
}
return nil
}

func (s3Service *S3Service) Delete(netAppKey string) (bool, error) {
ctx := context.TODO()
deleteAll := false
if netAppKey == "" {
fmt.Printf("NetApp Key is empty do you want to delete all objects from bucket %s? (y/N): ", s3Service.bucket)
var input string
_, err := fmt.Scanln(&input)
if err != nil {
return false, err
}
if strings.ToLower(input) != "y" && strings.ToLower(input) != "yes" {
return true, errors.New("deleting operation aborted")
}
deleteAll = true
}
prefix := ""
if !deleteAll {
prefix = netAppKey + "/"
}
resp, err := s3Service.s3.ListObjectsV2(ctx, &s3.ListObjectsV2Input{
Bucket: aws.String(s3Service.bucket),
Prefix: aws.String(prefix),
}, func(o *s3.Options) {
o.Region = s3Service.region
})
if err != nil {
return false, err
}

for _, content := range resp.Contents {
_, deleteErr := s3Service.s3.DeleteObject(ctx, &s3.DeleteObjectInput{
Bucket: aws.String(s3Service.bucket),
Key: content.Key,
})
if deleteErr != nil {
return false, deleteErr
}
}
return true, nil
}

0 comments on commit bcfeab7

Please sign in to comment.