Skip to content

Commit

Permalink
Chore: refactor credentials and cost (#409)
Browse files Browse the repository at this point in the history
* Chore: refactor credentials and cost

* more refactoring
  • Loading branch information
TomerHeber committed Jun 6, 2022
1 parent 89e928a commit ada0b0f
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 76 deletions.
42 changes: 40 additions & 2 deletions env0/credentials.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,26 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

type CloudType string

const (
GCP_TYPE CloudType = "gcp"
AZURE_TYPE CloudType = "azure"
AWS_TYPE CloudType = "aws"
GCP_COST_TYPE CloudType = "google_cost"
AZURE_COST_TYPE CloudType = "azure_cost"
AWS_COST_TYPE CloudType = "aws_cost"
)

var credentialsTypeToPrefixList map[CloudType][]string = map[CloudType][]string{
GCP_TYPE: {string(client.GcpServiceAccountCredentialsType)},
AZURE_TYPE: {string(client.AzureServicePrincipalCredentialsType)},
AWS_TYPE: {string(client.AwsAssumedRoleCredentialsType), string(client.AwsAccessKeysCredentialsType)},
GCP_COST_TYPE: {string(client.GoogleCostCredentialsType)},
AZURE_COST_TYPE: {string(client.AzureCostCredentialsType)},
AWS_COST_TYPE: {string(client.AwsCostCredentialsType)},
}

func getCredentialsByName(name string, prefixList []string, meta interface{}) (client.Credentials, error) {
apiClient := meta.(client.ApiClientInterface)

Expand Down Expand Up @@ -77,13 +97,13 @@ func resourceCredentialsDelete(ctx context.Context, d *schema.ResourceData, meta
return nil
}

func resourceCredentialsRead(cloudType string) schema.ReadContextFunc {
func resourceCredentialsRead(cloudType CloudType) schema.ReadContextFunc {
return func(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
apiClient := meta.(client.ApiClientInterface)

credentials, err := apiClient.CloudCredentials(d.Id())
if err != nil {
return ResourceGetFailure(cloudType+" credentials", d, err)
return ResourceGetFailure(string(cloudType)+" credentials", d, err)
}

if err := writeResourceData(&credentials, d); err != nil {
Expand All @@ -93,3 +113,21 @@ func resourceCredentialsRead(cloudType string) schema.ReadContextFunc {
return nil
}
}

func resourceCredentialsImport(cloudType CloudType) schema.StateContextFunc {
return func(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
credentials, err := getCredentials(d.Id(), credentialsTypeToPrefixList[cloudType], meta)
if err != nil {
if _, ok := err.(*client.NotFoundError); ok {
return nil, fmt.Errorf(string(cloudType)+" credentials resource with id %v not found", d.Id())
}
return nil, err
}

if err := writeResourceData(&credentials, d); err != nil {
return nil, fmt.Errorf("schema resource data serialization failed: %v", err)
}

return []*schema.ResourceData{d}, nil
}
}
13 changes: 2 additions & 11 deletions env0/data_credentials.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

var credentialsTypeToPrefixList map[string][]string = map[string][]string{
"gcp": {string(client.GcpServiceAccountCredentialsType)},
"azure": {string(client.AzureServicePrincipalCredentialsType)},
"aws": {string(client.AwsAssumedRoleCredentialsType), string(client.AwsAccessKeysCredentialsType)},
"google_cost": {string(client.GoogleCostCredentialsType)},
"azure_cost": {string(client.AzureCostCredentialsType)},
"aws_cost": {string(client.AwsCostCredentialsType)},
}

func dataCredentials(cloudType string) *schema.Resource {
func dataCredentials(cloudType CloudType) *schema.Resource {
return &schema.Resource{
ReadContext: dataCredentialsRead(cloudType),

Expand All @@ -38,7 +29,7 @@ func dataCredentials(cloudType string) *schema.Resource {
}
}

func dataCredentialsRead(cloudType string) schema.ReadContextFunc {
func dataCredentialsRead(cloudType CloudType) schema.ReadContextFunc {
return func(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var err error
var credentials client.Credentials
Expand Down
12 changes: 6 additions & 6 deletions env0/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,12 @@ func Provider(version string) plugin.ProviderFunc {
"env0_template": dataTemplate(),
"env0_templates": dataTemplates(),
"env0_ssh_key": dataSshKey(),
"env0_aws_cost_credentials": dataCredentials("aws_cost"),
"env0_azure_cost_credentials": dataCredentials("azure_cost"),
"env0_google_cost_credentials": dataCredentials("google_cost"),
"env0_aws_credentials": dataCredentials("aws"),
"env0_gcp_credentials": dataCredentials("gcp"),
"env0_azure_credentials": dataCredentials("azure"),
"env0_aws_cost_credentials": dataCredentials(AWS_COST_TYPE),
"env0_azure_cost_credentials": dataCredentials(AZURE_COST_TYPE),
"env0_google_cost_credentials": dataCredentials(GCP_COST_TYPE),
"env0_aws_credentials": dataCredentials(AWS_TYPE),
"env0_gcp_credentials": dataCredentials(GCP_TYPE),
"env0_azure_credentials": dataCredentials(AZURE_TYPE),
"env0_team": dataTeam(),
"env0_teams": dataTeams(),
"env0_environment": dataEnvironment(),
Expand Down
21 changes: 2 additions & 19 deletions env0/resource_aws_credentials.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package env0

import (
"context"
"fmt"

"github.com/env0/terraform-provider-env0/client"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
Expand All @@ -12,10 +11,10 @@ import (
func resourceAwsCredentials() *schema.Resource {
return &schema.Resource{
CreateContext: resourceAwsCredentialsCreate,
ReadContext: resourceCredentialsRead("aws"),
ReadContext: resourceCredentialsRead(AWS_TYPE),
DeleteContext: resourceCredentialsDelete,

Importer: &schema.ResourceImporter{StateContext: resourceAwsCredentialsImport},
Importer: &schema.ResourceImporter{StateContext: resourceCredentialsImport(AWS_TYPE)},

Schema: map[string]*schema.Schema{
"name": {
Expand Down Expand Up @@ -98,19 +97,3 @@ func resourceAwsCredentialsCreate(ctx context.Context, d *schema.ResourceData, m

return nil
}

func resourceAwsCredentialsImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
credentials, err := getCredentials(d.Id(), []string{"AWS_"}, meta)
if err != nil {
if _, ok := err.(*client.NotFoundError); ok {
return nil, fmt.Errorf("aws credentials resource with id %v not found", d.Id())
}
return nil, err
}

if err := writeResourceData(&credentials, d); err != nil {
return nil, fmt.Errorf("schema resource data serialization failed: %v", err)
}

return []*schema.ResourceData{d}, nil
}
21 changes: 2 additions & 19 deletions env0/resource_azure_credentials.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package env0

import (
"context"
"fmt"

"github.com/env0/terraform-provider-env0/client"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
Expand All @@ -12,10 +11,10 @@ import (
func resourceAzureCredentials() *schema.Resource {
return &schema.Resource{
CreateContext: resourceAzureCredentialsCreate,
ReadContext: resourceCredentialsRead("azure"),
ReadContext: resourceCredentialsRead(AZURE_TYPE),
DeleteContext: resourceCredentialsDelete,

Importer: &schema.ResourceImporter{StateContext: resourceAzureCredentialsImport},
Importer: &schema.ResourceImporter{StateContext: resourceCredentialsImport(AZURE_TYPE)},

Schema: map[string]*schema.Schema{
"name": {
Expand Down Expand Up @@ -78,19 +77,3 @@ func resourceAzureCredentialsCreate(ctx context.Context, d *schema.ResourceData,

return nil
}

func resourceAzureCredentialsImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
credentials, err := getCredentials(d.Id(), []string{"AZURE_"}, meta)
if err != nil {
if _, ok := err.(*client.NotFoundError); ok {
return nil, fmt.Errorf("azure credentials resource with id %v not found", d.Id())
}
return nil, err
}

if err := writeResourceData(&credentials, d); err != nil {
return nil, fmt.Errorf("schema resource data serialization failed: %v", err)
}

return []*schema.ResourceData{d}, nil
}
21 changes: 2 additions & 19 deletions env0/resource_gcp_credentials.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package env0

import (
"context"
"fmt"

"github.com/env0/terraform-provider-env0/client"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
Expand All @@ -12,10 +11,10 @@ import (
func resourceGcpCredentials() *schema.Resource {
return &schema.Resource{
CreateContext: resourceGcpCredentialsCreate,
ReadContext: resourceCredentialsRead("gcp"),
ReadContext: resourceCredentialsRead(GCP_TYPE),
DeleteContext: resourceCredentialsDelete,

Importer: &schema.ResourceImporter{StateContext: resourceGcpCredentialsImport},
Importer: &schema.ResourceImporter{StateContext: resourceCredentialsImport(GCP_TYPE)},

Schema: map[string]*schema.Schema{
"name": {
Expand Down Expand Up @@ -67,19 +66,3 @@ func resourceGcpCredentialsCreate(ctx context.Context, d *schema.ResourceData, m

return nil
}

func resourceGcpCredentialsImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
credentials, err := getCredentials(d.Id(), []string{"GCP_"}, meta)
if err != nil {
if _, ok := err.(*client.NotFoundError); ok {
return nil, fmt.Errorf("gcp credentials resource with id %v not found", d.Id())
}
return nil, err
}

if err := writeResourceData(&credentials, d); err != nil {
return nil, fmt.Errorf("schema resource data serialization failed: %v", err)
}

return []*schema.ResourceData{d}, nil
}

0 comments on commit ada0b0f

Please sign in to comment.