@spinnaker/azure 2026.2.2 → 2026.3.0

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 (215) hide show
  1. package/dist/azure.module.d.ts +3 -1
  2. package/dist/image/image.reader.d.ts +4 -2
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/instance/azureInstanceType.service.d.ts +6 -2
  6. package/dist/instance/details/AzureInstanceDetails.d.ts +67 -0
  7. package/dist/loadBalancer/configure/AzureLoadBalancerChoiceModal.d.ts +10 -5
  8. package/dist/loadBalancer/configure/AzureLoadBalancerModal.d.ts +102 -0
  9. package/dist/loadBalancer/details/azureLoadBalancerDetails.d.ts +26 -0
  10. package/dist/loadBalancer/loadBalancer.transformer.d.ts +45 -2
  11. package/dist/pipeline/stages/AzureAccountRegionClusterSelector.d.ts +32 -0
  12. package/dist/pipeline/stages/bake/azureBakeStage.d.ts +46 -2
  13. package/dist/pipeline/stages/destroyAsg/azureDestroyAsgStage.d.ts +14 -2
  14. package/dist/pipeline/stages/disableAsg/azureDisableAsgStage.d.ts +4 -2
  15. package/dist/pipeline/stages/enableAsg/azureEnableAsgStage.d.ts +4 -2
  16. package/dist/securityGroup/configure/AzureSecurityGroupModal.d.ts +70 -0
  17. package/dist/securityGroup/details/AzureSecurityGroupDetails.d.ts +51 -0
  18. package/dist/securityGroup/securityGroup.reader.d.ts +3 -2
  19. package/dist/securityGroup/securityGroup.transformer.d.ts +3 -2
  20. package/dist/securityGroup/securityGroup.write.service.d.ts +9 -2
  21. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +88 -2
  22. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +30 -2
  23. package/dist/serverGroup/configure/wizard/AzureCloneServerGroupModal.d.ts +44 -0
  24. package/dist/serverGroup/configure/wizard/pages/ServerGroupAdvancedSettings.d.ts +8 -0
  25. package/dist/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.d.ts +12 -0
  26. package/dist/serverGroup/configure/wizard/pages/ServerGroupCapacityAndZones.d.ts +11 -0
  27. package/dist/serverGroup/configure/wizard/pages/ServerGroupHealthSettings.d.ts +10 -0
  28. package/dist/serverGroup/configure/wizard/pages/ServerGroupImageSettings.d.ts +12 -0
  29. package/dist/serverGroup/configure/wizard/pages/ServerGroupInstanceType.d.ts +9 -0
  30. package/dist/serverGroup/configure/wizard/pages/ServerGroupLoadBalancers.d.ts +14 -0
  31. package/dist/serverGroup/configure/wizard/pages/ServerGroupNetworkSettings.d.ts +10 -0
  32. package/dist/serverGroup/configure/wizard/pages/ServerGroupSecurityGroups.d.ts +6 -0
  33. package/dist/serverGroup/configure/wizard/pages/ServerGroupTags.d.ts +9 -0
  34. package/dist/serverGroup/configure/wizard/pages/common.d.ts +14 -0
  35. package/dist/serverGroup/configure/wizard/pages/index.d.ts +10 -0
  36. package/dist/serverGroup/details/azureServerGroupDetails.d.ts +13 -0
  37. package/dist/serverGroup/details/rollback/RollbackServerGroupModal.d.ts +6 -4
  38. package/dist/serverGroup/serverGroup.transformer.d.ts +61 -2
  39. package/dist/validation/applicationName.validator.d.ts +6 -2
  40. package/package.json +5 -8
  41. package/src/azure.module.spec.ts +921 -0
  42. package/src/azure.module.ts +56 -68
  43. package/src/image/image.reader.js +4 -15
  44. package/src/image/image.reader.spec.js +4 -7
  45. package/src/instance/azureInstanceType.service.js +8 -16
  46. package/src/instance/azureInstanceType.service.spec.js +5 -13
  47. package/src/instance/details/AzureInstanceDetails.spec.tsx +364 -0
  48. package/src/instance/details/AzureInstanceDetails.tsx +533 -0
  49. package/src/loadBalancer/configure/AzureLoadBalancerChoiceModal.spec.tsx +125 -0
  50. package/src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx +46 -26
  51. package/src/loadBalancer/configure/AzureLoadBalancerModal.spec.tsx +658 -0
  52. package/src/loadBalancer/configure/AzureLoadBalancerModal.tsx +960 -0
  53. package/src/loadBalancer/details/azureLoadBalancerDetails.spec.tsx +470 -0
  54. package/src/loadBalancer/details/azureLoadBalancerDetails.tsx +412 -0
  55. package/src/loadBalancer/loadBalancer.transformer.js +83 -93
  56. package/src/pipeline/stages/AzureAccountRegionClusterSelector.tsx +238 -0
  57. package/src/pipeline/stages/bake/azureBakeStage.tsx +723 -0
  58. package/src/pipeline/stages/destroyAsg/azureDestroyAsgStage.tsx +128 -0
  59. package/src/pipeline/stages/disableAsg/azureDisableAsgStage.tsx +92 -0
  60. package/src/pipeline/stages/enableAsg/azureEnableAsgStage.tsx +87 -0
  61. package/src/routerConsumers.spec.tsx +69 -0
  62. package/src/securityGroup/configure/AzureSecurityGroupModal.spec.tsx +558 -0
  63. package/src/securityGroup/configure/AzureSecurityGroupModal.tsx +782 -0
  64. package/src/securityGroup/details/AzureSecurityGroupDetails.spec.tsx +291 -0
  65. package/src/securityGroup/details/AzureSecurityGroupDetails.tsx +354 -0
  66. package/src/securityGroup/securityGroup.reader.js +3 -13
  67. package/src/securityGroup/securityGroup.transformer.js +3 -13
  68. package/src/securityGroup/securityGroup.write.service.spec.ts +105 -0
  69. package/src/securityGroup/securityGroup.write.service.ts +73 -0
  70. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +167 -166
  71. package/src/serverGroup/configure/serverGroupCommandBuilder.service.spec.js +63 -0
  72. package/src/serverGroup/configure/serverGroupConfiguration.service.js +325 -309
  73. package/src/serverGroup/configure/serverGroupConfiguration.service.spec.js +57 -53
  74. package/src/serverGroup/configure/wizard/AzureCloneServerGroupModal.spec.tsx +758 -0
  75. package/src/serverGroup/configure/wizard/AzureCloneServerGroupModal.tsx +349 -0
  76. package/src/serverGroup/configure/wizard/pages/ServerGroupAdvancedSettings.tsx +208 -0
  77. package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.tsx +122 -0
  78. package/src/serverGroup/configure/wizard/pages/ServerGroupCapacityAndZones.tsx +80 -0
  79. package/src/serverGroup/configure/wizard/pages/ServerGroupHealthSettings.tsx +97 -0
  80. package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.tsx +151 -0
  81. package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx +41 -0
  82. package/src/serverGroup/configure/wizard/pages/ServerGroupLoadBalancers.tsx +214 -0
  83. package/src/serverGroup/configure/wizard/pages/ServerGroupNetworkSettings.tsx +119 -0
  84. package/src/serverGroup/configure/wizard/pages/ServerGroupSecurityGroups.tsx +54 -0
  85. package/src/serverGroup/configure/wizard/pages/ServerGroupTags.tsx +40 -0
  86. package/src/serverGroup/configure/wizard/pages/common.tsx +72 -0
  87. package/src/serverGroup/configure/wizard/pages/index.ts +10 -0
  88. package/src/serverGroup/details/azureServerGroupDetails.spec.tsx +263 -0
  89. package/src/serverGroup/details/azureServerGroupDetails.tsx +318 -0
  90. package/src/serverGroup/details/rollback/RollbackServerGroupModal.tsx +24 -30
  91. package/src/serverGroup/serverGroup.transformer.js +11 -19
  92. package/src/serverGroup/serverGroup.transformer.spec.js +2 -6
  93. package/src/validation/applicationName.validator.js +14 -29
  94. package/dist/instance/details/instance.details.controller.d.ts +0 -2
  95. package/dist/loadBalancer/configure/createLoadBalancer.controller.d.ts +0 -2
  96. package/dist/loadBalancer/details/loadBalancerDetail.controller.d.ts +0 -2
  97. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +0 -2
  98. package/dist/securityGroup/clone/cloneSecurityGroup.controller.d.ts +0 -2
  99. package/dist/securityGroup/configure/CreateSecurityGroupCtrl.d.ts +0 -2
  100. package/dist/securityGroup/configure/EditSecurityGroupCtrl.d.ts +0 -2
  101. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +0 -2
  102. package/dist/serverGroup/configure/serverGroup.configure.azure.module.d.ts +0 -2
  103. package/dist/serverGroup/configure/wizard/CloneServerGroup.azure.controller.d.ts +0 -2
  104. package/dist/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.d.ts +0 -2
  105. package/dist/serverGroup/configure/wizard/ServerGroupInstanceType.controller.d.ts +0 -2
  106. package/dist/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.d.ts +0 -2
  107. package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.d.ts +0 -2
  108. package/dist/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.d.ts +0 -2
  109. package/dist/serverGroup/configure/wizard/basicSettings/image.regional.filter.d.ts +0 -2
  110. package/dist/serverGroup/configure/wizard/capacity/capacitySelector.directive.d.ts +0 -2
  111. package/dist/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.d.ts +0 -2
  112. package/dist/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.d.ts +0 -2
  113. package/dist/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.d.ts +0 -2
  114. package/dist/serverGroup/configure/wizard/image/imageSettingsSelector.directive.d.ts +0 -2
  115. package/dist/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.d.ts +0 -2
  116. package/dist/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.d.ts +0 -2
  117. package/dist/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.d.ts +0 -2
  118. package/dist/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.d.ts +0 -2
  119. package/dist/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.d.ts +0 -2
  120. package/dist/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.d.ts +0 -2
  121. package/dist/serverGroup/configure/wizard/tags/tagsSelector.directive.d.ts +0 -2
  122. package/dist/serverGroup/configure/wizard/zones/zoneSelector.directive.d.ts +0 -2
  123. package/dist/serverGroup/details/serverGroup.details.module.d.ts +0 -2
  124. package/dist/serverGroup/details/serverGroupDetails.azure.controller.d.ts +0 -2
  125. package/src/instance/details/instance.details.controller.js +0 -371
  126. package/src/instance/details/instance.details.controller.spec.js +0 -129
  127. package/src/instance/details/instanceDetails.html +0 -43
  128. package/src/loadBalancer/configure/advancedSettings.html +0 -95
  129. package/src/loadBalancer/configure/createLoadBalancer.controller.js +0 -275
  130. package/src/loadBalancer/configure/createLoadBalancer.controller.spec.js +0 -39
  131. package/src/loadBalancer/configure/createLoadBalancer.html +0 -25
  132. package/src/loadBalancer/configure/createLoadBalancerProperties.html +0 -128
  133. package/src/loadBalancer/configure/editLoadBalancer.html +0 -26
  134. package/src/loadBalancer/configure/healthCheck.html +0 -74
  135. package/src/loadBalancer/configure/listeners.html +0 -50
  136. package/src/loadBalancer/details/loadBalancerDetail.controller.js +0 -181
  137. package/src/loadBalancer/details/loadBalancerDetail.controller.spec.js +0 -39
  138. package/src/loadBalancer/details/loadBalancerDetail.html +0 -128
  139. package/src/pipeline/stages/bake/azureBakeStage.js +0 -276
  140. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +0 -40
  141. package/src/pipeline/stages/bake/bakeExecutionDetails.html +0 -50
  142. package/src/pipeline/stages/bake/bakeStage.html +0 -187
  143. package/src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js +0 -73
  144. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +0 -9
  145. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +0 -1
  146. package/src/pipeline/stages/disableAsg/azureDisableAsgStage.js +0 -65
  147. package/src/pipeline/stages/disableAsg/disableAsgStage.html +0 -11
  148. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +0 -1
  149. package/src/pipeline/stages/enableAsg/azureEnableAsgStage.js +0 -70
  150. package/src/pipeline/stages/enableAsg/enableAsgStage.html +0 -11
  151. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +0 -1
  152. package/src/securityGroup/clone/cloneSecurityGroup.controller.js +0 -162
  153. package/src/securityGroup/clone/cloneSecurityGroup.html +0 -8
  154. package/src/securityGroup/configure/CreateSecurityGroup.controller.spec.js +0 -78
  155. package/src/securityGroup/configure/CreateSecurityGroupCtrl.js +0 -265
  156. package/src/securityGroup/configure/EditSecurityGroupCtrl.js +0 -222
  157. package/src/securityGroup/configure/configSecurityGroup.mixin.controller.js +0 -262
  158. package/src/securityGroup/configure/createSecurityGroup.html +0 -20
  159. package/src/securityGroup/configure/createSecurityGroupIngress.html +0 -75
  160. package/src/securityGroup/configure/createSecurityGroupProperties.html +0 -88
  161. package/src/securityGroup/configure/editSecurityGroup.html +0 -19
  162. package/src/securityGroup/details/securityGroupDetail.controller.js +0 -142
  163. package/src/securityGroup/details/securityGroupDetail.html +0 -78
  164. package/src/securityGroup/securityGroup.write.service.js +0 -57
  165. package/src/serverGroup/configure/serverGroup.configure.azure.module.js +0 -47
  166. package/src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js +0 -247
  167. package/src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js +0 -35
  168. package/src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js +0 -15
  169. package/src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js +0 -25
  170. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +0 -5
  171. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html +0 -138
  172. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js +0 -43
  173. package/src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js +0 -71
  174. package/src/serverGroup/configure/wizard/basicSettings/basicSettings.html +0 -131
  175. package/src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js +0 -15
  176. package/src/serverGroup/configure/wizard/basicSettings/image.regional.filter.spec.js +0 -42
  177. package/src/serverGroup/configure/wizard/capacity/capacity.html +0 -5
  178. package/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.html +0 -20
  179. package/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js +0 -21
  180. package/src/serverGroup/configure/wizard/capacity/zones.html +0 -5
  181. package/src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js +0 -38
  182. package/src/serverGroup/configure/wizard/healthSettings/healthSettings.html +0 -5
  183. package/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.html +0 -32
  184. package/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js +0 -22
  185. package/src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js +0 -34
  186. package/src/serverGroup/configure/wizard/image/imageSettings.html +0 -5
  187. package/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.html +0 -33
  188. package/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js +0 -22
  189. package/src/serverGroup/configure/wizard/instanceArchetype.html +0 -33
  190. package/src/serverGroup/configure/wizard/instanceType/instanceType.html +0 -10
  191. package/src/serverGroup/configure/wizard/instanceType.html +0 -33
  192. package/src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js +0 -137
  193. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html +0 -3
  194. package/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.html +0 -41
  195. package/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js +0 -22
  196. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js +0 -44
  197. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.html +0 -54
  198. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js +0 -19
  199. package/src/serverGroup/configure/wizard/networkSettings/networkSettings.html +0 -3
  200. package/src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js +0 -28
  201. package/src/serverGroup/configure/wizard/securityGroup/securityGroups.html +0 -3
  202. package/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.html +0 -40
  203. package/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js +0 -38
  204. package/src/serverGroup/configure/wizard/serverGroupWizard.html +0 -61
  205. package/src/serverGroup/configure/wizard/tags/tags.html +0 -5
  206. package/src/serverGroup/configure/wizard/tags/tagsSelector.directive.html +0 -16
  207. package/src/serverGroup/configure/wizard/tags/tagsSelector.directive.js +0 -30
  208. package/src/serverGroup/configure/wizard/templateSelection.html +0 -9
  209. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.html +0 -21
  210. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.js +0 -28
  211. package/src/serverGroup/details/serverGroup.details.module.js +0 -11
  212. package/src/serverGroup/details/serverGroupDetails.azure.controller.js +0 -260
  213. package/src/serverGroup/details/serverGroupDetails.html +0 -98
  214. package/src/subnet/subnetSelectField.directive.html +0 -28
  215. package/src/subnet/subnetSelectField.directive.js +0 -35
