Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 26 additions & 28 deletions stackit/internal/services/authorization/authorization_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ import (
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/stackitcloud/stackit-sdk-go/core/utils"
"github.com/stackitcloud/stackit-sdk-go/services/authorization"
"github.com/stackitcloud/stackit-sdk-go/services/resourcemanager"
"github.com/stackitcloud/stackit-sdk-go/services/resourcemanager/wait"
authorization "github.com/stackitcloud/stackit-sdk-go/services/authorization/v2api"
resourcemanager "github.com/stackitcloud/stackit-sdk-go/services/resourcemanager/v0api"
"github.com/stackitcloud/stackit-sdk-go/services/resourcemanager/v0api/wait"

"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
)
Expand Down Expand Up @@ -803,27 +803,26 @@ func testAccCheckResourceManagerProjectsDestroy(s *terraform.State) error {
}
containerParentId := testutil.OrganizationId

projectsResp, err := client.ListProjects(ctx).ContainerParentId(containerParentId).Execute()
projectsResp, err := client.DefaultAPI.ListProjects(ctx).ContainerParentId(containerParentId).Execute()
if err != nil {
return fmt.Errorf("getting projectsResp: %w", err)
}

items := *projectsResp.Items
for i := range items {
if *items[i].LifecycleState == resourcemanager.LIFECYCLESTATE_DELETING {
for _, item := range projectsResp.Items {
if item.LifecycleState == resourcemanager.LIFECYCLESTATE_DELETING {
continue
}
if !utils.Contains(projectsToDestroy, *items[i].ContainerId) {
if !utils.Contains(projectsToDestroy, item.ContainerId) {
continue
}

err := client.DeleteProjectExecute(ctx, *items[i].ContainerId)
err := client.DefaultAPI.DeleteProject(ctx, item.ContainerId).Execute()
if err != nil {
return fmt.Errorf("destroying project %s during CheckDestroy: %w", *items[i].ContainerId, err)
return fmt.Errorf("destroying project %s during CheckDestroy: %w", item.ContainerId, err)
}
_, err = wait.DeleteProjectWaitHandler(ctx, client, *items[i].ContainerId).WaitWithContext(ctx)
_, err = wait.DeleteProjectWaitHandler(ctx, client.DefaultAPI, item.ContainerId).WaitWithContext(ctx)
if err != nil {
return fmt.Errorf("destroying project %s during CheckDestroy: waiting for deletion %w", *items[i].ContainerId, err)
return fmt.Errorf("destroying project %s during CheckDestroy: waiting for deletion %w", item.ContainerId, err)
}
}
return nil
Expand Down Expand Up @@ -851,20 +850,19 @@ func testAccCheckResourceManagerFoldersDestroy(s *terraform.State) error {
}
containerParentId := testutil.OrganizationId

foldersResponse, err := client.ListFolders(ctx).ContainerParentId(containerParentId).Execute()
foldersResponse, err := client.DefaultAPI.ListFolders(ctx).ContainerParentId(containerParentId).Execute()
if err != nil {
return fmt.Errorf("getting foldersResponse: %w", err)
}

items := *foldersResponse.Items
for i := range items {
if !utils.Contains(foldersToDestroy, *items[i].ContainerId) {
for _, item := range foldersResponse.Items {
if !utils.Contains(foldersToDestroy, item.ContainerId) {
continue
}

err := client.DeleteFolder(ctx, *items[i].ContainerId).Execute()
err := client.DefaultAPI.DeleteFolder(ctx, item.ContainerId).Execute()
if err != nil {
return fmt.Errorf("destroying folder %s during CheckDestroy: %w", *items[i].ContainerId, err)
return fmt.Errorf("destroying folder %s during CheckDestroy: %w", item.ContainerId, err)
}
}
return nil
Expand All @@ -888,8 +886,8 @@ func testAccCheckOrganizationRoleAssignmentDestroy(s *terraform.State) error {
orgRoleAssignmentsToDestroy = append(
orgRoleAssignmentsToDestroy,
authorization.Member{
Role: new(terraformId[1]),
Subject: new(terraformId[2]),
Role: terraformId[1],
Subject: terraformId[2],
},
)
}
Expand All @@ -900,12 +898,12 @@ func testAccCheckOrganizationRoleAssignmentDestroy(s *terraform.State) error {
containerParentId := testutil.OrganizationId

payload := authorization.RemoveMembersPayload{
ResourceType: new("organization"),
Members: &orgRoleAssignmentsToDestroy,
ResourceType: "organization",
Members: orgRoleAssignmentsToDestroy,
}

// Ignore error. If this request errors the org role assignment has been successfully deleted by terraform itself.
_, _ = client.RemoveMembers(ctx, containerParentId).RemoveMembersPayload(payload).Execute()
_, _ = client.DefaultAPI.RemoveMembers(ctx, containerParentId).RemoveMembersPayload(payload).Execute()
return nil
}

Expand All @@ -928,16 +926,16 @@ func testAccCheckServiceAccountRoleAssignmentDestroy(s *terraform.State) error {

resourceId := terraformId[0]
payload := authorization.RemoveMembersPayload{
ResourceType: new("service-account"),
Members: &[]authorization.Member{
ResourceType: "service-account",
Members: []authorization.Member{
{
Role: new(terraformId[1]),
Subject: new(terraformId[2]),
Role: terraformId[1],
Subject: terraformId[2],
},
},
}

_, err = client.RemoveMembers(ctx, resourceId).RemoveMembersPayload(payload).Execute()
_, err = client.DefaultAPI.RemoveMembers(ctx, resourceId).RemoveMembersPayload(payload).Execute()
if err != nil && !strings.Contains(err.Error(), "400") {
return fmt.Errorf("destroying assignment %s: %w", rs.Primary.ID, err)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
"github.com/stackitcloud/stackit-sdk-go/services/authorization"
authorization "github.com/stackitcloud/stackit-sdk-go/services/authorization/v2api"

"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
Expand Down Expand Up @@ -132,7 +132,7 @@ func (d *customRoleDataSource) Read(ctx context.Context, req datasource.ReadRequ
ctx = tflog.SetField(ctx, "resource_id", resourceId)
ctx = tflog.SetField(ctx, "role_id", roleId)

roleResp, err := d.client.GetRole(ctx, d.resourceType, resourceId, roleId).Execute()
roleResp, err := d.client.DefaultAPI.GetRole(ctx, d.resourceType, resourceId, roleId).Execute()
if err != nil {
var oapiErr *oapierror.GenericOpenAPIError

Expand Down
44 changes: 20 additions & 24 deletions stackit/internal/services/authorization/customrole/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
"github.com/stackitcloud/stackit-sdk-go/services/authorization"
authorization "github.com/stackitcloud/stackit-sdk-go/services/authorization/v2api"

"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
Expand Down Expand Up @@ -177,7 +177,7 @@ func (r *customRoleResource) Create(ctx context.Context, req resource.CreateRequ
return
}

createResp, err := r.client.AddRole(ctx, r.resourceType, model.ResourceId.ValueString()).AddRolePayload(*payload).Execute()
createResp, err := r.client.DefaultAPI.AddRole(ctx, r.resourceType, model.ResourceId.ValueString()).AddRolePayload(*payload).Execute()
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating custom role", fmt.Sprintf("Calling API: %v", err))
return
Expand Down Expand Up @@ -222,7 +222,7 @@ func (r *customRoleResource) Read(ctx context.Context, req resource.ReadRequest,
return
}

roleResp, err := r.client.GetRoleExecute(ctx, r.resourceType, model.ResourceId.ValueString(), roleId)
roleResp, err := r.client.DefaultAPI.GetRole(ctx, r.resourceType, model.ResourceId.ValueString(), roleId).Execute()
if err != nil {
var oapiErr *oapierror.GenericOpenAPIError

Expand Down Expand Up @@ -273,7 +273,7 @@ func (r *customRoleResource) Update(ctx context.Context, req resource.UpdateRequ
}

// Update existing custom role
roleResp, err := r.client.UpdateRole(ctx, r.resourceType, model.ResourceId.ValueString(), model.RoleId.ValueString()).UpdateRolePayload(*payload).Execute()
roleResp, err := r.client.DefaultAPI.UpdateRole(ctx, r.resourceType, model.ResourceId.ValueString(), model.RoleId.ValueString()).UpdateRolePayload(*payload).Execute()
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating custom role", fmt.Sprintf("Calling API: %v", err))
return
Expand Down Expand Up @@ -311,7 +311,7 @@ func (r *customRoleResource) Delete(ctx context.Context, req resource.DeleteRequ

ctx = r.annotateLogger(ctx, &model)

_, err := r.client.DeleteRoleExecute(ctx, r.resourceType, model.ResourceId.ValueString(), model.RoleId.ValueString())
_, err := r.client.DefaultAPI.DeleteRole(ctx, r.resourceType, model.ResourceId.ValueString(), model.RoleId.ValueString()).Execute()
if err != nil {
var oapiErr *oapierror.GenericOpenAPIError
if errors.As(err, &oapiErr) && oapiErr.StatusCode == http.StatusNotFound {
Expand Down Expand Up @@ -351,10 +351,6 @@ func mapGetCustomRoleResponse(ctx context.Context, resp *authorization.GetRoleRe
return fmt.Errorf("response input is nil")
}

if resp.Role == nil {
return fmt.Errorf("response role is nil")
}

if resp.Role.Id == nil {
return fmt.Errorf("response role id is nil")
}
Expand All @@ -372,21 +368,21 @@ func mapGetCustomRoleResponse(ctx context.Context, resp *authorization.GetRoleRe
return err
}

model.Id = utils.BuildInternalTerraformId(*resp.ResourceId, *resp.Role.Id)
model.ResourceId = types.StringPointerValue(resp.ResourceId)
model.Id = utils.BuildInternalTerraformId(resp.ResourceId, *resp.Role.Id)
model.ResourceId = types.StringValue(resp.ResourceId)
model.RoleId = types.StringPointerValue(resp.Role.Id)
model.Name = types.StringPointerValue(resp.Role.Name)
model.Description = types.StringPointerValue(resp.Role.Description)
model.Name = types.StringValue(resp.Role.Name)
model.Description = types.StringValue(resp.Role.Description)

if len(*resp.Role.Permissions) == 0 {
if len(resp.Role.Permissions) == 0 {
model.Permissions = types.ListNull(types.StringType)
return nil
}

var respPermissions []string
for _, p := range *resp.Role.Permissions {
for _, p := range resp.Role.Permissions {
if name, ok := p.GetNameOk(); ok {
respPermissions = append(respPermissions, name)
respPermissions = append(respPermissions, *name)
}
}

Expand Down Expand Up @@ -436,13 +432,13 @@ func toCreatePayload(ctx context.Context, model *Model) (*authorization.AddRoleP
return nil, fmt.Errorf("converting permission list entry to string: %w", err)
}

permissions = append(permissions, authorization.PermissionRequest{Name: &permission})
permissions = append(permissions, authorization.PermissionRequest{Name: permission})
}

return &authorization.AddRolePayload{
Name: model.Name.ValueStringPointer(),
Description: model.Description.ValueStringPointer(),
Permissions: &permissions,
Name: model.Name.ValueString(),
Description: model.Description.ValueString(),
Permissions: permissions,
}, nil
}

Expand All @@ -463,13 +459,13 @@ func toUpdatePayload(ctx context.Context, model *Model) (*authorization.UpdateRo
return nil, fmt.Errorf("converting permission list entry to string: %w", err)
}

permissions = append(permissions, authorization.PermissionRequest{Name: &permission})
permissions = append(permissions, authorization.PermissionRequest{Name: permission})
}

return &authorization.UpdateRolePayload{
Name: model.Name.ValueStringPointer(),
Description: model.Description.ValueStringPointer(),
Permissions: &permissions,
Name: model.Name.ValueString(),
Description: model.Description.ValueString(),
Permissions: permissions,
}, nil
}

Expand Down
Loading
Loading