Skip to content

Commit ba7b8a0

Browse files
author
jwcesign
authored
Merge pull request #57 from helen-frank/helen-frank/dev-general
fix status
2 parents d450bb6 + d0c381f commit ba7b8a0

File tree

2 files changed

+47
-7
lines changed

2 files changed

+47
-7
lines changed

pkg/providers/instance/instance.go

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,12 @@ func (p *DefaultProvider) Create(ctx context.Context, nodeClass *v1alpha1.ECSNod
9393
return nil, fmt.Errorf("truncating instance types, %w", err)
9494
}
9595
tags := getTags(ctx, nodeClass, nodeClaim)
96-
launchInstance, err := p.launchInstance(ctx, nodeClass, nodeClaim, instanceTypes, tags)
96+
launchInstance, createAutoProvisioningGroupRequest, err := p.launchInstance(ctx, nodeClass, nodeClaim, instanceTypes, tags)
9797
if err != nil {
9898
return nil, err
9999
}
100100

101-
return p.Get(ctx, *launchInstance.InstanceIds.InstanceId[0])
101+
return NewInstanceFromProvisioningGroup(launchInstance, createAutoProvisioningGroupRequest, p.region), nil
102102
}
103103

104104
func (p *DefaultProvider) Get(ctx context.Context, id string) (*Instance, error) {
@@ -323,28 +323,28 @@ func getTags(ctx context.Context, nodeClass *v1alpha1.ECSNodeClass, nodeClaim *k
323323
}
324324

325325
func (p *DefaultProvider) launchInstance(ctx context.Context, nodeClass *v1alpha1.ECSNodeClass, nodeClaim *karpv1.NodeClaim, instanceTypes []*cloudprovider.InstanceType,
326-
tags map[string]string) (*ecsclient.CreateAutoProvisioningGroupResponseBodyLaunchResultsLaunchResult, error) {
326+
tags map[string]string) (*ecsclient.CreateAutoProvisioningGroupResponseBodyLaunchResultsLaunchResult, *ecsclient.CreateAutoProvisioningGroupRequest, error) {
327327
if err := p.checkODFallback(nodeClaim, instanceTypes); err != nil {
328328
log.FromContext(ctx).Error(err, "failed while checking on-demand fallback")
329329
}
330330
capacityType := p.getCapacityType(nodeClaim, instanceTypes)
331331
zonalVSwitchs, err := p.vSwitchProvider.ZonalVSwitchesForLaunch(ctx, nodeClass, instanceTypes, capacityType)
332332
if err != nil {
333-
return nil, fmt.Errorf("getting vSwitches, %w", err)
333+
return nil, nil, fmt.Errorf("getting vSwitches, %w", err)
334334
}
335335

336336
createAutoProvisioningGroupRequest, err := p.getProvisioningGroup(ctx, nodeClass, nodeClaim, instanceTypes, zonalVSwitchs, capacityType, tags)
337337
if err != nil {
338-
return nil, fmt.Errorf("getting provisioning group, %w", err)
338+
return nil, nil, fmt.Errorf("getting provisioning group, %w", err)
339339
}
340340

341341
runtime := &util.RuntimeOptions{}
342342
resp, err := p.ecsClient.CreateAutoProvisioningGroupWithOptions(createAutoProvisioningGroupRequest, runtime)
343343
if err != nil {
344-
return nil, fmt.Errorf("creating auto provisioning group, %w", err)
344+
return nil, nil, fmt.Errorf("creating auto provisioning group, %w", err)
345345
}
346346

347-
return resp.Body.LaunchResults.LaunchResult[0], nil
347+
return resp.Body.LaunchResults.LaunchResult[0], createAutoProvisioningGroupRequest, nil
348348
}
349349

350350
// getCapacityType selects spot if both constraints are flexible and there is an
@@ -401,6 +401,14 @@ func (p *DefaultProvider) getProvisioningGroup(ctx context.Context, nodeClass *v
401401
launchTemplateConfigs = append(launchTemplateConfigs, launchTemplateConfig)
402402
}
403403

404+
reqTags := make([]*ecsclient.CreateAutoProvisioningGroupRequestTag, 0, len(tags))
405+
for k, v := range tags {
406+
reqTags = append(reqTags, &ecsclient.CreateAutoProvisioningGroupRequestTag{
407+
Key: tea.String(k),
408+
Value: tea.String(v),
409+
})
410+
}
411+
404412
createAutoProvisioningGroupRequest := &ecsclient.CreateAutoProvisioningGroupRequest{
405413
RegionId: tea.String(p.region),
406414
TotalTargetCapacity: tea.String("1"),
@@ -420,6 +428,7 @@ func (p *DefaultProvider) getProvisioningGroup(ctx context.Context, nodeClass *v
420428
SystemDiskConfig: []*ecsclient.CreateAutoProvisioningGroupRequestSystemDiskConfig{
421429
{DiskCategory: launchtemplate.SystemDisk.Category},
422430
},
431+
Tag: reqTags,
423432
}
424433

425434
if capacityType == karpv1.CapacityTypeSpot {

pkg/providers/instance/types.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,37 @@ func NewInstance(out *ecsclient.DescribeInstancesResponseBodyInstancesInstance)
7272
}
7373
}
7474

75+
func NewInstanceFromProvisioningGroup(out *ecsclient.CreateAutoProvisioningGroupResponseBodyLaunchResultsLaunchResult,
76+
req *ecsclient.CreateAutoProvisioningGroupRequest, region string) *Instance {
77+
78+
var securityGroupIDs []string
79+
if len(req.LaunchConfiguration.SecurityGroupIds) > 0 {
80+
securityGroupIDs = lo.Map(req.LaunchConfiguration.SecurityGroupIds, func(securitygroup *string, _ int) string {
81+
return *securitygroup
82+
})
83+
} else {
84+
securityGroupIDs = []string{*req.LaunchConfiguration.SecurityGroupId}
85+
}
86+
87+
tags := make(map[string]string, len(req.Tag))
88+
for i := range req.Tag {
89+
tags[*req.Tag[i].Key] = *req.Tag[i].Value
90+
}
91+
92+
return &Instance{
93+
CreationTime: time.Now(), // estimate the launch time since we just launched
94+
Status: InstanceStatusPending,
95+
ID: *out.InstanceIds.InstanceId[0],
96+
ImageID: *req.LaunchConfiguration.ImageId,
97+
Type: *out.InstanceType,
98+
Region: region,
99+
Zone: *out.ZoneId,
100+
CapacityType: utils.GetCapacityTypes(*out.SpotStrategy),
101+
SecurityGroupIDs: securityGroupIDs,
102+
Tags: tags,
103+
}
104+
}
105+
75106
func toSecurityGroupIDs(securityGroups *ecsclient.DescribeInstancesResponseBodyInstancesInstanceSecurityGroupIds) []string {
76107
if securityGroups == nil {
77108
return []string{}

0 commit comments

Comments
 (0)