@spinnaker/appengine 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 (131) hide show
  1. package/dist/appengine.module.d.ts +7 -1
  2. package/dist/domain/index.d.ts +0 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/instance/details/AppengineInstanceDetails.d.ts +11 -0
  7. package/dist/loadBalancer/configure/AppengineCreateLoadBalancerModal.d.ts +29 -0
  8. package/dist/loadBalancer/details/AppengineLoadBalancerActions.d.ts +5 -0
  9. package/dist/loadBalancer/details/AppengineLoadBalancerDetailsSection.d.ts +3 -0
  10. package/dist/loadBalancer/details/index.d.ts +3 -0
  11. package/dist/loadBalancer/details/useAppengineLoadBalancerDetails.d.ts +3 -0
  12. package/dist/loadBalancer/transformer.d.ts +2 -6
  13. package/dist/pipeline/stages/AppengineExecutionDetails.d.ts +15 -0
  14. package/dist/pipeline/stages/AppengineServerGroupStageConfig.d.ts +12 -0
  15. package/dist/pipeline/stages/destroyAsg/appengineDestroyAsgStage.d.ts +1 -1
  16. package/dist/pipeline/stages/disableAsg/appengineDisableAsgStage.d.ts +1 -1
  17. package/dist/pipeline/stages/editLoadBalancer/AppengineEditLoadBalancerStageConfig.d.ts +3 -0
  18. package/dist/pipeline/stages/editLoadBalancer/appengineEditLoadBalancerStage.d.ts +1 -1
  19. package/dist/pipeline/stages/enableAsg/appengineEnableAsgStage.d.ts +1 -1
  20. package/dist/pipeline/stages/shrinkCluster/appengineShrinkClusterStage.d.ts +1 -1
  21. package/dist/pipeline/stages/startServerGroup/appengineStartServerGroupStage.d.ts +1 -1
  22. package/dist/pipeline/stages/stopServerGroup/appengineStopServerGroupStage.d.ts +1 -1
  23. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +5 -9
  24. package/dist/serverGroup/configure/wizard/AppengineCloneServerGroupModal.d.ts +22 -0
  25. package/dist/serverGroup/details/AppengineServerGroupActions.d.ts +12 -0
  26. package/dist/serverGroup/details/AppengineServerGroupDetailsSection.d.ts +3 -0
  27. package/dist/serverGroup/details/appengineServerGroupDetailsGetter.d.ts +4 -0
  28. package/dist/serverGroup/details/index.d.ts +3 -0
  29. package/dist/serverGroup/transformer.d.ts +1 -5
  30. package/dist/serverGroup/writer/serverGroup.write.service.d.ts +15 -4
  31. package/package.json +4 -8
  32. package/src/appengine.module.spec.ts +194 -0
  33. package/src/appengine.module.ts +47 -58
  34. package/src/domain/index.ts +0 -1
  35. package/src/index.ts +1 -1
  36. package/src/instance/details/AppengineInstanceDetails.tsx +33 -0
  37. package/src/loadBalancer/configure/AppengineCreateLoadBalancerModal.tsx +342 -0
  38. package/src/loadBalancer/details/AppengineLoadBalancerActions.tsx +66 -0
  39. package/src/loadBalancer/details/AppengineLoadBalancerDetailsSection.tsx +42 -0
  40. package/src/loadBalancer/details/index.ts +3 -0
  41. package/src/loadBalancer/details/useAppengineLoadBalancerDetails.ts +37 -0
  42. package/src/loadBalancer/transformer.ts +3 -14
  43. package/src/pipeline/stages/AppengineExecutionDetails.tsx +90 -0
  44. package/src/pipeline/stages/AppengineServerGroupStageConfig.tsx +190 -0
  45. package/src/pipeline/stages/destroyAsg/appengineDestroyAsgStage.ts +17 -43
  46. package/src/pipeline/stages/disableAsg/appengineDisableAsgStage.ts +18 -53
  47. package/src/pipeline/stages/editLoadBalancer/AppengineEditLoadBalancerStageConfig.tsx +94 -0
  48. package/src/pipeline/stages/editLoadBalancer/appengineEditLoadBalancerStage.ts +14 -74
  49. package/src/pipeline/stages/enableAsg/appengineEnableAsgStage.ts +13 -48
  50. package/src/pipeline/stages/shrinkCluster/appengineShrinkClusterStage.ts +13 -61
  51. package/src/pipeline/stages/startServerGroup/appengineStartServerGroupStage.ts +17 -54
  52. package/src/pipeline/stages/stopServerGroup/appengineStopServerGroupStage.ts +17 -54
  53. package/src/serverGroup/configure/serverGroupCommandBuilder.service.ts +20 -19
  54. package/src/serverGroup/configure/wizard/AppengineCloneServerGroupModal.tsx +119 -0
  55. package/src/serverGroup/configure/wizard/serverGroupWizard.less +0 -8
  56. package/src/serverGroup/details/AppengineServerGroupActions.tsx +245 -0
  57. package/src/serverGroup/details/AppengineServerGroupDetailsSection.tsx +27 -0
  58. package/src/serverGroup/details/appengineServerGroupDetailsGetter.ts +62 -0
  59. package/src/serverGroup/details/index.ts +3 -0
  60. package/src/serverGroup/transformer.ts +3 -15
  61. package/src/serverGroup/writer/serverGroup.write.service.ts +57 -8
  62. package/dist/common/componentUrlDetails.component.d.ts +0 -1
  63. package/dist/common/conditionalDescriptionListItem.component.d.ts +0 -1
  64. package/dist/common/loadBalancerMessage.component.d.ts +0 -1
  65. package/dist/domain/IAppengineStageScope.d.ts +0 -18
  66. package/dist/instance/details/details.controller.d.ts +0 -1
  67. package/dist/loadBalancer/configure/wizard/advancedSettings.component.d.ts +0 -1
  68. package/dist/loadBalancer/configure/wizard/allocationConfigurationRow.component.d.ts +0 -1
  69. package/dist/loadBalancer/configure/wizard/basicSettings.component.d.ts +0 -1
  70. package/dist/loadBalancer/configure/wizard/stageAllocationConfigurationRow.component.d.ts +0 -1
  71. package/dist/loadBalancer/configure/wizard/wizard.controller.d.ts +0 -2
  72. package/dist/loadBalancer/details/details.controller.d.ts +0 -1
  73. package/dist/loadBalancer/loadBalancer.module.d.ts +0 -1
  74. package/dist/pipeline/pipeline.module.d.ts +0 -1
  75. package/dist/pipeline/stages/appengineStage.controller.d.ts +0 -12
  76. package/dist/pipeline/stages/editLoadBalancer/loadBalancerChoice.modal.controller.d.ts +0 -1
  77. package/dist/serverGroup/configure/wizard/basicSettings.controller.d.ts +0 -1
  78. package/dist/serverGroup/configure/wizard/cloneServerGroup.controller.d.ts +0 -2
  79. package/dist/serverGroup/configure/wizard/configFileArtifactList.module.d.ts +0 -1
  80. package/dist/serverGroup/configure/wizard/configFiles.component.d.ts +0 -20
  81. package/dist/serverGroup/configure/wizard/dynamicBranchLabel.component.d.ts +0 -1
  82. package/dist/serverGroup/details/details.controller.d.ts +0 -1
  83. package/src/common/componentUrlDetails.component.ts +0 -29
  84. package/src/common/conditionalDescriptionListItem.component.ts +0 -37
  85. package/src/common/loadBalancerMessage.component.html +0 -33
  86. package/src/common/loadBalancerMessage.component.ts +0 -13
  87. package/src/domain/IAppengineStageScope.ts +0 -22
  88. package/src/instance/details/details.controller.ts +0 -116
  89. package/src/instance/details/details.html +0 -99
  90. package/src/loadBalancer/configure/wizard/advancedSettings.component.ts +0 -56
  91. package/src/loadBalancer/configure/wizard/allocationConfigurationRow.component.ts +0 -70
  92. package/src/loadBalancer/configure/wizard/basicSettings.component.html +0 -65
  93. package/src/loadBalancer/configure/wizard/basicSettings.component.ts +0 -98
  94. package/src/loadBalancer/configure/wizard/stageAllocationConfigurationRow.component.html +0 -117
  95. package/src/loadBalancer/configure/wizard/stageAllocationConfigurationRow.component.ts +0 -108
  96. package/src/loadBalancer/configure/wizard/wizard.controller.ts +0 -163
  97. package/src/loadBalancer/configure/wizard/wizard.html +0 -44
  98. package/src/loadBalancer/configure/wizard/wizard.less +0 -17
  99. package/src/loadBalancer/details/details.controller.ts +0 -151
  100. package/src/loadBalancer/details/details.html +0 -102
  101. package/src/loadBalancer/loadBalancer.module.ts +0 -21
  102. package/src/pipeline/pipeline.module.ts +0 -20
  103. package/src/pipeline/stages/appengineStage.controller.ts +0 -45
  104. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +0 -16
  105. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +0 -1
  106. package/src/pipeline/stages/disableAsg/disableAsgStage.html +0 -18
  107. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +0 -1
  108. package/src/pipeline/stages/editLoadBalancer/editLoadBalancerExecutionDetails.html +0 -33
  109. package/src/pipeline/stages/editLoadBalancer/editLoadBalancerStage.html +0 -51
  110. package/src/pipeline/stages/editLoadBalancer/loadBalancerChoice.modal.controller.ts +0 -65
  111. package/src/pipeline/stages/editLoadBalancer/loadBalancerChoice.modal.html +0 -45
  112. package/src/pipeline/stages/enableAsg/enableAsgStage.html +0 -18
  113. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +0 -1
  114. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +0 -41
  115. package/src/pipeline/stages/startServerGroup/startServerGroupExecutionDetails.html +0 -26
  116. package/src/pipeline/stages/startServerGroup/startServerGroupStage.html +0 -18
  117. package/src/pipeline/stages/startServerGroup/startServerGroupStepLabel.html +0 -1
  118. package/src/pipeline/stages/stopServerGroup/stopServerGroupExecutionDetails.html +0 -26
  119. package/src/pipeline/stages/stopServerGroup/stopServerGroupStage.html +0 -18
  120. package/src/pipeline/stages/stopServerGroup/stopServerGroupStepLabel.html +0 -1
  121. package/src/serverGroup/configure/wizard/advancedSettings.html +0 -33
  122. package/src/serverGroup/configure/wizard/basicSettings.controller.ts +0 -151
  123. package/src/serverGroup/configure/wizard/basicSettings.html +0 -287
  124. package/src/serverGroup/configure/wizard/cloneServerGroup.controller.ts +0 -103
  125. package/src/serverGroup/configure/wizard/configFileArtifactList.module.ts +0 -18
  126. package/src/serverGroup/configure/wizard/configFiles.component.html +0 -81
  127. package/src/serverGroup/configure/wizard/configFiles.component.ts +0 -121
  128. package/src/serverGroup/configure/wizard/dynamicBranchLabel.component.ts +0 -19
  129. package/src/serverGroup/configure/wizard/serverGroupWizard.html +0 -39
  130. package/src/serverGroup/details/details.controller.ts +0 -463
  131. package/src/serverGroup/details/details.html +0 -229