@@ -0,0 +1,128 @@
1
+ import React from 'react';
2
+
3
+ import { AccountService, Registry, StageConfigField, StageConstants } from '@spinnaker/core';
4
+
5
+ import { AzureAccountRegionClusterSelector } from '../AzureAccountRegionClusterSelector';
6
+
7
+ export function AzureDestroyAsgExecutionLabel({ stage }: any) {
8
+ const context = stage.masterStage?.context || stage.context || {};
9
+
10
+ return (
11
+ <span className="task-label">
12
+ {' '}
13
+ Destroy Server Group: {context.serverGroupName} ({context.region}){' '}
14
+ </span>
15
+ );
16
+ }
17
+
18
+ export class AzureDestroyAsgStageConfig extends React.Component<any> {
19
+ private mounted = false;
20
+
21
+ public componentDidMount(): void {
22
+ this.mounted = true;
23
+ this.applyDefaults();
24
+ this.loadRegionForAccount(this.props.stage.credentials);
25
+ }
26
+
27
+ public componentDidUpdate(previousProps: any): void {
28
+ if (previousProps.stage.credentials !== this.props.stage.credentials) {
29
+ this.updateStageField({ regions: [] });
30
+ this.loadRegionForAccount(this.props.stage.credentials);
31
+ }
32
+ }
33
+
34
+ public componentWillUnmount(): void {
35
+ this.mounted = false;
36
+ }
37
+
38
+ private updateStageField = (changes: any): void => {
39
+ Object.assign(this.props.stage, changes);
40
+ this.props.updateStageField(changes);
41
+ };
42
+
43
+ private applyDefaults(): void {
44
+ const { application, stage } = this.props;
45
+ stage.regions = stage.regions || [];
46
+ stage.cloudProvider = 'azure';
47
+ stage.interestingHealthProviderNames = stage.interestingHealthProviderNames || [];
48
+
49
+ if (!stage.credentials && application.defaultCredentials.azure) {
50
+ stage.credentials = application.defaultCredentials.azure;
51
+ }
52
+ if (!stage.target) {
53
+ stage.target = StageConstants.TARGET_LIST[0].val;
54
+ }
55
+ }
56
+
57
+ private loadRegionForAccount(credentials: string): void {
58
+ if (!credentials) {
59
+ return;
60
+ }
61
+
62
+ AccountService.getAccountDetails(credentials)
63
+ .then((details: any) => {
64
+ if (this.mounted && this.props.stage.credentials === credentials && details?.org) {
65
+ this.updateStageField({ regions: [details.org] });
66
+ }
67
+ })
68
+ .catch(() => {});
69
+ }
70
+
71
+ private accountUpdated = (credentials: string): void => {
72
+ this.loadRegionForAccount(credentials);
73
+ };
74
+
75
+ public render() {
76
+ this.applyDefaults();
77
+ const { application, pipeline, stage } = this.props;
78
+
79
+ return (
80
+ <div className="form-horizontal">
81
+ {!pipeline?.strategy && (
82
+ <AzureAccountRegionClusterSelector
83
+ application={application}
84
+ stage={stage}
85
+ updateStageField={this.updateStageField}
86
+ onAccountUpdate={this.accountUpdated}
87
+ />
88
+ )}
89
+ <StageConfigField label="Target">
90
+ <select
91
+ className="form-control input-sm"
92
+ value={stage.target}
93
+ onChange={(event) => this.updateStageField({ target: event.target.value })}
94
+ >
95
+ {StageConstants.TARGET_LIST.map((target: any) => (
96
+ <option key={target.val} value={target.val}>
97
+ {target.label}
98
+ </option>
99
+ ))}
100
+ </select>
101
+ </StageConfigField>
102
+ </div>
103
+ );
104
+ }
105
+ }
106
+
107
+ export function registerAzureDestroyAsgStage() {
108
+ Registry.pipeline.registerStage({
109
+ key: 'destroyServerGroup',
110
+ provides: 'destroyServerGroup',
111
+ cloudProvider: 'azure',
112
+ component: AzureDestroyAsgStageConfig,
113
+ executionLabelComponent: AzureDestroyAsgExecutionLabel,
114
+ accountExtractor: (stage: any) => [stage.context.credentials],
115
+ configAccountExtractor: (stage: any) => [stage.credentials],
116
+ validators: [
117
+ {
118
+ type: 'targetImpedance',
119
+ message:
120
+ 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',
121
+ },
122
+ { type: 'requiredField', fieldName: 'cluster' },
123
+ { type: 'requiredField', fieldName: 'target' },
124
+ { type: 'requiredField', fieldName: 'regions' },
125
+ { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },
126
+ ],
127
+ } as any);
128
+ }
@@ -0,0 +1,92 @@
1
+ import React from 'react';
2
+
3
+ import { PlatformHealthOverride, Registry, StageConfigField, StageConstants } from '@spinnaker/core';
4
+
5
+ import { AzureAccountRegionClusterSelector } from '../AzureAccountRegionClusterSelector';
6
+
7
+ export function AzureDisableAsgExecutionLabel({ stage }: any) {
8
+ const context = stage.masterStage?.context || stage.context || {};
9
+
10
+ return (
11
+ <span className="task-label">
12
+ {' '}
13
+ Disable Server Group: {context.serverGroupName} ({context.region}){' '}
14
+ </span>
15
+ );
16
+ }
17
+
18
+ export function AzureDisableAsgStageConfig({ application, pipeline, stage, updateStageField }: any) {
19
+ const updateStage = (changes: any) => {
20
+ Object.assign(stage, changes);
21
+ updateStageField(changes);
22
+ };
23
+
24
+ stage.regions = stage.regions || [];
25
+ stage.cloudProvider = 'azure';
26
+ if (
27
+ stage.isNew &&
28
+ application.attributes.platformHealthOnlyShowOverride &&
29
+ stage.interestingHealthProviderNames === undefined
30
+ ) {
31
+ stage.interestingHealthProviderNames = [];
32
+ }
33
+ if (!stage.credentials && application.defaultCredentials.azure) {
34
+ stage.credentials = application.defaultCredentials.azure;
35
+ }
36
+ if (!stage.regions.length && application.defaultRegions.azure) {
37
+ stage.regions.push(application.defaultRegions.azure);
38
+ }
39
+ if (!stage.target) {
40
+ stage.target = StageConstants.TARGET_LIST[0].val;
41
+ }
42
+
43
+ return (
44
+ <div className="form-horizontal">
45
+ {!pipeline?.strategy && (
46
+ <AzureAccountRegionClusterSelector application={application} stage={stage} updateStageField={updateStage} />
47
+ )}
48
+ <StageConfigField label="Target">
49
+ <select
50
+ className="form-control input-sm"
51
+ value={stage.target}
52
+ onChange={(e) => updateStage({ target: e.target.value })}
53
+ >
54
+ {StageConstants.TARGET_LIST.map((target: any) => (
55
+ <option key={target.val} value={target.val}>
56
+ {target.label}
57
+ </option>
58
+ ))}
59
+ </select>
60
+ </StageConfigField>
61
+ {application.attributes.platformHealthOnlyShowOverride && (
62
+ <PlatformHealthOverride
63
+ interestingHealthProviderNames={stage.interestingHealthProviderNames || []}
64
+ platformHealthType="azureService"
65
+ onChange={(interestingHealthProviderNames) => updateStage({ interestingHealthProviderNames })}
66
+ />
67
+ )}
68
+ </div>
69
+ );
70
+ }
71
+
72
+ export function registerAzureDisableAsgStage() {
73
+ Registry.pipeline.registerStage({
74
+ key: 'disableServerGroup',
75
+ provides: 'disableServerGroup',
76
+ alias: 'disableAsg',
77
+ cloudProvider: 'azure',
78
+ component: AzureDisableAsgStageConfig,
79
+ executionLabelComponent: AzureDisableAsgExecutionLabel,
80
+ validators: [
81
+ {
82
+ type: 'targetImpedance',
83
+ message:
84
+ 'This pipeline will attempt to disable a server group without deploying a new version into the same cluster.',
85
+ },
86
+ { type: 'requiredField', fieldName: 'cluster' },
87
+ { type: 'requiredField', fieldName: 'target' },
88
+ { type: 'requiredField', fieldName: 'regions' },
89
+ { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },
90
+ ],
91
+ } as any);
92
+ }
@@ -0,0 +1,87 @@
1
+ import React from 'react';
2
+
3
+ import { PlatformHealthOverride, Registry, StageConfigField, StageConstants } from '@spinnaker/core';
4
+
5
+ import { AzureAccountRegionClusterSelector } from '../AzureAccountRegionClusterSelector';
6
+
7
+ export function AzureEnableAsgExecutionLabel({ stage }: any) {
8
+ const context = stage.masterStage?.context || stage.context || {};
9
+
10
+ return (
11
+ <span className="task-label">
12
+ {' '}
13
+ Enable Server Group: {context.serverGroupName} ({context.region}){' '}
14
+ </span>
15
+ );
16
+ }
17
+
18
+ export function AzureEnableAsgStageConfig({ application, pipeline, stage, updateStageField }: any) {
19
+ const updateStage = (changes: any) => {
20
+ Object.assign(stage, changes);
21
+ updateStageField(changes);
22
+ };
23
+
24
+ stage.regions = stage.regions || [];
25
+ stage.cloudProvider = 'azure';
26
+ if (
27
+ stage.isNew &&
28
+ application.attributes.platformHealthOnlyShowOverride &&
29
+ stage.interestingHealthProviderNames === undefined
30
+ ) {
31
+ stage.interestingHealthProviderNames = [];
32
+ }
33
+ if (!stage.credentials && application.defaultCredentials.azure) {
34
+ stage.credentials = application.defaultCredentials.azure;
35
+ }
36
+ if (!stage.regions.length && application.defaultRegions.azure) {
37
+ stage.regions.push(application.defaultRegions.azure);
38
+ }
39
+ if (!stage.target) {
40
+ stage.target = StageConstants.TARGET_LIST[0].val;
41
+ }
42
+
43
+ return (
44
+ <div className="form-horizontal">
45
+ {!pipeline?.strategy && (
46
+ <AzureAccountRegionClusterSelector application={application} stage={stage} updateStageField={updateStage} />
47
+ )}
48
+ <StageConfigField label="Target">
49
+ <select
50
+ className="form-control input-sm"
51
+ value={stage.target}
52
+ onChange={(e) => updateStage({ target: e.target.value })}
53
+ >
54
+ {StageConstants.TARGET_LIST.map((target: any) => (
55
+ <option key={target.val} value={target.val}>
56
+ {target.label}
57
+ </option>
58
+ ))}
59
+ </select>
60
+ </StageConfigField>
61
+ {application.attributes.platformHealthOnlyShowOverride && (
62
+ <PlatformHealthOverride
63
+ interestingHealthProviderNames={stage.interestingHealthProviderNames || []}
64
+ platformHealthType="azureService"
65
+ onChange={(interestingHealthProviderNames) => updateStage({ interestingHealthProviderNames })}
66
+ />
67
+ )}
68
+ </div>
69
+ );
70
+ }
71
+
72
+ export function registerAzureEnableAsgStage() {
73
+ Registry.pipeline.registerStage({
74
+ key: 'enableServerGroup',
75
+ provides: 'enableServerGroup',
76
+ alias: 'enableAsg',
77
+ cloudProvider: 'azure',
78
+ component: AzureEnableAsgStageConfig,
79
+ executionLabelComponent: AzureEnableAsgExecutionLabel,
80
+ validators: [
81
+ { type: 'requiredField', fieldName: 'cluster' },
82
+ { type: 'requiredField', fieldName: 'target' },
83
+ { type: 'requiredField', fieldName: 'regions' },
84
+ { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },
85
+ ],
86
+ } as any);
87
+ }
@@ -0,0 +1,69 @@
1
+ import { AzureLoadBalancerModalComponent } from './loadBalancer/configure/AzureLoadBalancerModal';
2
+ import { AzureCloneServerGroupModalComponent } from './serverGroup/configure/wizard/AzureCloneServerGroupModal';
3
+
4
+ describe('Azure routed modal consumers', () => {
5
+ function stateService(includedState: string) {
6
+ return {
7
+ go: jasmine.createSpy('go'),
8
+ includes: jasmine.createSpy('includes').and.callFake((state: string) => state === includedState),
9
+ };
10
+ }
11
+
12
+ it('navigates from the load balancer modal through its injected state service', () => {
13
+ const state = stateService('**.loadBalancerDetails');
14
+ const modal = new AzureLoadBalancerModalComponent({
15
+ app: { defaultCredentials: {}, defaultRegions: {}, name: 'fnord' },
16
+ closeModal: jasmine.createSpy('closeModal'),
17
+ dismissModal: jasmine.createSpy('dismissModal'),
18
+ isNew: true,
19
+ stateService: state,
20
+ } as any) as any;
21
+ modal.mounted = true;
22
+ modal.state = {
23
+ loadBalancer: { credentials: 'test-account', name: 'fnord-main', region: 'westus' },
24
+ };
25
+
26
+ modal.onApplicationRefresh();
27
+
28
+ expect(state.go).toHaveBeenCalledWith('^.loadBalancerDetails', {
29
+ accountId: 'test-account',
30
+ name: 'fnord-main',
31
+ provider: 'azure',
32
+ region: 'westus',
33
+ });
34
+ });
35
+
36
+ it('navigates from the clone server group modal through its injected state service', () => {
37
+ const state = stateService('**.clusters.cluster.serverGroup');
38
+ const modal = new AzureCloneServerGroupModalComponent({
39
+ application: { name: 'fnord' },
40
+ command: { viewState: { requiresTemplateSelection: true } },
41
+ dismissModal: jasmine.createSpy('dismissModal'),
42
+ stateService: state,
43
+ } as any) as any;
44
+ modal.state = {
45
+ command: { credentials: 'test-account', region: 'westus' },
46
+ taskMonitor: {
47
+ task: {
48
+ execution: {
49
+ stages: [
50
+ {
51
+ context: { 'deploy.server.groups': { westus: 'fnord-main-v042' } },
52
+ type: 'cloneServerGroup',
53
+ },
54
+ ],
55
+ },
56
+ },
57
+ },
58
+ };
59
+
60
+ modal.onApplicationRefresh();
61
+
62
+ expect(state.go).toHaveBeenCalledWith('^.^.serverGroup', {
63
+ accountId: 'test-account',
64
+ provider: 'azure',
65
+ region: 'westus',
66
+ serverGroup: 'fnord-main-v042',
67
+ });
68
+ });
69
+ });