mirror of
https://github.com/turbot/steampipe.git
synced 2026-02-16 16:00:11 -05:00
63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
package parse
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/hashicorp/hcl/v2"
|
|
"github.com/turbot/steampipe/pkg/steampipeconfig/modconfig"
|
|
"github.com/zclconf/go-cty/cty"
|
|
)
|
|
|
|
type WorkspaceProfileParseContext struct {
|
|
ParseContext
|
|
workspaceProfiles map[string]*modconfig.WorkspaceProfile
|
|
valueMap map[string]cty.Value
|
|
}
|
|
|
|
func NewWorkspaceProfileParseContext(rootEvalPath string) *WorkspaceProfileParseContext {
|
|
parseContext := NewParseContext(rootEvalPath)
|
|
// TODO uncomment once https://github.com/turbot/steampipe/issues/2640 is done
|
|
//parseContext.BlockTypes = []string{modconfig.BlockTypeWorkspaceProfile}
|
|
c := &WorkspaceProfileParseContext{
|
|
ParseContext: parseContext,
|
|
workspaceProfiles: make(map[string]*modconfig.WorkspaceProfile),
|
|
valueMap: make(map[string]cty.Value),
|
|
}
|
|
|
|
c.buildEvalContext()
|
|
|
|
return c
|
|
}
|
|
|
|
// AddResource stores this resource as a variable to be added to the eval context. It alse
|
|
func (c *WorkspaceProfileParseContext) AddResource(workspaceProfile *modconfig.WorkspaceProfile) hcl.Diagnostics {
|
|
ctyVal, err := workspaceProfile.CtyValue()
|
|
if err != nil {
|
|
return hcl.Diagnostics{&hcl.Diagnostic{
|
|
Severity: hcl.DiagError,
|
|
Summary: fmt.Sprintf("failed to convert workspaceProfile '%s' to its cty value", workspaceProfile.ProfileName),
|
|
Detail: err.Error(),
|
|
Subject: &workspaceProfile.DeclRange,
|
|
}}
|
|
}
|
|
|
|
c.workspaceProfiles[workspaceProfile.ProfileName] = workspaceProfile
|
|
c.valueMap[workspaceProfile.ProfileName] = ctyVal
|
|
|
|
// remove this resource from unparsed blocks
|
|
delete(c.UnresolvedBlocks, workspaceProfile.ProfileName)
|
|
|
|
c.buildEvalContext()
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *WorkspaceProfileParseContext) buildEvalContext() {
|
|
// rebuild the eval context
|
|
// build a map with a single key - workspace
|
|
vars := map[string]cty.Value{
|
|
"workspace": cty.ObjectVal(c.valueMap),
|
|
}
|
|
c.ParseContext.buildEvalContext(vars)
|
|
|
|
}
|