From 45d11ba12cc6efc3e8f216b22c01d42a2e12c55e Mon Sep 17 00:00:00 2001 From: Justin SB Date: Sat, 19 Dec 2020 08:06:07 -0500 Subject: [PATCH] Replace (some) deprecated ResourceHolder with Resource This removes more of the deprecated type, but it also simplifies refactoring the GCE InstanceTemplate. --- pkg/model/bootstrapscript.go | 6 +++--- pkg/model/bootstrapscript_test.go | 2 +- pkg/model/gcemodel/autoscalinggroup.go | 6 +++--- upup/pkg/fi/cloudup/alitasks/launchconfiguration.go | 6 +++--- upup/pkg/fi/cloudup/awstasks/launchconfiguration.go | 6 +++--- upup/pkg/fi/cloudup/awstasks/launchtemplate.go | 2 +- .../fi/cloudup/awstasks/launchtemplate_target_api.go | 2 +- .../awstasks/launchtemplate_target_cloudformation.go | 2 +- .../awstasks/launchtemplate_target_terraform.go | 2 +- upup/pkg/fi/cloudup/dotasks/droplet.go | 4 ++-- upup/pkg/fi/cloudup/gcetasks/instancetemplate.go | 6 +++--- upup/pkg/fi/cloudup/openstacktasks/instance.go | 6 +++--- upup/pkg/fi/cloudup/spotinsttasks/elastigroup.go | 8 ++++---- upup/pkg/fi/cloudup/spotinsttasks/launch_spec.go | 8 ++++---- upup/pkg/fi/cloudup/spotinsttasks/ocean.go | 8 ++++---- upup/pkg/fi/topological_sort.go | 10 ++++++++++ 16 files changed, 47 insertions(+), 37 deletions(-) diff --git a/pkg/model/bootstrapscript.go b/pkg/model/bootstrapscript.go index dbfb74f7de..4e67533a76 100644 --- a/pkg/model/bootstrapscript.go +++ b/pkg/model/bootstrapscript.go @@ -187,14 +187,14 @@ func (b *BootstrapScript) buildEnvironmentVariables(cluster *kops.Cluster) (map[ // ResourceNodeUp generates and returns a nodeup (bootstrap) script from a // template file, substituting in specific env vars & cluster spec configuration -func (b *BootstrapScriptBuilder) ResourceNodeUp(c *fi.ModelBuilderContext, ig *kops.InstanceGroup) (*fi.ResourceHolder, error) { +func (b *BootstrapScriptBuilder) ResourceNodeUp(c *fi.ModelBuilderContext, ig *kops.InstanceGroup) (fi.Resource, error) { // Bastions can have AdditionalUserData, but if there isn't any skip this part if ig.IsBastion() && len(ig.Spec.AdditionalUserData) == 0 { templateResource, err := NewTemplateResource("nodeup", "", nil, nil) if err != nil { return nil, err } - return fi.WrapResource(templateResource), nil + return templateResource, nil } task := &BootstrapScript{ @@ -204,7 +204,7 @@ func (b *BootstrapScriptBuilder) ResourceNodeUp(c *fi.ModelBuilderContext, ig *k } task.resource.Task = task c.AddTask(task) - return fi.WrapResource(&task.resource), nil + return &task.resource, nil } func (b *BootstrapScript) GetName() *string { diff --git a/pkg/model/bootstrapscript_test.go b/pkg/model/bootstrapscript_test.go index 9b48ec2e95..4843f3b425 100644 --- a/pkg/model/bootstrapscript_test.go +++ b/pkg/model/bootstrapscript_test.go @@ -150,7 +150,7 @@ func TestBootstrapUserData(t *testing.T) { err = c.Tasks["BootstrapScript/testIG"].Run(&fi.Context{Cluster: cluster}) require.NoError(t, err, "running task") - actual, err := res.AsString() + actual, err := fi.ResourceAsString(res) if err != nil { t.Errorf("case %d failed to render nodeup resource. error: %s", i, err) continue diff --git a/pkg/model/gcemodel/autoscalinggroup.go b/pkg/model/gcemodel/autoscalinggroup.go index 38801caccd..da71b6ad35 100644 --- a/pkg/model/gcemodel/autoscalinggroup.go +++ b/pkg/model/gcemodel/autoscalinggroup.go @@ -89,11 +89,11 @@ func (b *AutoscalingGroupModelBuilder) Build(c *fi.ModelBuilderContext) error { "monitoring", "logging-write", }, - Metadata: map[string]*fi.ResourceHolder{ + Metadata: map[string]fi.Resource{ "startup-script": startupScript, //"config": resources/config.yaml $nodeset.Name - "cluster-name": fi.WrapResource(fi.NewStringResource(b.ClusterName())), - nodeidentitygce.MetadataKeyInstanceGroupName: fi.WrapResource(fi.NewStringResource(ig.Name)), + "cluster-name": fi.NewStringResource(b.ClusterName()), + nodeidentitygce.MetadataKeyInstanceGroupName: fi.NewStringResource(ig.Name), }, } diff --git a/upup/pkg/fi/cloudup/alitasks/launchconfiguration.go b/upup/pkg/fi/cloudup/alitasks/launchconfiguration.go index c498948f3c..911a420001 100644 --- a/upup/pkg/fi/cloudup/alitasks/launchconfiguration.go +++ b/upup/pkg/fi/cloudup/alitasks/launchconfiguration.go @@ -65,7 +65,7 @@ type LaunchConfiguration struct { RAMRole *RAMRole ScalingGroup *ScalingGroup SSHKey *SSHKey - UserData *fi.ResourceHolder + UserData fi.Resource SecurityGroup *SecurityGroup Tags map[string]string @@ -246,7 +246,7 @@ func (_ *LaunchConfiguration) RenderALI(t *aliup.ALIAPITarget, a, e, changes *La } if e.UserData != nil { - userData, err := e.UserData.AsString() + userData, err := fi.ResourceAsString(e.UserData) if err != nil { return fmt.Errorf("error rendering ScalingLaunchConfiguration UserData: %v", err) } @@ -314,7 +314,7 @@ type terraformLaunchConfiguration struct { } func (_ *LaunchConfiguration) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *LaunchConfiguration) error { - data, err := e.UserData.AsBytes() + data, err := fi.ResourceAsBytes(e.UserData) if err != nil { return fmt.Errorf("error rendering ScalingLaunchConfiguration UserData: %v", err) } diff --git a/upup/pkg/fi/cloudup/awstasks/launchconfiguration.go b/upup/pkg/fi/cloudup/awstasks/launchconfiguration.go index 22acd1ea1c..471b582eff 100644 --- a/upup/pkg/fi/cloudup/awstasks/launchconfiguration.go +++ b/upup/pkg/fi/cloudup/awstasks/launchconfiguration.go @@ -95,7 +95,7 @@ type LaunchConfiguration struct { // Tenancy. Can be either default or dedicated. Tenancy *string // UserData is the user data configuration - UserData *fi.ResourceHolder + UserData fi.Resource } var _ fi.CompareWithID = &LaunchConfiguration{} @@ -349,7 +349,7 @@ func (_ *LaunchConfiguration) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *La } if e.UserData != nil { - d, err := e.UserData.AsBytes() + d, err := fi.ResourceAsBytes(e.UserData) if err != nil { return fmt.Errorf("error rendering AutoScalingLaunchConfiguration UserData: %v", err) } @@ -694,7 +694,7 @@ func (_ *LaunchConfiguration) RenderCloudformation(t *cloudformation.Cloudformat } if e.UserData != nil { - d, err := e.UserData.AsBytes() + d, err := fi.ResourceAsBytes(e.UserData) if err != nil { return fmt.Errorf("error rendering AutoScalingLaunchConfiguration UserData: %v", err) } diff --git a/upup/pkg/fi/cloudup/awstasks/launchtemplate.go b/upup/pkg/fi/cloudup/awstasks/launchtemplate.go index 36aa0ec1af..ef654e4a34 100644 --- a/upup/pkg/fi/cloudup/awstasks/launchtemplate.go +++ b/upup/pkg/fi/cloudup/awstasks/launchtemplate.go @@ -79,7 +79,7 @@ type LaunchTemplate struct { // Tenancy. Can be either default or dedicated. Tenancy *string // UserData is the user data configuration - UserData *fi.ResourceHolder + UserData fi.Resource } var ( diff --git a/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_api.go b/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_api.go index 6f59888392..8ba375d342 100644 --- a/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_api.go +++ b/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_api.go @@ -117,7 +117,7 @@ func (t *LaunchTemplate) RenderAWS(c *awsup.AWSAPITarget, a, e, changes *LaunchT } // @step: add the userdata if t.UserData != nil { - d, err := t.UserData.AsBytes() + d, err := fi.ResourceAsBytes(t.UserData) if err != nil { return fmt.Errorf("error rendering LaunchTemplate UserData: %v", err) } diff --git a/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_cloudformation.go b/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_cloudformation.go index ed2946be64..275080fa20 100644 --- a/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_cloudformation.go +++ b/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_cloudformation.go @@ -232,7 +232,7 @@ func (t *LaunchTemplate) RenderCloudformation(target *cloudformation.Cloudformat } } if e.UserData != nil { - d, err := e.UserData.AsBytes() + d, err := fi.ResourceAsBytes(e.UserData) if err != nil { return err } diff --git a/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_terraform.go b/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_terraform.go index 048ece621b..31236d9683 100644 --- a/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_terraform.go +++ b/upup/pkg/fi/cloudup/awstasks/launchtemplate_target_terraform.go @@ -235,7 +235,7 @@ func (t *LaunchTemplate) RenderTerraform(target *terraform.TerraformTarget, a, e } } if e.UserData != nil { - d, err := e.UserData.AsBytes() + d, err := fi.ResourceAsBytes(e.UserData) if err != nil { return err } diff --git a/upup/pkg/fi/cloudup/dotasks/droplet.go b/upup/pkg/fi/cloudup/dotasks/droplet.go index b15dac9ad0..b983462a9f 100644 --- a/upup/pkg/fi/cloudup/dotasks/droplet.go +++ b/upup/pkg/fi/cloudup/dotasks/droplet.go @@ -42,7 +42,7 @@ type Droplet struct { SSHKey *string Tags []string Count int - UserData *fi.ResourceHolder + UserData fi.Resource } var _ fi.Task = &Droplet{} @@ -120,7 +120,7 @@ func (d *Droplet) Run(c *fi.Context) error { } func (_ *Droplet) RenderDO(t *do.DOAPITarget, a, e, changes *Droplet) error { - userData, err := e.UserData.AsString() + userData, err := fi.ResourceAsString(e.UserData) if err != nil { return err } diff --git a/upup/pkg/fi/cloudup/gcetasks/instancetemplate.go b/upup/pkg/fi/cloudup/gcetasks/instancetemplate.go index ad250f58e0..ea24bc3035 100644 --- a/upup/pkg/fi/cloudup/gcetasks/instancetemplate.go +++ b/upup/pkg/fi/cloudup/gcetasks/instancetemplate.go @@ -61,7 +61,7 @@ type InstanceTemplate struct { Scopes []string ServiceAccounts []string - Metadata map[string]*fi.ResourceHolder + Metadata map[string]fi.Resource MachineType *string // ID is the actual name @@ -166,7 +166,7 @@ func (e *InstanceTemplate) Find(c *fi.Context) (*InstanceTemplate, error) { //} if p.Metadata != nil { - actual.Metadata = make(map[string]*fi.ResourceHolder) + actual.Metadata = make(map[string]fi.Resource) for _, meta := range p.Metadata.Items { actual.Metadata[meta.Key] = fi.WrapResource(fi.NewStringResource(fi.StringValue(meta.Value))) } @@ -301,7 +301,7 @@ func (e *InstanceTemplate) mapToGCE(project string, region string) (*compute.Ins var metadataItems []*compute.MetadataItems for key, r := range e.Metadata { - v, err := r.AsString() + v, err := fi.ResourceAsString(r) if err != nil { return nil, fmt.Errorf("error rendering InstanceTemplate metadata %q: %v", key, err) } diff --git a/upup/pkg/fi/cloudup/openstacktasks/instance.go b/upup/pkg/fi/cloudup/openstacktasks/instance.go index c9b5f0c776..b30d8bb348 100644 --- a/upup/pkg/fi/cloudup/openstacktasks/instance.go +++ b/upup/pkg/fi/cloudup/openstacktasks/instance.go @@ -43,7 +43,7 @@ type Instance struct { SSHKey *string ServerGroup *ServerGroup Role *string - UserData *fi.ResourceHolder + UserData fi.Resource Metadata map[string]string AvailabilityZone *string SecurityGroups []string @@ -73,7 +73,7 @@ func (e *Instance) GetDependencies(tasks map[string]fi.Task) []fi.Task { } if e.UserData != nil { - deps = append(deps, e.UserData.GetDependencies(tasks)...) + deps = append(deps, fi.FindDependencies(tasks, e.UserData)...) } return deps @@ -266,7 +266,7 @@ func (_ *Instance) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, change SecurityGroups: e.SecurityGroups, } if e.UserData != nil { - bytes, err := e.UserData.AsBytes() + bytes, err := fi.ResourceAsBytes(e.UserData) if err != nil { return err } diff --git a/upup/pkg/fi/cloudup/spotinsttasks/elastigroup.go b/upup/pkg/fi/cloudup/spotinsttasks/elastigroup.go index 66fcafb44f..0bd2e772be 100644 --- a/upup/pkg/fi/cloudup/spotinsttasks/elastigroup.go +++ b/upup/pkg/fi/cloudup/spotinsttasks/elastigroup.go @@ -58,7 +58,7 @@ type Elastigroup struct { Product *string Orientation *string Tags map[string]string - UserData *fi.ResourceHolder + UserData fi.Resource ImageID *string OnDemandInstanceType *string SpotInstanceTypes []string @@ -147,7 +147,7 @@ func (e *Elastigroup) GetDependencies(tasks map[string]fi.Task) []fi.Task { } if e.UserData != nil { - deps = append(deps, e.UserData.GetDependencies(tasks)...) + deps = append(deps, fi.FindDependencies(tasks, e.UserData)...) } return deps @@ -584,7 +584,7 @@ func (_ *Elastigroup) create(cloud awsup.AWSCloud, a, e, changes *Elastigroup) e // User data. { if e.UserData != nil { - userData, err := e.UserData.AsString() + userData, err := fi.ResourceAsString(e.UserData) if err != nil { return err } @@ -953,7 +953,7 @@ func (_ *Elastigroup) update(cloud awsup.AWSCloud, a, e, changes *Elastigroup) e // User data. { if changes.UserData != nil { - userData, err := e.UserData.AsString() + userData, err := fi.ResourceAsString(e.UserData) if err != nil { return err } diff --git a/upup/pkg/fi/cloudup/spotinsttasks/launch_spec.go b/upup/pkg/fi/cloudup/spotinsttasks/launch_spec.go index 1115180938..07c90f7813 100644 --- a/upup/pkg/fi/cloudup/spotinsttasks/launch_spec.go +++ b/upup/pkg/fi/cloudup/spotinsttasks/launch_spec.go @@ -40,7 +40,7 @@ type LaunchSpec struct { Lifecycle *fi.Lifecycle ID *string - UserData *fi.ResourceHolder + UserData fi.Resource SecurityGroups []*awstasks.SecurityGroup Subnets []*awstasks.Subnet IAMInstanceProfile *awstasks.IAMInstanceProfile @@ -85,7 +85,7 @@ func (o *LaunchSpec) GetDependencies(tasks map[string]fi.Task) []fi.Task { } if o.UserData != nil { - deps = append(deps, o.UserData.GetDependencies(tasks)...) + deps = append(deps, fi.FindDependencies(tasks, o.UserData)...) } return deps @@ -330,7 +330,7 @@ func (_ *LaunchSpec) create(cloud awsup.AWSCloud, a, e, changes *LaunchSpec) err // User data. { if e.UserData != nil { - userData, err := e.UserData.AsString() + userData, err := fi.ResourceAsString(e.UserData) if err != nil { return err } @@ -491,7 +491,7 @@ func (_ *LaunchSpec) update(cloud awsup.AWSCloud, a, e, changes *LaunchSpec) err // User data. { if changes.UserData != nil { - userData, err := e.UserData.AsString() + userData, err := fi.ResourceAsString(e.UserData) if err != nil { return err } diff --git a/upup/pkg/fi/cloudup/spotinsttasks/ocean.go b/upup/pkg/fi/cloudup/spotinsttasks/ocean.go index b2f4479b55..92fac56506 100644 --- a/upup/pkg/fi/cloudup/spotinsttasks/ocean.go +++ b/upup/pkg/fi/cloudup/spotinsttasks/ocean.go @@ -52,7 +52,7 @@ type Ocean struct { InstanceTypesWhitelist []string InstanceTypesBlacklist []string Tags map[string]string - UserData *fi.ResourceHolder + UserData fi.Resource ImageID *string IAMInstanceProfile *awstasks.IAMInstanceProfile SSHKey *awstasks.SSHKey @@ -96,7 +96,7 @@ func (o *Ocean) GetDependencies(tasks map[string]fi.Task) []fi.Task { } if o.UserData != nil { - deps = append(deps, o.UserData.GetDependencies(tasks)...) + deps = append(deps, fi.FindDependencies(tasks, o.UserData)...) } return deps @@ -451,7 +451,7 @@ func (_ *Ocean) create(cloud awsup.AWSCloud, a, e, changes *Ocean) error { // User data. { if e.UserData != nil { - userData, err := e.UserData.AsString() + userData, err := fi.ResourceAsString(e.UserData) if err != nil { return err } @@ -756,7 +756,7 @@ func (_ *Ocean) update(cloud awsup.AWSCloud, a, e, changes *Ocean) error { // User data. { if changes.UserData != nil { - userData, err := e.UserData.AsString() + userData, err := fi.ResourceAsString(e.UserData) if err != nil { return err } diff --git a/upup/pkg/fi/topological_sort.go b/upup/pkg/fi/topological_sort.go index f9284088d9..53d5ed735f 100644 --- a/upup/pkg/fi/topological_sort.go +++ b/upup/pkg/fi/topological_sort.go @@ -81,6 +81,16 @@ func reflectForDependencies(tasks map[string]Task, task Task) []Task { return getDependencies(tasks, v) } +// FindDependencies will try to infer dependencies for an arbitrary object +func FindDependencies(tasks map[string]Task, o interface{}) []Task { + if hd, ok := o.(HasDependencies); ok { + return hd.GetDependencies(tasks) + } + + v := reflect.ValueOf(o).Elem() + return getDependencies(tasks, v) +} + func getDependencies(tasks map[string]Task, v reflect.Value) []Task { var dependencies []Task