Skip to content
This repository was archived by the owner on Oct 3, 2025. It is now read-only.

Commit f3d35e1

Browse files
Jammy LouieStu Pollock
authored andcommitted
feat(cf): add user provided service support (spinnaker#6293)
Co-Authored-By: Stu Pollock <spollock@pivotal.io>
1 parent 16fd07d commit f3d35e1

13 files changed

Lines changed: 581 additions & 377 deletions

‎app/scripts/modules/cloudfoundry/src/cf.module.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { CloudFoundryNoLoadBalancerModal } from './loadBalancer/configure/cloudF
2929
import 'cloudfoundry/pipeline/config/validation/instanceSize.validator';
3030
import 'cloudfoundry/pipeline/config/validation/cfTargetImpedance.validator';
3131
import 'cloudfoundry/pipeline/config/validation/validServiceParameterJson.validator';
32-
import 'cloudfoundry/pipeline/config/validation/validateManifestRequiredField.validator.ts';
32+
import 'cloudfoundry/pipeline/config/validation/validateServiceRequiredField.validator.ts';
3333
import { CLOUD_FOUNDRY_DEPLOY_SERVICE_STAGE } from './pipeline/stages/deployService/cloudfoundryDeployServiceStage.module';
3434
import { CLOUD_FOUNDRY_DESTROY_ASG_STAGE } from './pipeline/stages/destroyAsg/cloudfoundryDestroyAsgStage.module';
3535
import { CLOUD_FOUNDRY_DESTROY_SERVICE_STAGE } from './pipeline/stages/destroyService/cloudfoundryDestroyServiceStage.module';

‎app/scripts/modules/cloudfoundry/src/pipeline/config/validation/ManifestConfigValidator.ts‎

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { IValidatorConfig } from '@spinnaker/core';
2+
3+
export interface IServiceFieldValidatorConfig extends IValidatorConfig {
4+
serviceInputType: string;
5+
}

‎app/scripts/modules/cloudfoundry/src/pipeline/config/validation/validServiceParameterJson.validator.ts‎

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import { get, upperFirst } from 'lodash';
22

33
import { IPipeline, IStage, IStageOrTriggerValidator, ITrigger, PipelineConfigValidator } from '@spinnaker/core';
4-
import { IManifestFieldValidatorConfig } from 'cloudfoundry/pipeline/config/validation/ManifestConfigValidator';
4+
import { IServiceFieldValidatorConfig } from 'cloudfoundry/pipeline/config/validation/ServiceFieldValidatorConfig';
55

66
export class ServiceParameterJsonFieldValidator implements IStageOrTriggerValidator {
7-
private static validationMessage(validationConfig: IManifestFieldValidatorConfig): string {
7+
private static validationMessage(validationConfig: IServiceFieldValidatorConfig): string {
88
const fieldLabel: string = ServiceParameterJsonFieldValidator.printableFieldLabel(validationConfig);
99
return validationConfig.message || `<strong>${fieldLabel}</strong> should be a valid JSON string.`;
1010
}
1111

12-
private static printableFieldLabel(config: IManifestFieldValidatorConfig): string {
12+
private static printableFieldLabel(config: IServiceFieldValidatorConfig): string {
1313
const fieldLabel: string = config.fieldLabel || config.fieldName;
1414
return upperFirst(fieldLabel);
1515
}
1616

17-
private static fieldIsValid(stage: IStage | ITrigger, config: IManifestFieldValidatorConfig): boolean {
18-
const manifest: any = get(stage, 'manifest');
19-
const content: any = get(manifest, config.fieldName);
17+
private static fieldIsValid(stage: IStage | ITrigger, config: IServiceFieldValidatorConfig): boolean {
18+
const serviceInput = get(stage, 'manifest');
19+
const content: any = get(serviceInput, config.fieldName);
2020

2121
if (!content) {
2222
return true;
@@ -33,11 +33,10 @@ export class ServiceParameterJsonFieldValidator implements IStageOrTriggerValida
3333
public validate(
3434
_pipeline: IPipeline,
3535
stage: IStage | ITrigger,
36-
validationConfig: IManifestFieldValidatorConfig,
36+
validationConfig: IServiceFieldValidatorConfig,
3737
): string {
38-
const manifest: any = get(stage, 'manifest');
39-
40-
if (manifest.type !== validationConfig.manifestType) {
38+
const serviceInput: any = get(stage, 'manifest');
39+
if (serviceInput.type !== validationConfig.serviceInputType) {
4140
return null;
4241
}
4342

‎app/scripts/modules/cloudfoundry/src/pipeline/config/validation/validateManifestRequiredField.validator.ts‎

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { get, upperFirst } from 'lodash';
2+
3+
import { IPipeline, IStage, IStageOrTriggerValidator, ITrigger, PipelineConfigValidator } from '@spinnaker/core';
4+
import { IServiceFieldValidatorConfig } from 'cloudfoundry/pipeline/config/validation/ServiceFieldValidatorConfig';
5+
6+
export class RequiredServiceFieldValidator implements IStageOrTriggerValidator {
7+
public validate(
8+
_pipeline: IPipeline,
9+
stage: IStage | ITrigger,
10+
validationConfig: IServiceFieldValidatorConfig,
11+
): string {
12+
const serviceInput: any = get(stage, 'manifest');
13+
if (serviceInput.type !== validationConfig.serviceInputType) {
14+
return null;
15+
}
16+
const content: any = get(serviceInput, validationConfig.fieldName);
17+
const fieldLabel = upperFirst(validationConfig.fieldName);
18+
return content ? null : `<strong>${fieldLabel}</strong> is a required field for Deploy Service stages.`;
19+
}
20+
}
21+
22+
PipelineConfigValidator.registerValidator('requiredServiceField', new RequiredServiceFieldValidator());

0 commit comments

Comments
 (0)