Replace (some) deprecated ResourceHolder with Resource

This removes more of the deprecated type, but it also simplifies
refactoring the GCE InstanceTemplate.
This commit is contained in:
Justin SB 2020-12-19 08:06:07 -05:00
parent 9561ed38c5
commit 45d11ba12c
16 changed files with 47 additions and 37 deletions

View File

@ -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 {

View File

@ -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

View File

@ -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),
},
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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 (

View File

@ -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)
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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