@spinnaker/ecs 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 (173) hide show
  1. package/CHANGELOG.md +1186 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/common/common.module.d.ts +1 -0
  4. package/dist/common/footer.component.d.ts +1 -0
  5. package/dist/domain/IEcsLoadBalancer.d.ts +119 -0
  6. package/dist/ecs.help.d.ts +1 -0
  7. package/dist/ecs.module.d.ts +4 -0
  8. package/dist/ecs.settings.d.ts +9 -0
  9. package/dist/ecsCluster/IEcsCapacityProviderDetails.d.ts +10 -0
  10. package/dist/ecsCluster/IEcsCluster.d.ts +5 -0
  11. package/dist/ecsCluster/ecsCluster.read.service.d.ts +7 -0
  12. package/dist/iamRoles/IRole.d.ts +6 -0
  13. package/dist/iamRoles/iamRole.read.service.d.ts +5 -0
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.js +6010 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/instance/details/instance.details.controller.d.ts +2 -0
  18. package/dist/loadBalancer/EcsLoadBalancerClusterContainer.d.ts +6 -0
  19. package/dist/loadBalancer/TargetGroup.d.ts +11 -0
  20. package/dist/loadBalancer/details/loadBalancerDetails.d.ts +27 -0
  21. package/dist/loadBalancer/details/targetGroupDetails.d.ts +30 -0
  22. package/dist/loadBalancer/listener.d.ts +10 -0
  23. package/dist/loadBalancer/loadBalancer.transformer.d.ts +8 -0
  24. package/dist/loadBalancer/targetGroup.states.d.ts +1 -0
  25. package/dist/metricAlarm/MetricAlarm.d.ts +6 -0
  26. package/dist/metricAlarm/metricAlarm.read.service.d.ts +5 -0
  27. package/dist/pipeline/stages/destroyAsg/ecsDestroyAsgStage.d.ts +2 -0
  28. package/dist/pipeline/stages/disableAsg/ecsDisableAsgStage.d.ts +2 -0
  29. package/dist/pipeline/stages/disableCluster/ecsDisableClusterStage.d.ts +2 -0
  30. package/dist/pipeline/stages/enableAsg/ecsEnableAsgStage.d.ts +2 -0
  31. package/dist/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.d.ts +2 -0
  32. package/dist/pipeline/stages/resizeAsg/ecsResizeAsgStage.d.ts +2 -0
  33. package/dist/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.d.ts +2 -0
  34. package/dist/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.d.ts +2 -0
  35. package/dist/placementStrategy/IPlacementStrategy.d.ts +4 -0
  36. package/dist/placementStrategy/placementStrategy.service.d.ts +11 -0
  37. package/dist/secrets/ISecret.d.ts +5 -0
  38. package/dist/secrets/secret.read.service.d.ts +5 -0
  39. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +2 -0
  40. package/dist/securityGroup/securityGroup.module.d.ts +1 -0
  41. package/dist/securityGroup/securityGroup.reader.d.ts +5 -0
  42. package/dist/securityGroup/securityGroup.transformer.d.ts +2 -0
  43. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +2 -0
  44. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +165 -0
  45. package/dist/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.d.ts +2 -0
  46. package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.d.ts +2 -0
  47. package/dist/serverGroup/configure/wizard/capacityProvider/CapacityProvider.d.ts +7 -0
  48. package/dist/serverGroup/configure/wizard/container/Container.d.ts +32 -0
  49. package/dist/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.d.ts +2 -0
  50. package/dist/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.d.ts +2 -0
  51. package/dist/serverGroup/configure/wizard/logging/logging.component.d.ts +1 -0
  52. package/dist/serverGroup/configure/wizard/networking/Networking.d.ts +28 -0
  53. package/dist/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.d.ts +34 -0
  54. package/dist/serverGroup/configure/wizard/taskDefinition/TaskDefinition.d.ts +39 -0
  55. package/dist/serverGroup/details/resize/resizeCapacity.component.d.ts +1 -0
  56. package/dist/serverGroup/details/resize/resizeServerGroup.controller.d.ts +2 -0
  57. package/dist/serverGroup/details/rollback/rollbackServerGroup.controller.d.ts +2 -0
  58. package/dist/serverGroup/details/serverGroupDetails.ecs.controller.d.ts +2 -0
  59. package/dist/serverGroup/details/serverGroupDetails.module.d.ts +1 -0
  60. package/dist/serverGroup/events/EventsLink.d.ts +4 -0
  61. package/dist/serverGroup/events/events.component.d.ts +3 -0
  62. package/dist/serverGroup/events/events.controller.d.ts +19 -0
  63. package/dist/serverGroup/events/serverGroupEventsReader.service.d.ts +10 -0
  64. package/dist/serverGroup/serverGroup.module.d.ts +1 -0
  65. package/dist/serverGroup/serverGroup.transformer.d.ts +11 -0
  66. package/dist/serviceDiscovery/IServiceDiscovery.d.ts +12 -0
  67. package/dist/serviceDiscovery/serviceDiscovery.read.service.d.ts +4 -0
  68. package/package.json +47 -0
  69. package/src/common/common.module.ts +6 -0
  70. package/src/common/footer.component.ts +29 -0
  71. package/src/domain/IEcsLoadBalancer.ts +129 -0
  72. package/src/ecs.help.ts +91 -0
  73. package/src/ecs.module.ts +116 -0
  74. package/src/ecs.settings.ts +17 -0
  75. package/src/ecsCluster/IEcsCapacityProviderDetails.ts +11 -0
  76. package/src/ecsCluster/IEcsCluster.ts +5 -0
  77. package/src/ecsCluster/ecsCluster.read.service.ts +23 -0
  78. package/src/iamRoles/IRole.ts +6 -0
  79. package/src/iamRoles/iamRole.read.service.ts +14 -0
  80. package/src/index.ts +1 -0
  81. package/src/instance/details/instance.details.controller.js +356 -0
  82. package/src/instance/details/instanceDetails.html +204 -0
  83. package/src/loadBalancer/EcsLoadBalancerClusterContainer.tsx +48 -0
  84. package/src/loadBalancer/TargetGroup.tsx +74 -0
  85. package/src/loadBalancer/details/loadBalancerDetails.tsx +235 -0
  86. package/src/loadBalancer/details/targetGroupDetails.tsx +251 -0
  87. package/src/loadBalancer/listener.tsx +65 -0
  88. package/src/loadBalancer/loadBalancer.transformer.ts +21 -0
  89. package/src/loadBalancer/targetGroup.states.ts +59 -0
  90. package/src/logo/ecs.icon.svg +27 -0
  91. package/src/logo/ecs.logo.less +5 -0
  92. package/src/logo/ecs.logo.svg +27 -0
  93. package/src/metricAlarm/MetricAlarm.ts +6 -0
  94. package/src/metricAlarm/metricAlarm.read.service.ts +14 -0
  95. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStage.html +101 -0
  96. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStepLabel.html +1 -0
  97. package/src/pipeline/stages/cloneServerGroup/ecsCloneServerGroupStage.js +94 -0
  98. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +9 -0
  99. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +1 -0
  100. package/src/pipeline/stages/destroyAsg/ecsDestroyAsgStage.js +65 -0
  101. package/src/pipeline/stages/disableAsg/disableAsgStage.html +11 -0
  102. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +1 -0
  103. package/src/pipeline/stages/disableAsg/ecsDisableAsgStage.js +70 -0
  104. package/src/pipeline/stages/disableCluster/disableClusterStage.html +26 -0
  105. package/src/pipeline/stages/disableCluster/ecsDisableClusterStage.js +84 -0
  106. package/src/pipeline/stages/enableAsg/ecsEnableAsgStage.js +73 -0
  107. package/src/pipeline/stages/enableAsg/enableAsgStage.html +11 -0
  108. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +1 -0
  109. package/src/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.js +26 -0
  110. package/src/pipeline/stages/findImageFromTags/findImageFromTagsExecutionDetails.html +36 -0
  111. package/src/pipeline/stages/findImageFromTags/findImageFromTagsStage.html +9 -0
  112. package/src/pipeline/stages/resizeAsg/ecsResizeAsgStage.js +128 -0
  113. package/src/pipeline/stages/resizeAsg/resizeAsgStage.html +87 -0
  114. package/src/pipeline/stages/resizeAsg/resizeAsgStepLabel.html +1 -0
  115. package/src/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.js +78 -0
  116. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.html +35 -0
  117. package/src/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.js +73 -0
  118. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +34 -0
  119. package/src/placementStrategy/IPlacementStrategy.ts +4 -0
  120. package/src/placementStrategy/placementStrategy.service.ts +63 -0
  121. package/src/secrets/ISecret.ts +5 -0
  122. package/src/secrets/secret.read.service.ts +14 -0
  123. package/src/securityGroup/details/securityGroupDetail.controller.js +147 -0
  124. package/src/securityGroup/details/securityGroupDetail.html +104 -0
  125. package/src/securityGroup/securityGroup.module.ts +12 -0
  126. package/src/securityGroup/securityGroup.reader.ts +16 -0
  127. package/src/securityGroup/securityGroup.transformer.js +13 -0
  128. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +281 -0
  129. package/src/serverGroup/configure/serverGroupConfiguration.service.ts +747 -0
  130. package/src/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.js +259 -0
  131. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.html +194 -0
  132. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.js +17 -0
  133. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +10 -0
  134. package/src/serverGroup/configure/wizard/capacityProvider/CapacityProvider.tsx +381 -0
  135. package/src/serverGroup/configure/wizard/capacityProvider/capacityProvider.html +11 -0
  136. package/src/serverGroup/configure/wizard/container/Container.tsx +347 -0
  137. package/src/serverGroup/configure/wizard/container/container.html +9 -0
  138. package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.html +118 -0
  139. package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.js +20 -0
  140. package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.html +13 -0
  141. package/src/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.js +41 -0
  142. package/src/serverGroup/configure/wizard/location/basicSettings.html +137 -0
  143. package/src/serverGroup/configure/wizard/logging/logging.component.html +29 -0
  144. package/src/serverGroup/configure/wizard/logging/logging.component.ts +12 -0
  145. package/src/serverGroup/configure/wizard/logging/logging.html +7 -0
  146. package/src/serverGroup/configure/wizard/networking/Networking.tsx +261 -0
  147. package/src/serverGroup/configure/wizard/networking/networking.html +9 -0
  148. package/src/serverGroup/configure/wizard/serverGroupWizard.html +55 -0
  149. package/src/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.tsx +250 -0
  150. package/src/serverGroup/configure/wizard/serviceDiscovery/serviceDiscovery.html +11 -0
  151. package/src/serverGroup/configure/wizard/taskDefinition/TaskDefinition.tsx +460 -0
  152. package/src/serverGroup/configure/wizard/taskDefinition/taskDefinition.html +51 -0
  153. package/src/serverGroup/configure/wizard/templateSelection/templateSelection.html +9 -0
  154. package/src/serverGroup/configure/wizard/verticalScaling/verticalScaling.html +10 -0
  155. package/src/serverGroup/details/resize/resizeCapacity.component.html +94 -0
  156. package/src/serverGroup/details/resize/resizeCapacity.component.ts +14 -0
  157. package/src/serverGroup/details/resize/resizeServerGroup.controller.js +85 -0
  158. package/src/serverGroup/details/resize/resizeServerGroup.html +28 -0
  159. package/src/serverGroup/details/rollback/rollbackServerGroup.controller.js +97 -0
  160. package/src/serverGroup/details/rollback/rollbackServerGroup.html +67 -0
  161. package/src/serverGroup/details/serverGroupDetails.ecs.controller.js +366 -0
  162. package/src/serverGroup/details/serverGroupDetails.html +216 -0
  163. package/src/serverGroup/details/serverGroupDetails.module.ts +5 -0
  164. package/src/serverGroup/events/EventsLink.tsx +5 -0
  165. package/src/serverGroup/events/events.component.ts +35 -0
  166. package/src/serverGroup/events/events.controller.ts +45 -0
  167. package/src/serverGroup/events/events.html +36 -0
  168. package/src/serverGroup/events/serverGroupEventsReader.service.ts +27 -0
  169. package/src/serverGroup/serverGroup.module.ts +6 -0
  170. package/src/serverGroup/serverGroup.transformer.spec.ts +184 -0
  171. package/src/serverGroup/serverGroup.transformer.ts +117 -0
  172. package/src/serviceDiscovery/IServiceDiscovery.ts +13 -0
  173. package/src/serviceDiscovery/serviceDiscovery.read.service.ts +8 -0