@@ -1,163 +0,0 @@
1
- import type { StateService } from '@uirouter/angularjs';
2
- import type { IController } from 'angular';
3
- import { module } from 'angular';
4
- import type { IModalServiceInstance } from 'angular-ui-bootstrap';
5
- import { cloneDeep } from 'lodash';
6
-
7
- import type { Application } from '@spinnaker/core';
8
- import { LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';
9
-
10
- import type { AppengineLoadBalancerTransformer, IAppengineTrafficSplitDescription } from '../../transformer';
11
- import { AppengineLoadBalancerUpsertDescription } from '../../transformer';
12
-
13
- import './wizard.less';
14
-
15
- class AppengineLoadBalancerWizardController implements IController {
16
- public state = { loading: true };
17
- public loadBalancer: AppengineLoadBalancerUpsertDescription;
18
- public heading: string;
19
- public submitButtonLabel: string;
20
- public taskMonitor: TaskMonitor;
21
-
22
- public static $inject = [
23
- '$scope',
24
- '$state',
25
- '$uibModalInstance',
26
- 'application',
27
- 'loadBalancer',
28
- 'isNew',
29
- 'forPipelineConfig',
30
- 'appengineLoadBalancerTransformer',
31
- 'wizardSubFormValidation',
32
- ];
33
- constructor(
34
- public $scope: ng.IScope,
35
- private $state: StateService,
36
- private $uibModalInstance: IModalServiceInstance,
37
- private application: Application,
38
- loadBalancer: AppengineLoadBalancerUpsertDescription,
39
- public isNew: boolean,
40
- private forPipelineConfig: boolean,
41
- private appengineLoadBalancerTransformer: AppengineLoadBalancerTransformer,
42
- private wizardSubFormValidation: any,
43
- ) {
44
- this.submitButtonLabel = this.forPipelineConfig ? 'Done' : 'Update';
45
-
46
- if (this.isNew) {
47
- this.heading = 'Create New Load Balancer';
48
- } else {
49
- this.heading = `Edit ${[
50
- loadBalancer.name,
51
- loadBalancer.region,
52
- loadBalancer.account || loadBalancer.credentials,
53
- ].join(':')}`;
54
- this.appengineLoadBalancerTransformer
55
- .convertLoadBalancerForEditing(loadBalancer, application)
56
- .then((convertedLoadBalancer) => {
57
- this.loadBalancer = this.appengineLoadBalancerTransformer.convertLoadBalancerToUpsertDescription(
58
- convertedLoadBalancer,
59
- );
60
- if (loadBalancer.split && !this.loadBalancer.splitDescription) {
61
- this.loadBalancer.splitDescription = AppengineLoadBalancerUpsertDescription.convertTrafficSplitToTrafficSplitDescription(
62
- loadBalancer.split,
63
- );
64
- } else {
65
- this.loadBalancer.splitDescription = loadBalancer.splitDescription;
66
- }
67
- this.loadBalancer.mapAllocationsToPercentages();
68
- this.setTaskMonitor();
69
- this.initializeFormValidation();
70
- this.state.loading = false;
71
- });
72
- }
73
- }
74
-
75
- public submit(): any {
76
- const description = cloneDeep(this.loadBalancer);
77
- description.mapAllocationsToDecimals();
78
- delete description.serverGroups;
79
-
80
- if (this.forPipelineConfig) {
81
- return this.$uibModalInstance.close(description);
82
- } else {
83
- return this.taskMonitor.submit(() => {
84
- return LoadBalancerWriter.upsertLoadBalancer(description, this.application, 'Update');
85
- });
86
- }
87
- }
88
-
89
- public cancel(): void {
90
- this.$uibModalInstance.dismiss();
91
- }
92
-
93
- public showSubmitButton(): boolean {
94
- return this.wizardSubFormValidation.subFormsAreValid();
95
- }
96
-
97
- private setTaskMonitor(): void {
98
- this.taskMonitor = new TaskMonitor({
99
- application: this.application,
100
- title: 'Updating your load balancer',
101
- modalInstance: this.$uibModalInstance,
102
- onTaskComplete: () => this.onTaskComplete(),
103
- });
104
- }
105
-
106
- private initializeFormValidation(): void {
107
- this.wizardSubFormValidation
108
- .config({ form: 'form', scope: this.$scope })
109
- .register({
110
- page: 'basic-settings',
111
- subForm: 'basicSettingsForm',
112
- validators: [
113
- {
114
- watchString: 'ctrl.loadBalancer.splitDescription',
115
- validator: (splitDescription: IAppengineTrafficSplitDescription): boolean => {
116
- return (
117
- splitDescription.allocationDescriptions.reduce(
118
- (sum, description) => sum + description.allocation,
119
- 0,
120
- ) === 100
121
- );
122
- },
123
- watchDeep: true,
124
- },
125
- ],
126
- })
127
- .register({ page: 'advanced-settings', subForm: 'advancedSettingsForm' });
128
- }
129
-
130
- private onTaskComplete(): void {
131
- this.application.getDataSource('loadBalancers').refresh();
132
- this.application.getDataSource('loadBalancers').onNextRefresh(this.$scope, () => this.onApplicationRefresh());
133
- }
134
-
135
- private onApplicationRefresh(): void {
136
- // If the user has already closed the modal, do not navigate to the new details view
137
- if ((this.$scope as any).$$destroyed) {
138
- // $$destroyed is not in the ng.IScope interface
139
- return;
140
- }
141
-
142
- this.$uibModalInstance.dismiss();
143
- const newStateParams = {
144
- name: this.loadBalancer.name,
145
- accountId: this.loadBalancer.credentials,
146
- region: this.loadBalancer.region,
147
- provider: 'appengine',
148
- };
149
-
150
- if (!this.$state.includes('**.loadBalancerDetails')) {
151
- this.$state.go('.loadBalancerDetails', newStateParams);
152
- } else {
153
- this.$state.go('^.loadBalancerDetails', newStateParams);
154
- }
155
- }
156
- }
157
-
158
- export const APPENGINE_LOAD_BALANCER_WIZARD_CTRL = 'spinnaker.appengine.loadBalancer.wizard.controller';
159
-
160
- module(APPENGINE_LOAD_BALANCER_WIZARD_CTRL, []).controller(
161
- 'appengineLoadBalancerWizardCtrl',
162
- AppengineLoadBalancerWizardController,
163
- );
@@ -1,44 +0,0 @@
1
- <form name="form">
2
- <div ng-if="ctrl.state.loading && !ctrl.isNew" style="height: 200px" class="horizontal center middle">
3
- <loading-spinner size="'small'"></loading-spinner>
4
- </div>
5
- <v2-modal-wizard
6
- heading="{{::ctrl.heading}}"
7
- task-monitor="ctrl.taskMonitor"
8
- dismiss="$dismiss()"
9
- ng-if="!ctrl.state.loading || ctrl.isNew"
10
- >
11
- <div ng-if="!ctrl.isNew">
12
- <v2-wizard-page key="basic-settings" label="Basic Settings" mark-complete-on-view="false">
13
- <appengine-load-balancer-basic-settings
14
- load-balancer="ctrl.loadBalancer"
15
- application="ctrl.application"
16
- for-pipeline-config="ctrl.forPipelineConfig"
17
- ></appengine-load-balancer-basic-settings>
18
- </v2-wizard-page>
19
- <v2-wizard-page key="advanced-settings" label="Advanced Settings" mark-complete-on-view="false">
20
- <appengine-load-balancer-advanced-settings
21
- load-balancer="ctrl.loadBalancer"
22
- ></appengine-load-balancer-advanced-settings>
23
- </v2-wizard-page>
24
- </div>
25
- </v2-modal-wizard>
26
- <appengine-load-balancer-message
27
- ng-if="ctrl.isNew"
28
- column-offset="1"
29
- columns="10"
30
- show-create-message="true"
31
- ></appengine-load-balancer-message>
32
- <div class="modal-footer">
33
- <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>
34
- <submit-button
35
- ng-if="!ctrl.isNew && ctrl.showSubmitButton()"
36
- label="ctrl.submitButtonLabel"
37
- is-disabled="appengineLoadBalancerForm.$invalid || ctrl.taskMonitor.submitting || ctrl.state.loading"
38
- submitting="ctrl.taskMonitor.submitting"
39
- on-click="ctrl.submit()"
40
- is-new="ctrl.isNew"
41
- >
42
- </submit-button>
43
- </div>
44
- </form>
@@ -1,17 +0,0 @@
1
- appengine-load-balancer-basic-settings {
2
- a.btn.btn-link {
3
- padding: 0;
4
- }
5
-
6
- .form-group {
7
- margin-top: 0.4rem;
8
- }
9
- }
10
-
11
- appengine-load-balancer-advanced-settings {
12
- .checkbox {
13
- input[type='checkbox'] {
14
- margin: 0 0 0.1rem 0;
15
- }
16
- }
17
- }
@@ -1,151 +0,0 @@
1
- import type { StateService } from '@uirouter/angularjs';
2
- import type { IController, IScope } from 'angular';
3
- import { module } from 'angular';
4
- import type { IModalService } from 'angular-ui-bootstrap';
5
- import { cloneDeep } from 'lodash';
6
-
7
- import type { Application, ILoadBalancer, ILoadBalancerDeleteCommand } from '@spinnaker/core';
8
- import { ConfirmationModalService, LoadBalancerWriter } from '@spinnaker/core';
9
- import type { IAppengineLoadBalancer } from '../../domain';
10
-
11
- interface ILoadBalancerFromStateParams {
12
- accountId: string;
13
- region: string;
14
- name: string;
15
- }
16
-
17
- class AppengineLoadBalancerDetailsController implements IController {
18
- public state = { loading: true };
19
- private loadBalancerFromParams: ILoadBalancerFromStateParams;
20
- public loadBalancer: IAppengineLoadBalancer;
21
- public dispatchRules: string[] = [];
22
-
23
- public static $inject = ['$uibModal', '$state', '$scope', 'loadBalancer', 'app'];
24
- constructor(
25
- private $uibModal: IModalService,
26
- private $state: StateService,
27
- private $scope: IScope,
28
- loadBalancer: ILoadBalancerFromStateParams,
29
- private app: Application,
30
- ) {
31
- this.loadBalancerFromParams = loadBalancer;
32
- this.app
33
- .getDataSource('loadBalancers')
34
- .ready()
35
- .then(() => this.extractLoadBalancer());
36
- }
37
-
38
- public editLoadBalancer(): void {
39
- this.$uibModal.open({
40
- templateUrl: require('../configure/wizard/wizard.html'),
41
- controller: 'appengineLoadBalancerWizardCtrl as ctrl',
42
- size: 'lg',
43
- resolve: {
44
- application: () => this.app,
45
- loadBalancer: () => cloneDeep(this.loadBalancer),
46
- isNew: () => false,
47
- forPipelineConfig: () => false,
48
- },
49
- });
50
- }
51
-
52
- public deleteLoadBalancer(): void {
53
- const taskMonitor = {
54
- application: this.app,
55
- title: 'Deleting ' + this.loadBalancer.name,
56
- };
57
-
58
- const submitMethod = () => {
59
- const loadBalancer: ILoadBalancerDeleteCommand = {
60
- cloudProvider: this.loadBalancer.cloudProvider,
61
- loadBalancerName: this.loadBalancer.name,
62
- credentials: this.loadBalancer.account,
63
- };
64
- return LoadBalancerWriter.deleteLoadBalancer(loadBalancer, this.app);
65
- };
66
-
67
- ConfirmationModalService.confirm({
68
- header: 'Really delete ' + this.loadBalancer.name + '?',
69
- buttonText: 'Delete ' + this.loadBalancer.name,
70
- body: this.getConfirmationModalBodyHtml(),
71
- account: this.loadBalancer.account,
72
- taskMonitorConfig: taskMonitor,
73
- submitMethod,
74
- });
75
- }
76
-
77
- public canDeleteLoadBalancer(): boolean {
78
- return this.loadBalancer.name !== 'default';
79
- }
80
-
81
- private extractLoadBalancer(): void {
82
- this.loadBalancer = this.app.getDataSource('loadBalancers').data.find((test: ILoadBalancer) => {
83
- return test.name === this.loadBalancerFromParams.name && test.account === this.loadBalancerFromParams.accountId;
84
- }) as IAppengineLoadBalancer;
85
-
86
- if (this.loadBalancer) {
87
- this.state.loading = false;
88
- this.buildDispatchRules();
89
- this.app.getDataSource('loadBalancers').onRefresh(this.$scope, () => this.extractLoadBalancer());
90
- } else {
91
- this.autoClose();
92
- }
93
- }
94
-
95
- private buildDispatchRules(): void {
96
- this.dispatchRules = [];
97
- if (this.loadBalancer && this.loadBalancer.dispatchRules) {
98
- this.loadBalancer.dispatchRules.forEach((rule) => {
99
- if (rule.service === this.loadBalancer.name) {
100
- this.dispatchRules.push(rule.domain + rule.path);
101
- }
102
- });
103
- }
104
- }
105
-
106
- private getConfirmationModalBodyHtml(): string {
107
- const serverGroupNames = this.loadBalancer.serverGroups.map((serverGroup) => serverGroup.name);
108
- const hasAny = serverGroupNames ? serverGroupNames.length > 0 : false;
109
- const hasMoreThanOne = serverGroupNames ? serverGroupNames.length > 1 : false;
110
-
111
- // HTML accepted by the confirmationModalService is static (i.e., not managed by angular).
112
- if (hasAny) {
113
- if (hasMoreThanOne) {
114
- const listOfServerGroupNames = serverGroupNames.map((name) => `<li>${name}</li>`).join('');
115
- return `<div class="alert alert-warning">
116
- <p>
117
- Deleting <b>${this.loadBalancer.name}</b> will destroy the following server groups:
118
- <ul>
119
- ${listOfServerGroupNames}
120
- </ul>
121
- </p>
122
- </div>
123
- `;
124
- } else {
125
- return `<div class="alert alert-warning">
126
- <p>
127
- Deleting <b>${this.loadBalancer.name}</b> will destroy <b>${serverGroupNames[0]}</b>.
128
- </p>
129
- </div>
130
- `;
131
- }
132
- } else {
133
- return null;
134
- }
135
- }
136
-
137
- private autoClose(): void {
138
- if (this.$scope.$$destroyed) {
139
- return;
140
- } else {
141
- this.$state.params.allowModalToStayOpen = true;
142
- this.$state.go('^', null, { location: 'replace' });
143
- }
144
- }
145
- }
146
-
147
- export const APPENGINE_LOAD_BALANCER_DETAILS_CTRL = 'spinnaker.appengine.loadBalancerDetails.controller';
148
- module(APPENGINE_LOAD_BALANCER_DETAILS_CTRL, []).controller(
149
- 'appengineLoadBalancerDetailsCtrl',
150
- AppengineLoadBalancerDetailsController,
151
- );
@@ -1,102 +0,0 @@
1
- <div class="details-panel">
2
- <div ng-if="ctrl.state.loading" class="header">
3
- <div class="close-button">
4
- <a class="btn btn-link" ui-sref="^">
5
- <span class="glyphicon glyphicon-remove"></span>
6
- </a>
7
- </div>
8
- <div class="horizontal center middle">
9
- <loading-spinner size="'small'"></loading-spinner>
10
- </div>
11
- </div>
12
-
13
- <div ng-if="!ctrl.state.loading" class="header">
14
- <div class="close-button">
15
- <a class="btn btn-link" ui-sref="^">
16
- <span class="glyphicon glyphicon-remove"></span>
17
- </a>
18
- </div>
19
- <div class="header-text horizontal middle">
20
- <i class="fa icon-sitemap"></i>
21
- <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>{{ctrl.loadBalancer.name}}</h3>
22
- </div>
23
- <div>
24
- <div class="actions">
25
- <div class="dropdown" uib-dropdown dropdown-append-to-body>
26
- <button type="button" class="btn btn-sm btn-primary dropdown-toggle" uib-dropdown-toggle>
27
- Load Balancer Actions <span class="caret"></span>
28
- </button>
29
- <ul class="dropdown-menu" uib-dropdown-menu role="menu">
30
- <li><a href ng-click="ctrl.editLoadBalancer()">Edit Load Balancer</a></li>
31
- <li ng-if="ctrl.canDeleteLoadBalancer()">
32
- <a href ng-click="ctrl.deleteLoadBalancer()">Delete Load Balancer</a>
33
- </li>
34
- <li
35
- ng-if="!ctrl.canDeleteLoadBalancer()"
36
- uib-tooltip="You cannot delete a default service."
37
- class="disabled"
38
- >
39
- <a href>Delete Load Balancer</a>
40
- </li>
41
- </ul>
42
- </div>
43
- </div>
44
- </div>
45
- </div>
46
-
47
- <div ng-if="!ctrl.state.loading" class="content">
48
- <collapsible-section heading="Load Balancer Details" expanded="true">
49
- <dl class="dl-horizontal dl-narrow">
50
- <dt>In</dt>
51
- <dd><account-tag account="ctrl.loadBalancer.account" pad="right"></account-tag></dd>
52
- <dt>Region</dt>
53
- <dd>{{ctrl.loadBalancer.region}}</dd>
54
- <dt ng-if="ctrl.loadBalancer.serverGroups.length">Server Groups</dt>
55
- <dd ng-if="ctrl.loadBalancer.serverGroups.length">
56
- <ul>
57
- <li ng-repeat="serverGroup in ctrl.loadBalancer.serverGroups | orderBy: ['isDisabled', '-name']">
58
- <a
59
- ui-sref="^.serverGroup({region: serverGroup.region,
60
- accountId: serverGroup.account,
61
- serverGroup: serverGroup.name,
62
- provider: 'appengine'})"
63
- >
64
- {{serverGroup.name}}
65
- </a>
66
- </li>
67
- </ul>
68
- </dd>
69
- </dl>
70
- </collapsible-section>
71
- <collapsible-section heading="Status" expanded="true">
72
- <health-counts class="pull-left" container="ctrl.loadBalancer.instanceCounts"></health-counts>
73
- </collapsible-section>
74
- <collapsible-section heading="Traffic Split" expanded="true">
75
- <dl class="dl-horizontal dl-narrow">
76
- <dt ng-if="ctrl.loadBalancer.split.shardBy">Shard By</dt>
77
- <dd ng-if="ctrl.loadBalancer.split.shardBy">
78
- {{ctrl.loadBalancer.split.shardBy}}
79
- <help-field
80
- key="appengine.loadBalancer.shardBy.{{ctrl.loadBalancer.split.shardBy.toLowerCase()}}"
81
- ></help-field>
82
- </dd>
83
- <hr ng-if="ctrl.loadBalancer.split.shardBy" />
84
- <ul>
85
- <li ng-repeat="(serverGroup, percent) in ctrl.loadBalancer.split.allocations">
86
- {{serverGroup}}:<span class="pull-right">{{percent | decimalToPercent}}</span>
87
- </li>
88
- </ul>
89
- </dl>
90
- </collapsible-section>
91
- <collapsible-section heading="DNS" expanded="true">
92
- <dl class="dl-narrow">
93
- <appengine-component-url-details component="ctrl.loadBalancer"></appengine-component-url-details>
94
- </dl>
95
- </collapsible-section>
96
- <collapsible-section heading="Dispatch Rules" expanded="true" ng-if="ctrl.dispatchRules.length > 0">
97
- <dl class="dl-horizontal dl-narrow">
98
- <span ng-repeat-start="rule in ctrl.dispatchRules">{{rule}}</span><br ng-repeat-end />
99
- </dl>
100
- </collapsible-section>
101
- </div>
102
- </div>
@@ -1,21 +0,0 @@
1
- import { module } from 'angular';
2
-
3
- import { APPENGINE_LOAD_BALANCER_ADVANCED_SETTINGS } from './configure/wizard/advancedSettings.component';
4
- import { APPENGINE_ALLOCATION_CONFIGURATION_ROW } from './configure/wizard/allocationConfigurationRow.component';
5
- import { APPENGINE_LOAD_BALANCER_BASIC_SETTINGS } from './configure/wizard/basicSettings.component';
6
- import { APPENGINE_STAGE_ALLOCATION_CONFIGURATION_ROW } from './configure/wizard/stageAllocationConfigurationRow.component';
7
- import { APPENGINE_LOAD_BALANCER_WIZARD_CTRL } from './configure/wizard/wizard.controller';
8
- import { APPENGINE_LOAD_BALANCER_DETAILS_CTRL } from './details/details.controller';
9
- import { APPENGINE_LOAD_BALANCER_TRANSFORMER } from './transformer';
10
-
11
- export const APPENGINE_LOAD_BALANCER_MODULE = 'spinnaker.appengine.loadBalancer.module';
12
-
13
- module(APPENGINE_LOAD_BALANCER_MODULE, [
14
- APPENGINE_ALLOCATION_CONFIGURATION_ROW,
15
- APPENGINE_LOAD_BALANCER_DETAILS_CTRL,
16
- APPENGINE_LOAD_BALANCER_ADVANCED_SETTINGS,
17
- APPENGINE_LOAD_BALANCER_BASIC_SETTINGS,
18
- APPENGINE_LOAD_BALANCER_TRANSFORMER,
19
- APPENGINE_LOAD_BALANCER_WIZARD_CTRL,
20
- APPENGINE_STAGE_ALLOCATION_CONFIGURATION_ROW,
21
- ]);
@@ -1,20 +0,0 @@
1
- import { module } from 'angular';
2
-
3
- import { APPENGINE_DESTROY_ASG_STAGE } from './stages/destroyAsg/appengineDestroyAsgStage';
4
- import { APPENGINE_DISABLE_ASG_STAGE } from './stages/disableAsg/appengineDisableAsgStage';
5
- import { APPENGINE_EDIT_LOAD_BALANCER_STAGE } from './stages/editLoadBalancer/appengineEditLoadBalancerStage';
6
- import { APPENGINE_ENABLE_ASG_STAGE } from './stages/enableAsg/appengineEnableAsgStage';
7
- import { APPENGINE_SHRINK_CLUSTER_STAGE } from './stages/shrinkCluster/appengineShrinkClusterStage';
8
- import { APPENGINE_START_SERVER_GROUP_STAGE } from './stages/startServerGroup/appengineStartServerGroupStage';
9
- import { APPENGINE_STOP_SERVER_GROUP_STAGE } from './stages/stopServerGroup/appengineStopServerGroupStage';
10
-
11
- export const APPENGINE_PIPELINE_MODULE = 'spinnaker.appengine.pipeline.module';
12
- module(APPENGINE_PIPELINE_MODULE, [
13
- APPENGINE_DESTROY_ASG_STAGE,
14
- APPENGINE_DISABLE_ASG_STAGE,
15
- APPENGINE_EDIT_LOAD_BALANCER_STAGE,
16
- APPENGINE_ENABLE_ASG_STAGE,
17
- APPENGINE_SHRINK_CLUSTER_STAGE,
18
- APPENGINE_START_SERVER_GROUP_STAGE,
19
- APPENGINE_STOP_SERVER_GROUP_STAGE,
20
- ]);
@@ -1,45 +0,0 @@
1
- import type { IController } from 'angular';
2
-
3
- import { AccountService, StageConstants } from '@spinnaker/core';
4
- import { AppengineHealth } from '../../common/appengineHealth';
5
- import type { IAppengineAccount, IAppengineStageScope } from '../../domain';
6
-
7
- export class AppengineStageCtrl implements IController {
8
- public static $inject = ['$scope'];
9
- constructor(protected $scope: IAppengineStageScope) {
10
- $scope.platformHealth = AppengineHealth.PLATFORM;
11
- }
12
-
13
- public setStageRegion(): void {
14
- const selected = this.$scope.accounts.find((account) => account.name === this.$scope.stage.credentials);
15
- if (selected && selected.name) {
16
- AccountService.getAccountDetails(selected.name).then((accountDetails: IAppengineAccount) => {
17
- this.$scope.stage.region = accountDetails.region;
18
- });
19
- }
20
- }
21
-
22
- protected setStageCloudProvider(): void {
23
- this.$scope.stage.cloudProvider = 'appengine';
24
- }
25
-
26
- protected setAccounts(): PromiseLike<void> {
27
- return AccountService.listAccounts('appengine').then((accounts: IAppengineAccount[]) => {
28
- this.$scope.accounts = accounts;
29
- });
30
- }
31
-
32
- protected setTargets(): void {
33
- this.$scope.targets = StageConstants.TARGET_LIST;
34
-
35
- if (!this.$scope.stage.target) {
36
- this.$scope.stage.target = this.$scope.targets[0].val;
37
- }
38
- }
39
-
40
- protected setStageCredentials(): void {
41
- if (!this.$scope.stage.credentials && this.$scope.application.defaultCredentials.appengine) {
42
- this.$scope.stage.credentials = this.$scope.application.defaultCredentials.appengine;
43
- }
44
- }
45
- }
@@ -1,16 +0,0 @@
1
- <div ng-controller="appengineDestroyAsgStageCtrl as destroyAsgStageCtrl" class="form-horizontal">
2
- <div ng-if="!pipeline.strategy">
3
- <account-region-cluster-selector
4
- application="application"
5
- single-region="true"
6
- disable-region-select="true"
7
- on-account-update="destroyAsgStageCtrl.setStageRegion()"
8
- component="stage"
9
- accounts="accounts"
10
- >
11
- </account-region-cluster-selector>
12
- </div>
13
- <stage-config-field label="Target">
14
- <target-select model="stage" options="targets"></target-select>
15
- </stage-config-field>
16
- </div>
@@ -1 +0,0 @@
1
- <span class="task-label"> Destroy Server Group: {{step.context.serverGroupName}} ({{step.context.region}}) </span>
@@ -1,18 +0,0 @@
1
- <div ng-controller="appengineDisableAsgStageCtrl as disableAsgStageCtrl" class="form-horizontal">
2
- <div ng-if="!pipeline.strategy">
3
- <account-region-cluster-selector
4
- application="application"
5
- component="stage"
6
- single-region="true"
7
- disable-region-select="true"
8
- on-account-update="disableAsgStageCtrl.setStageRegion()"
9
- accounts="accounts"
10
- >
11
- </account-region-cluster-selector>
12
- </div>
13
- <stage-config-field label="Target">
14
- <target-select model="stage" options="targets"></target-select>
15
- </stage-config-field>
16
- <stage-platform-health-override application="application" stage="stage" platform-health-type="platformHealth">
17
- </stage-platform-health-override>
18
- </div>
@@ -1 +0,0 @@
1
- <span class="task-label"> Disable Server Group: {{step.context.serverGroupName}} ({{step.context.region}}) </span>
@@ -1,33 +0,0 @@
1
- <div ng-controller="BaseExecutionDetailsCtrl">
2
- <execution-details-section-nav sections="configSections"></execution-details-section-nav>
3
- <div class="step-section-details" ng-if="detailsSection === 'editLoadBalancerConfig'">
4
- <div class="row">
5
- <div class="col-md-12">
6
- <table class="table table-condensed">
7
- <thead>
8
- <tr>
9
- <th>Account</th>
10
- <th>Name</th>
11
- <th>Region</th>
12
- </tr>
13
- </thead>
14
- <tbody>
15
- <tr ng-repeat="loadBalancer in stage.context.loadBalancers">
16
- <td>
17
- <account-tag account="loadBalancer.credentials"></account-tag>
18
- </td>
19
- <td>{{ loadBalancer.name }}</td>
20
- <td>{{ loadBalancer.region }}</td>
21
- </tr>
22
- </tbody>
23
- </table>
24
- </div>
25
- </div>
26
- <stage-failure-message stage="stage" message="stage.failureMessage"></stage-failure-message>
27
- </div>
28
- <div class="step-section-details" ng-if="detailsSection === 'taskStatus'">
29
- <div class="row">
30
- <execution-step-details item="stage"></execution-step-details>
31
- </div>
32
- </div>
33
- </div>