84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package s2is3
|
|
|
|
import (
|
|
"flag"
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
|
"github.com/aws/aws-sdk-go/aws/session"
|
|
"github.com/aws/aws-sdk-go/service/s3"
|
|
"k8s.io/klog"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
s3Region string
|
|
s3Endpoint string
|
|
s3DisableSSL bool
|
|
s3ForcePathStyle bool
|
|
s3AccessKeyID string
|
|
s3SecretAccessKey string
|
|
s3SessionToken string
|
|
s3Bucket string
|
|
)
|
|
var (
|
|
s2iS3 *s3.S3
|
|
s2iS3Session *session.Session
|
|
sessionInitMutex sync.Mutex
|
|
clientInitMutex sync.Mutex
|
|
)
|
|
|
|
func init() {
|
|
flag.StringVar(&s3Region, "s2i-s3-region", "us-east-1", "region of s2i s3")
|
|
flag.StringVar(&s3Endpoint, "s2i-s3-endpoint", "http://ks-minio.kubesphere-system.svc", "endpoint of s2i s3")
|
|
flag.StringVar(&s3AccessKeyID, "s2i-s3-access-key-id", "AKIAIOSFODNN7EXAMPLE", "access key of s2i s3")
|
|
flag.StringVar(&s3SecretAccessKey, "s2i-s3-secret-access-key", "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "secret access key of s2i s3")
|
|
flag.StringVar(&s3SessionToken, "s2i-s3-session-token", "", "session token of s2i s3")
|
|
flag.StringVar(&s3Bucket, "s2i-s3-bucket", "s2i-binaries", "bucket name of s2i s3")
|
|
flag.BoolVar(&s3DisableSSL, "s2i-s3-disable-SSL", true, "disable ssl")
|
|
flag.BoolVar(&s3ForcePathStyle, "s2i-s3-force-path-style", true, "force path style")
|
|
}
|
|
|
|
func Client() *s3.S3 {
|
|
if s2iS3 != nil {
|
|
return s2iS3
|
|
}
|
|
clientInitMutex.Lock()
|
|
defer clientInitMutex.Unlock()
|
|
if s2iS3Session == nil {
|
|
if sess := Session(); sess != nil {
|
|
klog.Error("failed to connect to s2i s3")
|
|
return nil
|
|
}
|
|
}
|
|
s2iS3 = s3.New(s2iS3Session)
|
|
return s2iS3
|
|
}
|
|
func Session() *session.Session {
|
|
if s2iS3Session != nil {
|
|
return s2iS3Session
|
|
}
|
|
sessionInitMutex.Lock()
|
|
defer sessionInitMutex.Unlock()
|
|
creds := credentials.NewStaticCredentials(
|
|
s3AccessKeyID, s3SecretAccessKey, s3SessionToken,
|
|
)
|
|
config := &aws.Config{
|
|
Region: aws.String(s3Region),
|
|
Endpoint: aws.String(s3Endpoint),
|
|
DisableSSL: aws.Bool(s3DisableSSL),
|
|
S3ForcePathStyle: aws.Bool(s3ForcePathStyle),
|
|
Credentials: creds,
|
|
}
|
|
sess, err := session.NewSession(config)
|
|
if err != nil {
|
|
klog.Errorf("failed to connect to s2i s3: %+v", err)
|
|
return nil
|
|
}
|
|
s2iS3Session = sess
|
|
return s2iS3Session
|
|
}
|
|
|
|
func Bucket() *string {
|
|
return aws.String(s3Bucket)
|
|
}
|