@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,209 @@
1
+ 'use strict';
2
+
3
+ describe('Service: azureServerGroupConfiguration', function () {
4
+ var service;
5
+
6
+ beforeEach(window.module(require('./serverGroupConfiguration.service').name));
7
+
8
+ beforeEach(
9
+ window.inject(function (_azureServerGroupConfigurationService_) {
10
+ service = _azureServerGroupConfigurationService_;
11
+
12
+ this.allLoadBalancers = [
13
+ {
14
+ name: 'elb-1',
15
+ accounts: [
16
+ {
17
+ name: 'test',
18
+ regions: [
19
+ {
20
+ name: 'us-east-1',
21
+ loadBalancers: [
22
+ { region: 'us-east-1', vpcId: null, name: 'elb-1' },
23
+ { region: 'us-east-1', vpcId: 'vpc-1', name: 'elb-1' },
24
+ ],
25
+ },
26
+ ],
27
+ },
28
+ ],
29
+ },
30
+ {
31
+ name: 'elb-2',
32
+ accounts: [
33
+ {
34
+ name: 'test',
35
+ regions: [
36
+ {
37
+ name: 'us-east-1',
38
+ loadBalancers: [
39
+ { region: 'us-east-1', vpcId: null, name: 'elb-2' },
40
+ { region: 'us-east-1', vpcId: 'vpc-2', name: 'elb-2' },
41
+ ],
42
+ },
43
+ {
44
+ name: 'us-west-1',
45
+ loadBalancers: [{ region: 'us-west-1', vpcId: null, name: 'elb-2' }],
46
+ },
47
+ ],
48
+ },
49
+ ],
50
+ },
51
+ ];
52
+ }),
53
+ );
54
+
55
+ describe('configureSecurityGroupOptions', function () {
56
+ beforeEach(function () {
57
+ this.allSecurityGroups = {
58
+ azurecred1: {
59
+ eastus: [
60
+ {
61
+ 'onlyazure-web': {
62
+ account: 'azure-cred1',
63
+ accountName: 'azure-cred1',
64
+ id: 'onlyazure-web',
65
+ name: 'onlyazure-web',
66
+ network: 'na',
67
+ provider: 'azure',
68
+ region: 'eastus',
69
+ },
70
+ },
71
+ {
72
+ 'onlyazure-cache': {
73
+ account: 'azure-cred1',
74
+ accountName: 'azure-cred1',
75
+ id: 'onlyazure-cache',
76
+ name: 'onlyazure-cache',
77
+ network: 'na',
78
+ provider: 'azure',
79
+ region: 'eastus',
80
+ },
81
+ },
82
+ ],
83
+ westus: [
84
+ {
85
+ 'onlyazure-web': {
86
+ account: 'azure-cred1',
87
+ accountName: 'azure-cred1',
88
+ id: 'onlyazure-web',
89
+ name: 'onlyazure-web',
90
+ network: 'na',
91
+ provider: 'azure',
92
+ region: 'westus',
93
+ },
94
+ },
95
+ ],
96
+ },
97
+ };
98
+
99
+ this.command = {
100
+ backingData: {
101
+ securityGroups: this.allSecurityGroups,
102
+ filtered: {},
103
+ },
104
+ viewState: {
105
+ securityGroupsConfigured: false,
106
+ },
107
+ credentials: 'azurecred1',
108
+ region: 'westus',
109
+ };
110
+ });
111
+
112
+ it('finds matching firewalls and assigns them to the filtered list the first time', function () {
113
+ this.command.region = 'westus';
114
+ var expected = this.allSecurityGroups.azurecred1['westus'];
115
+
116
+ var result = service.configureSecurityGroupOptions(this.command);
117
+
118
+ expect(this.command.backingData.filtered.securityGroups).toEqual(expected);
119
+ expect(result).toEqual({ dirty: { securityGroups: true } });
120
+ expect(this.command.viewState.securityGroupConfigured).toBeTrue;
121
+ });
122
+
123
+ it('finds matching firewalls, sets dirty flag for subsequent time', function () {
124
+ this.command.region = 'eastus';
125
+ this.command.backingData.filtered.securityGroups = this.allSecurityGroups.azurecred1['westus'];
126
+ var expected = this.allSecurityGroups.azurecred1['eastus'];
127
+
128
+ var result = service.configureSecurityGroupOptions(this.command);
129
+
130
+ expect(this.command.backingData.filtered.securityGroups).toEqual(expected);
131
+ expect(result).toEqual({ dirty: { securityGroups: true } });
132
+ expect(this.command.viewState.securityGroupConfigured).toBeTrue;
133
+ });
134
+
135
+ it('clears the selected securityGroup', function () {
136
+ this.command.selectedSecurityGroup = {
137
+ 'onlyazure-web': {
138
+ account: 'azure-cred1',
139
+ accountName: 'azure-cred1',
140
+ id: 'onlyazure-web',
141
+ name: 'onlyazure-web',
142
+ network: 'na',
143
+ provider: 'azure',
144
+ region: 'westus',
145
+ },
146
+ };
147
+ this.command.region = 'eastus';
148
+
149
+ var result = service.configureSecurityGroupOptions(this.command);
150
+
151
+ expect(this.command.selectedSecurityGroup).toBeNull;
152
+ expect(result).toEqual({ dirty: { securityGroups: true } });
153
+ expect(this.command.viewState.securityGroupConfigured).toBeTrue;
154
+ });
155
+
156
+ it('returns no firewalls if none match', function () {
157
+ this.command.region = 'eastasia';
158
+ this.command.backingData.filtered.securityGroups = this.allSecurityGroups.azurecred1['westus'];
159
+
160
+ var result = service.configureSecurityGroupOptions(this.command);
161
+
162
+ expect(this.command.selectedSecurityGroup).toBeUndefined;
163
+ expect(result).toEqual({ dirty: { securityGroups: true } });
164
+ expect(this.command.backingData.filtered.securityGroups).toEqual([]);
165
+ expect(this.command.viewState.securityGroupConfigured).toBeFalse;
166
+ });
167
+
168
+ it('returns empty zone list if region is not supported', function () {
169
+ this.command.region = 'eastasia';
170
+ this.command.backingData.credentialsKeyedByAccount = {};
171
+ this.command.backingData.credentialsKeyedByAccount[this.command.credentials] = {
172
+ regionsSupportZones: [],
173
+ availabilityZones: ['1', '2', '3'],
174
+ };
175
+
176
+ service.configureZones(this.command);
177
+
178
+ expect(this.command.backingData.filtered.zones).toEqual([]);
179
+ });
180
+
181
+ it('returns actual zone list if region is supported', function () {
182
+ this.command.region = 'eastasia';
183
+ this.command.backingData.credentialsKeyedByAccount = {};
184
+ this.command.backingData.credentialsKeyedByAccount[this.command.credentials] = {
185
+ regionsSupportZones: ['eastasia'],
186
+ availabilityZones: ['1', '2', '3'],
187
+ };
188
+
189
+ service.configureZones(this.command);
190
+
191
+ expect(this.command.backingData.filtered.zones).toEqual(
192
+ this.command.backingData.credentialsKeyedByAccount[this.command.credentials].availabilityZones,
193
+ );
194
+ });
195
+
196
+ it('does not return zone list if region is not specified', function () {
197
+ this.command.region = null;
198
+ this.command.backingData.credentialsKeyedByAccount = {};
199
+ this.command.backingData.credentialsKeyedByAccount[this.command.credentials] = {
200
+ regionsSupportZones: ['eastasia'],
201
+ availabilityZones: ['1', '2', '3'],
202
+ };
203
+
204
+ service.configureZones(this.command);
205
+
206
+ expect(this.command.backingData.filtered.zones).toBeUndefined();
207
+ });
208
+ });
209
+ });
@@ -0,0 +1,247 @@
1
+ 'use strict';
2
+
3
+ import UIROUTER_ANGULARJS from '@uirouter/angularjs';
4
+ import { module } from 'angular';
5
+
6
+ import { FirewallLabels, ModalWizard, SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';
7
+
8
+ import { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../../serverGroup.transformer';
9
+ import { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';
10
+ import Utility from '../../../utility';
11
+
12
+ export const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER =
13
+ 'spinnaker.azure.cloneServerGroup.controller';
14
+ export const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER; // for backwards compatibility
15
+ module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER, [
16
+ UIROUTER_ANGULARJS,
17
+ AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,
18
+ AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,
19
+ SERVER_GROUP_WRITER,
20
+ ]).controller('azureCloneServerGroupCtrl', [
21
+ '$scope',
22
+ '$uibModalInstance',
23
+ '$q',
24
+ '$state',
25
+ 'serverGroupWriter',
26
+ 'azureServerGroupConfigurationService',
27
+ 'serverGroupCommand',
28
+ 'application',
29
+ 'title',
30
+ function (
31
+ $scope,
32
+ $uibModalInstance,
33
+ $q,
34
+ $state,
35
+ serverGroupWriter,
36
+ azureServerGroupConfigurationService,
37
+ serverGroupCommand,
38
+ application,
39
+ title,
40
+ ) {
41
+ $scope.pages = {
42
+ templateSelection: require('./templateSelection.html'),
43
+ basicSettings: require('./basicSettings/basicSettings.html'),
44
+ imageSettings: require('./image/imageSettings.html'),
45
+ healthSettings: require('./healthSettings/healthSettings.html'),
46
+ loadBalancers: require('./loadBalancers/loadBalancers.html'),
47
+ networkSettings: require('./networkSettings/networkSettings.html'),
48
+ securityGroups: require('./securityGroup/securityGroups.html'),
49
+ instanceType: require('./instanceType/instanceType.html'),
50
+ zones: require('./capacity/zones.html'),
51
+ tags: require('./tags/tags.html'),
52
+ advancedSettings: require('./advancedSettings/advancedSettings.html'),
53
+ };
54
+
55
+ $scope.firewallsLabel = FirewallLabels.get('Firewalls');
56
+
57
+ $scope.title = title;
58
+
59
+ $scope.applicationName = application.name;
60
+ $scope.application = application;
61
+ $scope.command = serverGroupCommand;
62
+
63
+ // Give regions an init value to prevent it being undefined. If so, the React component RegionSelectField would get "undefined" for property regions
64
+ // and then be unmounted so that the region selector would be hidden.
65
+ $scope.command.backingData = $scope.command.backingData || {};
66
+ $scope.command.backingData.filtered = $scope.command.backingData.filtered || {};
67
+ $scope.command.backingData.filtered.regions = $scope.command.backingData.filtered.regions || [];
68
+
69
+ $scope.state = {
70
+ loaded: false,
71
+ requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,
72
+ };
73
+
74
+ this.templateSelectionText = {
75
+ copied: [
76
+ 'account, region, subnet, cluster name (stack, details)',
77
+ 'load balancers',
78
+ FirewallLabels.get('firewalls'),
79
+ 'instance type',
80
+ 'all fields on the Advanced Settings page',
81
+ ],
82
+ notCopied: [],
83
+ additionalCopyText:
84
+ 'If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group.',
85
+ };
86
+
87
+ if (!$scope.command.viewState.disableStrategySelection) {
88
+ this.templateSelectionText.notCopied.push(
89
+ 'the deployment strategy (if any) used to deploy the most recent server group',
90
+ );
91
+ }
92
+
93
+ function onApplicationRefresh() {
94
+ // If the user has already closed the modal, do not navigate to the new details view
95
+ if ($scope.$$destroyed) {
96
+ return;
97
+ }
98
+ const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');
99
+ if (cloneStage && cloneStage.context['deploy.server.groups']) {
100
+ const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];
101
+ if (newServerGroupName) {
102
+ const newStateParams = {
103
+ serverGroup: newServerGroupName,
104
+ accountId: $scope.command.credentials,
105
+ region: $scope.command.region,
106
+ provider: 'azure',
107
+ };
108
+ let transitionTo = '^.^.^.clusters.serverGroup';
109
+ if ($state.includes('**.clusters.serverGroup')) {
110
+ // clone via details, all view
111
+ transitionTo = '^.serverGroup';
112
+ }
113
+ if ($state.includes('**.clusters.cluster.serverGroup')) {
114
+ // clone or create with details open
115
+ transitionTo = '^.^.serverGroup';
116
+ }
117
+ if ($state.includes('**.clusters')) {
118
+ // create new, no details open
119
+ transitionTo = '.serverGroup';
120
+ }
121
+ $state.go(transitionTo, newStateParams);
122
+ }
123
+ }
124
+ }
125
+
126
+ function onTaskComplete() {
127
+ application.serverGroups.refresh();
128
+ application.serverGroups.onNextRefresh($scope, onApplicationRefresh);
129
+ }
130
+
131
+ $scope.taskMonitor = new TaskMonitor({
132
+ application: application,
133
+ title: 'Creating your server group',
134
+ modalInstance: $uibModalInstance,
135
+ onTaskComplete: onTaskComplete,
136
+ });
137
+
138
+ function configureCommand() {
139
+ azureServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {
140
+ const mode = serverGroupCommand.viewState.mode;
141
+ if (mode === 'clone' || mode === 'create') {
142
+ serverGroupCommand.viewState.useAllImageSelection = true;
143
+ }
144
+ $scope.state.loaded = true;
145
+ initializeWizardState();
146
+ initializeSelectOptions();
147
+ initializeWatches();
148
+ });
149
+ }
150
+
151
+ function initializeWizardState() {
152
+ const mode = serverGroupCommand.viewState.mode;
153
+ if (mode === 'clone' || mode === 'editPipeline') {
154
+ ModalWizard.markComplete('basic-settings');
155
+ ModalWizard.markComplete('load-balancers');
156
+ ModalWizard.markComplete('network-settings');
157
+ ModalWizard.markComplete('security-groups');
158
+ ModalWizard.markComplete('instance-type');
159
+ ModalWizard.markComplete('zones');
160
+ }
161
+ }
162
+
163
+ function initializeWatches() {
164
+ $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));
165
+ $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));
166
+ }
167
+
168
+ function initializeSelectOptions() {
169
+ processCommandUpdateResult($scope.command.credentialsChanged($scope.command, true));
170
+ processCommandUpdateResult($scope.command.regionChanged($scope.command, true));
171
+ }
172
+
173
+ function createResultProcessor(method) {
174
+ return function (newValue, oldValue) {
175
+ if (newValue !== oldValue) {
176
+ processCommandUpdateResult(method($scope.command));
177
+ }
178
+ };
179
+ }
180
+
181
+ function processCommandUpdateResult(result) {
182
+ if (result.dirty.loadBalancers) {
183
+ ModalWizard.markDirty('load-balancers');
184
+ ModalWizard.markDirty('network-settings');
185
+ }
186
+ if (result.dirty.securityGroups) {
187
+ ModalWizard.markDirty('security-groups');
188
+ }
189
+ if (result.dirty.instanceType) {
190
+ ModalWizard.markDirty('instance-type');
191
+ }
192
+ if (result.dirty.zoneEnabled || result.dirty.zones) {
193
+ ModalWizard.markDirty('zones');
194
+ }
195
+ }
196
+
197
+ this.submit = function () {
198
+ if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {
199
+ return $uibModalInstance.close($scope.command);
200
+ }
201
+ $scope.taskMonitor.submit(function () {
202
+ return serverGroupWriter.cloneServerGroup($scope.command, application);
203
+ });
204
+ };
205
+
206
+ this.cancel = function () {
207
+ $uibModalInstance.dismiss();
208
+ };
209
+
210
+ this.toggleSuspendedProcess = function (process) {
211
+ $scope.command.suspendedProcesses = $scope.command.suspendedProcesses || [];
212
+ const processIndex = $scope.command.suspendedProcesses.indexOf(process);
213
+ if (processIndex === -1) {
214
+ $scope.command.suspendedProcesses.push(process);
215
+ } else {
216
+ $scope.command.suspendedProcesses.splice(processIndex, 1);
217
+ }
218
+ };
219
+
220
+ this.processIsSuspended = function (process) {
221
+ return $scope.command.suspendedProcesses.includes(process);
222
+ };
223
+
224
+ if (!$scope.state.requiresTemplateSelection) {
225
+ configureCommand();
226
+ } else {
227
+ $scope.state.loaded = true;
228
+ }
229
+
230
+ this.templateSelected = () => {
231
+ $scope.state.requiresTemplateSelection = false;
232
+ configureCommand();
233
+ };
234
+
235
+ this.isValid = function () {
236
+ return (
237
+ $scope.command &&
238
+ $scope.command.application &&
239
+ $scope.command.credentials &&
240
+ $scope.command.instanceType &&
241
+ $scope.command.region &&
242
+ (!$scope.command.zonesEnabled || $scope.command.zones.length !== 0) &&
243
+ Utility.checkTags($scope.command.instanceTags).isValid
244
+ );
245
+ };
246
+ },
247
+ ]);
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ import { module } from 'angular';
4
+
5
+ export const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER =
6
+ 'spinnaker.azure.serverGroup.configure.instanceArchetype.controller';
7
+ export const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER; // for backwards compatibility
8
+ module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER, []).controller(
9
+ 'azureInstanceArchetypeCtrl',
10
+ [
11
+ '$scope',
12
+ 'instanceTypeService',
13
+ 'modalWizardService',
14
+ function ($scope, instanceTypeService, modalWizardService) {
15
+ const wizard = modalWizardService.getWizard();
16
+
17
+ $scope.$watch('command.viewState.instanceProfile', function () {
18
+ if (!$scope.command.viewState.instanceProfile || $scope.command.viewState.instanceProfile === 'custom') {
19
+ wizard.excludePage('instance-type');
20
+ } else {
21
+ wizard.includePage('instance-type');
22
+ wizard.markClean('instance-profile');
23
+ wizard.markComplete('instance-profile');
24
+ }
25
+ });
26
+
27
+ $scope.$watch('command.viewState.instanceType', function (newVal) {
28
+ if (newVal) {
29
+ wizard.markClean('instance-profile');
30
+ wizard.markComplete('instance-profile');
31
+ }
32
+ });
33
+ },
34
+ ],
35
+ );
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ import { module } from 'angular';
4
+
5
+ export const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER =
6
+ 'spinnaker.azure.serverGroup.configure.instanceType.controller';
7
+ export const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER; // for backwards compatibility
8
+ module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER, []).controller('azureInstanceTypeCtrl', [
9
+ '$scope',
10
+ 'modalWizardService',
11
+ function ($scope, modalWizardService) {
12
+ modalWizardService.getWizard().markComplete('instance-type');
13
+ modalWizardService.getWizard().markClean('instance-type');
14
+ },
15
+ ]);
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ import { module } from 'angular';
4
+
5
+ export const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER =
6
+ 'spinnaker.azure.serverGroup.configure.advancedSetting.controller';
7
+ export const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER; // for backwards compatibility
8
+ module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER, []).controller(
9
+ 'azureServerGroupAdvancedSettingsCtrl',
10
+ [
11
+ '$scope',
12
+ 'modalWizardService',
13
+ function ($scope, modalWizardService) {
14
+ modalWizardService.getWizard().markComplete('advanced');
15
+
16
+ $scope.$watch('form.$valid', function (newVal) {
17
+ if (newVal) {
18
+ modalWizardService.getWizard().markClean('advanced');
19
+ } else {
20
+ modalWizardService.getWizard().markDirty('advanced');
21
+ }
22
+ });
23
+ },
24
+ ],
25
+ );
@@ -0,0 +1,5 @@
1
+ <div class="row">
2
+ <div class="col-md-12">
3
+ <azure-server-group-advanced-settings-selector command="command"></azure-server-group-advanced-settings-selector>
4
+ </div>
5
+ </div>
@@ -0,0 +1,138 @@
1
+ <div class="container-fluid form-horizontal">
2
+ <div class="form-group">
3
+ <div class="form-group">
4
+ <div class="col-md-4 sm-label-right">Number of Instances</div>
5
+ <div class="col-md-2">
6
+ <input
7
+ type="number"
8
+ class="form-control input-sm"
9
+ ng-model="adv.command.sku.capacity"
10
+ min="0"
11
+ max="100"
12
+ required
13
+ />
14
+ </div>
15
+ </div>
16
+ <div></div>
17
+ <div class="form-group">
18
+ <div class="col-xs-4 sm-label-right">
19
+ <b>Custom Data</b>
20
+ <help-field key="azure.serverGroup.customData"></help-field>
21
+ </div>
22
+ <div class="col-md-7">
23
+ <input type="text" class="form-control input-sm" ng-model="adv.command.osConfig.customData" />
24
+ </div>
25
+ </div>
26
+ <div class="form-group">
27
+ <div class="col-md-4 sm-label-right">
28
+ <b>Custom Script</b>
29
+ <help-field key="azure.serverGroup.scriptLocation"></help-field>
30
+ </div>
31
+ <div class="col-md-7">
32
+ <input type="text" class="form-control input-sm" ng-model="adv.command.customScriptsSettings.fileUris" />
33
+ </div>
34
+ </div>
35
+ <div class="form-group">
36
+ <div class="col-md-4 sm-label-right">
37
+ <b>Command To Execute</b>
38
+ <help-field key="azure.serverGroup.commandToExecute"></help-field>
39
+ </div>
40
+ <div class="col-md-7">
41
+ <input
42
+ type="text"
43
+ class="form-control input-sm"
44
+ ng-model="adv.command.customScriptsSettings.commandToExecute"
45
+ />
46
+ </div>
47
+ </div>
48
+ <div class="form-group" ng-if="adv.command.loadBalancerType === 'Azure Application Gateway'">
49
+ <div class="col-md-4 sm-label-right">
50
+ <input type="checkbox" ng-model="adv.command.enableInboundNAT" ng-disabled="adv.command.zonesEnabled" />
51
+ </div>
52
+ <div class="col-md-7">
53
+ <b>Enable inbound NAT port-forwarding rules to connect to VM instances</b>
54
+ <help-field key="azure.serverGroup.enableInboundNAT"></help-field>
55
+ </div>
56
+ </div>
57
+ <div class="form-group">
58
+ <div class="col-md-4 sm-label-right">
59
+ <b>User-Assigned Identities</b>
60
+ <help-field key="azure.serverGroup.userAssignedIdentities"></help-field>
61
+ </div>
62
+ <div class="col-md-7">
63
+ <input type="text" class="form-control input-sm" ng-model="adv.command.userAssignedIdentities" />
64
+ </div>
65
+ </div>
66
+ </div>
67
+ <div class="form-group">
68
+ <div class="col-md-4 sm-label-left">Data Disks</div>
69
+ <div class="col-md-11">
70
+ <table class="table table-condensed packed tags">
71
+ <thead>
72
+ <tr>
73
+ <th>
74
+ LUN
75
+ <help-field key="azure.serverGroup.lun"></help-field>
76
+ </th>
77
+ <th>
78
+ Size (GB)
79
+ <help-field key="azure.serverGroup.diskSizeGB"></help-field>
80
+ </th>
81
+ <th>
82
+ Type
83
+ <help-field key="azure.serverGroup.managedDisk.storageAccountType"></help-field>
84
+ </th>
85
+ <th>
86
+ Caching
87
+ <help-field key="azure.serverGroup.caching"></help-field>
88
+ </th>
89
+ </tr>
90
+ </thead>
91
+ <tbody>
92
+ <tr ng-repeat="disk in adv.command.dataDisks">
93
+ <td>
94
+ <input type="number" class="form-control input-sm" ng-model="disk.lun" required min="0" />
95
+ </td>
96
+ <td>
97
+ <input type="number" class="form-control input-sm" ng-model="disk.diskSizeGB" required min="1" />
98
+ </td>
99
+ <td>
100
+ <ui-select ng-model="disk.managedDisk.storageAccountType" class="form-control input-sm" required>
101
+ <ui-select-match placeholder="Select...">{{$select.selected}}</ui-select-match>
102
+ <ui-select-choices
103
+ repeat="dataDiskType in adv.command.backingData.dataDiskTypes | filter: $select.search"
104
+ >
105
+ <span ng-bind-html="dataDiskType | highlight: $select.search"></span>
106
+ </ui-select-choices>
107
+ </ui-select>
108
+ </td>
109
+ <td>
110
+ <ui-select ng-model="disk.caching" class="form-control input-sm" required>
111
+ <ui-select-match placeholder="Select...">{{$select.selected}}</ui-select-match>
112
+ <ui-select-choices
113
+ repeat="dataDiskCachingType in adv.command.backingData.dataDiskCachingTypes | filter: $select.search"
114
+ >
115
+ <span ng-bind-html="dataDiskCachingType | highlight: $select.search"></span>
116
+ </ui-select-choices>
117
+ </ui-select>
118
+ </td>
119
+ <td>
120
+ <a class="btn btn-link sm-label" style="margin-top: 0" ng-click="adv.removeDataDisk($index)">
121
+ <span class="glyphicon glyphicon-trash"></span>
122
+ </a>
123
+ </td>
124
+ </tr>
125
+ </tbody>
126
+ <tfoot>
127
+ <tr>
128
+ <td colspan="4">
129
+ <button class="btn btn-block btn-sm add-new" ng-click="adv.addDataDisk()">
130
+ <span class="glyphicon glyphicon-plus-sign"></span> Add New Data Disk
131
+ </button>
132
+ </td>
133
+ </tr>
134
+ </tfoot>
135
+ </table>
136
+ </div>
137
+ </div>
138
+ </div>