@spinnaker/azure 0.0.0-main-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/CHANGELOG.md +873 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/azure.module.d.ts +3 -0
  4. package/dist/azure.settings.d.ts +8 -0
  5. package/dist/common/AzureModalFooter.d.ts +18 -0
  6. package/dist/help/azure.help.d.ts +1 -0
  7. package/dist/image/image.reader.d.ts +2 -0
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.js +6778 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/instance/azureInstanceType.service.d.ts +2 -0
  12. package/dist/instance/details/instance.details.controller.d.ts +2 -0
  13. package/dist/loadBalancer/configure/AzureLoadBalancerChoiceModal.d.ts +16 -0
  14. package/dist/loadBalancer/configure/createLoadBalancer.controller.d.ts +2 -0
  15. package/dist/loadBalancer/details/loadBalancerDetail.controller.d.ts +2 -0
  16. package/dist/loadBalancer/loadBalancer.transformer.d.ts +2 -0
  17. package/dist/pipeline/stages/bake/azureBakeStage.d.ts +2 -0
  18. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +2 -0
  19. package/dist/pipeline/stages/destroyAsg/azureDestroyAsgStage.d.ts +2 -0
  20. package/dist/pipeline/stages/disableAsg/azureDisableAsgStage.d.ts +2 -0
  21. package/dist/pipeline/stages/enableAsg/azureEnableAsgStage.d.ts +2 -0
  22. package/dist/securityGroup/clone/cloneSecurityGroup.controller.d.ts +2 -0
  23. package/dist/securityGroup/configure/CreateSecurityGroupCtrl.d.ts +2 -0
  24. package/dist/securityGroup/configure/EditSecurityGroupCtrl.d.ts +2 -0
  25. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +2 -0
  26. package/dist/securityGroup/securityGroup.reader.d.ts +2 -0
  27. package/dist/securityGroup/securityGroup.transformer.d.ts +2 -0
  28. package/dist/securityGroup/securityGroup.write.service.d.ts +2 -0
  29. package/dist/serverGroup/configure/serverGroup.configure.azure.module.d.ts +2 -0
  30. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +2 -0
  31. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +2 -0
  32. package/dist/serverGroup/configure/wizard/CloneServerGroup.azure.controller.d.ts +2 -0
  33. package/dist/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.d.ts +2 -0
  34. package/dist/serverGroup/configure/wizard/ServerGroupInstanceType.controller.d.ts +2 -0
  35. package/dist/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.d.ts +2 -0
  36. package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.d.ts +2 -0
  37. package/dist/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.d.ts +2 -0
  38. package/dist/serverGroup/configure/wizard/basicSettings/image.regional.filter.d.ts +2 -0
  39. package/dist/serverGroup/configure/wizard/capacity/capacitySelector.directive.d.ts +2 -0
  40. package/dist/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.d.ts +2 -0
  41. package/dist/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.d.ts +2 -0
  42. package/dist/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.d.ts +2 -0
  43. package/dist/serverGroup/configure/wizard/image/imageSettingsSelector.directive.d.ts +2 -0
  44. package/dist/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.d.ts +2 -0
  45. package/dist/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.d.ts +2 -0
  46. package/dist/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.d.ts +2 -0
  47. package/dist/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.d.ts +2 -0
  48. package/dist/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.d.ts +2 -0
  49. package/dist/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.d.ts +2 -0
  50. package/dist/serverGroup/configure/wizard/tags/tagsSelector.directive.d.ts +2 -0
  51. package/dist/serverGroup/configure/wizard/zones/zoneSelector.directive.d.ts +2 -0
  52. package/dist/serverGroup/details/rollback/RollbackServerGroupModal.d.ts +25 -0
  53. package/dist/serverGroup/details/serverGroup.details.module.d.ts +2 -0
  54. package/dist/serverGroup/details/serverGroupDetails.azure.controller.d.ts +2 -0
  55. package/dist/serverGroup/serverGroup.transformer.d.ts +2 -0
  56. package/dist/utility.d.ts +28 -0
  57. package/dist/validation/applicationName.validator.d.ts +2 -0
  58. package/package.json +43 -0
  59. package/src/azure.module.ts +95 -0
  60. package/src/azure.settings.ts +16 -0
  61. package/src/common/AzureModalFooter.tsx +43 -0
  62. package/src/help/azure.help.ts +60 -0
  63. package/src/image/image.reader.js +43 -0
  64. package/src/image/image.reader.spec.js +108 -0
  65. package/src/index.ts +1 -0
  66. package/src/instance/azureInstanceType.service.js +831 -0
  67. package/src/instance/azureInstanceType.service.spec.js +17 -0
  68. package/src/instance/details/instance.details.controller.js +371 -0
  69. package/src/instance/details/instance.details.controller.spec.js +129 -0
  70. package/src/instance/details/instanceDetails.html +43 -0
  71. package/src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx +101 -0
  72. package/src/loadBalancer/configure/advancedSettings.html +95 -0
  73. package/src/loadBalancer/configure/createLoadBalancer.controller.js +275 -0
  74. package/src/loadBalancer/configure/createLoadBalancer.controller.spec.js +39 -0
  75. package/src/loadBalancer/configure/createLoadBalancer.html +25 -0
  76. package/src/loadBalancer/configure/createLoadBalancerProperties.html +128 -0
  77. package/src/loadBalancer/configure/editLoadBalancer.html +26 -0
  78. package/src/loadBalancer/configure/healthCheck.html +74 -0
  79. package/src/loadBalancer/configure/listeners.html +50 -0
  80. package/src/loadBalancer/details/loadBalancerDetail.controller.js +181 -0
  81. package/src/loadBalancer/details/loadBalancerDetail.controller.spec.js +39 -0
  82. package/src/loadBalancer/details/loadBalancerDetail.html +128 -0
  83. package/src/loadBalancer/loadBalancer.transformer.js +109 -0
  84. package/src/logo/azure.icon.svg +196 -0
  85. package/src/logo/azure.logo.less +6 -0
  86. package/src/logo/logo_azure.png +0 -0
  87. package/src/pipeline/stages/bake/azureBakeStage.js +276 -0
  88. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +40 -0
  89. package/src/pipeline/stages/bake/bakeExecutionDetails.html +50 -0
  90. package/src/pipeline/stages/bake/bakeStage.html +187 -0
  91. package/src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js +73 -0
  92. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +9 -0
  93. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +1 -0
  94. package/src/pipeline/stages/disableAsg/azureDisableAsgStage.js +65 -0
  95. package/src/pipeline/stages/disableAsg/disableAsgStage.html +11 -0
  96. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +1 -0
  97. package/src/pipeline/stages/enableAsg/azureEnableAsgStage.js +70 -0
  98. package/src/pipeline/stages/enableAsg/enableAsgStage.html +11 -0
  99. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +1 -0
  100. package/src/securityGroup/clone/cloneSecurityGroup.controller.js +162 -0
  101. package/src/securityGroup/clone/cloneSecurityGroup.html +8 -0
  102. package/src/securityGroup/configure/CreateSecurityGroup.controller.spec.js +78 -0
  103. package/src/securityGroup/configure/CreateSecurityGroupCtrl.js +265 -0
  104. package/src/securityGroup/configure/EditSecurityGroupCtrl.js +222 -0
  105. package/src/securityGroup/configure/configSecurityGroup.mixin.controller.js +262 -0
  106. package/src/securityGroup/configure/createSecurityGroup.html +20 -0
  107. package/src/securityGroup/configure/createSecurityGroupIngress.html +75 -0
  108. package/src/securityGroup/configure/createSecurityGroupProperties.html +88 -0
  109. package/src/securityGroup/configure/editSecurityGroup.html +19 -0
  110. package/src/securityGroup/details/securityGroupDetail.controller.js +142 -0
  111. package/src/securityGroup/details/securityGroupDetail.html +78 -0
  112. package/src/securityGroup/securityGroup.reader.js +17 -0
  113. package/src/securityGroup/securityGroup.transformer.js +13 -0
  114. package/src/securityGroup/securityGroup.write.service.js +57 -0
  115. package/src/serverGroup/configure/serverGroup.configure.azure.module.js +47 -0
  116. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +175 -0
  117. package/src/serverGroup/configure/serverGroupConfiguration.service.js +357 -0
  118. package/src/serverGroup/configure/serverGroupConfiguration.service.spec.js +209 -0
  119. package/src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js +247 -0
  120. package/src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js +35 -0
  121. package/src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js +15 -0
  122. package/src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js +25 -0
  123. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +5 -0
  124. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html +138 -0
  125. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js +43 -0
  126. package/src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js +71 -0
  127. package/src/serverGroup/configure/wizard/basicSettings/basicSettings.html +131 -0
  128. package/src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js +15 -0
  129. package/src/serverGroup/configure/wizard/basicSettings/image.regional.filter.spec.js +42 -0
  130. package/src/serverGroup/configure/wizard/capacity/capacity.html +5 -0
  131. package/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.html +20 -0
  132. package/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js +21 -0
  133. package/src/serverGroup/configure/wizard/capacity/zones.html +5 -0
  134. package/src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js +38 -0
  135. package/src/serverGroup/configure/wizard/healthSettings/healthSettings.html +5 -0
  136. package/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.html +32 -0
  137. package/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js +22 -0
  138. package/src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js +34 -0
  139. package/src/serverGroup/configure/wizard/image/imageSettings.html +5 -0
  140. package/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.html +33 -0
  141. package/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js +22 -0
  142. package/src/serverGroup/configure/wizard/instanceArchetype.html +33 -0
  143. package/src/serverGroup/configure/wizard/instanceType/instanceType.html +10 -0
  144. package/src/serverGroup/configure/wizard/instanceType.html +33 -0
  145. package/src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js +137 -0
  146. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html +3 -0
  147. package/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.html +41 -0
  148. package/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js +22 -0
  149. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js +44 -0
  150. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.html +54 -0
  151. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js +19 -0
  152. package/src/serverGroup/configure/wizard/networkSettings/networkSettings.html +3 -0
  153. package/src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js +28 -0
  154. package/src/serverGroup/configure/wizard/securityGroup/securityGroups.html +3 -0
  155. package/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.html +40 -0
  156. package/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js +38 -0
  157. package/src/serverGroup/configure/wizard/serverGroupWizard.html +61 -0
  158. package/src/serverGroup/configure/wizard/tags/tags.html +5 -0
  159. package/src/serverGroup/configure/wizard/tags/tagsSelector.directive.html +16 -0
  160. package/src/serverGroup/configure/wizard/tags/tagsSelector.directive.js +30 -0
  161. package/src/serverGroup/configure/wizard/templateSelection.html +9 -0
  162. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.html +21 -0
  163. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.js +28 -0
  164. package/src/serverGroup/details/rollback/RollbackServerGroupModal.tsx +158 -0
  165. package/src/serverGroup/details/serverGroup.details.module.js +11 -0
  166. package/src/serverGroup/details/serverGroupDetails.azure.controller.js +260 -0
  167. package/src/serverGroup/details/serverGroupDetails.html +98 -0
  168. package/src/serverGroup/serverGroup.transformer.js +150 -0
  169. package/src/serverGroup/serverGroup.transformer.spec.js +256 -0
  170. package/src/subnet/subnetSelectField.directive.html +28 -0
  171. package/src/subnet/subnetSelectField.directive.js +35 -0
  172. package/src/utility.spec.ts +61 -0
  173. package/src/utility.ts +95 -0
  174. package/src/validation/applicationName.validator.js +44 -0
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ import { module } from 'angular';
4
+
5
+ export const AZURE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.azure.securityGroup.reader';
6
+ export const name = AZURE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility
7
+ module(AZURE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('azureSecurityGroupReader', function () {
8
+ function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {
9
+ //hack to get around securityGroupId not matching id in indexedSecurityGroups.
10
+ const temp = securityGroupId.split('/');
11
+ return indexedSecurityGroups[container.account][container.region][temp[temp.length - 1]];
12
+ }
13
+
14
+ return {
15
+ resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,
16
+ };
17
+ });
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ import { module } from 'angular';
4
+
5
+ export const AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.azure.securityGroup.transformer';
6
+ export const name = AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility
7
+ module(AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('azureSecurityGroupTransformer', function () {
8
+ function normalizeSecurityGroup() {}
9
+
10
+ return {
11
+ normalizeSecurityGroup: normalizeSecurityGroup,
12
+ };
13
+ });
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ import UIROUTER_ANGULARJS from '@uirouter/angularjs';
4
+ import { module } from 'angular';
5
+ import _ from 'lodash';
6
+
7
+ import { FirewallLabels, InfrastructureCaches, TaskExecutor } from '@spinnaker/core';
8
+
9
+ export const AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE = 'spinnaker.azure.securityGroup.write.service';
10
+ export const name = AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE; // for backwards compatibility
11
+ module(AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE, [UIROUTER_ANGULARJS]).factory(
12
+ 'azureSecurityGroupWriter',
13
+ function () {
14
+ function upsertSecurityGroup(securityGroup, application, descriptor, params = {}) {
15
+ params.securityGroupName = securityGroup.name;
16
+
17
+ // We want to extend params with all attributes from securityGroup, but only if they don't already exist.
18
+ _.assignWith(params, securityGroup, function (value, other) {
19
+ return _.isUndefined(value) ? other : value;
20
+ });
21
+
22
+ const operation = TaskExecutor.executeTask({
23
+ job: [params],
24
+ application: application,
25
+ description: `${descriptor} ${FirewallLabels.get('Firewall')}: ${name}`,
26
+ });
27
+
28
+ InfrastructureCaches.clearCache('securityGroup');
29
+
30
+ return operation;
31
+ }
32
+
33
+ function deleteSecurityGroup(securityGroup, application, params = {}) {
34
+ params.type = 'deleteSecurityGroup';
35
+ params.securityGroupName = securityGroup.name;
36
+ params.regions = [securityGroup.region];
37
+ params.credentials = securityGroup.accountId;
38
+ //params.cloudProvider = securityGroup.providerType;
39
+ params.appName = application.name;
40
+
41
+ const operation = TaskExecutor.executeTask({
42
+ job: [params],
43
+ application: application,
44
+ description: `Delete ${FirewallLabels.get('Firewalls')}: ${securityGroup.name}`,
45
+ });
46
+
47
+ InfrastructureCaches.clearCache('securityGroup');
48
+
49
+ return operation;
50
+ }
51
+
52
+ return {
53
+ deleteSecurityGroup: deleteSecurityGroup,
54
+ upsertSecurityGroup: upsertSecurityGroup,
55
+ };
56
+ },
57
+ );
@@ -0,0 +1,47 @@
1
+ import { module } from 'angular';
2
+
3
+ import { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';
4
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER } from './wizard/ServerGroupInstanceArchetype.controller';
5
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER } from './wizard/ServerGroupInstanceType.controller';
6
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER } from './wizard/advancedSettings/ServerGroupAdvancedSettings.controller';
7
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';
8
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER } from './wizard/basicSettings/ServerGroupBasicSettings.controller';
9
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE } from './wizard/capacity/capacitySelector.directive';
10
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER } from './wizard/healthSettings/ServerGroupHealthSettings.controller';
11
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE } from './wizard/healthSettings/healthSettingsSelector.directive';
12
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER } from './wizard/image/ServerGroupImageSettings.controller';
13
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE } from './wizard/image/imageSettingsSelector.directive';
14
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER } from './wizard/loadBalancers/ServerGroupLoadBalancers.controller';
15
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE } from './wizard/loadBalancers/serverGroupLoadBalancersSelector.directive';
16
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER } from './wizard/networkSettings/ServerGroupNetworkSettings.controller';
17
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE } from './wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive';
18
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER } from './wizard/securityGroup/ServerGroupSecurityGroups.controller';
19
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE } from './wizard/securityGroup/serverGroupSecurityGroupsSelector.directive';
20
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE } from './wizard/tags/tagsSelector.directive';
21
+ import { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';
22
+
23
+ ('use strict');
24
+
25
+ export const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE = 'spinnaker.azure.serverGroup.configure';
26
+ export const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE; // for backwards compatibility
27
+ module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE, [
28
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER,
29
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER,
30
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER,
31
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER,
32
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER,
33
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER,
34
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE,
35
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE,
36
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER,
37
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER,
38
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE,
39
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE,
40
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE,
41
+ AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,
42
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,
43
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER,
44
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE,
45
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,
46
+ AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE,
47
+ ]);
@@ -0,0 +1,175 @@
1
+ 'use strict';
2
+
3
+ import * as angular from 'angular';
4
+ import _ from 'lodash';
5
+
6
+ import { NameUtils } from '@spinnaker/core';
7
+ import { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';
8
+ import { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';
9
+
10
+ export const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =
11
+ 'spinnaker.azure.serverGroupCommandBuilder.service';
12
+ export const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility
13
+ angular
14
+ .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [
15
+ AZURE_IMAGE_IMAGE_READER,
16
+ AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,
17
+ ])
18
+ .factory('azureServerGroupCommandBuilder', [
19
+ '$q',
20
+ 'azureImageReader',
21
+ 'azureServerGroupTransformer',
22
+ function ($q, azureImageReader, azureServerGroupTransformer) {
23
+ function buildNewServerGroupCommand(application, defaults) {
24
+ defaults = defaults || {};
25
+
26
+ const defaultCredentials = defaults.account || application.defaultCredentials.azure;
27
+ const defaultRegion = defaults.region || application.defaultRegions.azure;
28
+
29
+ return azureImageReader.findImages({ provider: 'azure' }).then(function (images) {
30
+ return {
31
+ application: application.name,
32
+ credentials: defaultCredentials,
33
+ region: defaultRegion,
34
+ images,
35
+ loadBalancers: [],
36
+ selectedVnetSubnets: [],
37
+ strategy: '',
38
+ sku: {
39
+ capacity: 1,
40
+ },
41
+ zonesEnabled: false,
42
+ zones: [],
43
+ instanceTags: {},
44
+ dataDisks: [],
45
+ selectedProvider: 'azure',
46
+ viewState: {
47
+ instanceProfile: 'custom',
48
+ allImageSelection: null,
49
+ useAllImageSelection: false,
50
+ useSimpleCapacity: true,
51
+ usePreferredZones: true,
52
+ mode: defaults.mode || 'create',
53
+ disableStrategySelection: true,
54
+ loadBalancersConfigured: false,
55
+ networkSettingsConfigured: false,
56
+ securityGroupsConfigured: false,
57
+ },
58
+ enableInboundNAT: false,
59
+ };
60
+ });
61
+ }
62
+
63
+ // Only used to prepare view requiring template selecting
64
+ function buildNewServerGroupCommandForPipeline() {
65
+ return $q.when({
66
+ viewState: {
67
+ requiresTemplateSelection: true,
68
+ },
69
+ });
70
+ }
71
+
72
+ function buildServerGroupCommandFromExisting(application, serverGroup, mode) {
73
+ mode = mode || 'clone';
74
+
75
+ const serverGroupName = NameUtils.parseServerGroupName(serverGroup.name);
76
+
77
+ const command = {
78
+ application: application.name,
79
+ strategy: '',
80
+ stack: serverGroupName.stack,
81
+ freeFormDetails: serverGroupName.freeFormDetails,
82
+ credentials: serverGroup.account,
83
+ loadBalancers: serverGroup.loadBalancers,
84
+ selectedSubnets: serverGroup.selectedVnetSubnets,
85
+ selectedVnet: serverGroup.selectedVnet,
86
+ securityGroups: serverGroup.securityGroups,
87
+ loadBalancerName: serverGroup.loadBalancerName,
88
+ loadBalancerType: serverGroup.loadBalancerType,
89
+ securityGroupName: serverGroup.securityGroupName,
90
+ region: serverGroup.region,
91
+ vnet: serverGroup.vnet,
92
+ vnetResourceGroup: serverGroup.vnetResourceGroup,
93
+ subnet: serverGroup.subnet,
94
+ zones: serverGroup.zones,
95
+ zonesEnabled: serverGroup.zones && serverGroup.zones.length > 0,
96
+ instanceTags: {},
97
+ dataDisks: serverGroup.dataDisks,
98
+ sku: serverGroup.sku,
99
+ capacity: {
100
+ min: serverGroup.capacity.min,
101
+ max: serverGroup.capacity.max,
102
+ desired: serverGroup.capacity.desired,
103
+ },
104
+ tags: [],
105
+ instanceType: serverGroup.sku.name,
106
+ selectedProvider: 'azure',
107
+ source: {
108
+ account: serverGroup.account,
109
+ region: serverGroup.region,
110
+ serverGroupName: serverGroup.name,
111
+ asgName: serverGroup.name,
112
+ },
113
+ viewState: {
114
+ allImageSelection: null,
115
+ useAllImageSelection: false,
116
+ useSimpleCapacity: true,
117
+ usePreferredZones: false,
118
+ listImplicitSecurityGroups: false,
119
+ mode: mode,
120
+ disableStrategySelection: true,
121
+ },
122
+ enableInboundNAT: serverGroup.enableInboundNAT,
123
+ };
124
+
125
+ if (typeof serverGroup.customScriptsSettings !== 'undefined') {
126
+ command.customScriptsSettings = {};
127
+ command.customScriptsSettings.commandToExecute = serverGroup.customScriptsSettings.commandToExecute;
128
+ if (!_.isEmpty(serverGroup.customScriptsSettings.fileUris)) {
129
+ azureServerGroupTransformer.parseCustomScriptsSettings(serverGroup, command);
130
+ }
131
+ }
132
+
133
+ return $q.when(command);
134
+ }
135
+
136
+ function buildServerGroupCommandFromPipeline(application, originalCluster) {
137
+ const pipelineCluster = _.cloneDeep(originalCluster);
138
+ const region = pipelineCluster.region;
139
+
140
+ const commandOptions = { account: pipelineCluster.account, region: region };
141
+ return buildNewServerGroupCommand(application, commandOptions).then(function (command) {
142
+ const viewState = {
143
+ disableImageSelection: true,
144
+ useSimpleCapacity: true,
145
+ mode: 'editPipeline',
146
+ submitButtonLabel: 'Done',
147
+ instanceProfile: originalCluster.viewState.instanceProfile,
148
+ instanceTypeDetails: originalCluster.viewState.instanceTypeDetails,
149
+ };
150
+
151
+ const viewOverrides = {
152
+ region: region,
153
+ credentials: pipelineCluster.account,
154
+ viewState: viewState,
155
+ };
156
+ if (originalCluster.viewState.instanceTypeDetails) {
157
+ viewOverrides.instanceType = originalCluster.viewState.instanceTypeDetails.name;
158
+ }
159
+
160
+ pipelineCluster.strategy = pipelineCluster.strategy || '';
161
+
162
+ const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);
163
+
164
+ return extendedCommand;
165
+ });
166
+ }
167
+
168
+ return {
169
+ buildNewServerGroupCommand: buildNewServerGroupCommand,
170
+ buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,
171
+ buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,
172
+ buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,
173
+ };
174
+ },
175
+ ]);
@@ -0,0 +1,357 @@
1
+ 'use strict';
2
+
3
+ import * as angular from 'angular';
4
+ import _ from 'lodash';
5
+
6
+ import {
7
+ AccountService,
8
+ CACHE_INITIALIZER_SERVICE,
9
+ LOAD_BALANCER_READ_SERVICE,
10
+ SECURITY_GROUP_READER,
11
+ } from '@spinnaker/core';
12
+ import { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';
13
+ import { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from '../../instance/azureInstanceType.service';
14
+
15
+ export const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =
16
+ 'spinnaker.azure.serverGroup.configure.service';
17
+ export const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility
18
+ angular
19
+ .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [
20
+ AZURE_IMAGE_IMAGE_READER,
21
+ LOAD_BALANCER_READ_SERVICE,
22
+ SECURITY_GROUP_READER,
23
+ CACHE_INITIALIZER_SERVICE,
24
+ AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,
25
+ ])
26
+ .factory('azureServerGroupConfigurationService', [
27
+ '$q',
28
+ 'azureImageReader',
29
+ 'securityGroupReader',
30
+ 'cacheInitializer',
31
+ 'loadBalancerReader',
32
+ 'azureInstanceTypeService',
33
+ function (
34
+ $q,
35
+ azureImageReader,
36
+ securityGroupReader,
37
+ cacheInitializer,
38
+ loadBalancerReader,
39
+ azureInstanceTypeService,
40
+ ) {
41
+ const dataDiskTypes = ['Standard_LRS', 'StandardSSD_LRS', 'Premium_LRS'];
42
+ const dataDiskCachingTypes = ['None', 'ReadOnly', 'ReadWrite'];
43
+
44
+ const healthCheckTypes = ['EC2', 'ELB'];
45
+ const terminationPolicies = [
46
+ 'OldestInstance',
47
+ 'NewestInstance',
48
+ 'OldestLaunchConfiguration',
49
+ 'ClosestToNextInstanceHour',
50
+ 'Default',
51
+ ];
52
+
53
+ function configureUpdateCommand(command) {
54
+ command.backingData = {
55
+ healthCheckTypes: angular.copy(healthCheckTypes),
56
+ terminationPolicies: angular.copy(terminationPolicies),
57
+ };
58
+ }
59
+
60
+ function configureCommand(application, command) {
61
+ return $q
62
+ .all([
63
+ AccountService.getCredentialsKeyedByAccount('azure'),
64
+ securityGroupReader.loadSecurityGroups(),
65
+ loadBalancerReader.loadLoadBalancers(application.name),
66
+ ])
67
+ .then(function ([credentialsKeyedByAccount, securityGroups, loadBalancers]) {
68
+ command.backingData = {
69
+ credentialsKeyedByAccount,
70
+ securityGroups,
71
+ loadBalancers,
72
+ dataDiskTypes: angular.copy(dataDiskTypes),
73
+ dataDiskCachingTypes: angular.copy(dataDiskCachingTypes),
74
+ accounts: _.keys(credentialsKeyedByAccount),
75
+ filtered: {},
76
+ };
77
+ attachEventHandlers(command);
78
+ });
79
+ }
80
+
81
+ function configureInstanceTypes(command) {
82
+ const result = {
83
+ dirty: {},
84
+ };
85
+ if (command.region) {
86
+ const results = [result.dirty];
87
+
88
+ // results.push(configureCustomInstanceTypes(command).dirty);
89
+ results.push(configureStandardInstanceTypes(command).dirty);
90
+
91
+ angular.extend(...results);
92
+ } else {
93
+ command.backingData.filtered.instanceTypes = [];
94
+ }
95
+ return result;
96
+ }
97
+
98
+ function configureStandardInstanceTypes(command) {
99
+ const c = command;
100
+ const result = {
101
+ dirty: {},
102
+ };
103
+
104
+ const locations = [c.region];
105
+ const { credentialsKeyedByAccount } = c.backingData;
106
+ const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];
107
+
108
+ if (locations.every((l) => !l)) {
109
+ return result;
110
+ }
111
+
112
+ const filtered = azureInstanceTypeService
113
+ .getAvailableTypesForRegions(locationToInstanceTypesMap, locations)
114
+ .map((type) => type.name);
115
+
116
+ const instanceType = c.instanceType;
117
+ if (_.every([instanceType, !_.startsWith(instanceType, 'custom'), !_.includes(filtered, instanceType)])) {
118
+ result.dirty.instanceType = c.instanceType;
119
+ c.instanceType = null;
120
+ }
121
+ c.backingData.filtered.instanceTypes = filtered;
122
+ return result;
123
+ }
124
+
125
+ function configureImages(command) {
126
+ const result = {
127
+ dirty: {},
128
+ };
129
+ let regionalImages = null;
130
+ if (command.viewState.disableImageSelection) {
131
+ return result;
132
+ }
133
+ if (command.region) {
134
+ regionalImages = command.backingData.packageImages
135
+ .filter(function (image) {
136
+ return image.amis && image.amis[command.region];
137
+ })
138
+ .map(function (image) {
139
+ return {
140
+ imageName: image.imageName,
141
+ ami: image.amis ? image.amis[command.region][0] : null,
142
+ };
143
+ });
144
+ if (
145
+ command.amiName &&
146
+ !regionalImages.some(function (image) {
147
+ return image.imageName === command.amiName;
148
+ })
149
+ ) {
150
+ result.dirty.amiName = true;
151
+ command.amiName = null;
152
+ }
153
+ } else {
154
+ command.amiName = null;
155
+ }
156
+ command.backingData.filtered.images = regionalImages;
157
+ return result;
158
+ }
159
+
160
+ function configureZones(command) {
161
+ const result = { dirty: {} };
162
+ const filteredData = command.backingData.filtered;
163
+ if (!command.region) {
164
+ return result;
165
+ }
166
+ let { regionsSupportZones, availabilityZones } = command.backingData.credentialsKeyedByAccount[
167
+ command.credentials
168
+ ];
169
+ regionsSupportZones = regionsSupportZones || [];
170
+ availabilityZones = availabilityZones || [];
171
+ filteredData.zones = regionsSupportZones.includes(command.region) ? availabilityZones : [];
172
+
173
+ return result;
174
+ }
175
+
176
+ function getRegionalSecurityGroups(command) {
177
+ const newSecurityGroups = command.backingData.securityGroups[command.credentials] || {
178
+ azure: {},
179
+ };
180
+ return _.chain(newSecurityGroups[command.region]).sortBy('name').value();
181
+ }
182
+
183
+ function configureSecurityGroupOptions(command) {
184
+ const result = {
185
+ dirty: {},
186
+ };
187
+ let currentOptions;
188
+ if (command.backingData.filtered.securityGroups) {
189
+ currentOptions = command.backingData.filtered.securityGroups;
190
+ }
191
+ const newRegionalSecurityGroups = getRegionalSecurityGroups(command);
192
+ if (command.selectedSecurityGroup) {
193
+ // one has not been previously selected. We are either configuring for the
194
+ //first time or they changed regions or account
195
+ command.selectedSecurityGroup = null;
196
+ result.dirty.securityGroups = true;
197
+ }
198
+ if (currentOptions != newRegionalSecurityGroups) {
199
+ command.backingData.filtered.securityGroups = newRegionalSecurityGroups;
200
+ result.dirty.securityGroups = true;
201
+ }
202
+
203
+ if (command.backingData.filtered.securityGroups === []) {
204
+ command.viewState.securityGroupsConfigured = false;
205
+ } else {
206
+ command.viewState.securityGroupsConfigured = true;
207
+ }
208
+
209
+ return result;
210
+ }
211
+
212
+ function refreshSecurityGroups(command, skipCommandReconfiguration) {
213
+ return cacheInitializer.refreshCache('securityGroups').then(function () {
214
+ return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {
215
+ command.backingData.securityGroups = securityGroups;
216
+ if (!skipCommandReconfiguration) {
217
+ configureSecurityGroupOptions(command);
218
+ }
219
+ });
220
+ });
221
+ }
222
+
223
+ function getLoadBalancerNames(loadBalancers) {
224
+ return _.chain(loadBalancers).map('name').uniq().value().sort();
225
+ }
226
+
227
+ function configureLoadBalancerOptions(command) {
228
+ const result = {
229
+ dirty: {},
230
+ };
231
+ const current = command.loadBalancers;
232
+ const newLoadBalancers = getLoadBalancerNames(command.backingData.loadBalancers);
233
+
234
+ if (current && command.loadBalancers) {
235
+ const matched = _.intersection(newLoadBalancers, command.loadBalancers);
236
+ const removed = _.xor(matched, current);
237
+ command.loadBalancers = matched;
238
+ if (removed.length) {
239
+ result.dirty.loadBalancers = removed;
240
+ }
241
+ }
242
+ command.backingData.filtered.loadBalancers = newLoadBalancers;
243
+ return result;
244
+ }
245
+
246
+ function refreshLoadBalancers(command, skipCommandReconfiguration) {
247
+ return loadBalancerReader.listLoadBalancers('azure').then(function (loadBalancers) {
248
+ command.backingData.loadBalancers = loadBalancers;
249
+ if (!skipCommandReconfiguration) {
250
+ configureLoadBalancerOptions(command);
251
+ }
252
+ });
253
+ }
254
+
255
+ function configureLoadBalancers(command) {
256
+ const result = {
257
+ dirty: {},
258
+ };
259
+ const temp = command.backingData.loadBalancers;
260
+ const filterlist = _.filter(temp, function (lb) {
261
+ return lb.account === command.credentials && lb.region === command.region;
262
+ });
263
+
264
+ command.loadBalancers = getLoadBalancerNames(filterlist);
265
+ command.viewState.loadBalancersConfigured = true;
266
+
267
+ return result;
268
+ }
269
+
270
+ function attachEventHandlers(cmd) {
271
+ cmd.regionChanged = function regionChanged(command, isInit = false) {
272
+ const result = {
273
+ dirty: {},
274
+ };
275
+ if (command.region && command.credentials) {
276
+ angular.extend(result.dirty, configureLoadBalancers(command).dirty);
277
+ angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);
278
+ angular.extend(result.dirty, configureInstanceTypes(command).dirty);
279
+ angular.extend(result.dirty, configureZones(command).dirty);
280
+ }
281
+ // reset previous set values
282
+ if (!isInit) {
283
+ command.loadBalancerName = null;
284
+ command.loadBalancerType = null;
285
+ command.vnet = null;
286
+ command.vnetResourceGroup = null;
287
+ command.subnet = null;
288
+ command.selectedSubnet = null;
289
+ command.selectedVnet = null;
290
+ command.selectedVnetSubnets = [];
291
+ command.viewState.networkSettingsConfigured = false;
292
+ command.selectedSecurityGroup = null;
293
+ command.securityGroupName = null;
294
+ command.zonesEnabled = false;
295
+ command.zones = [];
296
+ }
297
+
298
+ return result;
299
+ };
300
+
301
+ cmd.credentialsChanged = function credentialsChanged(command, isInit) {
302
+ const result = {
303
+ dirty: {},
304
+ };
305
+ const backingData = command.backingData;
306
+ if (command.credentials) {
307
+ const regionsForAccount = backingData.credentialsKeyedByAccount[command.credentials] || {
308
+ regions: [],
309
+ defaultKeyPair: null,
310
+ };
311
+ backingData.filtered.regions = regionsForAccount.regions;
312
+ if (
313
+ !_.chain(backingData.filtered.regions)
314
+ .some({
315
+ name: command.region,
316
+ })
317
+ .value()
318
+ ) {
319
+ command.region = null;
320
+ result.dirty.region = true;
321
+ } else {
322
+ angular.extend(result.dirty, command.regionChanged(command, isInit).dirty);
323
+ }
324
+ if (command.region) {
325
+ angular.extend(result.dirty, configureLoadBalancers(command).dirty);
326
+ }
327
+ angular.extend(result.dirty, configureInstanceTypes(command).dirty);
328
+ } else {
329
+ command.region = null;
330
+ }
331
+ return result;
332
+ };
333
+ }
334
+
335
+ function refreshInstanceTypes(command) {
336
+ return cacheInitializer.refreshCache('instanceTypes').then(function () {
337
+ return azureInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {
338
+ command.backingData.instanceTypes = instanceTypes;
339
+ configureInstanceTypes(command);
340
+ });
341
+ });
342
+ }
343
+
344
+ return {
345
+ configureUpdateCommand: configureUpdateCommand,
346
+ configureCommand: configureCommand,
347
+ configureImages: configureImages,
348
+ configureSecurityGroupOptions: configureSecurityGroupOptions,
349
+ configureLoadBalancerOptions: configureLoadBalancerOptions,
350
+ refreshLoadBalancers: refreshLoadBalancers,
351
+ refreshSecurityGroups: refreshSecurityGroups,
352
+ getRegionalSecurityGroups: getRegionalSecurityGroups,
353
+ refreshInstanceTypes: refreshInstanceTypes,
354
+ configureZones: configureZones,
355
+ };
356
+ },
357
+ ]);