@@ -0,0 +1,381 @@
1
+ import { module } from 'angular';
2
+ import React from 'react';
3
+ import { Alert } from 'react-bootstrap';
4
+ import type { Option } from 'react-select';
5
+ import { react2angular } from 'react2angular';
6
+
7
+ import { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';
8
+
9
+ import type { IEcsCapacityProviderStrategyItem, IEcsServerGroupCommand } from '../../serverGroupConfiguration.service';
10
+
11
+ export interface IEcsCapacityProviderProps {
12
+ command: IEcsServerGroupCommand;
13
+ notifyAngular: (key: string, value: any) => void;
14
+ configureCommand: (query: string) => PromiseLike<void>;
15
+ }
16
+
17
+ interface IEcsCapacityProviderState {
18
+ capacityProviderStrategy: IEcsCapacityProviderStrategyItem[];
19
+ defaultCapacityProviderStrategy: IEcsCapacityProviderStrategyItem[];
20
+ availableCapacityProviders: string[];
21
+ ecsClusterName: string;
22
+ useDefaultCapacityProviders: boolean;
23
+ capacityProviderLoadedFlag: boolean;
24
+ }
25
+
26
+ class EcsCapacityProvider extends React.Component<IEcsCapacityProviderProps, IEcsCapacityProviderState> {
27
+ constructor(props: IEcsCapacityProviderProps) {
28
+ super(props);
29
+ const cmd = this.props.command;
30
+
31
+ this.state = {
32
+ availableCapacityProviders: this.getAvailableCapacityProviders(cmd),
33
+ defaultCapacityProviderStrategy: this.getDefaultCapacityProviderStrategy(cmd),
34
+ ecsClusterName: cmd.ecsClusterName,
35
+ useDefaultCapacityProviders:
36
+ cmd.useDefaultCapacityProviders || (cmd.capacityProviderStrategy && cmd.capacityProviderStrategy.length == 0),
37
+ capacityProviderStrategy:
38
+ cmd.capacityProviderStrategy && cmd.capacityProviderStrategy.length > 0 ? cmd.capacityProviderStrategy : [],
39
+ capacityProviderLoadedFlag: false,
40
+ };
41
+ }
42
+
43
+ public componentDidMount() {
44
+ this.props.configureCommand('1').then(() => {
45
+ const cmd = this.props.command;
46
+ const useDefaultCapacityProviders = this.state.useDefaultCapacityProviders;
47
+ this.setState({
48
+ availableCapacityProviders: this.getAvailableCapacityProviders(cmd),
49
+ defaultCapacityProviderStrategy: this.getDefaultCapacityProviderStrategy(cmd),
50
+ capacityProviderStrategy: this.getCapacityProviderStrategy(useDefaultCapacityProviders, cmd),
51
+ capacityProviderLoadedFlag: true,
52
+ });
53
+ this.props.notifyAngular('useDefaultCapacityProviders', this.state.useDefaultCapacityProviders);
54
+ this.props.notifyAngular('capacityProviderStrategy', this.state.capacityProviderStrategy);
55
+ });
56
+ }
57
+
58
+ private getAvailableCapacityProviders = (cmd: IEcsServerGroupCommand) => {
59
+ return cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.availableCapacityProviders
60
+ ? cmd.backingData.filtered.availableCapacityProviders
61
+ : [];
62
+ };
63
+
64
+ private getDefaultCapacityProviderStrategy = (cmd: IEcsServerGroupCommand) => {
65
+ return cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.defaultCapacityProviderStrategy
66
+ ? cmd.backingData.filtered.defaultCapacityProviderStrategy
67
+ : [];
68
+ };
69
+
70
+ private getCapacityProviderStrategy = (useDefaultCapacityProviders: boolean, cmd: IEcsServerGroupCommand) => {
71
+ return useDefaultCapacityProviders &&
72
+ cmd.backingData &&
73
+ cmd.backingData.filtered &&
74
+ cmd.backingData.filtered.defaultCapacityProviderStrategy
75
+ ? cmd.backingData.filtered.defaultCapacityProviderStrategy
76
+ : this.state.capacityProviderStrategy;
77
+ };
78
+
79
+ private addCapacityProviderStrategy = () => {
80
+ const capacityProviderStrategy = this.state.capacityProviderStrategy;
81
+ capacityProviderStrategy.push({ capacityProvider: '', base: null, weight: null });
82
+ this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);
83
+ this.setState({ capacityProviderStrategy: capacityProviderStrategy });
84
+ };
85
+
86
+ private removeCapacityProviderStrategy = (index: number) => {
87
+ const capacityProviderStrategy = this.state.capacityProviderStrategy;
88
+ capacityProviderStrategy.splice(index, 1);
89
+ this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);
90
+ this.setState({ capacityProviderStrategy: capacityProviderStrategy });
91
+ };
92
+
93
+ private updateCapacityProviderName = (index: number, targetCapacityProviderName: string) => {
94
+ const capacityProviderStrategy = this.state.capacityProviderStrategy;
95
+ const targetCapacityProviderStrategy = capacityProviderStrategy[index];
96
+ targetCapacityProviderStrategy.capacityProvider = targetCapacityProviderName;
97
+ this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);
98
+ this.setState({ capacityProviderStrategy: capacityProviderStrategy });
99
+ this.props.command.viewState.dirty.customCapacityProviders = [];
100
+ };
101
+
102
+ private updateCapacityProviderBase = (index: number, targetCapacityProviderBase: number) => {
103
+ const capacityProviderStrategy = this.state.capacityProviderStrategy;
104
+ const targetCapacityProviderStrategy = capacityProviderStrategy[index];
105
+ targetCapacityProviderStrategy.base = targetCapacityProviderBase;
106
+ this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);
107
+ this.setState({ capacityProviderStrategy: capacityProviderStrategy });
108
+ };
109
+
110
+ private updateCapacityProviderWeight = (index: number, targetCapacityProviderWeight: number) => {
111
+ const capacityProviderStrategy = this.state.capacityProviderStrategy;
112
+ const targetCapacityProviderStrategy = capacityProviderStrategy[index];
113
+ targetCapacityProviderStrategy.weight = targetCapacityProviderWeight;
114
+ this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);
115
+ this.setState({ capacityProviderStrategy: capacityProviderStrategy });
116
+ };
117
+
118
+ private updateCapacityProviderType = (targetCapacityProviderType: boolean) => {
119
+ this.setState({ useDefaultCapacityProviders: targetCapacityProviderType });
120
+ this.props.notifyAngular('useDefaultCapacityProviders', targetCapacityProviderType);
121
+ this.props.command.viewState.dirty.customCapacityProviders = [];
122
+
123
+ const capacityProviderStrategy =
124
+ targetCapacityProviderType && this.state.defaultCapacityProviderStrategy.length > 0
125
+ ? this.state.defaultCapacityProviderStrategy
126
+ : [];
127
+ this.setState({ capacityProviderStrategy: capacityProviderStrategy });
128
+ this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);
129
+ };
130
+
131
+ render(): React.ReactElement<EcsCapacityProvider> {
132
+ const updateCapacityProviderName = this.updateCapacityProviderName;
133
+ const updateCapacityProviderBase = this.updateCapacityProviderBase;
134
+ const updateCapacityProviderWeight = this.updateCapacityProviderWeight;
135
+ const addCapacityProviderStrategy = this.addCapacityProviderStrategy;
136
+ const removeCapacityProviderStrategy = this.removeCapacityProviderStrategy;
137
+ const updateCapacityProviderType = this.updateCapacityProviderType;
138
+ const capacityProviderStrategy = this.state.capacityProviderStrategy;
139
+ const useDefaultCapacityProviders = this.state.useDefaultCapacityProviders;
140
+ const capacityProviderLoadedFlag = this.state.capacityProviderLoadedFlag;
141
+ const customDirtyCapacityProviders =
142
+ this.props.command.viewState.dirty && this.props.command.viewState.dirty.customCapacityProviders
143
+ ? this.props.command.viewState.dirty.customCapacityProviders
144
+ : [];
145
+ const defaultDirtyCapacityProviders =
146
+ this.props.command.viewState.dirty && this.props.command.viewState.dirty.defaulCapacityProviders
147
+ ? this.props.command.viewState.dirty.defaulCapacityProviders
148
+ : [];
149
+
150
+ const capacityProviderNames =
151
+ this.state.availableCapacityProviders && this.state.availableCapacityProviders.length > 0
152
+ ? this.state.availableCapacityProviders.map((capacityProviderNames) => {
153
+ return { label: `${capacityProviderNames}`, value: capacityProviderNames };
154
+ })
155
+ : [];
156
+
157
+ const defaultCPError =
158
+ useDefaultCapacityProviders && defaultDirtyCapacityProviders ? (
159
+ <div className="alert alert-warning">
160
+ <p className="text-left">
161
+ <i className="fa fa-exclamation-triangle"></i>
162
+ Invalid capacity providers are a part of default capacity provider strategy.
163
+ <br />
164
+ Please click 'Done' to use current default capacity provider strategy (shown below) or switch to using a
165
+ custom strategy.
166
+ </p>
167
+ </div>
168
+ ) : (
169
+ ''
170
+ );
171
+
172
+ const dirtyCapacityProviderList = customDirtyCapacityProviders
173
+ ? customDirtyCapacityProviders.map(function (capacityProvider, index) {
174
+ return <li key={index}>{capacityProvider}</li>;
175
+ })
176
+ : '';
177
+
178
+ const dirtyCapacityProviderSection =
179
+ useDefaultCapacityProviders && defaultDirtyCapacityProviders.length > 0 ? (
180
+ defaultCPError
181
+ ) : customDirtyCapacityProviders.length > 0 && !useDefaultCapacityProviders ? (
182
+ <div className="alert alert-warning">
183
+ <p>
184
+ <i className="fa fa-exclamation-triangle"></i>
185
+ The following capacity providers could not be found in the selected account/region/cluster and were removed:
186
+ </p>
187
+ <ul>{dirtyCapacityProviderList}</ul>
188
+ <br />
189
+ <p className="text-left">Please select the capacity provider(s) from the dropdown to resolve this error.</p>
190
+ </div>
191
+ ) : (
192
+ ''
193
+ );
194
+
195
+ const capacityProviderInputs =
196
+ capacityProviderStrategy.length > 0 ? (
197
+ capacityProviderStrategy.map(function (mapping, index) {
198
+ return (
199
+ <tr key={index}>
200
+ {useDefaultCapacityProviders ? (
201
+ <td>
202
+ <input
203
+ data-test-id={'ServerGroup.defaultCapacityProvider.name.' + index}
204
+ type="string"
205
+ className="form-control input-sm no-spel"
206
+ required={true}
207
+ value={mapping.capacityProvider}
208
+ disabled={true}
209
+ />
210
+ </td>
211
+ ) : (
212
+ <td data-test-id={'ServerGroup.customCapacityProvider.name.' + index}>
213
+ <TetheredSelect
214
+ placeholder="Select capacity provider"
215
+ options={capacityProviderNames}
216
+ value={mapping.capacityProvider}
217
+ onChange={(e: Option) => {
218
+ updateCapacityProviderName(index, e.label as string);
219
+ }}
220
+ clearable={false}
221
+ />
222
+ </td>
223
+ )}
224
+ <td>
225
+ <input
226
+ data-test-id={'ServerGroup.capacityProvider.base.' + index}
227
+ disabled={useDefaultCapacityProviders}
228
+ type="number"
229
+ className="form-control input-sm no-spel"
230
+ value={mapping.base}
231
+ onChange={(e) => updateCapacityProviderBase(index, e.target.valueAsNumber)}
232
+ />
233
+ </td>
234
+ <td>
235
+ <input
236
+ data-test-id={'ServerGroup.capacityProvider.weight.' + index}
237
+ disabled={useDefaultCapacityProviders}
238
+ type="number"
239
+ className="form-control input-sm no-spel"
240
+ required={true}
241
+ value={mapping.weight}
242
+ onChange={(e) => updateCapacityProviderWeight(index, e.target.valueAsNumber)}
243
+ />
244
+ </td>
245
+ {!useDefaultCapacityProviders ? (
246
+ <td>
247
+ <div className="form-control-static">
248
+ <a className="btn-link sm-label" onClick={() => removeCapacityProviderStrategy(index)}>
249
+ <span className="glyphicon glyphicon-trash" />
250
+ <span className="sr-only">Remove</span>
251
+ </a>
252
+ </div>
253
+ </td>
254
+ ) : (
255
+ ''
256
+ )}
257
+ </tr>
258
+ );
259
+ })
260
+ ) : useDefaultCapacityProviders && this.state.capacityProviderStrategy.length == 0 ? (
261
+ <tr>
262
+ <div className="sm-label-left" style={{ width: '200%' }}>
263
+ <Alert color="warning">
264
+ {' '}
265
+ The cluster does not have a default capacity provider strategy defined. Set a default capacity provider
266
+ strategy or use a custom strategy.
267
+ </Alert>
268
+ </div>
269
+ </tr>
270
+ ) : (
271
+ ''
272
+ );
273
+
274
+ const newCapacityProviderStrategy =
275
+ this.state.ecsClusterName &&
276
+ this.props.command.credentials &&
277
+ this.props.command.region &&
278
+ !useDefaultCapacityProviders &&
279
+ capacityProviderNames.length > 0 ? (
280
+ <button
281
+ data-test-id="ServerGroup.addCapacityProvider"
282
+ className="btn btn-block btn-sm add-new"
283
+ onClick={addCapacityProviderStrategy}
284
+ >
285
+ <span className="glyphicon glyphicon-plus-sign" />
286
+ Add New Capacity Provider
287
+ </button>
288
+ ) : !useDefaultCapacityProviders && capacityProviderLoadedFlag && capacityProviderNames.length == 0 ? (
289
+ <div className="sm-label-left" style={{ width: '200%' }}>
290
+ <Alert color="warning"> The cluster does not have capacity providers defined. </Alert>
291
+ </div>
292
+ ) : (
293
+ ''
294
+ );
295
+
296
+ return (
297
+ <div>
298
+ {(customDirtyCapacityProviders.length > 0 || defaultDirtyCapacityProviders.length > 0) &&
299
+ capacityProviderLoadedFlag ? (
300
+ <div>{dirtyCapacityProviderSection}</div>
301
+ ) : (
302
+ ''
303
+ )}
304
+ <div className="sm-label-left">
305
+ <b>Capacity Provider Strategy</b>
306
+ <HelpField id="ecs.capacityProviderStrategy" /> <br />
307
+ <span>({this.state.ecsClusterName})</span>
308
+ </div>
309
+ <div className="radio">
310
+ <label>
311
+ <input
312
+ data-test-id="ServerGroup.capacityProviders.default"
313
+ type="radio"
314
+ checked={useDefaultCapacityProviders}
315
+ onClick={() => updateCapacityProviderType(true)}
316
+ id="computeOptionsLaunchType1"
317
+ />
318
+ Use cluster default
319
+ </label>
320
+ </div>
321
+ <div className="radio">
322
+ <label>
323
+ <input
324
+ data-test-id="ServerGroup.capacityProviders.custom"
325
+ type="radio"
326
+ checked={!useDefaultCapacityProviders}
327
+ onClick={() => updateCapacityProviderType(false)}
328
+ id="computeOptionsCapacityProviders2"
329
+ />
330
+ Use custom (Advanced)
331
+ </label>
332
+ </div>
333
+ {capacityProviderLoadedFlag ? (
334
+ <table className="table table-condensed packed tags">
335
+ <thead>
336
+ <tr>
337
+ <th style={{ width: '50%' }}>
338
+ Provider name
339
+ <HelpField id="ecs.capacityProviderName" />
340
+ </th>
341
+ <th style={{ width: '25%' }}>
342
+ Base
343
+ <HelpField id="ecs.capacityProviderBase" />
344
+ </th>
345
+ <th style={{ width: '25%' }}>
346
+ Weight
347
+ <HelpField id="ecs.capacityProviderWeight" />
348
+ </th>
349
+ </tr>
350
+ </thead>
351
+ <tbody>{capacityProviderInputs}</tbody>
352
+ <tfoot>
353
+ <tr>
354
+ <td colSpan={4}>{newCapacityProviderStrategy}</td>
355
+ </tr>
356
+ </tfoot>
357
+ </table>
358
+ ) : (
359
+ <div className="load medium">
360
+ <div className="message">Loading capacity providers...</div>
361
+ <div className="bars">
362
+ <div className="bar"></div>
363
+ <div className="bar"></div>
364
+ <div className="bar"></div>
365
+ </div>
366
+ </div>
367
+ )}
368
+ </div>
369
+ );
370
+ }
371
+ }
372
+
373
+ export const ECS_CAPACITY_PROVIDER_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.capacityProvider.react';
374
+ module(ECS_CAPACITY_PROVIDER_REACT, []).component(
375
+ 'ecsCapacityProviderReact',
376
+ react2angular(withErrorBoundary(EcsCapacityProvider, 'ecsCapacityProviderReact'), [
377
+ 'command',
378
+ 'notifyAngular',
379
+ 'configureCommand',
380
+ ]),
381
+ );
@@ -0,0 +1,11 @@
1
+ <div class="clearfix">
2
+ <div class="row">
3
+ <div class="col-md-12">
4
+ <ecs-capacity-provider-react
5
+ command="command"
6
+ notify-angular="notifyAngular"
7
+ configure-command="configureCommand"
8
+ ></ecs-capacity-provider-react>
9
+ </div>
10
+ </div>
11
+ </div>