Skip to content

Commit

Permalink
fix: improve import error messages for several resources (#691)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrparkers authored May 13, 2022
1 parent 87447fe commit e3153e2
Show file tree
Hide file tree
Showing 19 changed files with 257 additions and 23 deletions.
15 changes: 14 additions & 1 deletion provider/resource_keycloak_authentication_execution.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package provider

import (
"context"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"strings"
Expand Down Expand Up @@ -130,16 +131,28 @@ func resourceKeycloakAuthenticationExecutionDelete(ctx context.Context, data *sc
return diag.FromErr(keycloakClient.DeleteAuthenticationExecution(ctx, realmId, id))
}

func resourceKeycloakAuthenticationExecutionImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
func resourceKeycloakAuthenticationExecutionImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")

if len(parts) != 3 {
return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{parentFlowAlias}}/{{authenticationExecutionId}}")
}

_, err := keycloakClient.GetAuthenticationExecution(ctx, parts[0], parts[1], parts[2])
if err != nil {
return nil, err
}

d.Set("realm_id", parts[0])
d.Set("parent_flow_alias", parts[1])
d.SetId(parts[2])

diagnostics := resourceKeycloakAuthenticationExecutionRead(ctx, d, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

return []*schema.ResourceData{d}, nil
}
19 changes: 18 additions & 1 deletion provider/resource_keycloak_authentication_execution_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package provider

import (
"context"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"strings"
Expand Down Expand Up @@ -124,16 +125,32 @@ func resourceKeycloakAuthenticationExecutionConfigDelete(ctx context.Context, da
return diag.FromErr(keycloakClient.DeleteAuthenticationExecutionConfig(ctx, config))
}

func resourceKeycloakAuthenticationExecutionConfigImport(_ context.Context, data *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
func resourceKeycloakAuthenticationExecutionConfigImport(ctx context.Context, data *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(data.Id(), "/")

if len(parts) != 3 || parts[0] == "" || parts[1] == "" || parts[2] == "" {
return nil, fmt.Errorf("invalid import. Supported import formats: {{realm}}/{{authenticationExecutionId}}/{{authenticationExecutionConfigId}}")
}

err := keycloakClient.GetAuthenticationExecutionConfig(ctx, &keycloak.AuthenticationExecutionConfig{
RealmId: parts[0],
ExecutionId: parts[1],
Id: parts[2],
})
if err != nil {
return nil, err
}

data.Set("realm_id", parts[0])
data.Set("execution_id", parts[1])
data.SetId(parts[2])

diagnostics := resourceKeycloakAuthenticationExecutionConfigRead(ctx, data, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

return []*schema.ResourceData{data}, nil
}
15 changes: 14 additions & 1 deletion provider/resource_keycloak_authentication_flow.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package provider

import (
"context"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand Down Expand Up @@ -122,15 +123,27 @@ func resourceKeycloakAuthenticationFlowDelete(ctx context.Context, data *schema.
return diag.FromErr(keycloakClient.DeleteAuthenticationFlow(ctx, realmId, id))
}

func resourceKeycloakAuthenticationFlowImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
func resourceKeycloakAuthenticationFlowImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")

if len(parts) != 2 {
return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{authenticationFlowId}}")
}

_, err := keycloakClient.GetAuthenticationFlow(ctx, parts[0], parts[1])
if err != nil {
return nil, err
}

d.Set("realm_id", parts[0])
d.SetId(parts[1])

diagnostics := resourceKeycloakAuthenticationFlowRead(ctx, d, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

return []*schema.ResourceData{d}, nil
}
15 changes: 14 additions & 1 deletion provider/resource_keycloak_authentication_subflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package provider

import (
"context"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand Down Expand Up @@ -139,16 +140,28 @@ func resourceKeycloakAuthenticationSubFlowDelete(ctx context.Context, data *sche
return diag.FromErr(keycloakClient.DeleteAuthenticationSubFlow(ctx, realmId, parentFlowAlias, id))
}

func resourceKeycloakAuthenticationSubFlowImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
func resourceKeycloakAuthenticationSubFlowImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")

if len(parts) != 3 {
return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{parentFlowAlias}}/{{authenticationSubFlowId}}")
}

_, err := keycloakClient.GetAuthenticationSubFlow(ctx, parts[0], parts[1], parts[2])
if err != nil {
return nil, err
}

d.Set("realm_id", parts[0])
d.Set("parent_flow_alias", parts[1])
d.SetId(parts[2])

diagnostics := resourceKeycloakAuthenticationSubFlowRead(ctx, d, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

return []*schema.ResourceData{d}, nil
}
15 changes: 14 additions & 1 deletion provider/resource_keycloak_custom_user_federation.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package provider

import (
"context"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"strings"
Expand Down Expand Up @@ -220,15 +221,27 @@ func resourceKeycloakCustomUserFederationDelete(ctx context.Context, data *schem
return diag.FromErr(keycloakClient.DeleteCustomUserFederation(ctx, realmId, id))
}

func resourceKeycloakCustomUserFederationImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
func resourceKeycloakCustomUserFederationImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")

if len(parts) != 2 {
return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{userFederationId}}")
}

_, err := keycloakClient.GetCustomUserFederation(ctx, parts[0], parts[1])
if err != nil {
return nil, err
}

d.Set("realm_id", parts[0])
d.SetId(parts[1])

diagnostics := resourceKeycloakCustomUserFederationRead(ctx, d, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

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

import (
"context"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"strings"
Expand Down Expand Up @@ -194,16 +195,27 @@ func resourceKeycloakDefaultRolesDelete(ctx context.Context, data *schema.Resour
return nil
}

func resourceKeycloakDefaultRolesImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
parts := strings.Split(d.Id(), "/")
func resourceKeycloakDefaultRolesImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")
if len(parts) != 2 {
return nil, fmt.Errorf("Invalid import. Supported import format: {{realm}}/{{defaultRoleId}}.")
}

_, err := keycloakClient.GetDefaultRoles(ctx, parts[0], parts[1])
if err != nil {
return nil, err
}

d.Set("realm_id", parts[0])
d.SetId(parts[1])

diagnostics := resourceKeycloakDefaultRolesRead(ctx, d, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

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

Expand Down
18 changes: 16 additions & 2 deletions provider/resource_keycloak_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package provider

import (
"context"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"strings"
Expand Down Expand Up @@ -136,13 +137,26 @@ func resourceKeycloakGroupDelete(ctx context.Context, data *schema.ResourceData,
return diag.FromErr(keycloakClient.DeleteGroup(ctx, realmId, id))
}

func resourceKeycloakGroupImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
parts := strings.Split(d.Id(), "/")
func resourceKeycloakGroupImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")
if len(parts) != 2 {
return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{groupId}}")
}

_, err := keycloakClient.GetGroup(ctx, parts[0], parts[1])
if err != nil {
return nil, err
}

d.Set("realm_id", parts[0])
d.SetId(parts[1])

diagnostics := resourceKeycloakGroupRead(ctx, d, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

return []*schema.ResourceData{d}, nil
}
16 changes: 15 additions & 1 deletion provider/resource_keycloak_group_permissions.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package provider

import (
"context"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"strings"
Expand Down Expand Up @@ -176,15 +177,28 @@ func resourceKeycloakGroupPermissionsDelete(ctx context.Context, data *schema.Re
return diag.FromErr(keycloakClient.DisableGroupPermissions(ctx, realmId, groupId))
}

func resourceKeycloakGroupPermissionsImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
func resourceKeycloakGroupPermissionsImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")
if len(parts) != 2 {
return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{groupId}}")
}

_, err := keycloakClient.GetGroupPermissions(ctx, parts[0], parts[1])
if err != nil {
return nil, err
}

d.Set("realm_id", parts[0])
d.Set("group_id", parts[1])

d.SetId(groupPermissionsId(parts[0], parts[1]))

diagnostics := resourceKeycloakGroupPermissionsRead(ctx, d, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

return []*schema.ResourceData{d}, nil
}
12 changes: 11 additions & 1 deletion provider/resource_keycloak_group_roles.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,15 +212,25 @@ func resourceKeycloakGroupRolesDelete(ctx context.Context, data *schema.Resource
}

func resourceKeycloakGroupRolesImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
parts := strings.Split(d.Id(), "/")
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")
if len(parts) != 2 {
return nil, fmt.Errorf("Invalid import. Supported import format: {{realm}}/{{groupId}}.")
}

realmId := parts[0]
groupId := parts[1]

if _, err := keycloakClient.GetGroup(ctx, realmId, groupId); err != nil {
return nil, err
}

_, err := keycloakClient.GetGroupRoleMappings(ctx, realmId, groupId)
if err != nil {
return nil, err
}

d.Set("realm_id", realmId)
d.Set("group_id", groupId)
d.Set("exhaustive", true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package provider
import (
"context"
"encoding/hex"
"errors"
"fmt"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
Expand Down Expand Up @@ -288,14 +289,27 @@ func resourceKeycloakIdentityProviderTokenExchangeScopePermissionDelete(ctx cont
return diag.FromErr(keycloakClient.DisableIdentityProviderPermissions(ctx, realmId, providerAlias))
}

func resourceKeycloakIdentityProviderTokenExchangeScopePermissionImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) {
parts := strings.Split(d.Id(), "/")
func resourceKeycloakIdentityProviderTokenExchangeScopePermissionImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
keycloakClient := meta.(*keycloak.KeycloakClient)

parts := strings.Split(d.Id(), "/")
if len(parts) != 2 {
return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{providerAlias}}")
}

_, err := keycloakClient.GetIdentityProviderPermissions(ctx, parts[0], parts[1])
if err != nil {
return nil, err
}

d.SetId(parts[0] + "/" + parts[1])
d.Set("realm_id", parts[0])
d.Set("provider_alias", parts[1])

diagnostics := resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead(ctx, d, meta)
if diagnostics.HasError() {
return nil, errors.New(diagnostics[0].Summary)
}

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

0 comments on commit e3153e2

Please sign in to comment.