Make all users of userdata declare it as a dependency

This commit is contained in:
John Gardiner Myers 2020-06-26 09:42:31 -07:00
parent 07dc255559
commit 87446f8894
11 changed files with 109 additions and 63 deletions

View File

@ -50,7 +50,6 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.ModelBuilderContext, sg *
clusterTag := "KubernetesCluster:" + strings.Replace(b.ClusterName(), ".", "-", -1)
var igUserData *string
igMeta := make(map[string]string)
if ig.Spec.Role != kops.InstanceGroupRoleBastion {
@ -81,14 +80,6 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.ModelBuilderContext, sg *
if err != nil {
return fmt.Errorf("could not create startup script for instance group %s: %v", ig.Name, err)
}
if startupScript != nil {
// var userData bytes.Buffer
startupStr, err := startupScript.AsString()
if err != nil {
return fmt.Errorf("could not create startup script for instance group %s: %v", ig.Name, err)
}
igUserData = fi.String(startupStr)
}
var securityGroups []*openstacktasks.SecurityGroup
securityGroupName := b.SecurityGroupName(ig.Spec.Role)
@ -149,13 +140,11 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.ModelBuilderContext, sg *
Tags: []string{clusterTag},
Role: fi.String(string(ig.Spec.Role)),
Port: portTask,
UserData: startupScript,
Metadata: igMeta,
SecurityGroups: ig.Spec.AdditionalSecurityGroups,
AvailabilityZone: az,
}
if igUserData != nil {
instanceTask.UserData = igUserData
}
c.AddTask(instanceTask)
// Associate a floating IP to the master and bastion always if we have external network in router

View File

