You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform/internal/moduletest/opts.go

86 lines
2.4 KiB

// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package moduletest
import (
"github.com/hashicorp/hcl/v2"
"github.com/hashicorp/terraform/internal/addrs"
"github.com/hashicorp/terraform/internal/configs"
"github.com/hashicorp/terraform/internal/lang/langrefs"
"github.com/hashicorp/terraform/internal/tfdiags"
)
func GetRunTargets(config *configs.TestRun) ([]addrs.Targetable, tfdiags.Diagnostics) {
var diagnostics tfdiags.Diagnostics
var targets []addrs.Targetable
for _, target := range config.Options.Target {
addr, diags := addrs.ParseTarget(target)
diagnostics = diagnostics.Append(diags)
if addr != nil {
targets = append(targets, addr.Subject)
}
}
return targets, diagnostics
}
func GetRunReplaces(config *configs.TestRun) ([]addrs.AbsResourceInstance, tfdiags.Diagnostics) {
var diagnostics tfdiags.Diagnostics
var replaces []addrs.AbsResourceInstance
for _, replace := range config.Options.Replace {
addr, diags := addrs.ParseAbsResourceInstance(replace)
diagnostics = diagnostics.Append(diags)
if diags.HasErrors() {
continue
}
if addr.Resource.Resource.Mode != addrs.ManagedResourceMode {
diagnostics = diagnostics.Append(&hcl.Diagnostic{
Severity: hcl.DiagError,
Summary: "Can only target managed resources for forced replacements.",
Detail: addr.String(),
Subject: replace.SourceRange().Ptr(),
})
continue
}
replaces = append(replaces, addr)
}
return replaces, diagnostics
}
func GetRunReferences(config *configs.TestRun) ([]*addrs.Reference, tfdiags.Diagnostics) {
var diagnostics tfdiags.Diagnostics
var references []*addrs.Reference
for _, rule := range config.CheckRules {
for _, variable := range rule.Condition.Variables() {
reference, diags := addrs.ParseRefFromTestingScope(variable)
diagnostics = diagnostics.Append(diags)
if reference != nil {
references = append(references, reference)
}
}
for _, variable := range rule.ErrorMessage.Variables() {
reference, diags := addrs.ParseRefFromTestingScope(variable)
diagnostics = diagnostics.Append(diags)
if reference != nil {
references = append(references, reference)
}
}
}
for _, expr := range config.Variables {
moreRefs, moreDiags := langrefs.ReferencesInExpr(addrs.ParseRefFromTestingScope, expr)
diagnostics = diagnostics.Append(moreDiags)
references = append(references, moreRefs...)
}
return references, diagnostics
}