mirror of
https://github.com/hashicorp/terraform.git
synced 2026-06-09 08:58:34 -04:00
Merge pull request #36169 from hashicorp/addrs-module-call-output-to-module-call
addrs: ModuleCallOutput to ConfigOutputValue translation
This commit is contained in:
commit
ce80353503
2 changed files with 113 additions and 0 deletions
|
|
@ -210,3 +210,28 @@ func (co ModuleCallInstanceOutput) AbsOutputValue(caller ModuleInstance) AbsOutp
|
|||
moduleAddr := co.Call.ModuleInstance(caller)
|
||||
return moduleAddr.OutputValue(co.Name)
|
||||
}
|
||||
|
||||
type AbsModuleCallOutput struct {
|
||||
Call AbsModuleCall
|
||||
Name string
|
||||
}
|
||||
|
||||
func (c AbsModuleCall) Output(name string) AbsModuleCallOutput {
|
||||
return AbsModuleCallOutput{
|
||||
Call: c,
|
||||
Name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func (m AbsModuleCallOutput) ConfigOutputValue() ConfigOutputValue {
|
||||
return ConfigOutputValue{
|
||||
Module: m.Call.StaticModule(),
|
||||
OutputValue: OutputValue{
|
||||
Name: m.Name,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (co AbsModuleCallOutput) String() string {
|
||||
return fmt.Sprintf("%s.%s", co.Call.String(), co.Name)
|
||||
}
|
||||
|
|
|
|||
88
internal/addrs/module_call_test.go
Normal file
88
internal/addrs/module_call_test.go
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package addrs
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAbsModuleCallOutput(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
input AbsModuleCall
|
||||
expected string
|
||||
}{
|
||||
"simple": {
|
||||
input: AbsModuleCall{
|
||||
Module: ModuleInstance{},
|
||||
Call: ModuleCall{
|
||||
Name: "hello",
|
||||
},
|
||||
},
|
||||
expected: "module.hello.foo",
|
||||
},
|
||||
"nested": {
|
||||
input: AbsModuleCall{
|
||||
Module: ModuleInstance{
|
||||
ModuleInstanceStep{
|
||||
Name: "child",
|
||||
InstanceKey: NoKey,
|
||||
},
|
||||
},
|
||||
Call: ModuleCall{
|
||||
Name: "hello",
|
||||
},
|
||||
},
|
||||
expected: "module.child.module.hello.foo",
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
output := tc.input.Output("foo")
|
||||
if output.String() != tc.expected {
|
||||
t.Errorf("expected %s, got %s", tc.expected, output.String())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAbsModuleCallOutput_ConfigOutputValue(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
input AbsModuleCall
|
||||
expected string
|
||||
}{
|
||||
"simple": {
|
||||
input: AbsModuleCall{
|
||||
Module: ModuleInstance{},
|
||||
Call: ModuleCall{
|
||||
Name: "hello",
|
||||
},
|
||||
},
|
||||
expected: "module.hello.output.foo",
|
||||
},
|
||||
"nested": {
|
||||
input: AbsModuleCall{
|
||||
Module: ModuleInstance{
|
||||
ModuleInstanceStep{
|
||||
Name: "child",
|
||||
InstanceKey: NoKey,
|
||||
},
|
||||
},
|
||||
Call: ModuleCall{
|
||||
Name: "hello",
|
||||
},
|
||||
},
|
||||
expected: "module.child.module.hello.output.foo",
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
output := tc.input.Output("foo").ConfigOutputValue()
|
||||
if output.String() != tc.expected {
|
||||
t.Errorf("expected %s, got %s", tc.expected, output.String())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue