Skip to content

Commit fda0793

Browse files
Leverage central context in assets
Refactoring in preparation for context wiring in OpenStack.
1 parent c84151a commit fda0793

File tree

18 files changed

+181
-90
lines changed

18 files changed

+181
-90
lines changed

pkg/asset/cluster/cluster.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func (c *Cluster) Dependencies() []asset.Asset {
8080
}
8181
}
8282

83-
// Generate launches the cluster and generates the terraform state file on disk.
83+
// GenerateWithContext launches the cluster and generates the terraform state file on disk.
8484
func (c *Cluster) GenerateWithContext(ctx context.Context, parents asset.Parents) (err error) {
8585
if InstallDir == "" {
8686
logrus.Fatalf("InstallDir has not been set for the %q asset", c.Name())
@@ -115,11 +115,11 @@ func (c *Cluster) GenerateWithContext(ctx context.Context, parents asset.Parents
115115
logrus.Infof("Creating infrastructure resources...")
116116
switch platform {
117117
case typesaws.Name:
118-
if err := aws.PreTerraform(context.TODO(), clusterID.InfraID, installConfig); err != nil {
118+
if err := aws.PreTerraform(ctx, clusterID.InfraID, installConfig); err != nil {
119119
return err
120120
}
121121
case typesazure.Name, typesazure.StackTerraformName:
122-
if err := azure.PreTerraform(context.TODO(), clusterID.InfraID, installConfig); err != nil {
122+
if err := azure.PreTerraform(ctx, clusterID.InfraID, installConfig); err != nil {
123123
return err
124124
}
125125
case typesopenstack.Name:
@@ -130,7 +130,7 @@ func (c *Cluster) GenerateWithContext(ctx context.Context, parents asset.Parents
130130
break
131131
}
132132
}
133-
if err := openstack.PreTerraform(context.TODO(), tfvarsFile, installConfig, clusterID, rhcosImage); err != nil {
133+
if err := openstack.PreTerraform(ctx, tfvarsFile, installConfig, clusterID, rhcosImage); err != nil {
134134
return err
135135
}
136136
}

pkg/asset/installconfig/installconfig.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ func (a *InstallConfig) Dependencies() []asset.Asset {
6060
}
6161
}
6262

63-
// Generate generates the install-config.yaml file.
64-
func (a *InstallConfig) Generate(parents asset.Parents) error {
63+
// GenerateWithContext generates the install-config.yaml file.
64+
func (a *InstallConfig) GenerateWithContext(ctx context.Context, parents asset.Parents) error {
6565
sshPublicKey := &sshPublicKey{}
6666
baseDomain := &baseDomain{}
6767
clusterName := &clusterName{}
@@ -103,14 +103,15 @@ func (a *InstallConfig) Generate(parents asset.Parents) error {
103103

104104
defaults.SetInstallConfigDefaults(a.Config)
105105

106-
return a.finish("")
106+
return a.finish(ctx, "")
107107
}
108108

109109
// Load returns the installconfig from disk.
110110
func (a *InstallConfig) Load(f asset.FileFetcher) (found bool, err error) {
111+
ctx := context.TODO()
111112
found, err = a.LoadFromFile(f)
112113
if found && err == nil {
113-
if err := a.finish(installConfigFilename); err != nil {
114+
if err := a.finish(ctx, installConfigFilename); err != nil {
114115
return false, errors.Wrap(err, asset.InstallConfigError)
115116
}
116117
}
@@ -138,7 +139,7 @@ func (a *InstallConfig) finishAWS() error {
138139
return nil
139140
}
140141

141-
func (a *InstallConfig) finish(filename string) error {
142+
func (a *InstallConfig) finish(ctx context.Context, filename string) error {
142143
if a.Config.AWS != nil {
143144
a.AWS = aws.NewMetadata(a.Config.Platform.AWS.Region, a.Config.Platform.AWS.Subnets, a.Config.AWS.ServiceEndpoints)
144145
if err := a.finishAWS(); err != nil {
@@ -169,7 +170,7 @@ func (a *InstallConfig) finish(filename string) error {
169170
return errors.Wrapf(err, "invalid %q file", filename)
170171
}
171172

172-
if err := a.platformValidation(); err != nil {
173+
if err := a.platformValidation(ctx); err != nil {
173174
return err
174175
}
175176

@@ -179,7 +180,7 @@ func (a *InstallConfig) finish(filename string) error {
179180
// platformValidation runs validations that require connecting to the
180181
// underlying platform. In some cases, platforms also duplicate validations
181182
// that have already been checked by validation.ValidateInstallConfig().
182-
func (a *InstallConfig) platformValidation() error {
183+
func (a *InstallConfig) platformValidation(ctx context.Context) error {
183184
if a.Config.Platform.Azure != nil {
184185
if a.Config.Platform.Azure.IsARO() {
185186
// ARO performs platform validation in the Resource Provider before
@@ -193,7 +194,7 @@ func (a *InstallConfig) platformValidation() error {
193194
return icazure.Validate(client, a.Config)
194195
}
195196
if a.Config.Platform.GCP != nil {
196-
client, err := icgcp.NewClient(context.TODO())
197+
client, err := icgcp.NewClient(ctx)
197198
if err != nil {
198199
return err
199200
}
@@ -212,7 +213,7 @@ func (a *InstallConfig) platformValidation() error {
212213
return icibmcloud.Validate(client, a.Config)
213214
}
214215
if a.Config.Platform.AWS != nil {
215-
return aws.Validate(context.TODO(), a.AWS, a.Config)
216+
return aws.Validate(ctx, a.AWS, a.Config)
216217
}
217218
if a.Config.Platform.VSphere != nil {
218219
return icvsphere.Validate(a.Config)
@@ -231,3 +232,9 @@ func (a *InstallConfig) platformValidation() error {
231232
}
232233
return field.ErrorList{}.ToAggregate()
233234
}
235+
236+
// Generate is implemented so this asset maintains compatibility with the Asset
237+
// interface. It should never be called.
238+
func (*InstallConfig) Generate(_ asset.Parents) (err error) {
239+
panic("InstallConfig.Generate was called instead of InstallConfig.GenerateWithContext")
240+
}

pkg/asset/installconfig/installconfig_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package installconfig
22

33
import (
4+
"context"
45
"errors"
56
"os"
67
"testing"
@@ -35,7 +36,7 @@ func TestInstallConfigGenerate_FillsInDefaults(t *testing.T) {
3536
pullSecret,
3637
platform,
3738
)
38-
if err := installConfig.Generate(parents); err != nil {
39+
if err := installConfig.GenerateWithContext(context.Background(), parents); err != nil {
3940
t.Errorf("unexpected error generating install config: %v", err)
4041
}
4142
expected := &types.InstallConfig{

pkg/asset/installconfig/platform.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package installconfig
22

33
import (
4+
"context"
45
"fmt"
56
"sort"
67

@@ -48,8 +49,8 @@ func (a *platform) Dependencies() []asset.Asset {
4849
return []asset.Asset{}
4950
}
5051

51-
// Generate queries for input from the user.
52-
func (a *platform) Generate(asset.Parents) error {
52+
// GenerateWithContext queries for input from the user.
53+
func (a *platform) GenerateWithContext(ctx context.Context, _ asset.Parents) error {
5354
platform, err := a.queryUserForPlatform()
5455
if err != nil {
5556
return err
@@ -148,3 +149,9 @@ func (a *platform) queryUserForPlatform() (platform string, err error) {
148149
func (a *platform) CurrentName() string {
149150
return a.Platform.Name()
150151
}
152+
153+
// Generate is implemented so this asset maintains compatibility with the Asset
154+
// interface. It should never be called.
155+
func (*platform) Generate(_ asset.Parents) (err error) {
156+
panic("platform.Generate was called instead of platform.GenerateWithContext")
157+
}

pkg/asset/machines/clusterapi.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ func (c *ClusterAPI) Dependencies() []asset.Asset {
6868
}
6969
}
7070

71-
// Generate generates Cluster API machine manifests.
71+
// GenerateWithContext generates Cluster API machine manifests.
7272
//
7373
//nolint:gocyclo
74-
func (c *ClusterAPI) Generate(dependencies asset.Parents) error {
74+
func (c *ClusterAPI) GenerateWithContext(ctx context.Context, dependencies asset.Parents) error {
7575
installConfig := &installconfig.InstallConfig{}
7676
clusterID := &installconfig.ClusterID{}
7777
rhcosImage := new(rhcos.Image)
@@ -87,7 +87,6 @@ func (c *ClusterAPI) Generate(dependencies asset.Parents) error {
8787
var err error
8888
ic := installConfig.Config
8989
pool := *ic.ControlPlane
90-
ctx := context.TODO()
9190

9291
switch ic.Platform.Name() {
9392
case awstypes.Name:
@@ -234,7 +233,7 @@ func (c *ClusterAPI) Generate(dependencies asset.Parents) error {
234233
mpool.Zones = []string{""}
235234
}
236235
if len(mpool.Zones) == 0 {
237-
azs, err := client.GetAvailabilityZones(context.TODO(), ic.Platform.Azure.Region, mpool.InstanceType)
236+
azs, err := client.GetAvailabilityZones(ctx, ic.Platform.Azure.Region, mpool.InstanceType)
238237
if err != nil {
239238
return fmt.Errorf("failed to fetch availability zones: %w", err)
240239
}
@@ -245,10 +244,10 @@ func (c *ClusterAPI) Generate(dependencies asset.Parents) error {
245244
mpool.Zones = []string{""}
246245
}
247246
}
248-
// client.GetControlPlaneSubnet(context.TODO(), ic.Platform.Azure.ResourceGroupName, ic.Platform.Azure.VirtualNetwork, )
247+
// client.GetControlPlaneSubnet(ctx, ic.Platform.Azure.ResourceGroupName, ic.Platform.Azure.VirtualNetwork, )
249248

250249
if mpool.OSImage.Publisher != "" {
251-
img, ierr := client.GetMarketplaceImage(context.TODO(), ic.Platform.Azure.Region, mpool.OSImage.Publisher, mpool.OSImage.Offer, mpool.OSImage.SKU, mpool.OSImage.Version)
250+
img, ierr := client.GetMarketplaceImage(ctx, ic.Platform.Azure.Region, mpool.OSImage.Publisher, mpool.OSImage.Offer, mpool.OSImage.SKU, mpool.OSImage.Version)
252251
if ierr != nil {
253252
return fmt.Errorf("failed to fetch marketplace image: %w", ierr)
254253
}
@@ -262,7 +261,7 @@ func (c *ClusterAPI) Generate(dependencies asset.Parents) error {
262261
pool.Platform.Azure = &mpool
263262
subnet := ic.Azure.ControlPlaneSubnet
264263

265-
capabilities, err := client.GetVMCapabilities(context.TODO(), mpool.InstanceType, installConfig.Config.Platform.Azure.Region)
264+
capabilities, err := client.GetVMCapabilities(ctx, mpool.InstanceType, installConfig.Config.Platform.Azure.Region)
266265
if err != nil {
267266
return err
268267
}
@@ -337,7 +336,7 @@ func (c *ClusterAPI) Generate(dependencies asset.Parents) error {
337336
// that the installer's install-config has been provided with bogus values.
338337

339338
// Timeout context for Lookup
340-
ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second)
339+
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
341340
defer cancel()
342341

343342
_, err := resolver.LookupHost(ctx, v.Server)
@@ -349,7 +348,7 @@ func (c *ClusterAPI) Generate(dependencies asset.Parents) error {
349348
// Timeout context for Networks
350349
// vCenter APIs can be unreliable in performance, extended this context
351350
// timeout to 60 seconds.
352-
ctx, cancel = context.WithTimeout(context.TODO(), 60*time.Second)
351+
ctx, cancel = context.WithTimeout(ctx, 60*time.Second)
353352
defer cancel()
354353

355354
err = installConfig.VSphere.Networks(ctx, v, platform.FailureDomains)
@@ -521,3 +520,9 @@ func (c *ClusterAPI) Load(f asset.FileFetcher) (bool, error) {
521520
asset.SortManifestFiles(c.FileList)
522521
return len(c.FileList) > 0, nil
523522
}
523+
524+
// Generate is implemented so this asset maintains compatibility with the Asset
525+
// interface. It should never be called.
526+
func (*ClusterAPI) Generate(_ asset.Parents) (err error) {
527+
panic("ClusterAPI.Generate was called instead of ClusterAPI.GenerateWithContext")
528+
}

pkg/asset/machines/master.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,10 @@ func (m *Master) Dependencies() []asset.Asset {
154154
}
155155
}
156156

157-
// Generate generates the Master asset.
158-
func (m *Master) Generate(dependencies asset.Parents) error {
159-
ctx := context.TODO()
157+
// GenerateWithContext generates the Master asset.
158+
//
159+
//nolint:gocyclo
160+
func (m *Master) GenerateWithContext(ctx context.Context, dependencies asset.Parents) error {
160161
clusterID := &installconfig.ClusterID{}
161162
installConfig := &installconfig.InstallConfig{}
162163
rhcosImage := new(rhcos.Image)
@@ -357,7 +358,7 @@ func (m *Master) Generate(dependencies asset.Parents) error {
357358

358359
client := icazure.NewClient(session)
359360
if len(mpool.Zones) == 0 {
360-
azs, err := client.GetAvailabilityZones(context.TODO(), ic.Platform.Azure.Region, mpool.InstanceType)
361+
azs, err := client.GetAvailabilityZones(ctx, ic.Platform.Azure.Region, mpool.InstanceType)
361362
if err != nil {
362363
return errors.Wrap(err, "failed to fetch availability zones")
363364
}
@@ -370,7 +371,7 @@ func (m *Master) Generate(dependencies asset.Parents) error {
370371
}
371372

372373
if mpool.OSImage.Publisher != "" {
373-
img, ierr := client.GetMarketplaceImage(context.TODO(), ic.Platform.Azure.Region, mpool.OSImage.Publisher, mpool.OSImage.Offer, mpool.OSImage.SKU, mpool.OSImage.Version)
374+
img, ierr := client.GetMarketplaceImage(ctx, ic.Platform.Azure.Region, mpool.OSImage.Publisher, mpool.OSImage.Offer, mpool.OSImage.SKU, mpool.OSImage.Version)
374375
if ierr != nil {
375376
return fmt.Errorf("failed to fetch marketplace image: %w", ierr)
376377
}
@@ -383,7 +384,7 @@ func (m *Master) Generate(dependencies asset.Parents) error {
383384
}
384385
pool.Platform.Azure = &mpool
385386

386-
capabilities, err := client.GetVMCapabilities(context.TODO(), mpool.InstanceType, installConfig.Config.Platform.Azure.Region)
387+
capabilities, err := client.GetVMCapabilities(ctx, mpool.InstanceType, installConfig.Config.Platform.Azure.Region)
387388
if err != nil {
388389
return err
389390
}
@@ -877,3 +878,9 @@ func createAssetFiles(objects []interface{}, fileName string) ([]*asset.File, er
877878

878879
return assetFiles, nil
879880
}
881+
882+
// Generate is implemented so this asset maintains compatibility with the Asset
883+
// interface. It should never be called.
884+
func (*Master) Generate(_ asset.Parents) (err error) {
885+
panic("Master.Generate was called instead of Master.GenerateWithContext")
886+
}

pkg/asset/machines/master_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package machines
22

33
import (
4+
"context"
45
"fmt"
56
"testing"
67

@@ -173,7 +174,7 @@ spec:
173174
},
174175
)
175176
master := &Master{}
176-
if err := master.Generate(parents); err != nil {
177+
if err := master.GenerateWithContext(context.Background(), parents); err != nil {
177178
t.Fatalf("failed to generate master machines: %v", err)
178179
}
179180
expectedLen := len(tc.expectedMachineConfig)
@@ -232,7 +233,7 @@ func TestControlPlaneIsNotModified(t *testing.T) {
232233
},
233234
)
234235
master := &Master{}
235-
if err := master.Generate(parents); err != nil {
236+
if err := master.GenerateWithContext(context.Background(), parents); err != nil {
236237
t.Fatalf("failed to generate master machines: %v", err)
237238
}
238239

@@ -301,7 +302,7 @@ func TestBaremetalGeneratedAssetFiles(t *testing.T) {
301302
},
302303
)
303304
master := &Master{}
304-
assert.NoError(t, master.Generate(parents))
305+
assert.NoError(t, master.GenerateWithContext(context.Background(), parents))
305306

306307
assert.Len(t, master.HostFiles, 2)
307308
verifyHost(t, master.HostFiles[0], "openshift/99_openshift-cluster-api_hosts-0.yaml", "master-0")

pkg/asset/machines/worker.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,10 @@ func (w *Worker) Dependencies() []asset.Asset {
267267
}
268268
}
269269

270-
// Generate generates the Worker asset.
271-
func (w *Worker) Generate(dependencies asset.Parents) error {
272-
ctx := context.TODO()
270+
// GenerateWithContext generates the Worker asset.
271+
//
272+
//nolint:gocyclo
273+
func (w *Worker) GenerateWithContext(ctx context.Context, dependencies asset.Parents) error {
273274
clusterID := &installconfig.ClusterID{}
274275
installConfig := &installconfig.InstallConfig{}
275276
rhcosImage := new(rhcos.Image)
@@ -461,7 +462,7 @@ func (w *Worker) Generate(dependencies asset.Parents) error {
461462

462463
client := icazure.NewClient(session)
463464
if len(mpool.Zones) == 0 {
464-
azs, err := client.GetAvailabilityZones(context.TODO(), ic.Platform.Azure.Region, mpool.InstanceType)
465+
azs, err := client.GetAvailabilityZones(ctx, ic.Platform.Azure.Region, mpool.InstanceType)
465466
if err != nil {
466467
return errors.Wrap(err, "failed to fetch availability zones")
467468
}
@@ -474,7 +475,7 @@ func (w *Worker) Generate(dependencies asset.Parents) error {
474475
}
475476

476477
if mpool.OSImage.Publisher != "" {
477-
img, ierr := client.GetMarketplaceImage(context.TODO(), ic.Platform.Azure.Region, mpool.OSImage.Publisher, mpool.OSImage.Offer, mpool.OSImage.SKU, mpool.OSImage.Version)
478+
img, ierr := client.GetMarketplaceImage(ctx, ic.Platform.Azure.Region, mpool.OSImage.Publisher, mpool.OSImage.Offer, mpool.OSImage.SKU, mpool.OSImage.Version)
478479
if ierr != nil {
479480
return fmt.Errorf("failed to fetch marketplace image: %w", ierr)
480481
}
@@ -487,7 +488,7 @@ func (w *Worker) Generate(dependencies asset.Parents) error {
487488
}
488489
pool.Platform.Azure = &mpool
489490

490-
capabilities, err := client.GetVMCapabilities(context.TODO(), mpool.InstanceType, installConfig.Config.Platform.Azure.Region)
491+
capabilities, err := client.GetVMCapabilities(ctx, mpool.InstanceType, installConfig.Config.Platform.Azure.Region)
491492
if err != nil {
492493
return err
493494
}
@@ -855,3 +856,9 @@ func (w *Worker) MachineSets() ([]machinev1beta1.MachineSet, error) {
855856

856857
return machineSets, nil
857858
}
859+
860+
// Generate is implemented so this asset maintains compatibility with the Asset
861+
// interface. It should never be called.
862+
func (*Worker) Generate(_ asset.Parents) (err error) {
863+
panic("Worker.Generate was called instead of Worker.GenerateWithContext")
864+
}

0 commit comments

Comments
 (0)