Skip to content

Commit

Permalink
Update kanctl to create azure profile (#5762)
Browse files Browse the repository at this point in the history
* Update kanctl to create azure profile

* CamelCase for flags
  • Loading branch information
SupriyaKasten authored and Ilya Kislenko committed Jun 7, 2019
1 parent a2ff1c6 commit d733cec
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 42 deletions.
47 changes: 38 additions & 9 deletions pkg/kanctl/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,16 @@ import (
)

const (
bucketFlag = "bucket"
endpointFlag = "endpoint"
prefixFlag = "prefix"
regionFlag = "region"
awsAccessKeyFlag = "access-key"
awsSecretKeyFlag = "secret-key"
gcpProjectIDFlag = "project-id"
gcpServiceKeyFlag = "service-key"
bucketFlag = "bucket"
endpointFlag = "endpoint"
prefixFlag = "prefix"
regionFlag = "region"
awsAccessKeyFlag = "access-key"
awsSecretKeyFlag = "secret-key"
gcpProjectIDFlag = "project-id"
gcpServiceKeyFlag = "service-key"
AzureStorageAccountFlag = "storage-account"
AzureStorageKeyFlag = "storage-key"

idField = "access_key_id"
secretField = "secret_access_key"
Expand Down Expand Up @@ -64,6 +66,7 @@ func newProfileCommand() *cobra.Command {

cmd.AddCommand(newS3CompliantProfileCmd())
cmd.AddCommand(newGCPProfileCmd())
cmd.AddCommand(newAzureProfileCmd())
cmd.PersistentFlags().StringP(bucketFlag, "b", "", "object store bucket name")
cmd.PersistentFlags().StringP(endpointFlag, "e", "", "endpoint URL of the object store bucket")
cmd.PersistentFlags().StringP(prefixFlag, "p", "", "prefix URL of the object store bucket")
Expand Down Expand Up @@ -108,6 +111,24 @@ func newGCPProfileCmd() *cobra.Command {
return cmd
}

func newAzureProfileCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "azure",
Short: "Create new azure profile",
Args: cobra.ExactArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
return createNewProfile(cmd, args)
},
}

cmd.Flags().StringP(AzureStorageAccountFlag, "a", "", "Storage account name of the azure storage")
cmd.Flags().StringP(AzureStorageKeyFlag, "s", "", "Storage account key of the azure storage")

cmd.MarkFlagRequired(AzureStorageAccountFlag)
cmd.MarkFlagRequired(AzureStorageKeyFlag)
return cmd
}

