func NewCloudLoggingDatasource()

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
}