Skip to content

Commit

Permalink
EFS provider and initialization (#6070)
Browse files Browse the repository at this point in the history
* EFS initialization

* Remove unused test

* Reorder imports properly

* Change the error package

* Use configuration file from EBS package

* Wrap the unwrapped
  • Loading branch information
Hakan Memisoglu authored and Ilya Kislenko committed Jul 17, 2019
1 parent a17d148 commit 3522970
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 62 deletions.
5 changes: 3 additions & 2 deletions pkg/blockstorage/awsebs/awsebs.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func (s *ebsStorage) Type() blockstorage.Type {

// NewProvider returns a provider for the EBS storage type in the specified region
func NewProvider(config map[string]string) (blockstorage.Provider, error) {
awsConfig, region, err := getConfig(config)
awsConfig, region, err := GetConfig(config)
if err != nil {
return nil, err
}
Expand All @@ -63,7 +63,8 @@ func NewProvider(config map[string]string) (blockstorage.Provider, error) {
return &ebsStorage{ec2Cli: ec2Cli}, nil
}

func getConfig(config map[string]string) (*aws.Config, string, error) {
// GetConfig returns a configuration to establish AWS connection and the connected region name.
func GetConfig(config map[string]string) (*aws.Config, string, error) {
region, ok := config[ConfigRegion]
if !ok {
return nil, "", errors.New("region required for storage type EBS")
Expand Down
45 changes: 42 additions & 3 deletions pkg/blockstorage/awsefs/awsefs.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,58 @@ package awsefs

import (
"context"
"errors"

"github.com/aws/aws-sdk-go/aws"
awsarn "github.com/aws/aws-sdk-go/aws/arn"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/backup"
awsefs "github.com/aws/aws-sdk-go/service/efs"
"github.com/aws/aws-sdk-go/service/iam"
"github.com/pkg/errors"

"github.com/kanisterio/kanister/pkg/blockstorage"
"github.com/kanisterio/kanister/pkg/blockstorage/awsebs"
)

type efs struct {
*awsefs.EFS
*backup.Backup
accountID string
region string
}

var _ blockstorage.Provider = (*efs)(nil)

// NewEFSProvider retuns a blockstorage provider for AWS EFS.
func NewEFSProvider() blockstorage.Provider {
return &efs{}
func NewEFSProvider(config map[string]string) (blockstorage.Provider, error) {
awsConfig, region, err := awsebs.GetConfig(config)
if err != nil {
return nil, errors.Wrap(err, "Failed to get configuration for EFS")
}
s, err := session.NewSession(awsConfig)
if err != nil {
return nil, errors.Wrap(err, "Failed to create session for EFS")
}
iamCli := iam.New(s, aws.NewConfig().WithRegion(region))
user, err := iamCli.GetUser(&iam.GetUserInput{})
if err != nil {
return nil, errors.Wrap(err, "Failed to get user")
}
if user.User == nil {
return nil, errors.New("Failed to infer user from credentials")
}
userARN, err := awsarn.Parse(*user.User.Arn)
if err != nil {
return nil, err
}
accountID := userARN.AccountID
efsCli := awsefs.New(s, aws.NewConfig().WithRegion(region))
backupCli := backup.New(s, aws.NewConfig().WithRegion(region))
return &efs{
EFS: efsCli,
Backup: backupCli,
region: region,
accountID: accountID}, nil
}

func (e *efs) Type() blockstorage.Type {
Expand Down
57 changes: 0 additions & 57 deletions pkg/blockstorage/awsefs/awsefs_test.go

This file was deleted.

0 comments on commit 3522970

Please sign in to comment.