@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
@@ -0,0 +1,62 @@
1
+ import { isEmpty } from 'lodash';
2
+ import { Observable } from 'rxjs';
3
+
4
+ import type { IServerGroupDetailsProps } from '@spinnaker/core';
5
+ import { ServerGroupReader } from '@spinnaker/core';
6
+
7
+ import type { IAppengineLoadBalancer, IAppengineServerGroup } from '../../domain';
8
+
9
+ function extractServerGroupSummary(props: IServerGroupDetailsProps): Promise<IAppengineServerGroup> {
10
+ const { app, serverGroup } = props;
11
+ return app.ready().then(() => {
12
+ let summary: IAppengineServerGroup = app.serverGroups.data.find((candidate: IAppengineServerGroup) => {
13
+ return (
14
+ candidate.name === serverGroup.name &&
15
+ candidate.account === serverGroup.accountId &&
16
+ candidate.region === serverGroup.region
17
+ );
18
+ });
19
+
20
+ if (!summary) {
21
+ app.loadBalancers.data.some((loadBalancer: IAppengineLoadBalancer) => {
22
+ if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {
23
+ return (loadBalancer.serverGroups || []).some((candidate: IAppengineServerGroup) => {
24
+ if (candidate.name === serverGroup.name) {
25
+ summary = candidate;
26
+ return true;
27
+ }
28
+ return false;
29
+ });
30
+ }
31
+ return false;
32
+ });
33
+ }
34
+
35
+ return summary;
36
+ });
37
+ }
38
+
39
+ export function appengineServerGroupDetailsGetter(
40
+ props: IServerGroupDetailsProps,
41
+ autoClose: () => void,
42
+ ): Observable<IAppengineServerGroup> {
43
+ const { app, serverGroup: serverGroupInfo } = props;
44
+ return new Observable<IAppengineServerGroup>((observer) => {
45
+ extractServerGroupSummary(props).then((summary) => {
46
+ ServerGroupReader.getServerGroup(
47
+ app.name,
48
+ serverGroupInfo.accountId,
49
+ serverGroupInfo.region,
50
+ serverGroupInfo.name,
51
+ ).then((serverGroup: IAppengineServerGroup) => {
52
+ Object.assign(serverGroup, summary, { account: serverGroupInfo.accountId });
53
+
54
+ if (!isEmpty(serverGroup)) {
55
+ observer.next(serverGroup);
56
+ } else {
57
+ autoClose();
58
+ }
59
+ }, autoClose);
60
+ }, autoClose);
61
+ });
62
+ }
@@ -0,0 +1,3 @@
1
+ export * from './AppengineServerGroupActions';
2
+ export * from './AppengineServerGroupDetailsSection';
3
+ export * from './appengineServerGroupDetailsGetter';
@@ -1,5 +1,3 @@
1
- import { module } from 'angular';
2
-
3
1
  import type { IArtifact, IArtifactAccountPair, IServerGroup } from '@spinnaker/core';
4
2
 
5
3
  import type { IAppengineServerGroupCommand } from './configure/serverGroupCommandBuilder.service';
