From b3d1b1a0c70befc41e1281ffbb6b798f6b6cdf95 Mon Sep 17 00:00:00 2001 From: Ryan Parman Date: Tue, 12 Nov 2024 10:49:05 -0700 Subject: [PATCH] feat: Added support for JSON and TOML conversions to the Go lib. --- .ecrc | 3 +- .taplo.toml | 20 +++ cmd/json2toml.go | 59 +++++++++ cmd/root.go | 39 +++--- cmd/toml2json.go | 59 +++++++++ corefunc/file.go | 48 +++++++ corefunc/toml.go | 104 +++++++++++++++ corefunc/toml_test.go | 157 +++++++++++++++++++++++ ecrc.toml | 10 +- go.mod | 24 +--- go.sum | 51 +------- terratest/functions/str_base64_gunzip.tf | 4 +- testfixtures/.taplo.toml | 20 +++ testfixtures/toml.example.json | 1 + testfixtures/toml.example.toml | 89 +++++++++++++ testfixtures/toml.example2.json | 1 + testfixtures/toml.example2.toml | 23 ++++ testfixtures/toml.go | 82 ++++++++++++ unit-coverage.png | Bin 58367 -> 60451 bytes unit-coverage.svg | 66 +++++++--- 20 files changed, 749 insertions(+), 111 deletions(-) create mode 100644 .taplo.toml create mode 100644 cmd/json2toml.go create mode 100644 cmd/toml2json.go create mode 100644 corefunc/file.go create mode 100644 corefunc/toml.go create mode 100644 corefunc/toml_test.go create mode 100644 testfixtures/.taplo.toml create mode 100644 testfixtures/toml.example.json create mode 100644 testfixtures/toml.example.toml create mode 100644 testfixtures/toml.example2.json create mode 100644 testfixtures/toml.example2.toml create mode 100644 testfixtures/toml.go diff --git a/.ecrc b/.ecrc index 7a31d85c..bd12c8ee 100644 --- a/.ecrc +++ b/.ecrc @@ -68,7 +68,8 @@ "min\\.css$", "min\\.js$", "package-lock\\.json$", - "standard\\.mk$" + "standard\\.mk$", + "testfixtures/.*$" ], "IgnoreDefaults": true, "NoColor": false, diff --git a/.taplo.toml b/.taplo.toml new file mode 100644 index 00000000..3325a979 --- /dev/null +++ b/.taplo.toml @@ -0,0 +1,20 @@ +[formatting] +align_comments = false +align_entries = false +allowed_blank_lines = 1 +array_auto_collapse = true +array_auto_expand = true +array_trailing_comma = true +column_width = 120 +compact_arrays = false +compact_entries = false +compact_inline_tables = false +crlf = false +indent_entries = true +indent_string = " " +indent_tables = true +inline_table_expand = false +reorder_arrays = false +reorder_inline_tables = false +reorder_keys = false +trailing_newline = true diff --git a/cmd/json2toml.go b/cmd/json2toml.go new file mode 100644 index 00000000..f2135b9f --- /dev/null +++ b/cmd/json2toml.go @@ -0,0 +1,59 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cmd // lint:no_dupe + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + + clihelpers "github.com/northwood-labs/cli-helpers" + "github.com/northwood-labs/terraform-provider-corefunc/corefunc" +) + +// json2tomlCmd represents the json2toml command +var json2tomlCmd = &cobra.Command{ + Use: "json2toml", + Short: "Converts JSON to TOML.", + Long: clihelpers.LongHelpText(` + Converts JSON to TOML. + `), + Run: func(cmd *cobra.Command, args []string) { + if len(args) != 1 { + fmt.Println("Re-run with --help to see options.") + os.Exit(1) + } + + fString, err := corefunc.File(args[0]) + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } + + output, err := corefunc.JSONtoTOML(fString) + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } + + fmt.Println(output) + }, +} + +func init() { // lint:allow_init + rootCmd.AddCommand(json2tomlCmd) +} diff --git a/cmd/root.go b/cmd/root.go index cb70d6c0..caa8850c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -24,6 +24,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/providerserver" + clihelpers "github.com/northwood-labs/cli-helpers" "github.com/northwood-labs/terraform-provider-corefunc/corefuncprovider" ) @@ -34,30 +35,30 @@ var ( rootCmd = &cobra.Command{ Use: "terraform-provider-corefunc", Short: "Utilities that should have been Terraform core functions.", - Long: `-------------------------------------------------------------------------------- -terraform-provider-corefunc + Long: clihelpers.LongHelpText(` + terraform-provider-corefunc -Utilities that should have been Terraform core functions. + Utilities that should have been Terraform core functions. -While some of these *can* be implemented in HCL, some of them begin to push up -against the limits of Terraform and the HCL2 configuration language. We also -perform testing using the Terratest framework -on a regular basis. Exposing these functions as both a Go library as well as a -Terraform provider enables us to use the same functionality in both our -Terraform applies as well as while using a testing framework. + While some of these *can* be implemented in HCL, some of them begin to push up + against the limits of Terraform and the HCL2 configuration language. We also + perform testing using the Terratest framework + on a regular basis. Exposing these functions as both a Go library as well as a + Terraform provider enables us to use the same functionality in both our + Terraform applies as well as while using a testing framework. -Since Terraform doesn't have the concept of user-defined functions, the next -step to open up the possibilities is to write a custom Terraform Provider which -has the functions built-in, using Terraform's existing support for inputs and -outputs. + Since Terraform doesn't have the concept of user-defined functions, the next + step to open up the possibilities is to write a custom Terraform Provider which + has the functions built-in, using Terraform's existing support for inputs and + outputs. -**This does not add new syntax or constructs to Terraform.** Instead it uses the -existing concepts around Providers, Resources, Data Sources, Variables, and -Outputs to expose new custom-built functionality. + **This does not add new syntax or constructs to Terraform.** Instead it uses the + existing concepts around Providers, Resources, Data Sources, Variables, and + Outputs to expose new custom-built functionality. -The goal of this provider is not to call any APIs, but to provide pre-built -functions in the form of Data Sources. ---------------------------------------------------------------------------------`, + The goal of this provider is not to call any APIs, but to provide pre-built + functions in the form of Data Sources. + `), Run: func(cmd *cobra.Command, args []string) { err := providerserver.Serve(context.Background(), corefuncprovider.New, providerserver.ServeOpts{ Address: "registry.terraform.io/northwood-labs/corefunc", diff --git a/cmd/toml2json.go b/cmd/toml2json.go new file mode 100644 index 00000000..590115b5 --- /dev/null +++ b/cmd/toml2json.go @@ -0,0 +1,59 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cmd // lint:no_dupe + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + + clihelpers "github.com/northwood-labs/cli-helpers" + "github.com/northwood-labs/terraform-provider-corefunc/corefunc" +) + +// toml2jsonCmd represents the toml2json command +var toml2jsonCmd = &cobra.Command{ + Use: "toml2json", + Short: "Converts TOML to JSON.", + Long: clihelpers.LongHelpText(` + Converts TOML to JSON. + `), + Run: func(cmd *cobra.Command, args []string) { + if len(args) != 1 { + fmt.Println("Re-run with --help to see options.") + os.Exit(1) + } + + fString, err := corefunc.File(args[0]) + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } + + output, err := corefunc.TOMLtoJSON(fString) + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } + + fmt.Println(output) + }, +} + +func init() { // lint:allow_init + rootCmd.AddCommand(toml2jsonCmd) +} diff --git a/corefunc/file.go b/corefunc/file.go new file mode 100644 index 00000000..c11e9dea --- /dev/null +++ b/corefunc/file.go @@ -0,0 +1,48 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package corefunc + +import ( + "fmt" + "io" + "os" +) + +/* +File reads the contents of a file and returns it as a string. It is meant to +simulate the behavior of the `file()` function in Terraform/OpenTofu. + +---- + + - path (string): A file name path to read. +*/ +func File(path string) (string, error) { + r, err := os.OpenFile(path, os.O_RDONLY, 0o644) // lint:allow_possible_insecure lint:allow_raw_number + if err != nil { + return "", fmt.Errorf("failed to open file: %w", err) + } + + b, err := io.ReadAll(r) + if err != nil { + return "", fmt.Errorf("failed to read the file: %w", err) + } + + if err := r.Close(); err != nil { + return "", fmt.Errorf("failed to close file: %w", err) + } + + return string(b), nil +} diff --git a/corefunc/toml.go b/corefunc/toml.go new file mode 100644 index 00000000..324b961c --- /dev/null +++ b/corefunc/toml.go @@ -0,0 +1,104 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package corefunc + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "strings" + + "github.com/pelletier/go-toml/v2" +) + +/* +TOMLtoJSON converts a TOML string to a JSON string. The result can be passed to +`json.Unmarshal()` to convert it to a `map[string]any`. + +Ported from `pelletier/go-toml`. + + + +---- + + - tomlStr (string): A string of TOML content. +*/ +func TOMLtoJSON(tomlStr string) (string, error) { + var ( + v any + w bytes.Buffer + ) + + tomlDecoder := toml.NewDecoder(strings.NewReader(tomlStr)) + + err := tomlDecoder.Decode(&v) + if err != nil { + var derr *toml.DecodeError + if errors.As(err, &derr) { + row, col := derr.Position() + + return "", fmt.Errorf("error occurred at row %d column %d: %s", row, col, derr.String()) + } + + return "", fmt.Errorf("failed to decode TOML: %w", err) + } + + jsonEncoder := json.NewEncoder(&w) + + err = jsonEncoder.Encode(v) + if err != nil { + return "", fmt.Errorf("failed to encode to JSON: %w", err) + } + + return w.String(), nil +} + +/* +JSONtoTOML converts a JSON string to a TOML string. The result can be passed to +`toml.Unmarshal()` to convert it to a `map[string]any`. + +Ported from `pelletier/go-toml`. + + + +---- + + - jsonStr (string): A string of JSON content. +*/ +func JSONtoTOML(jsonStr string) (string, error) { + var ( + v any + w bytes.Buffer + ) + + jsonDecoder := json.NewDecoder(strings.NewReader(jsonStr)) + tomlEncoder := toml.NewEncoder(&w) + + jsonDecoder.UseNumber() + tomlEncoder.SetMarshalJsonNumbers(true) + + err := jsonDecoder.Decode(&v) + if err != nil { + return "", fmt.Errorf("failed to decode to JSON: %w", err) + } + + if err = tomlEncoder.Encode(v); err != nil { + return "", fmt.Errorf("failed to encode to TOML: %w", err) + } + + return w.String() + "\n", nil +} diff --git a/corefunc/toml_test.go b/corefunc/toml_test.go new file mode 100644 index 00000000..eea35003 --- /dev/null +++ b/corefunc/toml_test.go @@ -0,0 +1,157 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package corefunc + +import ( + "encoding/json" + "fmt" + "strings" + "testing" + + "github.com/northwood-labs/terraform-provider-corefunc/testfixtures" + "github.com/pelletier/go-toml/v2" +) + +func ExampleTOMLtoJSON() { + tomlStr := `title = 'TOML Example' + +[database] +data = [['delta', 'phi'], [3.14]] +enabled = true +ports = [8000, 8001, 8002] + +[database.temp_targets] +case = 72 +cpu = 79.5 + +[owner] +dob = '1979-05-27T07:32:00-08:00' +name = 'Tom Preston-Werner' + +[servers] + [servers.alpha] + ip = '10.0.0.1' + role = 'frontend' + + [servers.beta] + ip = '10.0.0.2' + role = 'backend' +` + + jsonStr, err := TOMLtoJSON(tomlStr) + if err != nil { + panic(err) + } + + var v any + + err = json.Unmarshal([]byte(jsonStr), &v) + if err != nil { + panic(err) + } + + fmt.Println(v.(map[string]any)["title"]) + fmt.Println(v.(map[string]any)["servers"].(map[string]any)["alpha"].(map[string]any)["role"]) + + // Output: + // TOML Example + // frontend +} + +func ExampleJSONtoTOML() { + jsonStr := `{ + "title": "TOML Example", + "owner": { + "dob": "1979-05-27T07:32:00-08:00", + "name": "Tom Preston-Werner" + }, + "database": { + "data": [ + ["delta", "phi"], + [3.14] + ], + "enabled": true, + "ports": [8000, 8001, 8002], + "temp_targets": { + "case": 72, + "cpu": 79.5 + } + }, + "servers": { + "alpha": { + "ip": "10.0.0.1", + "role": "frontend" + }, + "beta": { + "ip": "10.0.0.2", + "role": "backend" + } + } +}` + + tomlStr, err := JSONtoTOML(jsonStr) + if err != nil { + panic(err) + } + + var v any + + err = toml.Unmarshal([]byte(tomlStr), &v) + if err != nil { + panic(err) + } + + fmt.Println(v.(map[string]any)["title"]) + fmt.Println(v.(map[string]any)["servers"].(map[string]any)["alpha"].(map[string]any)["role"]) + + // Output: + // TOML Example + // frontend +} + +func TestTOMLtoJSON(t *testing.T) { // lint:allow_complexity + for name, tc := range testfixtures.TOMLtoJSONTestTable { + t.Run(name, func(t *testing.T) { + output, err := TOMLtoJSON(tc.Input) + + // We expect an error. + if err != nil && !tc.ExpectedErr { + t.Errorf("Unexpected error: %v", err) + } + + if strings.TrimSpace(output) != strings.TrimSpace(tc.Expected) { + t.Errorf("Expected ----\n%s\n---- got ----\n%s\n----", tc.Expected, output) + } + }) + } +} + +func TestJSONtoTOML(t *testing.T) { // lint:allow_complexity + for name, tc := range testfixtures.JSONtoTOMLTestTable { + t.Run(name, func(t *testing.T) { + output, err := JSONtoTOML(tc.Input) + + // We expect an error. + if err != nil && !tc.ExpectedErr { + t.Errorf("Unexpected error: %v", err) + } + + if strings.TrimSpace(output) != strings.TrimSpace(tc.Expected) { + t.Errorf("Expected ----\n%s\n---- got ----\n%s\n----", tc.Expected, output) + } + }) + } +} diff --git a/ecrc.toml b/ecrc.toml index b3083ecd..7fe4080b 100644 --- a/ecrc.toml +++ b/ecrc.toml @@ -4,11 +4,11 @@ ## # goplicate-start:config -Debug = false -IgnoreDefaults = true -NoColor = false +Debug = false +IgnoreDefaults = true +NoColor = false SpacesAfterTabs = false -Verbose = false +Verbose = false # goplicate-end:config Exclude = [ @@ -82,4 +82,6 @@ Exclude = [ "package-lock\\.json$", "standard\\.mk$", # goplicate-end:excludes + + "testfixtures/.*$", ] diff --git a/go.mod b/go.mod index 2b95370a..4d656940 100644 --- a/go.mod +++ b/go.mod @@ -19,38 +19,30 @@ require ( github.com/mitchellh/go-homedir v1.1.0 github.com/nlnwa/whatwg-url v0.5.0 github.com/northwood-labs/cli-helpers v0.0.0-20240730151203-eb4931503c44 + github.com/pelletier/go-toml/v2 v2.2.3 github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.9.0 ) require ( dario.cat/mergo v1.0.1 // indirect - github.com/BurntSushi/toml v1.4.0 // indirect - github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect - github.com/Masterminds/goutils v1.1.1 // indirect - github.com/Masterminds/semver/v3 v3.3.0 // indirect - github.com/Masterminds/sprig/v3 v3.3.0 // indirect github.com/ProtonMail/go-crypto v1.1.2 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect - github.com/armon/go-radix v1.0.0 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect - github.com/bgentry/speakeasy v0.2.0 // indirect github.com/bits-and-blooms/bitset v1.15.0 // indirect - github.com/bmatcuk/doublestar/v4 v4.7.1 // indirect github.com/charmbracelet/bubbles v0.20.0 // indirect github.com/charmbracelet/bubbletea v1.2.1 // indirect github.com/charmbracelet/lipgloss v1.0.0 // indirect github.com/charmbracelet/x/ansi v0.4.5 // indirect github.com/charmbracelet/x/term v0.2.1 // indirect + github.com/clbanning/mxj/v2 v2.7.0 // indirect github.com/cloudflare/circl v1.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/fatih/color v1.18.0 // indirect github.com/go-test/deep v1.0.7 // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/hashicorp/cli v1.1.6 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -65,14 +57,11 @@ require ( github.com/hashicorp/logutils v1.0.0 // indirect github.com/hashicorp/terraform-exec v0.21.0 // indirect github.com/hashicorp/terraform-json v0.23.0 // indirect - github.com/hashicorp/terraform-plugin-docs v0.20.0 // indirect github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 // indirect github.com/hashicorp/terraform-registry-address v0.2.3 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect github.com/hashicorp/yamux v0.1.2 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect - github.com/huandu/xstrings v1.5.0 // indirect - github.com/imdario/mergo v0.3.15 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect @@ -89,23 +78,17 @@ require ( github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/termenv v0.15.2 // indirect github.com/northwood-labs/archstring v0.0.0-20240514202917-e9357b4b91c8 // indirect + github.com/northwood-labs/debug v0.0.0-20240514204655-f938e2fa11e9 // indirect github.com/oklog/run v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/posener/complete v1.2.3 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect - github.com/shopspring/decimal v1.4.0 // indirect - github.com/spf13/cast v1.7.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect - github.com/yuin/goldmark v1.7.8 // indirect - github.com/yuin/goldmark-meta v1.1.0 // indirect github.com/zclconf/go-cty v1.15.0 // indirect - go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect golang.org/x/crypto v0.29.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/mod v0.22.0 // indirect golang.org/x/net v0.31.0 // indirect golang.org/x/sync v0.9.0 // indirect @@ -116,6 +99,5 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.68.0 // indirect google.golang.org/protobuf v1.35.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 3794c5f0..8b44d540 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,5 @@ dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= -github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/Kunde21/markdownfmt/v3 v3.1.0 h1:KiZu9LKs+wFFBQKhrZJrFZwtLnCCWJahL+S+E/3VnM0= -github.com/Kunde21/markdownfmt/v3 v3.1.0/go.mod h1:tPXN1RTyOzJwhfHoon9wUr4HGYmWgVxSQN6VBJDkrVc= -github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= -github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0= -github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= -github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs= -github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/ProtonMail/go-crypto v1.1.2 h1:A7JbD57ThNqh7XjmHE+PXpQ3Dqt3BrSAC0AL0Go3KS0= @@ -21,19 +11,13 @@ github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/Y github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= -github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8= github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= -github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E= -github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bitset v1.15.0 h1:DiCRMscZsGyYePE9AR3sVhKqUXCt5IZvkX5AfAc5xLQ= github.com/bits-and-blooms/bitset v1.15.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bmatcuk/doublestar/v4 v4.7.1 h1:fdDeAqgT47acgwd9bd9HxJRDmc9UAmPpc+2m0CXv75Q= -github.com/bmatcuk/doublestar/v4 v4.7.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/chanced/caps v1.0.2 h1:RELvNN4lZajqSXJGzPaU7z8B4LK2+o2Oc/upeWdgMOA= @@ -50,6 +34,8 @@ github.com/charmbracelet/x/exp/golden v0.0.0-20240815200342-61de596daa2b h1:MnAM github.com/charmbracelet/x/exp/golden v0.0.0-20240815200342-61de596daa2b/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= +github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= +github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -85,12 +71,8 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gtramontina/ooze v0.2.0 h1:QDW1zeq1TQgTLbIWuk76GCgNV3adkamYxY1aJNYp/Bc= github.com/gtramontina/ooze v0.2.0/go.mod h1:e0dltGb+Ws7SQKfoj4XkKf9C/UaIAK2YGWbLKLPwL6k= -github.com/hashicorp/cli v1.1.6 h1:CMOV+/LJfL1tXCOKrgAX0uRKnzjj/mpmqNXloRSy2K8= -github.com/hashicorp/cli v1.1.6/go.mod h1:MPon5QYlgjjo0BSoAiN0ESeT5fRzDjVRp+uioJ0piz4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -103,7 +85,6 @@ github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUK github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.6.2 h1:zdGAEd0V1lCaU0u+MxWQhtSDQmahpkwOun8U8EiRVog= @@ -125,8 +106,6 @@ github.com/hashicorp/terraform-exec v0.21.0 h1:uNkLAe95ey5Uux6KJdua6+cv8asgILFVW github.com/hashicorp/terraform-exec v0.21.0/go.mod h1:1PPeMYou+KDUSSeRE9szMZ/oHf4fYUmB923Wzbq1ICg= github.com/hashicorp/terraform-json v0.23.0 h1:sniCkExU4iKtTADReHzACkk8fnpQXrdD2xoR+lppBkI= github.com/hashicorp/terraform-json v0.23.0/go.mod h1:MHdXbBAbSg0GvzuWazEGKAn/cyNfIB7mN6y7KJN6y2c= -github.com/hashicorp/terraform-plugin-docs v0.20.0 h1:ox7rm1FN0dVZaJBUzkVVh10R1r3+FeMQWL0QopQ9d7o= -github.com/hashicorp/terraform-plugin-docs v0.20.0/go.mod h1:A/+4SVMdAkQYtIBtaxV0H7AU862TxVZk/hhKaMDQB6Y= github.com/hashicorp/terraform-plugin-framework v1.13.0 h1:8OTG4+oZUfKgnfTdPTJwZ532Bh2BobF4H+yBiYJ/scw= github.com/hashicorp/terraform-plugin-framework v1.13.0/go.mod h1:j64rwMGpgM3NYXTKuxrCnyubQb/4VKldEKlcG8cvmjU= github.com/hashicorp/terraform-plugin-framework-validators v0.15.0 h1:RXMmu7JgpFjnI1a5QjMCBb11usrW2OtAG+iOTIj5c9Y= @@ -147,10 +126,6 @@ github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8 github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= -github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -207,15 +182,17 @@ github.com/northwood-labs/archstring v0.0.0-20240514202917-e9357b4b91c8 h1:H7u8m github.com/northwood-labs/archstring v0.0.0-20240514202917-e9357b4b91c8/go.mod h1:Qhra/q/Lf44v49IQFck2KopjfPq4jUGu4CI0w59BQtI= github.com/northwood-labs/cli-helpers v0.0.0-20240730151203-eb4931503c44 h1:6jJ+XDE1pKDwIYcMROaQewrD7Gps9zW3u+Ytc6FXgYQ= github.com/northwood-labs/cli-helpers v0.0.0-20240730151203-eb4931503c44/go.mod h1:n2i1DY3qebKBdaAsM7GwpaquD0n41ucNwe56I/DnQsM= +github.com/northwood-labs/debug v0.0.0-20240514204655-f938e2fa11e9 h1:Uuy/Obqj8z6MCER8y0geETA0894Ulo0hqM71u9WtcuQ= +github.com/northwood-labs/debug v0.0.0-20240514204655-f938e2fa11e9/go.mod h1:fu3Hu+ET7MkBAws624vkPDnehxuY/L8AJuR3nlKw64k= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -225,18 +202,13 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= -github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= -github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= -github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= @@ -250,24 +222,16 @@ github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= -github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= -github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc= -github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0= github.com/zclconf/go-cty v1.15.0 h1:tTCRWxsexYUmtt/wVxgDClUe+uQusuI443uL6e+5sXQ= github.com/zclconf/go-cty v1.15.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= -go.abhg.dev/goldmark/frontmatter v0.2.0 h1:P8kPG0YkL12+aYk2yU3xHv4tcXzeVnN+gU0tJ5JnxRw= -go.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px76YjkOzhB4YlU= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= @@ -348,8 +312,5 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/terratest/functions/str_base64_gunzip.tf b/terratest/functions/str_base64_gunzip.tf index 00a7cf62..64e90c8d 100644 --- a/terratest/functions/str_base64_gunzip.tf +++ b/terratest/functions/str_base64_gunzip.tf @@ -1,4 +1,6 @@ output "str_base64_gunzip_fn" { description = "This is the base64-decoded and de-gzipped output." - value = provider::corefunc::str_base64_gunzip("H4sIAAAAAAAA/8pIrVTISK3UUShPVS9KVSjJSFXIzc/LTk0tBgQAAP//qz+dmhoAAAA") + value = provider::corefunc::str_base64_gunzip( + "H4sIAAAAAAAA/8pIrVTISK3UUShPVS9KVSjJSFXIzc/LTk0tBgQAAP//qz+dmhoAAAA" + ) } diff --git a/testfixtures/.taplo.toml b/testfixtures/.taplo.toml new file mode 100644 index 00000000..3325a979 --- /dev/null +++ b/testfixtures/.taplo.toml @@ -0,0 +1,20 @@ +[formatting] +align_comments = false +align_entries = false +allowed_blank_lines = 1 +array_auto_collapse = true +array_auto_expand = true +array_trailing_comma = true +column_width = 120 +compact_arrays = false +compact_entries = false +compact_inline_tables = false +crlf = false +indent_entries = true +indent_string = " " +indent_tables = true +inline_table_expand = false +reorder_arrays = false +reorder_inline_tables = false +reorder_keys = false +trailing_newline = true diff --git a/testfixtures/toml.example.json b/testfixtures/toml.example.json new file mode 100644 index 00000000..32b2a4db --- /dev/null +++ b/testfixtures/toml.example.json @@ -0,0 +1 @@ +{"apps":{"argo":{"chart":"argo/argo","enabled":true,"hooks":{"deleteOnSuccess":true,"preInstall":"job.yaml","successCondition":"Complete","successTimeout":"90s"},"namespace":"production","priority":-3,"protected":true,"set":{"images.tag":"$$TAG"},"test":false,"valuesFile":"","version":"0.8.5","wait":true},"artifactory":{"chart":"jfrog/artifactory","enabled":true,"helmFlags":["--devel"],"maxHistory":4,"namespace":"production","noHooks":false,"priority":-2,"test":false,"timeout":300,"valuesFile":"","version":"8.3.2"}},"certificates":{},"context":"test-infra","helmRepos":{"argo":"https://argoproj.github.io/argo-helm","jfrog":"https://charts.jfrog.io"},"metadata":{"description":"example Desired State File for demo purposes.","key":"${VALUE}","maintainer":"k8s-admin (me@example.com)","org":"example.com/${ORG_PATH}/"},"namespaces":{"production":{"limits":[{"default":{"cpu":"300m","memory":"200Mi"},"defaultRequest":{"cpu":"200m","memory":"100Mi"},"type":"Container"},{"max":{"memory":"300Mi"},"type":"Pod"}],"protected":true},"staging":{"labels":{"env":"staging"},"protected":false,"quotas":{"customQuotas":[{"name":"requests.nvidia.com/gpu","value":"2"}],"limits.cpu":"10","limits.memory":"30Gi","pods":"25","requests.cpu":"10","requests.memory":"30Gi"}}},"settings":{"globalMaxHistory":5,"kubeContext":"minikube"}} diff --git a/testfixtures/toml.example.toml b/testfixtures/toml.example.toml new file mode 100644 index 00000000..e66f6e05 --- /dev/null +++ b/testfixtures/toml.example.toml @@ -0,0 +1,89 @@ +context = 'test-infra' + +[apps] +[apps.argo] +chart = 'argo/argo' +enabled = true +namespace = 'production' +priority = -3 +protected = true +test = false +valuesFile = '' +version = '0.8.5' +wait = true + +[apps.argo.hooks] +deleteOnSuccess = true +preInstall = 'job.yaml' +successCondition = 'Complete' +successTimeout = '90s' + +[apps.argo.set] +'images.tag' = '$$TAG' + +[apps.artifactory] +chart = 'jfrog/artifactory' +enabled = true +helmFlags = ['--devel'] +maxHistory = 4 +namespace = 'production' +noHooks = false +priority = -2 +test = false +timeout = 300 +valuesFile = '' +version = '8.3.2' + +[certificates] + +[helmRepos] +argo = 'https://argoproj.github.io/argo-helm' +jfrog = 'https://charts.jfrog.io' + +[metadata] +description = 'example Desired State File for demo purposes.' +key = '${VALUE}' +maintainer = 'k8s-admin (me@example.com)' +org = 'example.com/${ORG_PATH}/' + +[namespaces] +[namespaces.production] +protected = true + +[[namespaces.production.limits]] +type = 'Container' + +[namespaces.production.limits.default] +cpu = '300m' +memory = '200Mi' + +[namespaces.production.limits.defaultRequest] +cpu = '200m' +memory = '100Mi' + +[[namespaces.production.limits]] +type = 'Pod' + +[namespaces.production.limits.max] +memory = '300Mi' + +[namespaces.staging] +protected = false + +[namespaces.staging.labels] +env = 'staging' + +[namespaces.staging.quotas] +'limits.cpu' = '10' +'limits.memory' = '30Gi' +pods = '25' +'requests.cpu' = '10' +'requests.memory' = '30Gi' + +[[namespaces.staging.quotas.customQuotas]] +name = 'requests.nvidia.com/gpu' +value = '2' + +[settings] +globalMaxHistory = 5 +kubeContext = 'minikube' diff --git a/testfixtures/toml.example2.json b/testfixtures/toml.example2.json new file mode 100644 index 00000000..290ddbb3 --- /dev/null +++ b/testfixtures/toml.example2.json @@ -0,0 +1 @@ +{"database":{"data":[["delta","phi"],[3.14]],"enabled":true,"ports":[8000,8001,8002],"temp_targets":{"case":72,"cpu":79.5}},"owner":{"dob":"1979-05-27T07:32:00-08:00","name":"Tom Preston-Werner"},"servers":{"alpha":{"ip":"10.0.0.1","role":"frontend"},"beta":{"ip":"10.0.0.2","role":"backend"}},"title":"TOML Example"} diff --git a/testfixtures/toml.example2.toml b/testfixtures/toml.example2.toml new file mode 100644 index 00000000..9e957faf --- /dev/null +++ b/testfixtures/toml.example2.toml @@ -0,0 +1,23 @@ +title = 'TOML Example' + +[database] +data = [['delta', 'phi'], [3.14]] +enabled = true +ports = [8000, 8001, 8002] + +[database.temp_targets] +case = 72 +cpu = 79.5 + +[owner] +dob = '1979-05-27T07:32:00-08:00' +name = 'Tom Preston-Werner' + +[servers] +[servers.alpha] +ip = '10.0.0.1' +role = 'frontend' + +[servers.beta] +ip = '10.0.0.2' +role = 'backend' diff --git a/testfixtures/toml.go b/testfixtures/toml.go new file mode 100644 index 00000000..dafc1c82 --- /dev/null +++ b/testfixtures/toml.go @@ -0,0 +1,82 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package testfixtures // lint:no_dupe + +import _ "embed" + +var ( + //go:embed toml.example.json + jsonContent string + + //go:embed toml.example2.json + json2Content string + + //go:embed toml.example.toml + tomlContent string + + //go:embed toml.example2.toml + toml2Content string + + // TOMLtoJSONTestTable is used by both the standard Go tests and also the + // Terraform acceptance tests. + // + TOMLtoJSONTestTable = map[string]struct { // lint:no_dupe + Input string + Expected string + ExpectedErr bool + }{ + "abc=123": { + Input: `abc = 123`, + Expected: `{"abc":123}`, + ExpectedErr: false, + }, + "toml.example.toml": { + Input: tomlContent, + Expected: jsonContent, + ExpectedErr: false, + }, + "toml.example2.toml": { + Input: toml2Content, + Expected: json2Content, + ExpectedErr: false, + }, + } + + // JSONtoTOMLTestTable is used by both the standard Go tests and also the + // Terraform acceptance tests. + // + JSONtoTOMLTestTable = map[string]struct { // lint:no_dupe + Input string + Expected string + ExpectedErr bool + }{ + `{"abc":123}`: { + Input: `{"abc": 123}`, + Expected: `abc = 123`, + ExpectedErr: false, + }, + "toml.example.json": { + Input: jsonContent, + Expected: tomlContent, + ExpectedErr: false, + }, + "toml.example2.json": { + Input: json2Content, + Expected: toml2Content, + ExpectedErr: false, + }, + } +) diff --git a/unit-coverage.png b/unit-coverage.png index 784cf60fd738b80a1f7f6f8b2c05f77f0069fa68..4d9d46f2c151f6d794b7a11d78919883177ad644 100644 GIT binary patch literal 60451 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