@ -126,7 +126,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -172,7 +172,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodePort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -311,7 +311,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -357,7 +357,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodePort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -398,7 +398,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Bastion"),
Port: bastionPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[2])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[2]),
Metadata: map[string]string{
"k8s": "cluster",
"KopsInstanceGroup": "bastion",
@ -578,7 +578,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterAPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -625,7 +625,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterBPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -672,7 +672,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterCPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -718,7 +718,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeAPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -764,7 +764,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeBPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -810,7 +810,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeCPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1007,7 +1007,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterAPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1048,7 +1048,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterBPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1089,7 +1089,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterCPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1130,7 +1130,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeAPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1176,7 +1176,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeBPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1222,7 +1222,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeCPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1463,7 +1463,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterAPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1505,7 +1505,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterBPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1547,7 +1547,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterCPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1588,7 +1588,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeAPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1629,7 +1629,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeBPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1670,7 +1670,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeCPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1813,7 +1813,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterAPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1852,7 +1852,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterBPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1891,7 +1891,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterCPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1937,7 +1937,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeAPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -1975,7 +1975,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeBPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -2013,7 +2013,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodeCPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -2141,7 +2141,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -2182,7 +2182,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodePort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -2317,7 +2317,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Master"),
Port: masterPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -2358,7 +2358,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodePort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[1])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -2399,7 +2399,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Bastion"),
Port: bastionPort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[2])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[2]),
Metadata: map[string]string{
"k8s": "cluster",
"KopsInstanceGroup": "bastion",
@ -2495,7 +2495,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodePort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -2591,7 +2591,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodePort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -2685,7 +2685,7 @@ func Test_ServerGroupModelBuilder(t *testing.T) {
Tags: []string{"KubernetesCluster:cluster"},
Role: s("Node"),
Port: nodePort,
UserData: s(mustUserdataForClusterInstance(cluster, instanceGroups[0])),
UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]),
Metadata: map[string]string{
"KubernetesCluster": "cluster",
"k8s": "cluster",
@ -3099,18 +3099,25 @@ func compareStrings(t *testing.T, name string, actual, expected *string) {
}
}
func compareUserData(t *testing.T, actual, expected *string) {
func compareUserData(t *testing.T, actual, expected *fi.ResourceHolder) {
t.Helper()
if pointersAreBothNil(t, "UserData", actual, expected) {
return
}
if !reflect.DeepEqual(actual, expected) {
var a, e string
var err error
if actual != nil {
a = *actual
a, err = actual.AsString()
if err != nil {
t.Errorf("error getting actual: %v", err)
}
}
if expected != nil {
e = *expected
e, err = expected.AsString()
if err != nil {
t.Errorf("error getting actual: %v", err)
}
}
aLines := strings.Split(a, "\n")
eLines := strings.Split(e, "\n")
@ -3186,7 +3193,7 @@ func (n *nodeupConfigBuilder) BuildConfig(ig *kops.InstanceGroup) (*nodeup.Confi
return &nodeup.Config{}, nil
}
func mustUserdataForClusterInstance(cluster *kops.Cluster, ig *kops.InstanceGroup) string {
func mustUserdataForClusterInstance(cluster *kops.Cluster, ig *kops.InstanceGroup) *fi.ResourceHolder {
bootstrapScriptBuilder := &model.BootstrapScript{
NodeUpConfigBuilder: &nodeupConfigBuilder{},
NodeUpSource: map[architectures.Architecture]string{
@ -3206,5 +3213,5 @@ func mustUserdataForClusterInstance(cluster *kops.Cluster, ig *kops.InstanceGrou
if err != nil {
panic(fmt.Errorf("error converting userdata to string: %v", err))
}
return userdata
return fi.WrapResource(fi.NewStringResource(userdata))
}

View File

@ -72,12 +72,18 @@ type LaunchConfiguration struct {
Tags map[string]string
}
var _ fi.Task = &LaunchConfiguration{}
var _ fi.CompareWithID = &LaunchConfiguration{}
var _ fi.HasDependencies = &LaunchConfiguration{}
func (l *LaunchConfiguration) CompareWithID() *string {
return l.ID
}
func (l *LaunchConfiguration) GetDependencies(tasks map[string]fi.Task) []fi.Task {
return l.UserData.GetDependencies(tasks)
}
func (l *LaunchConfiguration) Find(c *fi.Context) (*LaunchConfiguration, error) {
if l.ScalingGroup == nil || l.ScalingGroup.ScalingGroupId == nil {
klog.V(4).Infof("ScalingGroup / ScalingGroupId not found for %s, skipping Find", fi.StringValue(l.Name))

View File

@ -94,13 +94,17 @@ type LaunchConfiguration struct {
}
var _ fi.CompareWithID = &LaunchConfiguration{}
var _ fi.HasDependencies = &LaunchConfiguration{}
var _ fi.ProducesDeletions = &LaunchConfiguration{}
func (e *LaunchConfiguration) CompareWithID() *string {
return e.ID
}
func (l *LaunchConfiguration) GetDependencies(tasks map[string]fi.Task) []fi.Task {
return l.UserData.GetDependencies(tasks)
}
// findLaunchConfigurations returns matching LaunchConfigurations, sorted by CreatedTime (ascending)
func (e *LaunchConfiguration) findLaunchConfigurations(c *fi.Context) ([]*autoscaling.LaunchConfiguration, error) {
cloud := c.Cloud.(awsup.AWSCloud)

View File

@ -53,6 +53,7 @@ func TestLaunchConfigurationGarbageCollection(t *testing.T) {
ImageID: s("ami-12345678"),
InstanceType: s("m3.medium"),
SecurityGroups: []*SecurityGroup{},
UserData: fi.WrapResource(fi.NewStringResource("")),
}
return map[string]fi.Task{

View File

@ -45,12 +45,18 @@ type Droplet struct {
UserData *fi.ResourceHolder
}
var _ fi.Task = &Droplet{}
var _ fi.CompareWithID = &Droplet{}
var _ fi.HasDependencies = &Droplet{}
func (d *Droplet) CompareWithID() *string {
return d.Name
}
func (l *Droplet) GetDependencies(tasks map[string]fi.Task) []fi.Task {
return l.UserData.GetDependencies(tasks)
}
func (d *Droplet) Find(c *fi.Context) (*Droplet, error) {
cloud := c.Cloud.(*digitalocean.Cloud)

View File

@ -68,12 +68,22 @@ type InstanceTemplate struct {
ID *string
}
var _ fi.Task = &InstanceTemplate{}
var _ fi.CompareWithID = &InstanceTemplate{}
var _ fi.HasDependencies = &InstanceTemplate{}
func (e *InstanceTemplate) CompareWithID() *string {
return e.ID
}
func (l *InstanceTemplate) GetDependencies(tasks map[string]fi.Task) []fi.Task {
var deps []fi.Task
for _, resource := range l.Metadata {
deps = append(deps, resource.GetDependencies(tasks)...)
}
return deps
}
func (e *InstanceTemplate) Find(c *fi.Context) (*InstanceTemplate, error) {
cloud := c.Cloud.(gce.GCECloud)

View File

@ -41,7 +41,7 @@ type Instance struct {
ServerGroup *ServerGroup
Tags []string
Role *string
UserData *string
UserData *fi.ResourceHolder
Metadata map[string]string
AvailabilityZone *string
SecurityGroups []string
@ -49,7 +49,9 @@ type Instance struct {
Lifecycle *fi.Lifecycle
}
var _ fi.Task = &Instance{}
var _ fi.HasAddress = &Instance{}
var _ fi.HasDependencies = &Instance{}
// GetDependencies returns the dependencies of the Instance task
func (e *Instance) GetDependencies(tasks map[string]fi.Task) []fi.Task {
@ -62,6 +64,11 @@ func (e *Instance) GetDependencies(tasks map[string]fi.Task) []fi.Task {
deps = append(deps, task)
}
}
if e.UserData != nil {
deps = append(deps, e.UserData.GetDependencies(tasks)...)
}
return deps
}
@ -169,7 +176,11 @@ func (_ *Instance) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, change
SecurityGroups: e.SecurityGroups,
}
if e.UserData != nil {
opt.UserData = []byte(*e.UserData)
bytes, err := e.UserData.AsBytes()
if err != nil {
return err
}
opt.UserData = bytes
}
if e.AvailabilityZone != nil {
opt.AvailabilityZone = fi.StringValue(e.AvailabilityZone)

View File

@ -100,14 +100,14 @@ type AutoScalerDownOpts struct {
EvaluationPeriods *int
}
var _ fi.Task = &Elastigroup{}
var _ fi.CompareWithID = &Elastigroup{}
var _ fi.HasDependencies = &Elastigroup{}
func (e *Elastigroup) CompareWithID() *string {
return e.Name
}
var _ fi.HasDependencies = &Elastigroup{}
func (e *Elastigroup) GetDependencies(tasks map[string]fi.Task) []fi.Task {
var deps []fi.Task
@ -135,6 +135,10 @@ func (e *Elastigroup) GetDependencies(tasks map[string]fi.Task) []fi.Task {
}
}
if e.UserData != nil {
deps = append(deps, e.UserData.GetDependencies(tasks)...)
}
return deps
}

View File

@ -51,14 +51,14 @@ type LaunchSpec struct {
Ocean *Ocean
}
var _ fi.Task = &LaunchSpec{}
var _ fi.CompareWithID = &LaunchSpec{}
var _ fi.HasDependencies = &LaunchSpec{}
func (o *LaunchSpec) CompareWithID() *string {
return o.Name
}
var _ fi.HasDependencies = &LaunchSpec{}
func (o *LaunchSpec) GetDependencies(tasks map[string]fi.Task) []fi.Task {
var deps []fi.Task
@ -82,6 +82,10 @@ func (o *LaunchSpec) GetDependencies(tasks map[string]fi.Task) []fi.Task {
deps = append(deps, o.Ocean)
}
if o.UserData != nil {
deps = append(deps, o.UserData.GetDependencies(tasks)...)
}
return deps
}

View File

@ -64,14 +64,14 @@ type Ocean struct {
AutoScalerOpts *AutoScalerOpts
}
var _ fi.Task = &Ocean{}
var _ fi.CompareWithID = &Ocean{}
var _ fi.HasDependencies = &Ocean{}
func (o *Ocean) CompareWithID() *string {
return o.Name
}
var _ fi.HasDependencies = &Ocean{}
func (o *Ocean) GetDependencies(tasks map[string]fi.Task) []fi.Task {
var deps []fi.Task
@ -95,6 +95,10 @@ func (o *Ocean) GetDependencies(tasks map[string]fi.Task) []fi.Task {
}
}
if o.UserData != nil {
deps = append(deps, o.UserData.GetDependencies(tasks)...)
}
return deps
}