func createNewProfile(cmd *cobra.Command, args []string) error {
if len(args) > 0 {
return newArgsLengthError("expected 0 args. Got %#v", args)
Expand Down Expand Up @@ -175,6 +196,9 @@ func getLocationParams(cmd *cobra.Command) (*locationParams, error) {
case "gcp":
lType = v1alpha1.LocationTypeGCS
profileName = "gcp-profile-"
case "azure":
lType = v1alpha1.LocationTypeAzure
profileName = "azure-profile-"
default:
return nil, errors.New("Profile type not supported: " + cmd.Name())
}
Expand Down Expand Up @@ -239,8 +263,13 @@ func constructSecret(ctx context.Context, lP *locationParams, cmd *cobra.Command
data[idField] = projectID
data[secretField] = serviceKey
secretname = "gcp"
case v1alpha1.LocationTypeAzure:
storageAccount, _ := cmd.Flags().GetString(AzureStorageAccountFlag)
storageKey, _ := cmd.Flags().GetString(AzureStorageKeyFlag)
data[idField] = storageAccount
data[secretField] = storageKey
secretname = "azure"
}

return &v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf(secretFormat, secretname, randString(6)),
Expand Down
70 changes: 37 additions & 33 deletions pkg/validate/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,11 @@ func ProfileSchema(p *crv1alpha1.Profile) error {
}

func supported(t crv1alpha1.LocationType) bool {
return t == crv1alpha1.LocationTypeS3Compliant || t == crv1alpha1.LocationTypeGCS
return t == crv1alpha1.LocationTypeS3Compliant || t == crv1alpha1.LocationTypeGCS || t == crv1alpha1.LocationTypeAzure
}

func ProfileBucket(ctx context.Context, p *crv1alpha1.Profile, cli kubernetes.Interface) error {
var pType objectstore.ProviderType
bucketName := p.Location.Bucket

switch p.Location.Type {
Expand All @@ -157,25 +158,27 @@ func ProfileBucket(ctx context.Context, p *crv1alpha1.Profile, cli kubernetes.In
return errorf("Incorrect region for bucket. Expected '%s', Got '%s'", actualRegion, givenRegion)
}
}
return nil
case crv1alpha1.LocationTypeGCS:
pType := objectstore.ProviderTypeGCS
pc := objectstore.ProviderConfig{Type: pType}
secret, err := osSecretFromProfile(pType, p, cli)
if err != nil {
return err
}
provider, err := objectstore.NewProvider(ctx, pc, secret)
if err != nil {
return err
}
_, err = provider.GetBucket(ctx, bucketName)
if err != nil {
return err
}
pType = objectstore.ProviderTypeGCS
case crv1alpha1.LocationTypeAzure:
pType = objectstore.ProviderTypeAzure
default:
return errorf("unknown or unsupported location type '%s'", p.Location.Type)
}

pc := objectstore.ProviderConfig{Type: pType}
secret, err := osSecretFromProfile(pType, p, cli)
if err != nil {
return err
}
provider, err := objectstore.NewProvider(ctx, pc, secret)
if err != nil {
return err
}
_, err = provider.GetBucket(ctx, bucketName)
if err != nil {
return err
}
return nil
}

Expand All @@ -186,19 +189,17 @@ func ReadAccess(ctx context.Context, p *crv1alpha1.Profile, cli kubernetes.Inter
switch p.Location.Type {
case crv1alpha1.LocationTypeS3Compliant:
pType = objectstore.ProviderTypeS3
secret, err = osSecretFromProfile(pType, p, cli)
if err != nil {
return err
}
case crv1alpha1.LocationTypeGCS:
pType = objectstore.ProviderTypeGCS
secret, err = osSecretFromProfile(pType, p, cli)
if err != nil {
return err
}
case crv1alpha1.LocationTypeAzure:
pType = objectstore.ProviderTypeAzure
default:
return errorf("unknown or unsupported location type '%s'", p.Location.Type)
}
secret, err = osSecretFromProfile(pType, p, cli)
if err != nil {
return err
}
pc := objectstore.ProviderConfig{
Type: pType,
Endpoint: p.Location.Endpoint,
Expand All @@ -225,20 +226,17 @@ func WriteAccess(ctx context.Context, p *crv1alpha1.Profile, cli kubernetes.Inte
switch p.Location.Type {
case crv1alpha1.LocationTypeS3Compliant:
pType = objectstore.ProviderTypeS3
secret, err = osSecretFromProfile(pType, p, cli)
if err != nil {
return err
}
case crv1alpha1.LocationTypeGCS:
pType = objectstore.ProviderTypeGCS
secret, err = osSecretFromProfile(pType, p, cli)
if err != nil {
return err
}
case crv1alpha1.LocationTypeAzure:
pType = objectstore.ProviderTypeAzure
default:
return errorf("unknown or unsupported location type '%s'", p.Location.Type)
}

secret, err = osSecretFromProfile(pType, p, cli)
if err != nil {
return err
}
const objName = "sample"

pc := objectstore.ProviderConfig{
Expand Down Expand Up @@ -295,6 +293,12 @@ func osSecretFromProfile(pType objectstore.ProviderType, p *crv1alpha1.Profile,
ProjectID: string(key),
ServiceKey: string(value),
}
case objectstore.ProviderTypeAzure:
secret.Type = objectstore.SecretTypeAzStorageAccount
secret.Azure = &objectstore.SecretAzure{
StorageAccount: string(key),
StorageKey: string(value),
}
default:
return nil, errorf("unknown or unsupported provider type '%s'", pType)
}
Expand Down

0 comments on commit d733cec

Please sign in to comment.