mirror of
https://github.com/turbot/steampipe.git
synced 2026-02-14 01:00:10 -05:00
76 lines
2.1 KiB
Go
76 lines
2.1 KiB
Go
package cloud
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
steampipecloud "github.com/turbot/steampipe-cloud-sdk-go"
|
|
"github.com/turbot/steampipe/pkg/steampipeconfig"
|
|
"github.com/turbot/steampipe/sperr"
|
|
)
|
|
|
|
func GetCloudMetadata(ctx context.Context, workspaceDatabaseString, token string) (*steampipeconfig.CloudMetadata, error) {
|
|
client := newSteampipeCloudClient(token)
|
|
|
|
parts := strings.Split(workspaceDatabaseString, "/")
|
|
if len(parts) != 2 {
|
|
return nil, sperr.New("invalid 'workspace-database' argument '%s' - must be either a connection string or in format <identity>/<workspace>", workspaceDatabaseString)
|
|
}
|
|
identityHandle := parts[0]
|
|
workspaceHandle := parts[1]
|
|
|
|
// get the identity
|
|
identity, _, err := client.Identities.Get(ctx, identityHandle).Execute()
|
|
if err != nil {
|
|
return nil, sperr.Wrap(err)
|
|
}
|
|
|
|
// get the workspace
|
|
var cloudWorkspace steampipecloud.Workspace
|
|
if identity.Type == "user" {
|
|
cloudWorkspace, _, err = client.UserWorkspaces.Get(ctx, identityHandle, workspaceHandle).Execute()
|
|
} else {
|
|
cloudWorkspace, _, err = client.OrgWorkspaces.Get(ctx, identityHandle, workspaceHandle).Execute()
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, sperr.Wrap(err)
|
|
}
|
|
|
|
workspaceHost := cloudWorkspace.GetHost()
|
|
databaseName := cloudWorkspace.GetDatabaseName()
|
|
|
|
actor, _, err := client.Actors.Get(ctx).Execute()
|
|
if err != nil {
|
|
return nil, sperr.Wrap(err)
|
|
}
|
|
|
|
password, _, err := client.Users.GetDBPassword(ctx, actor.GetHandle()).Execute()
|
|
if err != nil {
|
|
return nil, sperr.Wrap(err)
|
|
}
|
|
|
|
connectionString := fmt.Sprintf("postgresql://%s:%s@%s-%s.%s:9193/%s", actor.Handle, password.Password, identityHandle, workspaceHandle, workspaceHost, databaseName)
|
|
|
|
cloudMetadata := &steampipeconfig.CloudMetadata{
|
|
Actor: &steampipeconfig.ActorMetadata{
|
|
Id: actor.Id,
|
|
Handle: actor.Handle,
|
|
},
|
|
Identity: &steampipeconfig.IdentityMetadata{
|
|
Id: cloudWorkspace.IdentityId,
|
|
Type: identity.Type,
|
|
Handle: identityHandle,
|
|
},
|
|
WorkspaceDatabase: &steampipeconfig.WorkspaceMetadata{
|
|
Id: cloudWorkspace.Id,
|
|
Handle: cloudWorkspace.Handle,
|
|
},
|
|
|
|
ConnectionString: connectionString,
|
|
}
|
|
|
|
return cloudMetadata, nil
|
|
}
|