From f650ca9db4abaf648d7003bd109b47d61a1b728d Mon Sep 17 00:00:00 2001 From: Neil Ye Date: Fri, 14 Jun 2019 21:41:46 +0800 Subject: [PATCH] feat(provider/azure): Enable data disk for server group (#7116) * feat(provider/azure): Enable data disk for server group * feat(provider/azure): Enable data disk for server group * feat(provider/azure): Enable data disk for server group --- .../modules/azure/src/help/azure.help.ts | 8 ++ .../serverGroupCommandBuilder.service.js | 8 +- .../serverGroupConfiguration.service.js | 5 ++ .../advancedSettingsSelector.directive.html | 75 ++++++++++++++++++- .../advancedSettingsSelector.directive.js | 23 +++++- .../serverGroup/serverGroup.transformer.js | 7 +- 6 files changed, 116 insertions(+), 10 deletions(-) diff --git a/app/scripts/modules/azure/src/help/azure.help.ts b/app/scripts/modules/azure/src/help/azure.help.ts index 6250b09b1e3..ba41f9e47bd 100644 --- a/app/scripts/modules/azure/src/help/azure.help.ts +++ b/app/scripts/modules/azure/src/help/azure.help.ts @@ -35,6 +35,14 @@ const helpContents: { [key: string]: string } = { } tags at most.`, 'azure.serverGroup.enableInboundNAT': 'An Azure load balancer of the basic sku will be created with adding inbound NAT port-forwarding rules to facilitate loggin on VM instances. There is no charge for creating an Azure load balancer of the basic sku. This option is disabled if Availability Zones are set which require Standard Azure Load Balancer and an extra Network Security Group with correct inbound and outbound rules configured.', + 'azure.serverGroup.lun': + 'Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.', + 'azure.serverGroup.diskSizeGB': + 'Specifies the size of an empty data disk in gigabytes. This value cannot be larger than 1023 GB', + 'azure.serverGroup.managedDisk.storageAccountType': + 'You can choose between Azure managed disks types to support your workload or scenario.', + 'azure.serverGroup.caching': + 'Changing the default host caching policy can adversely impact the performance of your application. You should run performance tests to measure its impact. To improve the total IOPS/throughput, we recommend striping across multiple disks and using premium (SSD) disks.', 'azure.loadBalancer.dnsName': 'If there is no custom DNS label specified, a default DNS name will be created. The default value will be "GeneratedText.cloudapp.net" for Azure Application Gateway or "GeneratedText.[region].cloudapp.azure.com" for Azure Load Balancer.', 'azure.loadBalancer.probes.probeInterval': diff --git a/app/scripts/modules/azure/src/serverGroup/configure/serverGroupCommandBuilder.service.js b/app/scripts/modules/azure/src/serverGroup/configure/serverGroupCommandBuilder.service.js index 6bdd0cb56e5..e759bec7bf2 100644 --- a/app/scripts/modules/azure/src/serverGroup/configure/serverGroupCommandBuilder.service.js +++ b/app/scripts/modules/azure/src/serverGroup/configure/serverGroupCommandBuilder.service.js @@ -1,6 +1,7 @@ 'use strict'; const angular = require('angular'); +const _ = require('lodash'); import { NameUtils } from '@spinnaker/core'; @@ -41,6 +42,7 @@ module.exports = angular zonesEnabled: false, zones: [], instanceTags: {}, + dataDisks: [], selectedProvider: 'azure', viewState: { instanceProfile: 'custom', @@ -93,6 +95,7 @@ module.exports = angular zones: serverGroup.zones, zonesEnabled: serverGroup.zones && serverGroup.zones.length > 0, instanceTags: {}, + dataDisks: serverGroup.dataDisks, sku: serverGroup.sku, capacity: { min: serverGroup.capacity.min, @@ -123,10 +126,7 @@ module.exports = angular if (typeof serverGroup.customScriptsSettings !== 'undefined') { command.customScriptsSettings = {}; command.customScriptsSettings.commandToExecute = serverGroup.customScriptsSettings.commandToExecute; - if ( - typeof serverGroup.customScriptsSettings.fileUris !== 'undefined' && - serverGroup.customScriptsSettings.fileUris != '' - ) { + if (!_.isEmpty(serverGroup.customScriptsSettings.fileUris)) { azureServerGroupTransformer.parseCustomScriptsSettings(serverGroup, command); } } diff --git a/app/scripts/modules/azure/src/serverGroup/configure/serverGroupConfiguration.service.js b/app/scripts/modules/azure/src/serverGroup/configure/serverGroupConfiguration.service.js index 63f3e3187f3..b8f1cc2c196 100644 --- a/app/scripts/modules/azure/src/serverGroup/configure/serverGroupConfiguration.service.js +++ b/app/scripts/modules/azure/src/serverGroup/configure/serverGroupConfiguration.service.js @@ -33,6 +33,9 @@ module.exports = angular loadBalancerReader, azureInstanceTypeService, ) { + var dataDiskTypes = ['Standard_LRS', 'StandardSSD_LRS', 'Premium_LRS']; + var dataDiskCachingTypes = ['None', 'ReadOnly', 'ReadWrite']; + var healthCheckTypes = ['EC2', 'ELB'], terminationPolicies = [ 'OldestInstance', @@ -55,6 +58,8 @@ module.exports = angular credentialsKeyedByAccount: AccountService.getCredentialsKeyedByAccount('azure'), securityGroups: securityGroupReader.loadSecurityGroups(), loadBalancers: loadBalancerReader.loadLoadBalancers(application.name), + dataDiskTypes: $q.when(angular.copy(dataDiskTypes)), + dataDiskCachingTypes: $q.when(angular.copy(dataDiskCachingTypes)), }) .then(function(backingData) { backingData.accounts = _.keys(backingData.credentialsKeyedByAccount); diff --git a/app/scripts/modules/azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html b/app/scripts/modules/azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html index 4d74726fe05..f6a133b9f74 100644 --- a/app/scripts/modules/azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html +++ b/app/scripts/modules/azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html @@ -1,4 +1,4 @@ -
+
Number of Instances
@@ -54,5 +54,78 @@
+
+
+ Data Disks +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ LUN + + + Size (GB) + + + Type + + + Caching + +
+ + + + + + {{$select.selected}} + + + + + + + {{$select.selected}} + + + + + + + + +
+ +
+
+
diff --git a/app/scripts/modules/azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js b/app/scripts/modules/azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js index ba1885c2362..2a9cd4481d7 100644 --- a/app/scripts/modules/azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js +++ b/app/scripts/modules/azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js @@ -16,4 +16,25 @@ module.exports = angular controller: 'azureServerGroupAdvancedSettingsSelectorCtrl', }; }) - .controller('azureServerGroupAdvancedSettingsSelectorCtrl', function() {}); + .controller('azureServerGroupAdvancedSettingsSelectorCtrl', function() { + this.addDataDisk = () => { + var newDataDisks = angular.copy(this.command.dataDisks); + this.command.dataDisks = newDataDisks.concat([ + { + lun: 0, + managedDisk: { + storageAccountType: 'Standard_LRS', + }, + diskSizeGB: 1, + caching: 'None', + createOption: 'Empty', + }, + ]); + }; + + this.removeDataDisk = index => { + var newDataDisks = angular.copy(this.command.dataDisks); + newDataDisks.splice(index, 1); + this.command.dataDisks = newDataDisks; + }; + }); diff --git a/app/scripts/modules/azure/src/serverGroup/serverGroup.transformer.js b/app/scripts/modules/azure/src/serverGroup/serverGroup.transformer.js index 879f9f0d9d0..bdbcb87d4bc 100644 --- a/app/scripts/modules/azure/src/serverGroup/serverGroup.transformer.js +++ b/app/scripts/modules/azure/src/serverGroup/serverGroup.transformer.js @@ -1,6 +1,7 @@ 'use strict'; const angular = require('angular'); +const _ = require('lodash'); module.exports = angular .module('spinnaker.azure.serverGroup.transformer', []) @@ -94,6 +95,7 @@ module.exports = angular capacity: command.sku.capacity, }, instanceTags: command.instanceTags, + dataDisks: command.dataDisks, viewState: command.viewState, osConfig: { customData: command.osConfig ? command.osConfig.customData : null, @@ -116,10 +118,7 @@ module.exports = angular if (typeof command.customScriptsSettings !== 'undefined') { configuration.customScriptsSettings.commandToExecute = command.customScriptsSettings.commandToExecute; - if ( - typeof command.customScriptsSettings.fileUris !== 'undefined' && - command.customScriptsSettings.fileUris != '' - ) { + if (!_.isEmpty(command.customScriptsSettings.fileUris)) { parseCustomScriptsSettings(command, configuration); } }