Skip to content

Commit

Permalink
feat: eks cross role user resource
Browse files Browse the repository at this point in the history
  • Loading branch information
aldor007 committed Jul 13, 2023
1 parent 7cbb0db commit 737286a
Show file tree
Hide file tree
Showing 13 changed files with 580 additions and 8 deletions.
3 changes: 2 additions & 1 deletion castai/data_source_eks_cluster_userarn.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ const (

func dataSourceEKSClusterUserARN() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceCastaiEKSUserARN,
ReadContext: dataSourceCastaiEKSUserARN,
DeprecationMessage: `Use castai_eks_user_arn resource instead`,
Schema: map[string]*schema.Schema{
EKSClusterUserARNFieldClusterID: {
Type: schema.TypeString,
Expand Down
5 changes: 4 additions & 1 deletion castai/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,15 @@ func Provider(version string) *schema.Provider {
"castai_rebalancing_job": resourceRebalancingJob(),
"castai_node_configuration": resourceNodeConfiguration(),
"castai_node_configuration_default": resourceNodeConfigurationDefault(),
"castai_eks_user_arn": resourceEKSClusterUserARN(),
},

DataSourcesMap: map[string]*schema.Resource{
"castai_eks_settings": dataSourceEKSSettings(),
"castai_eks_user_arn": dataSourceEKSClusterUserARN(),
"castai_gke_user_policies": dataSourceGKEPolicies(),

// TODO: remove in next major release
"castai_eks_user_arn": dataSourceEKSClusterUserARN(),
},

ConfigureContextFunc: providerConfigure(version),
Expand Down
98 changes: 98 additions & 0 deletions castai/resource_eks_cluster_userarn.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package castai

import (
"context"
"fmt"
"log"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"

"github.com/castai/terraform-provider-castai/castai/sdk"
)

func resourceEKSClusterUserARN() *schema.Resource {
return &schema.Resource{
ReadContext: resourceEKSUserARNRead,
CreateContext: resourceEKSUserARNCreate,
DeleteContext: resourceEKSUserARNDelete,
Schema: map[string]*schema.Schema{
EKSClusterUserARNFieldClusterID: {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateDiagFunc: validation.ToDiagFunc(validation.StringIsNotWhiteSpace),
},
EKSClusterUserARNFieldARN: {
Type: schema.TypeString,
Computed: true,
},
},
}
}

func resourceEKSUserARNRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*ProviderConfig).api

clusterID := data.Get(EKSClusterUserARNFieldClusterID).(string)

resp, err := client.ExternalClusterAPIGetAssumeRolePrincipalWithResponse(ctx, clusterID)
if checkErr := sdk.CheckOKResponse(resp, err); checkErr != nil {
return diag.FromErr(checkErr)
}

arn := *resp.JSON200.Arn

data.SetId(arn)
if err := data.Set(EKSClusterUserARNFieldARN, arn); err != nil {
return diag.FromErr(fmt.Errorf("setting user arn: %w", err))
}

return nil
}

func resourceEKSUserARNCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
if err := resourceEKSUserARNRead(ctx, data, meta); err != nil {
return err
}

arn, ok := data.Get(EKSClusterUserARNFieldARN).(string)
if ok && arn != "" {
log.Println("Using created arn for cross role user")
return nil
}

client := meta.(*ProviderConfig).api

clusterID := data.Get(EKSClusterUserARNFieldClusterID).(string)

resp, err := client.ExternalClusterAPICreateAssumeRolePrincipalWithResponse(ctx, clusterID)
if checkErr := sdk.CheckOKResponse(resp, err); checkErr != nil {
return diag.FromErr(checkErr)
}

arn = *resp.JSON200.Arn

data.SetId(arn)
if err := data.Set(EKSClusterUserARNFieldARN, arn); err != nil {
return diag.FromErr(fmt.Errorf("setting user arn: %w", err))
}

return nil
}

func resourceEKSUserARNDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*ProviderConfig).api

clusterID := data.Get(EKSClusterUserARNFieldClusterID).(string)

resp, err := client.ExternalClusterAPIDeleteAssumeRolePrincipalWithResponse(ctx, clusterID)
if checkErr := sdk.CheckOKResponse(resp, err); checkErr != nil {
return diag.FromErr(checkErr)
}

data.SetId("")

return nil
}
13 changes: 13 additions & 0 deletions castai/sdk/api.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 737286a

Please sign in to comment.