Skip to content

Commit

Permalink
Merge pull request #91 from pingidentity/pingone_resource_scope
Browse files Browse the repository at this point in the history
pingone_resource_scope resource export
  • Loading branch information
wesleymccollam committed Mar 19, 2024
2 parents 32982ac + a227fb7 commit 1d0f9c5
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/connector/pingone/pingone_platform_connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ func (c *PingonePlatformConnector) Export(format, outputDir string, overwriteExp
ssoresources.Population(&c.clientInfo),
ssoresources.PopulationDefault(&c.clientInfo),
ssoresources.Resource(&c.clientInfo),
ssoresources.ResourceScope(&c.clientInfo),
ssoresources.SchemaAttribute(&c.clientInfo),
ssoresources.User(&c.clientInfo),
ssoresources.UserGroupAssignment(&c.clientInfo),
Expand Down
76 changes: 76 additions & 0 deletions internal/connector/pingone/resources/sso/pingone_resource_scope.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package sso

import (
"fmt"

"github.com/pingidentity/pingctl/internal/connector"
"github.com/pingidentity/pingctl/internal/connector/pingone/resources/common"
"github.com/pingidentity/pingctl/internal/logger"
)

// Verify that the resource satisfies the exportable resource interface
var (
_ connector.ExportableResource = &PingoneResourceScopeResource{}
)

type PingoneResourceScopeResource struct {
clientInfo *connector.SDKClientInfo
}

// Utility method for creating a PingoneResourceScopeResource
func ResourceScope(clientInfo *connector.SDKClientInfo) *PingoneResourceScopeResource {
return &PingoneResourceScopeResource{
clientInfo: clientInfo,
}
}

func (r *PingoneResourceScopeResource) ExportAll() (*[]connector.ImportBlock, error) {
l := logger.Get()

l.Debug().Msgf("Fetching all %s resources...", r.ResourceType())

apiExecuteFunc := r.clientInfo.ApiClient.ManagementAPIClient.ResourcesApi.ReadAllResources(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute
apiFunctionName := "ReadAllResources"

embedded, err := common.GetManagementEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType())
if err != nil {
return nil, err
}

importBlocks := []connector.ImportBlock{}

l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType())

for _, resource := range embedded.GetResources() {
resourceId, resourceIdOk := resource.GetIdOk()
resourceName, resourceNameOk := resource.GetNameOk()

if resourceIdOk && resourceNameOk {
apiResourceScopesExecuteFunc := r.clientInfo.ApiClient.ManagementAPIClient.ResourceScopesApi.ReadAllResourceScopes(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *resourceId).Execute
apiResourceScopesFunctionName := "ReadAllResourceScopes"

embeddedResourceScopes, err := common.GetManagementEmbedded(apiResourceScopesExecuteFunc, apiResourceScopesFunctionName, r.ResourceType())
if err != nil {
return nil, err
}

for _, scope := range embeddedResourceScopes.GetScopes() {
scopeId, scopeIdOk := scope.GetIdOk()
scopeName, scopeNameOk := scope.GetNameOk()
if scopeIdOk && scopeNameOk {
importBlocks = append(importBlocks, connector.ImportBlock{
ResourceType: r.ResourceType(),
ResourceName: fmt.Sprintf("%s_%s", *resourceName, *scopeName),
ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, *resourceId, *scopeId),
})
}
}
}
}

return &importBlocks, nil
}

func (r *PingoneResourceScopeResource) ResourceType() string {
return "pingone_resource_scope"
}

0 comments on commit 1d0f9c5

Please sign in to comment.