in pkg/plugin/plugin.go [81:124]
func NewCloudLoggingDatasource(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
var conf config
if err := json.Unmarshal(settings.JSONData, &conf); err != nil {
return nil, fmt.Errorf("unmarshal: %w", err)
}
if conf.AuthType == "" {
conf.AuthType = jwtAuthentication
}
var client_err error
var client *cloudlogging.Client
if conf.AuthType == jwtAuthentication {
privateKey, ok := settings.DecryptedSecureJSONData[privateKeyKey]
if !ok || privateKey == "" {
return nil, errMissingCredentials
}
serviceAccount, err := conf.toServiceAccountJSON(privateKey)
if err != nil {
return nil, fmt.Errorf("create credentials: %w", err)
}
if conf.UsingImpersonation {
client, client_err = cloudlogging.NewClientWithImpersonation(context.TODO(), serviceAccount, conf.ServiceAccountToImpersonate)
} else {
client, client_err = cloudlogging.NewClient(context.TODO(), serviceAccount)
}
} else {
if conf.UsingImpersonation {
client, client_err = cloudlogging.NewClientWithImpersonation(context.TODO(), nil, conf.ServiceAccountToImpersonate)
} else {
client, client_err = cloudlogging.NewClientWithGCE(context.TODO())
}
}
if client_err != nil {
return nil, client_err
}
return &CloudLoggingDatasource{
client: client,
}, nil
}