-
Notifications
You must be signed in to change notification settings - Fork 262
/
cloud_metadata.go
46 lines (38 loc) · 1.51 KB
/
cloud_metadata.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package initialisation
import (
"context"
"strings"
"github.com/spf13/viper"
"github.com/turbot/steampipe/pkg/cloud"
"github.com/turbot/steampipe/pkg/constants"
"github.com/turbot/steampipe/pkg/error_helpers"
"github.com/turbot/steampipe/pkg/steampipeconfig"
)
func getCloudMetadata(ctx context.Context) (*steampipeconfig.CloudMetadata, error) {
workspaceDatabase := viper.GetString(constants.ArgWorkspaceDatabase)
if workspaceDatabase == "local" {
// local database - nothing to do here
return nil, nil
}
connectionString := workspaceDatabase
var cloudMetadata *steampipeconfig.CloudMetadata
// so a backend was set - is it a connection string or a database name
workspaceDatabaseIsConnectionString := strings.HasPrefix(workspaceDatabase, "postgresql://") || strings.HasPrefix(workspaceDatabase, "postgres://")
if !workspaceDatabaseIsConnectionString {
// it must be a database name - verify the cloud token was provided
cloudToken := viper.GetString(constants.ArgCloudToken)
if cloudToken == "" {
return nil, error_helpers.MissingCloudTokenError
}
// so we have a database and a token - build the connection string and set it in viper
var err error
if cloudMetadata, err = cloud.GetCloudMetadata(ctx, workspaceDatabase, cloudToken); err != nil {
return nil, err
}
// read connection string out of cloudMetadata
connectionString = cloudMetadata.ConnectionString
}
// now set the connection string in viper
viper.Set(constants.ArgConnectionString, connectionString)
return cloudMetadata, nil
}