From 5fe6a9881f20b9da5cd7c4ae1a097986aabf0691 Mon Sep 17 00:00:00 2001 From: Daniel Peach Date: Wed, 29 Mar 2017 10:51:54 -0400 Subject: [PATCH] fix(gce): populate custom instance types in edit deploy stage (#3438) --- .../core/instance/instanceType.service.ts | 3 ++- .../core/instance/instanceTypeService.spec.ts | 25 ++++++++++++++++--- .../instance/gceInstanceType.service.js | 2 ++ .../serverGroupCommandBuilder.service.js | 1 + 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/scripts/modules/core/instance/instanceType.service.ts b/app/scripts/modules/core/instance/instanceType.service.ts index 828aae980a8..d090a3f1c19 100644 --- a/app/scripts/modules/core/instance/instanceType.service.ts +++ b/app/scripts/modules/core/instance/instanceType.service.ts @@ -19,6 +19,7 @@ export interface IInstanceStorage { export interface IPreferredInstanceType { name: string; + nameRegex?: RegExp; label?: string; cpu?: number; memory?: number; @@ -85,7 +86,7 @@ export class InstanceTypeService { private getInstanceTypeCategory(cloudProvider: string, instanceType: string): ng.IPromise { return this.getCategories(cloudProvider).then((categories: IInstanceTypeCategory[]) => { - return (categories || []).find(c => c.families.some(f => f.instanceTypes.some(i => i.name === instanceType))); + return (categories || []).find(c => c.families.some(f => f.instanceTypes.some(i => i.name === instanceType || (i.nameRegex && i.nameRegex.test(instanceType))))); }); } diff --git a/app/scripts/modules/core/instance/instanceTypeService.spec.ts b/app/scripts/modules/core/instance/instanceTypeService.spec.ts index 1a99a705927..f5181ef5111 100644 --- a/app/scripts/modules/core/instance/instanceTypeService.spec.ts +++ b/app/scripts/modules/core/instance/instanceTypeService.spec.ts @@ -34,7 +34,7 @@ describe('Service: instanceTypeService', function () { }] }; - const t2Cateogry: IInstanceTypeCategory = { + const t2Category: IInstanceTypeCategory = { type: 'micro', families: [{ type: 't2', @@ -45,7 +45,15 @@ describe('Service: instanceTypeService', function () { }] }; - const categories: IInstanceTypeCategory[] = [m3Category, r3Category, t2Cateogry]; + const gceCustomInstanceCategory: IInstanceTypeCategory = { + type: 'buildCustom', + families: [{ + type: 'buildCustom', + instanceTypes: [{name: 'buildCustom', nameRegex: /custom-\d{1,2}-\d{4,6}/}] + }] + }; + + const categories: IInstanceTypeCategory[] = [m3Category, r3Category, t2Category, gceCustomInstanceCategory]; beforeEach( mock.module(INSTANCE_TYPE_SERVICE) @@ -91,7 +99,7 @@ describe('Service: instanceTypeService', function () { }); }); - t2Cateogry.families[0].instanceTypes.forEach(function (instanceType) { + t2Category.families[0].instanceTypes.forEach(function (instanceType) { it('should return "micro" if the ' + instanceType.name + ' is in the "micro" category', function () { let result: string = null; instanceTypeService.getCategoryForInstanceType('aws', instanceType.name).then(function(category) { @@ -115,6 +123,17 @@ describe('Service: instanceTypeService', function () { }); }); + const gceBuildCustomTypes = ['custom-1-2816', 'custom-6-9984']; + gceBuildCustomTypes.forEach(function(instanceType) { + it('should return "buildCustom" for ' + instanceType, function() { + let result: string = null; + instanceTypeService.getCategoryForInstanceType('gce', instanceType).then(function(category) { + result = category; + }); + $scope.$digest(); + expect(result).toBe('buildCustom'); + }); + }); }); }); diff --git a/app/scripts/modules/google/instance/gceInstanceType.service.js b/app/scripts/modules/google/instance/gceInstanceType.service.js index 0b47baefc4a..438938d0413 100644 --- a/app/scripts/modules/google/instance/gceInstanceType.service.js +++ b/app/scripts/modules/google/instance/gceInstanceType.service.js @@ -176,9 +176,11 @@ module.exports = angular.module('spinnaker.gce.instanceType.service', [ACCOUNT_S }; var customMachine = { + type: 'buildCustom', instanceTypes : [ { name: 'buildCustom', + nameRegex: /custom-\d{1,2}-\d{4,6}/, storage: { localSSDSupported: true } diff --git a/app/scripts/modules/google/serverGroup/configure/serverGroupCommandBuilder.service.js b/app/scripts/modules/google/serverGroup/configure/serverGroupCommandBuilder.service.js index d0392758250..07e294db59a 100644 --- a/app/scripts/modules/google/serverGroup/configure/serverGroupCommandBuilder.service.js +++ b/app/scripts/modules/google/serverGroup/configure/serverGroupCommandBuilder.service.js @@ -412,6 +412,7 @@ module.exports = angular.module('spinnaker.gce.serverGroupCommandBuilder.service useSimpleCapacity: !pipelineCluster.autoscalingPolicy, mode: 'editPipeline', submitButtonLabel: 'Done', + customInstance: asyncData.instanceProfile === 'buildCustom' ? gceCustomInstanceBuilderService.parseInstanceTypeString(pipelineCluster.instanceType) : null, }; var viewOverrides = {