Skip to content

Commit e6e7cd8

Browse files
committed
Use ansible/terraform modules over traditional execution
1 parent 1f831a4 commit e6e7cd8

File tree

9 files changed

+163
-192
lines changed

9 files changed

+163
-192
lines changed

kubetest2-tf/deployer/deployer.go

Lines changed: 45 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"encoding/json"
77
goflag "flag"
88
"fmt"
9+
"maps"
910
"net"
1011
"net/url"
1112
"os"
@@ -19,11 +20,12 @@ import (
1920
"github.com/octago/sflags/gen/gpflag"
2021
"github.com/spf13/pflag"
2122

22-
"k8s.io/client-go/tools/clientcmd"
23-
"k8s.io/klog/v2"
2423
"sigs.k8s.io/kubetest2/pkg/artifacts"
2524
"sigs.k8s.io/kubetest2/pkg/types"
2625

26+
"k8s.io/client-go/tools/clientcmd"
27+
"k8s.io/klog/v2"
28+
2729
"sigs.k8s.io/provider-ibmcloud-test-infra/kubetest2-tf/deployer/options"
2830
"sigs.k8s.io/provider-ibmcloud-test-infra/kubetest2-tf/pkg/ansible"
2931
"sigs.k8s.io/provider-ibmcloud-test-infra/kubetest2-tf/pkg/build"
@@ -76,10 +78,10 @@ type deployer struct {
7678

7779
RepoRoot string `desc:"The path to the root of the local kubernetes repo. Necessary to call certain scripts. Defaults to the current directory. If operating in legacy mode, this should be set to the local kubernetes/kubernetes repo."`
7880
IgnoreClusterDir bool `desc:"Ignore the cluster folder if exists"`
79-
AutoApprove bool `desc:"Terraform Auto Approve"`
81+
AutoApprove bool `desc:"Auto-approve the deployment of infrastructure through terraform" flag:",deprecated"`
8082
RetryOnTfFailure int `desc:"Retry on Terraform Apply Failure"`
8183
BreakKubetestOnUpfail bool `desc:"Breaks kubetest2 when up fails"`
82-
Playbook string `desc:"name of ansible playbook to be run"`
84+
Playbook string `desc:"Name of ansible playbook to be run"`
8385
ExtraVars map[string]string `desc:"Passes extra-vars to ansible playbook, enter a string of key=value pairs"`
8486
SetKubeconfig bool `desc:"Flag to set kubeconfig"`
8587
TargetProvider string `desc:"provider value to be used(powervs, vpc)"`
@@ -96,7 +98,7 @@ func (d *deployer) init() error {
9698
}
9799

98100
func (d *deployer) initialize() error {
99-
fmt.Println("Check if package dependencies are installed in the environment")
101+
klog.Info("Check if package dependencies are installed in the environment")
100102
if d.commonOptions.ShouldBuild() {
101103
if err := d.verifyBuildFlags(); err != nil {
102104
return fmt.Errorf("init failed to check build flags: %s", err)
@@ -151,17 +153,16 @@ func New(opts types.Options) (types.Deployer, *pflag.FlagSet) {
151153
}
152154
klog.InitFlags(nil)
153155
flagSet.AddGoFlagSet(goflag.CommandLine)
154-
fs := bindFlags(d)
156+
fs := bindFlags()
155157
flagSet.AddFlagSet(fs)
156158
return d, flagSet
157159
}
158160

159-
func bindFlags(d *deployer) *pflag.FlagSet {
161+
func bindFlags() *pflag.FlagSet {
160162
flags := pflag.NewFlagSet(Name, pflag.ContinueOnError)
161163
common.CommonProvider.BindFlags(flags)
162164
vpc.VPCProvider.BindFlags(flags)
163165
powervs.PowerVSProvider.BindFlags(flags)
164-
165166
return flags
166167
}
167168

@@ -179,9 +180,8 @@ func (d *deployer) Up() error {
179180
if err != nil {
180181
return fmt.Errorf("failed to dumpconfig to: %s and err: %+v", d.tmpDir, err)
181182
}
182-
183183
for i := 0; i <= d.RetryOnTfFailure; i++ {
184-
path, err := terraform.Apply(d.tmpDir, d.TargetProvider, d.AutoApprove)
184+
path, err := terraform.Apply(d.tmpDir, d.TargetProvider)
185185
op, oerr := terraform.Output(d.tmpDir, d.TargetProvider)
186186
if err != nil {
187187
if i == d.RetryOnTfFailure {
@@ -201,24 +201,27 @@ func (d *deployer) Up() error {
201201
}
202202
}
203203
inventory := AnsibleInventory{}
204+
tfMetaOutput, err := terraform.Output(d.tmpDir, d.TargetProvider)
205+
if err != nil {
206+
return err
207+
}
208+
var tfOutput map[string][]interface{}
209+
data, err := json.Marshal(tfMetaOutput)
210+
if err != nil {
211+
return fmt.Errorf("error while marshaling data %v", err)
212+
}
213+
json.Unmarshal(data, &tfOutput)
204214
for _, machineType := range []string{"Masters", "Workers"} {
205-
var tmp []interface{}
206-
op, err := terraform.Output(d.tmpDir, d.TargetProvider, "-json", strings.ToLower(machineType))
207-
208-
if err != nil {
209-
return fmt.Errorf("terraform.Output failed: %v", err)
210-
}
211-
klog.Infof("%s: %s", strings.ToLower(machineType), op)
212-
err = json.Unmarshal([]byte(op), &tmp)
213-
if err != nil {
214-
return fmt.Errorf("failed to unmarshal: %v", err)
215-
}
216-
for index := range tmp {
217-
inventory.addMachine(machineType, tmp[index].(string))
218-
d.machineIPs = append(d.machineIPs, tmp[index].(string))
215+
if machineIps, ok := tfOutput[strings.ToLower(machineType)]; !ok {
216+
return fmt.Errorf("error while unmarshaling machine IPs from terraform output")
217+
} else {
218+
for _, machineIp := range machineIps {
219+
inventory.addMachine(machineType, machineIp.(string))
220+
d.machineIPs = append(d.machineIPs, machineIp.(string))
221+
}
219222
}
220223
}
221-
klog.Infof("inventory: %v", inventory)
224+
klog.Infof("Kubernetes cluster node inventory: %+v", inventory)
222225
t := template.New("Ansible inventory file")
223226

224227
t, err = t.Parse(inventoryTemplate)
@@ -232,50 +235,44 @@ func (d *deployer) Up() error {
232235
return fmt.Errorf("failed to create inventory file: %v", err)
233236
}
234237

235-
err = t.Execute(inventoryFile, inventory)
236-
if err != nil {
238+
if err = t.Execute(inventoryFile, inventory); err != nil {
237239
return fmt.Errorf("template execute failed: %v", err)
238240
}
239241

240242
common.CommonProvider.ExtraCerts = strings.Join(inventory.Masters, ",")
241243

242-
commonJSON, err := json.Marshal(common.CommonProvider)
244+
ansibleParams, err := json.Marshal(common.CommonProvider)
243245
if err != nil {
244246
return fmt.Errorf("failed to marshal provider into JSON: %v", err)
245247
}
246-
klog.Infof("commonJSON: %v", string(commonJSON))
247-
//Unmarshalling commonJSON into map to add extra-vars
248-
final := map[string]interface{}{}
249-
json.Unmarshal(commonJSON, &final)
250-
//Iterating through extra-vars and adding them to map
251-
for k := range d.ExtraVars {
252-
final[k] = d.ExtraVars[k]
253-
}
254-
//Marshalling back the map to JSON
255-
finalJSON, err := json.Marshal(final)
256-
if err != nil {
257-
return fmt.Errorf("failed to marshal provider into JSON: %v", err)
248+
klog.Infof("Ansible params exposed under groupvars: %v", string(ansibleParams))
249+
// Unmarshalling commonJSON into map to add extra-vars
250+
combinedAnsibleVars := map[string]string{}
251+
if err = json.Unmarshal(ansibleParams, &combinedAnsibleVars); err != nil {
252+
return fmt.Errorf("failed to unmarshal ansible group variables: %v", err)
258253
}
259-
klog.Infof("finalJSON with extra vars: %v", string(finalJSON))
260254

261-
exitcode, err := ansible.Playbook(d.tmpDir, filepath.Join(d.tmpDir, "hosts"), string(finalJSON), d.Playbook)
255+
// Add-in the extra-vars set to the final set.
256+
maps.Insert(combinedAnsibleVars, maps.All(d.ExtraVars))
257+
klog.Infof("Updated ansible variables with extra vars: %+v", combinedAnsibleVars)
258+
err = ansible.Playbook(d.tmpDir, filepath.Join(d.tmpDir, "hosts"), d.Playbook, combinedAnsibleVars)
262259
if err != nil {
263-
return fmt.Errorf("failed to run ansible playbook: %v\n with exit code: %d", err, exitcode)
260+
return fmt.Errorf("failed to run ansible playbook: %v", err)
264261
}
265262

266263
if d.SetKubeconfig {
267264
if err = setKubeconfig(inventory.Masters[0]); err != nil {
268265
return fmt.Errorf("failed to setKubeconfig: %v", err)
269266
}
270-
fmt.Printf("KUBECONFIG set to: %s\n", os.Getenv("KUBECONFIG"))
267+
klog.Infof("KUBECONFIG set to: %s", os.Getenv("KUBECONFIG"))
271268
}
272269

273270
if isUp, err := d.IsUp(); err != nil {
274271
klog.Warningf("failed to check if cluster is up: %v", err)
275272
} else if isUp {
276-
klog.V(1).Infof("cluster reported as up")
273+
klog.V(1).Info("cluster reported as up")
277274
} else {
278-
klog.Errorf("cluster reported as down")
275+
klog.Error("cluster reported as down")
279276
}
280277

281278
klog.Infof("Dumping cluster info..")
@@ -294,7 +291,7 @@ func setKubeconfig(host string) error {
294291

295292
config, err := clientcmd.LoadFromFile(common.CommonProvider.KubeconfigPath)
296293
if err != nil {
297-
klog.Error("failed to load the kubeconfig file")
294+
klog.Errorf("failed to load the kubeconfig file. error: %v", err)
298295
}
299296
for i := range config.Clusters {
300297
surl, err := url.Parse(config.Clusters[i].Server)
@@ -324,7 +321,7 @@ func (d *deployer) Down() error {
324321
if err := d.init(); err != nil {
325322
return fmt.Errorf("down failed to init: %s", err)
326323
}
327-
err := terraform.Destroy(d.tmpDir, d.TargetProvider, d.AutoApprove)
324+
err := terraform.Destroy(d.tmpDir, d.TargetProvider)
328325
if err != nil {
329326
if common.CommonProvider.IgnoreDestroy {
330327
klog.Infof("terraform.Destroy failed: %v", err)

kubetest2-tf/go.mod

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ toolchain go1.24.1
66

77
require (
88
github.com/IBM/ibm-cos-sdk-go v1.12.1
9+
github.com/apenella/go-ansible/v2 v2.1.1
10+
github.com/hashicorp/terraform-exec v0.22.0
911
github.com/octago/sflags v0.3.1
10-
github.com/pkg/errors v0.9.1
1112
github.com/spf13/pflag v1.0.6
1213
k8s.io/client-go v0.32.2
1314
k8s.io/cluster-bootstrap v0.32.2
@@ -54,6 +55,9 @@ require (
5455
github.com/alibabacloud-go/tea-utils v1.4.5 // indirect
5556
github.com/alibabacloud-go/tea-xml v1.1.3 // indirect
5657
github.com/aliyun/credentials-go v1.3.2 // indirect
58+
github.com/apenella/go-common-utils/data v0.0.0-20220913191136-86daaa87e7df // indirect
59+
github.com/apenella/go-common-utils/error v0.0.0-20220913191136-86daaa87e7df // indirect
60+
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
5761
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
5862
github.com/aws/aws-sdk-go-v2 v1.30.3 // indirect
5963
github.com/aws/aws-sdk-go-v2/config v1.27.27 // indirect
@@ -149,7 +153,9 @@ require (
149153
github.com/gorilla/mux v1.8.1 // indirect
150154
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
151155
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
156+
github.com/hashicorp/go-version v1.7.0 // indirect
152157
github.com/hashicorp/hcl v1.0.1-vault-5 // indirect
158+
github.com/hashicorp/terraform-json v0.24.0 // indirect
153159
github.com/in-toto/in-toto-golang v0.9.0 // indirect
154160
github.com/inconshreveable/mousetrap v1.1.0 // indirect
155161
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
@@ -187,6 +193,8 @@ require (
187193
github.com/pborman/uuid v1.2.1 // indirect
188194
github.com/pelletier/go-toml/v2 v2.1.1 // indirect
189195
github.com/pjbgf/sha1cd v0.3.0 // indirect
196+
github.com/pkg/errors v0.9.1 // indirect
197+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
190198
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
191199
github.com/prometheus/client_golang v1.20.2 // indirect
192200
github.com/prometheus/client_model v0.6.1 // indirect
@@ -218,6 +226,8 @@ require (
218226
github.com/spf13/cobra v1.8.1 // indirect
219227
github.com/spf13/viper v1.18.2 // indirect
220228
github.com/spiffe/go-spiffe/v2 v2.2.0 // indirect
229+
github.com/stretchr/objx v0.5.2 // indirect
230+
github.com/stretchr/testify v1.10.0 // indirect
221231
github.com/subosito/gotenv v1.6.0 // indirect
222232
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
223233
github.com/tchap/go-patricia/v2 v2.3.1 // indirect
@@ -234,6 +244,7 @@ require (
234244
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
235245
github.com/yashtewari/glob-intersection v0.2.0 // indirect
236246
github.com/yusufpapurcu/wmi v1.2.4 // indirect
247+
github.com/zclconf/go-cty v1.16.1 // indirect
237248
github.com/zeebo/errs v1.3.0 // indirect
238249
gitlab.alpinelinux.org/alpine/go v0.9.0 // indirect
239250
go.mongodb.org/mongo-driver v1.14.0 // indirect
@@ -249,7 +260,7 @@ require (
249260
go.uber.org/zap v1.27.0 // indirect
250261
golang.org/x/crypto v0.36.0 // indirect
251262
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
252-
golang.org/x/mod v0.21.0 // indirect
263+
golang.org/x/mod v0.22.0 // indirect
253264
golang.org/x/net v0.38.0 // indirect
254265
golang.org/x/oauth2 v0.24.0 // indirect
255266
golang.org/x/sync v0.12.0 // indirect

kubetest2-tf/go.sum

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,14 @@ github.com/aliyun/credentials-go v1.3.2 h1:L4WppI9rctC8PdlMgyTkF8bBsy9pyKQEzBD1b
128128
github.com/aliyun/credentials-go v1.3.2/go.mod h1:tlpz4uys4Rn7Ik4/piGRrTbXy2uLKvePgQJJduE+Y5c=
129129
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
130130
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
131+
github.com/apenella/go-ansible/v2 v2.1.1 h1:pYO9LMxdppN8aaNjU2KbDhykjYXoYjYdal7LWMkXJG4=
132+
github.com/apenella/go-ansible/v2 v2.1.1/go.mod h1:ZCPLUK68OKQfWiGqXvNO65o58+nlaIhMZNG7Su2IElM=
133+
github.com/apenella/go-common-utils/data v0.0.0-20220913191136-86daaa87e7df h1:sEikY2P+NZK/7VZUwIsnXIGElhsuFDSxh1bZYwHxdcI=
134+
github.com/apenella/go-common-utils/data v0.0.0-20220913191136-86daaa87e7df/go.mod h1:cLVL6GjUiKG/WyBzX+KD6h/XRV/HnNZIZbMNNiBgQ9o=
135+
github.com/apenella/go-common-utils/error v0.0.0-20220913191136-86daaa87e7df h1:SvlYbjlsSQDS7hbVT1h012/zdgvcwWJ+Yd9XRiiY/8s=
136+
github.com/apenella/go-common-utils/error v0.0.0-20220913191136-86daaa87e7df/go.mod h1:+3dyIlHX350xJIUIffwMLswZXU+N2FwDE05VuKqxYdw=
137+
github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=
138+
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
131139
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
132140
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
133141
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
@@ -286,6 +294,8 @@ github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
286294
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
287295
github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec=
288296
github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
297+
github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
298+
github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
289299
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
290300
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
291301
github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8=
@@ -460,8 +470,16 @@ github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9
460470
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4=
461471
github.com/hashicorp/go-sockaddr v1.0.5 h1:dvk7TIXCZpmfOlM+9mlcrWmWjw/wlKT+VDq2wMvfPJU=
462472
github.com/hashicorp/go-sockaddr v1.0.5/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI=
473+
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
474+
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
475+
github.com/hashicorp/hc-install v0.9.1 h1:gkqTfE3vVbafGQo6VZXcy2v5yoz2bE0+nhZXruCuODQ=
476+
github.com/hashicorp/hc-install v0.9.1/go.mod h1:pWWvN/IrfeBK4XPeXXYkL6EjMufHkCK5DvwxeLKuBf0=
463477
github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM=
464478
github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM=
479+
github.com/hashicorp/terraform-exec v0.22.0 h1:G5+4Sz6jYZfRYUCg6eQgDsqTzkNXV+fP8l+uRmZHj64=
480+
github.com/hashicorp/terraform-exec v0.22.0/go.mod h1:bjVbsncaeh8jVdhttWYZuBGj21FcYw6Ia/XfHcNO7lQ=
481+
github.com/hashicorp/terraform-json v0.24.0 h1:rUiyF+x1kYawXeRth6fKFm/MdfBS6+lW4NbeATsYz8Q=
482+
github.com/hashicorp/terraform-json v0.24.0/go.mod h1:Nfj5ubo9xbu9uiAoZVBsNOjvNKB66Oyrvtit74kC7ow=
465483
github.com/hashicorp/vault/api v1.12.2 h1:7YkCTE5Ni90TcmYHDBExdt4WGJxhpzaHqR6uGbQb/rE=
466484
github.com/hashicorp/vault/api v1.12.2/go.mod h1:LSGf1NGT1BnvFFnKVtnvcaLBM2Lz+gJdpL6HUYed8KE=
467485
github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef h1:A9HsByNhogrvm9cWb28sjiS3i7tcKCkflWFEkHfuAgM=
@@ -669,6 +687,8 @@ github.com/smallstep/assert v0.0.0-20200723003110-82e2b9b3b262/go.mod h1:MyOHs9P
669687
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
670688
github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
671689
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
690+
github.com/sosedoff/ansible-vault-go v0.2.0 h1:XqkBdqbXgTuFQ++NdrZvSdUTNozeb6S3V5x7FVs17vg=
691+
github.com/sosedoff/ansible-vault-go v0.2.0/go.mod h1:wMU54HNJfY0n0KIgbpA9m15NBfaUDlJrAsaZp0FwzkI=
672692
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
673693
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
674694
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
@@ -688,6 +708,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
688708
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
689709
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
690710
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
711+
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
712+
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
691713
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
692714
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
693715
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -751,6 +773,8 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo
751773
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
752774
github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms=
753775
github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk=
776+
github.com/zclconf/go-cty v1.16.1 h1:a5TZEPzBFFR53udlIKApXzj8JIF4ZNQ6abH79z5R1S0=
777+
github.com/zclconf/go-cty v1.16.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
754778
github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs=
755779
github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
756780
gitlab.alpinelinux.org/alpine/go v0.9.0 h1:iOuE0Rcnv73eDvURbWBK+710AsTU7T9LQE/5A5NzK+k=
@@ -811,8 +835,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
811835
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
812836
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
813837
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
814-
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
815-
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
838+
golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
839+
golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
816840
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
817841
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
818842
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=

0 commit comments

Comments
 (0)