forked from spinnaker/deck
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(provider/cf): deploy Service via manifest (spinnaker#6094)
- spinnaker/spinnaker#3592 Co-Authored-By: Joris Melchior <joris.melchior@gmail.com>
- Loading branch information
1 parent
9e3415c
commit d5c2511
Showing
7 changed files
with
324 additions
and
103 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
app/scripts/modules/cloudfoundry/src/pipeline/config/validation/ManifestConfigValidator.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import { IValidatorConfig } from '@spinnaker/core'; | ||
|
||
export interface IManifestFieldValidatorConfig extends IValidatorConfig { | ||
manifestType: string; | ||
} |
73 changes: 29 additions & 44 deletions
73
...odules/cloudfoundry/src/pipeline/config/validation/validServiceParameterJson.validator.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,66 +1,51 @@ | ||
import { get, has, upperFirst } from 'lodash'; | ||
import { get, upperFirst } from 'lodash'; | ||
|
||
import { | ||
IPipeline, | ||
IStage, | ||
IStageOrTriggerValidator, | ||
ITrigger, | ||
IValidatorConfig, | ||
PipelineConfigValidator, | ||
} from '@spinnaker/core'; | ||
|
||
export interface IServiceParameterJsonValidationConfig extends IValidatorConfig { | ||
fieldName: string; | ||
fieldLabel?: string; | ||
message?: string; | ||
} | ||
import { IPipeline, IStage, IStageOrTriggerValidator, ITrigger, PipelineConfigValidator } from '@spinnaker/core'; | ||
import { IManifestFieldValidatorConfig } from 'cloudfoundry/pipeline/config/validation/ManifestConfigValidator'; | ||
|
||
export class ServiceParameterJsonFieldValidator implements IStageOrTriggerValidator { | ||
public validate( | ||
pipeline: IPipeline, | ||
stage: IStage | ITrigger, | ||
validationConfig: IServiceParameterJsonValidationConfig, | ||
): string { | ||
if (!this.passesValidation(stage, validationConfig)) { | ||
return this.validationMessage(validationConfig, pipeline); | ||
} | ||
return null; | ||
} | ||
|
||
protected passesValidation( | ||
stage: IStage | ITrigger, | ||
validationConfig: IServiceParameterJsonValidationConfig, | ||
): boolean { | ||
return this.fieldIsValid(stage, validationConfig); | ||
} | ||
|
||
protected validationMessage(validationConfig: IServiceParameterJsonValidationConfig, pipeline: IPipeline): string { | ||
const fieldLabel: string = this.printableFieldLabel(validationConfig); | ||
return ( | ||
validationConfig.message || `<strong>${fieldLabel}</strong> should be a valid JSON string in ${pipeline.name}` | ||
); | ||
private static validationMessage(validationConfig: IManifestFieldValidatorConfig): string { | ||
const fieldLabel: string = ServiceParameterJsonFieldValidator.printableFieldLabel(validationConfig); | ||
return validationConfig.message || `<strong>${fieldLabel}</strong> should be a valid JSON string.`; | ||
} | ||
|
||
protected printableFieldLabel(config: IServiceParameterJsonValidationConfig): string { | ||
private static printableFieldLabel(config: IManifestFieldValidatorConfig): string { | ||
const fieldLabel: string = config.fieldLabel || config.fieldName; | ||
return upperFirst(fieldLabel); | ||
} | ||
|
||
protected fieldIsValid(stage: IStage | ITrigger, config: IServiceParameterJsonValidationConfig): boolean { | ||
const fieldExists = has(stage, config.fieldName); | ||
const field: any = get(stage, config.fieldName); | ||
private static fieldIsValid(stage: IStage | ITrigger, config: IManifestFieldValidatorConfig): boolean { | ||
const manifest: any = get(stage, 'manifest'); | ||
const content: any = get(manifest, config.fieldName); | ||
|
||
if (!fieldExists || !field.trim()) { | ||
if (!content) { | ||
return true; | ||
} | ||
|
||
try { | ||
JSON.parse(field); | ||
JSON.parse(content); | ||
return true; | ||
} catch (e) { | ||
return false; | ||
} | ||
} | ||
|
||
public validate( | ||
_pipeline: IPipeline, | ||
stage: IStage | ITrigger, | ||
validationConfig: IManifestFieldValidatorConfig, | ||
): string { | ||
const manifest: any = get(stage, 'manifest'); | ||
|
||
if (manifest.type !== validationConfig.manifestType) { | ||
return null; | ||
} | ||
|
||
if (!ServiceParameterJsonFieldValidator.fieldIsValid(stage, validationConfig)) { | ||
return ServiceParameterJsonFieldValidator.validationMessage(validationConfig); | ||
} | ||
return null; | ||
} | ||
} | ||
|
||
PipelineConfigValidator.registerValidator('validServiceParameterJson', new ServiceParameterJsonFieldValidator()); |
24 changes: 24 additions & 0 deletions
24
...es/cloudfoundry/src/pipeline/config/validation/validateManifestRequiredField.validator.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import { get, upperFirst } from 'lodash'; | ||
|
||
import { IPipeline, IStage, IStageOrTriggerValidator, ITrigger, PipelineConfigValidator } from '@spinnaker/core'; | ||
import { IManifestFieldValidatorConfig } from 'cloudfoundry/pipeline/config/validation/ManifestConfigValidator'; | ||
|
||
export class RequiredManifestFieldValidator implements IStageOrTriggerValidator { | ||
public validate( | ||
_pipeline: IPipeline, | ||
stage: IStage | ITrigger, | ||
validationConfig: IManifestFieldValidatorConfig, | ||
): string { | ||
const manifest: any = get(stage, 'manifest'); | ||
|
||
if (manifest.type !== validationConfig.manifestType) { | ||
return null; | ||
} | ||
|
||
const content: any = get(manifest, validationConfig.fieldName); | ||
const fieldLabel = upperFirst(validationConfig.fieldName); | ||
return content ? null : `<strong>${fieldLabel}</strong> is a required field for Deploy Service stages.`; | ||
} | ||
} | ||
|
||
PipelineConfigValidator.registerValidator('requiredManifestField', new RequiredManifestFieldValidator()); |
Oops, something went wrong.