diff --git a/plugin/connection_config_schema.go b/plugin/connection_config_schema.go index 2bde1cc7..ee00da7e 100644 --- a/plugin/connection_config_schema.go +++ b/plugin/connection_config_schema.go @@ -2,6 +2,7 @@ package plugin import ( "fmt" + "github.com/hashicorp/hcl/v2/json" "log" "github.com/hashicorp/hcl/v2" @@ -140,15 +141,7 @@ func (c *ConnectionConfigSchema) parseConfigWithHclTags(config *proto.Connection filename := "" startPos := hcl.Pos{} - file, diags := hclsyntax.ParseConfig(configString, filename, startPos) - if diags.HasErrors() { - return nil, DiagsToError(fmt.Sprintf("failed to parse connection config for connection '%s'", config.Connection), diags) - } - _, body, diags := file.Body.PartialContent(&hcl.BodySchema{}) - if diags.HasErrors() { - return nil, DiagsToError(fmt.Sprintf("failed to parse connection config for connection '%s'", config.Connection), diags) - } - + body, diags := parseConfig(configString, filename, startPos) evalCtx := &hcl.EvalContext{ Variables: make(map[string]cty.Value), Functions: make(map[string]function.Function), @@ -162,3 +155,26 @@ func (c *ConnectionConfigSchema) parseConfigWithHclTags(config *proto.Connection // return the struct by value return helpers.DereferencePointer(configStruct), nil } + +func parseConfig(configString []byte, filename string, startPos hcl.Pos) (hcl.Body, hcl.Diagnostics) { + file, diags := hclsyntax.ParseConfig(configString, filename, startPos) + if diags.HasErrors() { + // try json + return parseJsonConfig(configString, filename) + + } + //_, body, diags := file.Body.PartialContent(&hcl.BodySchema{}) + //if diags.HasErrors() { + // return nil, diags + //} + return file.Body, nil + +} + +func parseJsonConfig(configString []byte, filename string) (hcl.Body, hcl.Diagnostics) { + file, diags := json.Parse(configString, filename) + if diags.HasErrors() { + return nil, diags + } + return file.Body, nil +} diff --git a/plugin/row_with_metadata.go b/plugin/row_with_metadata.go index 3e618bc5..3cb92c12 100644 --- a/plugin/row_with_metadata.go +++ b/plugin/row_with_metadata.go @@ -1,5 +1,7 @@ package plugin +import "github.com/turbot/steampipe-plugin-sdk/v5/version" + type hydrateMetadata struct { Type string `json:"type"` FuncName string `json:"function_name"` @@ -8,8 +10,14 @@ type hydrateMetadata struct { DelayMs int64 `json:"rate_limiter_delay_ms"` } +type SteampipeMetadata struct { + SdkVersion string `json:"sdk_version"` +} + type rowCtxData struct { - Connection string `json:"connection_name"` + Connection string `json:"connection_name"` + Steampipe SteampipeMetadata `json:"steampipe"` + Diagnostics *rowCtxDiagnostics `json:"diagnostics,omitempty"` } type rowCtxDiagnostics struct { @@ -20,6 +28,9 @@ func newRowCtxData(rd *rowData) *rowCtxData { d := rd.queryData res := &rowCtxData{ Connection: d.Connection.Name, + Steampipe: SteampipeMetadata{ + SdkVersion: version.String(), + }, } if loadDiagnosticsEnvVar() == DiagnosticsAll {