From 8f2f286c840acb3aa21bc5a137c4319a36a3d581 Mon Sep 17 00:00:00 2001 From: Ian Wahbe Date: Mon, 9 Oct 2023 09:01:25 -0700 Subject: [PATCH] Don't error on already mapped tokens --- pkg/tfbridge/tokens/known_modules.go | 25 ++++++++++++++++--------- pkg/tfbridge/tokens_test.go | 22 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/pkg/tfbridge/tokens/known_modules.go b/pkg/tfbridge/tokens/known_modules.go index 666ef8546f..3fec90a780 100644 --- a/pkg/tfbridge/tokens/known_modules.go +++ b/pkg/tfbridge/tokens/known_modules.go @@ -26,7 +26,7 @@ import ( func knownModules[T b.ResourceInfo | b.DataSourceInfo]( prefix, defaultModule string, modules []string, - apply func(string, string, *T) error, + apply func(string, string, *T, error) error, moduleTransform func(string) string, ) b.ElementStrategy[T] { return func(tfToken string, elem *T) error { @@ -41,10 +41,11 @@ func knownModules[T b.ResourceInfo | b.DataSourceInfo]( break } } + var err error if mod == "" { - return fmt.Errorf("could not find a module that prefixes '%s' in '%#v'", tk, modules) + err = fmt.Errorf("could not find a module that prefixes '%s' in '%#v'", tk, modules) } - return apply(moduleTransform(mod), upperCamelCase(strings.TrimPrefix(tk, mod)), elem) + return apply(moduleTransform(mod), upperCamelCase(strings.TrimPrefix(tk, mod)), elem, err) } } @@ -67,12 +68,15 @@ func KnownModules( } } -func knownResource(finalize Make) func(mod, tk string, r *b.ResourceInfo) error { - return func(mod, tk string, r *b.ResourceInfo) error { +func knownResource(finalize Make) func(mod, tk string, r *b.ResourceInfo, err error) error { + return func(mod, tk string, r *b.ResourceInfo, err error) error { if r.Tok != "" { return nil } - tk, err := finalize(mod, tk) + if err != nil { + return err + } + tk, err = finalize(mod, tk) if err != nil { return err } @@ -81,12 +85,15 @@ func knownResource(finalize Make) func(mod, tk string, r *b.ResourceInfo) error } } -func knownDataSource(finalize Make) func(mod, tk string, d *b.DataSourceInfo) error { - return func(mod, tk string, d *b.DataSourceInfo) error { +func knownDataSource(finalize Make) func(mod, tk string, d *b.DataSourceInfo, err error) error { + return func(mod, tk string, d *b.DataSourceInfo, err error) error { if d.Tok != "" { return nil } - tk, err := finalize(mod, "get"+tk) + if err != nil { + return err + } + tk, err = finalize(mod, "get"+tk) if err != nil { return err } diff --git a/pkg/tfbridge/tokens_test.go b/pkg/tfbridge/tokens_test.go index 921e0ed362..81a53711f1 100644 --- a/pkg/tfbridge/tokens_test.go +++ b/pkg/tfbridge/tokens_test.go @@ -117,6 +117,28 @@ func TestTokensKnownModules(t *testing.T) { }, info.Resources) } +func TestTokensKnownModulesAlreadyMapped(t *testing.T) { + info := tfbridge.ProviderInfo{ + P: (&schema.Provider{ + ResourcesMap: schema.ResourceMap{ + "pkg_m1_fizz": nil, + "pkg_m2_buzz": nil, + }, + }).Shim(), + Resources: map[string]*tfbridge.ResourceInfo{ + "pkg_m2_buzz": {Tok: "pkg:index:Buzz"}, + }, + } + + err := info.ComputeTokens(tokens.KnownModules( + "pkg_", "", []string{"m1"}, tokens.MakeStandard("pkg"))) + require.NoError(t, err) + assert.Equal(t, map[string]*tfbridge.ResourceInfo{ + "pkg_m1_fizz": {Tok: "pkg:m1/fizz:Fizz"}, + "pkg_m2_buzz": {Tok: "pkg:index:Buzz"}, + }, info.Resources) +} + func TestTokensMappedModules(t *testing.T) { info := tfbridge.ProviderInfo{ P: (&schema.Provider{