@@ -58,7 +56,7 @@ export class AppengineDeployDescription {
58
56
  this.trigger = command.trigger;
59
57
  this.gitCredentialType = command.gitCredentialType;
60
58
  this.configFiles = command.configFiles;
61
- this.configArtifacts = command.configArtifacts.filter((a) => !!a.id || !!a.artifact);
59
+ this.configArtifacts = (command.configArtifacts || []).filter((a) => !!a.id || !!a.artifact);
62
60
  this.applicationDirectoryRoot = command.applicationDirectoryRoot;
63
61
  this.interestingHealthProviderNames = command.interestingHealthProviderNames || [];
64
62
  this.expectedArtifactId = command.expectedArtifactId;
@@ -72,21 +70,11 @@ export class AppengineDeployDescription {
72
70
  }
73
71
 
74
72
  export class AppengineServerGroupTransformer {
75
- public static $inject = ['$q'];
76
- constructor(private $q: ng.IQService) {}
77
-
78
- public normalizeServerGroup(serverGroup: IServerGroup): PromiseLike<IServerGroup> {
79
- return this.$q.resolve(serverGroup);
73
+ public normalizeServerGroup(serverGroup: IServerGroup): Promise<IServerGroup> {
74
+ return Promise.resolve(serverGroup);
80
75
  }
81
76
 
82
77
  public convertServerGroupCommandToDeployConfiguration(command: IAppengineServerGroupCommand) {
83
78
  return new AppengineDeployDescription(command);
84
79
  }
85
80
  }
86
-
87
- export const APPENGINE_SERVER_GROUP_TRANSFORMER = 'spinnaker.appengine.serverGroup.transformer.service';
88
-
89
- module(APPENGINE_SERVER_GROUP_TRANSFORMER, []).service(
90
- 'appengineServerGroupTransformer',
91
- AppengineServerGroupTransformer,
92
- );
@@ -1,8 +1,9 @@
1
- import { module } from 'angular';
2
-
3
1
  import type { Application, IJob, ITask, ITaskCommand } from '@spinnaker/core';
4
2
  import { TaskExecutor } from '@spinnaker/core';
3
+
4
+ import type { IAppengineServerGroupCommand } from '../configure/serverGroupCommandBuilder.service';
5
5
  import type { IAppengineServerGroup } from '../../domain/index';
6
+ import { AppengineDeployDescription } from '../transformer';
6
7
 
7
8
  interface IAppengineServerGroupWriteJob extends IJob {
8
9
  serverGroupName: string;
@@ -12,7 +13,17 @@ interface IAppengineServerGroupWriteJob extends IJob {
12
13
  }
13
14
 
14
15
  export class AppengineServerGroupWriter {
15
- public startServerGroup(serverGroup: IAppengineServerGroup, application: Application): PromiseLike<ITask> {
16
+ public cloneServerGroup(command: IAppengineServerGroupCommand, application: Application): Promise<ITask> {
17
+ command.type = 'createServerGroup';
18
+
19
+ return TaskExecutor.executeTask({
20
+ job: [new AppengineDeployDescription(command)],
21
+ application,
22
+ description: `Create App Engine Server Group in ${application.name}`,
23
+ });
24
+ }
25
+
26
+ public startServerGroup(serverGroup: IAppengineServerGroup, application: Application): Promise<ITask> {
16
27
  const job = this.buildJob(serverGroup, application, 'startAppEngineServerGroup');
17
28
 
18
29
  const command: ITaskCommand = {
@@ -24,7 +35,7 @@ export class AppengineServerGroupWriter {
24
35
  return TaskExecutor.executeTask(command);
25
36
  }
26
37
 
27
- public stopServerGroup(serverGroup: IAppengineServerGroup, application: Application): PromiseLike<ITask> {
38
+ public stopServerGroup(serverGroup: IAppengineServerGroup, application: Application): Promise<ITask> {
28
39
  const job = this.buildJob(serverGroup, application, 'stopAppEngineServerGroup');
29
40
 
30
41
  const command: ITaskCommand = {
@@ -36,6 +47,48 @@ export class AppengineServerGroupWriter {
36
47
  return TaskExecutor.executeTask(command);
37
48
  }
38
49
 
50
+ public enableServerGroup(
51
+ serverGroup: IAppengineServerGroup,
52
+ application: Application,
53
+ params: Partial<IAppengineServerGroupWriteJob> = {},
54
+ ): Promise<ITask> {
55
+ const job = { ...params, ...this.buildJob(serverGroup, application, 'enableServerGroup') };
56
+
57
+ return TaskExecutor.executeTask({
58
+ job: [job],
59
+ application,
60
+ description: `Enable Server Group: ${serverGroup.name}`,
61
+ });
62
+ }
63
+
64
+ public disableServerGroup(
65
+ serverGroup: IAppengineServerGroup,
66
+ application: Application,
67
+ params: Partial<IAppengineServerGroupWriteJob> = {},
68
+ ): Promise<ITask> {
69
+ const job = { ...params, ...this.buildJob(serverGroup, application, 'disableServerGroup') };
70
+
71
+ return TaskExecutor.executeTask({
72
+ job: [job],
73
+ application,
74
+ description: `Disable Server Group: ${serverGroup.name}`,
75
+ });
76
+ }
77
+
78
+ public destroyServerGroup(
79
+ serverGroup: IAppengineServerGroup,
80
+ application: Application,
81
+ params: Partial<IAppengineServerGroupWriteJob> = {},
82
+ ): Promise<ITask> {
83
+ const job = { ...params, ...this.buildJob(serverGroup, application, 'destroyServerGroup') };
84
+
85
+ return TaskExecutor.executeTask({
86
+ job: [job],
87
+ application,
88
+ description: `Destroy Server Group: ${serverGroup.name}`,
89
+ });
90
+ }
91
+
39
92
  private buildJob(
40
93
  serverGroup: IAppengineServerGroup,
41
94
  application: Application,
@@ -51,7 +104,3 @@ export class AppengineServerGroupWriter {
51
104
  };
52
105
  }
53
106
  }
54
-
55
- export const APPENGINE_SERVER_GROUP_WRITER = 'spinnaker.appengine.serverGroup.write.service';
56
-
57
- module(APPENGINE_SERVER_GROUP_WRITER, []).service('appengineServerGroupWriter', AppengineServerGroupWriter);
@@ -1 +0,0 @@
1
- export declare const APPENGINE_COMPONENT_URL_DETAILS = "spinnaker.appengine.componentUrlDetails.component";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_CONDITIONAL_DESCRIPTION_LIST_ITEM = "spinnaker.appengine.conditionalDescriptionListItem";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_LOAD_BALANCER_CREATE_MESSAGE = "spinnaker.appengine.loadBalancer.createMessage.component";
@@ -1,18 +0,0 @@
1
- import type { IScope } from 'angular';
2
- import type { Application, IStageConstant } from '@spinnaker/core';
3
- import type { IAppengineAccount } from './IAppengineAccount';
4
- export interface IAppengineStage {
5
- credentials: string;
6
- region: string;
7
- target?: string;
8
- cloudProvider: string;
9
- isNew?: boolean;
10
- interestingHealthProviderNames: string[];
11
- }
12
- export interface IAppengineStageScope extends IScope {
13
- accounts: IAppengineAccount[];
14
- targets: IStageConstant[];
15
- stage: IAppengineStage;
16
- application: Application;
17
- platformHealth: string;
18
- }
@@ -1 +0,0 @@
1
- export declare const APPENGINE_INSTANCE_DETAILS_CTRL = "spinnaker.appengine.instanceDetails.controller";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_LOAD_BALANCER_ADVANCED_SETTINGS = "spinnaker.appengine.loadBalancer.advancedSettings.component";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_ALLOCATION_CONFIGURATION_ROW = "spinnaker.appengine.allocationConfigurationRow.component";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_LOAD_BALANCER_BASIC_SETTINGS = "spinnaker.appengine.loadBalancerSettings.component";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_STAGE_ALLOCATION_CONFIGURATION_ROW = "spinnaker.appengine.stageAllocationConfigurationRow.component";
@@ -1,2 +0,0 @@
1
- import './wizard.less';
2
- export declare const APPENGINE_LOAD_BALANCER_WIZARD_CTRL = "spinnaker.appengine.loadBalancer.wizard.controller";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_LOAD_BALANCER_DETAILS_CTRL = "spinnaker.appengine.loadBalancerDetails.controller";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_LOAD_BALANCER_MODULE = "spinnaker.appengine.loadBalancer.module";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_PIPELINE_MODULE = "spinnaker.appengine.pipeline.module";
@@ -1,12 +0,0 @@
1
- import type { IController } from 'angular';
2
- import type { IAppengineStageScope } from '../../domain';
3
- export declare class AppengineStageCtrl implements IController {
4
- protected $scope: IAppengineStageScope;
5
- static $inject: string[];
6
- constructor($scope: IAppengineStageScope);
7
- setStageRegion(): void;
8
- protected setStageCloudProvider(): void;
9
- protected setAccounts(): PromiseLike<void>;
10
- protected setTargets(): void;
11
- protected setStageCredentials(): void;
12
- }
@@ -1 +0,0 @@
1
- export declare const APPENGINE_LOAD_BALANCER_CHOICE_MODAL_CTRL = "spinnaker.appengine.loadBalancerChoiceModal.controller";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_SERVER_GROUP_BASIC_SETTINGS_CTRL = "spinnaker.appengine.basicSettings.controller";
@@ -1,2 +0,0 @@
1
- import './serverGroupWizard.less';
2
- export declare const APPENGINE_CLONE_SERVER_GROUP_CTRL = "spinnaker.appengine.cloneServerGroup.controller";
@@ -1 +0,0 @@
1
- export declare const CONFIG_FILE_ARTIFACT_LIST = "spinnaker.appengine.configFileArtifactList.component";
@@ -1,20 +0,0 @@
1
- import type { IScope } from 'angular';
2
- import type { IArtifact, IArtifactAccountPair } from '@spinnaker/core';
3
- import { ExpectedArtifactSelectorViewController, NgAppengineConfigArtifactDelegate } from '@spinnaker/core';
4
- import './serverGroupWizard.less';
5
- export interface IAppengineConfigFileConfigurerCtrlCommand {
6
- configFiles: string[];
7
- configArtifacts: ConfigArtifact[];
8
- sourceType: string;
9
- }
10
- declare class ConfigArtifact implements IArtifactAccountPair {
11
- $scope: IScope;
12
- controller: ExpectedArtifactSelectorViewController;
13
- delegate: NgAppengineConfigArtifactDelegate;
14
- id: string;
15
- account: string;
16
- artifact?: IArtifact;
17
- constructor($scope: IScope, pair?: IArtifactAccountPair);
18
- }
19
- export declare const APPENGINE_CONFIG_FILE_CONFIGURER = "spinnaker.appengine.configFileConfigurer.component";
20
- export {};
@@ -1 +0,0 @@
1
- export declare const APPENGINE_DYNAMIC_BRANCH_LABEL = "spinnaker.appengine.dynamicBranchLabel.component";
@@ -1 +0,0 @@
1
- export declare const APPENGINE_SERVER_GROUP_DETAILS_CTRL = "spinnaker.appengine.serverGroup.details.controller";
@@ -1,29 +0,0 @@
1
- import type { IComponentOptions } from 'angular';
2
- import { module } from 'angular';
3
-
4
- const appengineComponentUrlDetailsComponent: IComponentOptions = {
5
- bindings: { component: '<' },
6
- template: `
7
- <dt>HTTPS</dt>
8
- <dl class="small">
9
- <a href="{{$ctrl.component.httpsUrl}}" target="_blank">{{$ctrl.component.httpsUrl}}</a>
10
- <copy-to-clipboard class="copy-to-clipboard copy-to-clipboard-sm"
11
- tool-tip="'Copy URL to clipboard'"
12
- text="$ctrl.component.httpsUrl"></copy-to-clipboard>
13
- </dl>
14
- <dt>HTTP</dt>
15
- <dl class="small">
16
- <a href="{{$ctrl.component.httpUrl}}" target="_blank">{{$ctrl.component.httpUrl}}</a>
17
- <copy-to-clipboard class="copy-to-clipboard copy-to-clipboard-sm"
18
- tool-tip="'Copy URL to clipboard'"
19
- text="$ctrl.component.httpUrl"></copy-to-clipboard>
20
- </dl>
21
- `,
22
- };
23
-
24
- export const APPENGINE_COMPONENT_URL_DETAILS = 'spinnaker.appengine.componentUrlDetails.component';
25
-
26
- module(APPENGINE_COMPONENT_URL_DETAILS, []).component(
27
- 'appengineComponentUrlDetails',
28
- appengineComponentUrlDetailsComponent,
29
- );
@@ -1,37 +0,0 @@
1
- import type { IComponentOptions, IController, IFilterService } from 'angular';
2
- import { module } from 'angular';
3
-
4
- class AppengineConditionalDescriptionListItemCtrl implements IController {
5
- public label: string;
6
- public key: string;
7
- public component: any;
8
-
9
- public static $inject = ['$filter'];
10
- constructor(private $filter: IFilterService) {}
11
-
12
- public $onInit(): void {
13
- if (!this.label) {
14
- this.label = this.$filter<Function>('robotToHuman')(this.key);
15
- }
16
- }
17
- }
18
-
19
- const appengineConditionalDescriptionListItem: IComponentOptions = {
20
- bindings: { label: '@', key: '@', component: '<' },
21
- transclude: {
22
- keyLabel: '?keyText',
23
- valueLabel: '?valueLabel',
24
- },
25
- template: `
26
- <dt ng-if="$ctrl.component[$ctrl.key]">{{$ctrl.label}}<span ng-transclude="keyLabel"></span></dt>
27
- <dd ng-if="$ctrl.component[$ctrl.key]">{{$ctrl.component[$ctrl.key]}}<span ng-transclude="valueLabel"></span></dd>
28
- `,
29
- controller: AppengineConditionalDescriptionListItemCtrl,
30
- };
31
-
32
- export const APPENGINE_CONDITIONAL_DESCRIPTION_LIST_ITEM = 'spinnaker.appengine.conditionalDescriptionListItem';
33
-
34
- module(APPENGINE_CONDITIONAL_DESCRIPTION_LIST_ITEM, []).component(
35
- 'appengineConditionalDtDd',
36
- appengineConditionalDescriptionListItem,
37
- );
@@ -1,33 +0,0 @@
1
- <div class="row">
2
- <div class="col-md-offset-{{ $ctrl.columnOffset || 0 }} col-md-{{ $ctrl.columns || 12 }}">
3
- <div class="well">
4
- <p>
5
- <span ng-if="$ctrl.showCreateMessage">Spinnaker cannot create a load balancer for App Engine.</span>
6
- A Spinnaker load balancer maps to an App Engine service, which is specified in a version's
7
- <code>app.yaml</code>.
8
- </p>
9
- <p>For example, the following <code>app.yaml</code></p>
10
- <pre class="text-left" style="white-space: pre-line">
11
- runtime: python27
12
- api_version: 1
13
- &hellip;
14
- service: mobile
15
- &hellip;
16
- </pre
17
- >
18
- <p>
19
- deploys to the <code>mobile</code> service. If you do not specify a service, your version will be deployed to
20
- the <code>default</code> service.
21
- </p>
22
- <p>
23
- If a service does not exist when a version is deployed, it will be created. It will then be editable as a load
24
- balancer within Spinnaker.
25
- </p>
26
- <p>
27
- <a href="https://cloud.google.com/appengine/docs/python/config/appref" target="_blank"
28
- >App Engine Documentation</a
29
- >
30
- </p>
31
- </div>
32
- </div>
33
- </div>
@@ -1,13 +0,0 @@
1
- import { module } from 'angular';
2
-
3
- const appengineLoadBalancerMessageComponent: ng.IComponentOptions = {
4
- bindings: { showCreateMessage: '<', columnOffset: '@', columns: '@' },
5
- templateUrl: require('./loadBalancerMessage.component.html'),
6
- };
7
-
8
- export const APPENGINE_LOAD_BALANCER_CREATE_MESSAGE = 'spinnaker.appengine.loadBalancer.createMessage.component';
9
-
10
- module(APPENGINE_LOAD_BALANCER_CREATE_MESSAGE, []).component(
11
- 'appengineLoadBalancerMessage',
12
- appengineLoadBalancerMessageComponent,
13
- );
@@ -1,22 +0,0 @@
1
- import type { IScope } from 'angular';
2
-
3
- import type { Application, IStageConstant } from '@spinnaker/core';
4
-
5
- import type { IAppengineAccount } from './IAppengineAccount';
6
-
7
- export interface IAppengineStage {
8
- credentials: string;
9
- region: string;
10
- target?: string;
11
- cloudProvider: string;
12
- isNew?: boolean;
13
- interestingHealthProviderNames: string[];
14
- }
15
-
16
- export interface IAppengineStageScope extends IScope {
17
- accounts: IAppengineAccount[];
18
- targets: IStageConstant[];
19
- stage: IAppengineStage;
20
- application: Application;
21
- platformHealth: string;
22
- }
@@ -1,116 +0,0 @@
1
- import type { IController, IQService } from 'angular';
2
- import { module } from 'angular';
3
- import { cloneDeep, flattenDeep } from 'lodash';
4
-
5
- import type { Application, ILoadBalancer } from '@spinnaker/core';
6
- import { ConfirmationModalService, InstanceReader, InstanceWriter, RecentHistoryService } from '@spinnaker/core';
7
- import type { IAppengineInstance } from '../../domain';
8
-
9
- interface InstanceFromStateParams {
10
- instanceId: string;
11
- }
12
-
13
- interface InstanceManager {
14
- account: string;
15
- region: string;
16
- category: string; // e.g., serverGroup, loadBalancer.
17
- name: string; // Parent resource name, not instance name.
18
- instances: IAppengineInstance[];
19
- }
20
-
21
- class AppengineInstanceDetailsController implements IController {
22
- public state = { loading: true };
23
- public instance: IAppengineInstance;
24
- public instanceIdNotFound: string;
25
- public upToolTip = "An App Engine instance is 'Up' if a load balancer is directing traffic to its server group.";
26
- public outOfServiceToolTip = `
27
- An App Engine instance is 'Out Of Service' if no load balancers are directing traffic to its server group.`;
28
-
29
- public static $inject = ['$q', 'app', 'instance'];
30
-
31
- constructor(private $q: IQService, private app: Application, instance: InstanceFromStateParams) {
32
- this.app
33
- .ready()
34
- .then(() => this.retrieveInstance(instance))
35
- .then((instanceDetails) => {
36
- this.instance = instanceDetails;
37
- this.state.loading = false;
38
- })
39
- .catch(() => {
40
- this.instanceIdNotFound = instance.instanceId;
41
- this.state.loading = false;
42
- });
43
- }
44
-
45
- public terminateInstance(): void {
46
- const instance = cloneDeep(this.instance) as any;
47
- const shortName = `${this.instance.name.substring(0, 10)}...`;
48
- instance.placement = {};
49
- instance.instanceId = instance.name;
50
-
51
- const taskMonitor = {
52
- application: this.app,
53
- title: 'Terminating ' + shortName,
54
- onTaskComplete() {
55
- if (this.$state.includes('**.instanceDetails', { instanceId: instance.name })) {
56
- this.$state.go('^');
57
- }
58
- },
59
- };
60
-
61
- const submitMethod = () => {
62
- return InstanceWriter.terminateInstance(instance, this.app, { cloudProvider: 'appengine' });
63
- };
64
-
65
- ConfirmationModalService.confirm({
66
- header: 'Really terminate ' + shortName + '?',
67
- buttonText: 'Terminate ' + shortName,
68
- account: instance.account,
69
- taskMonitorConfig: taskMonitor,
70
- submitMethod,
71
- });
72
- }
73
-
74
- private retrieveInstance(instance: InstanceFromStateParams): PromiseLike<IAppengineInstance> {
75
- const instanceLocatorPredicate = (dataSource: InstanceManager) => {
76
- return dataSource.instances.some((possibleMatch) => possibleMatch.id === instance.instanceId);
77
- };
78
-
79
- const dataSources: InstanceManager[] = flattenDeep([
80
- this.app.getDataSource('serverGroups').data,
81
- this.app.getDataSource('loadBalancers').data,
82
- this.app.getDataSource('loadBalancers').data.map((loadBalancer: ILoadBalancer) => loadBalancer.serverGroups),
83
- ]);
84
-
85
- const instanceManager = dataSources.find(instanceLocatorPredicate);
86
-
87
- if (instanceManager) {
88
- const recentHistoryExtraData: { [key: string]: string } = {
89
- region: instanceManager.region,
90
- account: instanceManager.account,
91
- };
92
- if (instanceManager.category === 'serverGroup') {
93
- recentHistoryExtraData.serverGroup = instanceManager.name;
94
- }
95
- RecentHistoryService.addExtraDataToLatest('instances', recentHistoryExtraData);
96
-
97
- return InstanceReader.getInstanceDetails(
98
- instanceManager.account,
99
- instanceManager.region,
100
- instance.instanceId,
101
- ).then((instanceDetails: IAppengineInstance) => {
102
- instanceDetails.account = instanceManager.account;
103
- instanceDetails.region = instanceManager.region;
104
- return instanceDetails;
105
- });
106
- } else {
107
- return this.$q.reject();
108
- }
109
- }
110
- }
111
-
112
- export const APPENGINE_INSTANCE_DETAILS_CTRL = 'spinnaker.appengine.instanceDetails.controller';
113
- module(APPENGINE_INSTANCE_DETAILS_CTRL, []).controller(
114
- 'appengineInstanceDetailsCtrl',
115
- AppengineInstanceDetailsController,
116
- );