R3k%*wG@775 zoY|&90S^vv@TH|;En7@U{*qygV;A_0_u$q*~-e%+bNqcV^$5=PQWJt-IyY%`NV!l^tSn(C@~ip zjTXRiJ%A53`Z0J*n5RvLLz@O;QS;ve*gLiY#`&50*KpXx?+E@lW z_b1j1ar@53#1U~JbonxgTY^0ywO}SMID&S=k0PaCSCn)T8uK`=Im;?1BzF=olT_J~s zWv#8MF*rZKam2)Nwb}kY&46H#U+|^#&f)x z)a5nbDLnGf=1+sutq20L;K;maL0L5YRC5|JmxwO`An2Bd+zqR@Jli>r7LRwZtKeO1KESe7+90xQKMN^J;1cVEZ4v z;_LS0ypb*U26hkOHZZB76C(*VU5lfa^+}aXhXT;dn+j)lcRRX}n07$;)v@nB#^~={ z(r*`&LN|w#!Kke>JX`(q)URTdbmAADKPU7)k;eyKV>Eo7%k@h$YtnbP3G+UU@+eD8 zAnybD`-s&oS8iZGS6WTh`WQ1-e*23^Gvjj}c=-l)E!q9DNA_i2UMBE~sj>e=DQ@JH z&G?_OWu=#WKm8vO-uzc0!@n{(l>P~&W&X3U`@iJ!Uvl{`xddV@|GR2E{r^-*9RJ>5 z8(dbGYeGCw)$NhOR~q+rJufMd-oW1Z?qdcL5Iah|40y`Jr4VJ*zPML^rC`n2>1H0R zU;i}&_}2H_+qw_0G-mJqRS4>?YMHj~)q@9w2UnkEXsrB|$~Cj_ziBU+wl4S|>pCIy zgsuZ2%xtHhoDoh?MKE~WemQo^U8VEAt?cfGp(b_Iu7N%dVJ1a+x*$byWHG;*B(tR`HiL44Gk$6Js`t}#uHUn zQyOmii@ah3=4SRS)1Ho=o3d^40PxnE2ag?{?cA{<c~!d?-S^6ZHA4~N8I4#RyK zshs}!?OFx(f~UzP?Hg10UK$XNlDNbntUzfMT(SFM`1OpTA>2M5=v$bJt)cs&LoH#m zyS6$t6Ejn8b@@(7`uqoai$XF3mr6%kP)pPOiQBd5>Drp8H^>%owY-O*Nix|xO6azC zMUQ=AW7}@}mxjzh3kTN%UK$<*4P85>y|iap(rUGxeemJi(2$8I+AaQTdHX7Px%ZD= z3+P<^%`&n7edxqQ9)F0R_idn8PE079?srr36RFBxZlA+kSy^$h_Pyn!2+>eW_P4ix z*z@+B$XJEooA=wj3+=xXva|kt{RxlS!$JTOZAxKRHLjcwZDY->|*alN5uMbMX2J32kT4txeKn8`Qt?< z&tv^lzOp@@wj1jLM71@%C2_W90wa^K@o^Z9uIwwyJZ2Fed_i~=7XoACxqF+>e@LTJ zbX>?^XFwN_ya;%2V?Er3JZZZ{_mjKXCh$R50IoSZErpVuhV9!>#TYn5j?T|T&i)3c z*t=L-$Qj+I{*GRd+6(zUujCdpVinnLJdX)jSwL_CC3kyD7&M(xI zh9u{|P2h3aig|?1r5J1p)yJT*s1U2!A{fBId5$)ml-sa`l@mnWg%T)o<~O}w z&~Ubbt#dH`y&5iC9w+|@=%;KBAod#TF1p~B0IQubGz}uQhW;n)t^Lc4{Bx^S{#O^6|0{dBE$7f)T|9bO>Hch5|5v%s zZx8)l_nW`bKK1wp{nR#Iqj2Wg)$^v0m!k9z7C-*n!i59}znR!KJ*%^`rRslOJyPu# zjw<7&5olb`EOJQ=*aCb$iAFh=(KS+QqN}u;6@hMlBFVEkaD}jaVRsz9)tN;Rovjkn zTW;JNSbmkuyIjI<32li$Ux|Nxt?R3`qbF<(FGX4;ix0jg#yogqo6)+>$TnM6L$(G z?)b(7l}}Nj<~cBP#a)PVU0c*YvM&E*Lp&?a;Q4WZW_)j3J!avqttvYx%noq;6I9dz z68|!!9GcO$#2PaB*bAlcyTP6r1*_%x2Nr3iX)i_@% literal 58367 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 J|L(^d{|nH|$V>nL diff --git a/unit-coverage.svg b/unit-coverage.svg index 2ce67dcc..3df96db2 100644 --- a/unit-coverage.svg +++ b/unit-coverage.svg @@ -7,7 +7,7 @@ > - + - + base64gunzip.go @@ -33,12 +33,12 @@ - + caps.go @@ -46,12 +46,12 @@ - + cidr.go @@ -59,12 +59,12 @@ - + env_ensure.go @@ -72,12 +72,25 @@ - + file.go + + + + + + + +homedir.go @@ -85,12 +98,12 @@ - + int_pad.go @@ -98,12 +111,12 @@ - + str_iterative_replace.go @@ -111,12 +124,12 @@ - + str_pad.go @@ -124,12 +137,25 @@ - + toml.go + + + + + + + +truncate_label.go @@ -137,12 +163,12 @@ - + url.go