mirror of
https://github.com/turbot/steampipe.git
synced 2026-05-13 16:00:12 -04:00
Fix resolving base property from dependent mods. Closes #1578
This commit is contained in:
@@ -337,7 +337,7 @@ func (i *ModInstaller) getModRefSatisfyingConstraints(modVersion *modconfig.ModV
|
||||
// find a version which satisfies the version constraint
|
||||
var version = getVersionSatisfyingConstraint(modVersion.Constraint, availableVersions)
|
||||
if version == nil {
|
||||
return nil, fmt.Errorf("no version of %s found satisfying verison constraint: %s", modVersion.Name, modVersion.Constraint.Original)
|
||||
return nil, fmt.Errorf("no version of %s found satisfying version constraint: %s", modVersion.Name, modVersion.Constraint.Original)
|
||||
}
|
||||
|
||||
return NewResolvedModRef(modVersion, version)
|
||||
|
||||
@@ -77,6 +77,9 @@ func LoadMod(modPath string, parentRunCtx *parse.RunContext) (mod *modconfig.Mod
|
||||
// now we have loaded dependencies, set the current mod on the run context
|
||||
runCtx.CurrentMod = mod
|
||||
|
||||
// now populate the resource maps of the current mod using the dependency mods
|
||||
mod.ResourceMaps = runCtx.GetResourceMaps()
|
||||
|
||||
// if flag is set, create pseudo resources by mapping files
|
||||
var pseudoResources []modconfig.MappableResource
|
||||
if runCtx.CreatePseudoResources() {
|
||||
|
||||
@@ -259,9 +259,6 @@ func (m *Mod) OnDecoded(block *hcl.Block, resourceMapProvider ModResourcesProvid
|
||||
m.Require = m.LegacyRequire
|
||||
}
|
||||
|
||||
// populate resource map references
|
||||
m.ResourceMaps.PopulateReferences()
|
||||
|
||||
// initialise our Require
|
||||
if m.Require == nil {
|
||||
return nil
|
||||
|
||||
@@ -332,8 +332,19 @@ func (r *RunContext) GetMod(modShortName string) *modconfig.Mod {
|
||||
}
|
||||
|
||||
func (r *RunContext) GetResourceMaps() *modconfig.ModResources {
|
||||
// TODO [reports] add dep mods
|
||||
return r.CurrentMod.GetResourceMaps()
|
||||
dependencyResourceMaps := make([]*modconfig.ModResources, len(r.LoadedDependencyMods))
|
||||
idx := 0
|
||||
// use the current mod as the base resource map
|
||||
resourceMap := r.CurrentMod.GetResourceMaps()
|
||||
|
||||
// merge in the dependency mods
|
||||
for _, m := range r.LoadedDependencyMods {
|
||||
dependencyResourceMaps[idx] = m.GetResourceMaps()
|
||||
idx++
|
||||
}
|
||||
|
||||
resourceMap = resourceMap.Merge(dependencyResourceMaps)
|
||||
return resourceMap
|
||||
}
|
||||
|
||||
func (r *RunContext) newDependencyGraph() *topsort.Graph {
|
||||
|
||||
@@ -45,9 +45,6 @@ type Workspace struct {
|
||||
// callback function to reset display after the file watche displays messages
|
||||
onFileWatcherEventMessages func()
|
||||
loadPseudoResources bool
|
||||
|
||||
// maps of mod resources from this mod and ALL DEPENDENCIES, keyed by long and short names
|
||||
resourceMaps *modconfig.ModResources
|
||||
}
|
||||
|
||||
// Load creates a Workspace and loads the workspace mod
|
||||
@@ -219,6 +216,9 @@ func (w *Workspace) loadWorkspaceMod(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// populate the mod references map references
|
||||
m.ResourceMaps.PopulateReferences()
|
||||
|
||||
// now set workspace properties
|
||||
w.Mod = m
|
||||
|
||||
@@ -227,9 +227,6 @@ func (w *Workspace) loadWorkspaceMod(ctx context.Context) error {
|
||||
// NOTE: add in the workspace mod to the dependency mods
|
||||
w.Mods[w.Mod.Name()] = w.Mod
|
||||
|
||||
// populate the workspace resource map
|
||||
w.populateResourceMaps()
|
||||
|
||||
// verify all runtime dependencies can be resolved
|
||||
return w.verifyResourceRuntimeDependencies()
|
||||
}
|
||||
@@ -320,7 +317,7 @@ func (w *Workspace) loadWorkspaceResourceName() (*modconfig.WorkspaceResources,
|
||||
}
|
||||
|
||||
func (w *Workspace) verifyResourceRuntimeDependencies() error {
|
||||
for _, d := range w.resourceMaps.Dashboards {
|
||||
for _, d := range w.Mod.ResourceMaps.Dashboards {
|
||||
if err := d.BuildRuntimeDependencyTree(w); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ func (w *Workspace) reloadResourceMaps(ctx context.Context) (*modconfig.ModResou
|
||||
|
||||
// get the pre-load resource maps
|
||||
// NOTE: do not call GetResourceMaps - we DO NOT want to lock loadLock
|
||||
prevResourceMaps := w.resourceMaps
|
||||
prevResourceMaps := w.Mod.ResourceMaps
|
||||
// if there is an outstanding watcher error, set prevResourceMaps to empty to force refresh
|
||||
if w.watcherError != nil {
|
||||
prevResourceMaps = modconfig.NewWorkspaceResourceMaps(w.Mod)
|
||||
@@ -73,7 +73,7 @@ func (w *Workspace) reloadResourceMaps(ctx context.Context) (*modconfig.ModResou
|
||||
w.watcherError = nil
|
||||
|
||||
// reload the resource maps
|
||||
resourceMaps := w.resourceMaps
|
||||
resourceMaps := w.Mod.ResourceMaps
|
||||
|
||||
return prevResourceMaps, resourceMaps, nil
|
||||
|
||||
|
||||
@@ -6,10 +6,10 @@ func (w *Workspace) GetQuery(queryName string) (*modconfig.Query, bool) {
|
||||
w.loadLock.Lock()
|
||||
defer w.loadLock.Unlock()
|
||||
|
||||
if query, ok := w.resourceMaps.LocalQueries[queryName]; ok {
|
||||
if query, ok := w.Mod.ResourceMaps.LocalQueries[queryName]; ok {
|
||||
return query, true
|
||||
}
|
||||
if query, ok := w.resourceMaps.Queries[queryName]; ok {
|
||||
if query, ok := w.Mod.ResourceMaps.Queries[queryName]; ok {
|
||||
return query, true
|
||||
}
|
||||
return nil, false
|
||||
@@ -19,10 +19,10 @@ func (w *Workspace) GetControl(controlName string) (*modconfig.Control, bool) {
|
||||
w.loadLock.Lock()
|
||||
defer w.loadLock.Unlock()
|
||||
|
||||
if control, ok := w.resourceMaps.LocalControls[controlName]; ok {
|
||||
if control, ok := w.Mod.ResourceMaps.LocalControls[controlName]; ok {
|
||||
return control, true
|
||||
}
|
||||
if control, ok := w.resourceMaps.Controls[controlName]; ok {
|
||||
if control, ok := w.Mod.ResourceMaps.Controls[controlName]; ok {
|
||||
return control, true
|
||||
}
|
||||
return nil, false
|
||||
@@ -33,24 +33,5 @@ func (w *Workspace) GetResourceMaps() *modconfig.ModResources {
|
||||
w.loadLock.Lock()
|
||||
defer w.loadLock.Unlock()
|
||||
|
||||
// this will only occur for unit tests
|
||||
if w.resourceMaps == nil {
|
||||
w.populateResourceMaps()
|
||||
}
|
||||
|
||||
return w.resourceMaps
|
||||
}
|
||||
|
||||
func (w *Workspace) populateResourceMaps() {
|
||||
dependencyResourceMaps := make([]*modconfig.ModResources, len(w.Mods))
|
||||
idx := 0
|
||||
for _, m := range w.Mods {
|
||||
dependencyResourceMaps[idx] = m.GetResourceMaps()
|
||||
idx++
|
||||
}
|
||||
|
||||
w.resourceMaps = w.Mod.GetResourceMaps().Merge(dependencyResourceMaps)
|
||||
|
||||
// now populate references in the resource map
|
||||
w.resourceMaps.PopulateReferences()
|
||||
return w.Mod.ResourceMaps
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user