@spinnaker/cloudfoundry 2025.4.0 → 2026.0.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.
- package/dist/index.js +1 -5928
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/common/applicationName.validator.ts","../src/help/cloudfoundry.help.ts","../src/instance/details/CloudFoundryInstanceActions.tsx","../src/instance/details/sections/CloudFoundryInstanceDetailsSection.tsx","../src/instance/details/CloudFoundryInstanceDetails.tsx","../src/loadBalancer/loadBalancer.transformer.ts","../src/loadBalancer/details/CloudFoundryLoadBalancerActions.tsx","../src/loadBalancer/details/sections/CloudFoundryLoadBalancerDetailsSection.tsx","../src/loadBalancer/details/sections/CloudFoundryLoadBalancerStatusSection.tsx","../src/loadBalancer/details/sections/CloudFoundryLoadBalancerLinksSection.tsx","../src/loadBalancer/details/CloudFoundryLoadBalancerDetails.tsx","../src/presentation/forms/inputs/FormikConfigField.tsx","../src/presentation/forms/serverGroup/Buildpacks.tsx","../src/presentation/forms/serverGroup/EnvironmentVariables.tsx","../src/presentation/forms/serverGroup/HealthCheck.tsx","../src/presentation/forms/serverGroup/InstanceParameters.tsx","../src/presentation/forms/serverGroup/Routes.tsx","../src/presentation/forms/serverGroup/Services.tsx","../src/presentation/widgets/accountRegionClusterSelector/AccountRegionClusterSelector.tsx","../src/presentation/widgets/accountRegionClusterSelector/FormikAccountRegionClusterSelector.tsx","../src/presentation/pipeline/stages/CloudFoundryAsgStageConfig.tsx","../src/presentation/pipeline/stages/CloudFoundryLoadBalancersExecutionDetails.tsx","../src/presentation/pipeline/stages/CloudFoundryLoadBalancersStageConfig.tsx","../src/presentation/pipeline/stages/CloudFoundryServiceExecutionDetails.tsx","../src/presentation/pipeline/stages/CloudFoundryServiceKeyExecutionDetails.tsx","../src/loadBalancer/configure/CloudFoundryMapLoadBalancerModal.tsx","../src/logo/cf.logo.svg","../src/pipeline/config/validation/cfTargetImpedance.validator.ts","../src/pipeline/config/validation/instanceSize.validator.ts","../src/pipeline/config/validation/requiredRoutes.validator.ts","../src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestConfigForm.tsx","../src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestConfig.tsx","../src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestDetailsTab.tsx","../src/pipeline/stages/bakeCloudFoundryManifest/bakeCloudFoundryManifestStage.ts","../src/serverGroup/configure/serverGroupCommandBuilder.service.cf.ts","../src/serverGroup/configure/serverGroupCommandBuilderShim.service.cf.ts","../src/serverGroup/configure/wizard/ServerGroupTemplateSelection.tsx","../src/serverGroup/configure/wizard/sections/artifactSettings/ArtifactSettings.cf.tsx","../src/serverGroup/configure/wizard/sections/artifactSettings/ConstantArtifactSettings.cf.tsx","../src/deploymentStrategy/strategies/rollingredblack/AdditionalFields.tsx","../src/deploymentStrategy/CloudFoundryDeploymentStrategySelector.tsx","../../../node_modules/style-inject/dist/style-inject.es.js","../src/serverGroup/configure/wizard/sections/basicSettings/BasicSettings.cf.tsx","../src/serverGroup/configure/wizard/sections/cloneSettings/CloneSettings.cf.tsx","../src/serverGroup/configure/wizard/sections/configurationSettings/ConfigurationSettings.cf.tsx","../src/serverGroup/configure/wizard/CreateServerGroupModal.tsx","../src/pipeline/stages/cloneServerGroup/CloudFoundryCloneServerGroupStageConfig.tsx","../src/pipeline/stages/cloneServerGroup/cloudFoundryCloneServerGroupStage.module.ts","../src/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsStageConfigForm.tsx","../src/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsConfig.tsx","../src/pipeline/stages/createServiceBindings/cloudFoundryCreateServiceBindingsStage.ts","../src/pipeline/stages/createServiceKey/CloudFoundryCreateServiceKeyStageConfig.tsx","../src/pipeline/stages/createServiceKey/cloudFoundryCreateServiceKeyStage.module.ts","../src/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsStageConfigForm.tsx","../src/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsConfig.tsx","../src/pipeline/stages/deleteServiceBindings/cloudFoundryDeleteServiceBindingsStage.ts","../src/pipeline/stages/deleteServiceKey/CloudFoundryDeleteServiceKeyStageConfig.tsx","../src/pipeline/stages/deleteServiceKey/cloudFoundryDeleteServiceKeyStage.module.ts","../src/pipeline/stages/deployService/ServiceTagsInput.tsx","../src/pipeline/stages/deployService/CreateServiceInstanceDirectInput.tsx","../src/pipeline/stages/deployService/CreateUserProvidedInput.tsx","../src/pipeline/stages/deployService/CloudFoundryDeployServiceStageConfig.tsx","../src/pipeline/stages/deployService/cloudFoundryDeployServiceStage.module.ts","../src/pipeline/stages/destroyAsg/cloudFoundryDestroyAsgStage.module.ts","../src/pipeline/stages/destroyService/CloudFoundryDestroyServiceStageConfigForm.tsx","../src/pipeline/stages/destroyService/CloudFoundryDestroyServiceStageConfig.tsx","../src/pipeline/stages/destroyService/cloudFoundryDestroyServiceStage.module.ts","../src/pipeline/stages/disableAsg/cloudFoundryDisableAsgStage.module.ts","../src/pipeline/stages/enableAsg/cloudFoundryEnableAsgStage.module.ts","../src/pipeline/stages/mapLoadBalancers/cloudFoundryMapLoadBalancersStage.module.ts","../src/pipeline/stages/resizeAsg/CloudFoundryResizeAsgStageConfig.tsx","../src/pipeline/stages/resizeAsg/cloudFoundryResizeAsgStage.module.ts","../src/pipeline/stages/rollbackCluster/CloudFoundryRollbackClusterStageConfig.tsx","../src/pipeline/stages/rollbackCluster/cloudFoundryRollbackClusterStage.module.ts","../src/pipeline/stages/runJob/CloudFoundryRunJobStageConfig.tsx","../src/presentation/widgets/recentLogs/CloudFoundryRecentLogs.tsx","../src/pipeline/stages/runJob/RunJobExecutionDetails.tsx","../src/pipeline/stages/runJob/cloudFoundryRunJob.module.ts","../src/pipeline/stages/shareService/CloudFoundryShareServiceExecutionDetails.tsx","../src/pipeline/stages/shareService/CloudFoundryShareServiceStageConfig.tsx","../src/pipeline/stages/shareService/cloudFoundryShareServiceStage.module.ts","../src/pipeline/stages/unmapLoadBalancers/cloudFoundryUnmapLoadBalancersStage.module.ts","../src/pipeline/stages/unshareService/CloudFoundryUnshareServiceExecutionDetails.tsx","../src/pipeline/stages/unshareService/CloudFoundryUnshareServiceStageConfig.tsx","../src/pipeline/stages/unshareService/cloudFoundryUnshareServiceStage.module.ts","../src/serverGroup/details/sections/ServerGroupInformationSection.tsx","../src/serverGroup/details/sections/ApplicationManagerSection.tsx","../src/serverGroup/details/sections/MetricsSection.tsx","../src/serverGroup/details/sections/ServerGroupSizingSection.tsx","../src/serverGroup/details/sections/HealthCheckSection.tsx","../src/serverGroup/details/sections/PackageSection.tsx","../src/serverGroup/details/sections/BuildSection.tsx","../src/serverGroup/details/sections/BoundServicesSection.tsx","../src/serverGroup/details/sections/EnvironmentVariablesSection.tsx","../src/serverGroup/serverGroup.transformer.ts","../src/serverGroup/details/mapLoadBalancers/CloudFoundryMapLoadBalancersModal.tsx","../src/serverGroup/details/mapLoadBalancers/CloudFoundryUnmapLoadBalancersModal.tsx","../src/serverGroup/details/resize/CloudFoundryResizeServerGroupModal.tsx","../src/serverGroup/details/rollback/CloudFoundryRollbackServerGroupModal.tsx","../src/serverGroup/details/cloudFoundryServerGroupActions.tsx","../src/serverGroup/details/cfServerGroupDetailsGetter.ts","../src/cf.module.ts","../src/cf.settings.ts"],"sourcesContent":["import { ApplicationNameValidator } from '@spinnaker/core';\n\nclass CloudFoundryApplicationNameValidator {\n private static MAX_RESOURCE_NAME_LENGTH = 63;\n\n private static validateSpecialCharacters(name: string, _warnings: string[], errors: string[]): void {\n const alphanumPattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!alphanumPattern.test(name)) {\n const alphanumWithDashPattern = /^([a-zA-Z][a-zA-Z0-9-]*)?$/;\n if (!alphanumWithDashPattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters, digits or dashes. ' +\n 'No special characters are allowed.',\n );\n }\n }\n }\n\n private static validateLength(name: string, errors: string[]): void {\n if (name.length > CloudFoundryApplicationNameValidator.MAX_RESOURCE_NAME_LENGTH) {\n errors.push(\n `The maximum length for an application in Cloud Foundry is ${CloudFoundryApplicationNameValidator.MAX_RESOURCE_NAME_LENGTH} characters.`,\n );\n }\n }\n\n public validate(name = '') {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n if (name && name.length) {\n CloudFoundryApplicationNameValidator.validateSpecialCharacters(name, warnings, errors);\n CloudFoundryApplicationNameValidator.validateLength(name, errors);\n }\n\n return {\n warnings,\n errors,\n };\n }\n}\n\nApplicationNameValidator.registerValidator('cloudfoundry', new CloudFoundryApplicationNameValidator());\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'cf.service.deploy.timeout':\n '(Optional) <b>Override Deploy Timeout</b> is the maximum amount of time allowed for service deployment before Spinnaker reports a timeout error (default: 450 seconds). If a timeout error is reported by Spinnaker, the request may still be processed and a service may still be created.',\n 'cf.service.destroy.timeout':\n '(Optional) <b>Override Destroy Timeout</b> is the maximum amount of time allowed for service destruction before Spinnaker reports a timeout error (default: 450 seconds). If a timeout error is reported by Spinnaker, the request may still be processed and the service may be deleted.',\n 'cf.serverGroup.stack':\n '(Optional) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.',\n 'cf.serverGroup.detail':\n '(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.',\n 'cf.serverGroup.startApplication':\n '<b>Start on creation</b> is a boolean value that determines if the server group is started upon creation. Default value is <code>true</code>.',\n 'cf.serverGroup.requiredRoutes':\n '<b>Route</b> is a URI in the form of <code>some.host.some.domain[:9999][/some/path]</code> (port and path are optional). The domain has to be a valid domain in the CloudFoundry Org (Region) that this server group runs in.',\n 'cf.serverGroup.routes':\n '(Optional) <b>Route</b> is a URI in the form of <code>some.host.some.domain[:9999][/some/path]</code> (port and path are optional). The domain has to be a valid domain in the CloudFoundry Org (Region) that this server group runs in.',\n 'cf.artifact.package': `<p>This option allows you to create a new server group from an existing Droplet. You can use this to relocate an existing Cloud Foundry application from one space to another or to launch a clone of an application with different root filesystem or resource settings.</p>`,\n 'cf.artifact.trigger.account': `<p>Specify an artifact account if the trigger source produces an artifact that requires authentication credentials to retrieve. Otherwise, leave blank.</p>`,\n 'cf.runJob.logsUrl':\n '<p>(Optional) A templated URL to an external logging system. The URL is used in the pipeline execution stage task details.</p>' +\n '<p><a href=\"http://spinnaker.github.io/guides/user/pipeline-expressions\" target=\"_blank\">Pipeline expressions</a> can be used to interpolate values from the stage context, for example:' +\n '<ul>' +\n '<li><code>${appGuid}</code> the selected cluster CF app GUID.</li>' +\n '<li><code>${name}</code> the task name.</li>' +\n '</ul>' +\n '</p>',\n 'cf.runJob.jobName': '(Optional) If left empty, a random string will be generated.',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport { ConfirmationModalService, InstanceWriter, ReactInjector } from '@spinnaker/core';\nimport type { ICloudFoundryInstance } from '../../domain';\n\nexport interface ICloudFoundryInstanceActionsProps {\n application: Application;\n instance: ICloudFoundryInstance;\n}\n\nexport class CloudFoundryInstanceActions extends React.Component<ICloudFoundryInstanceActionsProps> {\n private terminateInstance = () => {\n const { application, instance } = this.props;\n const instanceClone = cloneDeep(instance) as any;\n instanceClone.placement = {};\n instanceClone.id = instance.name;\n const taskMonitor = {\n application: application,\n title: 'Terminating ' + instance.name,\n onTaskComplete() {\n if (ReactInjector.$state.includes('**.serverGroup', { instanceId: instance.name })) {\n ReactInjector.$state.go('^');\n }\n },\n };\n\n const submitMethod = () => {\n return InstanceWriter.terminateInstance(instance, application, { cloudProvider: 'cloudfoundry' });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.name + '?',\n buttonText: 'Terminate',\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod,\n });\n };\n\n public render(): JSX.Element {\n return (\n <div className=\"actions\">\n <Dropdown className=\"dropdown\" id=\"instance-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">Instance Actions</Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n <li>\n <a className=\"clickable\" onClick={this.terminateInstance}>\n Terminate\n </a>\n </li>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { AccountTag, CollapsibleSection, timestamp } from '@spinnaker/core';\nimport type { ICloudFoundryInstance } from '../../../domain';\n\nexport interface ICloudFoundryInstanceDetailsSectionProps {\n instance: ICloudFoundryInstance;\n}\n\nexport class CloudFoundryInstanceDetailsSection extends React.Component<ICloudFoundryInstanceDetailsSectionProps> {\n constructor(props: ICloudFoundryInstanceDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { instance } = this.props;\n return (\n <div>\n <CollapsibleSection heading=\"Instance Information\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Launched</dt>\n <dd>{timestamp(instance.launchTime)}</dd>\n <dt>In</dt>\n <dd>\n <AccountTag account={instance.account} />\n </dd>\n <dt>Region</dt>\n <dd>{instance.region}</dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Status\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>\n <span className={'glyphicon glyphicon-' + instance.healthState + '-triangle'} />\n </dt>\n <dd>{instance.healthState}</dd>\n\n {instance.details && (\n <div>\n <dt>Details</dt>\n <dd>{instance.details}</dd>\n </div>\n )}\n </dl>\n </CollapsibleSection>\n </div>\n );\n }\n}\n","import { UISref } from '@uirouter/react';\nimport { UIRouterContext } from '@uirouter/react-hybrid';\nimport { flattenDeep } from 'lodash';\nimport React from 'react';\n\nimport type { Application, ILoadBalancer } from '@spinnaker/core';\nimport { InstanceReader, RecentHistoryService, Spinner } from '@spinnaker/core';\n\nimport { CloudFoundryInstanceActions } from './CloudFoundryInstanceActions';\nimport type { ICloudFoundryInstance } from '../../domain';\nimport { CloudFoundryInstanceDetailsSection } from './sections';\n\ninterface InstanceFromStateParams {\n instanceId: string;\n}\n\ninterface InstanceManager {\n account: string;\n region: string;\n category: string; // e.g., serverGroup, loadBalancer.\n name: string; // Parent resource name, not instance name.\n instances: ICloudFoundryInstance[];\n}\n\ninterface ICloudFoundryInstanceDetailsState {\n instance?: ICloudFoundryInstance;\n instanceIdNotFound: string;\n loading: boolean;\n}\n\ninterface ICloudFoundryInstanceDetailsProps {\n app: Application;\n instance: InstanceFromStateParams;\n loading: boolean;\n}\n\n@UIRouterContext\nexport class CloudFoundryInstanceDetails extends React.Component<\n ICloudFoundryInstanceDetailsProps,\n ICloudFoundryInstanceDetailsState\n> {\n constructor(props: ICloudFoundryInstanceDetailsProps) {\n super(props);\n\n this.state = {\n loading: true,\n instanceIdNotFound: props.instance.instanceId,\n };\n }\n\n public componentDidMount(): void {\n this.props.app.ready().then(() => this.retrieveInstance(this.props.instance));\n }\n\n private retrieveInstance(instanceFromParams: InstanceFromStateParams): void {\n const instanceLocatorPredicate = (dataSource: InstanceManager) => {\n return dataSource.instances.some((possibleMatch) => possibleMatch.id === instanceFromParams.instanceId);\n };\n\n const dataSources: InstanceManager[] = flattenDeep([\n this.props.app.getDataSource('serverGroups').data,\n this.props.app.getDataSource('loadBalancers').data,\n this.props.app\n .getDataSource('loadBalancers')\n .data.map((loadBalancer: ILoadBalancer) => loadBalancer.serverGroups),\n ]);\n\n const instanceManager = dataSources.find(instanceLocatorPredicate);\n\n if (instanceManager) {\n const recentHistoryExtraData: { [key: string]: string } = {\n region: instanceManager.region,\n account: instanceManager.account,\n };\n if (instanceManager.category === 'serverGroup') {\n recentHistoryExtraData.serverGroup = instanceManager.name;\n }\n RecentHistoryService.addExtraDataToLatest('instances', recentHistoryExtraData);\n InstanceReader.getInstanceDetails(instanceManager.account, instanceManager.region, instanceFromParams.instanceId)\n .then((instanceDetails: ICloudFoundryInstance) => {\n instanceDetails.account = instanceManager.account;\n instanceDetails.region = instanceManager.region;\n return instanceDetails;\n })\n .then((instance) => {\n this.setState({\n instance,\n loading: false,\n });\n });\n }\n }\n\n public render(): JSX.Element {\n const { app } = this.props;\n const { instance, instanceIdNotFound, loading } = this.state;\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n const notFoundHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <h3 className=\"horizontal middle space-between flex-1\">{instanceIdNotFound}</h3>\n </div>\n </div>\n );\n const instanceHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <span className={'glyphicon glyphicon-hdd ' + instance.healthState} />\n <h3 className=\"horizontal middle space-between flex-1\">{instance.name}</h3>\n </div>\n <CloudFoundryInstanceActions application={app} instance={instance} />\n </div>\n );\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Instance not found.</h3>\n </div>\n </div>\n </div>\n );\n const instanceContent = () => (\n <div className=\"content\">\n <CloudFoundryInstanceDetailsSection instance={instance} />\n </div>\n );\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && instance && instanceHeader()}\n {!loading && instance && instanceContent()}\n {!loading && !instance && notFoundHeader()}\n {!loading && !instance && notFoundContent()}\n </div>\n );\n }\n}\n","import { camelCase, chain, cloneDeep, has } from 'lodash';\n\nimport type {\n Application,\n IInstance,\n IInstanceCounts,\n ILoadBalancer,\n ILoadBalancerUpsertCommand,\n IServerGroup,\n} from '@spinnaker/core';\nimport type {\n ICloudFoundryLoadBalancer,\n ICloudFoundryLoadBalancerUpsertCommand,\n ICloudFoundryServerGroup,\n ICloudFoundrySpace,\n} from '../domain';\n\nexport class CloudFoundryLoadBalancerUpsertDescription\n implements ILoadBalancerUpsertCommand, ICloudFoundryLoadBalancer {\n public id: string;\n public credentials: string;\n public account: string;\n public loadBalancerName: string;\n public name: string;\n public region: string;\n public cloudProvider: string;\n public serverGroups: ICloudFoundryServerGroup[];\n public space: ICloudFoundrySpace;\n\n constructor(loadBalancer: ICloudFoundryLoadBalancer) {\n this.id = loadBalancer.id;\n this.credentials = loadBalancer.account;\n this.account = this.credentials;\n this.cloudProvider = loadBalancer.cloudProvider;\n this.loadBalancerName = loadBalancer.name;\n this.name = loadBalancer.name;\n this.region = loadBalancer.region;\n this.serverGroups = loadBalancer.serverGroups;\n this.space = loadBalancer.space;\n }\n}\n\nexport class CloudFoundryLoadBalancerTransformer {\n public static $inject = ['$q'];\n constructor(private $q: ng.IQService) {}\n\n public normalizeLoadBalancer(loadBalancer: ILoadBalancer): PromiseLike<ILoadBalancer> {\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instanceCounts = this.buildInstanceCounts(loadBalancer.serverGroups);\n loadBalancer.instances = [];\n loadBalancer.serverGroups.forEach((serverGroup) => {\n serverGroup.account = loadBalancer.account;\n serverGroup.region = loadBalancer.region;\n serverGroup.cloudProvider = loadBalancer.provider;\n\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = (serverGroup.detachedInstances as any).map((id: string) => ({ id }));\n }\n serverGroup.instances = serverGroup.instances\n .concat(serverGroup.detachedInstances || [])\n .map((instance: any) => this.transformInstance(instance, loadBalancer));\n });\n\n const activeServerGroups = loadBalancer.serverGroups.filter((sg) => !sg.isDisabled);\n loadBalancer.instances = chain(activeServerGroups).map('instances').flatten().value() as IInstance[];\n return this.$q.resolve(loadBalancer);\n }\n\n public constructNewCloudFoundryLoadBalancerTemplate(\n application: Application,\n ): ICloudFoundryLoadBalancerUpsertCommand {\n return {\n cloudProvider: 'cloudfoundry',\n credentials: undefined,\n name: application.name,\n id: undefined,\n host: '',\n path: '',\n port: '',\n region: '',\n domain: '',\n serverGroups: [],\n routes: [],\n };\n }\n\n public convertLoadBalancerForEditing(\n loadBalancer: ICloudFoundryLoadBalancer,\n application: Application,\n ): PromiseLike<ICloudFoundryLoadBalancer> {\n return application\n .getDataSource('loadBalancers')\n .ready()\n .then(() => {\n const upToDateLoadBalancer = application\n .getDataSource('loadBalancers')\n .data.find((candidate: ILoadBalancer) => {\n return candidate.name === loadBalancer.name && candidate.account === loadBalancer.account;\n });\n\n if (upToDateLoadBalancer) {\n loadBalancer.serverGroups = cloneDeep(upToDateLoadBalancer.serverGroups);\n }\n return loadBalancer;\n });\n }\n\n public convertLoadBalancerToUpsertDescription(\n loadBalancer: ICloudFoundryLoadBalancer,\n ): CloudFoundryLoadBalancerUpsertDescription {\n return new CloudFoundryLoadBalancerUpsertDescription(loadBalancer);\n }\n\n private buildInstanceCounts(serverGroups: IServerGroup[]): IInstanceCounts {\n const instanceCounts: IInstanceCounts = chain(serverGroups)\n .map('instances')\n .flatten()\n .reduce(\n (acc: IInstanceCounts, instance: any) => {\n if (has(instance, 'health.state')) {\n acc[camelCase(instance.health.state)]++;\n }\n return acc;\n },\n { up: 0, down: 0, outOfService: 0, succeeded: 0, failed: 0, starting: 0, unknown: 0 },\n )\n .value();\n\n instanceCounts.outOfService += chain(serverGroups).map('detachedInstances').flatten().value().length;\n return instanceCounts;\n }\n\n private transformInstance(instance: any, loadBalancer: ILoadBalancer) {\n instance.provider = loadBalancer.type;\n instance.account = loadBalancer.account;\n instance.region = loadBalancer.region;\n instance.loadBalancers = [loadBalancer.name];\n const health = instance.health || {};\n instance.healthState = health.state ?? 'OutOfService';\n instance.health = [health];\n\n return instance as IInstance;\n }\n}\n","import React from 'react';\n\nimport { Dropdown } from 'react-bootstrap';\n\nimport type { Application, ILoadBalancer, ILoadBalancerDeleteCommand } from '@spinnaker/core';\nimport { ConfirmationModalService, LoadBalancerWriter, ReactInjector } from '@spinnaker/core';\n\nexport interface ICloudFoundryLoadBalancerActionsProps {\n application: Application;\n loadBalancer: ILoadBalancer;\n}\n\nexport class CloudFoundryLoadBalancerActions extends React.Component<ICloudFoundryLoadBalancerActionsProps> {\n private deleteLoadBalancer = () => {\n const { application, loadBalancer } = this.props;\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + loadBalancer.name,\n onTaskComplete() {\n if (ReactInjector.$state.includes('**.serverGroup', { instanceId: loadBalancer.name })) {\n ReactInjector.$state.go('^');\n }\n },\n };\n\n const submitMethod = () => {\n const loadBalancerDeleteCommand: ILoadBalancerDeleteCommand = {\n cloudProvider: loadBalancer.cloudProvider,\n credentials: loadBalancer.account,\n regions: [loadBalancer.region],\n loadBalancerName: loadBalancer.name,\n };\n return LoadBalancerWriter.deleteLoadBalancer(loadBalancerDeleteCommand, application);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + loadBalancer.name + '?',\n buttonText: 'Delete ' + loadBalancer.name,\n account: loadBalancer.account,\n taskMonitorConfig: taskMonitor,\n submitMethod,\n });\n };\n\n public render(): JSX.Element {\n return (\n <div className=\"actions\">\n <Dropdown className=\"dropdown\" id=\"instance-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">Load Balancer Actions</Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n <li>\n <a className=\"clickable\" onClick={this.deleteLoadBalancer}>\n Delete Load Balancer\n </a>\n </li>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n );\n }\n}\n","import { UISref } from '@uirouter/react';\nimport React from 'react';\n\nimport { AccountTag, CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryLoadBalancer } from '../../../domain';\n\nexport interface ICloudFoundryLoadBalancerDetailsSectionProps {\n loadBalancer: ICloudFoundryLoadBalancer;\n}\n\nexport class CloudFoundryLoadBalancerDetailsSection extends React.Component<\n ICloudFoundryLoadBalancerDetailsSectionProps\n> {\n constructor(props: ICloudFoundryLoadBalancerDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { loadBalancer } = this.props;\n return (\n <>\n <CollapsibleSection heading=\"Load Balancer Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>In</dt>\n <dd>\n <AccountTag account={loadBalancer.account} />\n </dd>\n <dt>Organization</dt>\n <dd>{loadBalancer.space.organization.name}</dd>\n <dt>Space</dt>\n <dd>{loadBalancer.space.name}</dd>\n {loadBalancer.serverGroups && (\n <>\n <dt>Server Groups</dt>\n <dd>\n <ul>\n {loadBalancer.serverGroups.map((serverGroup, index) => {\n return (\n <li key={index}>\n <UISref\n to=\"^.serverGroup\"\n params={{\n region: serverGroup.region,\n accountId: serverGroup.account,\n serverGroup: serverGroup.name,\n provider: 'cloudfoundry',\n }}\n >\n <a>{serverGroup.name}</a>\n </UISref>\n </li>\n );\n })}\n </ul>\n </dd>\n </>\n )}\n </dl>\n </CollapsibleSection>\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection, HealthCounts } from '@spinnaker/core';\nimport type { ICloudFoundryLoadBalancer } from '../../../domain';\n\nexport interface ICloudFoundryLoadBalancerStatusSectionProps {\n loadBalancer: ICloudFoundryLoadBalancer;\n}\n\nexport class CloudFoundryLoadBalancerStatusSection extends React.Component<\n ICloudFoundryLoadBalancerStatusSectionProps\n> {\n constructor(props: ICloudFoundryLoadBalancerStatusSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { loadBalancer } = this.props;\n return (\n <>\n <CollapsibleSection heading=\"Status\" defaultExpanded={true}>\n <HealthCounts className=\"pull-left\" container={loadBalancer.instanceCounts} />\n </CollapsibleSection>\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryLoadBalancer } from '../../../domain';\n\nexport interface ICloudFoundryLoadBalancerLinksSectionProps {\n loadBalancer: ICloudFoundryLoadBalancer;\n}\n\nexport class CloudFoundryLoadBalancerLinksSection extends React.Component<ICloudFoundryLoadBalancerLinksSectionProps> {\n constructor(props: ICloudFoundryLoadBalancerLinksSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { loadBalancer } = this.props;\n return (\n <>\n <CollapsibleSection heading=\"Application links\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>HTTP</dt>\n <dd>\n <a href={'http://' + loadBalancer.name}>{'http://' + loadBalancer.name}</a>\n </dd>\n <dt>HTTPS</dt>\n <dd>\n <a href={'https://' + loadBalancer.name}>{'https://' + loadBalancer.name}</a>\n </dd>\n </dl>\n </CollapsibleSection>\n </>\n );\n }\n}\n","import { UISref } from '@uirouter/react';\nimport { UIRouterContext } from '@uirouter/react-hybrid';\nimport React from 'react';\n\nimport type { Application, LoadBalancerWriter } from '@spinnaker/core';\nimport { Spinner } from '@spinnaker/core';\n\nimport { CloudFoundryLoadBalancerActions } from './CloudFoundryLoadBalancerActions';\nimport type { ICloudFoundryLoadBalancer } from '../../domain';\nimport { CloudFoundryLoadBalancerDetailsSection } from './sections';\nimport { CloudFoundryLoadBalancerLinksSection } from './sections/CloudFoundryLoadBalancerLinksSection';\nimport { CloudFoundryLoadBalancerStatusSection } from './sections/CloudFoundryLoadBalancerStatusSection';\n\ninterface ILoadBalancer {\n name: string;\n accountId: string;\n region: string;\n}\n\ninterface ICloudFoundryLoadBalancerDetailsState {\n loadBalancer: ICloudFoundryLoadBalancer;\n loadBalancerNotFound?: string;\n loading: boolean;\n refreshListenerUnsubscribe: () => void;\n}\n\nexport interface ICloudFoundryLoadBalancerDetailsProps {\n app: Application;\n loadBalancer: ILoadBalancer;\n loadBalancerWriter: LoadBalancerWriter;\n}\n\n@UIRouterContext\nexport class CloudFoundryLoadBalancerDetails extends React.Component<\n ICloudFoundryLoadBalancerDetailsProps,\n ICloudFoundryLoadBalancerDetailsState\n> {\n constructor(props: ICloudFoundryLoadBalancerDetailsProps) {\n super(props);\n this.state = {\n loading: true,\n loadBalancer: undefined,\n refreshListenerUnsubscribe: () => {},\n };\n\n props.app\n .getDataSource('loadBalancers')\n .ready()\n .then(() => this.extractLoadBalancer());\n }\n\n public componentWillUnmount(): void {\n this.state.refreshListenerUnsubscribe();\n }\n\n private extractLoadBalancer(): void {\n const { name } = this.props.loadBalancer;\n const loadBalancer: ICloudFoundryLoadBalancer = this.props.app\n .getDataSource('loadBalancers')\n .data.find((test: ICloudFoundryLoadBalancer) => {\n return test.name === name && test.account === this.props.loadBalancer.accountId;\n });\n\n this.setState({\n loading: false,\n loadBalancer,\n });\n\n this.state.refreshListenerUnsubscribe();\n\n if (loadBalancer) {\n this.setState({\n refreshListenerUnsubscribe: this.props.app\n .getDataSource('loadBalancers')\n .onRefresh(null, () => this.extractLoadBalancer()),\n });\n } else {\n this.setState({\n refreshListenerUnsubscribe: () => {},\n });\n // this.autoClose();\n }\n }\n\n public render(): JSX.Element {\n const { app } = this.props;\n const { loadBalancer, loadBalancerNotFound, loading } = this.state;\n\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n const notFoundHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <h3 className=\"horizontal middle space-between flex-1\">{loadBalancerNotFound}</h3>\n </div>\n </div>\n );\n const loadBalancerHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <i className=\"fa icon-sitemap\" />\n <h3 className=\"horizontal middle space-between flex-1\">{loadBalancer.name}</h3>\n </div>\n <CloudFoundryLoadBalancerActions application={app} loadBalancer={loadBalancer} />\n </div>\n );\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Instance not found.</h3>\n </div>\n </div>\n </div>\n );\n const loadBalancerContent = () => (\n <div className=\"content\">\n <CloudFoundryLoadBalancerDetailsSection loadBalancer={loadBalancer} />\n <CloudFoundryLoadBalancerStatusSection loadBalancer={loadBalancer} />\n <CloudFoundryLoadBalancerLinksSection loadBalancer={loadBalancer} />\n </div>\n );\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && !!loadBalancer && loadBalancerHeader()}\n {!loading && !!loadBalancer && loadBalancerContent()}\n {!loading && !loadBalancer && notFoundHeader()}\n {!loading && !loadBalancer && notFoundContent()}\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { HelpField } from '@spinnaker/core';\n\nexport interface IFormikConfigFieldProps {\n label: string;\n helpKey?: string;\n children?: React.ReactNode;\n}\n\nexport class FormikConfigField extends React.Component<IFormikConfigFieldProps> {\n constructor(props: IFormikConfigFieldProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { label, helpKey, children } = this.props;\n return (\n <div className={'StandardFieldLayout flex-container-h baseline margin-between-lg'}>\n <label className={`sm-label-right`}>\n <span className=\"label-text\">{label} </span>\n {helpKey && <HelpField id={helpKey} />}\n </label>\n <div className={`flex-grow`}>{children}</div>\n </div>\n );\n }\n}\n","import { FieldArray, getIn } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup/configure/serverGroupConfigurationModel.cf';\n\nexport interface IBuildpacksProps {\n fieldName: string;\n onChange?: (value: string[]) => void;\n}\n\nexport class Buildpacks extends React.Component<IBuildpacksProps> {\n public render() {\n const { fieldName, onChange } = this.props;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <b>Buildpacks</b>\n <FieldArray\n name={fieldName}\n render={(arrayHelpers) => {\n const serverGroupCommand: ICloudFoundryCreateServerGroupCommand = arrayHelpers.form.values;\n const buildpacks: string[] = getIn(serverGroupCommand, fieldName) || [];\n\n return (\n <table className=\"table table-condensed packed metadata\">\n <tbody>\n {buildpacks.map((_, index: number) => (\n <tr key={index}>\n <td>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={`${fieldName}[${index}]`}\n onChange={() => {\n onChange && onChange(getIn(serverGroupCommand, fieldName) || []);\n }}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </div>\n </td>\n <td>\n <a className=\"btn btn-link sm-label\" onClick={() => arrayHelpers.remove(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={2}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => arrayHelpers.push('')}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add New Buildpack\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n );\n }}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import { FieldArray, getIn } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\nimport type { ICloudFoundryEnvVar } from '../../../domain';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup/configure/serverGroupConfigurationModel.cf';\n\nexport interface IEnvironmentVariablesProps {\n fieldName: string;\n onChange?: (value: string[]) => void;\n}\n\nexport class EnvironmentVariables extends React.Component<IEnvironmentVariablesProps> {\n public render() {\n const { fieldName, onChange } = this.props;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <b>Environment Variables</b>\n <FieldArray\n name={fieldName}\n render={(arrayHelpers) => {\n const serverGroupCommand: ICloudFoundryCreateServerGroupCommand = arrayHelpers.form.values;\n const environmentVariables: string[] = getIn(serverGroupCommand, fieldName) || [];\n\n return (\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n {environmentVariables.map((_, index: number) => {\n const envPath = `${fieldName}[${index}]`;\n return (\n <tr key={index}>\n <td>\n <FormikFormField\n name={`${envPath}.key`}\n onChange={() => {\n onChange && onChange(getIn(serverGroupCommand, fieldName) || []);\n }}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </td>\n <td>\n <FormikFormField\n name={`${envPath}.value`}\n onChange={() => {\n onChange && onChange(getIn(serverGroupCommand, fieldName) || []);\n }}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </td>\n <td>\n <a className=\"btn btn-link sm-label\">\n <span\n className=\"glyphicon glyphicon-trash\"\n onClick={() => arrayHelpers.remove(index)}\n />\n </a>\n </td>\n </tr>\n );\n })}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={3}>\n <button\n type=\"button\"\n className=\"add-new col-md-12\"\n onClick={() => arrayHelpers.push({ key: '', value: '' } as ICloudFoundryEnvVar)}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add New Environment Variable\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n );\n }}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { FormikFormField, RadioButtonInput, TextInput } from '@spinnaker/core';\n\nexport interface IHealthCheckProps {\n healthCheckHttpEndpointFieldName: string;\n healthCheckType: string;\n healthCheckTypeFieldName: string;\n onHealthCheckHttpEndpointChange?: (value: string) => void;\n onHealthCheckTypeChange?: (value: string) => void;\n}\n\nexport class HealthCheck extends React.Component<IHealthCheckProps> {\n private HEALTH_CHECK_TYPE_OPTIONS = [\n { label: 'port', value: 'port' },\n { label: 'HTTP', value: 'http' },\n { label: 'process', value: 'process' },\n ];\n\n public render() {\n const {\n healthCheckTypeFieldName,\n healthCheckType,\n healthCheckHttpEndpointFieldName,\n onHealthCheckTypeChange,\n onHealthCheckHttpEndpointChange,\n } = this.props;\n\n return (\n <div className=\"col-md-9\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={healthCheckTypeFieldName}\n label=\"Health Check Type\"\n input={(props) => <RadioButtonInput {...props} inline={true} options={this.HEALTH_CHECK_TYPE_OPTIONS} />}\n onChange={(value) => {\n onHealthCheckTypeChange && onHealthCheckTypeChange(value);\n }}\n />\n </div>\n {healthCheckType === 'http' && (\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={healthCheckHttpEndpointFieldName}\n label=\"Endpoint\"\n input={(props) => <TextInput {...props} required={true} />}\n onChange={(value) => {\n onHealthCheckHttpEndpointChange && onHealthCheckHttpEndpointChange(value);\n }}\n required={true}\n />\n </div>\n )}\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\n\nexport interface IInstanceParametersProps {\n diskQuotaFieldName: string;\n instancesFieldName: string;\n memoryFieldName: string;\n onDiskQuotaChange?: (value: string) => void;\n onInstancesChange?: (value: string) => void;\n onMemoryChange?: (value: string) => void;\n}\n\nexport class InstanceParameters extends React.Component<IInstanceParametersProps> {\n public render() {\n const {\n diskQuotaFieldName,\n instancesFieldName,\n memoryFieldName,\n onDiskQuotaChange,\n onInstancesChange,\n onMemoryChange,\n } = this.props;\n\n return (\n <div>\n <div className=\"col-md-9\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={memoryFieldName}\n input={(props) => <TextInput {...props} />}\n label=\"Memory\"\n onChange={(value) => {\n onMemoryChange && onMemoryChange(value);\n }}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={diskQuotaFieldName}\n input={(props) => <TextInput {...props} />}\n label=\"Disk Quota\"\n onChange={(value) => {\n onDiskQuotaChange && onDiskQuotaChange(value);\n }}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={instancesFieldName}\n input={(props) => <TextInput type=\"number\" {...props} />}\n label=\"Instances\"\n onChange={(value) => {\n onInstancesChange && onInstancesChange(value);\n }}\n required={true}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import { FieldArray, getIn } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, HelpField, TextInput } from '@spinnaker/core';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup/configure/serverGroupConfigurationModel.cf';\n\nexport interface IRoutesProps {\n fieldName: string;\n onChange?: (value: string[]) => void;\n isRequired?: boolean;\n singleRouteOnly?: boolean;\n}\n\nexport class Routes extends React.Component<IRoutesProps> {\n public render() {\n const { fieldName, isRequired, onChange, singleRouteOnly } = this.props;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <b>{singleRouteOnly ? 'Route' : 'Routes'}</b>\n \n {!isRequired && <HelpField id=\"cf.serverGroup.routes\" />}\n {!!isRequired && <HelpField id=\"cf.serverGroup.requiredRoutes\" />}\n <FieldArray\n name={fieldName}\n render={(arrayHelpers) => {\n const serverGroupCommand: ICloudFoundryCreateServerGroupCommand = arrayHelpers.form.values;\n const routes: string[] = getIn(serverGroupCommand, fieldName) || [];\n\n return (\n <table className=\"table table-condensed packed metadata\">\n <tbody>\n {routes.map((_, index: number) => (\n <tr key={index}>\n <td>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={`${fieldName}[${index}]`}\n onChange={() => {\n onChange && onChange(getIn(serverGroupCommand, fieldName) || []);\n }}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </div>\n </td>\n <td hidden={singleRouteOnly}>\n <a className=\"btn btn-link sm-label\" onClick={() => arrayHelpers.remove(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <tr hidden={singleRouteOnly}>\n <td colSpan={2}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => arrayHelpers.push('')}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add New Route\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n );\n }}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import { FieldArray, getIn } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup/configure/serverGroupConfigurationModel.cf';\n\nexport interface IServicesProps {\n fieldName: string;\n}\n\nexport const Services: React.SFC<IServicesProps> = ({ fieldName }: IServicesProps) => {\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <b>Bind Services</b>\n <FieldArray\n name={fieldName}\n render={(arrayHelpers) => {\n const serverGroupCommand: ICloudFoundryCreateServerGroupCommand = arrayHelpers.form.values;\n const services: string[] = getIn(serverGroupCommand, fieldName) || [];\n\n return (\n <table className=\"table table-condensed packed metadata\">\n <tbody>\n {services.map((_, index: number) => (\n <tr key={index}>\n <td>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={`${fieldName}[${index}]`}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </div>\n </td>\n <td>\n <a className=\"btn btn-link sm-label\" onClick={() => arrayHelpers.remove(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={2}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => arrayHelpers.push('')}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add New Service\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n );\n }}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { first, isNil, uniq } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select, { Creatable } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IMoniker, IServerGroup, IServerGroupFilter } from '@spinnaker/core';\nimport { AppListExtractor, StageConfigField } from '@spinnaker/core';\n\nexport interface IAccountRegionClusterSelectorProps {\n accounts: IAccount[];\n application: Application;\n cloudProvider: string;\n clusterField?: string;\n component: any;\n componentName?: string;\n isSingleRegion?: boolean;\n onComponentUpdate?: (component: any) => void;\n}\n\nexport interface IAccountRegionClusterSelectorState {\n [k: string]: any;\n\n availableRegions: string[];\n clusterField: string;\n clusters: string[];\n componentName: string;\n}\n\nexport class AccountRegionClusterSelector extends React.Component<\n IAccountRegionClusterSelectorProps,\n IAccountRegionClusterSelectorState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IAccountRegionClusterSelectorProps) {\n super(props);\n const clusterField = props.clusterField || 'cluster';\n this.state = {\n availableRegions: [],\n cloudProvider: props.cloudProvider,\n clusterField: clusterField,\n clusters: [],\n componentName: props.componentName || '',\n [clusterField]: props.component[clusterField],\n };\n }\n\n public componentDidMount(): void {\n this.setRegionList(this.props.component.credentials);\n this.setClusterList(\n this.props.component.credentials,\n this.props.isSingleRegion ? [this.props.component.region] : this.props.component.regions,\n );\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private setRegionList = (credentials: string): void => {\n const { application } = this.props;\n const accountFilter: IServerGroupFilter = (serverGroup: IServerGroup) =>\n serverGroup ? serverGroup.account === credentials : true;\n observableFrom(application.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const availableRegions = AppListExtractor.getRegions([application], accountFilter);\n availableRegions.sort();\n this.setState({ availableRegions });\n });\n };\n\n private setClusterList = (credentials: string, regions: string[]): void => {\n const { application } = this.props;\n observableFrom(application.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const clusterFilter = AppListExtractor.clusterFilterForCredentialsAndRegion(credentials, regions);\n const clusters = AppListExtractor.getClusters([application], clusterFilter);\n\n const clusterField = this.props.component[this.state.clusterField];\n if (clusterField && !clusters.includes(clusterField)) {\n clusters.push(clusterField);\n }\n this.setState({ clusters });\n });\n };\n\n public onAccountUpdate = (option: Option<string>): void => {\n const credentials = option.value;\n this.setRegionList(credentials);\n this.setClusterList(credentials, []);\n this.props.onComponentUpdate &&\n this.props.onComponentUpdate({\n ...this.props.component,\n credentials,\n region: '',\n regions: [],\n [this.state.clusterField]: undefined,\n });\n };\n\n public onRegionsUpdate = (option: Option<string>): void => {\n const regions = option.map((o: Option) => o.value);\n this.setClusterList(this.props.component.credentials, regions);\n this.props.onComponentUpdate &&\n this.props.onComponentUpdate({\n ...this.props.component,\n regions,\n [this.state.clusterField]: undefined,\n });\n };\n\n public onRegionUpdate = (option: Option<string>): void => {\n const region = option.value;\n this.setClusterList(this.props.component.credentials, [region]);\n this.props.onComponentUpdate &&\n this.props.onComponentUpdate({\n ...this.props.component,\n region,\n [this.state.clusterField]: undefined,\n });\n };\n\n public onClusterUpdate = (option: Option<string>): void => {\n const clusterName = option.value;\n const filterByCluster = AppListExtractor.monikerClusterNameFilter(clusterName);\n const clusterMoniker = first(uniq(AppListExtractor.getMonikers([this.props.application], filterByCluster)));\n let moniker: IMoniker;\n\n if (isNil(clusterMoniker)) {\n // remove the moniker from the stage if one doesn't exist.\n moniker = undefined;\n } else {\n // clusters don't contain sequences, so null it out.\n clusterMoniker.sequence = null;\n moniker = clusterMoniker;\n }\n\n if (option.className) {\n const clusters = this.state.clusters;\n clusters.push(clusterName);\n this.setState(clusters);\n }\n\n this.props.onComponentUpdate &&\n this.props.onComponentUpdate({\n ...this.props.component,\n [this.state.clusterField]: clusterName,\n moniker,\n });\n };\n\n public render() {\n const { accounts, isSingleRegion, component } = this.props;\n const { availableRegions, clusters, clusterField, componentName } = this.state;\n return (\n <>\n <StageConfigField label=\"Account\">\n <Select\n name={componentName ? `${componentName}.credentials` : 'credentials'}\n options={\n accounts &&\n accounts.map((acc: IAccount) => ({\n label: acc.name,\n value: acc.name,\n }))\n }\n clearable={false}\n value={component.credentials}\n onChange={this.onAccountUpdate}\n />\n </StageConfigField>\n\n {!isSingleRegion && (\n <StageConfigField label=\"Region\">\n <Select\n name={componentName ? `${componentName}.regions` : 'regions'}\n options={\n availableRegions &&\n availableRegions.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n multi={true}\n clearable={false}\n value={component.regions}\n onChange={this.onRegionsUpdate}\n />\n </StageConfigField>\n )}\n {isSingleRegion && (\n <StageConfigField label=\"Region\">\n <Select\n name={componentName ? `${componentName}.region` : 'region'}\n options={\n availableRegions &&\n availableRegions.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n multi={false}\n clearable={false}\n value={component.region}\n onChange={this.onRegionUpdate}\n />\n </StageConfigField>\n )}\n <StageConfigField label=\"Cluster\" helpKey={'pipeline.config.findAmi.cluster'}>\n <Creatable\n name={componentName ? `${componentName}.${clusterField}` : `${clusterField}`}\n options={\n clusters &&\n clusters.map((c: string) => ({\n label: c,\n value: c,\n }))\n }\n clearable={false}\n value={component[clusterField]}\n onChange={this.onClusterUpdate}\n />\n </StageConfigField>\n </>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport { get } from 'lodash';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IServerGroup, IServerGroupFilter } from '@spinnaker/core';\nimport { AppListExtractor, FormikFormField, ReactSelectInput } from '@spinnaker/core';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup';\n\nexport interface IFormikAccountRegionClusterSelectorProps {\n accounts: IAccount[];\n application: Application;\n cloudProvider: string;\n clusterField?: string;\n componentName?: string;\n credentialsField?: string;\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n}\n\nexport interface IFormikAccountRegionClusterSelectorState {\n availableRegions: string[];\n cloudProvider: string;\n clusterField: string;\n clusters: string[];\n componentName: string;\n credentialsField: string;\n}\n\nexport class FormikAccountRegionClusterSelector extends React.Component<\n IFormikAccountRegionClusterSelectorProps,\n IFormikAccountRegionClusterSelectorState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IFormikAccountRegionClusterSelectorProps) {\n super(props);\n const credentialsField = props.credentialsField || 'credentials';\n const clusterField = props.clusterField || 'cluster';\n this.state = {\n availableRegions: [],\n cloudProvider: props.cloudProvider,\n clusterField,\n clusters: [],\n componentName: props.componentName || '',\n credentialsField,\n };\n }\n\n public componentDidMount(): void {\n const { componentName, formik } = this.props;\n const { credentialsField } = this.state;\n const credentials = get(\n formik.values,\n componentName ? `${componentName}.${credentialsField}` : `${credentialsField}`,\n undefined,\n );\n const region = get(formik.values, componentName ? `${componentName}.region` : 'region', undefined);\n this.setRegionList(credentials);\n this.setClusterList(credentials, [region]);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private setRegionList = (credentials: string): void => {\n const { application } = this.props;\n const accountFilter: IServerGroupFilter = (serverGroup: IServerGroup) =>\n serverGroup ? serverGroup.account === credentials : true;\n observableFrom(application.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const availableRegions = AppListExtractor.getRegions([application], accountFilter);\n availableRegions.sort();\n this.setState({ availableRegions });\n });\n };\n\n private setClusterList = (credentials: string, regions: string[]): void => {\n const { application } = this.props;\n observableFrom(application.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const clusterFilter = AppListExtractor.clusterFilterForCredentialsAndRegion(credentials, regions);\n const clusters = AppListExtractor.getClusters([application], clusterFilter);\n this.setState({ clusters });\n });\n };\n\n public accountChanged = (credentials: string): void => {\n this.setRegionList(credentials);\n this.setClusterList(credentials, []);\n };\n\n public regionChanged = (region: string): void => {\n const { componentName, formik } = this.props;\n const { credentialsField } = this.state;\n const credentials = get(\n formik.values,\n componentName ? `${componentName}.${credentialsField}` : `${credentialsField}`,\n undefined,\n );\n this.setClusterList(credentials, [region]);\n };\n\n public render() {\n const { accounts } = this.props;\n const { credentialsField, availableRegions, clusters, clusterField, componentName } = this.state;\n return (\n <div className=\"col-md-9\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={componentName ? `${componentName}.${credentialsField}` : `${credentialsField}`}\n label=\"Account\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={accounts && accounts.map((acc: IAccount) => acc.name)}\n clearable={false}\n />\n )}\n onChange={this.accountChanged}\n required={true}\n />\n </div>\n\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={componentName ? `${componentName}.region` : 'region'}\n label=\"Region\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={availableRegions}\n clearable={false}\n />\n )}\n onChange={this.regionChanged}\n required={true}\n />\n </div>\n\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={componentName ? `${componentName}.${clusterField}` : `${clusterField}`}\n label=\"Cluster\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={clusters}\n clearable={false}\n />\n )}\n required={true}\n />\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, NgReact, StageConfigField, StageConstants } from '@spinnaker/core';\n\nimport { AccountRegionClusterSelector } from '../../widgets/accountRegionClusterSelector';\n\nexport interface ICloudFoundryAsgStageConfigState {\n accounts: IAccount[];\n}\n\nexport class CloudFoundryAsgStageConfig extends React.Component<IStageConfigProps, ICloudFoundryAsgStageConfigState> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n this.props.updateStageField({ cloudProvider: 'cloudfoundry' });\n this.state = { accounts: [] };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private targetUpdated = (target: string) => {\n this.props.updateStageField({ target });\n };\n\n private componentUpdated = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n regions: stage.regions,\n cluster: stage.cluster,\n });\n };\n\n public render() {\n const { application, pipeline, stage } = this.props;\n const { target } = stage;\n const { accounts } = this.state;\n const { TargetSelect } = NgReact;\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n onComponentUpdate={this.componentUpdated}\n component={stage}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n </div>\n );\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryLoadBalancersExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'credentials', undefined);\n const region = get(context, 'region', undefined);\n const loadBalancerNames = get(context, 'loadBalancerNames', undefined);\n const serverGroupName = get(context, 'serverGroupName', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Region</dt>\n <dd>\n {region}\n <br />\n </dd>\n <dt>Server Group Name</dt>\n <dd>\n {serverGroupName}\n <br />\n </dd>\n <dt>Load Balancers</dt>\n <dd>\n {loadBalancerNames.join(', ')}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={props.stage} message={props.stage.failureMessage} />\n <StageExecutionLogs stage={props.stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// TODO: refactor this to not use namespace\n// eslint-disable-next-line\nexport namespace CloudFoundryLoadBalancersExecutionDetails {\n export const title = 'cloudfoundryLoadBalancersConfig';\n}\n","import type { Formik } from 'formik';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IPipeline, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, NgReact, SpinFormik, StageConfigField, StageConstants } from '@spinnaker/core';\n\nimport { Routes } from '../../forms/serverGroup';\nimport { AccountRegionClusterSelector } from '../../widgets/accountRegionClusterSelector';\n\ninterface ICloudFoundryLoadBalancerStageConfigProps extends IStageConfigProps {\n pipeline: IPipeline;\n}\n\ninterface ICloudFoundryLoadBalancersValues {\n routes: string[];\n}\n\ninterface ICloudFoundryLoadBalancersStageConfigState {\n accounts: IAccount[];\n application: Application;\n initialValues: ICloudFoundryLoadBalancersValues;\n pipeline: IPipeline;\n}\n\nexport class CloudFoundryLoadBalancersStageConfig extends React.Component<\n ICloudFoundryLoadBalancerStageConfigProps,\n ICloudFoundryLoadBalancersStageConfigState\n> {\n private destroy$ = new Subject();\n private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancersValues>>();\n\n constructor(props: ICloudFoundryLoadBalancerStageConfigProps) {\n super(props);\n const { loadBalancerNames } = props.stage;\n const routes = loadBalancerNames && loadBalancerNames.length ? loadBalancerNames : [''];\n this.props.updateStageField({\n cloudProvider: 'cloudfoundry',\n loadBalancerNames: routes,\n });\n this.state = {\n accounts: [],\n application: props.application,\n initialValues: {\n routes,\n },\n pipeline: props.pipeline,\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private targetUpdated = (target: string) => {\n this.props.updateStageField({ target });\n };\n\n private componentUpdated = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n region: stage.region,\n cluster: stage.cluster,\n loadBalancerNames: stage.loadBalancerNames,\n });\n };\n\n public render() {\n const { stage } = this.props;\n const { accounts, application, initialValues, pipeline } = this.state;\n const { target } = stage;\n const { TargetSelect } = NgReact;\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n isSingleRegion={true}\n onComponentUpdate={this.componentUpdated}\n component={stage}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n <SpinFormik<ICloudFoundryLoadBalancersValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={null}\n render={() => {\n return (\n <Routes\n fieldName={'routes'}\n isRequired={true}\n singleRouteOnly={true}\n onChange={(routes: string[]) => {\n stage.loadBalancerNames = routes;\n this.componentUpdated(stage);\n }}\n />\n );\n }}\n />\n </div>\n );\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryServiceExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'service.account', undefined);\n const region = get(context, 'service.region', undefined);\n const serviceInstanceName = get(context, 'service.instance.name', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Region</dt>\n <dd>\n {region}\n <br />\n </dd>\n <dt>Service Instance Name</dt>\n <dd>\n {serviceInstanceName}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n <StageExecutionLogs stage={stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace CloudFoundryServiceExecutionDetails {\n export const title = 'cloudfoundryServiceConfig';\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryServiceKeyExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'service.account', undefined);\n const region = get(context, 'service.region', undefined);\n const serviceInstanceName = get(context, 'serviceInstanceName', undefined);\n const serviceKeyName = get(context, 'serviceKeyName', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Region</dt>\n <dd>\n {region}\n <br />\n </dd>\n <dt>Service Instance Name</dt>\n <dd>\n {serviceInstanceName}\n <br />\n </dd>\n <dt>Service Key Name</dt>\n <dd>\n {serviceKeyName}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={props.stage} message={props.stage.failureMessage} />\n <StageExecutionLogs stage={props.stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace CloudFoundryServiceKeyExecutionDetails {\n export const title = 'cloudfoundryServiceKeyConfig';\n}\n","import type { IDeferred } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\nimport type { Formik } from 'formik';\nimport { Form } from 'formik';\nimport { $q } from 'ngimport';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type {\n Application,\n IAccount,\n ILoadBalancerModalProps,\n IModalComponentProps,\n IServerGroup,\n} from '@spinnaker/core';\nimport {\n AccountService,\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../domain';\nimport { AccountRegionClusterSelector, Routes } from '../../presentation';\n\nexport interface ICreateCloudFoundryMapLoadBalancerState {\n accounts: IAccount[];\n regions: string[];\n application: Application;\n selectedValues: ICloudFoundryLoadBalancerModalValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryLoadBalancerModalProps extends IModalComponentProps {\n application: Application;\n}\n\nexport interface ICloudFoundryLoadBalancerModalValues {\n credentials: string;\n region: string;\n cluster: string;\n routes: string[];\n}\n\nexport class CloudFoundryMapLoadBalancerModal extends React.Component<\n ICloudFoundryLoadBalancerModalProps,\n ICreateCloudFoundryMapLoadBalancerState\n> {\n public static defaultProps: Partial<ICloudFoundryLoadBalancerModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private destroy$ = new Subject();\n private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancerModalValues>>();\n private $uibModalInstanceEmulation: IModalServiceInstance & { deferred?: IDeferred<any> };\n\n constructor(props: ICloudFoundryLoadBalancerModalProps) {\n super(props);\n\n const deferred = $q.defer();\n const promise = deferred.promise;\n this.$uibModalInstanceEmulation = {\n result: promise,\n close: () => this.props.dismissModal(),\n dismiss: () => this.props.dismissModal(),\n } as IModalServiceInstance;\n Object.assign(this.$uibModalInstanceEmulation, { deferred });\n this.state = {\n accounts: [],\n regions: [],\n application: props.application,\n selectedValues: {\n credentials: '',\n region: '',\n cluster: '',\n routes: [''],\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Mapping a route to your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));\n }\n\n public static show(props: ILoadBalancerModalProps): Promise<void> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(\n CloudFoundryMapLoadBalancerModal,\n {\n application: props.app,\n // className: 'create-pipeline-modal-overflow-visible',\n },\n modalProps,\n );\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private submit = (values: ICloudFoundryLoadBalancerModalValues): void => {\n const { routes } = values;\n const serverGroup: ICloudFoundryServerGroup = this.props.application.serverGroups?.data?.find(\n (sg: ICloudFoundryServerGroup) =>\n sg.cluster === this.state.selectedValues.cluster &&\n sg.account === this.state.selectedValues.credentials &&\n sg.region === this.state.selectedValues.region,\n );\n\n const coreServerGroup: IServerGroup = {\n account: serverGroup.account,\n cloudProvider: serverGroup.cloudProvider,\n cluster: serverGroup.cluster,\n instanceCounts: serverGroup.instanceCounts,\n instances: serverGroup.instances,\n loadBalancers: routes,\n name: serverGroup.name,\n region: serverGroup.region,\n type: serverGroup.type,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.mapLoadBalancers(coreServerGroup, this.props.application, {\n serverGroupName: serverGroup.name,\n });\n });\n };\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private accountRegionClusterUpdated = (values: any) => {\n this.setState({\n selectedValues: {\n cluster: values.cluster,\n credentials: values.credentials,\n region: values.region,\n routes: [''],\n },\n });\n };\n\n public render() {\n const { accounts, application, selectedValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryLoadBalancerModalValues>\n ref={this.formikRef}\n initialValues={selectedValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Map route</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n isSingleRegion={true}\n onComponentUpdate={this.accountRegionClusterUpdated}\n component={selectedValues}\n />\n <Routes fieldName=\"routes\" isRequired={true} singleRouteOnly={true} />\n </Form>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={() => this.submit(formik.values)}\n disabled={!formik.isValid}\n >\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20width%3D%22300px%22%20height%3D%22300px%22%20viewBox%3D%220%200%20300%20300%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%20%20%20%20%20%20%20%20%3Ctitle%3Ecf_logo%3C%2Ftitle%3E%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%20%20%20%20%3Cdefs%3E%3C%2Fdefs%3E%20%20%20%20%3Cg%20id%3D%22cf_logo%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M178.263372%2C122.718681%20C186.913513%2C115.731062%20192.264847%2C105.825834%20192.16919%2C94.8631089%20C191.983342%2C73.9653286%20172.094852%2C57.1484045%20147.743272%2C57.1484045%20C123.391692%2C57.1484045%20103.497736%2C73.9653286%20103.317354%2C94.8631089%20C103.218964%2C105.825834%20108.570299%2C115.728351%20117.220439%2C122.71597%20C127.925842%2C131.365758%20136.693504%2C148.855142%20137.210052%2C167.952465%20C137.781262%2C189.145802%20136.321807%2C213.674325%20135.425363%2C226.155508%20C123.984767%2C227.766159%20115.944099%2C231.559592%20115.944099%2C235.982102%20C115.944099%2C241.866127%20130.180618%2C248.650381%20147.743272%2C248.650381%20C165.303194%2C248.650381%20179.539712%2C241.866127%20179.539712%2C235.982102%20C179.539712%2C231.559592%20171.501778%2C227.766159%20160.058448%2C226.155508%20C159.162004%2C213.674325%20157.702549%2C189.145802%20158.273759%2C167.952465%20C158.790308%2C148.855142%20167.557969%2C131.365758%20178.263372%2C122.718681%22%20id%3D%22Fill-1%22%20fill%3D%22%231B1A19%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M234.330842%2C245.57087%20C235.853157%2C244.936371%20237.629647%2C244.423892%20239.594718%2C244.046988%20C241.423137%2C243.645682%20243.462001%2C243.390798%20245.68398%2C243.317586%20C245.68398%2C243.317586%20245.58559%2C242.63428%20245.448937%2C241.62559%20C245.386076%2C240.625035%20244.910523%2C239.299095%20244.454102%2C237.984002%20C244.224525%2C237.335946%20243.989482%2C236.693313%20243.779036%2C236.094064%20C243.511196%2C235.500238%20243.16683%2C234.952509%20242.920854%2C234.477991%20C242.404306%2C233.550647%20242.05994%2C232.929706%20242.05994%2C232.929706%20C239.865291%2C232.577206%20237.790898%2C232.089131%20235.779364%2C231.516997%20C233.729568%2C230.944864%20231.802759%2C230.288673%20230.108261%2C229.580963%20C226.894181%2C228.179101%20223.874147%2C226.609124%20222.278039%2C224.857474%20C220.351231%2C223.189881%20219.995933%2C221.519577%20220.058793%2C220.011965%20C220.168116%2C219.269005%20220.512482%2C218.550449%20221.102823%2C217.880701%20C221.641236%2C217.221798%20222.354565%2C216.627973%20223.382196%2C216.115493%20C223.382196%2C216.115493%20222.60874%2C215.689783%20221.479985%2C215.057995%20C220.903309%2C214.751592%20220.280171%2C214.388247%20219.542245%2C214.008632%20C218.768788%2C213.642576%20217.957069%2C213.254826%20217.148083%2C212.875212%20C215.551975%2C212.121406%20213.955866%2C211.364888%20212.619399%2C210.868678%20C211.343059%2C210.356198%20210.498543%2C210.014545%20210.498543%2C210.014545%20C208.948897%2C210.220622%20207.270798%2C210.331794%20205.562634%2C210.356198%20C203.794343%2C210.391448%20201.990522%2C210.342641%20200.23863%2C210.212487%20C196.789506%2C209.91693%20193.280255%2C209.442412%20190.246556%2C208.553029%20C188.675046%2C208.151722%20187.338578%2C207.677204%20186.171561%2C207.153878%20C185.004544%2C206.641399%20183.96598%2C206.131631%20183.129663%2C205.559497%20C181.533555%2C204.401673%20180.443064%2C203.233003%20180.451263%2C202.053486%20C180.451263%2C202.053486%20179.483759%2C201.893506%20178.037969%2C201.649468%20C176.540252%2C201.418987%20173.348036%2C200.993277%20171.322837%2C200.724835%20C171.287307%2C201.063777%20171.065929%2C201.383738%20170.992136%2C201.942313%20L170.475588%2C204.401673%20C169.420626%2C209.320393%20172.293074%2C214.312324%20177.16339%2C215.714186%20C189.095937%2C219.157832%20198.112308%2C224.83307%20200.716916%2C231.796285%20C205.980792%2C245.885407%20183.86759%2C259.657281%20150.239999%2C259.657281%20C116.598742%2C259.657281%2094.4828068%2C245.885407%2099.7357514%2C231.796285%20C102.277499%2C225.003896%20110.941304%2C219.439832%20122.442028%2C215.96907%20C127.533722%2C214.434343%20130.553755%2C209.236335%20129.460531%2C204.073578%20L128.749935%2C200.724835%20C127.410734%2C200.882104%20125.852889%2C201.077334%20124.256781%2C201.272565%20C122.258913%2C201.492199%20120.353969%2C201.84741%20118.894514%2C202.07789%20C117.435059%2C202.305659%20116.45389%2C202.479197%20116.45389%2C202.479197%20C116.55228%2C203.623463%20115.729629%2C204.911441%20114.158118%2C206.023169%20C113.335467%2C206.581745%20112.42809%2C207.164725%20111.310268%2C207.690762%20C110.192446%2C208.224934%20108.817715%2C208.675048%20107.382858%2C209.149566%20C105.896073%2C209.613238%20104.24257%2C209.954891%20102.583602%2C210.245025%20C100.951964%2C210.562275%2099.2082705%2C210.792755%2097.4181151%2C210.939178%20C93.8460034%2C211.221177%2090.2629595%2C211.294388%2087.0106161%2C210.893082%20C87.0106161%2C210.893082%2086.7892381%2C210.977139%2086.4202748%2C211.123562%20C86.0649768%2C211.280831%2085.4855677%2C211.486907%2084.9116247%2C211.768907%20C83.7200098%2C212.330194%2082.1129695%2C213.094846%2080.4922639%2C213.86221%20C78.8961559%2C214.653977%2077.4749638%2C215.50811%2076.3216118%2C216.139897%20C75.7422027%2C216.454435%2075.2639169%2C216.725588%2074.9332164%2C216.907261%20C74.6271135%2C217.113337%2074.4549306%2C217.221798%2074.4549306%2C217.221798%20C76.7015073%2C218.257604%2077.9532496%2C219.659466%2078.1964921%2C221.145386%20C78.7622359%2C222.715363%2077.9887794%2C224.344994%2076.5293244%2C226.123759%20C75.6848084%2C227.0267%2074.5423886%2C227.878121%2073.3753712%2C228.705138%20C72.1372943%2C229.543002%2070.5876483%2C230.334769%2068.8576202%2C231.091287%20C65.6189421%2C232.612456%2061.4209593%2C233.951953%2056.9168736%2C234.757278%20C56.9168736%2C234.757278%2056.5260458%2C235.391777%2056.228142%2C236.338102%20C55.8865093%2C237.303407%2055.4328211%2C238.604943%2054.9654675%2C239.933594%20C54.7686871%2C241.245976%2054.585572%2C242.59903%2054.4379866%2C243.634836%20C54.2439392%2C244.678776%2054.3395964%2C245.35937%2054.3395964%2C245.35937%20C58.9912674%2C245.410889%2063.1291229%2C246.189099%2066.2202157%2C247.420135%20C69.8169249%2C248.602363%2071.9897089%2C250.364859%2073.6705419%2C252.520527%20C74.9960768%2C254.847022%2075.5235577%2C257.281978%2074.3428751%2C260.093837%20C73.5202235%2C262.835197%2071.2627145%2C265.891094%2067.5840135%2C268.664991%20C67.5840135%2C268.664991%2067.7917261%2C268.849375%2068.1470242%2C269.153067%20C68.5515173%2C269.445913%2069.1418586%2C269.860777%2069.8524547%2C270.359699%20C71.3146427%2C271.357543%2073.1539932%2C272.770251%2075.315845%2C274.047383%20C77.5979516%2C275.291976%2079.9155879%2C276.544704%2081.6729466%2C277.507298%20C82.5420602%2C277.995374%2083.4275722%2C278.299066%2083.9796507%2C278.55395%20C84.5563267%2C278.808834%2084.8870272%2C278.941699%2084.8870272%2C278.941699%20C90.0771113%2C276.739935%2095.6498242%2C275.606514%20101.222537%2C275.023535%20C104.007527%2C274.727978%20106.743322%2C274.657478%20109.358862%2C274.828304%20C112.020864%2C274.96117%20114.734794%2C275.169958%20117.273808%2C275.763783%20C119.790958%2C276.422686%20122.245248%2C277.043626%20124.393434%2C277.995374%20C126.57715%2C278.930853%20128.517624%2C280.159177%20130.354242%2C281.341405%20C134.024744%2C283.825169%20136.847996%2C287.333892%20138.064209%2C291.021576%20C138.064209%2C291.021576%20139.952755%2C291.094787%20142.78694%2C291.20596%20C145.63479%2C291.27646%20149.428279%2C291.534056%20153.208104%2C291.338825%20C156.990661%2C291.216806%20160.778685%2C291.154441%20163.591005%2C290.972768%20C166.365063%2C290.704327%20168.218079%2C290.536212%20168.218079%2C290.536212%20C168.608907%2C288.611024%20169.469821%2C286.797009%20170.647771%2C285.151108%20C171.22718%2C284.348495%20171.888581%2C283.581131%20172.623774%2C282.865287%20C173.33437%2C282.122327%20174.083229%2C281.365809%20174.919546%2C280.698772%20C176.564849%2C279.359275%20178.43973%2C278.201451%20180.563318%2C277.274107%20C182.624047%2C276.314224%20184.835094%2C275.411284%20187.387774%2C274.841862%20C189.989648%2C274.329382%20192.430272%2C273.819614%20195.081342%2C273.63523%20C197.696882%2C273.426442%20200.544733%2C273.548461%20203.182137%2C273.659634%20C208.571735%2C273.949768%20214.546208%2C275.180804%20219.739025%2C277.127684%20C219.739025%2C277.127684%20220.889644%2C276.495897%20222.60874%2C275.544149%20C224.254043%2C274.57342%20226.623608%2C273.415596%20228.43836%2C271.978484%20C230.294109%2C270.614583%20232.245515%2C269.323894%20233.420732%2C268.252838%20C234.574084%2C267.181783%20235.325676%2C266.476785%20235.325676%2C266.476785%20C231.461127%2C263.833041%20229.236414%2C260.996778%20227.815222%2C258.195765%20C227.151088%2C256.845421%20226.967973%2C255.576424%20226.92971%2C254.323696%20C226.83132%2C253.057411%20227.101893%2C251.877894%20227.815222%2C250.779723%20C228.820989%2C248.539998%20231.398266%2C246.883251%20234.330842%2C245.57087%22%20id%3D%22Fill-2%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M118.447097%2C177.453406%20C118.447097%2C177.453406%20123.443134%2C158.68689%20101.750823%2C134.472906%20L101.026562%2C133.724523%20C91.8872032%2C122.97872%2086.8529035%2C109.342424%2086.8529035%2C95.3265125%20C86.8529035%2C62.4247782%20113.863752%2C35.6538187%20147.067719%2C35.6538187%20L148.464314%2C35.6538187%20C181.671013%2C35.6538187%20208.684595%2C62.4247782%20208.684595%2C95.3265125%20C208.684595%2C109.342424%20203.650296%2C122.97872%20194.519137%2C133.716388%20C194.412547%2C133.835696%20194.166572%2C134.087868%20193.794875%2C134.456637%20C174.534989%2C153.591921%20177.084936%2C177.453406%20177.084936%2C177.453406%20C212.256707%2C165.425049%20236.017946%2C132.612795%20236.220192%2C95.8091653%20C236.471634%2C49.7944603%20199.034155%2C10.5748554%20152.774352%2C8.37309111%20C152.194943%2C8.34597578%20151.623733%2C8.33241812%20151.052523%2C8.33241812%20C150.352859%2C8.33241812%20147.750985%2C8.38393723%20147.761917%2C8.38393723%20C147.688124%2C8.38393723%20145.181907%2C8.33241812%20144.484976%2C8.33241812%20C143.913766%2C8.33241812%20143.339823%2C8.34597578%20142.771346%2C8.37309111%20C96.5006113%2C10.5748554%2059.063132%2C49.7944603%2059.3173068%2C95.8091653%20C59.5140872%2C132.612795%2083.2780588%2C165.425049%20118.447097%2C177.453406%22%20id%3D%22Fill-3%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%20%20%20%20%3C%2Fg%3E%3C%2Fsvg%3E\"","import type {\n IPipeline,\n IStage,\n IStageOrTriggerTypeConfig,\n IStageOrTriggerValidator,\n IValidatorConfig,\n} from '@spinnaker/core';\nimport { NameUtils, PipelineConfigService, PipelineConfigValidator } from '@spinnaker/core';\n\nexport interface ITargetImpedanceValidationConfig extends IValidatorConfig {\n stageTypes?: string[];\n stageType?: string;\n message: string;\n}\n\nexport class CfTargetImpedanceValidator implements IStageOrTriggerValidator {\n public validate(\n pipeline: IPipeline,\n stage: IStage,\n validator: ITargetImpedanceValidationConfig,\n _config: IStageOrTriggerTypeConfig,\n ): string {\n const stagesToTest: IStage[] = PipelineConfigService.getAllUpstreamDependencies(pipeline, stage);\n const regions: string[] = stage.regions || [];\n let allRegionsFound = true;\n\n regions.forEach((region) => {\n let regionFound = false;\n stagesToTest.forEach((toTest) => {\n if (toTest.type === 'deploy' && toTest.clusters && toTest.clusters.length) {\n toTest.clusters.forEach((cluster: any) => {\n const clusterName: string = NameUtils.getClusterName(\n cluster.application,\n cluster.stack,\n cluster.freeFormDetails,\n );\n if (clusterName === stage.cluster && cluster.account === stage.credentials && cluster.region === region) {\n regionFound = true;\n }\n });\n } else if (\n toTest.type === 'cloneServerGroup' &&\n NameUtils.getClusterName(toTest.application, toTest.stack, toTest.freeFormDetails) === stage.cluster &&\n toTest.region === region\n ) {\n regionFound = true;\n }\n });\n if (!regionFound) {\n allRegionsFound = false;\n }\n });\n if (!allRegionsFound) {\n return validator.message;\n }\n return null;\n }\n}\n\nPipelineConfigValidator.registerValidator('cfTargetImpedance', new CfTargetImpedanceValidator());\n","import { get, has, upperFirst } from 'lodash';\n\nimport type { IPipeline, IStage, IStageOrTriggerValidator, ITrigger, IValidatorConfig } from '@spinnaker/core';\nimport { PipelineConfigValidator } from '@spinnaker/core';\n\nexport interface IInstanceFieldSizeValidationConfig extends IValidatorConfig {\n fieldName: string;\n fieldLabel?: string;\n min?: number;\n max?: number;\n message?: string;\n}\n\nexport class CfInstanceSizeFieldValidator implements IStageOrTriggerValidator {\n public validate(\n pipeline: IPipeline,\n stage: IStage | ITrigger,\n validationConfig: IInstanceFieldSizeValidationConfig,\n ): string {\n if (!this.passesValidation(stage, validationConfig)) {\n return this.validationMessage(validationConfig, pipeline);\n }\n return null;\n }\n\n protected passesValidation(stage: IStage | ITrigger, validationConfig: IInstanceFieldSizeValidationConfig): boolean {\n return this.fieldIsValid(stage, validationConfig);\n }\n\n protected validationMessage(validationConfig: IInstanceFieldSizeValidationConfig, pipeline: IPipeline): string {\n const fieldLabel: string = this.printableFieldLabel(validationConfig);\n const hasMin = has(validationConfig, 'min');\n const min: any = hasMin ? get(validationConfig, 'min') : 'NA';\n const hasMax = has(validationConfig, 'max');\n const max: any = hasMax ? get(validationConfig, 'max') : 'NA';\n let message = ``;\n if (hasMin) {\n if (hasMax) {\n message = `<strong>${fieldLabel}</strong> should be from ${min} to ${max} in ${pipeline.name}.`;\n } else {\n message = `<strong>${fieldLabel}</strong> should be at least ${min} in ${pipeline.name}.`;\n }\n } else if (hasMax) {\n message = `<strong>${fieldLabel}</strong> should be no more than ${max} in ${pipeline.name}.`;\n }\n return validationConfig.message || message;\n }\n\n protected printableFieldLabel(config: IInstanceFieldSizeValidationConfig): string {\n const fieldLabel: string = config.fieldLabel || config.fieldName;\n return upperFirst(fieldLabel);\n }\n\n protected fieldIsValid(stage: IStage | ITrigger, config: IInstanceFieldSizeValidationConfig): boolean {\n const fieldExists = has(stage, config.fieldName);\n const field: any = get(stage, config.fieldName);\n const hasMax: boolean = has(config, 'max');\n const hasMin: boolean = has(config, 'min');\n const max: number = get(config, 'max');\n const min: number = get(config, 'min');\n\n return fieldExists && (!hasMax || (hasMax && field <= max)) && (!hasMin || (hasMin && field >= min));\n }\n}\n\nPipelineConfigValidator.registerValidator('cfInstanceSizeField', new CfInstanceSizeFieldValidator());\n","import { get } from 'lodash';\n\nimport type { IPipeline, IStage, IStageOrTriggerValidator, ITrigger } from '@spinnaker/core';\nimport { PipelineConfigValidator } from '@spinnaker/core';\n\nexport class CfRequiredRoutesFieldValidator implements IStageOrTriggerValidator {\n public validate(_pipeline: IPipeline, stage: IStage | ITrigger, validationConfig: any): string {\n const routes: string[] = get(stage, validationConfig.fieldName);\n const routeErrors = routes\n .map((route: string) => {\n const regex = /^([-\\w]+)\\.([-.\\w]+)(:\\d+)?([-/\\w]+)?$/gm;\n route = route || '';\n if (regex.exec(route) === null) {\n const spelRegex = /^\\${.*}$/g;\n if (spelRegex.exec(route) === null) {\n return `\"${route}\" did not match the expected format \"host.some.domain[:9999][/some/path]\"`;\n }\n }\n return null;\n })\n .filter((err) => err != null);\n return (routeErrors && routeErrors.length && routeErrors[0]) || null;\n }\n}\n\nPipelineConfigValidator.registerValidator('cfRequiredRoutesField', new CfRequiredRoutesFieldValidator());\n","import React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport {\n ArtifactTypePatterns,\n excludeAllTypesExcept,\n StageArtifactSelectorDelegate,\n StageConfigField,\n TextInput,\n} from '@spinnaker/core';\n\nexport class BakeCloudFoundryManifestConfigForm extends React.Component<IFormikStageConfigInjectedProps> {\n private static readonly excludedArtifactTypes = excludeAllTypesExcept(\n ArtifactTypePatterns.BITBUCKET_FILE,\n ArtifactTypePatterns.CUSTOM_OBJECT,\n ArtifactTypePatterns.EMBEDDED_BASE64,\n ArtifactTypePatterns.GCS_OBJECT,\n ArtifactTypePatterns.GITHUB_FILE,\n ArtifactTypePatterns.GITLAB_FILE,\n ArtifactTypePatterns.S3_OBJECT,\n ArtifactTypePatterns.HTTP_FILE,\n ArtifactTypePatterns.ORACLE_OBJECT,\n );\n\n public componentDidMount() {\n const stage = this.props.formik.values;\n if (stage.inputArtifacts && stage.inputArtifacts.length === 0) {\n this.props.formik.setFieldValue('inputArtifacts', [\n {\n account: '',\n id: '',\n },\n ]);\n }\n }\n\n private onTemplateArtifactEdited = (artifact: IArtifact, index: number) => {\n this.props.formik.setFieldValue(`inputArtifacts[${index}].id`, null);\n this.props.formik.setFieldValue(`inputArtifacts[${index}].artifact`, artifact);\n this.props.formik.setFieldValue(`inputArtifacts[${index}].account`, artifact.artifactAccount);\n };\n\n private onTemplateArtifactSelected = (id: string, index: number) => {\n this.props.formik.setFieldValue(`inputArtifacts[${index}].id`, id);\n this.props.formik.setFieldValue(`inputArtifacts[${index}].artifact`, null);\n };\n\n private addInputArtifact = () => {\n const stage = this.props.formik.values;\n const newInputArtifacts = [\n ...stage.inputArtifacts,\n {\n account: '',\n id: '',\n },\n ];\n\n this.props.formik.setFieldValue('inputArtifacts', newInputArtifacts);\n };\n\n private removeInputArtifact = (index: number) => {\n const stage = this.props.formik.values;\n const newInputArtifacts = [...stage.inputArtifacts];\n newInputArtifacts.splice(index, 1);\n this.props.formik.setFieldValue('inputArtifacts', newInputArtifacts);\n };\n\n private getInputArtifact = (stage: any, index: number) => {\n if (!stage.inputArtifacts || stage.inputArtifacts.length === 0) {\n return {\n account: '',\n id: '',\n };\n } else {\n return stage.inputArtifacts[index];\n }\n };\n\n private outputNameChange = (outputName: string) => {\n const stage = this.props.formik.values;\n const expectedArtifacts = stage.expectedArtifacts;\n if (\n expectedArtifacts &&\n expectedArtifacts.length === 1 &&\n expectedArtifacts[0].matchArtifact &&\n expectedArtifacts[0].matchArtifact.type === 'embedded/base64'\n ) {\n this.props.formik.setFieldValue('expectedArtifacts', [\n {\n ...expectedArtifacts[0],\n matchArtifact: {\n ...expectedArtifacts[0].matchArtifact,\n name: outputName,\n },\n },\n ]);\n }\n };\n\n public render() {\n const stage = this.props.formik.values;\n\n return (\n <>\n <h4>Manifest Options</h4>\n <StageConfigField fieldColumns={3} label={'Name'} helpKey={'pipeline.config.bake.cf.manifest.name'}>\n <TextInput\n onChange={(e: React.ChangeEvent<any>) => {\n this.props.formik.setFieldValue('outputName', e.target.value);\n this.outputNameChange(e.target.value);\n }}\n value={stage.outputName}\n />\n </StageConfigField>\n <h4>Manifest Template</h4>\n <StageArtifactSelectorDelegate\n artifact={this.getInputArtifact(stage, 0).artifact}\n excludedArtifactTypePatterns={BakeCloudFoundryManifestConfigForm.excludedArtifactTypes}\n expectedArtifactId={this.getInputArtifact(stage, 0).id}\n label=\"Template Artifact\"\n onArtifactEdited={(artifact) => {\n this.onTemplateArtifactEdited(artifact, 0);\n }}\n helpKey={'pipeline.config.bake.cf.manifest.templateArtifact'}\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) => this.onTemplateArtifactSelected(artifact.id, 0)}\n pipeline={this.props.pipeline}\n stage={stage}\n />\n <h4>Manifest Variables</h4>\n {stage.inputArtifacts && stage.inputArtifacts.length > 1 && (\n <div className=\"row form-group\">\n {stage.inputArtifacts.slice(1).map((a: any, index: number) => {\n return (\n <div key={index}>\n <div className=\"col-md-offset-1 col-md-9\">\n <StageArtifactSelectorDelegate\n artifact={a.artifact}\n excludedArtifactTypePatterns={[]}\n expectedArtifactId={a.id}\n label=\"Variables Artifact\"\n onArtifactEdited={(artifact) => {\n this.onTemplateArtifactEdited(artifact, index + 1);\n }}\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) =>\n this.onTemplateArtifactSelected(artifact.id, index + 1)\n }\n helpKey={'pipeline.config.bake.cf.manifest.varsArtifact'}\n pipeline={this.props.pipeline}\n stage={stage}\n />\n </div>\n <div className=\"col-md-1\">\n <div className=\"form-control-static\">\n <button onClick={() => this.removeInputArtifact(index + 1)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove field</span>\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n <StageConfigField fieldColumns={8} label={''}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={() => this.addInputArtifact()}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add variables artifact\n </button>\n </StageConfigField>\n </>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { BakeCloudFoundryManifestConfigForm } from './BakeCloudFoundryManifestConfigForm';\n\nexport function BakeCloudFoundryManifestConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n inputArtifacts: [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n validate={validateBakeCloudFoundryManifestStage}\n render={(props) => <BakeCloudFoundryManifestConfigForm {...props} />}\n />\n );\n}\n\nexport function validateBakeCloudFoundryManifestStage(stage: IStage): FormikErrors<IStage> {\n const formValidator = new FormValidator(stage);\n\n formValidator\n .field('expectedArtifacts', 'Produced artifacts')\n .required()\n .withValidators((artifacts: IExpectedArtifact[]) => {\n if (validateProducedArtifacts(artifacts)) {\n return undefined;\n }\n return 'Exactly one expected artifact of type embedded/base64 must be configured in the Produces Artifacts section';\n });\n formValidator.field('outputName', 'Name').required();\n formValidator\n .field('inputArtifacts', 'Template and Variables Artifacts')\n .required()\n .withValidators((artifacts: IArtifact[]) => {\n if (validateInputArtifacts(artifacts)) {\n return undefined;\n }\n return 'There should be one manifest template and at least one variables artifact';\n });\n\n return formValidator.validateForm();\n}\n\nexport function validateProducedArtifacts(artifacts: IExpectedArtifact[]): boolean {\n return artifacts?.length === 1 && artifacts[0]?.matchArtifact?.type === 'embedded/base64';\n}\n\nexport function validateInputArtifacts(artifacts: IArtifact[]): boolean {\n return artifacts?.length >= 2;\n}\n","import React from 'react';\n\nimport type { IArtifact, IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport {\n decodeUnicodeBase64,\n ExecutionDetailsSection,\n ManifestYaml,\n Overridable,\n StageFailureMessage,\n} from '@spinnaker/core';\n\n@Overridable('bakeManifest.bakeManifestDetailsTab')\nexport class BakeCloudFoundryManifestDetailsTab extends React.Component<IExecutionDetailsSectionProps> {\n public static title = 'bakedManifest';\n\n public render() {\n const { current, name, stage } = this.props;\n const bakedArtifacts: IArtifact[] = (stage.context.artifacts || []).filter(\n (a: IArtifact) => a.type === 'embedded/base64',\n );\n return (\n <ExecutionDetailsSection name={name} current={current}>\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n {bakedArtifacts.map((artifact, i) => (\n <ManifestYaml\n key={i}\n linkName={bakedArtifacts.length > 1 ? `Baked Manifest ${i} YAML` : 'Baked Manifest YAML'}\n manifestText={decodeUnicodeBase64(artifact.reference)}\n modalTitle=\"Baked Manifest\"\n />\n ))}\n </ExecutionDetailsSection>\n );\n }\n}\n","import type { IArtifact, IStage } from '@spinnaker/core';\nimport {\n ArtifactReferenceService,\n ExecutionArtifactTab,\n ExecutionDetailsTasks,\n ExpectedArtifactService,\n Registry,\n} from '@spinnaker/core';\n\nimport {\n BakeCloudFoundryManifestConfig,\n validateBakeCloudFoundryManifestStage,\n} from './BakeCloudFoundryManifestConfig';\nimport { BakeCloudFoundryManifestDetailsTab } from './BakeCloudFoundryManifestDetailsTab';\n\nexport const BAKE_CF_MANIFEST_STAGE_KEY = 'bakeCloudFoundryManifest';\n\nRegistry.pipeline.registerStage({\n label: 'Bake CloudFoundry Manifest',\n description: 'Bake a CF manifest using external variables files.',\n key: BAKE_CF_MANIFEST_STAGE_KEY,\n component: BakeCloudFoundryManifestConfig,\n producesArtifacts: true,\n cloudProvider: 'cloudfoundry',\n executionDetailsSections: [BakeCloudFoundryManifestDetailsTab, ExecutionDetailsTasks, ExecutionArtifactTab],\n artifactExtractor: (fields: string[]) =>\n ExpectedArtifactService.accumulateArtifacts<IArtifact>(['inputArtifacts'])(fields).map((a: IArtifact) => a.id),\n artifactRemover: (stage: IStage, artifactId: string) => {\n ArtifactReferenceService.removeArtifactFromFields(['expectedArtifactId'])(stage, artifactId);\n const artifactDoesNotMatch = (artifact: IArtifact) => artifact.id !== artifactId;\n stage.expectedArtifacts = (stage.expectedArtifacts ?? []).filter(artifactDoesNotMatch);\n stage.inputArtifacts = (stage.inputArtifacts ?? []).filter(artifactDoesNotMatch);\n },\n validateFn: validateBakeCloudFoundryManifestStage,\n});\n","import type { Application, IPipeline, IStage } from '@spinnaker/core';\nimport type { ICloudFoundryApplication, ICloudFoundryEnvVar, ICloudFoundryServerGroup } from '../../domain';\n\nimport type {\n ICloudFoundryCreateServerGroupCommand,\n ICloudFoundryDeployConfiguration,\n} from './serverGroupConfigurationModel.cf';\n\nexport class CloudFoundryServerGroupCommandBuilder {\n private static envVarsFromObject(someObject: any): ICloudFoundryEnvVar[] {\n const envVars = [];\n for (const property in someObject) {\n if (someObject.hasOwnProperty(property)) {\n const envVar = { key: property, value: someObject[property] };\n envVars.push(envVar);\n }\n }\n return envVars;\n }\n\n private static getSubmitButtonLabel(mode: string) {\n switch (mode) {\n case 'createPipeline':\n return 'Add';\n case 'editPipeline':\n case 'editClonePipeline':\n return 'Done';\n case 'clone':\n return 'Clone';\n default:\n return 'Create';\n }\n }\n\n public static buildNewServerGroupCommand(app: Application, defaults: any): ICloudFoundryCreateServerGroupCommand {\n defaults = defaults || {};\n return {\n application: app.name,\n stack: '',\n freeFormDetails: '',\n region: '',\n strategy: '',\n credentials: '',\n viewState: {\n mode: defaults.mode || 'create',\n submitButtonLabel: CloudFoundryServerGroupCommandBuilder.getSubmitButtonLabel(defaults.mode || 'create'),\n },\n selectedProvider: 'cloudfoundry',\n startApplication: true,\n } as ICloudFoundryCreateServerGroupCommand;\n }\n\n public static buildServerGroupCommandFromExisting(\n app: Application,\n serverGroup: ICloudFoundryServerGroup,\n mode = 'clone',\n ): ICloudFoundryCreateServerGroupCommand {\n const command: ICloudFoundryCreateServerGroupCommand = this.buildNewServerGroupCommand(app, { mode });\n command.credentials = '';\n command.manifest = {\n direct: {\n memory: serverGroup.memory ? serverGroup.memory + 'M' : '1024M',\n diskQuota: serverGroup.diskQuota ? serverGroup.diskQuota + 'M' : '1024M',\n buildpacks:\n serverGroup.droplet && serverGroup.droplet.buildpacks\n ? serverGroup.droplet.buildpacks.map((item) => item.name)\n : [],\n instances: serverGroup.instances ? serverGroup.instances.length : 1,\n routes: serverGroup.loadBalancers || [],\n environment: CloudFoundryServerGroupCommandBuilder.envVarsFromObject(serverGroup.env),\n services: (serverGroup.serviceInstances || []).map((serviceInstance) => serviceInstance.name),\n healthCheckType: 'port',\n },\n };\n command.region = '';\n command.stack = serverGroup.stack;\n command.freeFormDetails = serverGroup.detail;\n command.source = {\n asgName: serverGroup.name,\n region: serverGroup.region,\n account: serverGroup.account,\n };\n return command;\n }\n\n public static buildNewServerGroupCommandForPipeline(\n stage: IStage,\n pipeline: IPipeline,\n ): ICloudFoundryCreateServerGroupCommand {\n const command: ICloudFoundryCreateServerGroupCommand = this.buildNewServerGroupCommand(\n { name: pipeline.application } as Application,\n { mode: 'editPipeline' },\n );\n command.viewState = {\n ...command.viewState,\n pipeline,\n requiresTemplateSelection: true,\n stage,\n };\n return command;\n }\n\n public static buildServerGroupCommandFromPipeline(\n application: ICloudFoundryApplication,\n originalCluster: ICloudFoundryDeployConfiguration,\n stage: IStage,\n pipeline: IPipeline,\n ): ICloudFoundryCreateServerGroupCommand {\n const command = this.buildNewServerGroupCommand(application, { mode: 'editPipeline' });\n command.credentials = originalCluster.account;\n command.applicationArtifact = originalCluster.applicationArtifact;\n command.delayBeforeDisableSec = originalCluster.delayBeforeDisableSec;\n command.manifest = originalCluster.manifest;\n command.maxRemainingAsgs = originalCluster.maxRemainingAsgs;\n command.region = originalCluster.region;\n command.rollback = originalCluster.rollback;\n command.strategy = originalCluster.strategy;\n command.startApplication = originalCluster.startApplication;\n command.targetPercentages = originalCluster.targetPercentages;\n command.delayBeforeScaleDownSec = originalCluster.delayBeforeScaleDownSec;\n if (originalCluster.stack) {\n command.stack = originalCluster.stack;\n }\n\n if (originalCluster.freeFormDetails) {\n command.freeFormDetails = originalCluster.freeFormDetails;\n }\n\n command.viewState = {\n ...command.viewState,\n pipeline,\n stage,\n };\n\n return command;\n }\n\n public static buildCloneServerGroupCommandFromPipeline(\n stage: IStage,\n pipeline: IPipeline,\n ): ICloudFoundryCreateServerGroupCommand {\n const command = this.buildNewServerGroupCommand({ name: pipeline.application } as Application, {\n mode: 'editClonePipeline',\n });\n command.credentials = stage.credentials;\n command.capacity = stage.capacity;\n command.account = stage.account;\n command.delayBeforeDisableSec = stage.delayBeforeDisableSec;\n command.freeFormDetails = stage.freeFormDetails || command.freeFormDetails;\n command.maxRemainingAsgs = stage.maxRemainingAsgs;\n command.region = stage.region;\n command.startApplication = stage.startApplication === undefined || stage.startApplication;\n command.stack = stage.stack || command.stack;\n command.strategy = stage.strategy;\n command.target = stage.target;\n command.targetCluster = stage.targetCluster;\n command.manifest = stage.manifest || command.manifest;\n command.source = stage.source;\n\n command.viewState = {\n ...command.viewState,\n pipeline,\n stage,\n };\n\n return command;\n }\n}\n","import type { IQService } from 'angular';\n\nimport type { Application, IPipeline, IStage } from '@spinnaker/core';\nimport type { ICloudFoundryApplication, ICloudFoundryServerGroup } from '../../domain';\n\nimport { CloudFoundryServerGroupCommandBuilder } from './serverGroupCommandBuilder.service.cf';\nimport type {\n ICloudFoundryCreateServerGroupCommand,\n ICloudFoundryDeployConfiguration,\n} from './serverGroupConfigurationModel.cf';\n\nexport class CloudFoundryServerGroupCommandBuilderShim {\n public static $inject = ['$q'];\n constructor(private $q: IQService) {}\n\n public buildNewServerGroupCommand(\n app: Application,\n defaults: any,\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(CloudFoundryServerGroupCommandBuilder.buildNewServerGroupCommand(app, defaults));\n }\n\n public buildServerGroupCommandFromExisting(\n app: Application,\n serverGroup: ICloudFoundryServerGroup,\n mode = 'clone',\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(\n CloudFoundryServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup, mode),\n );\n }\n\n public buildNewServerGroupCommandForPipeline(\n stage: IStage,\n pipeline: IPipeline,\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(CloudFoundryServerGroupCommandBuilder.buildNewServerGroupCommandForPipeline(stage, pipeline));\n }\n\n public buildServerGroupCommandFromPipeline(\n application: ICloudFoundryApplication,\n originalCluster: ICloudFoundryDeployConfiguration,\n stage: IStage,\n pipeline: IPipeline,\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(\n CloudFoundryServerGroupCommandBuilder.buildServerGroupCommandFromPipeline(\n application,\n originalCluster,\n stage,\n pipeline,\n ),\n );\n }\n\n public buildCloneServerGroupCommandFromPipeline(\n stage: IStage,\n pipeline: IPipeline,\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(\n CloudFoundryServerGroupCommandBuilder.buildCloneServerGroupCommandFromPipeline(stage, pipeline),\n );\n }\n}\n","import React from 'react';\n\nimport type { Application, ITemplateSelectionText } from '@spinnaker/core';\nimport { DeployInitializer } from '@spinnaker/core';\n\nimport type { ICloudFoundryCreateServerGroupCommand } from '../serverGroupConfigurationModel.cf';\n\nexport interface IServerGroupTemplateSelectionProps {\n app: Application;\n command: ICloudFoundryCreateServerGroupCommand;\n onDismiss: () => void;\n onTemplateSelected: () => void;\n}\n\nexport interface IServerGroupTemplateSelectionState {\n templateSelectionText: ITemplateSelectionText;\n}\n\nexport class ServerGroupTemplateSelection extends React.Component<\n IServerGroupTemplateSelectionProps,\n IServerGroupTemplateSelectionState\n> {\n constructor(props: IServerGroupTemplateSelectionProps) {\n super(props);\n this.state = {\n templateSelectionText: {\n copied: [\n 'account, region, cluster name (stack, details)',\n 'routes',\n 'service instances',\n 'instance settings',\n 'environment variables',\n ],\n notCopied: ['artifacts'],\n additionalCopyText: '',\n },\n };\n }\n\n public render() {\n const { app, command, onDismiss, onTemplateSelected } = this.props;\n const { templateSelectionText } = this.state;\n\n return (\n <DeployInitializer\n cloudProvider=\"cloudfoundry\"\n application={app}\n command={command}\n onDismiss={onDismiss}\n onTemplateSelected={onTemplateSelected}\n templateSelectionText={templateSelectionText}\n />\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IPipeline, IStage, IWizardPageComponent } from '@spinnaker/core';\nimport { ArtifactTypePatterns, StageArtifactSelector } from '@spinnaker/core';\nimport { FormikConfigField } from '../../../../../presentation';\n\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroupConfigurationModel.cf';\n\nexport interface ICloudFoundryCreateServerGroupArtifactSettingsProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n stage: IStage;\n pipeline: IPipeline;\n}\n\nexport class CloudFoundryServerGroupArtifactSettings\n extends React.Component<ICloudFoundryCreateServerGroupArtifactSettingsProps>\n implements IWizardPageComponent<ICloudFoundryCreateServerGroupCommand> {\n public static get LABEL() {\n return 'Artifact';\n }\n\n private excludedArtifactTypePatterns = [\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ];\n\n private onExpectedArtifactSelected = (expectedArtifact: IExpectedArtifact): void => {\n this.props.formik.setFieldValue('applicationArtifact', { artifactId: expectedArtifact.id });\n };\n\n private onArtifactChanged = (artifact: IArtifact): void => {\n this.props.formik.setFieldValue('applicationArtifact', { artifact: artifact });\n };\n\n public validate(_values: ICloudFoundryCreateServerGroupCommand) {\n const { applicationArtifact } = this.props.formik.values;\n const errors = {} as any;\n if (\n !applicationArtifact ||\n !(\n (applicationArtifact.artifact && applicationArtifact.artifact.type && applicationArtifact.artifact.reference) ||\n applicationArtifact.artifactId\n )\n ) {\n errors.applicationArtifact = 'Application artifact information is required';\n }\n\n return errors;\n }\n\n public render() {\n const { formik, stage, pipeline } = this.props;\n const applicationArtifact = formik.values.applicationArtifact;\n return (\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"StandardFieldLayout flex-container-h margin-between-lg\">\n <div className=\"flex-grow\">\n <StageArtifactSelector\n pipeline={pipeline}\n stage={stage}\n expectedArtifactId={applicationArtifact && applicationArtifact.artifactId}\n artifact={applicationArtifact && applicationArtifact.artifact}\n onExpectedArtifactSelected={this.onExpectedArtifactSelected}\n onArtifactEdited={this.onArtifactChanged}\n excludedArtifactTypePatterns={this.excludedArtifactTypePatterns}\n renderLabel={(field: React.ReactNode) => {\n return <FormikConfigField label={'Artifact'}>{field}</FormikConfigField>;\n }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type {\n ICloudFoundryCreateServerGroupCommand,\n ICloudFoundrySource,\n} from '../../../serverGroupConfigurationModel.cf';\n\nexport interface ICloudFoundryCloneServerGroupProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n source: ICloudFoundrySource;\n}\n\nexport class CloudFoundryServerGroupConstantArtifactSettings extends React.Component<\n ICloudFoundryCloneServerGroupProps\n> {\n constructor(props: ICloudFoundryCloneServerGroupProps) {\n super(props);\n const { source } = props;\n this.props.formik.setFieldValue('source', source);\n }\n\n public render(): JSX.Element {\n const { source } = this.props;\n\n return (\n <div>\n <div className=\"form-group row\">\n <label className=\"col-md-3 col-form-label sm-label-right\">Account</label>\n <div className=\"col-md-7\">\n <input className=\"form-control\" type=\"text\" id=\"cluster\" value={source.account} readOnly={true} />\n </div>\n </div>\n <div className=\"form-group row\">\n <label className=\"col-md-3 col-form-label sm-label-right\">Region</label>\n <div className=\"col-md-7\">\n <input className=\"form-control\" type=\"text\" id=\"cluster\" value={source.region} readOnly={true} />\n </div>\n </div>\n <div className=\"form-group row\">\n <label className=\"col-md-3 col-form-label sm-label-right\">Server Group</label>\n <div className=\"col-md-7\">\n <input className=\"form-control\" type=\"text\" id=\"cluster\" value={source.asgName} readOnly={true} />\n </div>\n </div>\n </div>\n );\n }\n}\n","import { set } from 'lodash';\nimport React from 'react';\n\nimport type { IDeploymentStrategyAdditionalFieldsProps, IServerGroupCommand } from '@spinnaker/core';\nimport { HelpField } from '@spinnaker/core';\n\nexport interface IRollingRedBlackCommand extends IServerGroupCommand {\n targetPercentages: number[];\n delayBeforeDisableSec: number;\n delayBeforeScaleDownSec: number;\n maxRemainingAsgs: number;\n rollback: {\n onFailure: boolean;\n };\n scaleDown: boolean;\n}\n\nexport interface IRollingRedBlackStrategyAdditionalFieldsProps extends IDeploymentStrategyAdditionalFieldsProps {\n command: IRollingRedBlackCommand;\n}\n\nexport class AdditionalFields extends React.Component<IRollingRedBlackStrategyAdditionalFieldsProps> {\n private handlePercentChange = (key: string, value: any, index: number) => {\n const percentages = this.props.command.targetPercentages;\n percentages[index] = value;\n set(this.props.command, key, percentages);\n this.forceUpdate();\n };\n\n private onDelete = (index: number) => {\n const percentages = this.props.command.targetPercentages;\n percentages.splice(index, 1);\n set(this.props.command, 'targetPercentages', percentages);\n this.forceUpdate();\n };\n\n private addPercent = () => {\n const percentages = this.props.command.targetPercentages;\n percentages.push(100);\n set(this.props.command, 'targetPercentages', percentages);\n this.forceUpdate();\n };\n\n private handleChange = (key: string, value: any) => {\n set(this.props.command, key, value);\n this.forceUpdate();\n };\n\n public render() {\n const { command } = this.props;\n return (\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <div className=\"col-md-12 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n checked={command.rollback.onFailure}\n onChange={(e) => this.handleChange('rollback.onFailure', e.target.checked)}\n />\n Rollback to previous server group if deployment fails <HelpField id=\"strategy.rollingRedBlack.rollback\" />\n </label>\n </div>\n <div className=\"col-md-12 form-inline sp-margin-m-bottom sp-margin-m-top\">\n <label>\n Wait Before Scale Down \n <HelpField content=\"Time to wait before scaling down source server group\" />\n </label>\n <div>\n <input\n className=\"form-control input-sm\"\n style={{ width: '60px' }}\n min=\"0\"\n type=\"number\"\n value={command.delayBeforeDisableSec}\n onChange={(e) => this.handleChange('delayBeforeDisableSec', e.target.value)}\n placeholder=\"0\"\n />\n seconds\n </div>\n </div>\n <div className=\"col-md-12 form-inline sp-margin-m-bottom\">\n <label>\n Maximum number of server groups to leave \n <HelpField id=\"strategy.redblack.maxRemainingAsgs\" />\n </label>\n <div>\n <input\n className=\"form-control input-sm\"\n style={{ width: '60px' }}\n min=\"2\"\n type=\"number\"\n value={command.maxRemainingAsgs}\n onChange={(e) => this.handleChange('maxRemainingAsgs', e.target.value)}\n />\n server groups\n </div>\n </div>\n <div className=\"col-md-12 form-inline sp-margin-m-bottom\">\n <label>\n Wait Before Cluster Scale Down \n <HelpField content=\"Time to wait before scaling down the cluster after deployment\" />\n </label>\n <div>\n <input\n className=\"form-control input-sm\"\n style={{ width: '60px' }}\n min=\"0\"\n type=\"number\"\n value={command.delayBeforeScaleDownSec}\n onChange={(e) => this.handleChange('delayBeforeScaleDownSec', e.target.value)}\n placeholder=\"0\"\n />\n seconds\n </div>\n </div>\n <label>\n Scale by percentages \n <HelpField content=\"Steps to get to full capacity in percent\" />\n </label>\n <table className=\"table table-condensed packed metadata\">\n <tbody>\n {command.targetPercentages.map((percentage: number, index: number) => {\n return (\n <tr key={index}>\n <td>\n <div className=\"sp-margin-m-bottom\">\n <input\n className=\"form-control\"\n min=\"0\"\n type=\"number\"\n value={percentage}\n onChange={(e) => this.handlePercentChange('targetPercentages', e.target.value, index)}\n placeholder=\"100\"\n />\n </div>\n </td>\n <td>\n <a className=\"btn btn-link sm-label\" onClick={() => this.onDelete(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n );\n })}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={2}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => this.addPercent()}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add percentage\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n );\n }\n}\n","import { defaultsDeep, unset } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport type {\n IDeploymentStrategy,\n IDeploymentStrategyAdditionalFieldsProps,\n IServerGroupCommand,\n} from '@spinnaker/core';\nimport { CoreRedBlackAdditionalFields, HelpField, Markdown } from '@spinnaker/core';\n\nimport type { IRedBlackCommand } from './strategies/redblack/redblack.strategy';\nimport type { IRollingRedBlackCommand } from './strategies/rollingredblack/AdditionalFields';\nimport { AdditionalFields as AdditionalRollingRedBlackFields } from './strategies/rollingredblack/AdditionalFields';\n\nexport interface ICloudFoundryDeploymentStrategySelectorProps {\n command: IServerGroupCommand;\n onFieldChange: (key: string, value: any) => void;\n onStrategyChange: (command: IServerGroupCommand, strategy: IDeploymentStrategy) => void;\n}\n\nexport interface ICloudFoundryDeploymentStrategySelectorState {\n strategies: IDeploymentStrategy[];\n currentStrategy: string;\n AdditionalFieldsComponent: React.ComponentType<IDeploymentStrategyAdditionalFieldsProps>;\n}\n\nexport class CloudFoundryDeploymentStrategySelector extends React.Component<\n ICloudFoundryDeploymentStrategySelectorProps,\n ICloudFoundryDeploymentStrategySelectorState\n> {\n public state: ICloudFoundryDeploymentStrategySelectorState = {\n strategies: [\n {\n label: 'None',\n description: 'Creates the next server group with no impact on existing server groups',\n key: '',\n },\n {\n label: 'Highlander',\n description:\n 'Destroys <i>all</i> previous server groups in the cluster as soon as new server group passes health checks',\n key: 'highlander',\n },\n {\n label: 'Red/Black',\n description:\n 'Disables <i>all</i> previous server groups in the cluster as soon as new server group passes health checks',\n key: 'redblack',\n additionalFields: ['maxRemainingAsgs'],\n AdditionalFieldsComponent: CoreRedBlackAdditionalFields,\n initializationMethod: (command: IRedBlackCommand) => {\n defaultsDeep(command, {\n rollback: {\n onFailure: false,\n },\n maxRemainingAsgs: 2,\n delayBeforeDisableSec: 0,\n delayBeforeScaleDownSec: 0,\n scaleDown: false,\n });\n },\n },\n {\n label: 'Rolling Red/Black',\n description:\n 'Gradually replaces <i>all</i> previous server group instances in the cluster as soon as new server group instances pass health checks',\n key: 'cfrollingredblack',\n additionalFields: ['targetPercentages'],\n AdditionalFieldsComponent: AdditionalRollingRedBlackFields,\n initializationMethod: (command: IRollingRedBlackCommand) => {\n defaultsDeep(command, {\n rollback: {\n onFailure: false,\n },\n targetPercentages: command.targetPercentages ? command.targetPercentages : [50, 100], // defaultsDeep does not work with arrays\n delayBeforeDisableSec: 0,\n delayBeforeScaleDownSec: 0,\n maxRemainingAsgs: 2,\n scaleDown: false,\n });\n },\n },\n ],\n currentStrategy: null,\n AdditionalFieldsComponent: undefined,\n };\n\n public selectStrategy(strategy: string): void {\n const { command, onStrategyChange } = this.props;\n const oldStrategy = this.state.strategies.find((s) => s.key === this.state.currentStrategy);\n const newStrategy = this.state.strategies.find((s) => s.key === strategy);\n\n if (oldStrategy && oldStrategy.additionalFields) {\n oldStrategy.additionalFields.forEach((field) => {\n if (!newStrategy || !newStrategy.additionalFields || !newStrategy.additionalFields.includes(field)) {\n unset(command, field);\n }\n });\n }\n\n let AdditionalFieldsComponent;\n if (newStrategy) {\n AdditionalFieldsComponent = newStrategy.AdditionalFieldsComponent;\n if (newStrategy.initializationMethod) {\n newStrategy.initializationMethod(command);\n }\n }\n command.strategy = strategy;\n if (onStrategyChange && newStrategy) {\n onStrategyChange(command, newStrategy);\n }\n this.setState({ currentStrategy: strategy, AdditionalFieldsComponent });\n }\n\n public strategyChanged = (option: Option<IDeploymentStrategy>) => {\n this.selectStrategy(option.key);\n };\n\n public componentDidMount() {\n this.selectStrategy(this.props.command.strategy);\n }\n\n public render() {\n const { command, onFieldChange } = this.props;\n const { AdditionalFieldsComponent, currentStrategy, strategies } = this.state;\n const hasAdditionalFields = Boolean(AdditionalFieldsComponent);\n if (strategies && strategies.length) {\n return (\n <div>\n <div className=\"StandardFieldLayout flex-container-h baseline margin-between-lg\">\n <div className={`sm-label-right`} style={{ paddingLeft: '13px' }}>\n Strategy \n <HelpField id=\"core.serverGroup.strategy\" />\n </div>\n <div className=\"flex-grow\">\n <Select\n clearable={false}\n required={true}\n options={strategies}\n placeholder=\"None\"\n valueKey=\"key\"\n value={currentStrategy}\n optionRenderer={this.strategyOptionRenderer}\n valueRenderer={(o) => <>{o.label}</>}\n onChange={this.strategyChanged}\n />\n </div>\n </div>\n {hasAdditionalFields && (\n <div className=\"form-group col-md-9 col-md-offset-3\" style={{ marginTop: '5px', float: 'right' }}>\n <AdditionalFieldsComponent command={command} onChange={onFieldChange} />\n </div>\n )}\n </div>\n );\n }\n\n return null;\n }\n\n private strategyOptionRenderer = (option: IDeploymentStrategy) => {\n return (\n <div className=\"body-regular\">\n <strong>\n <Markdown tag=\"span\" message={option.label} />\n </strong>\n <div>\n <Markdown tag=\"span\" message={option.description} />\n </div>\n </div>\n );\n };\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { get } from 'lodash';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IWizardPageComponent } from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n HelpField,\n ReactSelectInput,\n TextInput,\n} from '@spinnaker/core';\nimport { CloudFoundryDeploymentStrategySelector } from '../../../../../deploymentStrategy/CloudFoundryDeploymentStrategySelector';\n\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroupConfigurationModel.cf';\n\nimport '../../../../../common/cloudFoundry.less';\n\nexport interface ICloudFoundryServerGroupBasicSettingsProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n}\n\nexport interface ICloudFoundryServerGroupLocationSettingsState {\n accounts: IAccount[];\n regions: IRegion[];\n}\n\nexport class CloudFoundryServerGroupBasicSettings\n extends React.Component<ICloudFoundryServerGroupBasicSettingsProps, ICloudFoundryServerGroupLocationSettingsState>\n implements IWizardPageComponent<ICloudFoundryCreateServerGroupCommand> {\n private destroy$ = new Subject();\n public state: ICloudFoundryServerGroupLocationSettingsState = {\n accounts: [],\n regions: [],\n };\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => {\n this.setState({ accounts });\n this.updateRegionList();\n });\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private accountChanged = (): void => {\n this.updateRegionList();\n this.props.formik.setFieldValue('region', '');\n };\n\n private updateRegionList = (): void => {\n const credentials = get(this.props.formik.values, 'credentials', undefined);\n if (credentials) {\n observableFrom(AccountService.getRegionsForAccount(credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regions) => this.setState({ regions }));\n }\n };\n\n private strategyChanged = (_values: ICloudFoundryCreateServerGroupCommand, strategy: any) => {\n this.props.formik.setFieldValue('strategy', strategy.key);\n };\n\n private onStrategyFieldChange = (key: string, value: any) => {\n this.props.formik.setFieldValue(key, value);\n };\n\n public render(): JSX.Element {\n const { formik } = this.props;\n const { accounts, regions } = this.state;\n const { values } = formik;\n return (\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"credentials\"\n label=\"Account\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={accounts && accounts.map((acc: IAccount) => acc.name)}\n clearable={false}\n />\n )}\n onChange={this.accountChanged}\n required={true}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"region\"\n label=\"Region\"\n input={(props) => (\n <ReactSelectInput\n {...props}\n stringOptions={regions && regions.map((region: IRegion) => region.name)}\n inputClassName={'cloudfoundry-react-select'}\n clearable={false}\n />\n )}\n required={true}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"stack\"\n label=\"Stack\"\n input={(props) => <TextInput {...props} />}\n help={<HelpField id=\"cf.serverGroup.stack\" />}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"freeFormDetails\"\n label=\"Detail\"\n input={(props) => <TextInput {...props} />}\n help={<HelpField id=\"cf.serverGroup.detail\" />}\n />\n </div>\n <div className=\"sp-margin-m-bottom cloud-foundry-checkbox\">\n <FormikFormField\n name=\"startApplication\"\n label=\"Start on creation\"\n input={(props) => <CheckboxInput {...props} />}\n help={<HelpField id=\"cf.serverGroup.startApplication\" />}\n />\n </div>\n {(values.viewState.mode === 'editPipeline' ||\n values.viewState.mode === 'createPipeline' ||\n values.viewState.mode === 'editClonePipeline') && (\n <CloudFoundryDeploymentStrategySelector\n onFieldChange={this.onStrategyFieldChange}\n onStrategyChange={this.strategyChanged}\n command={values}\n />\n )}\n </div>\n </div>\n );\n }\n\n public validate(values: ICloudFoundryCreateServerGroupCommand) {\n const errors = {} as FormikErrors<ICloudFoundryCreateServerGroupCommand>;\n\n if (values.stack && !values.stack.match(/^[a-zA-Z0-9]*$/)) {\n errors.stack = 'Stack can only contain letters and numbers.';\n }\n if (values.freeFormDetails && !values.freeFormDetails.match(/^[a-zA-Z0-9-]*$/)) {\n errors.freeFormDetails = 'Detail can only contain letters, numbers, and dashes.';\n }\n\n return errors;\n }\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IDeploymentStrategy, IWizardPageComponent } from '@spinnaker/core';\nimport { AccountService, FormikFormField, Markdown, ReactSelectInput, StageConstants } from '@spinnaker/core';\nimport { FormikAccountRegionClusterSelector } from '../../../../../presentation';\n\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroupConfigurationModel.cf';\n\nimport '../../../../../common/cloudFoundry.less';\n\nexport interface ICloudFoundryCloneSettingsProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n application: Application;\n}\n\nexport interface ICloudFoundryCloneSettingsState {\n accounts: IAccount[];\n}\n\nexport class CloudFoundryServerGroupCloneSettings\n extends React.Component<ICloudFoundryCloneSettingsProps, ICloudFoundryCloneSettingsState>\n implements IWizardPageComponent<ICloudFoundryCreateServerGroupCommand> {\n private destroy$ = new Subject();\n public state: ICloudFoundryCloneSettingsState = {\n accounts: [],\n };\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private strategyOptionRenderer = (option: IDeploymentStrategy) => {\n return (\n <div className=\"body-regular\">\n <strong>\n <Markdown tag=\"span\" message={option.label} />\n </strong>\n <div>\n <Markdown tag=\"span\" message={option.description} />\n </div>\n </div>\n );\n };\n\n public render(): JSX.Element {\n const { application, formik } = this.props;\n const { accounts } = this.state;\n return (\n <div className=\"form-group\">\n <FormikAccountRegionClusterSelector\n componentName={'source'}\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n clusterField={'clusterName'}\n credentialsField={'account'}\n formik={formik}\n />\n <div className=\"col-md-9\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={'target'}\n label=\"Target\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n options={StageConstants.TARGET_LIST.map((t) => {\n return {\n label: t.label,\n value: t.val,\n description: t.description,\n };\n })}\n optionRenderer={this.strategyOptionRenderer}\n clearable={false}\n />\n )}\n required={true}\n />\n </div>\n </div>\n </div>\n );\n }\n\n public validate(_values: ICloudFoundryCreateServerGroupCommand) {\n const errors = {} as FormikErrors<ICloudFoundryCreateServerGroupCommand>;\n\n return errors;\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IPipeline, IStage, IWizardPageComponent } from '@spinnaker/core';\nimport { ArtifactTypePatterns, RadioButtonInput, StageArtifactSelector } from '@spinnaker/core';\nimport type { ICloudFoundryEnvVar } from '../../../../../domain';\nimport {\n Buildpacks,\n EnvironmentVariables,\n FormikConfigField,\n HealthCheck,\n InstanceParameters,\n Routes,\n Services,\n} from '../../../../../presentation';\n\nimport type {\n ICloudFoundryCreateServerGroupCommand,\n ICloudFoundryManifest,\n} from '../../../serverGroupConfigurationModel.cf';\n\nexport interface ICloudFoundryServerGroupConfigurationSettingsProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n stage: IStage;\n pipeline: IPipeline;\n}\n\nexport class CloudFoundryServerGroupConfigurationSettings\n extends React.Component<ICloudFoundryServerGroupConfigurationSettingsProps>\n implements IWizardPageComponent<ICloudFoundryServerGroupConfigurationSettingsProps> {\n public static LABEL = 'Configuration';\n\n private defaultDirectManifest: ICloudFoundryManifest = {\n direct: {\n memory: '1024M',\n diskQuota: '1024M',\n instances: 1,\n buildpacks: [],\n healthCheckType: 'port',\n routes: [],\n environment: [],\n services: [],\n },\n };\n\n private excludedArtifactTypePatterns = [\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.DOCKER_IMAGE,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ];\n\n private manifestSourceUpdated = (source: string): void => {\n switch (source) {\n case 'artifact':\n this.props.formik.setFieldValue('manifest', {});\n this.capacityUpdated('1');\n break;\n case 'direct':\n this.props.formik.setFieldValue('manifest', this.defaultDirectManifest);\n break;\n }\n };\n\n private capacityUpdated = (capacity: string): void => {\n this.props.formik.setFieldValue('capacity.min', capacity);\n this.props.formik.setFieldValue('capacity.max', capacity);\n this.props.formik.setFieldValue('capacity.desired', capacity);\n };\n\n private getArtifactInput = (): JSX.Element => {\n const { formik, stage, pipeline } = this.props;\n const manifest = formik.values.manifest;\n return (\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"StandardFieldLayout flex-container-h margin-between-lg\">\n <div className=\"flex-grow\">\n <StageArtifactSelector\n pipeline={pipeline}\n stage={stage}\n expectedArtifactId={manifest && manifest.artifactId}\n artifact={manifest && manifest.artifact}\n onExpectedArtifactSelected={this.onExpectedArtifactSelected}\n onArtifactEdited={this.onArtifactChanged}\n excludedArtifactTypePatterns={this.excludedArtifactTypePatterns}\n renderLabel={(field: React.ReactNode) => {\n return <FormikConfigField label={'Artifact'}>{field}</FormikConfigField>;\n }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n };\n\n private onExpectedArtifactSelected = (expectedArtifact: IExpectedArtifact): void => {\n this.props.formik.setFieldValue('manifest', { artifactId: expectedArtifact.id });\n };\n\n private onArtifactChanged = (artifact: IArtifact): void => {\n this.props.formik.setFieldValue('manifest', { artifact: artifact });\n };\n\n private getDirectInput = (): JSX.Element => {\n const m = this.props.formik.values.manifest.direct;\n return (\n <div>\n {\n <InstanceParameters\n diskQuotaFieldName={'manifest.direct.diskQuota'}\n instancesFieldName={'manifest.direct.instances'}\n memoryFieldName={'manifest.direct.memory'}\n />\n }\n {<Buildpacks fieldName=\"manifest.direct.buildpacks\" />}\n {\n <HealthCheck\n healthCheckHttpEndpointFieldName={'manifest.direct.healthCheckHttpEndpoint'}\n healthCheckType={m.healthCheckType}\n healthCheckTypeFieldName={'manifest.direct.healthCheckType'}\n />\n }\n {<Routes fieldName=\"manifest.direct.routes\" />}\n {<EnvironmentVariables fieldName=\"manifest.direct.environment\" />}\n {<Services fieldName=\"manifest.direct.services\" />}\n </div>\n );\n };\n\n public render(): JSX.Element {\n const manifest = this.props.formik.values.manifest;\n const direct = manifest && !!manifest.direct;\n return (\n <>\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"StandardFieldLayout flex-container-h baseline margin-between-lg\">\n <div className=\"sm-label-right\">Source Type</div>\n <div className=\"flex-grow\">\n <RadioButtonInput\n inline={true}\n value={direct ? 'direct' : 'artifact'}\n options={[\n { label: 'Artifact', value: 'artifact' },\n { label: 'Form', value: 'direct' },\n ]}\n onChange={(e: any) => this.manifestSourceUpdated(e.target.value)}\n />\n </div>\n </div>\n </div>\n </div>\n {direct ? this.getDirectInput() : this.getArtifactInput()}\n </>\n );\n }\n\n public validate(_props: ICloudFoundryServerGroupConfigurationSettingsProps) {\n const errors = {} as any;\n const isStorageSize = (value: string) => /\\d+[MG]/.test(value);\n\n if (!this.props.formik.values.manifest) {\n errors.manifest = 'No manifest information provided';\n return errors;\n }\n\n const direct = this.props.formik.values.manifest.direct;\n if (direct) {\n if (!isStorageSize(direct.memory)) {\n errors.manifest = errors.manifest || {};\n errors.manifest.memory = `Provide a size (e.g.: 256M, 1G)`;\n }\n if (!isStorageSize(direct.diskQuota)) {\n errors.manifest = errors.manifest || {};\n errors.manifest.diskQuota = `Provide a size (e.g.: 256M, 1G)`;\n }\n if (direct.routes) {\n const routeErrors = direct.routes.map((route: string) => {\n const regex = /^([-\\w]+)\\.([-.\\w]+)(:\\d+)?([-/\\w]+)?$/gm;\n if (route && regex.exec(route) === null) {\n return `A route did not match the expected format \"host.some.domain[:9999][/some/path]\"`;\n }\n return null;\n });\n if (routeErrors.some((val: string) => !!val)) {\n errors.manifest = errors.manifest || {};\n errors.manifest.routes = routeErrors;\n }\n }\n if (direct.environment) {\n const existingKeys: string[] = [];\n const envErrors = direct.environment.map((e: ICloudFoundryEnvVar) => {\n let myErrors: any;\n if (e.key) {\n const validKeyRegex = /^\\w+$/g;\n if (!validKeyRegex.exec(e.key)) {\n myErrors = {\n key: `This field must be alphanumeric`,\n };\n } else {\n if (existingKeys.filter((key) => key === e.key).length > 0) {\n myErrors = {\n key: `Duplicate variable name`,\n };\n } else {\n existingKeys.push(e.key);\n }\n }\n }\n return myErrors;\n });\n if (envErrors.some((val: string) => !!val)) {\n errors.manifest = errors.manifest || {};\n errors.manifest.environment = envErrors;\n }\n }\n } else {\n const { manifest } = this.props.formik.values;\n if (\n !manifest ||\n !((manifest.artifact && manifest.artifact.type && manifest.artifact.reference) || manifest.artifactId)\n ) {\n errors.manifest = 'Manifest artifact information is required';\n }\n }\n\n return errors;\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { Application, IModalComponentProps, IPipeline, IStage } from '@spinnaker/core';\nimport { noop, ReactInjector, ReactModal, TaskMonitor, WizardModal, WizardPage } from '@spinnaker/core';\n\nimport { ServerGroupTemplateSelection } from './ServerGroupTemplateSelection';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\nimport { CloudFoundryServerGroupArtifactSettings } from './sections/artifactSettings/ArtifactSettings.cf';\nimport { CloudFoundryServerGroupConstantArtifactSettings } from './sections/artifactSettings/ConstantArtifactSettings.cf';\nimport { CloudFoundryServerGroupBasicSettings } from './sections/basicSettings/BasicSettings.cf';\nimport { CloudFoundryServerGroupCloneSettings } from './sections/cloneSettings/CloneSettings.cf';\nimport { CloudFoundryServerGroupConfigurationSettings } from './sections/configurationSettings/ConfigurationSettings.cf';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../serverGroupConfigurationModel.cf';\n\nimport './serverGroup.less';\n\nexport interface ICloudFoundryCreateServerGroupProps extends IModalComponentProps {\n application: Application;\n command: ICloudFoundryCreateServerGroupCommand;\n isSourceConstant?: boolean;\n serverGroup?: ICloudFoundryServerGroup;\n title: string;\n}\n\nexport interface ICloudFoundryCreateServerGroupState {\n pipeline: IPipeline;\n isClone: boolean;\n loading: boolean;\n requiresTemplateSelection: boolean;\n stage?: IStage;\n taskMonitor: TaskMonitor;\n}\n\nexport class CloudFoundryCreateServerGroupModal extends React.Component<\n ICloudFoundryCreateServerGroupProps,\n ICloudFoundryCreateServerGroupState\n> {\n public static defaultProps: Partial<ICloudFoundryCreateServerGroupProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: ICloudFoundryCreateServerGroupProps): Promise<ICloudFoundryCreateServerGroupCommand> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(CloudFoundryCreateServerGroupModal, props, modalProps);\n }\n\n constructor(props: ICloudFoundryCreateServerGroupProps) {\n super(props);\n const pipeline = get(props, 'command.viewState.pipeline', undefined);\n const stage = get(props, 'command.viewState.stage', undefined);\n const mode = get(props, 'command.viewState.mode', undefined);\n this.state = {\n pipeline: pipeline,\n isClone: !!props.isSourceConstant || mode === 'editClonePipeline',\n loading: false,\n requiresTemplateSelection: get(props, 'command.viewState.requiresTemplateSelection', false),\n stage,\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Creating your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: this.onTaskComplete,\n }),\n };\n }\n\n private templateSelected = () => {\n this.setState({ requiresTemplateSelection: false });\n this.initialize();\n };\n\n private initialize = () => {\n this.setState({ loading: false });\n };\n\n private onTaskComplete = () => {\n this.props.application.serverGroups.refresh();\n };\n\n private submit = (command: ICloudFoundryCreateServerGroupCommand): void => {\n command.selectedProvider = 'cloudfoundry';\n if (\n command.viewState.mode === 'createPipeline' ||\n command.viewState.mode === 'editPipeline' ||\n command.viewState.mode === 'editClonePipeline'\n ) {\n this.props.closeModal && this.props.closeModal(command);\n } else if (command.viewState.mode === 'clone') {\n this.state.taskMonitor.submit(() =>\n ReactInjector.serverGroupWriter.cloneServerGroup(command, this.props.application),\n );\n } else {\n this.state.taskMonitor.submit(() =>\n ReactInjector.serverGroupWriter.cloneServerGroup(command, this.props.application),\n );\n }\n };\n\n public render(): React.ReactElement<CloudFoundryCreateServerGroupModal> {\n const { loading, pipeline, isClone, requiresTemplateSelection, stage, taskMonitor } = this.state;\n const { application, command, dismissModal, title, isSourceConstant } = this.props;\n\n if (requiresTemplateSelection) {\n return (\n <ServerGroupTemplateSelection\n app={application}\n command={command}\n onDismiss={dismissModal}\n onTemplateSelected={this.templateSelected}\n />\n );\n }\n\n return (\n <WizardModal<ICloudFoundryCreateServerGroupCommand>\n heading={title}\n initialValues={command}\n loading={loading}\n taskMonitor={taskMonitor}\n dismissModal={dismissModal}\n closeModal={this.submit}\n submitButtonLabel={command.viewState.submitButtonLabel}\n render={({ formik, nextIdx, wizard }) => (\n <>\n <WizardPage\n label=\"Basic Settings\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <CloudFoundryServerGroupBasicSettings ref={innerRef} formik={formik} />}\n />\n\n {isClone && isSourceConstant && (\n <WizardPage\n label=\"Application\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <CloudFoundryServerGroupConstantArtifactSettings\n ref={innerRef}\n formik={formik}\n source={command.source}\n />\n )}\n />\n )}\n\n {isClone && !isSourceConstant && (\n <WizardPage\n label=\"Source\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <CloudFoundryServerGroupCloneSettings application={application} ref={innerRef} formik={formik} />\n )}\n />\n )}\n\n {!isClone && (\n <WizardPage\n label=\"Application\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <CloudFoundryServerGroupArtifactSettings\n ref={innerRef}\n formik={formik}\n pipeline={pipeline}\n stage={stage}\n />\n )}\n />\n )}\n\n <WizardPage\n label=\"Manifest\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <CloudFoundryServerGroupConfigurationSettings\n ref={innerRef}\n formik={formik}\n pipeline={pipeline}\n stage={stage}\n />\n )}\n />\n </>\n )}\n />\n );\n }\n}\n","import React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { StageConstants } from '@spinnaker/core';\nimport { CloudFoundryServerGroupCommandBuilder } from '../../../serverGroup/configure';\nimport { CloudFoundryCreateServerGroupModal } from '../../../serverGroup/configure/wizard/CreateServerGroupModal';\n\nexport interface ICloudFoundryCloneServerGroupStageConfigState {\n buttonText: string;\n}\n\nexport class CloudFoundryCloneServerGroupStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryCloneServerGroupStageConfigState\n> {\n constructor(props: IStageConfigProps) {\n super(props);\n this.props.updateStageField({\n cloudProvider: 'cloudfoundry',\n application: props.application.name,\n });\n this.state = {\n buttonText: props.stage.destination ? 'Edit clone configuration' : 'Add clone configuration',\n };\n }\n\n private handleResult = (command: any) => {\n this.props.updateStageField({\n credentials: command.credentials,\n capacity: command.capacity,\n account: command.account,\n delayBeforeDisableSec: command.delayBeforeDisableSec,\n freeFormDetails: command.freeFormDetails,\n maxRemainingAsgs: command.maxRemainingAsgs,\n region: command.region,\n startApplication: command.startApplication,\n stack: command.stack,\n strategy: command.strategy,\n target: command.target,\n targetCluster: command.targetCluster,\n manifest: command.manifest,\n source: command.source,\n });\n this.setState({ buttonText: 'Edit clone configuration' });\n };\n\n private addCluster = () => {\n const { application, stage, pipeline } = this.props;\n const title = 'Clone Cluster';\n const command = CloudFoundryServerGroupCommandBuilder.buildCloneServerGroupCommandFromPipeline(stage, pipeline);\n CloudFoundryCreateServerGroupModal.show({\n application,\n command,\n isSourceConstant: false,\n title,\n })\n .then(this.handleResult)\n .catch(() => {});\n };\n\n public render() {\n const { stage } = this.props;\n const { buttonText } = this.state;\n const cloneTargets = StageConstants.TARGET_LIST;\n return (\n <div className=\"form-horizontal\">\n <div>\n <h4>Clone Source</h4>\n <table className=\"table table-condensed table-deployStage\">\n <thead>\n <tr>\n <th>Account</th>\n <th>Region</th>\n <th>Cluster</th>\n <th>Target</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>{stage.source ? stage.source.account : ''}</td>\n <td>{stage.source ? stage.source.region : ''}</td>\n <td>{stage.source ? stage.source.clusterName : ''}</td>\n <td>\n {stage.source ? cloneTargets.filter((t) => t.val === stage.source.target).map((t) => t.label) : ''}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div>\n <h4>Clone Destination</h4>\n <table className=\"table table-condensed table-deployStage\">\n <thead>\n <tr>\n <th>Account</th>\n <th>Region</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>{stage.credentials}</td>\n <td>{stage.region}</td>\n </tr>\n </tbody>\n </table>\n </div>\n <button className=\"btn btn-block btn-sm add-new\" onClick={() => this.addCluster()}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> {buttonText}\n </button>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\n\nimport { CloudFoundryCloneServerGroupStageConfig } from './CloudFoundryCloneServerGroupStageConfig';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryCloneServerGroupStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'cloneServerGroup',\n provides: 'cloneServerGroup',\n validators: [],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IArtifact, IFormikStageConfigInjectedProps, IRegion } from '@spinnaker/core';\nimport {\n AccountService,\n ArtifactTypePatterns,\n excludeAllTypesExcept,\n NgReact,\n StageArtifactSelectorDelegate,\n StageConfigField,\n StageConstants,\n TextInput,\n} from '@spinnaker/core';\n\nimport { AccountRegionClusterSelector } from '../../../presentation/widgets/accountRegionClusterSelector';\n\ninterface ICloudFoundryCreateServiceBindingsStageConfigState {\n accounts: IAccount[];\n regions: string[];\n application: Application;\n}\n\nexport class CloudFoundryCreateServiceBindingsStageConfigForm extends React.Component<\n IFormikStageConfigInjectedProps,\n ICloudFoundryCreateServiceBindingsStageConfigState\n> {\n private static readonly excludedArtifactTypes = excludeAllTypesExcept(\n ArtifactTypePatterns.BITBUCKET_FILE,\n ArtifactTypePatterns.CUSTOM_OBJECT,\n ArtifactTypePatterns.EMBEDDED_BASE64,\n ArtifactTypePatterns.GCS_OBJECT,\n ArtifactTypePatterns.GITHUB_FILE,\n ArtifactTypePatterns.GITLAB_FILE,\n ArtifactTypePatterns.S3_OBJECT,\n ArtifactTypePatterns.HTTP_FILE,\n ArtifactTypePatterns.ORACLE_OBJECT,\n );\n\n private destroy$ = new Subject();\n\n constructor(props: IFormikStageConfigInjectedProps, context: any) {\n super(props, context);\n this.state = {\n accounts: [],\n regions: [],\n application: props.application,\n };\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));\n }\n\n public componentDidMount() {\n const stage = this.props.formik.values;\n this.props.formik.setFieldValue('cloudProvider', 'cloudfoundry');\n if (stage.serviceBindingRequests && stage.serviceBindingRequests.length === 0) {\n this.props.formik.setFieldValue('serviceBindingRequests', [\n {\n serviceInstanceName: '',\n updatable: false,\n },\n ]);\n }\n if (stage.credentials) {\n this.loadRegions(stage.credentials);\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private loadRegions = (creds: string) => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(creds))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions: regions });\n });\n };\n\n private onTemplateArtifactEdited = (artifact: IArtifact, index: number) => {\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].id`, null);\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].artifact`, artifact);\n };\n\n private onTemplateArtifactSelected = (id: string, index: number) => {\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].id`, id);\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].artifact`, null);\n };\n\n private addInputArtifact = () => {\n const stage = this.props.formik.values;\n const newServiceBindingRequests = [\n ...stage.serviceBindingRequests,\n {\n serviceInstanceName: '',\n updatable: false,\n },\n ];\n\n this.props.formik.setFieldValue('serviceBindingRequests', newServiceBindingRequests);\n };\n\n private removeInputArtifact = (index: number) => {\n const stage = this.props.formik.values;\n const newServiceBindingRequests = [...stage.serviceBindingRequests];\n newServiceBindingRequests.splice(index, 1);\n this.props.formik.setFieldValue('serviceBindingRequests', newServiceBindingRequests);\n };\n\n private targetUpdated = (target: string) => {\n this.props.formik.setFieldValue('target', target);\n };\n\n private restageRequiredUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.formik.setFieldValue('restageRequired', event.target.checked);\n this.props.formik.setFieldValue('restartRequired', !event.target.checked);\n };\n\n private restartRequiredUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.formik.setFieldValue('restartRequired', event.target.checked);\n this.props.formik.setFieldValue('restageRequired', !event.target.checked);\n };\n\n private updatableBindingUpdated = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].updatable`, event.target.checked);\n };\n\n private accountRegionClusterUpdated = (stage: any): void => {\n this.props.formik.setFieldValue(`cluster`, stage.cluster);\n this.props.formik.setFieldValue(`credentials`, stage.credentials);\n this.props.formik.setFieldValue(`region`, stage.region);\n };\n\n public render() {\n const stage = this.props.formik.values;\n const { accounts, application } = this.state;\n const { target } = stage;\n const { TargetSelect } = NgReact;\n\n return (\n <>\n <h4>Basic Settings</h4>\n <div className=\"form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n isSingleRegion={true}\n onComponentUpdate={this.accountRegionClusterUpdated}\n component={stage}\n />\n </div>\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Restage Required\">\n <input type=\"checkbox\" checked={stage.restageRequired} onChange={this.restageRequiredUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Restart Required\">\n <input type=\"checkbox\" checked={stage.restartRequired} onChange={this.restartRequiredUpdated} />\n </StageConfigField>\n <h4>Service Bindings</h4>\n {stage.serviceBindingRequests && stage.serviceBindingRequests.length > 0 && (\n <div className=\"row form-group\">\n {stage.serviceBindingRequests.map((a: any, index: number) => {\n return (\n <div key={index}>\n <div className=\"col-md-offset-1 col-md-8\">\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n onChange={(e: React.ChangeEvent<any>) => {\n this.props.formik.setFieldValue(\n `serviceBindingRequests[${index}].serviceInstanceName`,\n e.target.value,\n );\n }}\n value={a.serviceInstanceName}\n />\n </StageConfigField>\n <StageArtifactSelectorDelegate\n artifact={a.artifact}\n excludedArtifactTypePatterns={\n CloudFoundryCreateServiceBindingsStageConfigForm.excludedArtifactTypes\n }\n expectedArtifactId={a.id}\n label=\"Service Binding Parameters\"\n onArtifactEdited={(artifact) => {\n this.onTemplateArtifactEdited(artifact, index);\n }}\n onExpectedArtifactSelected={(artifact) => this.onTemplateArtifactSelected(artifact.id, index)}\n pipeline={this.props.pipeline}\n stage={stage}\n />\n <StageConfigField label=\"Updatable Binding\">\n <input\n type=\"checkbox\"\n checked={a.updatable}\n onChange={(event) => this.updatableBindingUpdated(event, index)}\n />\n </StageConfigField>\n </div>\n <div className=\"col-md-1\">\n <div className=\"form-control-static\">\n <button onClick={() => this.removeInputArtifact(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove field</span>\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n <StageConfigField fieldColumns={8} label={''}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={() => this.addInputArtifact()}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add Service Binding\n </button>\n </StageConfigField>\n </>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { CloudFoundryCreateServiceBindingsStageConfigForm } from './CloudFoundryCreateServiceBindingsStageConfigForm';\n\nexport interface ServiceBindingRequests {\n serviceInstanceName: String;\n}\n\nexport function CloudFoundryCreateServiceBindingsConfig({\n application,\n pipeline,\n stage,\n updateStage,\n}: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n serviceBindingRequests: [],\n restageRequired: true,\n restartRequired: false,\n credentials: '',\n region: '',\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n validate={validateCloudFoundryCreateServiceBindingsStage}\n render={(props) => <CloudFoundryCreateServiceBindingsStageConfigForm {...props} />}\n />\n );\n}\n\nexport function validateCloudFoundryCreateServiceBindingsStage(stage: IStage): FormikErrors<IStage> {\n const formValidator = new FormValidator(stage);\n\n formValidator.field('credentials', 'Account').required();\n formValidator.field('region', 'Region').required();\n formValidator.field('cluster', 'Cluster').required();\n formValidator.field('target', 'Target').required();\n\n formValidator\n .field('serviceBindingRequests', 'Service Binding Requests')\n .required()\n .withValidators((serviceBindingRequests: ServiceBindingRequests[]) => {\n if (validateServiceBindingRequests(serviceBindingRequests)) {\n return undefined;\n }\n return 'There should be at least one service binding request. At a minimum, each request must have a service instance name.';\n });\n\n return formValidator.validateForm();\n}\n\nexport function validateServiceBindingRequests(serviceBindingRequests: ServiceBindingRequests[]): boolean {\n if (serviceBindingRequests?.length < 1) {\n return false;\n }\n return serviceBindingRequests.every((req) => req?.serviceInstanceName);\n}\n","import { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport {\n CloudFoundryCreateServiceBindingsConfig,\n validateCloudFoundryCreateServiceBindingsStage,\n} from './CloudFoundryCreateServiceBindingsConfig';\n\nexport const CF_CREATE_SERVICE_BINDINGS_STAGE_KEY = 'cloudFoundryCreateServiceBindings';\n\nRegistry.pipeline.registerStage({\n label: 'Create Service Bindings',\n description: 'Create CF service bindings with optional parameters.',\n key: CF_CREATE_SERVICE_BINDINGS_STAGE_KEY,\n component: CloudFoundryCreateServiceBindingsConfig,\n producesArtifacts: false,\n cloudProvider: 'cloudfoundry',\n executionDetailsSections: [ExecutionDetailsTasks],\n validateFn: validateCloudFoundryCreateServiceBindingsStage,\n});\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';\n\ninterface ICloudFoundryCreateServiceKeyStageConfigState {\n accounts: string[];\n regions: string[];\n}\n\nexport class CloudFoundryCreateServiceKeyStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryCreateServiceKeyStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n regions: [],\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts.map((it) => it.name) }));\n if (this.props.stage.credentials) {\n this.clearAndReloadRegions();\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private clearAndReloadRegions = () => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions });\n });\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceInstanceName: event.target.value });\n };\n\n private serviceKeyNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceKeyName: event.target.value });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const credentials = option.target.value;\n this.setState({\n regions: [],\n });\n this.props.updateStageField({\n credentials,\n region: '',\n });\n this.clearAndReloadRegions();\n };\n\n private regionUpdated = (option: Option<string>) => {\n const region = option.target.value;\n this.props.updateStageField({\n region,\n });\n };\n\n public render() {\n const { credentials, region, serviceInstanceName, serviceKeyName } = this.props.stage;\n const { accounts, regions } = this.state;\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <ReactSelectInput clearable={false} onChange={this.regionUpdated} value={region} stringOptions={regions} />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Key Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceKeyNameUpdated}\n value={serviceKeyName}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryCreateServiceKeyStageConfig } from './CloudFoundryCreateServiceKeyStageConfig';\nimport { CloudFoundryServiceKeyExecutionDetails } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryCreateServiceKeyStageConfig,\n description: 'Create a service key',\n executionDetailsSections: [CloudFoundryServiceKeyExecutionDetails, ExecutionDetailsTasks],\n key: 'createServiceKey',\n label: 'Create Service Key',\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'region', preventSave: true },\n { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },\n { type: 'requiredField', fieldName: 'serviceKeyName', preventSave: true },\n ],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IFormikStageConfigInjectedProps, IRegion } from '@spinnaker/core';\nimport { AccountService, NgReact, StageConfigField, StageConstants, TextInput } from '@spinnaker/core';\n\nimport { AccountRegionClusterSelector } from '../../../presentation/widgets/accountRegionClusterSelector';\n\ninterface ICloudFoundryDeleteServiceBindingsStageConfigState {\n accounts: IAccount[];\n regions: string[];\n application: Application;\n}\n\nexport class CloudFoundryDeleteServiceBindingsStageConfigForm extends React.Component<\n IFormikStageConfigInjectedProps,\n ICloudFoundryDeleteServiceBindingsStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IFormikStageConfigInjectedProps, context: any) {\n super(props, context);\n this.state = {\n accounts: [],\n regions: [],\n application: props.application,\n };\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));\n }\n\n public componentDidMount() {\n const stage = this.props.formik.values;\n this.props.formik.setFieldValue('cloudProvider', 'cloudfoundry');\n if (stage.serviceUnbindingRequests && stage.serviceUnbindingRequests.length === 0) {\n this.props.formik.setFieldValue('serviceUnbindingRequests', [\n {\n serviceInstanceName: '',\n updatable: false,\n },\n ]);\n }\n if (stage.credentials) {\n this.loadRegions(stage.credentials);\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private loadRegions = (creds: string) => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(creds))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions: regions });\n });\n };\n\n private addInputArtifact = () => {\n const stage = this.props.formik.values;\n const newServiceUnbindingRequests = [\n ...stage.serviceUnbindingRequests,\n {\n serviceInstanceName: '',\n updatable: false,\n },\n ];\n\n this.props.formik.setFieldValue('serviceUnbindingRequests', newServiceUnbindingRequests);\n };\n\n private removeInputArtifact = (index: number) => {\n const stage = this.props.formik.values;\n const newServiceUnbindingRequests = [...stage.serviceUnbindingRequests];\n newServiceUnbindingRequests.splice(index, 1);\n this.props.formik.setFieldValue('serviceUnbindingRequests', newServiceUnbindingRequests);\n };\n\n private targetUpdated = (target: string) => {\n this.props.formik.setFieldValue('target', target);\n };\n\n private accountRegionClusterUpdated = (stage: any): void => {\n this.props.formik.setFieldValue(`cluster`, stage.cluster);\n this.props.formik.setFieldValue(`credentials`, stage.credentials);\n this.props.formik.setFieldValue(`region`, stage.region);\n };\n\n public render() {\n const stage = this.props.formik.values;\n const { accounts, application } = this.state;\n const { target } = stage;\n const { TargetSelect } = NgReact;\n\n return (\n <>\n <h4>Basic Settings</h4>\n <div className=\"form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n isSingleRegion={true}\n onComponentUpdate={this.accountRegionClusterUpdated}\n component={stage}\n />\n </div>\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n <h4>Service Unbindings</h4>\n {stage.serviceUnbindingRequests && stage.serviceUnbindingRequests.length > 0 && (\n <div className=\"row form-group\">\n {stage.serviceUnbindingRequests.map((a: any, index: number) => {\n return (\n <div key={index}>\n <div className=\"col-md-offset-1 col-md-8\">\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n onChange={(e: React.ChangeEvent<any>) => {\n this.props.formik.setFieldValue(\n `serviceUnbindingRequests[${index}].serviceInstanceName`,\n e.target.value,\n );\n }}\n value={a.serviceInstanceName}\n />\n </StageConfigField>\n </div>\n <div className=\"col-md-1\">\n <div className=\"form-control-static\">\n <button onClick={() => this.removeInputArtifact(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove field</span>\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n <StageConfigField fieldColumns={8} label={''}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={() => this.addInputArtifact()}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add Service Unbinding\n </button>\n </StageConfigField>\n </>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { CloudFoundryDeleteServiceBindingsStageConfigForm } from './CloudFoundryDeleteServiceBindingsStageConfigForm';\n\ninterface ServiceUnbindingRequests {\n serviceInstanceName: String;\n}\n\nexport function CloudFoundryDeleteServiceBindingsConfig({\n application,\n pipeline,\n stage,\n updateStage,\n}: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n serviceUnbindingRequests: [],\n restageRequired: true,\n restartRequired: false,\n credentials: '',\n region: '',\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n validate={validateCloudFoundryDeleteServiceBindingsStage}\n render={(props) => <CloudFoundryDeleteServiceBindingsStageConfigForm {...props} />}\n />\n );\n}\n\nexport function validateCloudFoundryDeleteServiceBindingsStage(stage: IStage): FormikErrors<IStage> {\n const formValidator = new FormValidator(stage);\n\n formValidator.field('credentials', 'Account').required();\n formValidator.field('region', 'Region').required();\n formValidator.field('cluster', 'Cluster').required();\n formValidator.field('target', 'Target').required();\n\n formValidator\n .field('serviceUnbindingRequests', 'Service Binding Requests')\n .required()\n .withValidators((serviceUnbindingRequests: ServiceUnbindingRequests[]) => {\n if (validateServiceUnbindingRequests(serviceUnbindingRequests)) {\n return undefined;\n }\n return 'There should be at least one service binding request. At a minimum, each request must have a service instance name.';\n });\n\n return formValidator.validateForm();\n}\n\nexport function validateServiceUnbindingRequests(serviceUnbindingRequests: ServiceUnbindingRequests[]): boolean {\n if (serviceUnbindingRequests?.length < 1) {\n return false;\n }\n return serviceUnbindingRequests.every((req) => req.serviceInstanceName);\n}\n","import { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport {\n CloudFoundryDeleteServiceBindingsConfig,\n validateCloudFoundryDeleteServiceBindingsStage,\n} from './CloudFoundryDeleteServiceBindingsConfig';\n\nexport const CF_DELETE_SERVICE_BINDINGS_STAGE_KEY = 'cloudFoundryDeleteServiceBindings';\n\nRegistry.pipeline.registerStage({\n label: 'Delete Service Bindings',\n description: 'Delete CF service bindings with optional parameters.',\n key: CF_DELETE_SERVICE_BINDINGS_STAGE_KEY,\n component: CloudFoundryDeleteServiceBindingsConfig,\n producesArtifacts: false,\n cloudProvider: 'cloudfoundry',\n executionDetailsSections: [ExecutionDetailsTasks],\n validateFn: validateCloudFoundryDeleteServiceBindingsStage,\n});\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';\n\ninterface ICloudFoundryDeleteServiceKeyStageConfigState {\n accounts: string[];\n regions: string[];\n}\n\nexport class CloudFoundryDeleteServiceKeyStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryDeleteServiceKeyStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n regions: [],\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts.map((it) => it.name) }));\n if (this.props.stage.credentials) {\n this.clearAndReloadRegions();\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private clearAndReloadRegions = () => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions });\n });\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceInstanceName: event.target.value });\n };\n\n private serviceKeyNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceKeyName: event.target.value });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const credentials = option.target.value;\n this.setState({\n regions: [],\n });\n this.props.updateStageField({\n credentials,\n region: '',\n });\n this.clearAndReloadRegions();\n };\n\n private regionUpdated = (option: Option<string>) => {\n const region = option.target.value;\n this.props.updateStageField({\n region,\n });\n };\n\n public render() {\n const { credentials, region, serviceInstanceName, serviceKeyName } = this.props.stage;\n const { accounts, regions } = this.state;\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <ReactSelectInput clearable={false} onChange={this.regionUpdated} value={region} stringOptions={regions} />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Key Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceKeyNameUpdated}\n value={serviceKeyName}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryDeleteServiceKeyStageConfig } from './CloudFoundryDeleteServiceKeyStageConfig';\nimport { CloudFoundryServiceKeyExecutionDetails } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryDeleteServiceKeyStageConfig,\n description: 'Delete a service key',\n executionDetailsSections: [CloudFoundryServiceKeyExecutionDetails, ExecutionDetailsTasks],\n key: 'deleteServiceKey',\n label: 'Delete Service Key',\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'region', preventSave: true },\n { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },\n { type: 'requiredField', fieldName: 'serviceKeyName', preventSave: true },\n ],\n});\n","import { includes } from 'lodash';\nimport React from 'react';\n\ninterface IServiceTagsInputProps {\n tags: string[];\n onChange: (e: string[]) => void;\n}\n\ninterface IServiceTagsInputState {\n newTag: string;\n tags: string[];\n}\n\nexport class ServiceTagsInput extends React.Component<IServiceTagsInputProps, IServiceTagsInputState> {\n constructor(props: IServiceTagsInputProps) {\n super(props);\n this.state = {\n newTag: '',\n tags: this.props.tags || [],\n };\n }\n\n private newTagUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.setState({ newTag: event.target.value });\n };\n\n private addTag = (): void => {\n const { onChange, tags } = this.props;\n const { newTag } = this.state;\n const currentTags = tags || [];\n\n if (!includes(currentTags, newTag.trim())) {\n const newTags = [...currentTags, newTag.trim()].sort((a, b) => a.localeCompare(b));\n this.setState({\n tags: newTags,\n newTag: '',\n });\n onChange(newTags);\n }\n };\n\n private deleteTag = (index: number): void => {\n const { onChange, tags } = this.props;\n const newTags = tags.slice();\n newTags.splice(index, 1);\n this.setState({ tags: newTags });\n onChange(newTags);\n };\n\n public render() {\n const { tags, newTag } = this.state;\n return (\n <>\n <div className=\"row\">\n <div className=\"col-md-4\">\n <input type=\"text\" className=\"form-control\" name=\"newTag\" onChange={this.newTagUpdated} value={newTag} />\n </div>\n <div className=\"col-md-2\">\n <button disabled={!newTag.trim()} className=\"btn btn-default btn-sm btn-add-tag\" onClick={this.addTag}>\n Add Tag\n </button>\n </div>\n </div>\n <div>\n <div>\n {tags &&\n tags.map((tag: any, index: number) => {\n return (\n <span className=\"badge badge-pill\" key={index}>\n \n {tag}\n \n <button\n type=\"button\"\n className=\"close small\"\n aria-label=\"Close\"\n onClick={() => this.deleteTag(index)}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n </span>\n );\n })}\n </div>\n </div>\n </>\n );\n }\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IService, IServicePlan } from '@spinnaker/core';\nimport { ReactSelectInput, ServicesReader, StageConfigField, TextAreaInput, TextInput } from '@spinnaker/core';\n\nimport type { ICloudFoundryServiceManifestDirectSource } from './ICloudFoundryServiceManifestSource';\nimport { ServiceTagsInput } from './ServiceTagsInput';\n\ninterface ICreateServiceInstanceDirectInputProps {\n credentials: string;\n region: string;\n service: ICloudFoundryServiceManifestDirectSource;\n onServiceChanged: (_: ICloudFoundryServiceManifestDirectSource) => void;\n}\n\ninterface ICreateServiceInstanceDirectInputState {\n serviceNamesAndPlans: IService[];\n}\n\nexport class CreateServiceInstanceDirectInput extends React.Component<\n ICreateServiceInstanceDirectInputProps,\n ICreateServiceInstanceDirectInputState\n> {\n private destroy$ = new Subject();\n constructor(props: ICreateServiceInstanceDirectInputProps) {\n super(props);\n this.state = { serviceNamesAndPlans: [] };\n }\n\n public componentDidUpdate(prevProps: Readonly<ICreateServiceInstanceDirectInputProps>) {\n const { credentials, region } = this.props;\n if ((credentials && credentials !== prevProps.credentials) || region !== prevProps.region) {\n this.loadServices(credentials, region);\n }\n }\n\n public componentDidMount(): void {\n this.loadServices(this.props.credentials, this.props.region);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private loadServices(credentials: string, region: string) {\n if (credentials && region) {\n observableFrom(ServicesReader.getServices(credentials, region))\n .pipe(takeUntil(this.destroy$))\n .subscribe((serviceNamesAndPlans) => this.setState({ serviceNamesAndPlans }));\n }\n }\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n serviceInstanceName: event.target.value,\n });\n };\n\n private serviceUpdated = (option: Option<string>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n service: option.target.value,\n servicePlan: '',\n });\n };\n\n private servicePlanUpdated = (option: Option<string>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n servicePlan: option.target.value,\n });\n };\n\n private parametersUpdated = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n parameters: event.target.value,\n });\n };\n\n private tagsUpdated = (tags: string[]) => {\n this.props.onServiceChanged({\n ...this.props.service,\n tags: tags,\n });\n };\n\n private updatableUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n updatable: event.target.checked,\n versioned: false,\n });\n };\n\n private versionedUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n versioned: event.target.checked,\n updatable: false,\n });\n };\n\n public render() {\n const { service } = this.props;\n const services = this.state.serviceNamesAndPlans.map((item) => item.name);\n const serviceWithPlans = this.state.serviceNamesAndPlans.find((it) => it.name === service.service);\n const servicePlans = serviceWithPlans ? serviceWithPlans.servicePlans.map((it: IServicePlan) => it.name) : [];\n return (\n <div>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={service.serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Service\">\n <ReactSelectInput\n clearable={false}\n onChange={this.serviceUpdated}\n value={service.service}\n stringOptions={services}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Plan\">\n <ReactSelectInput\n clearable={false}\n onChange={this.servicePlanUpdated}\n value={service.servicePlan}\n stringOptions={servicePlans}\n />\n </StageConfigField>\n <StageConfigField label=\"Tags\">\n <ServiceTagsInput tags={service.tags || []} onChange={this.tagsUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Parameters\">\n <TextAreaInput className=\"form-control\" onChange={this.parametersUpdated} value={service.parameters || ''} />\n </StageConfigField>\n <StageConfigField label=\"Updatable\" helpKey={'pipeline.config.cf.createservice.updatable'}>\n <input\n type=\"checkbox\"\n disabled={!!service.versioned}\n checked={!!service.updatable}\n onChange={this.updatableUpdated}\n />\n </StageConfigField>\n <StageConfigField label=\"Versioned\" helpKey={'pipeline.config.cf.createservice.versioned'}>\n <input\n type=\"checkbox\"\n disabled={!!service.updatable}\n checked={!!service.versioned}\n onChange={this.versionedUpdated}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { StageConfigField, TextAreaInput, TextInput } from '@spinnaker/core';\n\nimport type {\n ICloudFoundryServiceManifestSource,\n ICloudFoundryServiceUserProvidedSource,\n} from './ICloudFoundryServiceManifestSource';\nimport { ServiceTagsInput } from './ServiceTagsInput';\n\ninterface ICreateServiceInstanceUserProvidedInputProps {\n onChange: (serviceInput: ICloudFoundryServiceManifestSource) => void;\n service: ICloudFoundryServiceUserProvidedSource;\n onServiceChanged: (_: ICloudFoundryServiceUserProvidedSource) => void;\n}\n\nexport class CreateUserProvidedInput extends React.Component<ICreateServiceInstanceUserProvidedInputProps> {\n constructor(props: ICreateServiceInstanceUserProvidedInputProps) {\n super(props);\n }\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n serviceInstanceName: event.target.value,\n });\n };\n\n private syslogDrainUrlUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.onServiceChanged({\n ...this.props.service,\n syslogDrainUrl: event.target.value,\n });\n };\n\n private routeServiceUrlUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.onServiceChanged({\n ...this.props.service,\n routeServiceUrl: event.target.value,\n });\n };\n\n private credentialsUpdated = (event: React.ChangeEvent<HTMLTextAreaElement>): void => {\n this.props.onServiceChanged({\n ...this.props.service,\n credentials: event.target.value,\n });\n };\n\n private tagsUpdated = (tags: string[]) => {\n this.props.onServiceChanged({\n ...this.props.service,\n tags: tags,\n });\n };\n\n private updatableUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n updatable: event.target.checked,\n versioned: false,\n });\n };\n\n private versionedUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n versioned: event.target.checked,\n updatable: false,\n });\n };\n\n public render() {\n const { service } = this.props;\n return (\n <>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={service.serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Syslog Drain URL\">\n <TextInput onChange={this.syslogDrainUrlUpdated} value={service.syslogDrainUrl} />\n </StageConfigField>\n <StageConfigField label=\"Route Service URL\">\n <TextInput onChange={this.routeServiceUrlUpdated} value={service.routeServiceUrl} />\n </StageConfigField>\n <StageConfigField label=\"Credentials\">\n <TextAreaInput onChange={this.credentialsUpdated} value={service.credentials} />\n </StageConfigField>\n <StageConfigField label=\"Tags\">\n <ServiceTagsInput tags={service.tags || []} onChange={this.tagsUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Updatable\" helpKey={'pipeline.config.cf.createservice.updatable'}>\n <input\n type=\"checkbox\"\n disabled={!!service.versioned}\n checked={!!service.updatable}\n onChange={this.updatableUpdated}\n />\n </StageConfigField>\n <StageConfigField label=\"Versioned\" helpKey={'pipeline.config.cf.createservice.versioned'}>\n <input\n type=\"checkbox\"\n disabled={!!service.updatable}\n checked={!!service.versioned}\n onChange={this.versionedUpdated}\n />\n </StageConfigField>\n </>\n );\n }\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IArtifact, IExpectedArtifact, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport {\n AccountService,\n ArtifactTypePatterns,\n ReactSelectInput,\n StageArtifactSelector,\n StageConfigField,\n} from '@spinnaker/core';\n\nimport { CreateServiceInstanceDirectInput } from './CreateServiceInstanceDirectInput';\nimport { CreateUserProvidedInput } from './CreateUserProvidedInput';\nimport type { ICloudFoundryServiceManifestSource } from './ICloudFoundryServiceManifestSource';\n\nimport './cloudfoundryDeployServiceStage.less';\n\ninterface ICloudFoundryDeployServiceStageConfigState {\n regions: IRegion[];\n accounts: IAccount[];\n}\n\nexport class CloudFoundryDeployServiceStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryDeployServiceStageConfigState\n> {\n private defaultDirectManifest = {\n direct: {\n parameters: '',\n service: '',\n serviceInstanceName: '',\n servicePlan: '',\n updatable: false,\n versioned: false,\n },\n };\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n this.props.updateStageField({ cloudProvider: 'cloudfoundry' });\n this.state = {\n accounts: [],\n regions: [],\n };\n }\n\n private accountUpdated = (option: Option<string>): void => {\n const credentials = option.target.value;\n const updates: any = { credentials: credentials, region: '' };\n if (!this.props.stage.manifest || this.props.stage.manifest.direct) {\n updates.manifest = this.defaultDirectManifest;\n }\n this.props.updateStageField(updates);\n this.reloadRegions();\n };\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n this.reloadRegions();\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private reloadRegions = () => {\n const { credentials } = this.props.stage;\n if (credentials) {\n observableFrom(AccountService.getRegionsForAccount(credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regions) => this.setState({ regions }));\n }\n };\n\n private manifestSourceUpdated = (source: string): void => {\n switch (source) {\n case 'direct':\n this.props.updateStageField({ manifest: this.defaultDirectManifest });\n break;\n case 'artifact':\n this.props.updateStageField({ manifest: {} });\n break;\n }\n };\n\n private onExpectedArtifactSelected = (expectedArtifact: IExpectedArtifact): void => {\n this.props.updateStageField({ manifest: { artifactId: expectedArtifact.id } });\n };\n\n private onArtifactChanged = (artifact: IArtifact): void => {\n this.props.updateStageField({ manifest: { artifact } });\n };\n\n private regionUpdated = (option: Option<string>): void => {\n const updates: any = { region: option.target.value };\n const direct = this.props.stage.manifest.direct;\n if (direct) {\n updates.manifest = this.defaultDirectManifest;\n }\n this.props.updateStageField(updates);\n };\n\n private serviceManifestSourceUpdated = (manifest: ICloudFoundryServiceManifestSource) => {\n this.props.updateStageField({ manifest });\n };\n\n private userProvidedUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.updateStageField({ userProvided: event.target.checked });\n };\n\n public render() {\n const { pipeline, stage } = this.props;\n const { credentials, region, userProvided, manifest } = this.props.stage;\n const { accounts, regions } = this.state;\n const directInput = !manifest || !!manifest.direct;\n let manifestInput;\n\n if (directInput) {\n const directManifest = (manifest && manifest.direct) || this.defaultDirectManifest;\n manifestInput = userProvided ? (\n <CreateUserProvidedInput\n onChange={this.serviceManifestSourceUpdated}\n service={directManifest}\n onServiceChanged={(direct) => this.serviceManifestSourceUpdated({ direct })}\n />\n ) : (\n <CreateServiceInstanceDirectInput\n credentials={credentials}\n region={region}\n service={directManifest}\n onServiceChanged={(direct) => this.serviceManifestSourceUpdated({ direct })}\n />\n );\n } else {\n manifestInput = (\n <StageConfigField label=\"Artifact\">\n <StageArtifactSelector\n pipeline={pipeline}\n stage={stage}\n expectedArtifactId={manifest.artifactId}\n excludedArtifactTypePatterns={[\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ArtifactTypePatterns.DOCKER_IMAGE,\n ]}\n artifact={manifest.artifact}\n onExpectedArtifactSelected={this.onExpectedArtifactSelected}\n onArtifactEdited={this.onArtifactChanged}\n />\n </StageConfigField>\n );\n }\n\n return (\n <div className=\"form-horizontal cloudfoundry-deploy-service-stage\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts.map((it) => it.name)}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <ReactSelectInput\n clearable={false}\n onChange={this.regionUpdated}\n value={region}\n stringOptions={regions.map((it) => it.name)}\n />\n </StageConfigField>\n <StageConfigField label=\"User-provided\">\n <input type=\"checkbox\" checked={!!userProvided} onChange={this.userProvidedUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Configuration Source\">\n <div className=\"radio radio-inline\">\n <label>\n <input type=\"radio\" checked={!directInput} onChange={() => this.manifestSourceUpdated('artifact')} />{' '}\n Manifest\n </label>\n </div>\n <div className=\"radio radio-inline\">\n <label>\n <input type=\"radio\" checked={directInput} onChange={() => this.manifestSourceUpdated('direct')} /> Form\n </label>\n </div>\n </StageConfigField>\n {manifestInput}\n </div>\n );\n }\n}\n","import { safeLoad } from 'js-yaml';\nimport { get, upperFirst } from 'lodash';\n\nimport type { IPipeline, IStage, IStageOrTriggerValidator, ITrigger, IValidatorConfig } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, PipelineConfigValidator, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryDeployServiceStageConfig } from './CloudFoundryDeployServiceStageConfig';\nimport type { ICloudFoundryServiceManifestSource } from './ICloudFoundryServiceManifestSource';\nimport { CloudFoundryServiceExecutionDetails } from '../../../presentation';\n\ninterface IServiceFieldValidatorConfig extends IValidatorConfig {\n manifestSource: string;\n}\n\nconst sourceType = (manifest: ICloudFoundryServiceManifestSource, userProvided: boolean) => {\n if (manifest && manifest.direct) {\n return userProvided ? 'userProvided' : 'direct';\n } else {\n return 'artifact';\n }\n};\n\nconst sourceStruct = (manifest: ICloudFoundryServiceManifestSource) => {\n return manifest && manifest.direct ? 'direct' : 'artifact';\n};\n\nPipelineConfigValidator.registerValidator(\n 'requiredDeployServiceField',\n new (class implements IStageOrTriggerValidator {\n public validate(\n _pipeline: IPipeline,\n stage: IStage | ITrigger,\n validationConfig: IServiceFieldValidatorConfig,\n ): string {\n const serviceInput: ICloudFoundryServiceManifestSource = get(stage, 'manifest');\n if (sourceType(serviceInput, get(stage, 'userProvided')) !== validationConfig.manifestSource) {\n return null;\n }\n const manifestSource: any = get(serviceInput, sourceStruct(serviceInput));\n const content: any = get(manifestSource, validationConfig.fieldName);\n const fieldLabel = validationConfig.fieldLabel || upperFirst(validationConfig.fieldName);\n return content ? null : `<strong>${fieldLabel}</strong> is a required field for the Deploy Service stage.`;\n }\n })(),\n);\n\nPipelineConfigValidator.registerValidator(\n 'validDeployServiceParameterJsonOrYaml',\n new (class implements IStageOrTriggerValidator {\n private isJson(value: string): boolean {\n try {\n JSON.parse(value);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n private isYaml(value: string): boolean {\n try {\n safeLoad(value);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n public validate(\n _pipeline: IPipeline,\n stage: IStage | ITrigger,\n validationConfig: IServiceFieldValidatorConfig,\n ): string {\n const manifest: any = get(stage, 'manifest');\n if (sourceType(manifest, get(stage, 'userProvided')) !== validationConfig.manifestSource) {\n return null;\n }\n const manifestSource: any = get(manifest, sourceStruct(manifest));\n const fieldContent: any = get(manifestSource, validationConfig.fieldName);\n\n if (fieldContent) {\n if (!this.isJson(fieldContent) && !this.isYaml(fieldContent)) {\n const fieldLabel = upperFirst(validationConfig.fieldLabel || validationConfig.fieldName);\n return validationConfig.message || `<strong>${fieldLabel}</strong> should be a valid JSON or YAML string.`;\n }\n }\n return null;\n }\n })(),\n);\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryDeployServiceStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n supportsCustomTimeout: true,\n description: 'Deploys services using Open Service Broker and deploys user-provided services',\n executionDetailsSections: [CloudFoundryServiceExecutionDetails, ExecutionDetailsTasks],\n key: 'deployService',\n label: 'Deploy Service',\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'region' },\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'direct',\n fieldName: 'serviceInstanceName',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'direct',\n fieldName: 'service',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'direct',\n fieldName: 'servicePlan',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'artifact',\n fieldName: 'artifactAccount',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'artifact',\n fieldName: 'reference',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'userProvided',\n fieldName: 'serviceInstanceName',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'validDeployServiceParameterJsonOrYaml',\n manifestSource: 'direct',\n fieldName: 'parameters',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'validDeployServiceParameterJsonOrYaml',\n manifestSource: 'userProvided',\n fieldName: 'credentials',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n ],\n});\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\nimport { CloudFoundryAsgStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryAsgStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'destroyServerGroup',\n provides: 'destroyServerGroup',\n validators: [\n {\n type: 'cfTargetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n});\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IFormikStageConfigInjectedProps, IRegion } from '@spinnaker/core';\nimport { AccountService, StageConfigField } from '@spinnaker/core';\n\nexport interface ICloudFoundryDestroyServiceStageConfigState {\n accounts: IAccount[];\n regions: string[];\n application: Application;\n}\n\nexport class CloudFoundryDestroyServiceStageConfigForm extends React.Component<\n IFormikStageConfigInjectedProps,\n ICloudFoundryDestroyServiceStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IFormikStageConfigInjectedProps, context: any) {\n super(props, context);\n this.props.formik.setFieldValue('cloudProvider', 'cloudfoundry');\n this.state = {\n accounts: [],\n regions: [],\n application: props.application,\n };\n }\n\n public componentDidMount() {\n const stage = this.props.formik.values;\n this.props.formik.setFieldValue('application', this.state.application.name);\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));\n if (stage.credentials) {\n this.loadRegions(stage.credentials);\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private loadRegions = (creds: string) => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(creds))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions: regions });\n });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const creds = option.value;\n this.props.formik.setFieldValue('credentials', creds);\n this.props.formik.setFieldValue('region', '');\n if (creds) {\n this.loadRegions(creds);\n }\n };\n\n private regionUpdated = (option: Option<string>) => {\n this.props.formik.setFieldValue('region', option.value);\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.formik.setFieldValue('serviceInstanceName', event.target.value);\n };\n\n private removeBindingsUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.formik.setFieldValue('removeBindings', event.target.checked);\n };\n\n public render() {\n const stage = this.props.formik.values;\n const { accounts, regions } = this.state;\n const { credentials, region, serviceInstanceName } = stage;\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <Select\n options={\n accounts &&\n accounts.map((acc: IAccount) => ({\n label: acc.name,\n value: acc.name,\n }))\n }\n clearable={false}\n value={credentials}\n onChange={this.accountUpdated}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <Select\n options={\n regions &&\n regions.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n clearable={false}\n value={region}\n onChange={this.regionUpdated}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <input\n type=\"text\"\n className=\"form-control\"\n required={true}\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Remove Bindings\">\n <input type=\"checkbox\" checked={stage.removeBindings} onChange={this.removeBindingsUpdated} />\n {stage.removeBindings && (\n <div>\n Warning: Prior to destroying, this will attempt to unbind any server groups that are bound to this\n service. This stage will fail if any server groups don't belong to the spinnaker application.\n </div>\n )}\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { CloudFoundryDestroyServiceStageConfigForm } from './CloudFoundryDestroyServiceStageConfigForm';\n\nexport function CloudFoundryDestroyServiceStageConfig({\n application,\n pipeline,\n stage,\n updateStage,\n}: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n credentials: '',\n serviceInstanceName: '',\n removeBindings: false,\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n validate={validateCloudFoundryDestroyServiceStage}\n render={(props) => <CloudFoundryDestroyServiceStageConfigForm {...props} />}\n />\n );\n}\n\nexport function validateCloudFoundryDestroyServiceStage(stage: IStage): FormikErrors<IStage> {\n const formValidator = new FormValidator(stage);\n\n formValidator.field('credentials', 'Account').required();\n formValidator.field('region', 'Region').required();\n formValidator.field('serviceInstanceName', 'Service Instance Name').required();\n formValidator.field('application', 'Application').required();\n\n return formValidator.validateForm();\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport {\n CloudFoundryDestroyServiceStageConfig,\n validateCloudFoundryDestroyServiceStage,\n} from './CloudFoundryDestroyServiceStageConfig';\nimport { CloudFoundryServiceExecutionDetails } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryDestroyServiceStageConfig,\n supportsCustomTimeout: true,\n executionDetailsSections: [CloudFoundryServiceExecutionDetails, ExecutionDetailsTasks],\n key: 'destroyService',\n provides: 'destroyService',\n validateFn: validateCloudFoundryDestroyServiceStage,\n});\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\nimport { CloudFoundryAsgStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryAsgStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'disableServerGroup',\n provides: 'disableServerGroup',\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n});\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\nimport { CloudFoundryAsgStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryAsgStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'enableServerGroup',\n provides: 'enableServerGroup',\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n});\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\nimport { CloudFoundryLoadBalancersExecutionDetails, CloudFoundryLoadBalancersStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryLoadBalancersStageConfig,\n description: 'Map a load balancer',\n executionDetailsSections: [CloudFoundryLoadBalancersExecutionDetails, ExecutionDetailsTasks],\n key: 'mapLoadBalancers',\n label: 'Map Load Balancer',\n validators: [\n { type: 'requiredField', preventSave: true, fieldName: 'cluster' },\n { type: 'requiredField', preventSave: true, fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', preventSave: true, fieldName: 'region' },\n { type: 'requiredField', preventSave: true, fieldName: 'target' },\n { type: 'cfRequiredRoutesField', preventSave: true, fieldName: 'loadBalancerNames' },\n ],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, NgReact, StageConfigField, StageConstants } from '@spinnaker/core';\nimport { AccountRegionClusterSelector } from '../../../presentation';\n\nexport interface ICloudFoundryResizeAsgStageConfigState {\n accounts: IAccount[];\n}\n\nexport class CloudFoundryResizeAsgStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryResizeAsgStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n const { stage } = props;\n let interestingHealthProviderNames;\n if (\n stage.isNew &&\n props.application.attributes.platformHealthOnlyShowOverride &&\n props.application.attributes.platformHealthOnly\n ) {\n interestingHealthProviderNames = ['Cloud Foundry'];\n }\n const { capacity } = stage;\n this.props.updateStageField({\n action: 'scale_exact',\n capacity: capacity && capacity.desired ? capacity : { desired: 1, min: 1, max: 1 },\n cloudProvider: 'cloudfoundry',\n diskQuota: stage.diskQuota || 1024,\n interestingHealthProviderNames: interestingHealthProviderNames,\n memory: stage.memory || 1024,\n });\n\n this.state = { accounts: [] };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n this.props.stageFieldUpdated();\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private instanceCountUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const instanceCount = parseInt(event.target.value, 10);\n this.props.updateStageField({\n capacity: {\n desired: instanceCount,\n min: instanceCount,\n max: instanceCount,\n },\n });\n };\n\n private memoryUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.updateStageField({ memory: parseInt(event.target.value, 10) });\n };\n\n private diskQuotaUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.updateStageField({ diskQuota: parseInt(event.target.value, 10) });\n };\n\n private targetUpdated = (target: string) => {\n this.props.updateStageField({ target });\n };\n\n private componentUpdated = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n regions: stage.regions,\n cluster: stage.cluster,\n });\n };\n\n public render() {\n const { accounts } = this.state;\n const { application, pipeline, stage } = this.props;\n const { capacity, diskQuota, memory, target } = stage;\n const instanceCount = capacity.desired;\n const { TargetSelect } = NgReact;\n return (\n <div className=\"cloudfoundry-resize-asg-stage form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n onComponentUpdate={this.componentUpdated}\n component={stage}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n <div className=\"form-group\">\n <span className=\"col-md-3 sm-label-right\" />\n <div className=\"col-md-9\">\n <div className=\"col-md-3 sm-label-left\">Instances</div>\n <div className=\"col-md-3 sm-label-left\">Mem (MB)</div>\n <div className=\"col-md-3 sm-label-left\">Disk (MB)</div>\n </div>\n <StageConfigField label=\"Match capacity\">\n <div className=\"col-md-3\">\n <input\n type=\"number\"\n key=\"instanceCount\"\n onChange={this.instanceCountUpdated}\n value={instanceCount}\n className=\"form-control input-sm\"\n />\n </div>\n <div className=\"col-md-3\">\n <input\n type=\"number\"\n key=\"memory\"\n onChange={this.memoryUpdated}\n value={memory}\n className=\"form-control input-sm\"\n />\n </div>\n <div className=\"col-md-3\">\n <input\n type=\"number\"\n key=\"diskQuota\"\n onChange={this.diskQuotaUpdated}\n value={diskQuota}\n className=\"form-control input-sm\"\n />\n </div>\n <div className=\"col-md-9 col-md-offset-3\">\n <em className=\"subinput-note\">Scaled capacity will match the numbers entered</em>\n </div>\n </StageConfigField>\n </div>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\n\nimport { CloudFoundryResizeAsgStageConfig } from './CloudFoundryResizeAsgStageConfig';\nimport type { IInstanceFieldSizeValidationConfig } from '../../config/validation/instanceSize.validator';\n\nconst diskValidator: IInstanceFieldSizeValidationConfig = {\n type: 'cfInstanceSizeField',\n fieldName: 'diskQuota',\n fieldLabel: 'Disk Mb',\n min: 256,\n preventSave: true,\n};\n\nconst instanceCountValidator: IInstanceFieldSizeValidationConfig = {\n type: 'cfInstanceSizeField',\n fieldName: 'capacity.desired',\n fieldLabel: 'Instances',\n min: 0,\n preventSave: true,\n};\n\nconst memoryValidator: IInstanceFieldSizeValidationConfig = {\n type: 'cfInstanceSizeField',\n fieldName: 'memory',\n fieldLabel: 'Mem Mb',\n min: 256,\n preventSave: true,\n};\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryResizeAsgStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'resizeServerGroup',\n provides: 'resizeServerGroup',\n validators: [\n {\n type: 'cfTargetImpedance',\n message:\n 'This pipeline will attempt to resize a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n instanceCountValidator,\n memoryValidator,\n diskValidator,\n ],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IPipeline, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, StageConfigField } from '@spinnaker/core';\nimport { AccountRegionClusterSelector } from '../../../presentation';\n\nexport interface ICloudFoundryRollbackClusterStageProps extends IStageConfigProps {\n pipeline: IPipeline;\n}\n\nexport interface ICloudFoundryRollbackClusterStageConfigState {\n accounts: IAccount[];\n}\n\nexport class CloudFoundryRollbackClusterStageConfig extends React.Component<\n ICloudFoundryRollbackClusterStageProps,\n ICloudFoundryRollbackClusterStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: ICloudFoundryRollbackClusterStageProps) {\n super(props);\n\n this.props.updateStageField({\n cloudProvider: 'cloudfoundry',\n regions: this.props.stage.regions || [],\n targetHealthyRollbackPercentage: 100,\n });\n\n this.state = { accounts: [] };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private waitTimeBetweenRegionsUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const time = parseInt(event.target.value || '0', 10);\n this.props.updateStageField({ waitTimeBetweenRegions: time });\n };\n\n private componentUpdate = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n regions: stage.regions,\n cluster: stage.cluster,\n moniker: stage.moniker,\n });\n };\n\n public render() {\n const { application, pipeline, stage } = this.props;\n const { waitTimeBetweenRegions } = stage;\n const { accounts } = this.state;\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n onComponentUpdate={this.componentUpdate}\n component={stage}\n />\n )}\n\n {stage.regions.length > 1 && (\n <StageConfigField label=\"Wait\">\n <input\n type=\"number\"\n min=\"0\"\n value={waitTimeBetweenRegions}\n onChange={this.waitTimeBetweenRegionsUpdated}\n className=\"form-control input-sm inline-number\"\n />\n seconds between regional rollbacks.\n </StageConfigField>\n )}\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\n\nimport { CloudFoundryRollbackClusterStageConfig } from './CloudFoundryRollbackClusterStageConfig';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n provides: 'rollbackCluster',\n key: 'rollbackCluster',\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryRollbackClusterStageConfig,\n controller: 'cfRollbackClusterStageCtrl',\n validators: [\n { type: 'requiredField', preventSave: true, fieldName: 'cluster' },\n { type: 'requiredField', preventSave: true, fieldName: 'regions' },\n { type: 'requiredField', preventSave: true, fieldName: 'credentials', fieldLabel: 'account' },\n ],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, NgReact, SpelText, StageConfigField, StageConstants, TextInput } from '@spinnaker/core';\nimport { AccountRegionClusterSelector } from '../../../presentation';\n\nexport interface ICloudFoundryRunTaskStageConfigState {\n accounts: IAccount[];\n region: string;\n}\n\nexport class CloudFoundryRunJobStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryRunTaskStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n region: '',\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n this.props.stageFieldUpdated();\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private componentUpdated = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n region: stage.region,\n cluster: stage.cluster,\n });\n };\n\n public render() {\n const { application, stage } = this.props;\n const { target, jobName, command, logsUrl } = stage;\n const { accounts } = this.state;\n const { TargetSelect } = NgReact;\n\n return (\n <div className=\"cloudfoundry-resize-asg-stage form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n onComponentUpdate={this.componentUpdated}\n component={stage}\n isSingleRegion={true}\n />\n <StageConfigField label=\"Target\">\n <TargetSelect\n model={{ target }}\n options={StageConstants.TARGET_LIST}\n onChange={(t) => this.props.updateStageField({ target: t })}\n />\n </StageConfigField>\n <StageConfigField label=\"Job Name\" helpKey={'cf.runJob.jobName'}>\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={(e) => this.props.updateStageField({ jobName: e.target.value })}\n value={jobName}\n maxLength={238}\n />\n </StageConfigField>\n <StageConfigField label=\"Command\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={(e) => this.props.updateStageField({ command: e.target.value })}\n value={command}\n />\n </StageConfigField>\n <StageConfigField label=\"Logs URL\" helpKey={'cf.runJob.logsUrl'}>\n <SpelText\n placeholder=\"\"\n onChange={(value) => this.props.updateStageField({ logsUrl: value })}\n value={logsUrl}\n pipeline={this.props.pipeline}\n docLink={false}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import { bindAll } from 'lodash';\nimport React from 'react';\nimport { Button, Modal } from 'react-bootstrap';\n\nimport type { IInstanceConsoleOutput } from '@spinnaker/core';\nimport { InstanceReader } from '@spinnaker/core';\n\nexport enum CloudFoundryRecentLogsType {\n APP = 'app',\n TASK = 'task',\n}\n\nexport interface ICloudFoundryRecentLogsProps {\n account: string;\n region: string;\n resourceDisplayName: string;\n resourceGuid: string;\n logsType: CloudFoundryRecentLogsType;\n resourceInstanceIndex?: number;\n}\n\nexport interface ICloudFoundryRecentLogsState {\n logs: string;\n showModal: boolean;\n errorMessage: string;\n}\n\nexport class CloudFoundryRecentLogs extends React.Component<\n ICloudFoundryRecentLogsProps,\n ICloudFoundryRecentLogsState\n> {\n constructor(props: ICloudFoundryRecentLogsProps) {\n super(props);\n this.state = {\n logs: '',\n showModal: false,\n errorMessage: null,\n };\n bindAll(this, ['open', 'close', 'onClick']);\n }\n\n private canShow(): boolean {\n const { resourceGuid } = this.props;\n return resourceGuid !== ''; // or null?\n }\n\n private generateResourceId(): string {\n const { resourceGuid, logsType, resourceInstanceIndex } = this.props;\n const optionalInstanceIndex = logsType === CloudFoundryRecentLogsType.APP ? `:${resourceInstanceIndex}` : '';\n return `${logsType}:${resourceGuid}${optionalInstanceIndex}`;\n }\n\n public close() {\n this.setState({ showModal: false });\n }\n\n public open() {\n this.setState({ showModal: true });\n }\n\n public onClick() {\n const { account, region } = this.props;\n InstanceReader.getConsoleOutput(account, region, this.generateResourceId(), 'cloudfoundry')\n .then((response: IInstanceConsoleOutput) => {\n this.setState({\n logs: response.output as string,\n });\n this.open();\n })\n .catch((exception: any) => {\n this.setState({ errorMessage: exception.data.message });\n this.open();\n });\n }\n\n public render() {\n const { showModal, logs, errorMessage } = this.state;\n if (this.canShow()) {\n return (\n <div>\n <a onClick={this.onClick} className=\"clickable\">\n Recent\n </a>\n <Modal show={showModal} onHide={this.close} dialogClassName=\"modal-lg modal-fullscreen\">\n <Modal.Header closeButton={true}>\n <Modal.Title>Recent logs</Modal.Title>\n <h5>\n CloudFoundry {this.props.logsType.valueOf()} name: {this.props.resourceDisplayName}\n </h5>\n </Modal.Header>\n <Modal.Body>\n {logs.length > 0 && (\n <>\n <pre className=\"body-small\">{logs}</pre>\n </>\n )}\n\n {logs.length === 0 && <>No logs returned.</>}\n\n {errorMessage && <pre className=\"body-small\">{errorMessage}</pre>}\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={this.close}>Close</Button>\n </Modal.Footer>\n </Modal>\n </div>\n );\n } else {\n return null;\n }\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection } from '@spinnaker/core';\nimport {\n CloudFoundryRecentLogs,\n CloudFoundryRecentLogsType,\n} from '../../../presentation/widgets/recentLogs/CloudFoundryRecentLogs';\n\nexport class RunJobExecutionDetails extends React.Component<IExecutionDetailsSectionProps> {\n public static title = 'runJobDetails';\n\n public render() {\n const { stage, name, current } = this.props;\n const { context } = stage;\n const account = context['deploy.account.name'];\n const region = get(stage, ['context', 'jobStatus', 'location'], '');\n const taskId = get(stage, ['context', 'jobStatus', 'id'], '');\n const taskName = get(stage, ['context', 'jobStatus', 'name'], '');\n const logsUrl: string = get(stage, ['context', 'logsUrl']);\n\n return (\n <ExecutionDetailsSection name={name} current={current}>\n <div className=\"row\">\n <div className=\"col-md-9\">\n <dl className=\"dl-narrow dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n {region && (\n <>\n <dt>Region</dt>\n <dd>{region}</dd>\n <dt>Logs</dt>\n <dd>\n <CloudFoundryRecentLogs\n account={account}\n region={region}\n resourceDisplayName={taskName}\n resourceGuid={taskId}\n logsType={CloudFoundryRecentLogsType.TASK}\n />\n </dd>\n {logsUrl && (\n <dd>\n <a target=\"_blank\" href={logsUrl}>\n External\n </a>\n </dd>\n )}\n </>\n )}\n {!region && <div className=\"well\">Collecting additional details...</div>}\n </dl>\n </div>\n </div>\n </ExecutionDetailsSection>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryRunJobStageConfig } from './CloudFoundryRunJobStageConfig';\nimport { RunJobExecutionDetails } from './RunJobExecutionDetails';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n component: CloudFoundryRunJobStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n key: 'runJob',\n provides: 'runJob',\n restartable: true,\n executionDetailsSections: [ExecutionDetailsTasks, RunJobExecutionDetails],\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'credentials' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'command' },\n ],\n});\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryShareServiceExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'service.account', undefined);\n const region = get(context, 'service.region', undefined);\n const serviceInstanceName = get(context, 'serviceInstanceName', undefined);\n const shareToRegions = get(context, 'shareToRegions', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Region</dt>\n <dd>\n {region}\n <br />\n </dd>\n <dt>Service Instance Name</dt>\n <dd>\n {serviceInstanceName}\n <br />\n </dd>\n <dt>Sharing Regions</dt>\n <dd>\n {shareToRegions.join(', ')}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n <StageExecutionLogs stage={stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace CloudFoundryShareServiceExecutionDetails {\n export const title = 'cloudfoundryShareServiceConfig';\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';\n\ninterface ICloudFoundryShareServiceStageConfigState {\n accounts: IAccount[];\n regions: string[];\n shareToRegionsList: string[];\n}\n\nexport class CloudFoundryShareServiceStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryShareServiceStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n regions: [],\n shareToRegionsList: [],\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n if (this.props.stage.credentials) {\n this.clearAndReloadRegions();\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private clearAndReloadRegions = () => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const { region } = this.props.stage;\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions });\n if (region) {\n this.clearAndResetShareToRegionList(region, regions);\n }\n });\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceInstanceName: event.target.value });\n };\n\n private clearAndResetShareToRegionList = (region: string, regions: string[]) => {\n this.setState({ shareToRegionsList: regions.filter((r) => r !== region) });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const credentials = option.target.value;\n this.setState({\n regions: [],\n shareToRegionsList: [],\n });\n this.props.updateStageField({\n credentials,\n region: '',\n shareToRegions: [],\n });\n if (credentials) {\n this.clearAndReloadRegions();\n }\n };\n\n private regionUpdated = (option: Option<string>) => {\n const region = option.target.value;\n this.setState({ shareToRegionsList: [] });\n this.props.updateStageField({\n region,\n shareToRegions: [],\n });\n this.clearAndResetShareToRegionList(region, this.state.regions);\n };\n\n private shareToRegionsUpdated = (option: Option<string>) => {\n this.props.updateStageField({ shareToRegions: option.map((o: Option) => o.value) });\n };\n\n public render() {\n const { credentials, region, serviceInstanceName, shareToRegions } = this.props.stage;\n const { accounts, regions, shareToRegionsList } = this.state;\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts.map((it) => it.name)}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <ReactSelectInput clearable={false} onChange={this.regionUpdated} value={region} stringOptions={regions} />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Share To Regions\">\n <Select\n options={\n shareToRegionsList &&\n shareToRegionsList.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n multi={true}\n clearable={false}\n value={shareToRegions}\n onChange={this.shareToRegionsUpdated}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryShareServiceExecutionDetails } from './CloudFoundryShareServiceExecutionDetails';\nimport { CloudFoundryShareServiceStageConfig } from './CloudFoundryShareServiceStageConfig';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n provides: 'shareService',\n key: 'shareService',\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryShareServiceStageConfig,\n executionDetailsSections: [CloudFoundryShareServiceExecutionDetails, ExecutionDetailsTasks],\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },\n ],\n});\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\nimport { CloudFoundryLoadBalancersExecutionDetails, CloudFoundryLoadBalancersStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryLoadBalancersStageConfig,\n description: 'Unmap a load balancer',\n executionDetailsSections: [CloudFoundryLoadBalancersExecutionDetails, ExecutionDetailsTasks],\n key: 'unmapLoadBalancers',\n label: 'Unmap Load Balancer',\n validators: [\n { type: 'requiredField', preventSave: true, fieldName: 'cluster' },\n { type: 'requiredField', preventSave: true, fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', preventSave: true, fieldName: 'region' },\n { type: 'requiredField', preventSave: true, fieldName: 'target' },\n { type: 'cfRequiredRoutesField', preventSave: true, fieldName: 'loadBalancerNames' },\n ],\n});\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryUnshareServiceExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'service.account', undefined);\n const serviceInstanceName = get(context, 'serviceInstanceName', undefined);\n const unshareFromRegions = get(context, 'unshareFromRegions', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Service Instance Name</dt>\n <dd>\n {serviceInstanceName}\n <br />\n </dd>\n <dt>Unsharing Regions</dt>\n <dd>\n {unshareFromRegions.join(', ')}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n <StageExecutionLogs stage={stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace CloudFoundryUnshareServiceExecutionDetails {\n export const title = 'cloudfoundryUnshareServiceConfig';\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';\n\ninterface ICloudFoundryShareServiceStageConfigState {\n accounts: IAccount[];\n regions: string[];\n}\n\nexport class CloudFoundryUnshareServiceStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryShareServiceStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n regions: [],\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n if (this.props.stage.credentials) {\n this.clearAndReloadRegions();\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private clearAndReloadRegions = () => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions });\n });\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceInstanceName: event.target.value });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const credentials = option.target.value;\n this.setState({ regions: [] });\n this.props.updateStageField({\n credentials,\n unshareFromRegions: [],\n });\n if (credentials) {\n this.clearAndReloadRegions();\n }\n };\n\n private unshareFromRegionsUpdated = (option: Option<string>) => {\n this.props.updateStageField({ unshareFromRegions: option.map((o: Option) => o.value) });\n };\n\n public render() {\n const { credentials, serviceInstanceName, unshareFromRegions } = this.props.stage;\n const { accounts, regions } = this.state;\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts.map((it) => it.name)}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Unshare From Regions\">\n <Select\n options={\n regions &&\n regions.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n multi={true}\n clearable={false}\n value={unshareFromRegions}\n onChange={this.unshareFromRegionsUpdated}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryUnshareServiceExecutionDetails } from './CloudFoundryUnshareServiceExecutionDetails';\nimport { CloudFoundryUnshareServiceStageConfig } from './CloudFoundryUnshareServiceStageConfig';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n provides: 'unshareService',\n key: 'unshareService',\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryUnshareServiceStageConfig,\n controller: 'cfUnshareServiceStageCtrl',\n executionDetailsSections: [CloudFoundryUnshareServiceExecutionDetails, ExecutionDetailsTasks],\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },\n ],\n});\n","import React from 'react';\n\nimport { AccountTag, CollapsibleSection, timestamp } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\nimport type { ICloudFoundryBuildpack } from '../../../domain';\n\nexport class ServerGroupInformationSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <CollapsibleSection heading=\"Server Group Information\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Created</dt>\n {serverGroup.pipelineId ? (\n <dd>\n <a target=\"_blank\" href={'/#/applications/' + serverGroup.app + '/executions/' + serverGroup.pipelineId}>\n {timestamp(serverGroup.createdTime)}\n </a>\n </dd>\n ) : (\n <dd>{timestamp(serverGroup.createdTime)}</dd>\n )}\n <dt>Account</dt>\n <dd>\n <AccountTag account={serverGroup.account} />\n </dd>\n <dt>Organization</dt>\n <dd>{serverGroup.space.organization.name}</dd>\n <dt>Space</dt>\n <dd>{serverGroup.space.name}</dd>\n {serverGroup.droplet && (\n <div>\n <dt>Rootfs</dt>\n <dd>{serverGroup.droplet.stack}</dd>\n <dt>Buildpack</dt>\n {serverGroup.droplet.buildpacks ? (\n serverGroup.droplet.buildpacks.map(function (buildpack: ICloudFoundryBuildpack, index: number) {\n return (\n <dd key={index}>\n {buildpack.name} {buildpack.version}\n </dd>\n );\n })\n ) : (\n <dd>n/a</dd>\n )}\n </div>\n )}\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class ApplicationManagerSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n const { appsManagerUri } = serverGroup;\n return (\n <>\n {appsManagerUri && (\n <CollapsibleSection heading=\"Apps Manager\" defaultExpanded={true}>\n <div>\n <a href={appsManagerUri} target=\"_blank\">\n Apps Manager\n </a>\n </div>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class MetricsSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n const { metricsUri } = serverGroup;\n return (\n <>\n {metricsUri && (\n <CollapsibleSection heading=\"Metrics\" defaultExpanded={true}>\n <div>\n <a href={metricsUri} target=\"_blank\">\n Metrics\n </a>\n </div>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class ServerGroupSizingSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <CollapsibleSection heading=\"Server Group Sizing\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Instances</dt>\n <dd>{serverGroup.instances.length}</dd>\n <dt>Disk (MB)</dt>\n <dd>{serverGroup.diskQuota}</dd>\n <dt>Memory (MB)</dt>\n <dd>{serverGroup.memory}</dd>\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class HealthCheckSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <CollapsibleSection heading=\"Health Check\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Type</dt>\n <dd>{serverGroup.healthCheckType === undefined ? 'port' : serverGroup.healthCheckType}</dd>\n {serverGroup.healthCheckType === 'http' && (\n <div>\n <dt>Endpoint</dt>\n <dd>{serverGroup.healthCheckHttpEndpoint}</dd>\n </div>\n )}\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class PackageSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <>\n {serverGroup.droplet && serverGroup.droplet.sourcePackage && (\n <CollapsibleSection heading=\"Package\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Checksum</dt>\n <dd>{serverGroup.droplet.sourcePackage.checksum}</dd>\n </dl>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class BuildSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <CollapsibleSection heading=\"Build\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n {serverGroup.ciBuild && serverGroup.ciBuild.jobName && (\n <div>\n <dt>Job Name</dt>\n <dd>{serverGroup.ciBuild.jobName}</dd>\n </div>\n )}\n {serverGroup.ciBuild && serverGroup.ciBuild.jobNumber && (\n <div>\n <dt>Job Number</dt>\n {serverGroup.ciBuild.jobUrl ? (\n <dd>\n <a target=\"_blank\" href={serverGroup.ciBuild.jobUrl}>\n {serverGroup.ciBuild.jobNumber}\n </a>\n </dd>\n ) : (\n <dd>{serverGroup.ciBuild.jobNumber}</dd>\n )}\n </div>\n )}\n {serverGroup.appArtifact && serverGroup.appArtifact.name && (\n <div>\n <dt>Artifact Name</dt>\n <dd>{serverGroup.appArtifact.name}</dd>\n </div>\n )}\n {serverGroup.appArtifact && serverGroup.appArtifact.version && (\n <div>\n <dt>Version</dt>\n {serverGroup.appArtifact.url ? (\n <dd>\n <a target=\"_blank\" href={serverGroup.appArtifact.url}>\n {serverGroup.appArtifact.version}\n </a>\n </dd>\n ) : (\n <dd>{serverGroup.appArtifact.version}</dd>\n )}\n </div>\n )}\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import { isEmpty } from 'lodash';\nimport React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\nimport type { ICloudFoundryServiceInstance } from '../../../domain';\n\nexport class BoundServicesSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <>\n {!isEmpty(serverGroup.serviceInstances) && (\n <CollapsibleSection heading=\"Bound Services\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n {serverGroup.serviceInstances.map(function (service: ICloudFoundryServiceInstance, index: number) {\n return (\n <div key={index}>\n <dt>Name</dt>\n <dd>{service.name}</dd>\n <dt>Plan</dt>\n <dd>{service.plan}</dd>\n <dt>Tags</dt>\n {service.tags && <dd>{service.tags.join(', ')}</dd>}\n </div>\n );\n })}\n </dl>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import { isEmpty } from 'lodash';\nimport React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class EnvironmentVariablesSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <>\n {!isEmpty(serverGroup.env) && (\n <CollapsibleSection heading=\"Environment Variables\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n {Object.entries(serverGroup.env).map(([k, v], index) => {\n return (\n <div key={index}>\n <dt>{k}</dt>\n <dd>{v}</dd>\n </div>\n );\n })}\n </dl>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import { defaults } from 'lodash';\n\nimport type { ICloudFoundryEnvVar, ICloudFoundryServerGroup } from '../domain';\n\nexport class CloudFoundryServerGroupTransformer {\n public static $inject = ['$q'];\n public constructor(private $q: ng.IQService) {}\n\n public normalizeServerGroupDetails(serverGroup: ICloudFoundryServerGroup): ICloudFoundryServerGroup {\n return serverGroup;\n }\n\n public normalizeServerGroup(serverGroup: ICloudFoundryServerGroup): PromiseLike<ICloudFoundryServerGroup> {\n return this.$q.resolve(serverGroup);\n }\n\n public convertServerGroupCommandToDeployConfiguration(base: any): any {\n const command = defaults({ viewState: [] }, base);\n command.cloudProvider = 'cloudfoundry';\n command.provider = 'cloudfoundry';\n command.account = command.credentials;\n\n delete command.viewState;\n delete command.selectedProvider;\n\n if (command.manifest.type === 'direct') {\n command.manifest.env = this.convertManifestEnv(command.manifest.environment);\n } else {\n command.manifest.env = command.manifest.environment;\n }\n\n return command;\n }\n\n private convertManifestEnv(envVars: ICloudFoundryEnvVar[]): {} {\n const newEnv = Object.create(null);\n for (const envVar of envVars) {\n newEnv[envVar.key] = envVar.value;\n }\n return newEnv;\n }\n}\n","import type { Formik } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\n\nimport type { Application, IModalComponentProps, IServerGroup, IServerGroupJob } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\nimport { Routes } from '../../../presentation/forms/serverGroup';\n\nexport interface ICloudFoundryLoadBalancerLinksModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: ICloudFoundryServerGroup;\n}\n\nexport interface ICloudFoundryLoadBalancerLinksModalState {\n initialValues: ICloudFoundryLoadBalancerLinksModalValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryLoadBalancerLinksModalValues {\n routes: string[];\n}\n\nexport interface ICloudFoundryLoadBalancerLinkJob extends IServerGroupJob {\n routes: string[];\n serverGroupName: string;\n}\n\nexport class CloudFoundryMapLoadBalancersModal extends React.Component<\n ICloudFoundryLoadBalancerLinksModalProps,\n ICloudFoundryLoadBalancerLinksModalState\n> {\n public static defaultProps: Partial<ICloudFoundryLoadBalancerLinksModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancerLinksModalValues>>();\n\n public static show(props: ICloudFoundryLoadBalancerLinksModalProps): Promise<ICloudFoundryLoadBalancerLinkJob> {\n return ReactModal.show(CloudFoundryMapLoadBalancersModal, props, {});\n }\n\n constructor(props: ICloudFoundryLoadBalancerLinksModalProps) {\n super(props);\n\n this.state = {\n initialValues: {\n routes: [''],\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Mapping a route to your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n }\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = (values: ICloudFoundryLoadBalancerLinksModalValues): void => {\n const { routes } = values;\n const { serverGroup } = this.props;\n const coreServerGroup: IServerGroup = {\n account: serverGroup.account,\n cloudProvider: serverGroup.cloudProvider,\n cluster: serverGroup.cluster,\n instanceCounts: serverGroup.instanceCounts,\n instances: serverGroup.instances,\n loadBalancers: routes,\n name: serverGroup.name,\n region: serverGroup.region,\n type: serverGroup.type,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.mapLoadBalancers(coreServerGroup, this.props.application, {\n serverGroupName: serverGroup.name,\n });\n });\n };\n\n public render() {\n const { serverGroup } = this.props;\n const { initialValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryLoadBalancerLinksModalValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Map route to {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n <Routes fieldName=\"routes\" isRequired={true} singleRouteOnly={true} />\n </Form>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={() => this.submit(formik.values)}\n disabled={!formik.isValid}\n >\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import type { Formik } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\n\nimport type { Application, IModalComponentProps, IServerGroup, IServerGroupJob } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\nimport { Routes } from '../../../presentation/forms/serverGroup';\n\nexport interface ICloudFoundryLoadBalancerLinksModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: ICloudFoundryServerGroup;\n}\n\nexport interface ICloudFoundryLoadBalancerLinksModalState {\n initialValues: ICloudFoundryLoadBalancerLinksModalValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryLoadBalancerLinksModalValues {\n routes: string[];\n}\n\nexport interface ICloudFoundryLoadBalancerLinkJob extends IServerGroupJob {\n routes: string[];\n serverGroupName: string;\n}\n\nexport class CloudFoundryUnmapLoadBalancersModal extends React.Component<\n ICloudFoundryLoadBalancerLinksModalProps,\n ICloudFoundryLoadBalancerLinksModalState\n> {\n public static defaultProps: Partial<ICloudFoundryLoadBalancerLinksModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancerLinksModalValues>>();\n\n public static show(props: ICloudFoundryLoadBalancerLinksModalProps): Promise<ICloudFoundryLoadBalancerLinkJob> {\n return ReactModal.show(CloudFoundryUnmapLoadBalancersModal, props, {});\n }\n\n constructor(props: ICloudFoundryLoadBalancerLinksModalProps) {\n super(props);\n\n this.state = {\n initialValues: {\n routes: [''],\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Unmapping a route from your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n }\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = (values: ICloudFoundryLoadBalancerLinksModalValues): void => {\n const { routes } = values;\n const { serverGroup } = this.props;\n const coreServerGroup: IServerGroup = {\n account: serverGroup.account,\n cloudProvider: serverGroup.cloudProvider,\n cluster: serverGroup.cluster,\n instanceCounts: serverGroup.instanceCounts,\n instances: serverGroup.instances,\n loadBalancers: routes,\n name: serverGroup.name,\n region: serverGroup.region,\n type: serverGroup.type,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.unmapLoadBalancers(coreServerGroup, this.props.application, {\n serverGroupName: serverGroup.name,\n });\n });\n };\n\n public render() {\n const { serverGroup } = this.props;\n const { initialValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryLoadBalancerLinksModalValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Unmap route from {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n <Routes fieldName=\"routes\" isRequired={true} singleRouteOnly={true} />\n </Form>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={() => this.submit(formik.values)}\n disabled={!formik.isValid}\n >\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import type { Formik, FormikProps } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\n\nimport type { Application, ICapacity, IModalComponentProps, IServerGroupJob } from '@spinnaker/core';\nimport {\n FormikFormField,\n ModalClose,\n noop,\n NumberInput,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\n\nexport interface ICloudFoundryResizeServerGroupModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: ICloudFoundryServerGroup;\n}\n\nexport interface ICloudFoundryResizeServerGroupModalState {\n initialValues: ICloudFoundryResizeServerGroupValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryResizeServerGroupValues {\n desired: number | string;\n diskQuota?: number;\n memory?: number;\n reason?: string;\n}\n\nexport interface ICloudFoundryResizeJob extends IServerGroupJob {\n capacity?: Partial<ICapacity>;\n diskQuota?: number;\n instanceCount?: number;\n memory?: number;\n serverGroupName: string;\n reason?: string;\n}\n\nexport class CloudFoundryResizeServerGroupModal extends React.Component<\n ICloudFoundryResizeServerGroupModalProps,\n ICloudFoundryResizeServerGroupModalState\n> {\n public static defaultProps: Partial<ICloudFoundryResizeServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<ICloudFoundryResizeServerGroupValues>>();\n\n public static show(props: ICloudFoundryResizeServerGroupModalProps): Promise<ICloudFoundryResizeJob> {\n const modalProps = {};\n return ReactModal.show(CloudFoundryResizeServerGroupModal, props, modalProps);\n }\n\n constructor(props: ICloudFoundryResizeServerGroupModalProps) {\n super(props);\n\n const { capacity, diskQuota, memory } = props.serverGroup;\n const { desired } = capacity;\n this.state = {\n initialValues: {\n desired,\n diskQuota: diskQuota,\n memory: memory,\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Resizing your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n }\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = (values: ICloudFoundryResizeServerGroupValues): void => {\n const { desired, diskQuota, memory, reason } = values;\n const { serverGroup, application } = this.props;\n const capacity = {\n min: desired,\n max: desired,\n desired,\n };\n\n const command: ICloudFoundryResizeJob = {\n capacity,\n diskQuota,\n memory,\n reason,\n serverGroupName: serverGroup.name,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.resizeServerGroup(serverGroup, application, command);\n });\n };\n\n private renderDesired(formik: FormikProps<ICloudFoundryResizeServerGroupValues>): JSX.Element {\n const { serverGroup } = this.props;\n const { capacity } = serverGroup;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Current size</div>\n <div className=\"col-md-4\">\n <div className=\"horizontal middle\">\n <input type=\"number\" className=\"NumberInput form-control\" value={capacity.desired} disabled={true} />\n <div className=\"sp-padding-xs-xaxis\">instances</div>\n </div>\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Resize to</div>\n <div className=\"col-md-4\">\n <div className=\"horizontal middle\">\n <FormikFormField\n name=\"desired\"\n input={(props) => <NumberInput {...props} min={0} />}\n touched={true}\n required={true}\n onChange={(value) => {\n formik.setFieldValue('min', value);\n formik.setFieldValue('max', value);\n }}\n />\n <div className=\"sp-padding-xs-xaxis\">instances</div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n private renderQuota(\n formik: FormikProps<ICloudFoundryResizeServerGroupValues>,\n field: string,\n fieldLabel: string,\n initialValue: number,\n ): JSX.Element {\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Current size</div>\n <div className=\"col-md-5\">\n <div className=\"horizontal middle\">\n <div className=\"StandardFieldLayout flex-container-h baseline margin-between-lg\">\n <input type=\"number\" className=\"NumberInput form-control\" value={initialValue} disabled={true} />\n </div>\n <div className=\"sp-padding-xs-xaxis\">{fieldLabel}</div>\n </div>\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Resize to</div>\n <div className=\"col-md-5\">\n <div className=\"horizontal middle\">\n <FormikFormField\n name={field}\n input={(props) => <NumberInput {...props} min={64} />}\n touched={true}\n required={true}\n onChange={(value) => {\n formik.setFieldValue('min', value);\n formik.setFieldValue('max', value);\n }}\n />\n <div className=\"sp-padding-xs-xaxis\">{fieldLabel}</div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n public render() {\n const { serverGroup } = this.props;\n const { diskQuota, memory } = serverGroup;\n const { initialValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryResizeServerGroupValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Resize {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n {this.renderDesired(formik)}\n {this.renderQuota(formik, 'diskQuota', 'Disk (MB)', diskQuota)}\n {this.renderQuota(formik, 'memory', 'Mem (MB)', memory)}\n <TaskReason reason={formik.values.reason} onChange={(val) => formik.setFieldValue('reason', val)} />\n </Form>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={() => this.submit(formik.values)}\n disabled={!formik.isValid}\n >\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import type { Formik } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\n\nimport type { Application, IModalComponentProps, IServerGroupJob } from '@spinnaker/core';\nimport {\n FormikFormField,\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n ReactSelectInput,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\n\nexport interface ICloudFoundryRollbackServerGroupModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: ICloudFoundryServerGroup;\n previousServerGroup: ICloudFoundryServerGroup;\n allServerGroups: ICloudFoundryServerGroup[];\n disabledServerGroups: ICloudFoundryServerGroup[];\n}\n\nexport interface ICloudFoundryRollbackServerGroupModalState {\n initialValues: ICloudFoundryRollbackServerGroupValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryRollbackServerGroupValues {\n restoreServerGroupName: string;\n reason?: string;\n}\n\nexport interface ICloudFoundryRollbackJob extends IServerGroupJob {\n rollbackType: string;\n rollbackContext: {\n rollbackServerGroupName: string;\n restoreServerGroupName: string;\n targetHealthyRollbackPercentage: number;\n };\n}\n\nexport class CloudFoundryRollbackServerGroupModal extends React.Component<\n ICloudFoundryRollbackServerGroupModalProps,\n ICloudFoundryRollbackServerGroupModalState\n> {\n public static defaultProps: Partial<ICloudFoundryRollbackServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<ICloudFoundryRollbackServerGroupValues>>();\n\n public static show(props: ICloudFoundryRollbackServerGroupModalProps): Promise<ICloudFoundryRollbackJob> {\n const modalProps = {};\n return ReactModal.show(CloudFoundryRollbackServerGroupModal, props, modalProps);\n }\n\n constructor(props: ICloudFoundryRollbackServerGroupModalProps) {\n super(props);\n\n const { previousServerGroup, serverGroup } = props;\n const { name } = serverGroup;\n this.state = {\n initialValues: {\n restoreServerGroupName: previousServerGroup ? previousServerGroup.name : undefined,\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Rollback ' + name,\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n }\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = (values: ICloudFoundryRollbackServerGroupValues): void => {\n const { reason, restoreServerGroupName } = values;\n const { serverGroup, application } = this.props;\n\n const command: ICloudFoundryRollbackJob = {\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n restoreServerGroupName,\n targetHealthyRollbackPercentage: 100,\n },\n reason,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.rollbackServerGroup(serverGroup, application, command);\n });\n };\n\n public render() {\n const { allServerGroups, serverGroup } = this.props;\n const { initialValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryRollbackServerGroupValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Rollback {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n <div className=\"row\" style={{ marginTop: '10px', marginBottom: '10px' }}>\n <div className=\"col-md-3 sm-label-right\">Restore to</div>\n <div className=\"col-md-7\">\n <FormikFormField\n name=\"restoreServerGroupName\"\n fastField={true}\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={\n allServerGroups && allServerGroups.map((sg: ICloudFoundryServerGroup) => sg.name)\n }\n clearable={false}\n />\n )}\n required={true}\n />\n </div>\n </div>\n <TaskReason reason={formik.values.reason} onChange={(val) => formik.setFieldValue('reason', val)} />\n </Form>\n <div className=\"row\">\n <div className=\"col-sm-4 sm-label-right\">Rollback Operations</div>\n </div>\n <div className=\"row\">\n <div className=\"col-sm-11 col-sm-offset-1\">\n <ol>\n <li>\n Enable <em>{formik.values.restoreServerGroupName || 'previous server group'}</em>\n </li>\n <li>Disable {serverGroup.name}</li>\n </ol>\n <p>\n This rollback will affect server groups in {serverGroup.account} ({serverGroup.region}\n ).\n </p>\n </div>\n </div>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button type=\"submit\" className=\"btn btn-primary\" onClick={() => this.submit(formik.values)}>\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import { filter, find, get, orderBy } from 'lodash';\nimport React from 'react';\nimport { Dropdown, Tooltip } from 'react-bootstrap';\n\nimport type { IOwnerOption, IServerGroupActionsProps, IServerGroupJob } from '@spinnaker/core';\nimport {\n AddEntityTagLinks,\n ClusterTargetBuilder,\n ConfirmationModalService,\n ReactInjector,\n ServerGroupWarningMessageService,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { CloudFoundryServerGroupCommandBuilder } from '../configure';\nimport { CloudFoundryCreateServerGroupModal } from '../configure/wizard/CreateServerGroupModal';\nimport type { ICloudFoundryServerGroup } from '../../domain';\nimport { CloudFoundryMapLoadBalancersModal } from './mapLoadBalancers/CloudFoundryMapLoadBalancersModal';\nimport { CloudFoundryUnmapLoadBalancersModal } from './mapLoadBalancers/CloudFoundryUnmapLoadBalancersModal';\nimport { CloudFoundryResizeServerGroupModal } from './resize/CloudFoundryResizeServerGroupModal';\nimport { CloudFoundryRollbackServerGroupModal } from './rollback/CloudFoundryRollbackServerGroupModal';\n\nexport interface ICloudFoundryServerGroupActionsProps extends IServerGroupActionsProps {\n serverGroup: ICloudFoundryServerGroup;\n}\n\nexport interface ICloudFoundryServerGroupJob extends IServerGroupJob {\n serverGroupId: string;\n}\n\nexport class CloudFoundryServerGroupActions extends React.Component<ICloudFoundryServerGroupActionsProps> {\n private isEnableLocked(): boolean {\n if (this.props.serverGroup.isDisabled) {\n const resizeTasks = (this.props.serverGroup.runningTasks || []).filter((task) =>\n get(task, 'execution.stages', []).some((stage) => stage.type === 'resizeServerGroup'),\n );\n if (resizeTasks.length) {\n return true;\n }\n }\n return false;\n }\n\n private isRollbackEnabled(): boolean {\n const { app, serverGroup } = this.props;\n\n if (!serverGroup.isDisabled) {\n // enabled server groups are always a candidate for rollback\n return true;\n }\n\n // if the server group selected for rollback is disabled, ensure that at least one enabled server group exists\n return app\n .getDataSource('serverGroups')\n .data.some(\n (g: ICloudFoundryServerGroup) =>\n g.cluster === serverGroup.cluster &&\n g.region === serverGroup.region &&\n g.account === serverGroup.account &&\n !g.isDisabled,\n );\n }\n\n private hasDisabledInstances(): boolean {\n // server group may have disabled instances (out of service) but NOT itself be disabled\n return this.props.serverGroup.isDisabled || get(this.props.serverGroup, 'instanceCounts.outOfService', 0) > 0;\n }\n\n private destroyServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if (ReactInjector.$state.includes('**.serverGroup', stateParams)) {\n ReactInjector.$state.go('^');\n }\n },\n };\n\n const submitMethod = (params: ICloudFoundryServerGroupJob) => {\n params.serverGroupName = serverGroup.name;\n return ReactInjector.serverGroupWriter.destroyServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n interestingHealthProviderNames: undefined as string[],\n submitMethod,\n askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Cloud Foundry',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Cloud Foundry'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n private disableServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params: ICloudFoundryServerGroupJob) => {\n params.serverGroupName = serverGroup.name;\n return ReactInjector.serverGroupWriter.disableServerGroup(serverGroup, app.name, params);\n };\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n interestingHealthProviderNames: undefined as string[],\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Cloud Foundry',\n submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Cloud Foundry'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n private enableServerGroup = (): void => {\n if (!this.isRollbackEnabled()) {\n this.showEnableServerGroupModal();\n return;\n }\n\n const confirmationModalParams = {\n header: 'Rolling back?',\n body: `Spinnaker provides an orchestrated rollback feature to carefully restore a different version of this\n server group. Do you want to use the orchestrated rollback?`,\n buttonText: `Yes, let's start the orchestrated rollback`,\n cancelButtonText: 'No, I just want to enable the server group',\n };\n\n ConfirmationModalService.confirm(confirmationModalParams)\n .then(() => this.rollbackServerGroup())\n .catch(({ source }) => {\n // don't show the enable modal if the user cancels with the header button\n if (source === 'footer') {\n this.showEnableServerGroupModal();\n }\n });\n };\n\n private showEnableServerGroupModal(): void {\n const { app, serverGroup } = this.props;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params: ICloudFoundryServerGroupJob) => {\n params.serverGroupName = serverGroup.name;\n return ReactInjector.serverGroupWriter.enableServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n interestingHealthProviderNames: undefined as string[],\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Cloud Foundry',\n submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Cloud Foundry'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n }\n\n private rollbackServerGroup = (): void => {\n const { app } = this.props;\n\n let serverGroup: ICloudFoundryServerGroup = this.props.serverGroup;\n let previousServerGroup: ICloudFoundryServerGroup;\n let allServerGroups = (app.serverGroups.data as ICloudFoundryServerGroup[]).filter(\n (g) => g.cluster === serverGroup.cluster && g.region === serverGroup.region && g.account === serverGroup.account,\n );\n\n if (serverGroup.isDisabled) {\n // if the selected server group is disabled, it represents the server group that should be _rolled back to_\n previousServerGroup = serverGroup;\n\n /*\n * Find an existing server group to rollback, prefer the largest enabled server group.\n *\n * isRollbackEnabled() ensures that at least one enabled server group exists.\n */\n serverGroup = orderBy(\n allServerGroups.filter((g: ICloudFoundryServerGroup) => g.name !== previousServerGroup.name && !g.isDisabled),\n ['instanceCounts.total', 'createdTime'],\n ['desc', 'desc'],\n )[0] as ICloudFoundryServerGroup;\n }\n\n // the set of all server groups should not include the server group selected for rollback\n allServerGroups = allServerGroups.filter((g) => g.name !== serverGroup.name);\n\n if (allServerGroups.length === 1 && !previousServerGroup) {\n // if there is only one other server group, default to it being the rollback target\n previousServerGroup = allServerGroups[0];\n }\n const cluster = find(app.clusters, {\n name: serverGroup.cluster,\n account: serverGroup.account,\n serverGroups: [],\n });\n const disabledServerGroups: ICloudFoundryServerGroup[] = filter(cluster.serverGroups, {\n isDisabled: true,\n region: serverGroup.region,\n }) as ICloudFoundryServerGroup[];\n\n CloudFoundryRollbackServerGroupModal.show({\n serverGroup,\n previousServerGroup,\n disabledServerGroups: disabledServerGroups.sort((a, b) => b.name.localeCompare(a.name)),\n allServerGroups: allServerGroups.sort((a, b) => b.name.localeCompare(a.name)),\n application: app,\n });\n };\n\n private resizeServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n CloudFoundryResizeServerGroupModal.show({ application: app, serverGroup });\n };\n\n private mapServerGroupToLoadBalancers = (): void => {\n const { app, serverGroup } = this.props;\n CloudFoundryMapLoadBalancersModal.show({ application: app, serverGroup });\n };\n\n private unmapServerGroupFromLoadBalancers = (): void => {\n const { app, serverGroup } = this.props;\n CloudFoundryUnmapLoadBalancersModal.show({ application: app, serverGroup });\n };\n\n private cloneServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n const command = CloudFoundryServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup);\n const title = `Clone ${serverGroup.name}`;\n CloudFoundryCreateServerGroupModal.show({\n application: app,\n command,\n isSourceConstant: true,\n serverGroup,\n title,\n });\n };\n\n public render(): JSX.Element {\n const { app, serverGroup } = this.props;\n const { loadBalancers } = serverGroup;\n const showEntityTags = SETTINGS.feature && SETTINGS.feature.entityTags;\n const entityTagTargets: IOwnerOption[] = ClusterTargetBuilder.buildClusterTargets(serverGroup);\n\n return (\n <Dropdown className=\"dropdown\" id=\"server-group-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">Server Group Actions</Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n {this.isRollbackEnabled() && (\n <li>\n <a className=\"clickable\" onClick={this.rollbackServerGroup}>\n Rollback\n </a>\n </li>\n )}\n {this.isRollbackEnabled() && <li role=\"presentation\" className=\"divider\" />}\n <li>\n <a className=\"clickable\" onClick={this.resizeServerGroup}>\n Resize\n </a>\n </li>\n {!serverGroup.isDisabled && (\n <li>\n <a className=\"clickable\" onClick={this.disableServerGroup}>\n Disable\n </a>\n </li>\n )}\n {this.hasDisabledInstances() && !this.isEnableLocked() && (\n <li>\n <a className=\"clickable\" onClick={this.enableServerGroup}>\n Enable\n </a>\n </li>\n )}\n {this.isEnableLocked() && (\n <li className=\"disabled\">\n <Tooltip value=\"Cannot enable this server group until resize operation completes\" placement=\"left\">\n <a>\n <span className=\"small glyphicon glyphicon-lock\" /> Enable\n </a>\n </Tooltip>\n </li>\n )}\n <li>\n <a className=\"clickable\" onClick={this.destroyServerGroup}>\n Destroy\n </a>\n </li>\n <li>\n <a className=\"clickable\" onClick={this.cloneServerGroup}>\n Clone\n </a>\n </li>\n {!serverGroup.isDisabled && (\n <li>\n <a className=\"clickable\" onClick={this.mapServerGroupToLoadBalancers}>\n Map Load Balancer\n </a>\n </li>\n )}\n {!serverGroup.isDisabled && loadBalancers && !!loadBalancers.length && (\n <li>\n <a className=\"clickable\" onClick={this.unmapServerGroupFromLoadBalancers}>\n Unmap Load Balancer\n </a>\n </li>\n )}\n {showEntityTags && (\n <AddEntityTagLinks\n component={serverGroup}\n application={app}\n entityType=\"serverGroup\"\n ownerOptions={entityTagTargets}\n onUpdate={() => app.serverGroups.refresh()}\n />\n )}\n </Dropdown.Menu>\n </Dropdown>\n );\n }\n}\n","import { isEmpty } from 'lodash';\nimport { Observable } from 'rxjs';\n\nimport type { IServerGroupDetailsProps } from '@spinnaker/core';\nimport { ServerGroupReader } from '@spinnaker/core';\nimport type { ICloudFoundryLoadBalancer, ICloudFoundryServerGroup } from '../../domain';\n\nfunction extractServerGroupSummary(props: IServerGroupDetailsProps): PromiseLike<ICloudFoundryServerGroup> {\n const { app, serverGroup } = props;\n return app.ready().then(() => {\n let summary: ICloudFoundryServerGroup = app.serverGroups.data.find((toCheck: ICloudFoundryServerGroup) => {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some((loadBalancer: ICloudFoundryLoadBalancer) => {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some((possibleServerGroup) => {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n return false;\n });\n }\n return false;\n });\n }\n return summary;\n });\n}\n\nexport function cfServerGroupDetailsGetter(\n props: IServerGroupDetailsProps,\n autoClose: () => void,\n): Observable<ICloudFoundryServerGroup> {\n const { app, serverGroup: serverGroupInfo } = props;\n return new Observable<ICloudFoundryServerGroup>((observer) => {\n extractServerGroupSummary(props).then((summary) => {\n ServerGroupReader.getServerGroup(\n app.name,\n serverGroupInfo.accountId,\n serverGroupInfo.region,\n serverGroupInfo.name,\n ).then((serverGroup: ICloudFoundryServerGroup) => {\n // it's possible the summary was not found because the clusters are still loading\n Object.assign(serverGroup, summary, { account: serverGroupInfo.accountId });\n\n if (!isEmpty(serverGroup)) {\n observer.next(serverGroup);\n } else {\n autoClose();\n }\n }, autoClose);\n }, autoClose);\n });\n}\n","import { CloudProviderRegistry } from '@spinnaker/core';\n\nimport './common/applicationName.validator';\nimport './help/cloudfoundry.help';\nimport { CloudFoundryInstanceDetails } from './instance/details';\nimport {\n CloudFoundryLoadBalancerDetails,\n CloudFoundryLoadBalancerTransformer,\n CloudFoundryMapLoadBalancerModal,\n} from './loadBalancer';\nimport cloudFoundryLogo from './logo/cf.logo.svg';\nimport './pipeline/config/validation/cfTargetImpedance.validator';\nimport './pipeline/config/validation/instanceSize.validator';\nimport './pipeline/config/validation/requiredRoutes.validator';\nimport './pipeline/stages/bakeCloudFoundryManifest/bakeCloudFoundryManifestStage';\nimport './pipeline/stages/cloneServerGroup/cloudFoundryCloneServerGroupStage.module';\nimport './pipeline/stages/createServiceBindings/cloudFoundryCreateServiceBindingsStage';\nimport './pipeline/stages/createServiceKey/cloudFoundryCreateServiceKeyStage.module';\nimport './pipeline/stages/deleteServiceBindings/cloudFoundryDeleteServiceBindingsStage';\nimport './pipeline/stages/deleteServiceKey/cloudFoundryDeleteServiceKeyStage.module';\nimport './pipeline/stages/deployService/cloudFoundryDeployServiceStage.module';\nimport './pipeline/stages/destroyAsg/cloudFoundryDestroyAsgStage.module';\nimport './pipeline/stages/destroyService/cloudFoundryDestroyServiceStage.module';\nimport './pipeline/stages/disableAsg/cloudFoundryDisableAsgStage.module';\nimport './pipeline/stages/enableAsg/cloudFoundryEnableAsgStage.module';\nimport './pipeline/stages/mapLoadBalancers/cloudFoundryMapLoadBalancersStage.module';\nimport './pipeline/stages/resizeAsg/cloudFoundryResizeAsgStage.module';\nimport './pipeline/stages/rollbackCluster/cloudFoundryRollbackClusterStage.module';\nimport './pipeline/stages/runJob/cloudFoundryRunJob.module';\nimport './pipeline/stages/shareService/cloudFoundryShareServiceStage.module';\nimport './pipeline/stages/unmapLoadBalancers/cloudFoundryUnmapLoadBalancersStage.module';\nimport './pipeline/stages/unshareService/cloudFoundryUnshareServiceStage.module';\nimport {\n ApplicationManagerSection,\n BoundServicesSection,\n BuildSection,\n cfServerGroupDetailsGetter,\n CloudFoundryCreateServerGroupModal,\n CloudFoundryServerGroupActions,\n CloudFoundryServerGroupCommandBuilderShim,\n CloudFoundryServerGroupTransformer,\n EnvironmentVariablesSection,\n HealthCheckSection,\n MetricsSection,\n PackageSection,\n ServerGroupInformationSection,\n ServerGroupSizingSection,\n} from './serverGroup';\n\nimport './logo/cf.logo.less';\n\nCloudProviderRegistry.registerProvider('cloudfoundry', {\n name: 'Cloud Foundry',\n logo: {\n path: cloudFoundryLogo,\n },\n loadBalancer: {\n transformer: CloudFoundryLoadBalancerTransformer,\n details: CloudFoundryLoadBalancerDetails,\n CreateLoadBalancerModal: CloudFoundryMapLoadBalancerModal,\n },\n serverGroup: {\n skipUpstreamStageCheck: true,\n transformer: CloudFoundryServerGroupTransformer,\n detailsActions: CloudFoundryServerGroupActions,\n detailsGetter: cfServerGroupDetailsGetter,\n detailsSections: [\n ServerGroupInformationSection,\n ApplicationManagerSection,\n MetricsSection,\n ServerGroupSizingSection,\n HealthCheckSection,\n BuildSection,\n PackageSection,\n BoundServicesSection,\n EnvironmentVariablesSection,\n ],\n CloneServerGroupModal: CloudFoundryCreateServerGroupModal,\n commandBuilder: CloudFoundryServerGroupCommandBuilderShim,\n scalingActivitiesEnabled: false, // FIXME enable?\n },\n instance: {\n details: CloudFoundryInstanceDetails,\n },\n});\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface ICloudFoundryProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n };\n}\n\nexport const CloudFoundryProviderSettings: ICloudFoundryProviderSettings = (SETTINGS.providers\n .cloudfoundry as ICloudFoundryProviderSettings) || { defaults: {} };\nif (CloudFoundryProviderSettings) {\n CloudFoundryProviderSettings.resetToOriginal = SETTINGS.resetProvider('cloudfoundry');\n}\n"],"names":["__decorateClass","observableFrom","AdditionalRollingRedBlackFields"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/common/applicationName.validator.ts","../src/help/cloudfoundry.help.ts","../src/instance/details/CloudFoundryInstanceActions.tsx","../src/instance/details/sections/CloudFoundryInstanceDetailsSection.tsx","../src/instance/details/CloudFoundryInstanceDetails.tsx","../src/loadBalancer/loadBalancer.transformer.ts","../src/loadBalancer/details/CloudFoundryLoadBalancerActions.tsx","../src/loadBalancer/details/sections/CloudFoundryLoadBalancerDetailsSection.tsx","../src/loadBalancer/details/sections/CloudFoundryLoadBalancerStatusSection.tsx","../src/loadBalancer/details/sections/CloudFoundryLoadBalancerLinksSection.tsx","../src/loadBalancer/details/CloudFoundryLoadBalancerDetails.tsx","../src/presentation/forms/inputs/FormikConfigField.tsx","../src/presentation/forms/serverGroup/Buildpacks.tsx","../src/presentation/forms/serverGroup/EnvironmentVariables.tsx","../src/presentation/forms/serverGroup/HealthCheck.tsx","../src/presentation/forms/serverGroup/InstanceParameters.tsx","../src/presentation/forms/serverGroup/Routes.tsx","../src/presentation/forms/serverGroup/Services.tsx","../src/presentation/widgets/accountRegionClusterSelector/AccountRegionClusterSelector.tsx","../src/presentation/widgets/accountRegionClusterSelector/FormikAccountRegionClusterSelector.tsx","../src/presentation/pipeline/stages/CloudFoundryAsgStageConfig.tsx","../src/presentation/pipeline/stages/CloudFoundryLoadBalancersExecutionDetails.tsx","../src/presentation/pipeline/stages/CloudFoundryLoadBalancersStageConfig.tsx","../src/presentation/pipeline/stages/CloudFoundryServiceExecutionDetails.tsx","../src/presentation/pipeline/stages/CloudFoundryServiceKeyExecutionDetails.tsx","../src/loadBalancer/configure/CloudFoundryMapLoadBalancerModal.tsx","../src/pipeline/config/validation/cfTargetImpedance.validator.ts","../src/pipeline/config/validation/instanceSize.validator.ts","../src/pipeline/config/validation/requiredRoutes.validator.ts","../src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestConfigForm.tsx","../src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestConfig.tsx","../src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestDetailsTab.tsx","../src/pipeline/stages/bakeCloudFoundryManifest/bakeCloudFoundryManifestStage.ts","../src/serverGroup/configure/serverGroupCommandBuilder.service.cf.ts","../src/serverGroup/configure/serverGroupCommandBuilderShim.service.cf.ts","../src/serverGroup/configure/wizard/ServerGroupTemplateSelection.tsx","../src/serverGroup/configure/wizard/sections/artifactSettings/ArtifactSettings.cf.tsx","../src/serverGroup/configure/wizard/sections/artifactSettings/ConstantArtifactSettings.cf.tsx","../src/deploymentStrategy/strategies/rollingredblack/AdditionalFields.tsx","../src/deploymentStrategy/CloudFoundryDeploymentStrategySelector.tsx","../../../node_modules/style-inject/dist/style-inject.es.js","../src/serverGroup/configure/wizard/sections/basicSettings/BasicSettings.cf.tsx","../src/serverGroup/configure/wizard/sections/cloneSettings/CloneSettings.cf.tsx","../src/serverGroup/configure/wizard/sections/configurationSettings/ConfigurationSettings.cf.tsx","../src/serverGroup/configure/wizard/CreateServerGroupModal.tsx","../src/pipeline/stages/cloneServerGroup/CloudFoundryCloneServerGroupStageConfig.tsx","../src/pipeline/stages/cloneServerGroup/cloudFoundryCloneServerGroupStage.module.ts","../src/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsStageConfigForm.tsx","../src/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsConfig.tsx","../src/pipeline/stages/createServiceBindings/cloudFoundryCreateServiceBindingsStage.ts","../src/pipeline/stages/createServiceKey/CloudFoundryCreateServiceKeyStageConfig.tsx","../src/pipeline/stages/createServiceKey/cloudFoundryCreateServiceKeyStage.module.ts","../src/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsStageConfigForm.tsx","../src/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsConfig.tsx","../src/pipeline/stages/deleteServiceBindings/cloudFoundryDeleteServiceBindingsStage.ts","../src/pipeline/stages/deleteServiceKey/CloudFoundryDeleteServiceKeyStageConfig.tsx","../src/pipeline/stages/deleteServiceKey/cloudFoundryDeleteServiceKeyStage.module.ts","../src/pipeline/stages/deployService/ServiceTagsInput.tsx","../src/pipeline/stages/deployService/CreateServiceInstanceDirectInput.tsx","../src/pipeline/stages/deployService/CreateUserProvidedInput.tsx","../src/pipeline/stages/deployService/CloudFoundryDeployServiceStageConfig.tsx","../src/pipeline/stages/deployService/cloudFoundryDeployServiceStage.module.ts","../src/pipeline/stages/destroyAsg/cloudFoundryDestroyAsgStage.module.ts","../src/pipeline/stages/destroyService/CloudFoundryDestroyServiceStageConfigForm.tsx","../src/pipeline/stages/destroyService/CloudFoundryDestroyServiceStageConfig.tsx","../src/pipeline/stages/destroyService/cloudFoundryDestroyServiceStage.module.ts","../src/pipeline/stages/disableAsg/cloudFoundryDisableAsgStage.module.ts","../src/pipeline/stages/enableAsg/cloudFoundryEnableAsgStage.module.ts","../src/pipeline/stages/mapLoadBalancers/cloudFoundryMapLoadBalancersStage.module.ts","../src/pipeline/stages/resizeAsg/CloudFoundryResizeAsgStageConfig.tsx","../src/pipeline/stages/resizeAsg/cloudFoundryResizeAsgStage.module.ts","../src/pipeline/stages/rollbackCluster/CloudFoundryRollbackClusterStageConfig.tsx","../src/pipeline/stages/rollbackCluster/cloudFoundryRollbackClusterStage.module.ts","../src/pipeline/stages/runJob/CloudFoundryRunJobStageConfig.tsx","../src/presentation/widgets/recentLogs/CloudFoundryRecentLogs.tsx","../src/pipeline/stages/runJob/RunJobExecutionDetails.tsx","../src/pipeline/stages/shareService/CloudFoundryShareServiceExecutionDetails.tsx","../src/pipeline/stages/runJob/cloudFoundryRunJob.module.ts","../src/pipeline/stages/shareService/CloudFoundryShareServiceStageConfig.tsx","../src/pipeline/stages/unshareService/CloudFoundryUnshareServiceExecutionDetails.tsx","../src/pipeline/stages/shareService/cloudFoundryShareServiceStage.module.ts","../src/pipeline/stages/unmapLoadBalancers/cloudFoundryUnmapLoadBalancersStage.module.ts","../src/pipeline/stages/unshareService/CloudFoundryUnshareServiceStageConfig.tsx","../src/pipeline/stages/unshareService/cloudFoundryUnshareServiceStage.module.ts","../src/serverGroup/details/sections/ServerGroupInformationSection.tsx","../src/serverGroup/details/sections/ApplicationManagerSection.tsx","../src/serverGroup/details/sections/MetricsSection.tsx","../src/serverGroup/details/sections/ServerGroupSizingSection.tsx","../src/serverGroup/details/sections/HealthCheckSection.tsx","../src/serverGroup/details/sections/PackageSection.tsx","../src/serverGroup/details/sections/BuildSection.tsx","../src/serverGroup/details/sections/BoundServicesSection.tsx","../src/serverGroup/details/sections/EnvironmentVariablesSection.tsx","../src/serverGroup/serverGroup.transformer.ts","../src/serverGroup/details/mapLoadBalancers/CloudFoundryMapLoadBalancersModal.tsx","../src/serverGroup/details/mapLoadBalancers/CloudFoundryUnmapLoadBalancersModal.tsx","../src/serverGroup/details/resize/CloudFoundryResizeServerGroupModal.tsx","../src/serverGroup/details/rollback/CloudFoundryRollbackServerGroupModal.tsx","../src/serverGroup/details/cloudFoundryServerGroupActions.tsx","../src/serverGroup/details/cfServerGroupDetailsGetter.ts","../src/cf.module.ts","../src/logo/cf.logo.svg","../src/cf.settings.ts"],"sourcesContent":["import { ApplicationNameValidator } from '@spinnaker/core';\n\nclass CloudFoundryApplicationNameValidator {\n private static MAX_RESOURCE_NAME_LENGTH = 63;\n\n private static validateSpecialCharacters(name: string, _warnings: string[], errors: string[]): void {\n const alphanumPattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!alphanumPattern.test(name)) {\n const alphanumWithDashPattern = /^([a-zA-Z][a-zA-Z0-9-]*)?$/;\n if (!alphanumWithDashPattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters, digits or dashes. ' +\n 'No special characters are allowed.',\n );\n }\n }\n }\n\n private static validateLength(name: string, errors: string[]): void {\n if (name.length > CloudFoundryApplicationNameValidator.MAX_RESOURCE_NAME_LENGTH) {\n errors.push(\n `The maximum length for an application in Cloud Foundry is ${CloudFoundryApplicationNameValidator.MAX_RESOURCE_NAME_LENGTH} characters.`,\n );\n }\n }\n\n public validate(name = '') {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n if (name && name.length) {\n CloudFoundryApplicationNameValidator.validateSpecialCharacters(name, warnings, errors);\n CloudFoundryApplicationNameValidator.validateLength(name, errors);\n }\n\n return {\n warnings,\n errors,\n };\n }\n}\n\nApplicationNameValidator.registerValidator('cloudfoundry', new CloudFoundryApplicationNameValidator());\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'cf.service.deploy.timeout':\n '(Optional) <b>Override Deploy Timeout</b> is the maximum amount of time allowed for service deployment before Spinnaker reports a timeout error (default: 450 seconds). If a timeout error is reported by Spinnaker, the request may still be processed and a service may still be created.',\n 'cf.service.destroy.timeout':\n '(Optional) <b>Override Destroy Timeout</b> is the maximum amount of time allowed for service destruction before Spinnaker reports a timeout error (default: 450 seconds). If a timeout error is reported by Spinnaker, the request may still be processed and the service may be deleted.',\n 'cf.serverGroup.stack':\n '(Optional) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.',\n 'cf.serverGroup.detail':\n '(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.',\n 'cf.serverGroup.startApplication':\n '<b>Start on creation</b> is a boolean value that determines if the server group is started upon creation. Default value is <code>true</code>.',\n 'cf.serverGroup.requiredRoutes':\n '<b>Route</b> is a URI in the form of <code>some.host.some.domain[:9999][/some/path]</code> (port and path are optional). The domain has to be a valid domain in the CloudFoundry Org (Region) that this server group runs in.',\n 'cf.serverGroup.routes':\n '(Optional) <b>Route</b> is a URI in the form of <code>some.host.some.domain[:9999][/some/path]</code> (port and path are optional). The domain has to be a valid domain in the CloudFoundry Org (Region) that this server group runs in.',\n 'cf.artifact.package': `<p>This option allows you to create a new server group from an existing Droplet. You can use this to relocate an existing Cloud Foundry application from one space to another or to launch a clone of an application with different root filesystem or resource settings.</p>`,\n 'cf.artifact.trigger.account': `<p>Specify an artifact account if the trigger source produces an artifact that requires authentication credentials to retrieve. Otherwise, leave blank.</p>`,\n 'cf.runJob.logsUrl':\n '<p>(Optional) A templated URL to an external logging system. The URL is used in the pipeline execution stage task details.</p>' +\n '<p><a href=\"http://spinnaker.github.io/guides/user/pipeline-expressions\" target=\"_blank\">Pipeline expressions</a> can be used to interpolate values from the stage context, for example:' +\n '<ul>' +\n '<li><code>${appGuid}</code> the selected cluster CF app GUID.</li>' +\n '<li><code>${name}</code> the task name.</li>' +\n '</ul>' +\n '</p>',\n 'cf.runJob.jobName': '(Optional) If left empty, a random string will be generated.',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport { ConfirmationModalService, InstanceWriter, ReactInjector } from '@spinnaker/core';\nimport type { ICloudFoundryInstance } from '../../domain';\n\nexport interface ICloudFoundryInstanceActionsProps {\n application: Application;\n instance: ICloudFoundryInstance;\n}\n\nexport class CloudFoundryInstanceActions extends React.Component<ICloudFoundryInstanceActionsProps> {\n private terminateInstance = () => {\n const { application, instance } = this.props;\n const instanceClone = cloneDeep(instance) as any;\n instanceClone.placement = {};\n instanceClone.id = instance.name;\n const taskMonitor = {\n application: application,\n title: 'Terminating ' + instance.name,\n onTaskComplete() {\n if (ReactInjector.$state.includes('**.serverGroup', { instanceId: instance.name })) {\n ReactInjector.$state.go('^');\n }\n },\n };\n\n const submitMethod = () => {\n return InstanceWriter.terminateInstance(instance, application, { cloudProvider: 'cloudfoundry' });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.name + '?',\n buttonText: 'Terminate',\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod,\n });\n };\n\n public render(): JSX.Element {\n return (\n <div className=\"actions\">\n <Dropdown className=\"dropdown\" id=\"instance-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">Instance Actions</Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n <li>\n <a className=\"clickable\" onClick={this.terminateInstance}>\n Terminate\n </a>\n </li>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { AccountTag, CollapsibleSection, timestamp } from '@spinnaker/core';\nimport type { ICloudFoundryInstance } from '../../../domain';\n\nexport interface ICloudFoundryInstanceDetailsSectionProps {\n instance: ICloudFoundryInstance;\n}\n\nexport class CloudFoundryInstanceDetailsSection extends React.Component<ICloudFoundryInstanceDetailsSectionProps> {\n constructor(props: ICloudFoundryInstanceDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { instance } = this.props;\n return (\n <div>\n <CollapsibleSection heading=\"Instance Information\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Launched</dt>\n <dd>{timestamp(instance.launchTime)}</dd>\n <dt>In</dt>\n <dd>\n <AccountTag account={instance.account} />\n </dd>\n <dt>Region</dt>\n <dd>{instance.region}</dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Status\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>\n <span className={'glyphicon glyphicon-' + instance.healthState + '-triangle'} />\n </dt>\n <dd>{instance.healthState}</dd>\n\n {instance.details && (\n <div>\n <dt>Details</dt>\n <dd>{instance.details}</dd>\n </div>\n )}\n </dl>\n </CollapsibleSection>\n </div>\n );\n }\n}\n","import { UISref } from '@uirouter/react';\nimport { UIRouterContext } from '@uirouter/react-hybrid';\nimport { flattenDeep } from 'lodash';\nimport React from 'react';\n\nimport type { Application, ILoadBalancer } from '@spinnaker/core';\nimport { InstanceReader, RecentHistoryService, Spinner } from '@spinnaker/core';\n\nimport { CloudFoundryInstanceActions } from './CloudFoundryInstanceActions';\nimport type { ICloudFoundryInstance } from '../../domain';\nimport { CloudFoundryInstanceDetailsSection } from './sections';\n\ninterface InstanceFromStateParams {\n instanceId: string;\n}\n\ninterface InstanceManager {\n account: string;\n region: string;\n category: string; // e.g., serverGroup, loadBalancer.\n name: string; // Parent resource name, not instance name.\n instances: ICloudFoundryInstance[];\n}\n\ninterface ICloudFoundryInstanceDetailsState {\n instance?: ICloudFoundryInstance;\n instanceIdNotFound: string;\n loading: boolean;\n}\n\ninterface ICloudFoundryInstanceDetailsProps {\n app: Application;\n instance: InstanceFromStateParams;\n loading: boolean;\n}\n\n@UIRouterContext\nexport class CloudFoundryInstanceDetails extends React.Component<\n ICloudFoundryInstanceDetailsProps,\n ICloudFoundryInstanceDetailsState\n> {\n constructor(props: ICloudFoundryInstanceDetailsProps) {\n super(props);\n\n this.state = {\n loading: true,\n instanceIdNotFound: props.instance.instanceId,\n };\n }\n\n public componentDidMount(): void {\n this.props.app.ready().then(() => this.retrieveInstance(this.props.instance));\n }\n\n private retrieveInstance(instanceFromParams: InstanceFromStateParams): void {\n const instanceLocatorPredicate = (dataSource: InstanceManager) => {\n return dataSource.instances.some((possibleMatch) => possibleMatch.id === instanceFromParams.instanceId);\n };\n\n const dataSources: InstanceManager[] = flattenDeep([\n this.props.app.getDataSource('serverGroups').data,\n this.props.app.getDataSource('loadBalancers').data,\n this.props.app\n .getDataSource('loadBalancers')\n .data.map((loadBalancer: ILoadBalancer) => loadBalancer.serverGroups),\n ]);\n\n const instanceManager = dataSources.find(instanceLocatorPredicate);\n\n if (instanceManager) {\n const recentHistoryExtraData: { [key: string]: string } = {\n region: instanceManager.region,\n account: instanceManager.account,\n };\n if (instanceManager.category === 'serverGroup') {\n recentHistoryExtraData.serverGroup = instanceManager.name;\n }\n RecentHistoryService.addExtraDataToLatest('instances', recentHistoryExtraData);\n InstanceReader.getInstanceDetails(instanceManager.account, instanceManager.region, instanceFromParams.instanceId)\n .then((instanceDetails: ICloudFoundryInstance) => {\n instanceDetails.account = instanceManager.account;\n instanceDetails.region = instanceManager.region;\n return instanceDetails;\n })\n .then((instance) => {\n this.setState({\n instance,\n loading: false,\n });\n });\n }\n }\n\n public render(): JSX.Element {\n const { app } = this.props;\n const { instance, instanceIdNotFound, loading } = this.state;\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n const notFoundHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <h3 className=\"horizontal middle space-between flex-1\">{instanceIdNotFound}</h3>\n </div>\n </div>\n );\n const instanceHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <span className={'glyphicon glyphicon-hdd ' + instance.healthState} />\n <h3 className=\"horizontal middle space-between flex-1\">{instance.name}</h3>\n </div>\n <CloudFoundryInstanceActions application={app} instance={instance} />\n </div>\n );\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Instance not found.</h3>\n </div>\n </div>\n </div>\n );\n const instanceContent = () => (\n <div className=\"content\">\n <CloudFoundryInstanceDetailsSection instance={instance} />\n </div>\n );\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && instance && instanceHeader()}\n {!loading && instance && instanceContent()}\n {!loading && !instance && notFoundHeader()}\n {!loading && !instance && notFoundContent()}\n </div>\n );\n }\n}\n","import { camelCase, chain, cloneDeep, has } from 'lodash';\n\nimport type {\n Application,\n IInstance,\n IInstanceCounts,\n ILoadBalancer,\n ILoadBalancerUpsertCommand,\n IServerGroup,\n} from '@spinnaker/core';\nimport type {\n ICloudFoundryLoadBalancer,\n ICloudFoundryLoadBalancerUpsertCommand,\n ICloudFoundryServerGroup,\n ICloudFoundrySpace,\n} from '../domain';\n\nexport class CloudFoundryLoadBalancerUpsertDescription\n implements ILoadBalancerUpsertCommand, ICloudFoundryLoadBalancer {\n public id: string;\n public credentials: string;\n public account: string;\n public loadBalancerName: string;\n public name: string;\n public region: string;\n public cloudProvider: string;\n public serverGroups: ICloudFoundryServerGroup[];\n public space: ICloudFoundrySpace;\n\n constructor(loadBalancer: ICloudFoundryLoadBalancer) {\n this.id = loadBalancer.id;\n this.credentials = loadBalancer.account;\n this.account = this.credentials;\n this.cloudProvider = loadBalancer.cloudProvider;\n this.loadBalancerName = loadBalancer.name;\n this.name = loadBalancer.name;\n this.region = loadBalancer.region;\n this.serverGroups = loadBalancer.serverGroups;\n this.space = loadBalancer.space;\n }\n}\n\nexport class CloudFoundryLoadBalancerTransformer {\n public static $inject = ['$q'];\n constructor(private $q: ng.IQService) {}\n\n public normalizeLoadBalancer(loadBalancer: ILoadBalancer): PromiseLike<ILoadBalancer> {\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instanceCounts = this.buildInstanceCounts(loadBalancer.serverGroups);\n loadBalancer.instances = [];\n loadBalancer.serverGroups.forEach((serverGroup) => {\n serverGroup.account = loadBalancer.account;\n serverGroup.region = loadBalancer.region;\n serverGroup.cloudProvider = loadBalancer.provider;\n\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = (serverGroup.detachedInstances as any).map((id: string) => ({ id }));\n }\n serverGroup.instances = serverGroup.instances\n .concat(serverGroup.detachedInstances || [])\n .map((instance: any) => this.transformInstance(instance, loadBalancer));\n });\n\n const activeServerGroups = loadBalancer.serverGroups.filter((sg) => !sg.isDisabled);\n loadBalancer.instances = chain(activeServerGroups).map('instances').flatten().value() as IInstance[];\n return this.$q.resolve(loadBalancer);\n }\n\n public constructNewCloudFoundryLoadBalancerTemplate(\n application: Application,\n ): ICloudFoundryLoadBalancerUpsertCommand {\n return {\n cloudProvider: 'cloudfoundry',\n credentials: undefined,\n name: application.name,\n id: undefined,\n host: '',\n path: '',\n port: '',\n region: '',\n domain: '',\n serverGroups: [],\n routes: [],\n };\n }\n\n public convertLoadBalancerForEditing(\n loadBalancer: ICloudFoundryLoadBalancer,\n application: Application,\n ): PromiseLike<ICloudFoundryLoadBalancer> {\n return application\n .getDataSource('loadBalancers')\n .ready()\n .then(() => {\n const upToDateLoadBalancer = application\n .getDataSource('loadBalancers')\n .data.find((candidate: ILoadBalancer) => {\n return candidate.name === loadBalancer.name && candidate.account === loadBalancer.account;\n });\n\n if (upToDateLoadBalancer) {\n loadBalancer.serverGroups = cloneDeep(upToDateLoadBalancer.serverGroups);\n }\n return loadBalancer;\n });\n }\n\n public convertLoadBalancerToUpsertDescription(\n loadBalancer: ICloudFoundryLoadBalancer,\n ): CloudFoundryLoadBalancerUpsertDescription {\n return new CloudFoundryLoadBalancerUpsertDescription(loadBalancer);\n }\n\n private buildInstanceCounts(serverGroups: IServerGroup[]): IInstanceCounts {\n const instanceCounts: IInstanceCounts = chain(serverGroups)\n .map('instances')\n .flatten()\n .reduce(\n (acc: IInstanceCounts, instance: any) => {\n if (has(instance, 'health.state')) {\n acc[camelCase(instance.health.state)]++;\n }\n return acc;\n },\n { up: 0, down: 0, outOfService: 0, succeeded: 0, failed: 0, starting: 0, unknown: 0 },\n )\n .value();\n\n instanceCounts.outOfService += chain(serverGroups).map('detachedInstances').flatten().value().length;\n return instanceCounts;\n }\n\n private transformInstance(instance: any, loadBalancer: ILoadBalancer) {\n instance.provider = loadBalancer.type;\n instance.account = loadBalancer.account;\n instance.region = loadBalancer.region;\n instance.loadBalancers = [loadBalancer.name];\n const health = instance.health || {};\n instance.healthState = health.state ?? 'OutOfService';\n instance.health = [health];\n\n return instance as IInstance;\n }\n}\n","import React from 'react';\n\nimport { Dropdown } from 'react-bootstrap';\n\nimport type { Application, ILoadBalancer, ILoadBalancerDeleteCommand } from '@spinnaker/core';\nimport { ConfirmationModalService, LoadBalancerWriter, ReactInjector } from '@spinnaker/core';\n\nexport interface ICloudFoundryLoadBalancerActionsProps {\n application: Application;\n loadBalancer: ILoadBalancer;\n}\n\nexport class CloudFoundryLoadBalancerActions extends React.Component<ICloudFoundryLoadBalancerActionsProps> {\n private deleteLoadBalancer = () => {\n const { application, loadBalancer } = this.props;\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + loadBalancer.name,\n onTaskComplete() {\n if (ReactInjector.$state.includes('**.serverGroup', { instanceId: loadBalancer.name })) {\n ReactInjector.$state.go('^');\n }\n },\n };\n\n const submitMethod = () => {\n const loadBalancerDeleteCommand: ILoadBalancerDeleteCommand = {\n cloudProvider: loadBalancer.cloudProvider,\n credentials: loadBalancer.account,\n regions: [loadBalancer.region],\n loadBalancerName: loadBalancer.name,\n };\n return LoadBalancerWriter.deleteLoadBalancer(loadBalancerDeleteCommand, application);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + loadBalancer.name + '?',\n buttonText: 'Delete ' + loadBalancer.name,\n account: loadBalancer.account,\n taskMonitorConfig: taskMonitor,\n submitMethod,\n });\n };\n\n public render(): JSX.Element {\n return (\n <div className=\"actions\">\n <Dropdown className=\"dropdown\" id=\"instance-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">Load Balancer Actions</Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n <li>\n <a className=\"clickable\" onClick={this.deleteLoadBalancer}>\n Delete Load Balancer\n </a>\n </li>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n );\n }\n}\n","import { UISref } from '@uirouter/react';\nimport React from 'react';\n\nimport { AccountTag, CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryLoadBalancer } from '../../../domain';\n\nexport interface ICloudFoundryLoadBalancerDetailsSectionProps {\n loadBalancer: ICloudFoundryLoadBalancer;\n}\n\nexport class CloudFoundryLoadBalancerDetailsSection extends React.Component<\n ICloudFoundryLoadBalancerDetailsSectionProps\n> {\n constructor(props: ICloudFoundryLoadBalancerDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { loadBalancer } = this.props;\n return (\n <>\n <CollapsibleSection heading=\"Load Balancer Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>In</dt>\n <dd>\n <AccountTag account={loadBalancer.account} />\n </dd>\n <dt>Organization</dt>\n <dd>{loadBalancer.space.organization.name}</dd>\n <dt>Space</dt>\n <dd>{loadBalancer.space.name}</dd>\n {loadBalancer.serverGroups && (\n <>\n <dt>Server Groups</dt>\n <dd>\n <ul>\n {loadBalancer.serverGroups.map((serverGroup, index) => {\n return (\n <li key={index}>\n <UISref\n to=\"^.serverGroup\"\n params={{\n region: serverGroup.region,\n accountId: serverGroup.account,\n serverGroup: serverGroup.name,\n provider: 'cloudfoundry',\n }}\n >\n <a>{serverGroup.name}</a>\n </UISref>\n </li>\n );\n })}\n </ul>\n </dd>\n </>\n )}\n </dl>\n </CollapsibleSection>\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection, HealthCounts } from '@spinnaker/core';\nimport type { ICloudFoundryLoadBalancer } from '../../../domain';\n\nexport interface ICloudFoundryLoadBalancerStatusSectionProps {\n loadBalancer: ICloudFoundryLoadBalancer;\n}\n\nexport class CloudFoundryLoadBalancerStatusSection extends React.Component<\n ICloudFoundryLoadBalancerStatusSectionProps\n> {\n constructor(props: ICloudFoundryLoadBalancerStatusSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { loadBalancer } = this.props;\n return (\n <>\n <CollapsibleSection heading=\"Status\" defaultExpanded={true}>\n <HealthCounts className=\"pull-left\" container={loadBalancer.instanceCounts} />\n </CollapsibleSection>\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryLoadBalancer } from '../../../domain';\n\nexport interface ICloudFoundryLoadBalancerLinksSectionProps {\n loadBalancer: ICloudFoundryLoadBalancer;\n}\n\nexport class CloudFoundryLoadBalancerLinksSection extends React.Component<ICloudFoundryLoadBalancerLinksSectionProps> {\n constructor(props: ICloudFoundryLoadBalancerLinksSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { loadBalancer } = this.props;\n return (\n <>\n <CollapsibleSection heading=\"Application links\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>HTTP</dt>\n <dd>\n <a href={'http://' + loadBalancer.name}>{'http://' + loadBalancer.name}</a>\n </dd>\n <dt>HTTPS</dt>\n <dd>\n <a href={'https://' + loadBalancer.name}>{'https://' + loadBalancer.name}</a>\n </dd>\n </dl>\n </CollapsibleSection>\n </>\n );\n }\n}\n","import { UISref } from '@uirouter/react';\nimport { UIRouterContext } from '@uirouter/react-hybrid';\nimport React from 'react';\n\nimport type { Application, LoadBalancerWriter } from '@spinnaker/core';\nimport { Spinner } from '@spinnaker/core';\n\nimport { CloudFoundryLoadBalancerActions } from './CloudFoundryLoadBalancerActions';\nimport type { ICloudFoundryLoadBalancer } from '../../domain';\nimport { CloudFoundryLoadBalancerDetailsSection } from './sections';\nimport { CloudFoundryLoadBalancerLinksSection } from './sections/CloudFoundryLoadBalancerLinksSection';\nimport { CloudFoundryLoadBalancerStatusSection } from './sections/CloudFoundryLoadBalancerStatusSection';\n\ninterface ILoadBalancer {\n name: string;\n accountId: string;\n region: string;\n}\n\ninterface ICloudFoundryLoadBalancerDetailsState {\n loadBalancer: ICloudFoundryLoadBalancer;\n loadBalancerNotFound?: string;\n loading: boolean;\n refreshListenerUnsubscribe: () => void;\n}\n\nexport interface ICloudFoundryLoadBalancerDetailsProps {\n app: Application;\n loadBalancer: ILoadBalancer;\n loadBalancerWriter: LoadBalancerWriter;\n}\n\n@UIRouterContext\nexport class CloudFoundryLoadBalancerDetails extends React.Component<\n ICloudFoundryLoadBalancerDetailsProps,\n ICloudFoundryLoadBalancerDetailsState\n> {\n constructor(props: ICloudFoundryLoadBalancerDetailsProps) {\n super(props);\n this.state = {\n loading: true,\n loadBalancer: undefined,\n refreshListenerUnsubscribe: () => {},\n };\n\n props.app\n .getDataSource('loadBalancers')\n .ready()\n .then(() => this.extractLoadBalancer());\n }\n\n public componentWillUnmount(): void {\n this.state.refreshListenerUnsubscribe();\n }\n\n private extractLoadBalancer(): void {\n const { name } = this.props.loadBalancer;\n const loadBalancer: ICloudFoundryLoadBalancer = this.props.app\n .getDataSource('loadBalancers')\n .data.find((test: ICloudFoundryLoadBalancer) => {\n return test.name === name && test.account === this.props.loadBalancer.accountId;\n });\n\n this.setState({\n loading: false,\n loadBalancer,\n });\n\n this.state.refreshListenerUnsubscribe();\n\n if (loadBalancer) {\n this.setState({\n refreshListenerUnsubscribe: this.props.app\n .getDataSource('loadBalancers')\n .onRefresh(null, () => this.extractLoadBalancer()),\n });\n } else {\n this.setState({\n refreshListenerUnsubscribe: () => {},\n });\n // this.autoClose();\n }\n }\n\n public render(): JSX.Element {\n const { app } = this.props;\n const { loadBalancer, loadBalancerNotFound, loading } = this.state;\n\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n const notFoundHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <h3 className=\"horizontal middle space-between flex-1\">{loadBalancerNotFound}</h3>\n </div>\n </div>\n );\n const loadBalancerHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <i className=\"fa icon-sitemap\" />\n <h3 className=\"horizontal middle space-between flex-1\">{loadBalancer.name}</h3>\n </div>\n <CloudFoundryLoadBalancerActions application={app} loadBalancer={loadBalancer} />\n </div>\n );\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Instance not found.</h3>\n </div>\n </div>\n </div>\n );\n const loadBalancerContent = () => (\n <div className=\"content\">\n <CloudFoundryLoadBalancerDetailsSection loadBalancer={loadBalancer} />\n <CloudFoundryLoadBalancerStatusSection loadBalancer={loadBalancer} />\n <CloudFoundryLoadBalancerLinksSection loadBalancer={loadBalancer} />\n </div>\n );\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && !!loadBalancer && loadBalancerHeader()}\n {!loading && !!loadBalancer && loadBalancerContent()}\n {!loading && !loadBalancer && notFoundHeader()}\n {!loading && !loadBalancer && notFoundContent()}\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { HelpField } from '@spinnaker/core';\n\nexport interface IFormikConfigFieldProps {\n label: string;\n helpKey?: string;\n children?: React.ReactNode;\n}\n\nexport class FormikConfigField extends React.Component<IFormikConfigFieldProps> {\n constructor(props: IFormikConfigFieldProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { label, helpKey, children } = this.props;\n return (\n <div className={'StandardFieldLayout flex-container-h baseline margin-between-lg'}>\n <label className={`sm-label-right`}>\n <span className=\"label-text\">{label} </span>\n {helpKey && <HelpField id={helpKey} />}\n </label>\n <div className={`flex-grow`}>{children}</div>\n </div>\n );\n }\n}\n","import { FieldArray, getIn } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup/configure/serverGroupConfigurationModel.cf';\n\nexport interface IBuildpacksProps {\n fieldName: string;\n onChange?: (value: string[]) => void;\n}\n\nexport class Buildpacks extends React.Component<IBuildpacksProps> {\n public render() {\n const { fieldName, onChange } = this.props;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <b>Buildpacks</b>\n <FieldArray\n name={fieldName}\n render={(arrayHelpers) => {\n const serverGroupCommand: ICloudFoundryCreateServerGroupCommand = arrayHelpers.form.values;\n const buildpacks: string[] = getIn(serverGroupCommand, fieldName) || [];\n\n return (\n <table className=\"table table-condensed packed metadata\">\n <tbody>\n {buildpacks.map((_, index: number) => (\n <tr key={index}>\n <td>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={`${fieldName}[${index}]`}\n onChange={() => {\n onChange && onChange(getIn(serverGroupCommand, fieldName) || []);\n }}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </div>\n </td>\n <td>\n <a className=\"btn btn-link sm-label\" onClick={() => arrayHelpers.remove(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={2}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => arrayHelpers.push('')}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add New Buildpack\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n );\n }}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import { FieldArray, getIn } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\nimport type { ICloudFoundryEnvVar } from '../../../domain';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup/configure/serverGroupConfigurationModel.cf';\n\nexport interface IEnvironmentVariablesProps {\n fieldName: string;\n onChange?: (value: string[]) => void;\n}\n\nexport class EnvironmentVariables extends React.Component<IEnvironmentVariablesProps> {\n public render() {\n const { fieldName, onChange } = this.props;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <b>Environment Variables</b>\n <FieldArray\n name={fieldName}\n render={(arrayHelpers) => {\n const serverGroupCommand: ICloudFoundryCreateServerGroupCommand = arrayHelpers.form.values;\n const environmentVariables: string[] = getIn(serverGroupCommand, fieldName) || [];\n\n return (\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n {environmentVariables.map((_, index: number) => {\n const envPath = `${fieldName}[${index}]`;\n return (\n <tr key={index}>\n <td>\n <FormikFormField\n name={`${envPath}.key`}\n onChange={() => {\n onChange && onChange(getIn(serverGroupCommand, fieldName) || []);\n }}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </td>\n <td>\n <FormikFormField\n name={`${envPath}.value`}\n onChange={() => {\n onChange && onChange(getIn(serverGroupCommand, fieldName) || []);\n }}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </td>\n <td>\n <a className=\"btn btn-link sm-label\">\n <span\n className=\"glyphicon glyphicon-trash\"\n onClick={() => arrayHelpers.remove(index)}\n />\n </a>\n </td>\n </tr>\n );\n })}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={3}>\n <button\n type=\"button\"\n className=\"add-new col-md-12\"\n onClick={() => arrayHelpers.push({ key: '', value: '' } as ICloudFoundryEnvVar)}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add New Environment Variable\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n );\n }}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { FormikFormField, RadioButtonInput, TextInput } from '@spinnaker/core';\n\nexport interface IHealthCheckProps {\n healthCheckHttpEndpointFieldName: string;\n healthCheckType: string;\n healthCheckTypeFieldName: string;\n onHealthCheckHttpEndpointChange?: (value: string) => void;\n onHealthCheckTypeChange?: (value: string) => void;\n}\n\nexport class HealthCheck extends React.Component<IHealthCheckProps> {\n private HEALTH_CHECK_TYPE_OPTIONS = [\n { label: 'port', value: 'port' },\n { label: 'HTTP', value: 'http' },\n { label: 'process', value: 'process' },\n ];\n\n public render() {\n const {\n healthCheckTypeFieldName,\n healthCheckType,\n healthCheckHttpEndpointFieldName,\n onHealthCheckTypeChange,\n onHealthCheckHttpEndpointChange,\n } = this.props;\n\n return (\n <div className=\"col-md-9\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={healthCheckTypeFieldName}\n label=\"Health Check Type\"\n input={(props) => <RadioButtonInput {...props} inline={true} options={this.HEALTH_CHECK_TYPE_OPTIONS} />}\n onChange={(value) => {\n onHealthCheckTypeChange && onHealthCheckTypeChange(value);\n }}\n />\n </div>\n {healthCheckType === 'http' && (\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={healthCheckHttpEndpointFieldName}\n label=\"Endpoint\"\n input={(props) => <TextInput {...props} required={true} />}\n onChange={(value) => {\n onHealthCheckHttpEndpointChange && onHealthCheckHttpEndpointChange(value);\n }}\n required={true}\n />\n </div>\n )}\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\n\nexport interface IInstanceParametersProps {\n diskQuotaFieldName: string;\n instancesFieldName: string;\n memoryFieldName: string;\n onDiskQuotaChange?: (value: string) => void;\n onInstancesChange?: (value: string) => void;\n onMemoryChange?: (value: string) => void;\n}\n\nexport class InstanceParameters extends React.Component<IInstanceParametersProps> {\n public render() {\n const {\n diskQuotaFieldName,\n instancesFieldName,\n memoryFieldName,\n onDiskQuotaChange,\n onInstancesChange,\n onMemoryChange,\n } = this.props;\n\n return (\n <div>\n <div className=\"col-md-9\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={memoryFieldName}\n input={(props) => <TextInput {...props} />}\n label=\"Memory\"\n onChange={(value) => {\n onMemoryChange && onMemoryChange(value);\n }}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={diskQuotaFieldName}\n input={(props) => <TextInput {...props} />}\n label=\"Disk Quota\"\n onChange={(value) => {\n onDiskQuotaChange && onDiskQuotaChange(value);\n }}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={instancesFieldName}\n input={(props) => <TextInput type=\"number\" {...props} />}\n label=\"Instances\"\n onChange={(value) => {\n onInstancesChange && onInstancesChange(value);\n }}\n required={true}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import { FieldArray, getIn } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, HelpField, TextInput } from '@spinnaker/core';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup/configure/serverGroupConfigurationModel.cf';\n\nexport interface IRoutesProps {\n fieldName: string;\n onChange?: (value: string[]) => void;\n isRequired?: boolean;\n singleRouteOnly?: boolean;\n}\n\nexport class Routes extends React.Component<IRoutesProps> {\n public render() {\n const { fieldName, isRequired, onChange, singleRouteOnly } = this.props;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <b>{singleRouteOnly ? 'Route' : 'Routes'}</b>\n \n {!isRequired && <HelpField id=\"cf.serverGroup.routes\" />}\n {!!isRequired && <HelpField id=\"cf.serverGroup.requiredRoutes\" />}\n <FieldArray\n name={fieldName}\n render={(arrayHelpers) => {\n const serverGroupCommand: ICloudFoundryCreateServerGroupCommand = arrayHelpers.form.values;\n const routes: string[] = getIn(serverGroupCommand, fieldName) || [];\n\n return (\n <table className=\"table table-condensed packed metadata\">\n <tbody>\n {routes.map((_, index: number) => (\n <tr key={index}>\n <td>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={`${fieldName}[${index}]`}\n onChange={() => {\n onChange && onChange(getIn(serverGroupCommand, fieldName) || []);\n }}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </div>\n </td>\n <td hidden={singleRouteOnly}>\n <a className=\"btn btn-link sm-label\" onClick={() => arrayHelpers.remove(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <tr hidden={singleRouteOnly}>\n <td colSpan={2}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => arrayHelpers.push('')}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add New Route\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n );\n }}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import { FieldArray, getIn } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup/configure/serverGroupConfigurationModel.cf';\n\nexport interface IServicesProps {\n fieldName: string;\n}\n\nexport const Services: React.SFC<IServicesProps> = ({ fieldName }: IServicesProps) => {\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <b>Bind Services</b>\n <FieldArray\n name={fieldName}\n render={(arrayHelpers) => {\n const serverGroupCommand: ICloudFoundryCreateServerGroupCommand = arrayHelpers.form.values;\n const services: string[] = getIn(serverGroupCommand, fieldName) || [];\n\n return (\n <table className=\"table table-condensed packed metadata\">\n <tbody>\n {services.map((_, index: number) => (\n <tr key={index}>\n <td>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={`${fieldName}[${index}]`}\n input={(props) => <TextInput {...props} />}\n required={true}\n />\n </div>\n </td>\n <td>\n <a className=\"btn btn-link sm-label\" onClick={() => arrayHelpers.remove(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={2}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => arrayHelpers.push('')}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add New Service\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n );\n }}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { first, isNil, uniq } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select, { Creatable } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IMoniker, IServerGroup, IServerGroupFilter } from '@spinnaker/core';\nimport { AppListExtractor, StageConfigField } from '@spinnaker/core';\n\nexport interface IAccountRegionClusterSelectorProps {\n accounts: IAccount[];\n application: Application;\n cloudProvider: string;\n clusterField?: string;\n component: any;\n componentName?: string;\n isSingleRegion?: boolean;\n onComponentUpdate?: (component: any) => void;\n}\n\nexport interface IAccountRegionClusterSelectorState {\n [k: string]: any;\n\n availableRegions: string[];\n clusterField: string;\n clusters: string[];\n componentName: string;\n}\n\nexport class AccountRegionClusterSelector extends React.Component<\n IAccountRegionClusterSelectorProps,\n IAccountRegionClusterSelectorState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IAccountRegionClusterSelectorProps) {\n super(props);\n const clusterField = props.clusterField || 'cluster';\n this.state = {\n availableRegions: [],\n cloudProvider: props.cloudProvider,\n clusterField: clusterField,\n clusters: [],\n componentName: props.componentName || '',\n [clusterField]: props.component[clusterField],\n };\n }\n\n public componentDidMount(): void {\n this.setRegionList(this.props.component.credentials);\n this.setClusterList(\n this.props.component.credentials,\n this.props.isSingleRegion ? [this.props.component.region] : this.props.component.regions,\n );\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private setRegionList = (credentials: string): void => {\n const { application } = this.props;\n const accountFilter: IServerGroupFilter = (serverGroup: IServerGroup) =>\n serverGroup ? serverGroup.account === credentials : true;\n observableFrom(application.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const availableRegions = AppListExtractor.getRegions([application], accountFilter);\n availableRegions.sort();\n this.setState({ availableRegions });\n });\n };\n\n private setClusterList = (credentials: string, regions: string[]): void => {\n const { application } = this.props;\n observableFrom(application.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const clusterFilter = AppListExtractor.clusterFilterForCredentialsAndRegion(credentials, regions);\n const clusters = AppListExtractor.getClusters([application], clusterFilter);\n\n const clusterField = this.props.component[this.state.clusterField];\n if (clusterField && !clusters.includes(clusterField)) {\n clusters.push(clusterField);\n }\n this.setState({ clusters });\n });\n };\n\n public onAccountUpdate = (option: Option<string>): void => {\n const credentials = option.value;\n this.setRegionList(credentials);\n this.setClusterList(credentials, []);\n this.props.onComponentUpdate &&\n this.props.onComponentUpdate({\n ...this.props.component,\n credentials,\n region: '',\n regions: [],\n [this.state.clusterField]: undefined,\n });\n };\n\n public onRegionsUpdate = (option: Option<string>): void => {\n const regions = option.map((o: Option) => o.value);\n this.setClusterList(this.props.component.credentials, regions);\n this.props.onComponentUpdate &&\n this.props.onComponentUpdate({\n ...this.props.component,\n regions,\n [this.state.clusterField]: undefined,\n });\n };\n\n public onRegionUpdate = (option: Option<string>): void => {\n const region = option.value;\n this.setClusterList(this.props.component.credentials, [region]);\n this.props.onComponentUpdate &&\n this.props.onComponentUpdate({\n ...this.props.component,\n region,\n [this.state.clusterField]: undefined,\n });\n };\n\n public onClusterUpdate = (option: Option<string>): void => {\n const clusterName = option.value;\n const filterByCluster = AppListExtractor.monikerClusterNameFilter(clusterName);\n const clusterMoniker = first(uniq(AppListExtractor.getMonikers([this.props.application], filterByCluster)));\n let moniker: IMoniker;\n\n if (isNil(clusterMoniker)) {\n // remove the moniker from the stage if one doesn't exist.\n moniker = undefined;\n } else {\n // clusters don't contain sequences, so null it out.\n clusterMoniker.sequence = null;\n moniker = clusterMoniker;\n }\n\n if (option.className) {\n const clusters = this.state.clusters;\n clusters.push(clusterName);\n this.setState(clusters);\n }\n\n this.props.onComponentUpdate &&\n this.props.onComponentUpdate({\n ...this.props.component,\n [this.state.clusterField]: clusterName,\n moniker,\n });\n };\n\n public render() {\n const { accounts, isSingleRegion, component } = this.props;\n const { availableRegions, clusters, clusterField, componentName } = this.state;\n return (\n <>\n <StageConfigField label=\"Account\">\n <Select\n name={componentName ? `${componentName}.credentials` : 'credentials'}\n options={\n accounts &&\n accounts.map((acc: IAccount) => ({\n label: acc.name,\n value: acc.name,\n }))\n }\n clearable={false}\n value={component.credentials}\n onChange={this.onAccountUpdate}\n />\n </StageConfigField>\n\n {!isSingleRegion && (\n <StageConfigField label=\"Region\">\n <Select\n name={componentName ? `${componentName}.regions` : 'regions'}\n options={\n availableRegions &&\n availableRegions.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n multi={true}\n clearable={false}\n value={component.regions}\n onChange={this.onRegionsUpdate}\n />\n </StageConfigField>\n )}\n {isSingleRegion && (\n <StageConfigField label=\"Region\">\n <Select\n name={componentName ? `${componentName}.region` : 'region'}\n options={\n availableRegions &&\n availableRegions.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n multi={false}\n clearable={false}\n value={component.region}\n onChange={this.onRegionUpdate}\n />\n </StageConfigField>\n )}\n <StageConfigField label=\"Cluster\" helpKey={'pipeline.config.findAmi.cluster'}>\n <Creatable\n name={componentName ? `${componentName}.${clusterField}` : `${clusterField}`}\n options={\n clusters &&\n clusters.map((c: string) => ({\n label: c,\n value: c,\n }))\n }\n clearable={false}\n value={component[clusterField]}\n onChange={this.onClusterUpdate}\n />\n </StageConfigField>\n </>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport { get } from 'lodash';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IServerGroup, IServerGroupFilter } from '@spinnaker/core';\nimport { AppListExtractor, FormikFormField, ReactSelectInput } from '@spinnaker/core';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroup';\n\nexport interface IFormikAccountRegionClusterSelectorProps {\n accounts: IAccount[];\n application: Application;\n cloudProvider: string;\n clusterField?: string;\n componentName?: string;\n credentialsField?: string;\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n}\n\nexport interface IFormikAccountRegionClusterSelectorState {\n availableRegions: string[];\n cloudProvider: string;\n clusterField: string;\n clusters: string[];\n componentName: string;\n credentialsField: string;\n}\n\nexport class FormikAccountRegionClusterSelector extends React.Component<\n IFormikAccountRegionClusterSelectorProps,\n IFormikAccountRegionClusterSelectorState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IFormikAccountRegionClusterSelectorProps) {\n super(props);\n const credentialsField = props.credentialsField || 'credentials';\n const clusterField = props.clusterField || 'cluster';\n this.state = {\n availableRegions: [],\n cloudProvider: props.cloudProvider,\n clusterField,\n clusters: [],\n componentName: props.componentName || '',\n credentialsField,\n };\n }\n\n public componentDidMount(): void {\n const { componentName, formik } = this.props;\n const { credentialsField } = this.state;\n const credentials = get(\n formik.values,\n componentName ? `${componentName}.${credentialsField}` : `${credentialsField}`,\n undefined,\n );\n const region = get(formik.values, componentName ? `${componentName}.region` : 'region', undefined);\n this.setRegionList(credentials);\n this.setClusterList(credentials, [region]);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private setRegionList = (credentials: string): void => {\n const { application } = this.props;\n const accountFilter: IServerGroupFilter = (serverGroup: IServerGroup) =>\n serverGroup ? serverGroup.account === credentials : true;\n observableFrom(application.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const availableRegions = AppListExtractor.getRegions([application], accountFilter);\n availableRegions.sort();\n this.setState({ availableRegions });\n });\n };\n\n private setClusterList = (credentials: string, regions: string[]): void => {\n const { application } = this.props;\n observableFrom(application.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const clusterFilter = AppListExtractor.clusterFilterForCredentialsAndRegion(credentials, regions);\n const clusters = AppListExtractor.getClusters([application], clusterFilter);\n this.setState({ clusters });\n });\n };\n\n public accountChanged = (credentials: string): void => {\n this.setRegionList(credentials);\n this.setClusterList(credentials, []);\n };\n\n public regionChanged = (region: string): void => {\n const { componentName, formik } = this.props;\n const { credentialsField } = this.state;\n const credentials = get(\n formik.values,\n componentName ? `${componentName}.${credentialsField}` : `${credentialsField}`,\n undefined,\n );\n this.setClusterList(credentials, [region]);\n };\n\n public render() {\n const { accounts } = this.props;\n const { credentialsField, availableRegions, clusters, clusterField, componentName } = this.state;\n return (\n <div className=\"col-md-9\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={componentName ? `${componentName}.${credentialsField}` : `${credentialsField}`}\n label=\"Account\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={accounts && accounts.map((acc: IAccount) => acc.name)}\n clearable={false}\n />\n )}\n onChange={this.accountChanged}\n required={true}\n />\n </div>\n\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={componentName ? `${componentName}.region` : 'region'}\n label=\"Region\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={availableRegions}\n clearable={false}\n />\n )}\n onChange={this.regionChanged}\n required={true}\n />\n </div>\n\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={componentName ? `${componentName}.${clusterField}` : `${clusterField}`}\n label=\"Cluster\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={clusters}\n clearable={false}\n />\n )}\n required={true}\n />\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, NgReact, StageConfigField, StageConstants } from '@spinnaker/core';\n\nimport { AccountRegionClusterSelector } from '../../widgets/accountRegionClusterSelector';\n\nexport interface ICloudFoundryAsgStageConfigState {\n accounts: IAccount[];\n}\n\nexport class CloudFoundryAsgStageConfig extends React.Component<IStageConfigProps, ICloudFoundryAsgStageConfigState> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n this.props.updateStageField({ cloudProvider: 'cloudfoundry' });\n this.state = { accounts: [] };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private targetUpdated = (target: string) => {\n this.props.updateStageField({ target });\n };\n\n private componentUpdated = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n regions: stage.regions,\n cluster: stage.cluster,\n });\n };\n\n public render() {\n const { application, pipeline, stage } = this.props;\n const { target } = stage;\n const { accounts } = this.state;\n const { TargetSelect } = NgReact;\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n onComponentUpdate={this.componentUpdated}\n component={stage}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n </div>\n );\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryLoadBalancersExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'credentials', undefined);\n const region = get(context, 'region', undefined);\n const loadBalancerNames = get(context, 'loadBalancerNames', undefined);\n const serverGroupName = get(context, 'serverGroupName', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Region</dt>\n <dd>\n {region}\n <br />\n </dd>\n <dt>Server Group Name</dt>\n <dd>\n {serverGroupName}\n <br />\n </dd>\n <dt>Load Balancers</dt>\n <dd>\n {loadBalancerNames.join(', ')}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={props.stage} message={props.stage.failureMessage} />\n <StageExecutionLogs stage={props.stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// TODO: refactor this to not use namespace\n// eslint-disable-next-line\nexport namespace CloudFoundryLoadBalancersExecutionDetails {\n export const title = 'cloudfoundryLoadBalancersConfig';\n}\n","import type { Formik } from 'formik';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IPipeline, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, NgReact, SpinFormik, StageConfigField, StageConstants } from '@spinnaker/core';\n\nimport { Routes } from '../../forms/serverGroup';\nimport { AccountRegionClusterSelector } from '../../widgets/accountRegionClusterSelector';\n\ninterface ICloudFoundryLoadBalancerStageConfigProps extends IStageConfigProps {\n pipeline: IPipeline;\n}\n\ninterface ICloudFoundryLoadBalancersValues {\n routes: string[];\n}\n\ninterface ICloudFoundryLoadBalancersStageConfigState {\n accounts: IAccount[];\n application: Application;\n initialValues: ICloudFoundryLoadBalancersValues;\n pipeline: IPipeline;\n}\n\nexport class CloudFoundryLoadBalancersStageConfig extends React.Component<\n ICloudFoundryLoadBalancerStageConfigProps,\n ICloudFoundryLoadBalancersStageConfigState\n> {\n private destroy$ = new Subject();\n private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancersValues>>();\n\n constructor(props: ICloudFoundryLoadBalancerStageConfigProps) {\n super(props);\n const { loadBalancerNames } = props.stage;\n const routes = loadBalancerNames && loadBalancerNames.length ? loadBalancerNames : [''];\n this.props.updateStageField({\n cloudProvider: 'cloudfoundry',\n loadBalancerNames: routes,\n });\n this.state = {\n accounts: [],\n application: props.application,\n initialValues: {\n routes,\n },\n pipeline: props.pipeline,\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private targetUpdated = (target: string) => {\n this.props.updateStageField({ target });\n };\n\n private componentUpdated = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n region: stage.region,\n cluster: stage.cluster,\n loadBalancerNames: stage.loadBalancerNames,\n });\n };\n\n public render() {\n const { stage } = this.props;\n const { accounts, application, initialValues, pipeline } = this.state;\n const { target } = stage;\n const { TargetSelect } = NgReact;\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n isSingleRegion={true}\n onComponentUpdate={this.componentUpdated}\n component={stage}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n <SpinFormik<ICloudFoundryLoadBalancersValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={null}\n render={() => {\n return (\n <Routes\n fieldName={'routes'}\n isRequired={true}\n singleRouteOnly={true}\n onChange={(routes: string[]) => {\n stage.loadBalancerNames = routes;\n this.componentUpdated(stage);\n }}\n />\n );\n }}\n />\n </div>\n );\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryServiceExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'service.account', undefined);\n const region = get(context, 'service.region', undefined);\n const serviceInstanceName = get(context, 'service.instance.name', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Region</dt>\n <dd>\n {region}\n <br />\n </dd>\n <dt>Service Instance Name</dt>\n <dd>\n {serviceInstanceName}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n <StageExecutionLogs stage={stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace CloudFoundryServiceExecutionDetails {\n export const title = 'cloudfoundryServiceConfig';\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryServiceKeyExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'service.account', undefined);\n const region = get(context, 'service.region', undefined);\n const serviceInstanceName = get(context, 'serviceInstanceName', undefined);\n const serviceKeyName = get(context, 'serviceKeyName', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Region</dt>\n <dd>\n {region}\n <br />\n </dd>\n <dt>Service Instance Name</dt>\n <dd>\n {serviceInstanceName}\n <br />\n </dd>\n <dt>Service Key Name</dt>\n <dd>\n {serviceKeyName}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={props.stage} message={props.stage.failureMessage} />\n <StageExecutionLogs stage={props.stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace CloudFoundryServiceKeyExecutionDetails {\n export const title = 'cloudfoundryServiceKeyConfig';\n}\n","import type { IDeferred } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\nimport type { Formik } from 'formik';\nimport { Form } from 'formik';\nimport { $q } from 'ngimport';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type {\n Application,\n IAccount,\n ILoadBalancerModalProps,\n IModalComponentProps,\n IServerGroup,\n} from '@spinnaker/core';\nimport {\n AccountService,\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../domain';\nimport { AccountRegionClusterSelector, Routes } from '../../presentation';\n\nexport interface ICreateCloudFoundryMapLoadBalancerState {\n accounts: IAccount[];\n regions: string[];\n application: Application;\n selectedValues: ICloudFoundryLoadBalancerModalValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryLoadBalancerModalProps extends IModalComponentProps {\n application: Application;\n}\n\nexport interface ICloudFoundryLoadBalancerModalValues {\n credentials: string;\n region: string;\n cluster: string;\n routes: string[];\n}\n\nexport class CloudFoundryMapLoadBalancerModal extends React.Component<\n ICloudFoundryLoadBalancerModalProps,\n ICreateCloudFoundryMapLoadBalancerState\n> {\n public static defaultProps: Partial<ICloudFoundryLoadBalancerModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private destroy$ = new Subject();\n private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancerModalValues>>();\n private $uibModalInstanceEmulation: IModalServiceInstance & { deferred?: IDeferred<any> };\n\n constructor(props: ICloudFoundryLoadBalancerModalProps) {\n super(props);\n\n const deferred = $q.defer();\n const promise = deferred.promise;\n this.$uibModalInstanceEmulation = {\n result: promise,\n close: () => this.props.dismissModal(),\n dismiss: () => this.props.dismissModal(),\n } as IModalServiceInstance;\n Object.assign(this.$uibModalInstanceEmulation, { deferred });\n this.state = {\n accounts: [],\n regions: [],\n application: props.application,\n selectedValues: {\n credentials: '',\n region: '',\n cluster: '',\n routes: [''],\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Mapping a route to your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));\n }\n\n public static show(props: ILoadBalancerModalProps): Promise<void> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(\n CloudFoundryMapLoadBalancerModal,\n {\n application: props.app,\n // className: 'create-pipeline-modal-overflow-visible',\n },\n modalProps,\n );\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private submit = (values: ICloudFoundryLoadBalancerModalValues): void => {\n const { routes } = values;\n const serverGroup: ICloudFoundryServerGroup = this.props.application.serverGroups?.data?.find(\n (sg: ICloudFoundryServerGroup) =>\n sg.cluster === this.state.selectedValues.cluster &&\n sg.account === this.state.selectedValues.credentials &&\n sg.region === this.state.selectedValues.region,\n );\n\n const coreServerGroup: IServerGroup = {\n account: serverGroup.account,\n cloudProvider: serverGroup.cloudProvider,\n cluster: serverGroup.cluster,\n instanceCounts: serverGroup.instanceCounts,\n instances: serverGroup.instances,\n loadBalancers: routes,\n name: serverGroup.name,\n region: serverGroup.region,\n type: serverGroup.type,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.mapLoadBalancers(coreServerGroup, this.props.application, {\n serverGroupName: serverGroup.name,\n });\n });\n };\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private accountRegionClusterUpdated = (values: any) => {\n this.setState({\n selectedValues: {\n cluster: values.cluster,\n credentials: values.credentials,\n region: values.region,\n routes: [''],\n },\n });\n };\n\n public render() {\n const { accounts, application, selectedValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryLoadBalancerModalValues>\n ref={this.formikRef}\n initialValues={selectedValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Map route</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n isSingleRegion={true}\n onComponentUpdate={this.accountRegionClusterUpdated}\n component={selectedValues}\n />\n <Routes fieldName=\"routes\" isRequired={true} singleRouteOnly={true} />\n </Form>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={() => this.submit(formik.values)}\n disabled={!formik.isValid}\n >\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import type {\n IPipeline,\n IStage,\n IStageOrTriggerTypeConfig,\n IStageOrTriggerValidator,\n IValidatorConfig,\n} from '@spinnaker/core';\nimport { NameUtils, PipelineConfigService, PipelineConfigValidator } from '@spinnaker/core';\n\nexport interface ITargetImpedanceValidationConfig extends IValidatorConfig {\n stageTypes?: string[];\n stageType?: string;\n message: string;\n}\n\nexport class CfTargetImpedanceValidator implements IStageOrTriggerValidator {\n public validate(\n pipeline: IPipeline,\n stage: IStage,\n validator: ITargetImpedanceValidationConfig,\n _config: IStageOrTriggerTypeConfig,\n ): string {\n const stagesToTest: IStage[] = PipelineConfigService.getAllUpstreamDependencies(pipeline, stage);\n const regions: string[] = stage.regions || [];\n let allRegionsFound = true;\n\n regions.forEach((region) => {\n let regionFound = false;\n stagesToTest.forEach((toTest) => {\n if (toTest.type === 'deploy' && toTest.clusters && toTest.clusters.length) {\n toTest.clusters.forEach((cluster: any) => {\n const clusterName: string = NameUtils.getClusterName(\n cluster.application,\n cluster.stack,\n cluster.freeFormDetails,\n );\n if (clusterName === stage.cluster && cluster.account === stage.credentials && cluster.region === region) {\n regionFound = true;\n }\n });\n } else if (\n toTest.type === 'cloneServerGroup' &&\n NameUtils.getClusterName(toTest.application, toTest.stack, toTest.freeFormDetails) === stage.cluster &&\n toTest.region === region\n ) {\n regionFound = true;\n }\n });\n if (!regionFound) {\n allRegionsFound = false;\n }\n });\n if (!allRegionsFound) {\n return validator.message;\n }\n return null;\n }\n}\n\nPipelineConfigValidator.registerValidator('cfTargetImpedance', new CfTargetImpedanceValidator());\n","import { get, has, upperFirst } from 'lodash';\n\nimport type { IPipeline, IStage, IStageOrTriggerValidator, ITrigger, IValidatorConfig } from '@spinnaker/core';\nimport { PipelineConfigValidator } from '@spinnaker/core';\n\nexport interface IInstanceFieldSizeValidationConfig extends IValidatorConfig {\n fieldName: string;\n fieldLabel?: string;\n min?: number;\n max?: number;\n message?: string;\n}\n\nexport class CfInstanceSizeFieldValidator implements IStageOrTriggerValidator {\n public validate(\n pipeline: IPipeline,\n stage: IStage | ITrigger,\n validationConfig: IInstanceFieldSizeValidationConfig,\n ): string {\n if (!this.passesValidation(stage, validationConfig)) {\n return this.validationMessage(validationConfig, pipeline);\n }\n return null;\n }\n\n protected passesValidation(stage: IStage | ITrigger, validationConfig: IInstanceFieldSizeValidationConfig): boolean {\n return this.fieldIsValid(stage, validationConfig);\n }\n\n protected validationMessage(validationConfig: IInstanceFieldSizeValidationConfig, pipeline: IPipeline): string {\n const fieldLabel: string = this.printableFieldLabel(validationConfig);\n const hasMin = has(validationConfig, 'min');\n const min: any = hasMin ? get(validationConfig, 'min') : 'NA';\n const hasMax = has(validationConfig, 'max');\n const max: any = hasMax ? get(validationConfig, 'max') : 'NA';\n let message = ``;\n if (hasMin) {\n if (hasMax) {\n message = `<strong>${fieldLabel}</strong> should be from ${min} to ${max} in ${pipeline.name}.`;\n } else {\n message = `<strong>${fieldLabel}</strong> should be at least ${min} in ${pipeline.name}.`;\n }\n } else if (hasMax) {\n message = `<strong>${fieldLabel}</strong> should be no more than ${max} in ${pipeline.name}.`;\n }\n return validationConfig.message || message;\n }\n\n protected printableFieldLabel(config: IInstanceFieldSizeValidationConfig): string {\n const fieldLabel: string = config.fieldLabel || config.fieldName;\n return upperFirst(fieldLabel);\n }\n\n protected fieldIsValid(stage: IStage | ITrigger, config: IInstanceFieldSizeValidationConfig): boolean {\n const fieldExists = has(stage, config.fieldName);\n const field: any = get(stage, config.fieldName);\n const hasMax: boolean = has(config, 'max');\n const hasMin: boolean = has(config, 'min');\n const max: number = get(config, 'max');\n const min: number = get(config, 'min');\n\n return fieldExists && (!hasMax || (hasMax && field <= max)) && (!hasMin || (hasMin && field >= min));\n }\n}\n\nPipelineConfigValidator.registerValidator('cfInstanceSizeField', new CfInstanceSizeFieldValidator());\n","import { get } from 'lodash';\n\nimport type { IPipeline, IStage, IStageOrTriggerValidator, ITrigger } from '@spinnaker/core';\nimport { PipelineConfigValidator } from '@spinnaker/core';\n\nexport class CfRequiredRoutesFieldValidator implements IStageOrTriggerValidator {\n public validate(_pipeline: IPipeline, stage: IStage | ITrigger, validationConfig: any): string {\n const routes: string[] = get(stage, validationConfig.fieldName);\n const routeErrors = routes\n .map((route: string) => {\n const regex = /^([-\\w]+)\\.([-.\\w]+)(:\\d+)?([-/\\w]+)?$/gm;\n route = route || '';\n if (regex.exec(route) === null) {\n const spelRegex = /^\\${.*}$/g;\n if (spelRegex.exec(route) === null) {\n return `\"${route}\" did not match the expected format \"host.some.domain[:9999][/some/path]\"`;\n }\n }\n return null;\n })\n .filter((err) => err != null);\n return (routeErrors && routeErrors.length && routeErrors[0]) || null;\n }\n}\n\nPipelineConfigValidator.registerValidator('cfRequiredRoutesField', new CfRequiredRoutesFieldValidator());\n","import React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport {\n ArtifactTypePatterns,\n excludeAllTypesExcept,\n StageArtifactSelectorDelegate,\n StageConfigField,\n TextInput,\n} from '@spinnaker/core';\n\nexport class BakeCloudFoundryManifestConfigForm extends React.Component<IFormikStageConfigInjectedProps> {\n private static readonly excludedArtifactTypes = excludeAllTypesExcept(\n ArtifactTypePatterns.BITBUCKET_FILE,\n ArtifactTypePatterns.CUSTOM_OBJECT,\n ArtifactTypePatterns.EMBEDDED_BASE64,\n ArtifactTypePatterns.GCS_OBJECT,\n ArtifactTypePatterns.GITHUB_FILE,\n ArtifactTypePatterns.GITLAB_FILE,\n ArtifactTypePatterns.S3_OBJECT,\n ArtifactTypePatterns.HTTP_FILE,\n ArtifactTypePatterns.ORACLE_OBJECT,\n );\n\n public componentDidMount() {\n const stage = this.props.formik.values;\n if (stage.inputArtifacts && stage.inputArtifacts.length === 0) {\n this.props.formik.setFieldValue('inputArtifacts', [\n {\n account: '',\n id: '',\n },\n ]);\n }\n }\n\n private onTemplateArtifactEdited = (artifact: IArtifact, index: number) => {\n this.props.formik.setFieldValue(`inputArtifacts[${index}].id`, null);\n this.props.formik.setFieldValue(`inputArtifacts[${index}].artifact`, artifact);\n this.props.formik.setFieldValue(`inputArtifacts[${index}].account`, artifact.artifactAccount);\n };\n\n private onTemplateArtifactSelected = (id: string, index: number) => {\n this.props.formik.setFieldValue(`inputArtifacts[${index}].id`, id);\n this.props.formik.setFieldValue(`inputArtifacts[${index}].artifact`, null);\n };\n\n private addInputArtifact = () => {\n const stage = this.props.formik.values;\n const newInputArtifacts = [\n ...stage.inputArtifacts,\n {\n account: '',\n id: '',\n },\n ];\n\n this.props.formik.setFieldValue('inputArtifacts', newInputArtifacts);\n };\n\n private removeInputArtifact = (index: number) => {\n const stage = this.props.formik.values;\n const newInputArtifacts = [...stage.inputArtifacts];\n newInputArtifacts.splice(index, 1);\n this.props.formik.setFieldValue('inputArtifacts', newInputArtifacts);\n };\n\n private getInputArtifact = (stage: any, index: number) => {\n if (!stage.inputArtifacts || stage.inputArtifacts.length === 0) {\n return {\n account: '',\n id: '',\n };\n } else {\n return stage.inputArtifacts[index];\n }\n };\n\n private outputNameChange = (outputName: string) => {\n const stage = this.props.formik.values;\n const expectedArtifacts = stage.expectedArtifacts;\n if (\n expectedArtifacts &&\n expectedArtifacts.length === 1 &&\n expectedArtifacts[0].matchArtifact &&\n expectedArtifacts[0].matchArtifact.type === 'embedded/base64'\n ) {\n this.props.formik.setFieldValue('expectedArtifacts', [\n {\n ...expectedArtifacts[0],\n matchArtifact: {\n ...expectedArtifacts[0].matchArtifact,\n name: outputName,\n },\n },\n ]);\n }\n };\n\n public render() {\n const stage = this.props.formik.values;\n\n return (\n <>\n <h4>Manifest Options</h4>\n <StageConfigField fieldColumns={3} label={'Name'} helpKey={'pipeline.config.bake.cf.manifest.name'}>\n <TextInput\n onChange={(e: React.ChangeEvent<any>) => {\n this.props.formik.setFieldValue('outputName', e.target.value);\n this.outputNameChange(e.target.value);\n }}\n value={stage.outputName}\n />\n </StageConfigField>\n <h4>Manifest Template</h4>\n <StageArtifactSelectorDelegate\n artifact={this.getInputArtifact(stage, 0).artifact}\n excludedArtifactTypePatterns={BakeCloudFoundryManifestConfigForm.excludedArtifactTypes}\n expectedArtifactId={this.getInputArtifact(stage, 0).id}\n label=\"Template Artifact\"\n onArtifactEdited={(artifact) => {\n this.onTemplateArtifactEdited(artifact, 0);\n }}\n helpKey={'pipeline.config.bake.cf.manifest.templateArtifact'}\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) => this.onTemplateArtifactSelected(artifact.id, 0)}\n pipeline={this.props.pipeline}\n stage={stage}\n />\n <h4>Manifest Variables</h4>\n {stage.inputArtifacts && stage.inputArtifacts.length > 1 && (\n <div className=\"row form-group\">\n {stage.inputArtifacts.slice(1).map((a: any, index: number) => {\n return (\n <div key={index}>\n <div className=\"col-md-offset-1 col-md-9\">\n <StageArtifactSelectorDelegate\n artifact={a.artifact}\n excludedArtifactTypePatterns={[]}\n expectedArtifactId={a.id}\n label=\"Variables Artifact\"\n onArtifactEdited={(artifact) => {\n this.onTemplateArtifactEdited(artifact, index + 1);\n }}\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) =>\n this.onTemplateArtifactSelected(artifact.id, index + 1)\n }\n helpKey={'pipeline.config.bake.cf.manifest.varsArtifact'}\n pipeline={this.props.pipeline}\n stage={stage}\n />\n </div>\n <div className=\"col-md-1\">\n <div className=\"form-control-static\">\n <button onClick={() => this.removeInputArtifact(index + 1)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove field</span>\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n <StageConfigField fieldColumns={8} label={''}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={() => this.addInputArtifact()}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add variables artifact\n </button>\n </StageConfigField>\n </>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { BakeCloudFoundryManifestConfigForm } from './BakeCloudFoundryManifestConfigForm';\n\nexport function BakeCloudFoundryManifestConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n inputArtifacts: [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n validate={validateBakeCloudFoundryManifestStage}\n render={(props) => <BakeCloudFoundryManifestConfigForm {...props} />}\n />\n );\n}\n\nexport function validateBakeCloudFoundryManifestStage(stage: IStage): FormikErrors<IStage> {\n const formValidator = new FormValidator(stage);\n\n formValidator\n .field('expectedArtifacts', 'Produced artifacts')\n .required()\n .withValidators((artifacts: IExpectedArtifact[]) => {\n if (validateProducedArtifacts(artifacts)) {\n return undefined;\n }\n return 'Exactly one expected artifact of type embedded/base64 must be configured in the Produces Artifacts section';\n });\n formValidator.field('outputName', 'Name').required();\n formValidator\n .field('inputArtifacts', 'Template and Variables Artifacts')\n .required()\n .withValidators((artifacts: IArtifact[]) => {\n if (validateInputArtifacts(artifacts)) {\n return undefined;\n }\n return 'There should be one manifest template and at least one variables artifact';\n });\n\n return formValidator.validateForm();\n}\n\nexport function validateProducedArtifacts(artifacts: IExpectedArtifact[]): boolean {\n return artifacts?.length === 1 && artifacts[0]?.matchArtifact?.type === 'embedded/base64';\n}\n\nexport function validateInputArtifacts(artifacts: IArtifact[]): boolean {\n return artifacts?.length >= 2;\n}\n","import React from 'react';\n\nimport type { IArtifact, IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport {\n decodeUnicodeBase64,\n ExecutionDetailsSection,\n ManifestYaml,\n Overridable,\n StageFailureMessage,\n} from '@spinnaker/core';\n\n@Overridable('bakeManifest.bakeManifestDetailsTab')\nexport class BakeCloudFoundryManifestDetailsTab extends React.Component<IExecutionDetailsSectionProps> {\n public static title = 'bakedManifest';\n\n public render() {\n const { current, name, stage } = this.props;\n const bakedArtifacts: IArtifact[] = (stage.context.artifacts || []).filter(\n (a: IArtifact) => a.type === 'embedded/base64',\n );\n return (\n <ExecutionDetailsSection name={name} current={current}>\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n {bakedArtifacts.map((artifact, i) => (\n <ManifestYaml\n key={i}\n linkName={bakedArtifacts.length > 1 ? `Baked Manifest ${i} YAML` : 'Baked Manifest YAML'}\n manifestText={decodeUnicodeBase64(artifact.reference)}\n modalTitle=\"Baked Manifest\"\n />\n ))}\n </ExecutionDetailsSection>\n );\n }\n}\n","import type { IArtifact, IStage } from '@spinnaker/core';\nimport {\n ArtifactReferenceService,\n ExecutionArtifactTab,\n ExecutionDetailsTasks,\n ExpectedArtifactService,\n Registry,\n} from '@spinnaker/core';\n\nimport {\n BakeCloudFoundryManifestConfig,\n validateBakeCloudFoundryManifestStage,\n} from './BakeCloudFoundryManifestConfig';\nimport { BakeCloudFoundryManifestDetailsTab } from './BakeCloudFoundryManifestDetailsTab';\n\nexport const BAKE_CF_MANIFEST_STAGE_KEY = 'bakeCloudFoundryManifest';\n\nRegistry.pipeline.registerStage({\n label: 'Bake CloudFoundry Manifest',\n description: 'Bake a CF manifest using external variables files.',\n key: BAKE_CF_MANIFEST_STAGE_KEY,\n component: BakeCloudFoundryManifestConfig,\n producesArtifacts: true,\n cloudProvider: 'cloudfoundry',\n executionDetailsSections: [BakeCloudFoundryManifestDetailsTab, ExecutionDetailsTasks, ExecutionArtifactTab],\n artifactExtractor: (fields: string[]) =>\n ExpectedArtifactService.accumulateArtifacts<IArtifact>(['inputArtifacts'])(fields).map((a: IArtifact) => a.id),\n artifactRemover: (stage: IStage, artifactId: string) => {\n ArtifactReferenceService.removeArtifactFromFields(['expectedArtifactId'])(stage, artifactId);\n const artifactDoesNotMatch = (artifact: IArtifact) => artifact.id !== artifactId;\n stage.expectedArtifacts = (stage.expectedArtifacts ?? []).filter(artifactDoesNotMatch);\n stage.inputArtifacts = (stage.inputArtifacts ?? []).filter(artifactDoesNotMatch);\n },\n validateFn: validateBakeCloudFoundryManifestStage,\n});\n","import type { Application, IPipeline, IStage } from '@spinnaker/core';\nimport type { ICloudFoundryApplication, ICloudFoundryEnvVar, ICloudFoundryServerGroup } from '../../domain';\n\nimport type {\n ICloudFoundryCreateServerGroupCommand,\n ICloudFoundryDeployConfiguration,\n} from './serverGroupConfigurationModel.cf';\n\nexport class CloudFoundryServerGroupCommandBuilder {\n private static envVarsFromObject(someObject: any): ICloudFoundryEnvVar[] {\n const envVars = [];\n for (const property in someObject) {\n if (someObject.hasOwnProperty(property)) {\n const envVar = { key: property, value: someObject[property] };\n envVars.push(envVar);\n }\n }\n return envVars;\n }\n\n private static getSubmitButtonLabel(mode: string) {\n switch (mode) {\n case 'createPipeline':\n return 'Add';\n case 'editPipeline':\n case 'editClonePipeline':\n return 'Done';\n case 'clone':\n return 'Clone';\n default:\n return 'Create';\n }\n }\n\n public static buildNewServerGroupCommand(app: Application, defaults: any): ICloudFoundryCreateServerGroupCommand {\n defaults = defaults || {};\n return {\n application: app.name,\n stack: '',\n freeFormDetails: '',\n region: '',\n strategy: '',\n credentials: '',\n viewState: {\n mode: defaults.mode || 'create',\n submitButtonLabel: CloudFoundryServerGroupCommandBuilder.getSubmitButtonLabel(defaults.mode || 'create'),\n },\n selectedProvider: 'cloudfoundry',\n startApplication: true,\n } as ICloudFoundryCreateServerGroupCommand;\n }\n\n public static buildServerGroupCommandFromExisting(\n app: Application,\n serverGroup: ICloudFoundryServerGroup,\n mode = 'clone',\n ): ICloudFoundryCreateServerGroupCommand {\n const command: ICloudFoundryCreateServerGroupCommand = this.buildNewServerGroupCommand(app, { mode });\n command.credentials = '';\n command.manifest = {\n direct: {\n memory: serverGroup.memory ? serverGroup.memory + 'M' : '1024M',\n diskQuota: serverGroup.diskQuota ? serverGroup.diskQuota + 'M' : '1024M',\n buildpacks:\n serverGroup.droplet && serverGroup.droplet.buildpacks\n ? serverGroup.droplet.buildpacks.map((item) => item.name)\n : [],\n instances: serverGroup.instances ? serverGroup.instances.length : 1,\n routes: serverGroup.loadBalancers || [],\n environment: CloudFoundryServerGroupCommandBuilder.envVarsFromObject(serverGroup.env),\n services: (serverGroup.serviceInstances || []).map((serviceInstance) => serviceInstance.name),\n healthCheckType: 'port',\n },\n };\n command.region = '';\n command.stack = serverGroup.stack;\n command.freeFormDetails = serverGroup.detail;\n command.source = {\n asgName: serverGroup.name,\n region: serverGroup.region,\n account: serverGroup.account,\n };\n return command;\n }\n\n public static buildNewServerGroupCommandForPipeline(\n stage: IStage,\n pipeline: IPipeline,\n ): ICloudFoundryCreateServerGroupCommand {\n const command: ICloudFoundryCreateServerGroupCommand = this.buildNewServerGroupCommand(\n { name: pipeline.application } as Application,\n { mode: 'editPipeline' },\n );\n command.viewState = {\n ...command.viewState,\n pipeline,\n requiresTemplateSelection: true,\n stage,\n };\n return command;\n }\n\n public static buildServerGroupCommandFromPipeline(\n application: ICloudFoundryApplication,\n originalCluster: ICloudFoundryDeployConfiguration,\n stage: IStage,\n pipeline: IPipeline,\n ): ICloudFoundryCreateServerGroupCommand {\n const command = this.buildNewServerGroupCommand(application, { mode: 'editPipeline' });\n command.credentials = originalCluster.account;\n command.applicationArtifact = originalCluster.applicationArtifact;\n command.delayBeforeDisableSec = originalCluster.delayBeforeDisableSec;\n command.manifest = originalCluster.manifest;\n command.maxRemainingAsgs = originalCluster.maxRemainingAsgs;\n command.region = originalCluster.region;\n command.rollback = originalCluster.rollback;\n command.strategy = originalCluster.strategy;\n command.startApplication = originalCluster.startApplication;\n command.targetPercentages = originalCluster.targetPercentages;\n command.delayBeforeScaleDownSec = originalCluster.delayBeforeScaleDownSec;\n if (originalCluster.stack) {\n command.stack = originalCluster.stack;\n }\n\n if (originalCluster.freeFormDetails) {\n command.freeFormDetails = originalCluster.freeFormDetails;\n }\n\n command.viewState = {\n ...command.viewState,\n pipeline,\n stage,\n };\n\n return command;\n }\n\n public static buildCloneServerGroupCommandFromPipeline(\n stage: IStage,\n pipeline: IPipeline,\n ): ICloudFoundryCreateServerGroupCommand {\n const command = this.buildNewServerGroupCommand({ name: pipeline.application } as Application, {\n mode: 'editClonePipeline',\n });\n command.credentials = stage.credentials;\n command.capacity = stage.capacity;\n command.account = stage.account;\n command.delayBeforeDisableSec = stage.delayBeforeDisableSec;\n command.freeFormDetails = stage.freeFormDetails || command.freeFormDetails;\n command.maxRemainingAsgs = stage.maxRemainingAsgs;\n command.region = stage.region;\n command.startApplication = stage.startApplication === undefined || stage.startApplication;\n command.stack = stage.stack || command.stack;\n command.strategy = stage.strategy;\n command.target = stage.target;\n command.targetCluster = stage.targetCluster;\n command.manifest = stage.manifest || command.manifest;\n command.source = stage.source;\n\n command.viewState = {\n ...command.viewState,\n pipeline,\n stage,\n };\n\n return command;\n }\n}\n","import type { IQService } from 'angular';\n\nimport type { Application, IPipeline, IStage } from '@spinnaker/core';\nimport type { ICloudFoundryApplication, ICloudFoundryServerGroup } from '../../domain';\n\nimport { CloudFoundryServerGroupCommandBuilder } from './serverGroupCommandBuilder.service.cf';\nimport type {\n ICloudFoundryCreateServerGroupCommand,\n ICloudFoundryDeployConfiguration,\n} from './serverGroupConfigurationModel.cf';\n\nexport class CloudFoundryServerGroupCommandBuilderShim {\n public static $inject = ['$q'];\n constructor(private $q: IQService) {}\n\n public buildNewServerGroupCommand(\n app: Application,\n defaults: any,\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(CloudFoundryServerGroupCommandBuilder.buildNewServerGroupCommand(app, defaults));\n }\n\n public buildServerGroupCommandFromExisting(\n app: Application,\n serverGroup: ICloudFoundryServerGroup,\n mode = 'clone',\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(\n CloudFoundryServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup, mode),\n );\n }\n\n public buildNewServerGroupCommandForPipeline(\n stage: IStage,\n pipeline: IPipeline,\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(CloudFoundryServerGroupCommandBuilder.buildNewServerGroupCommandForPipeline(stage, pipeline));\n }\n\n public buildServerGroupCommandFromPipeline(\n application: ICloudFoundryApplication,\n originalCluster: ICloudFoundryDeployConfiguration,\n stage: IStage,\n pipeline: IPipeline,\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(\n CloudFoundryServerGroupCommandBuilder.buildServerGroupCommandFromPipeline(\n application,\n originalCluster,\n stage,\n pipeline,\n ),\n );\n }\n\n public buildCloneServerGroupCommandFromPipeline(\n stage: IStage,\n pipeline: IPipeline,\n ): PromiseLike<ICloudFoundryCreateServerGroupCommand> {\n return this.$q.when(\n CloudFoundryServerGroupCommandBuilder.buildCloneServerGroupCommandFromPipeline(stage, pipeline),\n );\n }\n}\n","import React from 'react';\n\nimport type { Application, ITemplateSelectionText } from '@spinnaker/core';\nimport { DeployInitializer } from '@spinnaker/core';\n\nimport type { ICloudFoundryCreateServerGroupCommand } from '../serverGroupConfigurationModel.cf';\n\nexport interface IServerGroupTemplateSelectionProps {\n app: Application;\n command: ICloudFoundryCreateServerGroupCommand;\n onDismiss: () => void;\n onTemplateSelected: () => void;\n}\n\nexport interface IServerGroupTemplateSelectionState {\n templateSelectionText: ITemplateSelectionText;\n}\n\nexport class ServerGroupTemplateSelection extends React.Component<\n IServerGroupTemplateSelectionProps,\n IServerGroupTemplateSelectionState\n> {\n constructor(props: IServerGroupTemplateSelectionProps) {\n super(props);\n this.state = {\n templateSelectionText: {\n copied: [\n 'account, region, cluster name (stack, details)',\n 'routes',\n 'service instances',\n 'instance settings',\n 'environment variables',\n ],\n notCopied: ['artifacts'],\n additionalCopyText: '',\n },\n };\n }\n\n public render() {\n const { app, command, onDismiss, onTemplateSelected } = this.props;\n const { templateSelectionText } = this.state;\n\n return (\n <DeployInitializer\n cloudProvider=\"cloudfoundry\"\n application={app}\n command={command}\n onDismiss={onDismiss}\n onTemplateSelected={onTemplateSelected}\n templateSelectionText={templateSelectionText}\n />\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IPipeline, IStage, IWizardPageComponent } from '@spinnaker/core';\nimport { ArtifactTypePatterns, StageArtifactSelector } from '@spinnaker/core';\nimport { FormikConfigField } from '../../../../../presentation';\n\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroupConfigurationModel.cf';\n\nexport interface ICloudFoundryCreateServerGroupArtifactSettingsProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n stage: IStage;\n pipeline: IPipeline;\n}\n\nexport class CloudFoundryServerGroupArtifactSettings\n extends React.Component<ICloudFoundryCreateServerGroupArtifactSettingsProps>\n implements IWizardPageComponent<ICloudFoundryCreateServerGroupCommand> {\n public static get LABEL() {\n return 'Artifact';\n }\n\n private excludedArtifactTypePatterns = [\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ];\n\n private onExpectedArtifactSelected = (expectedArtifact: IExpectedArtifact): void => {\n this.props.formik.setFieldValue('applicationArtifact', { artifactId: expectedArtifact.id });\n };\n\n private onArtifactChanged = (artifact: IArtifact): void => {\n this.props.formik.setFieldValue('applicationArtifact', { artifact: artifact });\n };\n\n public validate(_values: ICloudFoundryCreateServerGroupCommand) {\n const { applicationArtifact } = this.props.formik.values;\n const errors = {} as any;\n if (\n !applicationArtifact ||\n !(\n (applicationArtifact.artifact && applicationArtifact.artifact.type && applicationArtifact.artifact.reference) ||\n applicationArtifact.artifactId\n )\n ) {\n errors.applicationArtifact = 'Application artifact information is required';\n }\n\n return errors;\n }\n\n public render() {\n const { formik, stage, pipeline } = this.props;\n const applicationArtifact = formik.values.applicationArtifact;\n return (\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"StandardFieldLayout flex-container-h margin-between-lg\">\n <div className=\"flex-grow\">\n <StageArtifactSelector\n pipeline={pipeline}\n stage={stage}\n expectedArtifactId={applicationArtifact && applicationArtifact.artifactId}\n artifact={applicationArtifact && applicationArtifact.artifact}\n onExpectedArtifactSelected={this.onExpectedArtifactSelected}\n onArtifactEdited={this.onArtifactChanged}\n excludedArtifactTypePatterns={this.excludedArtifactTypePatterns}\n renderLabel={(field: React.ReactNode) => {\n return <FormikConfigField label={'Artifact'}>{field}</FormikConfigField>;\n }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type {\n ICloudFoundryCreateServerGroupCommand,\n ICloudFoundrySource,\n} from '../../../serverGroupConfigurationModel.cf';\n\nexport interface ICloudFoundryCloneServerGroupProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n source: ICloudFoundrySource;\n}\n\nexport class CloudFoundryServerGroupConstantArtifactSettings extends React.Component<\n ICloudFoundryCloneServerGroupProps\n> {\n constructor(props: ICloudFoundryCloneServerGroupProps) {\n super(props);\n const { source } = props;\n this.props.formik.setFieldValue('source', source);\n }\n\n public render(): JSX.Element {\n const { source } = this.props;\n\n return (\n <div>\n <div className=\"form-group row\">\n <label className=\"col-md-3 col-form-label sm-label-right\">Account</label>\n <div className=\"col-md-7\">\n <input className=\"form-control\" type=\"text\" id=\"cluster\" value={source.account} readOnly={true} />\n </div>\n </div>\n <div className=\"form-group row\">\n <label className=\"col-md-3 col-form-label sm-label-right\">Region</label>\n <div className=\"col-md-7\">\n <input className=\"form-control\" type=\"text\" id=\"cluster\" value={source.region} readOnly={true} />\n </div>\n </div>\n <div className=\"form-group row\">\n <label className=\"col-md-3 col-form-label sm-label-right\">Server Group</label>\n <div className=\"col-md-7\">\n <input className=\"form-control\" type=\"text\" id=\"cluster\" value={source.asgName} readOnly={true} />\n </div>\n </div>\n </div>\n );\n }\n}\n","import { set } from 'lodash';\nimport React from 'react';\n\nimport type { IDeploymentStrategyAdditionalFieldsProps, IServerGroupCommand } from '@spinnaker/core';\nimport { HelpField } from '@spinnaker/core';\n\nexport interface IRollingRedBlackCommand extends IServerGroupCommand {\n targetPercentages: number[];\n delayBeforeDisableSec: number;\n delayBeforeScaleDownSec: number;\n maxRemainingAsgs: number;\n rollback: {\n onFailure: boolean;\n };\n scaleDown: boolean;\n}\n\nexport interface IRollingRedBlackStrategyAdditionalFieldsProps extends IDeploymentStrategyAdditionalFieldsProps {\n command: IRollingRedBlackCommand;\n}\n\nexport class AdditionalFields extends React.Component<IRollingRedBlackStrategyAdditionalFieldsProps> {\n private handlePercentChange = (key: string, value: any, index: number) => {\n const percentages = this.props.command.targetPercentages;\n percentages[index] = value;\n set(this.props.command, key, percentages);\n this.forceUpdate();\n };\n\n private onDelete = (index: number) => {\n const percentages = this.props.command.targetPercentages;\n percentages.splice(index, 1);\n set(this.props.command, 'targetPercentages', percentages);\n this.forceUpdate();\n };\n\n private addPercent = () => {\n const percentages = this.props.command.targetPercentages;\n percentages.push(100);\n set(this.props.command, 'targetPercentages', percentages);\n this.forceUpdate();\n };\n\n private handleChange = (key: string, value: any) => {\n set(this.props.command, key, value);\n this.forceUpdate();\n };\n\n public render() {\n const { command } = this.props;\n return (\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <div className=\"col-md-12 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n checked={command.rollback.onFailure}\n onChange={(e) => this.handleChange('rollback.onFailure', e.target.checked)}\n />\n Rollback to previous server group if deployment fails <HelpField id=\"strategy.rollingRedBlack.rollback\" />\n </label>\n </div>\n <div className=\"col-md-12 form-inline sp-margin-m-bottom sp-margin-m-top\">\n <label>\n Wait Before Scale Down \n <HelpField content=\"Time to wait before scaling down source server group\" />\n </label>\n <div>\n <input\n className=\"form-control input-sm\"\n style={{ width: '60px' }}\n min=\"0\"\n type=\"number\"\n value={command.delayBeforeDisableSec}\n onChange={(e) => this.handleChange('delayBeforeDisableSec', e.target.value)}\n placeholder=\"0\"\n />\n seconds\n </div>\n </div>\n <div className=\"col-md-12 form-inline sp-margin-m-bottom\">\n <label>\n Maximum number of server groups to leave \n <HelpField id=\"strategy.redblack.maxRemainingAsgs\" />\n </label>\n <div>\n <input\n className=\"form-control input-sm\"\n style={{ width: '60px' }}\n min=\"2\"\n type=\"number\"\n value={command.maxRemainingAsgs}\n onChange={(e) => this.handleChange('maxRemainingAsgs', e.target.value)}\n />\n server groups\n </div>\n </div>\n <div className=\"col-md-12 form-inline sp-margin-m-bottom\">\n <label>\n Wait Before Cluster Scale Down \n <HelpField content=\"Time to wait before scaling down the cluster after deployment\" />\n </label>\n <div>\n <input\n className=\"form-control input-sm\"\n style={{ width: '60px' }}\n min=\"0\"\n type=\"number\"\n value={command.delayBeforeScaleDownSec}\n onChange={(e) => this.handleChange('delayBeforeScaleDownSec', e.target.value)}\n placeholder=\"0\"\n />\n seconds\n </div>\n </div>\n <label>\n Scale by percentages \n <HelpField content=\"Steps to get to full capacity in percent\" />\n </label>\n <table className=\"table table-condensed packed metadata\">\n <tbody>\n {command.targetPercentages.map((percentage: number, index: number) => {\n return (\n <tr key={index}>\n <td>\n <div className=\"sp-margin-m-bottom\">\n <input\n className=\"form-control\"\n min=\"0\"\n type=\"number\"\n value={percentage}\n onChange={(e) => this.handlePercentChange('targetPercentages', e.target.value, index)}\n placeholder=\"100\"\n />\n </div>\n </td>\n <td>\n <a className=\"btn btn-link sm-label\" onClick={() => this.onDelete(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n );\n })}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={2}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => this.addPercent()}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add percentage\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n );\n }\n}\n","import { defaultsDeep, unset } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport type {\n IDeploymentStrategy,\n IDeploymentStrategyAdditionalFieldsProps,\n IServerGroupCommand,\n} from '@spinnaker/core';\nimport { CoreRedBlackAdditionalFields, HelpField, Markdown } from '@spinnaker/core';\n\nimport type { IRedBlackCommand } from './strategies/redblack/redblack.strategy';\nimport type { IRollingRedBlackCommand } from './strategies/rollingredblack/AdditionalFields';\nimport { AdditionalFields as AdditionalRollingRedBlackFields } from './strategies/rollingredblack/AdditionalFields';\n\nexport interface ICloudFoundryDeploymentStrategySelectorProps {\n command: IServerGroupCommand;\n onFieldChange: (key: string, value: any) => void;\n onStrategyChange: (command: IServerGroupCommand, strategy: IDeploymentStrategy) => void;\n}\n\nexport interface ICloudFoundryDeploymentStrategySelectorState {\n strategies: IDeploymentStrategy[];\n currentStrategy: string;\n AdditionalFieldsComponent: React.ComponentType<IDeploymentStrategyAdditionalFieldsProps>;\n}\n\nexport class CloudFoundryDeploymentStrategySelector extends React.Component<\n ICloudFoundryDeploymentStrategySelectorProps,\n ICloudFoundryDeploymentStrategySelectorState\n> {\n public state: ICloudFoundryDeploymentStrategySelectorState = {\n strategies: [\n {\n label: 'None',\n description: 'Creates the next server group with no impact on existing server groups',\n key: '',\n },\n {\n label: 'Highlander',\n description:\n 'Destroys <i>all</i> previous server groups in the cluster as soon as new server group passes health checks',\n key: 'highlander',\n },\n {\n label: 'Red/Black',\n description:\n 'Disables <i>all</i> previous server groups in the cluster as soon as new server group passes health checks',\n key: 'redblack',\n additionalFields: ['maxRemainingAsgs'],\n AdditionalFieldsComponent: CoreRedBlackAdditionalFields,\n initializationMethod: (command: IRedBlackCommand) => {\n defaultsDeep(command, {\n rollback: {\n onFailure: false,\n },\n maxRemainingAsgs: 2,\n delayBeforeDisableSec: 0,\n delayBeforeScaleDownSec: 0,\n scaleDown: false,\n });\n },\n },\n {\n label: 'Rolling Red/Black',\n description:\n 'Gradually replaces <i>all</i> previous server group instances in the cluster as soon as new server group instances pass health checks',\n key: 'cfrollingredblack',\n additionalFields: ['targetPercentages'],\n AdditionalFieldsComponent: AdditionalRollingRedBlackFields,\n initializationMethod: (command: IRollingRedBlackCommand) => {\n defaultsDeep(command, {\n rollback: {\n onFailure: false,\n },\n targetPercentages: command.targetPercentages ? command.targetPercentages : [50, 100], // defaultsDeep does not work with arrays\n delayBeforeDisableSec: 0,\n delayBeforeScaleDownSec: 0,\n maxRemainingAsgs: 2,\n scaleDown: false,\n });\n },\n },\n ],\n currentStrategy: null,\n AdditionalFieldsComponent: undefined,\n };\n\n public selectStrategy(strategy: string): void {\n const { command, onStrategyChange } = this.props;\n const oldStrategy = this.state.strategies.find((s) => s.key === this.state.currentStrategy);\n const newStrategy = this.state.strategies.find((s) => s.key === strategy);\n\n if (oldStrategy && oldStrategy.additionalFields) {\n oldStrategy.additionalFields.forEach((field) => {\n if (!newStrategy || !newStrategy.additionalFields || !newStrategy.additionalFields.includes(field)) {\n unset(command, field);\n }\n });\n }\n\n let AdditionalFieldsComponent;\n if (newStrategy) {\n AdditionalFieldsComponent = newStrategy.AdditionalFieldsComponent;\n if (newStrategy.initializationMethod) {\n newStrategy.initializationMethod(command);\n }\n }\n command.strategy = strategy;\n if (onStrategyChange && newStrategy) {\n onStrategyChange(command, newStrategy);\n }\n this.setState({ currentStrategy: strategy, AdditionalFieldsComponent });\n }\n\n public strategyChanged = (option: Option<IDeploymentStrategy>) => {\n this.selectStrategy(option.key);\n };\n\n public componentDidMount() {\n this.selectStrategy(this.props.command.strategy);\n }\n\n public render() {\n const { command, onFieldChange } = this.props;\n const { AdditionalFieldsComponent, currentStrategy, strategies } = this.state;\n const hasAdditionalFields = Boolean(AdditionalFieldsComponent);\n if (strategies && strategies.length) {\n return (\n <div>\n <div className=\"StandardFieldLayout flex-container-h baseline margin-between-lg\">\n <div className={`sm-label-right`} style={{ paddingLeft: '13px' }}>\n Strategy \n <HelpField id=\"core.serverGroup.strategy\" />\n </div>\n <div className=\"flex-grow\">\n <Select\n clearable={false}\n required={true}\n options={strategies}\n placeholder=\"None\"\n valueKey=\"key\"\n value={currentStrategy}\n optionRenderer={this.strategyOptionRenderer}\n valueRenderer={(o) => <>{o.label}</>}\n onChange={this.strategyChanged}\n />\n </div>\n </div>\n {hasAdditionalFields && (\n <div className=\"form-group col-md-9 col-md-offset-3\" style={{ marginTop: '5px', float: 'right' }}>\n <AdditionalFieldsComponent command={command} onChange={onFieldChange} />\n </div>\n )}\n </div>\n );\n }\n\n return null;\n }\n\n private strategyOptionRenderer = (option: IDeploymentStrategy) => {\n return (\n <div className=\"body-regular\">\n <strong>\n <Markdown tag=\"span\" message={option.label} />\n </strong>\n <div>\n <Markdown tag=\"span\" message={option.description} />\n </div>\n </div>\n );\n };\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { get } from 'lodash';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IWizardPageComponent } from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n HelpField,\n ReactSelectInput,\n TextInput,\n} from '@spinnaker/core';\nimport { CloudFoundryDeploymentStrategySelector } from '../../../../../deploymentStrategy/CloudFoundryDeploymentStrategySelector';\n\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroupConfigurationModel.cf';\n\nimport '../../../../../common/cloudFoundry.less';\n\nexport interface ICloudFoundryServerGroupBasicSettingsProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n}\n\nexport interface ICloudFoundryServerGroupLocationSettingsState {\n accounts: IAccount[];\n regions: IRegion[];\n}\n\nexport class CloudFoundryServerGroupBasicSettings\n extends React.Component<ICloudFoundryServerGroupBasicSettingsProps, ICloudFoundryServerGroupLocationSettingsState>\n implements IWizardPageComponent<ICloudFoundryCreateServerGroupCommand> {\n private destroy$ = new Subject();\n public state: ICloudFoundryServerGroupLocationSettingsState = {\n accounts: [],\n regions: [],\n };\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => {\n this.setState({ accounts });\n this.updateRegionList();\n });\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private accountChanged = (): void => {\n this.updateRegionList();\n this.props.formik.setFieldValue('region', '');\n };\n\n private updateRegionList = (): void => {\n const credentials = get(this.props.formik.values, 'credentials', undefined);\n if (credentials) {\n observableFrom(AccountService.getRegionsForAccount(credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regions) => this.setState({ regions }));\n }\n };\n\n private strategyChanged = (_values: ICloudFoundryCreateServerGroupCommand, strategy: any) => {\n this.props.formik.setFieldValue('strategy', strategy.key);\n };\n\n private onStrategyFieldChange = (key: string, value: any) => {\n this.props.formik.setFieldValue(key, value);\n };\n\n public render(): JSX.Element {\n const { formik } = this.props;\n const { accounts, regions } = this.state;\n const { values } = formik;\n return (\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"credentials\"\n label=\"Account\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={accounts && accounts.map((acc: IAccount) => acc.name)}\n clearable={false}\n />\n )}\n onChange={this.accountChanged}\n required={true}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"region\"\n label=\"Region\"\n input={(props) => (\n <ReactSelectInput\n {...props}\n stringOptions={regions && regions.map((region: IRegion) => region.name)}\n inputClassName={'cloudfoundry-react-select'}\n clearable={false}\n />\n )}\n required={true}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"stack\"\n label=\"Stack\"\n input={(props) => <TextInput {...props} />}\n help={<HelpField id=\"cf.serverGroup.stack\" />}\n />\n </div>\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"freeFormDetails\"\n label=\"Detail\"\n input={(props) => <TextInput {...props} />}\n help={<HelpField id=\"cf.serverGroup.detail\" />}\n />\n </div>\n <div className=\"sp-margin-m-bottom cloud-foundry-checkbox\">\n <FormikFormField\n name=\"startApplication\"\n label=\"Start on creation\"\n input={(props) => <CheckboxInput {...props} />}\n help={<HelpField id=\"cf.serverGroup.startApplication\" />}\n />\n </div>\n {(values.viewState.mode === 'editPipeline' ||\n values.viewState.mode === 'createPipeline' ||\n values.viewState.mode === 'editClonePipeline') && (\n <CloudFoundryDeploymentStrategySelector\n onFieldChange={this.onStrategyFieldChange}\n onStrategyChange={this.strategyChanged}\n command={values}\n />\n )}\n </div>\n </div>\n );\n }\n\n public validate(values: ICloudFoundryCreateServerGroupCommand) {\n const errors = {} as FormikErrors<ICloudFoundryCreateServerGroupCommand>;\n\n if (values.stack && !values.stack.match(/^[a-zA-Z0-9]*$/)) {\n errors.stack = 'Stack can only contain letters and numbers.';\n }\n if (values.freeFormDetails && !values.freeFormDetails.match(/^[a-zA-Z0-9-]*$/)) {\n errors.freeFormDetails = 'Detail can only contain letters, numbers, and dashes.';\n }\n\n return errors;\n }\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IDeploymentStrategy, IWizardPageComponent } from '@spinnaker/core';\nimport { AccountService, FormikFormField, Markdown, ReactSelectInput, StageConstants } from '@spinnaker/core';\nimport { FormikAccountRegionClusterSelector } from '../../../../../presentation';\n\nimport type { ICloudFoundryCreateServerGroupCommand } from '../../../serverGroupConfigurationModel.cf';\n\nimport '../../../../../common/cloudFoundry.less';\n\nexport interface ICloudFoundryCloneSettingsProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n application: Application;\n}\n\nexport interface ICloudFoundryCloneSettingsState {\n accounts: IAccount[];\n}\n\nexport class CloudFoundryServerGroupCloneSettings\n extends React.Component<ICloudFoundryCloneSettingsProps, ICloudFoundryCloneSettingsState>\n implements IWizardPageComponent<ICloudFoundryCreateServerGroupCommand> {\n private destroy$ = new Subject();\n public state: ICloudFoundryCloneSettingsState = {\n accounts: [],\n };\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private strategyOptionRenderer = (option: IDeploymentStrategy) => {\n return (\n <div className=\"body-regular\">\n <strong>\n <Markdown tag=\"span\" message={option.label} />\n </strong>\n <div>\n <Markdown tag=\"span\" message={option.description} />\n </div>\n </div>\n );\n };\n\n public render(): JSX.Element {\n const { application, formik } = this.props;\n const { accounts } = this.state;\n return (\n <div className=\"form-group\">\n <FormikAccountRegionClusterSelector\n componentName={'source'}\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n clusterField={'clusterName'}\n credentialsField={'account'}\n formik={formik}\n />\n <div className=\"col-md-9\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name={'target'}\n label=\"Target\"\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n options={StageConstants.TARGET_LIST.map((t) => {\n return {\n label: t.label,\n value: t.val,\n description: t.description,\n };\n })}\n optionRenderer={this.strategyOptionRenderer}\n clearable={false}\n />\n )}\n required={true}\n />\n </div>\n </div>\n </div>\n );\n }\n\n public validate(_values: ICloudFoundryCreateServerGroupCommand) {\n const errors = {} as FormikErrors<ICloudFoundryCreateServerGroupCommand>;\n\n return errors;\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IPipeline, IStage, IWizardPageComponent } from '@spinnaker/core';\nimport { ArtifactTypePatterns, RadioButtonInput, StageArtifactSelector } from '@spinnaker/core';\nimport type { ICloudFoundryEnvVar } from '../../../../../domain';\nimport {\n Buildpacks,\n EnvironmentVariables,\n FormikConfigField,\n HealthCheck,\n InstanceParameters,\n Routes,\n Services,\n} from '../../../../../presentation';\n\nimport type {\n ICloudFoundryCreateServerGroupCommand,\n ICloudFoundryManifest,\n} from '../../../serverGroupConfigurationModel.cf';\n\nexport interface ICloudFoundryServerGroupConfigurationSettingsProps {\n formik: FormikProps<ICloudFoundryCreateServerGroupCommand>;\n stage: IStage;\n pipeline: IPipeline;\n}\n\nexport class CloudFoundryServerGroupConfigurationSettings\n extends React.Component<ICloudFoundryServerGroupConfigurationSettingsProps>\n implements IWizardPageComponent<ICloudFoundryServerGroupConfigurationSettingsProps> {\n public static LABEL = 'Configuration';\n\n private defaultDirectManifest: ICloudFoundryManifest = {\n direct: {\n memory: '1024M',\n diskQuota: '1024M',\n instances: 1,\n buildpacks: [],\n healthCheckType: 'port',\n routes: [],\n environment: [],\n services: [],\n },\n };\n\n private excludedArtifactTypePatterns = [\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.DOCKER_IMAGE,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ];\n\n private manifestSourceUpdated = (source: string): void => {\n switch (source) {\n case 'artifact':\n this.props.formik.setFieldValue('manifest', {});\n this.capacityUpdated('1');\n break;\n case 'direct':\n this.props.formik.setFieldValue('manifest', this.defaultDirectManifest);\n break;\n }\n };\n\n private capacityUpdated = (capacity: string): void => {\n this.props.formik.setFieldValue('capacity.min', capacity);\n this.props.formik.setFieldValue('capacity.max', capacity);\n this.props.formik.setFieldValue('capacity.desired', capacity);\n };\n\n private getArtifactInput = (): JSX.Element => {\n const { formik, stage, pipeline } = this.props;\n const manifest = formik.values.manifest;\n return (\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"StandardFieldLayout flex-container-h margin-between-lg\">\n <div className=\"flex-grow\">\n <StageArtifactSelector\n pipeline={pipeline}\n stage={stage}\n expectedArtifactId={manifest && manifest.artifactId}\n artifact={manifest && manifest.artifact}\n onExpectedArtifactSelected={this.onExpectedArtifactSelected}\n onArtifactEdited={this.onArtifactChanged}\n excludedArtifactTypePatterns={this.excludedArtifactTypePatterns}\n renderLabel={(field: React.ReactNode) => {\n return <FormikConfigField label={'Artifact'}>{field}</FormikConfigField>;\n }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n };\n\n private onExpectedArtifactSelected = (expectedArtifact: IExpectedArtifact): void => {\n this.props.formik.setFieldValue('manifest', { artifactId: expectedArtifact.id });\n };\n\n private onArtifactChanged = (artifact: IArtifact): void => {\n this.props.formik.setFieldValue('manifest', { artifact: artifact });\n };\n\n private getDirectInput = (): JSX.Element => {\n const m = this.props.formik.values.manifest.direct;\n return (\n <div>\n {\n <InstanceParameters\n diskQuotaFieldName={'manifest.direct.diskQuota'}\n instancesFieldName={'manifest.direct.instances'}\n memoryFieldName={'manifest.direct.memory'}\n />\n }\n {<Buildpacks fieldName=\"manifest.direct.buildpacks\" />}\n {\n <HealthCheck\n healthCheckHttpEndpointFieldName={'manifest.direct.healthCheckHttpEndpoint'}\n healthCheckType={m.healthCheckType}\n healthCheckTypeFieldName={'manifest.direct.healthCheckType'}\n />\n }\n {<Routes fieldName=\"manifest.direct.routes\" />}\n {<EnvironmentVariables fieldName=\"manifest.direct.environment\" />}\n {<Services fieldName=\"manifest.direct.services\" />}\n </div>\n );\n };\n\n public render(): JSX.Element {\n const manifest = this.props.formik.values.manifest;\n const direct = manifest && !!manifest.direct;\n return (\n <>\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"StandardFieldLayout flex-container-h baseline margin-between-lg\">\n <div className=\"sm-label-right\">Source Type</div>\n <div className=\"flex-grow\">\n <RadioButtonInput\n inline={true}\n value={direct ? 'direct' : 'artifact'}\n options={[\n { label: 'Artifact', value: 'artifact' },\n { label: 'Form', value: 'direct' },\n ]}\n onChange={(e: any) => this.manifestSourceUpdated(e.target.value)}\n />\n </div>\n </div>\n </div>\n </div>\n {direct ? this.getDirectInput() : this.getArtifactInput()}\n </>\n );\n }\n\n public validate(_props: ICloudFoundryServerGroupConfigurationSettingsProps) {\n const errors = {} as any;\n const isStorageSize = (value: string) => /\\d+[MG]/.test(value);\n\n if (!this.props.formik.values.manifest) {\n errors.manifest = 'No manifest information provided';\n return errors;\n }\n\n const direct = this.props.formik.values.manifest.direct;\n if (direct) {\n if (!isStorageSize(direct.memory)) {\n errors.manifest = errors.manifest || {};\n errors.manifest.memory = `Provide a size (e.g.: 256M, 1G)`;\n }\n if (!isStorageSize(direct.diskQuota)) {\n errors.manifest = errors.manifest || {};\n errors.manifest.diskQuota = `Provide a size (e.g.: 256M, 1G)`;\n }\n if (direct.routes) {\n const routeErrors = direct.routes.map((route: string) => {\n const regex = /^([-\\w]+)\\.([-.\\w]+)(:\\d+)?([-/\\w]+)?$/gm;\n if (route && regex.exec(route) === null) {\n return `A route did not match the expected format \"host.some.domain[:9999][/some/path]\"`;\n }\n return null;\n });\n if (routeErrors.some((val: string) => !!val)) {\n errors.manifest = errors.manifest || {};\n errors.manifest.routes = routeErrors;\n }\n }\n if (direct.environment) {\n const existingKeys: string[] = [];\n const envErrors = direct.environment.map((e: ICloudFoundryEnvVar) => {\n let myErrors: any;\n if (e.key) {\n const validKeyRegex = /^\\w+$/g;\n if (!validKeyRegex.exec(e.key)) {\n myErrors = {\n key: `This field must be alphanumeric`,\n };\n } else {\n if (existingKeys.filter((key) => key === e.key).length > 0) {\n myErrors = {\n key: `Duplicate variable name`,\n };\n } else {\n existingKeys.push(e.key);\n }\n }\n }\n return myErrors;\n });\n if (envErrors.some((val: string) => !!val)) {\n errors.manifest = errors.manifest || {};\n errors.manifest.environment = envErrors;\n }\n }\n } else {\n const { manifest } = this.props.formik.values;\n if (\n !manifest ||\n !((manifest.artifact && manifest.artifact.type && manifest.artifact.reference) || manifest.artifactId)\n ) {\n errors.manifest = 'Manifest artifact information is required';\n }\n }\n\n return errors;\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { Application, IModalComponentProps, IPipeline, IStage } from '@spinnaker/core';\nimport { noop, ReactInjector, ReactModal, TaskMonitor, WizardModal, WizardPage } from '@spinnaker/core';\n\nimport { ServerGroupTemplateSelection } from './ServerGroupTemplateSelection';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\nimport { CloudFoundryServerGroupArtifactSettings } from './sections/artifactSettings/ArtifactSettings.cf';\nimport { CloudFoundryServerGroupConstantArtifactSettings } from './sections/artifactSettings/ConstantArtifactSettings.cf';\nimport { CloudFoundryServerGroupBasicSettings } from './sections/basicSettings/BasicSettings.cf';\nimport { CloudFoundryServerGroupCloneSettings } from './sections/cloneSettings/CloneSettings.cf';\nimport { CloudFoundryServerGroupConfigurationSettings } from './sections/configurationSettings/ConfigurationSettings.cf';\nimport type { ICloudFoundryCreateServerGroupCommand } from '../serverGroupConfigurationModel.cf';\n\nimport './serverGroup.less';\n\nexport interface ICloudFoundryCreateServerGroupProps extends IModalComponentProps {\n application: Application;\n command: ICloudFoundryCreateServerGroupCommand;\n isSourceConstant?: boolean;\n serverGroup?: ICloudFoundryServerGroup;\n title: string;\n}\n\nexport interface ICloudFoundryCreateServerGroupState {\n pipeline: IPipeline;\n isClone: boolean;\n loading: boolean;\n requiresTemplateSelection: boolean;\n stage?: IStage;\n taskMonitor: TaskMonitor;\n}\n\nexport class CloudFoundryCreateServerGroupModal extends React.Component<\n ICloudFoundryCreateServerGroupProps,\n ICloudFoundryCreateServerGroupState\n> {\n public static defaultProps: Partial<ICloudFoundryCreateServerGroupProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: ICloudFoundryCreateServerGroupProps): Promise<ICloudFoundryCreateServerGroupCommand> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(CloudFoundryCreateServerGroupModal, props, modalProps);\n }\n\n constructor(props: ICloudFoundryCreateServerGroupProps) {\n super(props);\n const pipeline = get(props, 'command.viewState.pipeline', undefined);\n const stage = get(props, 'command.viewState.stage', undefined);\n const mode = get(props, 'command.viewState.mode', undefined);\n this.state = {\n pipeline: pipeline,\n isClone: !!props.isSourceConstant || mode === 'editClonePipeline',\n loading: false,\n requiresTemplateSelection: get(props, 'command.viewState.requiresTemplateSelection', false),\n stage,\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Creating your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: this.onTaskComplete,\n }),\n };\n }\n\n private templateSelected = () => {\n this.setState({ requiresTemplateSelection: false });\n this.initialize();\n };\n\n private initialize = () => {\n this.setState({ loading: false });\n };\n\n private onTaskComplete = () => {\n this.props.application.serverGroups.refresh();\n };\n\n private submit = (command: ICloudFoundryCreateServerGroupCommand): void => {\n command.selectedProvider = 'cloudfoundry';\n if (\n command.viewState.mode === 'createPipeline' ||\n command.viewState.mode === 'editPipeline' ||\n command.viewState.mode === 'editClonePipeline'\n ) {\n this.props.closeModal && this.props.closeModal(command);\n } else if (command.viewState.mode === 'clone') {\n this.state.taskMonitor.submit(() =>\n ReactInjector.serverGroupWriter.cloneServerGroup(command, this.props.application),\n );\n } else {\n this.state.taskMonitor.submit(() =>\n ReactInjector.serverGroupWriter.cloneServerGroup(command, this.props.application),\n );\n }\n };\n\n public render(): React.ReactElement<CloudFoundryCreateServerGroupModal> {\n const { loading, pipeline, isClone, requiresTemplateSelection, stage, taskMonitor } = this.state;\n const { application, command, dismissModal, title, isSourceConstant } = this.props;\n\n if (requiresTemplateSelection) {\n return (\n <ServerGroupTemplateSelection\n app={application}\n command={command}\n onDismiss={dismissModal}\n onTemplateSelected={this.templateSelected}\n />\n );\n }\n\n return (\n <WizardModal<ICloudFoundryCreateServerGroupCommand>\n heading={title}\n initialValues={command}\n loading={loading}\n taskMonitor={taskMonitor}\n dismissModal={dismissModal}\n closeModal={this.submit}\n submitButtonLabel={command.viewState.submitButtonLabel}\n render={({ formik, nextIdx, wizard }) => (\n <>\n <WizardPage\n label=\"Basic Settings\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <CloudFoundryServerGroupBasicSettings ref={innerRef} formik={formik} />}\n />\n\n {isClone && isSourceConstant && (\n <WizardPage\n label=\"Application\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <CloudFoundryServerGroupConstantArtifactSettings\n ref={innerRef}\n formik={formik}\n source={command.source}\n />\n )}\n />\n )}\n\n {isClone && !isSourceConstant && (\n <WizardPage\n label=\"Source\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <CloudFoundryServerGroupCloneSettings application={application} ref={innerRef} formik={formik} />\n )}\n />\n )}\n\n {!isClone && (\n <WizardPage\n label=\"Application\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <CloudFoundryServerGroupArtifactSettings\n ref={innerRef}\n formik={formik}\n pipeline={pipeline}\n stage={stage}\n />\n )}\n />\n )}\n\n <WizardPage\n label=\"Manifest\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <CloudFoundryServerGroupConfigurationSettings\n ref={innerRef}\n formik={formik}\n pipeline={pipeline}\n stage={stage}\n />\n )}\n />\n </>\n )}\n />\n );\n }\n}\n","import React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { StageConstants } from '@spinnaker/core';\nimport { CloudFoundryServerGroupCommandBuilder } from '../../../serverGroup/configure';\nimport { CloudFoundryCreateServerGroupModal } from '../../../serverGroup/configure/wizard/CreateServerGroupModal';\n\nexport interface ICloudFoundryCloneServerGroupStageConfigState {\n buttonText: string;\n}\n\nexport class CloudFoundryCloneServerGroupStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryCloneServerGroupStageConfigState\n> {\n constructor(props: IStageConfigProps) {\n super(props);\n this.props.updateStageField({\n cloudProvider: 'cloudfoundry',\n application: props.application.name,\n });\n this.state = {\n buttonText: props.stage.destination ? 'Edit clone configuration' : 'Add clone configuration',\n };\n }\n\n private handleResult = (command: any) => {\n this.props.updateStageField({\n credentials: command.credentials,\n capacity: command.capacity,\n account: command.account,\n delayBeforeDisableSec: command.delayBeforeDisableSec,\n freeFormDetails: command.freeFormDetails,\n maxRemainingAsgs: command.maxRemainingAsgs,\n region: command.region,\n startApplication: command.startApplication,\n stack: command.stack,\n strategy: command.strategy,\n target: command.target,\n targetCluster: command.targetCluster,\n manifest: command.manifest,\n source: command.source,\n });\n this.setState({ buttonText: 'Edit clone configuration' });\n };\n\n private addCluster = () => {\n const { application, stage, pipeline } = this.props;\n const title = 'Clone Cluster';\n const command = CloudFoundryServerGroupCommandBuilder.buildCloneServerGroupCommandFromPipeline(stage, pipeline);\n CloudFoundryCreateServerGroupModal.show({\n application,\n command,\n isSourceConstant: false,\n title,\n })\n .then(this.handleResult)\n .catch(() => {});\n };\n\n public render() {\n const { stage } = this.props;\n const { buttonText } = this.state;\n const cloneTargets = StageConstants.TARGET_LIST;\n return (\n <div className=\"form-horizontal\">\n <div>\n <h4>Clone Source</h4>\n <table className=\"table table-condensed table-deployStage\">\n <thead>\n <tr>\n <th>Account</th>\n <th>Region</th>\n <th>Cluster</th>\n <th>Target</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>{stage.source ? stage.source.account : ''}</td>\n <td>{stage.source ? stage.source.region : ''}</td>\n <td>{stage.source ? stage.source.clusterName : ''}</td>\n <td>\n {stage.source ? cloneTargets.filter((t) => t.val === stage.source.target).map((t) => t.label) : ''}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div>\n <h4>Clone Destination</h4>\n <table className=\"table table-condensed table-deployStage\">\n <thead>\n <tr>\n <th>Account</th>\n <th>Region</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>{stage.credentials}</td>\n <td>{stage.region}</td>\n </tr>\n </tbody>\n </table>\n </div>\n <button className=\"btn btn-block btn-sm add-new\" onClick={() => this.addCluster()}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> {buttonText}\n </button>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\n\nimport { CloudFoundryCloneServerGroupStageConfig } from './CloudFoundryCloneServerGroupStageConfig';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryCloneServerGroupStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'cloneServerGroup',\n provides: 'cloneServerGroup',\n validators: [],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IArtifact, IFormikStageConfigInjectedProps, IRegion } from '@spinnaker/core';\nimport {\n AccountService,\n ArtifactTypePatterns,\n excludeAllTypesExcept,\n NgReact,\n StageArtifactSelectorDelegate,\n StageConfigField,\n StageConstants,\n TextInput,\n} from '@spinnaker/core';\n\nimport { AccountRegionClusterSelector } from '../../../presentation/widgets/accountRegionClusterSelector';\n\ninterface ICloudFoundryCreateServiceBindingsStageConfigState {\n accounts: IAccount[];\n regions: string[];\n application: Application;\n}\n\nexport class CloudFoundryCreateServiceBindingsStageConfigForm extends React.Component<\n IFormikStageConfigInjectedProps,\n ICloudFoundryCreateServiceBindingsStageConfigState\n> {\n private static readonly excludedArtifactTypes = excludeAllTypesExcept(\n ArtifactTypePatterns.BITBUCKET_FILE,\n ArtifactTypePatterns.CUSTOM_OBJECT,\n ArtifactTypePatterns.EMBEDDED_BASE64,\n ArtifactTypePatterns.GCS_OBJECT,\n ArtifactTypePatterns.GITHUB_FILE,\n ArtifactTypePatterns.GITLAB_FILE,\n ArtifactTypePatterns.S3_OBJECT,\n ArtifactTypePatterns.HTTP_FILE,\n ArtifactTypePatterns.ORACLE_OBJECT,\n );\n\n private destroy$ = new Subject();\n\n constructor(props: IFormikStageConfigInjectedProps, context: any) {\n super(props, context);\n this.state = {\n accounts: [],\n regions: [],\n application: props.application,\n };\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));\n }\n\n public componentDidMount() {\n const stage = this.props.formik.values;\n this.props.formik.setFieldValue('cloudProvider', 'cloudfoundry');\n if (stage.serviceBindingRequests && stage.serviceBindingRequests.length === 0) {\n this.props.formik.setFieldValue('serviceBindingRequests', [\n {\n serviceInstanceName: '',\n updatable: false,\n },\n ]);\n }\n if (stage.credentials) {\n this.loadRegions(stage.credentials);\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private loadRegions = (creds: string) => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(creds))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions: regions });\n });\n };\n\n private onTemplateArtifactEdited = (artifact: IArtifact, index: number) => {\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].id`, null);\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].artifact`, artifact);\n };\n\n private onTemplateArtifactSelected = (id: string, index: number) => {\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].id`, id);\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].artifact`, null);\n };\n\n private addInputArtifact = () => {\n const stage = this.props.formik.values;\n const newServiceBindingRequests = [\n ...stage.serviceBindingRequests,\n {\n serviceInstanceName: '',\n updatable: false,\n },\n ];\n\n this.props.formik.setFieldValue('serviceBindingRequests', newServiceBindingRequests);\n };\n\n private removeInputArtifact = (index: number) => {\n const stage = this.props.formik.values;\n const newServiceBindingRequests = [...stage.serviceBindingRequests];\n newServiceBindingRequests.splice(index, 1);\n this.props.formik.setFieldValue('serviceBindingRequests', newServiceBindingRequests);\n };\n\n private targetUpdated = (target: string) => {\n this.props.formik.setFieldValue('target', target);\n };\n\n private restageRequiredUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.formik.setFieldValue('restageRequired', event.target.checked);\n this.props.formik.setFieldValue('restartRequired', !event.target.checked);\n };\n\n private restartRequiredUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.formik.setFieldValue('restartRequired', event.target.checked);\n this.props.formik.setFieldValue('restageRequired', !event.target.checked);\n };\n\n private updatableBindingUpdated = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {\n this.props.formik.setFieldValue(`serviceBindingRequests[${index}].updatable`, event.target.checked);\n };\n\n private accountRegionClusterUpdated = (stage: any): void => {\n this.props.formik.setFieldValue(`cluster`, stage.cluster);\n this.props.formik.setFieldValue(`credentials`, stage.credentials);\n this.props.formik.setFieldValue(`region`, stage.region);\n };\n\n public render() {\n const stage = this.props.formik.values;\n const { accounts, application } = this.state;\n const { target } = stage;\n const { TargetSelect } = NgReact;\n\n return (\n <>\n <h4>Basic Settings</h4>\n <div className=\"form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n isSingleRegion={true}\n onComponentUpdate={this.accountRegionClusterUpdated}\n component={stage}\n />\n </div>\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Restage Required\">\n <input type=\"checkbox\" checked={stage.restageRequired} onChange={this.restageRequiredUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Restart Required\">\n <input type=\"checkbox\" checked={stage.restartRequired} onChange={this.restartRequiredUpdated} />\n </StageConfigField>\n <h4>Service Bindings</h4>\n {stage.serviceBindingRequests && stage.serviceBindingRequests.length > 0 && (\n <div className=\"row form-group\">\n {stage.serviceBindingRequests.map((a: any, index: number) => {\n return (\n <div key={index}>\n <div className=\"col-md-offset-1 col-md-8\">\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n onChange={(e: React.ChangeEvent<any>) => {\n this.props.formik.setFieldValue(\n `serviceBindingRequests[${index}].serviceInstanceName`,\n e.target.value,\n );\n }}\n value={a.serviceInstanceName}\n />\n </StageConfigField>\n <StageArtifactSelectorDelegate\n artifact={a.artifact}\n excludedArtifactTypePatterns={\n CloudFoundryCreateServiceBindingsStageConfigForm.excludedArtifactTypes\n }\n expectedArtifactId={a.id}\n label=\"Service Binding Parameters\"\n onArtifactEdited={(artifact) => {\n this.onTemplateArtifactEdited(artifact, index);\n }}\n onExpectedArtifactSelected={(artifact) => this.onTemplateArtifactSelected(artifact.id, index)}\n pipeline={this.props.pipeline}\n stage={stage}\n />\n <StageConfigField label=\"Updatable Binding\">\n <input\n type=\"checkbox\"\n checked={a.updatable}\n onChange={(event) => this.updatableBindingUpdated(event, index)}\n />\n </StageConfigField>\n </div>\n <div className=\"col-md-1\">\n <div className=\"form-control-static\">\n <button onClick={() => this.removeInputArtifact(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove field</span>\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n <StageConfigField fieldColumns={8} label={''}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={() => this.addInputArtifact()}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add Service Binding\n </button>\n </StageConfigField>\n </>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { CloudFoundryCreateServiceBindingsStageConfigForm } from './CloudFoundryCreateServiceBindingsStageConfigForm';\n\nexport interface ServiceBindingRequests {\n serviceInstanceName: String;\n}\n\nexport function CloudFoundryCreateServiceBindingsConfig({\n application,\n pipeline,\n stage,\n updateStage,\n}: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n serviceBindingRequests: [],\n restageRequired: true,\n restartRequired: false,\n credentials: '',\n region: '',\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n validate={validateCloudFoundryCreateServiceBindingsStage}\n render={(props) => <CloudFoundryCreateServiceBindingsStageConfigForm {...props} />}\n />\n );\n}\n\nexport function validateCloudFoundryCreateServiceBindingsStage(stage: IStage): FormikErrors<IStage> {\n const formValidator = new FormValidator(stage);\n\n formValidator.field('credentials', 'Account').required();\n formValidator.field('region', 'Region').required();\n formValidator.field('cluster', 'Cluster').required();\n formValidator.field('target', 'Target').required();\n\n formValidator\n .field('serviceBindingRequests', 'Service Binding Requests')\n .required()\n .withValidators((serviceBindingRequests: ServiceBindingRequests[]) => {\n if (validateServiceBindingRequests(serviceBindingRequests)) {\n return undefined;\n }\n return 'There should be at least one service binding request. At a minimum, each request must have a service instance name.';\n });\n\n return formValidator.validateForm();\n}\n\nexport function validateServiceBindingRequests(serviceBindingRequests: ServiceBindingRequests[]): boolean {\n if (serviceBindingRequests?.length < 1) {\n return false;\n }\n return serviceBindingRequests.every((req) => req?.serviceInstanceName);\n}\n","import { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport {\n CloudFoundryCreateServiceBindingsConfig,\n validateCloudFoundryCreateServiceBindingsStage,\n} from './CloudFoundryCreateServiceBindingsConfig';\n\nexport const CF_CREATE_SERVICE_BINDINGS_STAGE_KEY = 'cloudFoundryCreateServiceBindings';\n\nRegistry.pipeline.registerStage({\n label: 'Create Service Bindings',\n description: 'Create CF service bindings with optional parameters.',\n key: CF_CREATE_SERVICE_BINDINGS_STAGE_KEY,\n component: CloudFoundryCreateServiceBindingsConfig,\n producesArtifacts: false,\n cloudProvider: 'cloudfoundry',\n executionDetailsSections: [ExecutionDetailsTasks],\n validateFn: validateCloudFoundryCreateServiceBindingsStage,\n});\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';\n\ninterface ICloudFoundryCreateServiceKeyStageConfigState {\n accounts: string[];\n regions: string[];\n}\n\nexport class CloudFoundryCreateServiceKeyStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryCreateServiceKeyStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n regions: [],\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts.map((it) => it.name) }));\n if (this.props.stage.credentials) {\n this.clearAndReloadRegions();\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private clearAndReloadRegions = () => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions });\n });\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceInstanceName: event.target.value });\n };\n\n private serviceKeyNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceKeyName: event.target.value });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const credentials = option.target.value;\n this.setState({\n regions: [],\n });\n this.props.updateStageField({\n credentials,\n region: '',\n });\n this.clearAndReloadRegions();\n };\n\n private regionUpdated = (option: Option<string>) => {\n const region = option.target.value;\n this.props.updateStageField({\n region,\n });\n };\n\n public render() {\n const { credentials, region, serviceInstanceName, serviceKeyName } = this.props.stage;\n const { accounts, regions } = this.state;\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <ReactSelectInput clearable={false} onChange={this.regionUpdated} value={region} stringOptions={regions} />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Key Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceKeyNameUpdated}\n value={serviceKeyName}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryCreateServiceKeyStageConfig } from './CloudFoundryCreateServiceKeyStageConfig';\nimport { CloudFoundryServiceKeyExecutionDetails } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryCreateServiceKeyStageConfig,\n description: 'Create a service key',\n executionDetailsSections: [CloudFoundryServiceKeyExecutionDetails, ExecutionDetailsTasks],\n key: 'createServiceKey',\n label: 'Create Service Key',\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'region', preventSave: true },\n { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },\n { type: 'requiredField', fieldName: 'serviceKeyName', preventSave: true },\n ],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IFormikStageConfigInjectedProps, IRegion } from '@spinnaker/core';\nimport { AccountService, NgReact, StageConfigField, StageConstants, TextInput } from '@spinnaker/core';\n\nimport { AccountRegionClusterSelector } from '../../../presentation/widgets/accountRegionClusterSelector';\n\ninterface ICloudFoundryDeleteServiceBindingsStageConfigState {\n accounts: IAccount[];\n regions: string[];\n application: Application;\n}\n\nexport class CloudFoundryDeleteServiceBindingsStageConfigForm extends React.Component<\n IFormikStageConfigInjectedProps,\n ICloudFoundryDeleteServiceBindingsStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IFormikStageConfigInjectedProps, context: any) {\n super(props, context);\n this.state = {\n accounts: [],\n regions: [],\n application: props.application,\n };\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));\n }\n\n public componentDidMount() {\n const stage = this.props.formik.values;\n this.props.formik.setFieldValue('cloudProvider', 'cloudfoundry');\n if (stage.serviceUnbindingRequests && stage.serviceUnbindingRequests.length === 0) {\n this.props.formik.setFieldValue('serviceUnbindingRequests', [\n {\n serviceInstanceName: '',\n updatable: false,\n },\n ]);\n }\n if (stage.credentials) {\n this.loadRegions(stage.credentials);\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private loadRegions = (creds: string) => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(creds))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions: regions });\n });\n };\n\n private addInputArtifact = () => {\n const stage = this.props.formik.values;\n const newServiceUnbindingRequests = [\n ...stage.serviceUnbindingRequests,\n {\n serviceInstanceName: '',\n updatable: false,\n },\n ];\n\n this.props.formik.setFieldValue('serviceUnbindingRequests', newServiceUnbindingRequests);\n };\n\n private removeInputArtifact = (index: number) => {\n const stage = this.props.formik.values;\n const newServiceUnbindingRequests = [...stage.serviceUnbindingRequests];\n newServiceUnbindingRequests.splice(index, 1);\n this.props.formik.setFieldValue('serviceUnbindingRequests', newServiceUnbindingRequests);\n };\n\n private targetUpdated = (target: string) => {\n this.props.formik.setFieldValue('target', target);\n };\n\n private accountRegionClusterUpdated = (stage: any): void => {\n this.props.formik.setFieldValue(`cluster`, stage.cluster);\n this.props.formik.setFieldValue(`credentials`, stage.credentials);\n this.props.formik.setFieldValue(`region`, stage.region);\n };\n\n public render() {\n const stage = this.props.formik.values;\n const { accounts, application } = this.state;\n const { target } = stage;\n const { TargetSelect } = NgReact;\n\n return (\n <>\n <h4>Basic Settings</h4>\n <div className=\"form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n isSingleRegion={true}\n onComponentUpdate={this.accountRegionClusterUpdated}\n component={stage}\n />\n </div>\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n <h4>Service Unbindings</h4>\n {stage.serviceUnbindingRequests && stage.serviceUnbindingRequests.length > 0 && (\n <div className=\"row form-group\">\n {stage.serviceUnbindingRequests.map((a: any, index: number) => {\n return (\n <div key={index}>\n <div className=\"col-md-offset-1 col-md-8\">\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n onChange={(e: React.ChangeEvent<any>) => {\n this.props.formik.setFieldValue(\n `serviceUnbindingRequests[${index}].serviceInstanceName`,\n e.target.value,\n );\n }}\n value={a.serviceInstanceName}\n />\n </StageConfigField>\n </div>\n <div className=\"col-md-1\">\n <div className=\"form-control-static\">\n <button onClick={() => this.removeInputArtifact(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove field</span>\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n <StageConfigField fieldColumns={8} label={''}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={() => this.addInputArtifact()}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add Service Unbinding\n </button>\n </StageConfigField>\n </>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { CloudFoundryDeleteServiceBindingsStageConfigForm } from './CloudFoundryDeleteServiceBindingsStageConfigForm';\n\ninterface ServiceUnbindingRequests {\n serviceInstanceName: String;\n}\n\nexport function CloudFoundryDeleteServiceBindingsConfig({\n application,\n pipeline,\n stage,\n updateStage,\n}: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n serviceUnbindingRequests: [],\n restageRequired: true,\n restartRequired: false,\n credentials: '',\n region: '',\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n validate={validateCloudFoundryDeleteServiceBindingsStage}\n render={(props) => <CloudFoundryDeleteServiceBindingsStageConfigForm {...props} />}\n />\n );\n}\n\nexport function validateCloudFoundryDeleteServiceBindingsStage(stage: IStage): FormikErrors<IStage> {\n const formValidator = new FormValidator(stage);\n\n formValidator.field('credentials', 'Account').required();\n formValidator.field('region', 'Region').required();\n formValidator.field('cluster', 'Cluster').required();\n formValidator.field('target', 'Target').required();\n\n formValidator\n .field('serviceUnbindingRequests', 'Service Binding Requests')\n .required()\n .withValidators((serviceUnbindingRequests: ServiceUnbindingRequests[]) => {\n if (validateServiceUnbindingRequests(serviceUnbindingRequests)) {\n return undefined;\n }\n return 'There should be at least one service binding request. At a minimum, each request must have a service instance name.';\n });\n\n return formValidator.validateForm();\n}\n\nexport function validateServiceUnbindingRequests(serviceUnbindingRequests: ServiceUnbindingRequests[]): boolean {\n if (serviceUnbindingRequests?.length < 1) {\n return false;\n }\n return serviceUnbindingRequests.every((req) => req.serviceInstanceName);\n}\n","import { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport {\n CloudFoundryDeleteServiceBindingsConfig,\n validateCloudFoundryDeleteServiceBindingsStage,\n} from './CloudFoundryDeleteServiceBindingsConfig';\n\nexport const CF_DELETE_SERVICE_BINDINGS_STAGE_KEY = 'cloudFoundryDeleteServiceBindings';\n\nRegistry.pipeline.registerStage({\n label: 'Delete Service Bindings',\n description: 'Delete CF service bindings with optional parameters.',\n key: CF_DELETE_SERVICE_BINDINGS_STAGE_KEY,\n component: CloudFoundryDeleteServiceBindingsConfig,\n producesArtifacts: false,\n cloudProvider: 'cloudfoundry',\n executionDetailsSections: [ExecutionDetailsTasks],\n validateFn: validateCloudFoundryDeleteServiceBindingsStage,\n});\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';\n\ninterface ICloudFoundryDeleteServiceKeyStageConfigState {\n accounts: string[];\n regions: string[];\n}\n\nexport class CloudFoundryDeleteServiceKeyStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryDeleteServiceKeyStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n regions: [],\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts.map((it) => it.name) }));\n if (this.props.stage.credentials) {\n this.clearAndReloadRegions();\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private clearAndReloadRegions = () => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions });\n });\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceInstanceName: event.target.value });\n };\n\n private serviceKeyNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceKeyName: event.target.value });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const credentials = option.target.value;\n this.setState({\n regions: [],\n });\n this.props.updateStageField({\n credentials,\n region: '',\n });\n this.clearAndReloadRegions();\n };\n\n private regionUpdated = (option: Option<string>) => {\n const region = option.target.value;\n this.props.updateStageField({\n region,\n });\n };\n\n public render() {\n const { credentials, region, serviceInstanceName, serviceKeyName } = this.props.stage;\n const { accounts, regions } = this.state;\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <ReactSelectInput clearable={false} onChange={this.regionUpdated} value={region} stringOptions={regions} />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Key Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceKeyNameUpdated}\n value={serviceKeyName}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryDeleteServiceKeyStageConfig } from './CloudFoundryDeleteServiceKeyStageConfig';\nimport { CloudFoundryServiceKeyExecutionDetails } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryDeleteServiceKeyStageConfig,\n description: 'Delete a service key',\n executionDetailsSections: [CloudFoundryServiceKeyExecutionDetails, ExecutionDetailsTasks],\n key: 'deleteServiceKey',\n label: 'Delete Service Key',\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'region', preventSave: true },\n { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },\n { type: 'requiredField', fieldName: 'serviceKeyName', preventSave: true },\n ],\n});\n","import { includes } from 'lodash';\nimport React from 'react';\n\ninterface IServiceTagsInputProps {\n tags: string[];\n onChange: (e: string[]) => void;\n}\n\ninterface IServiceTagsInputState {\n newTag: string;\n tags: string[];\n}\n\nexport class ServiceTagsInput extends React.Component<IServiceTagsInputProps, IServiceTagsInputState> {\n constructor(props: IServiceTagsInputProps) {\n super(props);\n this.state = {\n newTag: '',\n tags: this.props.tags || [],\n };\n }\n\n private newTagUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.setState({ newTag: event.target.value });\n };\n\n private addTag = (): void => {\n const { onChange, tags } = this.props;\n const { newTag } = this.state;\n const currentTags = tags || [];\n\n if (!includes(currentTags, newTag.trim())) {\n const newTags = [...currentTags, newTag.trim()].sort((a, b) => a.localeCompare(b));\n this.setState({\n tags: newTags,\n newTag: '',\n });\n onChange(newTags);\n }\n };\n\n private deleteTag = (index: number): void => {\n const { onChange, tags } = this.props;\n const newTags = tags.slice();\n newTags.splice(index, 1);\n this.setState({ tags: newTags });\n onChange(newTags);\n };\n\n public render() {\n const { tags, newTag } = this.state;\n return (\n <>\n <div className=\"row\">\n <div className=\"col-md-4\">\n <input type=\"text\" className=\"form-control\" name=\"newTag\" onChange={this.newTagUpdated} value={newTag} />\n </div>\n <div className=\"col-md-2\">\n <button disabled={!newTag.trim()} className=\"btn btn-default btn-sm btn-add-tag\" onClick={this.addTag}>\n Add Tag\n </button>\n </div>\n </div>\n <div>\n <div>\n {tags &&\n tags.map((tag: any, index: number) => {\n return (\n <span className=\"badge badge-pill\" key={index}>\n \n {tag}\n \n <button\n type=\"button\"\n className=\"close small\"\n aria-label=\"Close\"\n onClick={() => this.deleteTag(index)}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n </span>\n );\n })}\n </div>\n </div>\n </>\n );\n }\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IService, IServicePlan } from '@spinnaker/core';\nimport { ReactSelectInput, ServicesReader, StageConfigField, TextAreaInput, TextInput } from '@spinnaker/core';\n\nimport type { ICloudFoundryServiceManifestDirectSource } from './ICloudFoundryServiceManifestSource';\nimport { ServiceTagsInput } from './ServiceTagsInput';\n\ninterface ICreateServiceInstanceDirectInputProps {\n credentials: string;\n region: string;\n service: ICloudFoundryServiceManifestDirectSource;\n onServiceChanged: (_: ICloudFoundryServiceManifestDirectSource) => void;\n}\n\ninterface ICreateServiceInstanceDirectInputState {\n serviceNamesAndPlans: IService[];\n}\n\nexport class CreateServiceInstanceDirectInput extends React.Component<\n ICreateServiceInstanceDirectInputProps,\n ICreateServiceInstanceDirectInputState\n> {\n private destroy$ = new Subject();\n constructor(props: ICreateServiceInstanceDirectInputProps) {\n super(props);\n this.state = { serviceNamesAndPlans: [] };\n }\n\n public componentDidUpdate(prevProps: Readonly<ICreateServiceInstanceDirectInputProps>) {\n const { credentials, region } = this.props;\n if ((credentials && credentials !== prevProps.credentials) || region !== prevProps.region) {\n this.loadServices(credentials, region);\n }\n }\n\n public componentDidMount(): void {\n this.loadServices(this.props.credentials, this.props.region);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private loadServices(credentials: string, region: string) {\n if (credentials && region) {\n observableFrom(ServicesReader.getServices(credentials, region))\n .pipe(takeUntil(this.destroy$))\n .subscribe((serviceNamesAndPlans) => this.setState({ serviceNamesAndPlans }));\n }\n }\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n serviceInstanceName: event.target.value,\n });\n };\n\n private serviceUpdated = (option: Option<string>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n service: option.target.value,\n servicePlan: '',\n });\n };\n\n private servicePlanUpdated = (option: Option<string>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n servicePlan: option.target.value,\n });\n };\n\n private parametersUpdated = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n parameters: event.target.value,\n });\n };\n\n private tagsUpdated = (tags: string[]) => {\n this.props.onServiceChanged({\n ...this.props.service,\n tags: tags,\n });\n };\n\n private updatableUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n updatable: event.target.checked,\n versioned: false,\n });\n };\n\n private versionedUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n versioned: event.target.checked,\n updatable: false,\n });\n };\n\n public render() {\n const { service } = this.props;\n const services = this.state.serviceNamesAndPlans.map((item) => item.name);\n const serviceWithPlans = this.state.serviceNamesAndPlans.find((it) => it.name === service.service);\n const servicePlans = serviceWithPlans ? serviceWithPlans.servicePlans.map((it: IServicePlan) => it.name) : [];\n return (\n <div>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={service.serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Service\">\n <ReactSelectInput\n clearable={false}\n onChange={this.serviceUpdated}\n value={service.service}\n stringOptions={services}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Plan\">\n <ReactSelectInput\n clearable={false}\n onChange={this.servicePlanUpdated}\n value={service.servicePlan}\n stringOptions={servicePlans}\n />\n </StageConfigField>\n <StageConfigField label=\"Tags\">\n <ServiceTagsInput tags={service.tags || []} onChange={this.tagsUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Parameters\">\n <TextAreaInput className=\"form-control\" onChange={this.parametersUpdated} value={service.parameters || ''} />\n </StageConfigField>\n <StageConfigField label=\"Updatable\" helpKey={'pipeline.config.cf.createservice.updatable'}>\n <input\n type=\"checkbox\"\n disabled={!!service.versioned}\n checked={!!service.updatable}\n onChange={this.updatableUpdated}\n />\n </StageConfigField>\n <StageConfigField label=\"Versioned\" helpKey={'pipeline.config.cf.createservice.versioned'}>\n <input\n type=\"checkbox\"\n disabled={!!service.updatable}\n checked={!!service.versioned}\n onChange={this.versionedUpdated}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { StageConfigField, TextAreaInput, TextInput } from '@spinnaker/core';\n\nimport type {\n ICloudFoundryServiceManifestSource,\n ICloudFoundryServiceUserProvidedSource,\n} from './ICloudFoundryServiceManifestSource';\nimport { ServiceTagsInput } from './ServiceTagsInput';\n\ninterface ICreateServiceInstanceUserProvidedInputProps {\n onChange: (serviceInput: ICloudFoundryServiceManifestSource) => void;\n service: ICloudFoundryServiceUserProvidedSource;\n onServiceChanged: (_: ICloudFoundryServiceUserProvidedSource) => void;\n}\n\nexport class CreateUserProvidedInput extends React.Component<ICreateServiceInstanceUserProvidedInputProps> {\n constructor(props: ICreateServiceInstanceUserProvidedInputProps) {\n super(props);\n }\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n serviceInstanceName: event.target.value,\n });\n };\n\n private syslogDrainUrlUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.onServiceChanged({\n ...this.props.service,\n syslogDrainUrl: event.target.value,\n });\n };\n\n private routeServiceUrlUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.onServiceChanged({\n ...this.props.service,\n routeServiceUrl: event.target.value,\n });\n };\n\n private credentialsUpdated = (event: React.ChangeEvent<HTMLTextAreaElement>): void => {\n this.props.onServiceChanged({\n ...this.props.service,\n credentials: event.target.value,\n });\n };\n\n private tagsUpdated = (tags: string[]) => {\n this.props.onServiceChanged({\n ...this.props.service,\n tags: tags,\n });\n };\n\n private updatableUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n updatable: event.target.checked,\n versioned: false,\n });\n };\n\n private versionedUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onServiceChanged({\n ...this.props.service,\n versioned: event.target.checked,\n updatable: false,\n });\n };\n\n public render() {\n const { service } = this.props;\n return (\n <>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={service.serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Syslog Drain URL\">\n <TextInput onChange={this.syslogDrainUrlUpdated} value={service.syslogDrainUrl} />\n </StageConfigField>\n <StageConfigField label=\"Route Service URL\">\n <TextInput onChange={this.routeServiceUrlUpdated} value={service.routeServiceUrl} />\n </StageConfigField>\n <StageConfigField label=\"Credentials\">\n <TextAreaInput onChange={this.credentialsUpdated} value={service.credentials} />\n </StageConfigField>\n <StageConfigField label=\"Tags\">\n <ServiceTagsInput tags={service.tags || []} onChange={this.tagsUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Updatable\" helpKey={'pipeline.config.cf.createservice.updatable'}>\n <input\n type=\"checkbox\"\n disabled={!!service.versioned}\n checked={!!service.updatable}\n onChange={this.updatableUpdated}\n />\n </StageConfigField>\n <StageConfigField label=\"Versioned\" helpKey={'pipeline.config.cf.createservice.versioned'}>\n <input\n type=\"checkbox\"\n disabled={!!service.updatable}\n checked={!!service.versioned}\n onChange={this.versionedUpdated}\n />\n </StageConfigField>\n </>\n );\n }\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IArtifact, IExpectedArtifact, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport {\n AccountService,\n ArtifactTypePatterns,\n ReactSelectInput,\n StageArtifactSelector,\n StageConfigField,\n} from '@spinnaker/core';\n\nimport { CreateServiceInstanceDirectInput } from './CreateServiceInstanceDirectInput';\nimport { CreateUserProvidedInput } from './CreateUserProvidedInput';\nimport type { ICloudFoundryServiceManifestSource } from './ICloudFoundryServiceManifestSource';\n\nimport './cloudfoundryDeployServiceStage.less';\n\ninterface ICloudFoundryDeployServiceStageConfigState {\n regions: IRegion[];\n accounts: IAccount[];\n}\n\nexport class CloudFoundryDeployServiceStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryDeployServiceStageConfigState\n> {\n private defaultDirectManifest = {\n direct: {\n parameters: '',\n service: '',\n serviceInstanceName: '',\n servicePlan: '',\n updatable: false,\n versioned: false,\n },\n };\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n this.props.updateStageField({ cloudProvider: 'cloudfoundry' });\n this.state = {\n accounts: [],\n regions: [],\n };\n }\n\n private accountUpdated = (option: Option<string>): void => {\n const credentials = option.target.value;\n const updates: any = { credentials: credentials, region: '' };\n if (!this.props.stage.manifest || this.props.stage.manifest.direct) {\n updates.manifest = this.defaultDirectManifest;\n }\n this.props.updateStageField(updates);\n this.reloadRegions();\n };\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n this.reloadRegions();\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private reloadRegions = () => {\n const { credentials } = this.props.stage;\n if (credentials) {\n observableFrom(AccountService.getRegionsForAccount(credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regions) => this.setState({ regions }));\n }\n };\n\n private manifestSourceUpdated = (source: string): void => {\n switch (source) {\n case 'direct':\n this.props.updateStageField({ manifest: this.defaultDirectManifest });\n break;\n case 'artifact':\n this.props.updateStageField({ manifest: {} });\n break;\n }\n };\n\n private onExpectedArtifactSelected = (expectedArtifact: IExpectedArtifact): void => {\n this.props.updateStageField({ manifest: { artifactId: expectedArtifact.id } });\n };\n\n private onArtifactChanged = (artifact: IArtifact): void => {\n this.props.updateStageField({ manifest: { artifact } });\n };\n\n private regionUpdated = (option: Option<string>): void => {\n const updates: any = { region: option.target.value };\n const direct = this.props.stage.manifest.direct;\n if (direct) {\n updates.manifest = this.defaultDirectManifest;\n }\n this.props.updateStageField(updates);\n };\n\n private serviceManifestSourceUpdated = (manifest: ICloudFoundryServiceManifestSource) => {\n this.props.updateStageField({ manifest });\n };\n\n private userProvidedUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.updateStageField({ userProvided: event.target.checked });\n };\n\n public render() {\n const { pipeline, stage } = this.props;\n const { credentials, region, userProvided, manifest } = this.props.stage;\n const { accounts, regions } = this.state;\n const directInput = !manifest || !!manifest.direct;\n let manifestInput;\n\n if (directInput) {\n const directManifest = (manifest && manifest.direct) || this.defaultDirectManifest;\n manifestInput = userProvided ? (\n <CreateUserProvidedInput\n onChange={this.serviceManifestSourceUpdated}\n service={directManifest}\n onServiceChanged={(direct) => this.serviceManifestSourceUpdated({ direct })}\n />\n ) : (\n <CreateServiceInstanceDirectInput\n credentials={credentials}\n region={region}\n service={directManifest}\n onServiceChanged={(direct) => this.serviceManifestSourceUpdated({ direct })}\n />\n );\n } else {\n manifestInput = (\n <StageConfigField label=\"Artifact\">\n <StageArtifactSelector\n pipeline={pipeline}\n stage={stage}\n expectedArtifactId={manifest.artifactId}\n excludedArtifactTypePatterns={[\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ArtifactTypePatterns.DOCKER_IMAGE,\n ]}\n artifact={manifest.artifact}\n onExpectedArtifactSelected={this.onExpectedArtifactSelected}\n onArtifactEdited={this.onArtifactChanged}\n />\n </StageConfigField>\n );\n }\n\n return (\n <div className=\"form-horizontal cloudfoundry-deploy-service-stage\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts.map((it) => it.name)}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <ReactSelectInput\n clearable={false}\n onChange={this.regionUpdated}\n value={region}\n stringOptions={regions.map((it) => it.name)}\n />\n </StageConfigField>\n <StageConfigField label=\"User-provided\">\n <input type=\"checkbox\" checked={!!userProvided} onChange={this.userProvidedUpdated} />\n </StageConfigField>\n <StageConfigField label=\"Configuration Source\">\n <div className=\"radio radio-inline\">\n <label>\n <input type=\"radio\" checked={!directInput} onChange={() => this.manifestSourceUpdated('artifact')} />{' '}\n Manifest\n </label>\n </div>\n <div className=\"radio radio-inline\">\n <label>\n <input type=\"radio\" checked={directInput} onChange={() => this.manifestSourceUpdated('direct')} /> Form\n </label>\n </div>\n </StageConfigField>\n {manifestInput}\n </div>\n );\n }\n}\n","import { safeLoad } from 'js-yaml';\nimport { get, upperFirst } from 'lodash';\n\nimport type { IPipeline, IStage, IStageOrTriggerValidator, ITrigger, IValidatorConfig } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, PipelineConfigValidator, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryDeployServiceStageConfig } from './CloudFoundryDeployServiceStageConfig';\nimport type { ICloudFoundryServiceManifestSource } from './ICloudFoundryServiceManifestSource';\nimport { CloudFoundryServiceExecutionDetails } from '../../../presentation';\n\ninterface IServiceFieldValidatorConfig extends IValidatorConfig {\n manifestSource: string;\n}\n\nconst sourceType = (manifest: ICloudFoundryServiceManifestSource, userProvided: boolean) => {\n if (manifest && manifest.direct) {\n return userProvided ? 'userProvided' : 'direct';\n } else {\n return 'artifact';\n }\n};\n\nconst sourceStruct = (manifest: ICloudFoundryServiceManifestSource) => {\n return manifest && manifest.direct ? 'direct' : 'artifact';\n};\n\nPipelineConfigValidator.registerValidator(\n 'requiredDeployServiceField',\n new (class implements IStageOrTriggerValidator {\n public validate(\n _pipeline: IPipeline,\n stage: IStage | ITrigger,\n validationConfig: IServiceFieldValidatorConfig,\n ): string {\n const serviceInput: ICloudFoundryServiceManifestSource = get(stage, 'manifest');\n if (sourceType(serviceInput, get(stage, 'userProvided')) !== validationConfig.manifestSource) {\n return null;\n }\n const manifestSource: any = get(serviceInput, sourceStruct(serviceInput));\n const content: any = get(manifestSource, validationConfig.fieldName);\n const fieldLabel = validationConfig.fieldLabel || upperFirst(validationConfig.fieldName);\n return content ? null : `<strong>${fieldLabel}</strong> is a required field for the Deploy Service stage.`;\n }\n })(),\n);\n\nPipelineConfigValidator.registerValidator(\n 'validDeployServiceParameterJsonOrYaml',\n new (class implements IStageOrTriggerValidator {\n private isJson(value: string): boolean {\n try {\n JSON.parse(value);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n private isYaml(value: string): boolean {\n try {\n safeLoad(value);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n public validate(\n _pipeline: IPipeline,\n stage: IStage | ITrigger,\n validationConfig: IServiceFieldValidatorConfig,\n ): string {\n const manifest: any = get(stage, 'manifest');\n if (sourceType(manifest, get(stage, 'userProvided')) !== validationConfig.manifestSource) {\n return null;\n }\n const manifestSource: any = get(manifest, sourceStruct(manifest));\n const fieldContent: any = get(manifestSource, validationConfig.fieldName);\n\n if (fieldContent) {\n if (!this.isJson(fieldContent) && !this.isYaml(fieldContent)) {\n const fieldLabel = upperFirst(validationConfig.fieldLabel || validationConfig.fieldName);\n return validationConfig.message || `<strong>${fieldLabel}</strong> should be a valid JSON or YAML string.`;\n }\n }\n return null;\n }\n })(),\n);\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryDeployServiceStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n supportsCustomTimeout: true,\n description: 'Deploys services using Open Service Broker and deploys user-provided services',\n executionDetailsSections: [CloudFoundryServiceExecutionDetails, ExecutionDetailsTasks],\n key: 'deployService',\n label: 'Deploy Service',\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'region' },\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'direct',\n fieldName: 'serviceInstanceName',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'direct',\n fieldName: 'service',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'direct',\n fieldName: 'servicePlan',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'artifact',\n fieldName: 'artifactAccount',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'artifact',\n fieldName: 'reference',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'requiredDeployServiceField',\n manifestSource: 'userProvided',\n fieldName: 'serviceInstanceName',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'validDeployServiceParameterJsonOrYaml',\n manifestSource: 'direct',\n fieldName: 'parameters',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n {\n type: 'validDeployServiceParameterJsonOrYaml',\n manifestSource: 'userProvided',\n fieldName: 'credentials',\n preventSave: true,\n } as IServiceFieldValidatorConfig,\n ],\n});\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\nimport { CloudFoundryAsgStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryAsgStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'destroyServerGroup',\n provides: 'destroyServerGroup',\n validators: [\n {\n type: 'cfTargetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n});\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IAccount, IFormikStageConfigInjectedProps, IRegion } from '@spinnaker/core';\nimport { AccountService, StageConfigField } from '@spinnaker/core';\n\nexport interface ICloudFoundryDestroyServiceStageConfigState {\n accounts: IAccount[];\n regions: string[];\n application: Application;\n}\n\nexport class CloudFoundryDestroyServiceStageConfigForm extends React.Component<\n IFormikStageConfigInjectedProps,\n ICloudFoundryDestroyServiceStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IFormikStageConfigInjectedProps, context: any) {\n super(props, context);\n this.props.formik.setFieldValue('cloudProvider', 'cloudfoundry');\n this.state = {\n accounts: [],\n regions: [],\n application: props.application,\n };\n }\n\n public componentDidMount() {\n const stage = this.props.formik.values;\n this.props.formik.setFieldValue('application', this.state.application.name);\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));\n if (stage.credentials) {\n this.loadRegions(stage.credentials);\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private loadRegions = (creds: string) => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(creds))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions: regions });\n });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const creds = option.value;\n this.props.formik.setFieldValue('credentials', creds);\n this.props.formik.setFieldValue('region', '');\n if (creds) {\n this.loadRegions(creds);\n }\n };\n\n private regionUpdated = (option: Option<string>) => {\n this.props.formik.setFieldValue('region', option.value);\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.formik.setFieldValue('serviceInstanceName', event.target.value);\n };\n\n private removeBindingsUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.formik.setFieldValue('removeBindings', event.target.checked);\n };\n\n public render() {\n const stage = this.props.formik.values;\n const { accounts, regions } = this.state;\n const { credentials, region, serviceInstanceName } = stage;\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <Select\n options={\n accounts &&\n accounts.map((acc: IAccount) => ({\n label: acc.name,\n value: acc.name,\n }))\n }\n clearable={false}\n value={credentials}\n onChange={this.accountUpdated}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <Select\n options={\n regions &&\n regions.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n clearable={false}\n value={region}\n onChange={this.regionUpdated}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <input\n type=\"text\"\n className=\"form-control\"\n required={true}\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Remove Bindings\">\n <input type=\"checkbox\" checked={stage.removeBindings} onChange={this.removeBindingsUpdated} />\n {stage.removeBindings && (\n <div>\n Warning: Prior to destroying, this will attempt to unbind any server groups that are bound to this\n service. This stage will fail if any server groups don't belong to the spinnaker application.\n </div>\n )}\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { CloudFoundryDestroyServiceStageConfigForm } from './CloudFoundryDestroyServiceStageConfigForm';\n\nexport function CloudFoundryDestroyServiceStageConfig({\n application,\n pipeline,\n stage,\n updateStage,\n}: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n credentials: '',\n serviceInstanceName: '',\n removeBindings: false,\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n validate={validateCloudFoundryDestroyServiceStage}\n render={(props) => <CloudFoundryDestroyServiceStageConfigForm {...props} />}\n />\n );\n}\n\nexport function validateCloudFoundryDestroyServiceStage(stage: IStage): FormikErrors<IStage> {\n const formValidator = new FormValidator(stage);\n\n formValidator.field('credentials', 'Account').required();\n formValidator.field('region', 'Region').required();\n formValidator.field('serviceInstanceName', 'Service Instance Name').required();\n formValidator.field('application', 'Application').required();\n\n return formValidator.validateForm();\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport {\n CloudFoundryDestroyServiceStageConfig,\n validateCloudFoundryDestroyServiceStage,\n} from './CloudFoundryDestroyServiceStageConfig';\nimport { CloudFoundryServiceExecutionDetails } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryDestroyServiceStageConfig,\n supportsCustomTimeout: true,\n executionDetailsSections: [CloudFoundryServiceExecutionDetails, ExecutionDetailsTasks],\n key: 'destroyService',\n provides: 'destroyService',\n validateFn: validateCloudFoundryDestroyServiceStage,\n});\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\nimport { CloudFoundryAsgStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryAsgStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'disableServerGroup',\n provides: 'disableServerGroup',\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n});\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\nimport { CloudFoundryAsgStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryAsgStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'enableServerGroup',\n provides: 'enableServerGroup',\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n});\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\nimport { CloudFoundryLoadBalancersExecutionDetails, CloudFoundryLoadBalancersStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryLoadBalancersStageConfig,\n description: 'Map a load balancer',\n executionDetailsSections: [CloudFoundryLoadBalancersExecutionDetails, ExecutionDetailsTasks],\n key: 'mapLoadBalancers',\n label: 'Map Load Balancer',\n validators: [\n { type: 'requiredField', preventSave: true, fieldName: 'cluster' },\n { type: 'requiredField', preventSave: true, fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', preventSave: true, fieldName: 'region' },\n { type: 'requiredField', preventSave: true, fieldName: 'target' },\n { type: 'cfRequiredRoutesField', preventSave: true, fieldName: 'loadBalancerNames' },\n ],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, NgReact, StageConfigField, StageConstants } from '@spinnaker/core';\nimport { AccountRegionClusterSelector } from '../../../presentation';\n\nexport interface ICloudFoundryResizeAsgStageConfigState {\n accounts: IAccount[];\n}\n\nexport class CloudFoundryResizeAsgStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryResizeAsgStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n const { stage } = props;\n let interestingHealthProviderNames;\n if (\n stage.isNew &&\n props.application.attributes.platformHealthOnlyShowOverride &&\n props.application.attributes.platformHealthOnly\n ) {\n interestingHealthProviderNames = ['Cloud Foundry'];\n }\n const { capacity } = stage;\n this.props.updateStageField({\n action: 'scale_exact',\n capacity: capacity && capacity.desired ? capacity : { desired: 1, min: 1, max: 1 },\n cloudProvider: 'cloudfoundry',\n diskQuota: stage.diskQuota || 1024,\n interestingHealthProviderNames: interestingHealthProviderNames,\n memory: stage.memory || 1024,\n });\n\n this.state = { accounts: [] };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n this.props.stageFieldUpdated();\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private instanceCountUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const instanceCount = parseInt(event.target.value, 10);\n this.props.updateStageField({\n capacity: {\n desired: instanceCount,\n min: instanceCount,\n max: instanceCount,\n },\n });\n };\n\n private memoryUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.updateStageField({ memory: parseInt(event.target.value, 10) });\n };\n\n private diskQuotaUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.updateStageField({ diskQuota: parseInt(event.target.value, 10) });\n };\n\n private targetUpdated = (target: string) => {\n this.props.updateStageField({ target });\n };\n\n private componentUpdated = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n regions: stage.regions,\n cluster: stage.cluster,\n });\n };\n\n public render() {\n const { accounts } = this.state;\n const { application, pipeline, stage } = this.props;\n const { capacity, diskQuota, memory, target } = stage;\n const instanceCount = capacity.desired;\n const { TargetSelect } = NgReact;\n return (\n <div className=\"cloudfoundry-resize-asg-stage form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n onComponentUpdate={this.componentUpdated}\n component={stage}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />\n </StageConfigField>\n <div className=\"form-group\">\n <span className=\"col-md-3 sm-label-right\" />\n <div className=\"col-md-9\">\n <div className=\"col-md-3 sm-label-left\">Instances</div>\n <div className=\"col-md-3 sm-label-left\">Mem (MB)</div>\n <div className=\"col-md-3 sm-label-left\">Disk (MB)</div>\n </div>\n <StageConfigField label=\"Match capacity\">\n <div className=\"col-md-3\">\n <input\n type=\"number\"\n key=\"instanceCount\"\n onChange={this.instanceCountUpdated}\n value={instanceCount}\n className=\"form-control input-sm\"\n />\n </div>\n <div className=\"col-md-3\">\n <input\n type=\"number\"\n key=\"memory\"\n onChange={this.memoryUpdated}\n value={memory}\n className=\"form-control input-sm\"\n />\n </div>\n <div className=\"col-md-3\">\n <input\n type=\"number\"\n key=\"diskQuota\"\n onChange={this.diskQuotaUpdated}\n value={diskQuota}\n className=\"form-control input-sm\"\n />\n </div>\n <div className=\"col-md-9 col-md-offset-3\">\n <em className=\"subinput-note\">Scaled capacity will match the numbers entered</em>\n </div>\n </StageConfigField>\n </div>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\n\nimport { CloudFoundryResizeAsgStageConfig } from './CloudFoundryResizeAsgStageConfig';\nimport type { IInstanceFieldSizeValidationConfig } from '../../config/validation/instanceSize.validator';\n\nconst diskValidator: IInstanceFieldSizeValidationConfig = {\n type: 'cfInstanceSizeField',\n fieldName: 'diskQuota',\n fieldLabel: 'Disk Mb',\n min: 256,\n preventSave: true,\n};\n\nconst instanceCountValidator: IInstanceFieldSizeValidationConfig = {\n type: 'cfInstanceSizeField',\n fieldName: 'capacity.desired',\n fieldLabel: 'Instances',\n min: 0,\n preventSave: true,\n};\n\nconst memoryValidator: IInstanceFieldSizeValidationConfig = {\n type: 'cfInstanceSizeField',\n fieldName: 'memory',\n fieldLabel: 'Mem Mb',\n min: 256,\n preventSave: true,\n};\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryResizeAsgStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n key: 'resizeServerGroup',\n provides: 'resizeServerGroup',\n validators: [\n {\n type: 'cfTargetImpedance',\n message:\n 'This pipeline will attempt to resize a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n instanceCountValidator,\n memoryValidator,\n diskValidator,\n ],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IPipeline, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, StageConfigField } from '@spinnaker/core';\nimport { AccountRegionClusterSelector } from '../../../presentation';\n\nexport interface ICloudFoundryRollbackClusterStageProps extends IStageConfigProps {\n pipeline: IPipeline;\n}\n\nexport interface ICloudFoundryRollbackClusterStageConfigState {\n accounts: IAccount[];\n}\n\nexport class CloudFoundryRollbackClusterStageConfig extends React.Component<\n ICloudFoundryRollbackClusterStageProps,\n ICloudFoundryRollbackClusterStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: ICloudFoundryRollbackClusterStageProps) {\n super(props);\n\n this.props.updateStageField({\n cloudProvider: 'cloudfoundry',\n regions: this.props.stage.regions || [],\n targetHealthyRollbackPercentage: 100,\n });\n\n this.state = { accounts: [] };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private waitTimeBetweenRegionsUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const time = parseInt(event.target.value || '0', 10);\n this.props.updateStageField({ waitTimeBetweenRegions: time });\n };\n\n private componentUpdate = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n regions: stage.regions,\n cluster: stage.cluster,\n moniker: stage.moniker,\n });\n };\n\n public render() {\n const { application, pipeline, stage } = this.props;\n const { waitTimeBetweenRegions } = stage;\n const { accounts } = this.state;\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n onComponentUpdate={this.componentUpdate}\n component={stage}\n />\n )}\n\n {stage.regions.length > 1 && (\n <StageConfigField label=\"Wait\">\n <input\n type=\"number\"\n min=\"0\"\n value={waitTimeBetweenRegions}\n onChange={this.waitTimeBetweenRegionsUpdated}\n className=\"form-control input-sm inline-number\"\n />\n seconds between regional rollbacks.\n </StageConfigField>\n )}\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\n\nimport { CloudFoundryRollbackClusterStageConfig } from './CloudFoundryRollbackClusterStageConfig';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n provides: 'rollbackCluster',\n key: 'rollbackCluster',\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryRollbackClusterStageConfig,\n controller: 'cfRollbackClusterStageCtrl',\n validators: [\n { type: 'requiredField', preventSave: true, fieldName: 'cluster' },\n { type: 'requiredField', preventSave: true, fieldName: 'regions' },\n { type: 'requiredField', preventSave: true, fieldName: 'credentials', fieldLabel: 'account' },\n ],\n});\n","import React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, NgReact, SpelText, StageConfigField, StageConstants, TextInput } from '@spinnaker/core';\nimport { AccountRegionClusterSelector } from '../../../presentation';\n\nexport interface ICloudFoundryRunTaskStageConfigState {\n accounts: IAccount[];\n region: string;\n}\n\nexport class CloudFoundryRunJobStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryRunTaskStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n region: '',\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n this.props.stageFieldUpdated();\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private componentUpdated = (stage: any): void => {\n this.props.updateStageField({\n credentials: stage.credentials,\n region: stage.region,\n cluster: stage.cluster,\n });\n };\n\n public render() {\n const { application, stage } = this.props;\n const { target, jobName, command, logsUrl } = stage;\n const { accounts } = this.state;\n const { TargetSelect } = NgReact;\n\n return (\n <div className=\"cloudfoundry-resize-asg-stage form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n cloudProvider={'cloudfoundry'}\n onComponentUpdate={this.componentUpdated}\n component={stage}\n isSingleRegion={true}\n />\n <StageConfigField label=\"Target\">\n <TargetSelect\n model={{ target }}\n options={StageConstants.TARGET_LIST}\n onChange={(t) => this.props.updateStageField({ target: t })}\n />\n </StageConfigField>\n <StageConfigField label=\"Job Name\" helpKey={'cf.runJob.jobName'}>\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={(e) => this.props.updateStageField({ jobName: e.target.value })}\n value={jobName}\n maxLength={238}\n />\n </StageConfigField>\n <StageConfigField label=\"Command\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={(e) => this.props.updateStageField({ command: e.target.value })}\n value={command}\n />\n </StageConfigField>\n <StageConfigField label=\"Logs URL\" helpKey={'cf.runJob.logsUrl'}>\n <SpelText\n placeholder=\"\"\n onChange={(value) => this.props.updateStageField({ logsUrl: value })}\n value={logsUrl}\n pipeline={this.props.pipeline}\n docLink={false}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import { bindAll } from 'lodash';\nimport React from 'react';\nimport { Button, Modal } from 'react-bootstrap';\n\nimport type { IInstanceConsoleOutput } from '@spinnaker/core';\nimport { InstanceReader } from '@spinnaker/core';\n\nexport enum CloudFoundryRecentLogsType {\n APP = 'app',\n TASK = 'task',\n}\n\nexport interface ICloudFoundryRecentLogsProps {\n account: string;\n region: string;\n resourceDisplayName: string;\n resourceGuid: string;\n logsType: CloudFoundryRecentLogsType;\n resourceInstanceIndex?: number;\n}\n\nexport interface ICloudFoundryRecentLogsState {\n logs: string;\n showModal: boolean;\n errorMessage: string;\n}\n\nexport class CloudFoundryRecentLogs extends React.Component<\n ICloudFoundryRecentLogsProps,\n ICloudFoundryRecentLogsState\n> {\n constructor(props: ICloudFoundryRecentLogsProps) {\n super(props);\n this.state = {\n logs: '',\n showModal: false,\n errorMessage: null,\n };\n bindAll(this, ['open', 'close', 'onClick']);\n }\n\n private canShow(): boolean {\n const { resourceGuid } = this.props;\n return resourceGuid !== ''; // or null?\n }\n\n private generateResourceId(): string {\n const { resourceGuid, logsType, resourceInstanceIndex } = this.props;\n const optionalInstanceIndex = logsType === CloudFoundryRecentLogsType.APP ? `:${resourceInstanceIndex}` : '';\n return `${logsType}:${resourceGuid}${optionalInstanceIndex}`;\n }\n\n public close() {\n this.setState({ showModal: false });\n }\n\n public open() {\n this.setState({ showModal: true });\n }\n\n public onClick() {\n const { account, region } = this.props;\n InstanceReader.getConsoleOutput(account, region, this.generateResourceId(), 'cloudfoundry')\n .then((response: IInstanceConsoleOutput) => {\n this.setState({\n logs: response.output as string,\n });\n this.open();\n })\n .catch((exception: any) => {\n this.setState({ errorMessage: exception.data.message });\n this.open();\n });\n }\n\n public render() {\n const { showModal, logs, errorMessage } = this.state;\n if (this.canShow()) {\n return (\n <div>\n <a onClick={this.onClick} className=\"clickable\">\n Recent\n </a>\n <Modal show={showModal} onHide={this.close} dialogClassName=\"modal-lg modal-fullscreen\">\n <Modal.Header closeButton={true}>\n <Modal.Title>Recent logs</Modal.Title>\n <h5>\n CloudFoundry {this.props.logsType.valueOf()} name: {this.props.resourceDisplayName}\n </h5>\n </Modal.Header>\n <Modal.Body>\n {logs.length > 0 && (\n <>\n <pre className=\"body-small\">{logs}</pre>\n </>\n )}\n\n {logs.length === 0 && <>No logs returned.</>}\n\n {errorMessage && <pre className=\"body-small\">{errorMessage}</pre>}\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={this.close}>Close</Button>\n </Modal.Footer>\n </Modal>\n </div>\n );\n } else {\n return null;\n }\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection } from '@spinnaker/core';\nimport {\n CloudFoundryRecentLogs,\n CloudFoundryRecentLogsType,\n} from '../../../presentation/widgets/recentLogs/CloudFoundryRecentLogs';\n\nexport class RunJobExecutionDetails extends React.Component<IExecutionDetailsSectionProps> {\n public static title = 'runJobDetails';\n\n public render() {\n const { stage, name, current } = this.props;\n const { context } = stage;\n const account = context['deploy.account.name'];\n const region = get(stage, ['context', 'jobStatus', 'location'], '');\n const taskId = get(stage, ['context', 'jobStatus', 'id'], '');\n const taskName = get(stage, ['context', 'jobStatus', 'name'], '');\n const logsUrl: string = get(stage, ['context', 'logsUrl']);\n\n return (\n <ExecutionDetailsSection name={name} current={current}>\n <div className=\"row\">\n <div className=\"col-md-9\">\n <dl className=\"dl-narrow dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n {region && (\n <>\n <dt>Region</dt>\n <dd>{region}</dd>\n <dt>Logs</dt>\n <dd>\n <CloudFoundryRecentLogs\n account={account}\n region={region}\n resourceDisplayName={taskName}\n resourceGuid={taskId}\n logsType={CloudFoundryRecentLogsType.TASK}\n />\n </dd>\n {logsUrl && (\n <dd>\n <a target=\"_blank\" href={logsUrl}>\n External\n </a>\n </dd>\n )}\n </>\n )}\n {!region && <div className=\"well\">Collecting additional details...</div>}\n </dl>\n </div>\n </div>\n </ExecutionDetailsSection>\n );\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryShareServiceExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'service.account', undefined);\n const region = get(context, 'service.region', undefined);\n const serviceInstanceName = get(context, 'serviceInstanceName', undefined);\n const shareToRegions = get(context, 'shareToRegions', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Region</dt>\n <dd>\n {region}\n <br />\n </dd>\n <dt>Service Instance Name</dt>\n <dd>\n {serviceInstanceName}\n <br />\n </dd>\n <dt>Sharing Regions</dt>\n <dd>\n {shareToRegions.join(', ')}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n <StageExecutionLogs stage={stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace CloudFoundryShareServiceExecutionDetails {\n export const title = 'cloudfoundryShareServiceConfig';\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryRunJobStageConfig } from './CloudFoundryRunJobStageConfig';\nimport { RunJobExecutionDetails } from './RunJobExecutionDetails';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n component: CloudFoundryRunJobStageConfig,\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n key: 'runJob',\n provides: 'runJob',\n restartable: true,\n executionDetailsSections: [ExecutionDetailsTasks, RunJobExecutionDetails],\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'credentials' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'command' },\n ],\n});\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';\n\ninterface ICloudFoundryShareServiceStageConfigState {\n accounts: IAccount[];\n regions: string[];\n shareToRegionsList: string[];\n}\n\nexport class CloudFoundryShareServiceStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryShareServiceStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n regions: [],\n shareToRegionsList: [],\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n if (this.props.stage.credentials) {\n this.clearAndReloadRegions();\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private clearAndReloadRegions = () => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const { region } = this.props.stage;\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions });\n if (region) {\n this.clearAndResetShareToRegionList(region, regions);\n }\n });\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceInstanceName: event.target.value });\n };\n\n private clearAndResetShareToRegionList = (region: string, regions: string[]) => {\n this.setState({ shareToRegionsList: regions.filter((r) => r !== region) });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const credentials = option.target.value;\n this.setState({\n regions: [],\n shareToRegionsList: [],\n });\n this.props.updateStageField({\n credentials,\n region: '',\n shareToRegions: [],\n });\n if (credentials) {\n this.clearAndReloadRegions();\n }\n };\n\n private regionUpdated = (option: Option<string>) => {\n const region = option.target.value;\n this.setState({ shareToRegionsList: [] });\n this.props.updateStageField({\n region,\n shareToRegions: [],\n });\n this.clearAndResetShareToRegionList(region, this.state.regions);\n };\n\n private shareToRegionsUpdated = (option: Option<string>) => {\n this.props.updateStageField({ shareToRegions: option.map((o: Option) => o.value) });\n };\n\n public render() {\n const { credentials, region, serviceInstanceName, shareToRegions } = this.props.stage;\n const { accounts, regions, shareToRegionsList } = this.state;\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts.map((it) => it.name)}\n />\n </StageConfigField>\n <StageConfigField label=\"Region\">\n <ReactSelectInput clearable={false} onChange={this.regionUpdated} value={region} stringOptions={regions} />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Share To Regions\">\n <Select\n options={\n shareToRegionsList &&\n shareToRegionsList.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n multi={true}\n clearable={false}\n value={shareToRegions}\n onChange={this.shareToRegionsUpdated}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { AccountTag, ExecutionDetailsSection, StageExecutionLogs, StageFailureMessage } from '@spinnaker/core';\n\nexport function CloudFoundryUnshareServiceExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n const { context } = stage;\n const account = get(context, 'service.account', undefined);\n const serviceInstanceName = get(context, 'serviceInstanceName', undefined);\n const unshareFromRegions = get(context, 'unshareFromRegions', undefined);\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <div className=\"step-section-details\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <dl className=\"dl-horizontal\">\n <dt>Account</dt>\n <dd>\n <AccountTag account={account} />\n </dd>\n <dt>Service Instance Name</dt>\n <dd>\n {serviceInstanceName}\n <br />\n </dd>\n <dt>Unsharing Regions</dt>\n <dd>\n {unshareFromRegions.join(', ')}\n <br />\n </dd>\n </dl>\n </div>\n </div>\n </div>\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n <StageExecutionLogs stage={stage} />\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace CloudFoundryUnshareServiceExecutionDetails {\n export const title = 'cloudfoundryUnshareServiceConfig';\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryShareServiceExecutionDetails } from './CloudFoundryShareServiceExecutionDetails';\nimport { CloudFoundryShareServiceStageConfig } from './CloudFoundryShareServiceStageConfig';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n provides: 'shareService',\n key: 'shareService',\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryShareServiceStageConfig,\n executionDetailsSections: [CloudFoundryShareServiceExecutionDetails, ExecutionDetailsTasks],\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },\n ],\n});\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\nimport { CloudFoundryLoadBalancersExecutionDetails, CloudFoundryLoadBalancersStageConfig } from '../../../presentation';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryLoadBalancersStageConfig,\n description: 'Unmap a load balancer',\n executionDetailsSections: [CloudFoundryLoadBalancersExecutionDetails, ExecutionDetailsTasks],\n key: 'unmapLoadBalancers',\n label: 'Unmap Load Balancer',\n validators: [\n { type: 'requiredField', preventSave: true, fieldName: 'cluster' },\n { type: 'requiredField', preventSave: true, fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', preventSave: true, fieldName: 'region' },\n { type: 'requiredField', preventSave: true, fieldName: 'target' },\n { type: 'cfRequiredRoutesField', preventSave: true, fieldName: 'loadBalancerNames' },\n ],\n});\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';\nimport { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';\n\ninterface ICloudFoundryShareServiceStageConfigState {\n accounts: IAccount[];\n regions: string[];\n}\n\nexport class CloudFoundryUnshareServiceStageConfig extends React.Component<\n IStageConfigProps,\n ICloudFoundryShareServiceStageConfigState\n> {\n private destroy$ = new Subject();\n\n constructor(props: IStageConfigProps) {\n super(props);\n props.stage.cloudProvider = 'cloudfoundry';\n this.state = {\n accounts: [],\n regions: [],\n };\n }\n\n public componentDidMount(): void {\n observableFrom(AccountService.listAccounts('cloudfoundry'))\n .pipe(takeUntil(this.destroy$))\n .subscribe((accounts) => this.setState({ accounts }));\n if (this.props.stage.credentials) {\n this.clearAndReloadRegions();\n }\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private clearAndReloadRegions = () => {\n this.setState({ regions: [] });\n observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))\n .pipe(takeUntil(this.destroy$))\n .subscribe((regionList: IRegion[]) => {\n const regions = regionList.map((r) => r.name);\n regions.sort((a, b) => a.localeCompare(b));\n this.setState({ regions });\n });\n };\n\n private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.updateStageField({ serviceInstanceName: event.target.value });\n };\n\n private accountUpdated = (option: Option<string>) => {\n const credentials = option.target.value;\n this.setState({ regions: [] });\n this.props.updateStageField({\n credentials,\n unshareFromRegions: [],\n });\n if (credentials) {\n this.clearAndReloadRegions();\n }\n };\n\n private unshareFromRegionsUpdated = (option: Option<string>) => {\n this.props.updateStageField({ unshareFromRegions: option.map((o: Option) => o.value) });\n };\n\n public render() {\n const { credentials, serviceInstanceName, unshareFromRegions } = this.props.stage;\n const { accounts, regions } = this.state;\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Account\">\n <ReactSelectInput\n clearable={false}\n onChange={this.accountUpdated}\n value={credentials}\n stringOptions={accounts.map((it) => it.name)}\n />\n </StageConfigField>\n <StageConfigField label=\"Service Instance Name\">\n <TextInput\n type=\"text\"\n className=\"form-control\"\n onChange={this.serviceInstanceNameUpdated}\n value={serviceInstanceName}\n />\n </StageConfigField>\n <StageConfigField label=\"Unshare From Regions\">\n <Select\n options={\n regions &&\n regions.map((r: string) => ({\n label: r,\n value: r,\n }))\n }\n multi={true}\n clearable={false}\n value={unshareFromRegions}\n onChange={this.unshareFromRegionsUpdated}\n />\n </StageConfigField>\n </div>\n );\n }\n}\n","import type { IStage } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, Registry } from '@spinnaker/core';\n\nimport { CloudFoundryUnshareServiceExecutionDetails } from './CloudFoundryUnshareServiceExecutionDetails';\nimport { CloudFoundryUnshareServiceStageConfig } from './CloudFoundryUnshareServiceStageConfig';\n\nRegistry.pipeline.registerStage({\n accountExtractor: (stage: IStage) => [stage.context.credentials],\n configAccountExtractor: (stage: IStage) => [stage.credentials],\n provides: 'unshareService',\n key: 'unshareService',\n cloudProvider: 'cloudfoundry',\n component: CloudFoundryUnshareServiceStageConfig,\n controller: 'cfUnshareServiceStageCtrl',\n executionDetailsSections: [CloudFoundryUnshareServiceExecutionDetails, ExecutionDetailsTasks],\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },\n ],\n});\n","import React from 'react';\n\nimport { AccountTag, CollapsibleSection, timestamp } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\nimport type { ICloudFoundryBuildpack } from '../../../domain';\n\nexport class ServerGroupInformationSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <CollapsibleSection heading=\"Server Group Information\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Created</dt>\n {serverGroup.pipelineId ? (\n <dd>\n <a target=\"_blank\" href={'/#/applications/' + serverGroup.app + '/executions/' + serverGroup.pipelineId}>\n {timestamp(serverGroup.createdTime)}\n </a>\n </dd>\n ) : (\n <dd>{timestamp(serverGroup.createdTime)}</dd>\n )}\n <dt>Account</dt>\n <dd>\n <AccountTag account={serverGroup.account} />\n </dd>\n <dt>Organization</dt>\n <dd>{serverGroup.space.organization.name}</dd>\n <dt>Space</dt>\n <dd>{serverGroup.space.name}</dd>\n {serverGroup.droplet && (\n <div>\n <dt>Rootfs</dt>\n <dd>{serverGroup.droplet.stack}</dd>\n <dt>Buildpack</dt>\n {serverGroup.droplet.buildpacks ? (\n serverGroup.droplet.buildpacks.map(function (buildpack: ICloudFoundryBuildpack, index: number) {\n return (\n <dd key={index}>\n {buildpack.name} {buildpack.version}\n </dd>\n );\n })\n ) : (\n <dd>n/a</dd>\n )}\n </div>\n )}\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class ApplicationManagerSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n const { appsManagerUri } = serverGroup;\n return (\n <>\n {appsManagerUri && (\n <CollapsibleSection heading=\"Apps Manager\" defaultExpanded={true}>\n <div>\n <a href={appsManagerUri} target=\"_blank\">\n Apps Manager\n </a>\n </div>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class MetricsSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n const { metricsUri } = serverGroup;\n return (\n <>\n {metricsUri && (\n <CollapsibleSection heading=\"Metrics\" defaultExpanded={true}>\n <div>\n <a href={metricsUri} target=\"_blank\">\n Metrics\n </a>\n </div>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class ServerGroupSizingSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <CollapsibleSection heading=\"Server Group Sizing\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Instances</dt>\n <dd>{serverGroup.instances.length}</dd>\n <dt>Disk (MB)</dt>\n <dd>{serverGroup.diskQuota}</dd>\n <dt>Memory (MB)</dt>\n <dd>{serverGroup.memory}</dd>\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class HealthCheckSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <CollapsibleSection heading=\"Health Check\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Type</dt>\n <dd>{serverGroup.healthCheckType === undefined ? 'port' : serverGroup.healthCheckType}</dd>\n {serverGroup.healthCheckType === 'http' && (\n <div>\n <dt>Endpoint</dt>\n <dd>{serverGroup.healthCheckHttpEndpoint}</dd>\n </div>\n )}\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class PackageSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <>\n {serverGroup.droplet && serverGroup.droplet.sourcePackage && (\n <CollapsibleSection heading=\"Package\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Checksum</dt>\n <dd>{serverGroup.droplet.sourcePackage.checksum}</dd>\n </dl>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class BuildSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <CollapsibleSection heading=\"Build\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n {serverGroup.ciBuild && serverGroup.ciBuild.jobName && (\n <div>\n <dt>Job Name</dt>\n <dd>{serverGroup.ciBuild.jobName}</dd>\n </div>\n )}\n {serverGroup.ciBuild && serverGroup.ciBuild.jobNumber && (\n <div>\n <dt>Job Number</dt>\n {serverGroup.ciBuild.jobUrl ? (\n <dd>\n <a target=\"_blank\" href={serverGroup.ciBuild.jobUrl}>\n {serverGroup.ciBuild.jobNumber}\n </a>\n </dd>\n ) : (\n <dd>{serverGroup.ciBuild.jobNumber}</dd>\n )}\n </div>\n )}\n {serverGroup.appArtifact && serverGroup.appArtifact.name && (\n <div>\n <dt>Artifact Name</dt>\n <dd>{serverGroup.appArtifact.name}</dd>\n </div>\n )}\n {serverGroup.appArtifact && serverGroup.appArtifact.version && (\n <div>\n <dt>Version</dt>\n {serverGroup.appArtifact.url ? (\n <dd>\n <a target=\"_blank\" href={serverGroup.appArtifact.url}>\n {serverGroup.appArtifact.version}\n </a>\n </dd>\n ) : (\n <dd>{serverGroup.appArtifact.version}</dd>\n )}\n </div>\n )}\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import { isEmpty } from 'lodash';\nimport React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\nimport type { ICloudFoundryServiceInstance } from '../../../domain';\n\nexport class BoundServicesSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <>\n {!isEmpty(serverGroup.serviceInstances) && (\n <CollapsibleSection heading=\"Bound Services\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n {serverGroup.serviceInstances.map(function (service: ICloudFoundryServiceInstance, index: number) {\n return (\n <div key={index}>\n <dt>Name</dt>\n <dd>{service.name}</dd>\n <dt>Plan</dt>\n <dd>{service.plan}</dd>\n <dt>Tags</dt>\n {service.tags && <dd>{service.tags.join(', ')}</dd>}\n </div>\n );\n })}\n </dl>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import { isEmpty } from 'lodash';\nimport React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { ICloudFoundryServerGroupDetailsSectionProps } from './ICloudFoundryServerGroupDetailsSectionProps';\n\nexport class EnvironmentVariablesSection extends React.Component<ICloudFoundryServerGroupDetailsSectionProps> {\n constructor(props: ICloudFoundryServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n return (\n <>\n {!isEmpty(serverGroup.env) && (\n <CollapsibleSection heading=\"Environment Variables\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n {Object.entries(serverGroup.env).map(([k, v], index) => {\n return (\n <div key={index}>\n <dt>{k}</dt>\n <dd>{v}</dd>\n </div>\n );\n })}\n </dl>\n </CollapsibleSection>\n )}\n </>\n );\n }\n}\n","import { defaults } from 'lodash';\n\nimport type { ICloudFoundryEnvVar, ICloudFoundryServerGroup } from '../domain';\n\nexport class CloudFoundryServerGroupTransformer {\n public static $inject = ['$q'];\n public constructor(private $q: ng.IQService) {}\n\n public normalizeServerGroupDetails(serverGroup: ICloudFoundryServerGroup): ICloudFoundryServerGroup {\n return serverGroup;\n }\n\n public normalizeServerGroup(serverGroup: ICloudFoundryServerGroup): PromiseLike<ICloudFoundryServerGroup> {\n return this.$q.resolve(serverGroup);\n }\n\n public convertServerGroupCommandToDeployConfiguration(base: any): any {\n const command = defaults({ viewState: [] }, base);\n command.cloudProvider = 'cloudfoundry';\n command.provider = 'cloudfoundry';\n command.account = command.credentials;\n\n delete command.viewState;\n delete command.selectedProvider;\n\n if (command.manifest.type === 'direct') {\n command.manifest.env = this.convertManifestEnv(command.manifest.environment);\n } else {\n command.manifest.env = command.manifest.environment;\n }\n\n return command;\n }\n\n private convertManifestEnv(envVars: ICloudFoundryEnvVar[]): {} {\n const newEnv = Object.create(null);\n for (const envVar of envVars) {\n newEnv[envVar.key] = envVar.value;\n }\n return newEnv;\n }\n}\n","import type { Formik } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\n\nimport type { Application, IModalComponentProps, IServerGroup, IServerGroupJob } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\nimport { Routes } from '../../../presentation/forms/serverGroup';\n\nexport interface ICloudFoundryLoadBalancerLinksModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: ICloudFoundryServerGroup;\n}\n\nexport interface ICloudFoundryLoadBalancerLinksModalState {\n initialValues: ICloudFoundryLoadBalancerLinksModalValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryLoadBalancerLinksModalValues {\n routes: string[];\n}\n\nexport interface ICloudFoundryLoadBalancerLinkJob extends IServerGroupJob {\n routes: string[];\n serverGroupName: string;\n}\n\nexport class CloudFoundryMapLoadBalancersModal extends React.Component<\n ICloudFoundryLoadBalancerLinksModalProps,\n ICloudFoundryLoadBalancerLinksModalState\n> {\n public static defaultProps: Partial<ICloudFoundryLoadBalancerLinksModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancerLinksModalValues>>();\n\n public static show(props: ICloudFoundryLoadBalancerLinksModalProps): Promise<ICloudFoundryLoadBalancerLinkJob> {\n return ReactModal.show(CloudFoundryMapLoadBalancersModal, props, {});\n }\n\n constructor(props: ICloudFoundryLoadBalancerLinksModalProps) {\n super(props);\n\n this.state = {\n initialValues: {\n routes: [''],\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Mapping a route to your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n }\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = (values: ICloudFoundryLoadBalancerLinksModalValues): void => {\n const { routes } = values;\n const { serverGroup } = this.props;\n const coreServerGroup: IServerGroup = {\n account: serverGroup.account,\n cloudProvider: serverGroup.cloudProvider,\n cluster: serverGroup.cluster,\n instanceCounts: serverGroup.instanceCounts,\n instances: serverGroup.instances,\n loadBalancers: routes,\n name: serverGroup.name,\n region: serverGroup.region,\n type: serverGroup.type,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.mapLoadBalancers(coreServerGroup, this.props.application, {\n serverGroupName: serverGroup.name,\n });\n });\n };\n\n public render() {\n const { serverGroup } = this.props;\n const { initialValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryLoadBalancerLinksModalValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Map route to {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n <Routes fieldName=\"routes\" isRequired={true} singleRouteOnly={true} />\n </Form>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={() => this.submit(formik.values)}\n disabled={!formik.isValid}\n >\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import type { Formik } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\n\nimport type { Application, IModalComponentProps, IServerGroup, IServerGroupJob } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\nimport { Routes } from '../../../presentation/forms/serverGroup';\n\nexport interface ICloudFoundryLoadBalancerLinksModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: ICloudFoundryServerGroup;\n}\n\nexport interface ICloudFoundryLoadBalancerLinksModalState {\n initialValues: ICloudFoundryLoadBalancerLinksModalValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryLoadBalancerLinksModalValues {\n routes: string[];\n}\n\nexport interface ICloudFoundryLoadBalancerLinkJob extends IServerGroupJob {\n routes: string[];\n serverGroupName: string;\n}\n\nexport class CloudFoundryUnmapLoadBalancersModal extends React.Component<\n ICloudFoundryLoadBalancerLinksModalProps,\n ICloudFoundryLoadBalancerLinksModalState\n> {\n public static defaultProps: Partial<ICloudFoundryLoadBalancerLinksModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancerLinksModalValues>>();\n\n public static show(props: ICloudFoundryLoadBalancerLinksModalProps): Promise<ICloudFoundryLoadBalancerLinkJob> {\n return ReactModal.show(CloudFoundryUnmapLoadBalancersModal, props, {});\n }\n\n constructor(props: ICloudFoundryLoadBalancerLinksModalProps) {\n super(props);\n\n this.state = {\n initialValues: {\n routes: [''],\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Unmapping a route from your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n }\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = (values: ICloudFoundryLoadBalancerLinksModalValues): void => {\n const { routes } = values;\n const { serverGroup } = this.props;\n const coreServerGroup: IServerGroup = {\n account: serverGroup.account,\n cloudProvider: serverGroup.cloudProvider,\n cluster: serverGroup.cluster,\n instanceCounts: serverGroup.instanceCounts,\n instances: serverGroup.instances,\n loadBalancers: routes,\n name: serverGroup.name,\n region: serverGroup.region,\n type: serverGroup.type,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.unmapLoadBalancers(coreServerGroup, this.props.application, {\n serverGroupName: serverGroup.name,\n });\n });\n };\n\n public render() {\n const { serverGroup } = this.props;\n const { initialValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryLoadBalancerLinksModalValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Unmap route from {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n <Routes fieldName=\"routes\" isRequired={true} singleRouteOnly={true} />\n </Form>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={() => this.submit(formik.values)}\n disabled={!formik.isValid}\n >\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import type { Formik, FormikProps } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\n\nimport type { Application, ICapacity, IModalComponentProps, IServerGroupJob } from '@spinnaker/core';\nimport {\n FormikFormField,\n ModalClose,\n noop,\n NumberInput,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\n\nexport interface ICloudFoundryResizeServerGroupModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: ICloudFoundryServerGroup;\n}\n\nexport interface ICloudFoundryResizeServerGroupModalState {\n initialValues: ICloudFoundryResizeServerGroupValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryResizeServerGroupValues {\n desired: number | string;\n diskQuota?: number;\n memory?: number;\n reason?: string;\n}\n\nexport interface ICloudFoundryResizeJob extends IServerGroupJob {\n capacity?: Partial<ICapacity>;\n diskQuota?: number;\n instanceCount?: number;\n memory?: number;\n serverGroupName: string;\n reason?: string;\n}\n\nexport class CloudFoundryResizeServerGroupModal extends React.Component<\n ICloudFoundryResizeServerGroupModalProps,\n ICloudFoundryResizeServerGroupModalState\n> {\n public static defaultProps: Partial<ICloudFoundryResizeServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<ICloudFoundryResizeServerGroupValues>>();\n\n public static show(props: ICloudFoundryResizeServerGroupModalProps): Promise<ICloudFoundryResizeJob> {\n const modalProps = {};\n return ReactModal.show(CloudFoundryResizeServerGroupModal, props, modalProps);\n }\n\n constructor(props: ICloudFoundryResizeServerGroupModalProps) {\n super(props);\n\n const { capacity, diskQuota, memory } = props.serverGroup;\n const { desired } = capacity;\n this.state = {\n initialValues: {\n desired,\n diskQuota: diskQuota,\n memory: memory,\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Resizing your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n }\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = (values: ICloudFoundryResizeServerGroupValues): void => {\n const { desired, diskQuota, memory, reason } = values;\n const { serverGroup, application } = this.props;\n const capacity = {\n min: desired,\n max: desired,\n desired,\n };\n\n const command: ICloudFoundryResizeJob = {\n capacity,\n diskQuota,\n memory,\n reason,\n serverGroupName: serverGroup.name,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.resizeServerGroup(serverGroup, application, command);\n });\n };\n\n private renderDesired(formik: FormikProps<ICloudFoundryResizeServerGroupValues>): JSX.Element {\n const { serverGroup } = this.props;\n const { capacity } = serverGroup;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Current size</div>\n <div className=\"col-md-4\">\n <div className=\"horizontal middle\">\n <input type=\"number\" className=\"NumberInput form-control\" value={capacity.desired} disabled={true} />\n <div className=\"sp-padding-xs-xaxis\">instances</div>\n </div>\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Resize to</div>\n <div className=\"col-md-4\">\n <div className=\"horizontal middle\">\n <FormikFormField\n name=\"desired\"\n input={(props) => <NumberInput {...props} min={0} />}\n touched={true}\n required={true}\n onChange={(value) => {\n formik.setFieldValue('min', value);\n formik.setFieldValue('max', value);\n }}\n />\n <div className=\"sp-padding-xs-xaxis\">instances</div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n private renderQuota(\n formik: FormikProps<ICloudFoundryResizeServerGroupValues>,\n field: string,\n fieldLabel: string,\n initialValue: number,\n ): JSX.Element {\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Current size</div>\n <div className=\"col-md-5\">\n <div className=\"horizontal middle\">\n <div className=\"StandardFieldLayout flex-container-h baseline margin-between-lg\">\n <input type=\"number\" className=\"NumberInput form-control\" value={initialValue} disabled={true} />\n </div>\n <div className=\"sp-padding-xs-xaxis\">{fieldLabel}</div>\n </div>\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Resize to</div>\n <div className=\"col-md-5\">\n <div className=\"horizontal middle\">\n <FormikFormField\n name={field}\n input={(props) => <NumberInput {...props} min={64} />}\n touched={true}\n required={true}\n onChange={(value) => {\n formik.setFieldValue('min', value);\n formik.setFieldValue('max', value);\n }}\n />\n <div className=\"sp-padding-xs-xaxis\">{fieldLabel}</div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n public render() {\n const { serverGroup } = this.props;\n const { diskQuota, memory } = serverGroup;\n const { initialValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryResizeServerGroupValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Resize {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n {this.renderDesired(formik)}\n {this.renderQuota(formik, 'diskQuota', 'Disk (MB)', diskQuota)}\n {this.renderQuota(formik, 'memory', 'Mem (MB)', memory)}\n <TaskReason reason={formik.values.reason} onChange={(val) => formik.setFieldValue('reason', val)} />\n </Form>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={() => this.submit(formik.values)}\n disabled={!formik.isValid}\n >\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import type { Formik } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal, ModalFooter } from 'react-bootstrap';\n\nimport type { Application, IModalComponentProps, IServerGroupJob } from '@spinnaker/core';\nimport {\n FormikFormField,\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n ReactSelectInput,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\nimport type { ICloudFoundryServerGroup } from '../../../domain';\n\nexport interface ICloudFoundryRollbackServerGroupModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: ICloudFoundryServerGroup;\n previousServerGroup: ICloudFoundryServerGroup;\n allServerGroups: ICloudFoundryServerGroup[];\n disabledServerGroups: ICloudFoundryServerGroup[];\n}\n\nexport interface ICloudFoundryRollbackServerGroupModalState {\n initialValues: ICloudFoundryRollbackServerGroupValues;\n taskMonitor: TaskMonitor;\n}\n\nexport interface ICloudFoundryRollbackServerGroupValues {\n restoreServerGroupName: string;\n reason?: string;\n}\n\nexport interface ICloudFoundryRollbackJob extends IServerGroupJob {\n rollbackType: string;\n rollbackContext: {\n rollbackServerGroupName: string;\n restoreServerGroupName: string;\n targetHealthyRollbackPercentage: number;\n };\n}\n\nexport class CloudFoundryRollbackServerGroupModal extends React.Component<\n ICloudFoundryRollbackServerGroupModalProps,\n ICloudFoundryRollbackServerGroupModalState\n> {\n public static defaultProps: Partial<ICloudFoundryRollbackServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<ICloudFoundryRollbackServerGroupValues>>();\n\n public static show(props: ICloudFoundryRollbackServerGroupModalProps): Promise<ICloudFoundryRollbackJob> {\n const modalProps = {};\n return ReactModal.show(CloudFoundryRollbackServerGroupModal, props, modalProps);\n }\n\n constructor(props: ICloudFoundryRollbackServerGroupModalProps) {\n super(props);\n\n const { previousServerGroup, serverGroup } = props;\n const { name } = serverGroup;\n this.state = {\n initialValues: {\n restoreServerGroupName: previousServerGroup ? previousServerGroup.name : undefined,\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Rollback ' + name,\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n };\n }\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = (values: ICloudFoundryRollbackServerGroupValues): void => {\n const { reason, restoreServerGroupName } = values;\n const { serverGroup, application } = this.props;\n\n const command: ICloudFoundryRollbackJob = {\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n restoreServerGroupName,\n targetHealthyRollbackPercentage: 100,\n },\n reason,\n };\n\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.rollbackServerGroup(serverGroup, application, command);\n });\n };\n\n public render() {\n const { allServerGroups, serverGroup } = this.props;\n const { initialValues } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<ICloudFoundryRollbackServerGroupValues>\n ref={this.formikRef}\n initialValues={initialValues}\n onSubmit={this.submit}\n render={(formik) => {\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Rollback {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n <div className=\"row\" style={{ marginTop: '10px', marginBottom: '10px' }}>\n <div className=\"col-md-3 sm-label-right\">Restore to</div>\n <div className=\"col-md-7\">\n <FormikFormField\n name=\"restoreServerGroupName\"\n fastField={true}\n input={(props) => (\n <ReactSelectInput\n inputClassName=\"cloudfoundry-react-select\"\n {...props}\n stringOptions={\n allServerGroups && allServerGroups.map((sg: ICloudFoundryServerGroup) => sg.name)\n }\n clearable={false}\n />\n )}\n required={true}\n />\n </div>\n </div>\n <TaskReason reason={formik.values.reason} onChange={(val) => formik.setFieldValue('reason', val)} />\n </Form>\n <div className=\"row\">\n <div className=\"col-sm-4 sm-label-right\">Rollback Operations</div>\n </div>\n <div className=\"row\">\n <div className=\"col-sm-11 col-sm-offset-1\">\n <ol>\n <li>\n Enable <em>{formik.values.restoreServerGroupName || 'previous server group'}</em>\n </li>\n <li>Disable {serverGroup.name}</li>\n </ol>\n <p>\n This rollback will affect server groups in {serverGroup.account} ({serverGroup.region}\n ).\n </p>\n </div>\n </div>\n </Modal.Body>\n <ModalFooter>\n <button className=\"btn btn-default\" onClick={this.close}>\n Cancel\n </button>\n <button type=\"submit\" className=\"btn btn-primary\" onClick={() => this.submit(formik.values)}>\n Submit\n </button>\n </ModalFooter>\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import { filter, find, get, orderBy } from 'lodash';\nimport React from 'react';\nimport { Dropdown, Tooltip } from 'react-bootstrap';\n\nimport type { IOwnerOption, IServerGroupActionsProps, IServerGroupJob } from '@spinnaker/core';\nimport {\n AddEntityTagLinks,\n ClusterTargetBuilder,\n ConfirmationModalService,\n ReactInjector,\n ServerGroupWarningMessageService,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { CloudFoundryServerGroupCommandBuilder } from '../configure';\nimport { CloudFoundryCreateServerGroupModal } from '../configure/wizard/CreateServerGroupModal';\nimport type { ICloudFoundryServerGroup } from '../../domain';\nimport { CloudFoundryMapLoadBalancersModal } from './mapLoadBalancers/CloudFoundryMapLoadBalancersModal';\nimport { CloudFoundryUnmapLoadBalancersModal } from './mapLoadBalancers/CloudFoundryUnmapLoadBalancersModal';\nimport { CloudFoundryResizeServerGroupModal } from './resize/CloudFoundryResizeServerGroupModal';\nimport { CloudFoundryRollbackServerGroupModal } from './rollback/CloudFoundryRollbackServerGroupModal';\n\nexport interface ICloudFoundryServerGroupActionsProps extends IServerGroupActionsProps {\n serverGroup: ICloudFoundryServerGroup;\n}\n\nexport interface ICloudFoundryServerGroupJob extends IServerGroupJob {\n serverGroupId: string;\n}\n\nexport class CloudFoundryServerGroupActions extends React.Component<ICloudFoundryServerGroupActionsProps> {\n private isEnableLocked(): boolean {\n if (this.props.serverGroup.isDisabled) {\n const resizeTasks = (this.props.serverGroup.runningTasks || []).filter((task) =>\n get(task, 'execution.stages', []).some((stage) => stage.type === 'resizeServerGroup'),\n );\n if (resizeTasks.length) {\n return true;\n }\n }\n return false;\n }\n\n private isRollbackEnabled(): boolean {\n const { app, serverGroup } = this.props;\n\n if (!serverGroup.isDisabled) {\n // enabled server groups are always a candidate for rollback\n return true;\n }\n\n // if the server group selected for rollback is disabled, ensure that at least one enabled server group exists\n return app\n .getDataSource('serverGroups')\n .data.some(\n (g: ICloudFoundryServerGroup) =>\n g.cluster === serverGroup.cluster &&\n g.region === serverGroup.region &&\n g.account === serverGroup.account &&\n !g.isDisabled,\n );\n }\n\n private hasDisabledInstances(): boolean {\n // server group may have disabled instances (out of service) but NOT itself be disabled\n return this.props.serverGroup.isDisabled || get(this.props.serverGroup, 'instanceCounts.outOfService', 0) > 0;\n }\n\n private destroyServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if (ReactInjector.$state.includes('**.serverGroup', stateParams)) {\n ReactInjector.$state.go('^');\n }\n },\n };\n\n const submitMethod = (params: ICloudFoundryServerGroupJob) => {\n params.serverGroupName = serverGroup.name;\n return ReactInjector.serverGroupWriter.destroyServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n interestingHealthProviderNames: undefined as string[],\n submitMethod,\n askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Cloud Foundry',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Cloud Foundry'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n private disableServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params: ICloudFoundryServerGroupJob) => {\n params.serverGroupName = serverGroup.name;\n return ReactInjector.serverGroupWriter.disableServerGroup(serverGroup, app.name, params);\n };\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n interestingHealthProviderNames: undefined as string[],\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Cloud Foundry',\n submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Cloud Foundry'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n private enableServerGroup = (): void => {\n if (!this.isRollbackEnabled()) {\n this.showEnableServerGroupModal();\n return;\n }\n\n const confirmationModalParams = {\n header: 'Rolling back?',\n body: `Spinnaker provides an orchestrated rollback feature to carefully restore a different version of this\n server group. Do you want to use the orchestrated rollback?`,\n buttonText: `Yes, let's start the orchestrated rollback`,\n cancelButtonText: 'No, I just want to enable the server group',\n };\n\n ConfirmationModalService.confirm(confirmationModalParams)\n .then(() => this.rollbackServerGroup())\n .catch(({ source }) => {\n // don't show the enable modal if the user cancels with the header button\n if (source === 'footer') {\n this.showEnableServerGroupModal();\n }\n });\n };\n\n private showEnableServerGroupModal(): void {\n const { app, serverGroup } = this.props;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params: ICloudFoundryServerGroupJob) => {\n params.serverGroupName = serverGroup.name;\n return ReactInjector.serverGroupWriter.enableServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n interestingHealthProviderNames: undefined as string[],\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Cloud Foundry',\n submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Cloud Foundry'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n }\n\n private rollbackServerGroup = (): void => {\n const { app } = this.props;\n\n let serverGroup: ICloudFoundryServerGroup = this.props.serverGroup;\n let previousServerGroup: ICloudFoundryServerGroup;\n let allServerGroups = (app.serverGroups.data as ICloudFoundryServerGroup[]).filter(\n (g) => g.cluster === serverGroup.cluster && g.region === serverGroup.region && g.account === serverGroup.account,\n );\n\n if (serverGroup.isDisabled) {\n // if the selected server group is disabled, it represents the server group that should be _rolled back to_\n previousServerGroup = serverGroup;\n\n /*\n * Find an existing server group to rollback, prefer the largest enabled server group.\n *\n * isRollbackEnabled() ensures that at least one enabled server group exists.\n */\n serverGroup = orderBy(\n allServerGroups.filter((g: ICloudFoundryServerGroup) => g.name !== previousServerGroup.name && !g.isDisabled),\n ['instanceCounts.total', 'createdTime'],\n ['desc', 'desc'],\n )[0] as ICloudFoundryServerGroup;\n }\n\n // the set of all server groups should not include the server group selected for rollback\n allServerGroups = allServerGroups.filter((g) => g.name !== serverGroup.name);\n\n if (allServerGroups.length === 1 && !previousServerGroup) {\n // if there is only one other server group, default to it being the rollback target\n previousServerGroup = allServerGroups[0];\n }\n const cluster = find(app.clusters, {\n name: serverGroup.cluster,\n account: serverGroup.account,\n serverGroups: [],\n });\n const disabledServerGroups: ICloudFoundryServerGroup[] = filter(cluster.serverGroups, {\n isDisabled: true,\n region: serverGroup.region,\n }) as ICloudFoundryServerGroup[];\n\n CloudFoundryRollbackServerGroupModal.show({\n serverGroup,\n previousServerGroup,\n disabledServerGroups: disabledServerGroups.sort((a, b) => b.name.localeCompare(a.name)),\n allServerGroups: allServerGroups.sort((a, b) => b.name.localeCompare(a.name)),\n application: app,\n });\n };\n\n private resizeServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n CloudFoundryResizeServerGroupModal.show({ application: app, serverGroup });\n };\n\n private mapServerGroupToLoadBalancers = (): void => {\n const { app, serverGroup } = this.props;\n CloudFoundryMapLoadBalancersModal.show({ application: app, serverGroup });\n };\n\n private unmapServerGroupFromLoadBalancers = (): void => {\n const { app, serverGroup } = this.props;\n CloudFoundryUnmapLoadBalancersModal.show({ application: app, serverGroup });\n };\n\n private cloneServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n const command = CloudFoundryServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup);\n const title = `Clone ${serverGroup.name}`;\n CloudFoundryCreateServerGroupModal.show({\n application: app,\n command,\n isSourceConstant: true,\n serverGroup,\n title,\n });\n };\n\n public render(): JSX.Element {\n const { app, serverGroup } = this.props;\n const { loadBalancers } = serverGroup;\n const showEntityTags = SETTINGS.feature && SETTINGS.feature.entityTags;\n const entityTagTargets: IOwnerOption[] = ClusterTargetBuilder.buildClusterTargets(serverGroup);\n\n return (\n <Dropdown className=\"dropdown\" id=\"server-group-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">Server Group Actions</Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n {this.isRollbackEnabled() && (\n <li>\n <a className=\"clickable\" onClick={this.rollbackServerGroup}>\n Rollback\n </a>\n </li>\n )}\n {this.isRollbackEnabled() && <li role=\"presentation\" className=\"divider\" />}\n <li>\n <a className=\"clickable\" onClick={this.resizeServerGroup}>\n Resize\n </a>\n </li>\n {!serverGroup.isDisabled && (\n <li>\n <a className=\"clickable\" onClick={this.disableServerGroup}>\n Disable\n </a>\n </li>\n )}\n {this.hasDisabledInstances() && !this.isEnableLocked() && (\n <li>\n <a className=\"clickable\" onClick={this.enableServerGroup}>\n Enable\n </a>\n </li>\n )}\n {this.isEnableLocked() && (\n <li className=\"disabled\">\n <Tooltip value=\"Cannot enable this server group until resize operation completes\" placement=\"left\">\n <a>\n <span className=\"small glyphicon glyphicon-lock\" /> Enable\n </a>\n </Tooltip>\n </li>\n )}\n <li>\n <a className=\"clickable\" onClick={this.destroyServerGroup}>\n Destroy\n </a>\n </li>\n <li>\n <a className=\"clickable\" onClick={this.cloneServerGroup}>\n Clone\n </a>\n </li>\n {!serverGroup.isDisabled && (\n <li>\n <a className=\"clickable\" onClick={this.mapServerGroupToLoadBalancers}>\n Map Load Balancer\n </a>\n </li>\n )}\n {!serverGroup.isDisabled && loadBalancers && !!loadBalancers.length && (\n <li>\n <a className=\"clickable\" onClick={this.unmapServerGroupFromLoadBalancers}>\n Unmap Load Balancer\n </a>\n </li>\n )}\n {showEntityTags && (\n <AddEntityTagLinks\n component={serverGroup}\n application={app}\n entityType=\"serverGroup\"\n ownerOptions={entityTagTargets}\n onUpdate={() => app.serverGroups.refresh()}\n />\n )}\n </Dropdown.Menu>\n </Dropdown>\n );\n }\n}\n","import { isEmpty } from 'lodash';\nimport { Observable } from 'rxjs';\n\nimport type { IServerGroupDetailsProps } from '@spinnaker/core';\nimport { ServerGroupReader } from '@spinnaker/core';\nimport type { ICloudFoundryLoadBalancer, ICloudFoundryServerGroup } from '../../domain';\n\nfunction extractServerGroupSummary(props: IServerGroupDetailsProps): PromiseLike<ICloudFoundryServerGroup> {\n const { app, serverGroup } = props;\n return app.ready().then(() => {\n let summary: ICloudFoundryServerGroup = app.serverGroups.data.find((toCheck: ICloudFoundryServerGroup) => {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some((loadBalancer: ICloudFoundryLoadBalancer) => {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some((possibleServerGroup) => {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n return false;\n });\n }\n return false;\n });\n }\n return summary;\n });\n}\n\nexport function cfServerGroupDetailsGetter(\n props: IServerGroupDetailsProps,\n autoClose: () => void,\n): Observable<ICloudFoundryServerGroup> {\n const { app, serverGroup: serverGroupInfo } = props;\n return new Observable<ICloudFoundryServerGroup>((observer) => {\n extractServerGroupSummary(props).then((summary) => {\n ServerGroupReader.getServerGroup(\n app.name,\n serverGroupInfo.accountId,\n serverGroupInfo.region,\n serverGroupInfo.name,\n ).then((serverGroup: ICloudFoundryServerGroup) => {\n // it's possible the summary was not found because the clusters are still loading\n Object.assign(serverGroup, summary, { account: serverGroupInfo.accountId });\n\n if (!isEmpty(serverGroup)) {\n observer.next(serverGroup);\n } else {\n autoClose();\n }\n }, autoClose);\n }, autoClose);\n });\n}\n","import { CloudProviderRegistry } from '@spinnaker/core';\n\nimport './common/applicationName.validator';\nimport './help/cloudfoundry.help';\nimport { CloudFoundryInstanceDetails } from './instance/details';\nimport {\n CloudFoundryLoadBalancerDetails,\n CloudFoundryLoadBalancerTransformer,\n CloudFoundryMapLoadBalancerModal,\n} from './loadBalancer';\nimport cloudFoundryLogo from './logo/cf.logo.svg';\nimport './pipeline/config/validation/cfTargetImpedance.validator';\nimport './pipeline/config/validation/instanceSize.validator';\nimport './pipeline/config/validation/requiredRoutes.validator';\nimport './pipeline/stages/bakeCloudFoundryManifest/bakeCloudFoundryManifestStage';\nimport './pipeline/stages/cloneServerGroup/cloudFoundryCloneServerGroupStage.module';\nimport './pipeline/stages/createServiceBindings/cloudFoundryCreateServiceBindingsStage';\nimport './pipeline/stages/createServiceKey/cloudFoundryCreateServiceKeyStage.module';\nimport './pipeline/stages/deleteServiceBindings/cloudFoundryDeleteServiceBindingsStage';\nimport './pipeline/stages/deleteServiceKey/cloudFoundryDeleteServiceKeyStage.module';\nimport './pipeline/stages/deployService/cloudFoundryDeployServiceStage.module';\nimport './pipeline/stages/destroyAsg/cloudFoundryDestroyAsgStage.module';\nimport './pipeline/stages/destroyService/cloudFoundryDestroyServiceStage.module';\nimport './pipeline/stages/disableAsg/cloudFoundryDisableAsgStage.module';\nimport './pipeline/stages/enableAsg/cloudFoundryEnableAsgStage.module';\nimport './pipeline/stages/mapLoadBalancers/cloudFoundryMapLoadBalancersStage.module';\nimport './pipeline/stages/resizeAsg/cloudFoundryResizeAsgStage.module';\nimport './pipeline/stages/rollbackCluster/cloudFoundryRollbackClusterStage.module';\nimport './pipeline/stages/runJob/cloudFoundryRunJob.module';\nimport './pipeline/stages/shareService/cloudFoundryShareServiceStage.module';\nimport './pipeline/stages/unmapLoadBalancers/cloudFoundryUnmapLoadBalancersStage.module';\nimport './pipeline/stages/unshareService/cloudFoundryUnshareServiceStage.module';\nimport {\n ApplicationManagerSection,\n BoundServicesSection,\n BuildSection,\n cfServerGroupDetailsGetter,\n CloudFoundryCreateServerGroupModal,\n CloudFoundryServerGroupActions,\n CloudFoundryServerGroupCommandBuilderShim,\n CloudFoundryServerGroupTransformer,\n EnvironmentVariablesSection,\n HealthCheckSection,\n MetricsSection,\n PackageSection,\n ServerGroupInformationSection,\n ServerGroupSizingSection,\n} from './serverGroup';\n\nimport './logo/cf.logo.less';\n\nCloudProviderRegistry.registerProvider('cloudfoundry', {\n name: 'Cloud Foundry',\n logo: {\n path: cloudFoundryLogo,\n },\n loadBalancer: {\n transformer: CloudFoundryLoadBalancerTransformer,\n details: CloudFoundryLoadBalancerDetails,\n CreateLoadBalancerModal: CloudFoundryMapLoadBalancerModal,\n },\n serverGroup: {\n skipUpstreamStageCheck: true,\n transformer: CloudFoundryServerGroupTransformer,\n detailsActions: CloudFoundryServerGroupActions,\n detailsGetter: cfServerGroupDetailsGetter,\n detailsSections: [\n ServerGroupInformationSection,\n ApplicationManagerSection,\n MetricsSection,\n ServerGroupSizingSection,\n HealthCheckSection,\n BuildSection,\n PackageSection,\n BoundServicesSection,\n EnvironmentVariablesSection,\n ],\n CloneServerGroupModal: CloudFoundryCreateServerGroupModal,\n commandBuilder: CloudFoundryServerGroupCommandBuilderShim,\n scalingActivitiesEnabled: false, // FIXME enable?\n },\n instance: {\n details: CloudFoundryInstanceDetails,\n },\n});\n","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20width%3D%22300px%22%20height%3D%22300px%22%20viewBox%3D%220%200%20300%20300%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%20%20%20%20%20%20%20%20%3Ctitle%3Ecf_logo%3C%2Ftitle%3E%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%20%20%20%20%3Cdefs%3E%3C%2Fdefs%3E%20%20%20%20%3Cg%20id%3D%22cf_logo%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M178.263372%2C122.718681%20C186.913513%2C115.731062%20192.264847%2C105.825834%20192.16919%2C94.8631089%20C191.983342%2C73.9653286%20172.094852%2C57.1484045%20147.743272%2C57.1484045%20C123.391692%2C57.1484045%20103.497736%2C73.9653286%20103.317354%2C94.8631089%20C103.218964%2C105.825834%20108.570299%2C115.728351%20117.220439%2C122.71597%20C127.925842%2C131.365758%20136.693504%2C148.855142%20137.210052%2C167.952465%20C137.781262%2C189.145802%20136.321807%2C213.674325%20135.425363%2C226.155508%20C123.984767%2C227.766159%20115.944099%2C231.559592%20115.944099%2C235.982102%20C115.944099%2C241.866127%20130.180618%2C248.650381%20147.743272%2C248.650381%20C165.303194%2C248.650381%20179.539712%2C241.866127%20179.539712%2C235.982102%20C179.539712%2C231.559592%20171.501778%2C227.766159%20160.058448%2C226.155508%20C159.162004%2C213.674325%20157.702549%2C189.145802%20158.273759%2C167.952465%20C158.790308%2C148.855142%20167.557969%2C131.365758%20178.263372%2C122.718681%22%20id%3D%22Fill-1%22%20fill%3D%22%231B1A19%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M234.330842%2C245.57087%20C235.853157%2C244.936371%20237.629647%2C244.423892%20239.594718%2C244.046988%20C241.423137%2C243.645682%20243.462001%2C243.390798%20245.68398%2C243.317586%20C245.68398%2C243.317586%20245.58559%2C242.63428%20245.448937%2C241.62559%20C245.386076%2C240.625035%20244.910523%2C239.299095%20244.454102%2C237.984002%20C244.224525%2C237.335946%20243.989482%2C236.693313%20243.779036%2C236.094064%20C243.511196%2C235.500238%20243.16683%2C234.952509%20242.920854%2C234.477991%20C242.404306%2C233.550647%20242.05994%2C232.929706%20242.05994%2C232.929706%20C239.865291%2C232.577206%20237.790898%2C232.089131%20235.779364%2C231.516997%20C233.729568%2C230.944864%20231.802759%2C230.288673%20230.108261%2C229.580963%20C226.894181%2C228.179101%20223.874147%2C226.609124%20222.278039%2C224.857474%20C220.351231%2C223.189881%20219.995933%2C221.519577%20220.058793%2C220.011965%20C220.168116%2C219.269005%20220.512482%2C218.550449%20221.102823%2C217.880701%20C221.641236%2C217.221798%20222.354565%2C216.627973%20223.382196%2C216.115493%20C223.382196%2C216.115493%20222.60874%2C215.689783%20221.479985%2C215.057995%20C220.903309%2C214.751592%20220.280171%2C214.388247%20219.542245%2C214.008632%20C218.768788%2C213.642576%20217.957069%2C213.254826%20217.148083%2C212.875212%20C215.551975%2C212.121406%20213.955866%2C211.364888%20212.619399%2C210.868678%20C211.343059%2C210.356198%20210.498543%2C210.014545%20210.498543%2C210.014545%20C208.948897%2C210.220622%20207.270798%2C210.331794%20205.562634%2C210.356198%20C203.794343%2C210.391448%20201.990522%2C210.342641%20200.23863%2C210.212487%20C196.789506%2C209.91693%20193.280255%2C209.442412%20190.246556%2C208.553029%20C188.675046%2C208.151722%20187.338578%2C207.677204%20186.171561%2C207.153878%20C185.004544%2C206.641399%20183.96598%2C206.131631%20183.129663%2C205.559497%20C181.533555%2C204.401673%20180.443064%2C203.233003%20180.451263%2C202.053486%20C180.451263%2C202.053486%20179.483759%2C201.893506%20178.037969%2C201.649468%20C176.540252%2C201.418987%20173.348036%2C200.993277%20171.322837%2C200.724835%20C171.287307%2C201.063777%20171.065929%2C201.383738%20170.992136%2C201.942313%20L170.475588%2C204.401673%20C169.420626%2C209.320393%20172.293074%2C214.312324%20177.16339%2C215.714186%20C189.095937%2C219.157832%20198.112308%2C224.83307%20200.716916%2C231.796285%20C205.980792%2C245.885407%20183.86759%2C259.657281%20150.239999%2C259.657281%20C116.598742%2C259.657281%2094.4828068%2C245.885407%2099.7357514%2C231.796285%20C102.277499%2C225.003896%20110.941304%2C219.439832%20122.442028%2C215.96907%20C127.533722%2C214.434343%20130.553755%2C209.236335%20129.460531%2C204.073578%20L128.749935%2C200.724835%20C127.410734%2C200.882104%20125.852889%2C201.077334%20124.256781%2C201.272565%20C122.258913%2C201.492199%20120.353969%2C201.84741%20118.894514%2C202.07789%20C117.435059%2C202.305659%20116.45389%2C202.479197%20116.45389%2C202.479197%20C116.55228%2C203.623463%20115.729629%2C204.911441%20114.158118%2C206.023169%20C113.335467%2C206.581745%20112.42809%2C207.164725%20111.310268%2C207.690762%20C110.192446%2C208.224934%20108.817715%2C208.675048%20107.382858%2C209.149566%20C105.896073%2C209.613238%20104.24257%2C209.954891%20102.583602%2C210.245025%20C100.951964%2C210.562275%2099.2082705%2C210.792755%2097.4181151%2C210.939178%20C93.8460034%2C211.221177%2090.2629595%2C211.294388%2087.0106161%2C210.893082%20C87.0106161%2C210.893082%2086.7892381%2C210.977139%2086.4202748%2C211.123562%20C86.0649768%2C211.280831%2085.4855677%2C211.486907%2084.9116247%2C211.768907%20C83.7200098%2C212.330194%2082.1129695%2C213.094846%2080.4922639%2C213.86221%20C78.8961559%2C214.653977%2077.4749638%2C215.50811%2076.3216118%2C216.139897%20C75.7422027%2C216.454435%2075.2639169%2C216.725588%2074.9332164%2C216.907261%20C74.6271135%2C217.113337%2074.4549306%2C217.221798%2074.4549306%2C217.221798%20C76.7015073%2C218.257604%2077.9532496%2C219.659466%2078.1964921%2C221.145386%20C78.7622359%2C222.715363%2077.9887794%2C224.344994%2076.5293244%2C226.123759%20C75.6848084%2C227.0267%2074.5423886%2C227.878121%2073.3753712%2C228.705138%20C72.1372943%2C229.543002%2070.5876483%2C230.334769%2068.8576202%2C231.091287%20C65.6189421%2C232.612456%2061.4209593%2C233.951953%2056.9168736%2C234.757278%20C56.9168736%2C234.757278%2056.5260458%2C235.391777%2056.228142%2C236.338102%20C55.8865093%2C237.303407%2055.4328211%2C238.604943%2054.9654675%2C239.933594%20C54.7686871%2C241.245976%2054.585572%2C242.59903%2054.4379866%2C243.634836%20C54.2439392%2C244.678776%2054.3395964%2C245.35937%2054.3395964%2C245.35937%20C58.9912674%2C245.410889%2063.1291229%2C246.189099%2066.2202157%2C247.420135%20C69.8169249%2C248.602363%2071.9897089%2C250.364859%2073.6705419%2C252.520527%20C74.9960768%2C254.847022%2075.5235577%2C257.281978%2074.3428751%2C260.093837%20C73.5202235%2C262.835197%2071.2627145%2C265.891094%2067.5840135%2C268.664991%20C67.5840135%2C268.664991%2067.7917261%2C268.849375%2068.1470242%2C269.153067%20C68.5515173%2C269.445913%2069.1418586%2C269.860777%2069.8524547%2C270.359699%20C71.3146427%2C271.357543%2073.1539932%2C272.770251%2075.315845%2C274.047383%20C77.5979516%2C275.291976%2079.9155879%2C276.544704%2081.6729466%2C277.507298%20C82.5420602%2C277.995374%2083.4275722%2C278.299066%2083.9796507%2C278.55395%20C84.5563267%2C278.808834%2084.8870272%2C278.941699%2084.8870272%2C278.941699%20C90.0771113%2C276.739935%2095.6498242%2C275.606514%20101.222537%2C275.023535%20C104.007527%2C274.727978%20106.743322%2C274.657478%20109.358862%2C274.828304%20C112.020864%2C274.96117%20114.734794%2C275.169958%20117.273808%2C275.763783%20C119.790958%2C276.422686%20122.245248%2C277.043626%20124.393434%2C277.995374%20C126.57715%2C278.930853%20128.517624%2C280.159177%20130.354242%2C281.341405%20C134.024744%2C283.825169%20136.847996%2C287.333892%20138.064209%2C291.021576%20C138.064209%2C291.021576%20139.952755%2C291.094787%20142.78694%2C291.20596%20C145.63479%2C291.27646%20149.428279%2C291.534056%20153.208104%2C291.338825%20C156.990661%2C291.216806%20160.778685%2C291.154441%20163.591005%2C290.972768%20C166.365063%2C290.704327%20168.218079%2C290.536212%20168.218079%2C290.536212%20C168.608907%2C288.611024%20169.469821%2C286.797009%20170.647771%2C285.151108%20C171.22718%2C284.348495%20171.888581%2C283.581131%20172.623774%2C282.865287%20C173.33437%2C282.122327%20174.083229%2C281.365809%20174.919546%2C280.698772%20C176.564849%2C279.359275%20178.43973%2C278.201451%20180.563318%2C277.274107%20C182.624047%2C276.314224%20184.835094%2C275.411284%20187.387774%2C274.841862%20C189.989648%2C274.329382%20192.430272%2C273.819614%20195.081342%2C273.63523%20C197.696882%2C273.426442%20200.544733%2C273.548461%20203.182137%2C273.659634%20C208.571735%2C273.949768%20214.546208%2C275.180804%20219.739025%2C277.127684%20C219.739025%2C277.127684%20220.889644%2C276.495897%20222.60874%2C275.544149%20C224.254043%2C274.57342%20226.623608%2C273.415596%20228.43836%2C271.978484%20C230.294109%2C270.614583%20232.245515%2C269.323894%20233.420732%2C268.252838%20C234.574084%2C267.181783%20235.325676%2C266.476785%20235.325676%2C266.476785%20C231.461127%2C263.833041%20229.236414%2C260.996778%20227.815222%2C258.195765%20C227.151088%2C256.845421%20226.967973%2C255.576424%20226.92971%2C254.323696%20C226.83132%2C253.057411%20227.101893%2C251.877894%20227.815222%2C250.779723%20C228.820989%2C248.539998%20231.398266%2C246.883251%20234.330842%2C245.57087%22%20id%3D%22Fill-2%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M118.447097%2C177.453406%20C118.447097%2C177.453406%20123.443134%2C158.68689%20101.750823%2C134.472906%20L101.026562%2C133.724523%20C91.8872032%2C122.97872%2086.8529035%2C109.342424%2086.8529035%2C95.3265125%20C86.8529035%2C62.4247782%20113.863752%2C35.6538187%20147.067719%2C35.6538187%20L148.464314%2C35.6538187%20C181.671013%2C35.6538187%20208.684595%2C62.4247782%20208.684595%2C95.3265125%20C208.684595%2C109.342424%20203.650296%2C122.97872%20194.519137%2C133.716388%20C194.412547%2C133.835696%20194.166572%2C134.087868%20193.794875%2C134.456637%20C174.534989%2C153.591921%20177.084936%2C177.453406%20177.084936%2C177.453406%20C212.256707%2C165.425049%20236.017946%2C132.612795%20236.220192%2C95.8091653%20C236.471634%2C49.7944603%20199.034155%2C10.5748554%20152.774352%2C8.37309111%20C152.194943%2C8.34597578%20151.623733%2C8.33241812%20151.052523%2C8.33241812%20C150.352859%2C8.33241812%20147.750985%2C8.38393723%20147.761917%2C8.38393723%20C147.688124%2C8.38393723%20145.181907%2C8.33241812%20144.484976%2C8.33241812%20C143.913766%2C8.33241812%20143.339823%2C8.34597578%20142.771346%2C8.37309111%20C96.5006113%2C10.5748554%2059.063132%2C49.7944603%2059.3173068%2C95.8091653%20C59.5140872%2C132.612795%2083.2780588%2C165.425049%20118.447097%2C177.453406%22%20id%3D%22Fill-3%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%20%20%20%20%3C%2Fg%3E%3C%2Fsvg%3E\"","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface ICloudFoundryProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n };\n}\n\nexport const CloudFoundryProviderSettings: ICloudFoundryProviderSettings = (SETTINGS.providers\n .cloudfoundry as ICloudFoundryProviderSettings) || { defaults: {} };\nif (CloudFoundryProviderSettings) {\n CloudFoundryProviderSettings.resetToOriginal = SETTINGS.resetProvider('cloudfoundry');\n}\n"],"names":["_CloudFoundryApplicationNameValidator","validateSpecialCharacters","name","_warnings","errors","test","push","validateLength","length","MAX_RESOURCE_NAME_LENGTH","validate","warnings","CloudFoundryApplicationNameValidator","ApplicationNameValidator","registerValidator","helpContents","Object","keys","forEach","key","HelpContentsRegistry","register","CloudFoundryInstanceActions","React","Component","constructor","super","arguments","this","terminateInstance","application","instance","props","instanceClone","cloneDeep","placement","id","taskMonitor","title","onTaskComplete","ReactInjector","$state","includes","instanceId","go","ConfirmationModalService","confirm","header","buttonText","account","taskMonitorConfig","submitMethod","InstanceWriter","cloudProvider","render","className","Dropdown","createElement","Toggle","Menu","onClick","CloudFoundryInstanceDetailsSection","CollapsibleSection","heading","defaultExpanded","timestamp","launchTime","AccountTag","region","healthState","details","CloudFoundryInstanceDetails","state","loading","instanceIdNotFound","componentDidMount","app","ready","then","retrieveInstance","instanceFromParams","instanceManager","flattenDeep","getDataSource","data","map","loadBalancer","serverGroups","find","dataSource","instances","some","possibleMatch","recentHistoryExtraData","category","serverGroup","RecentHistoryService","addExtraDataToLatest","InstanceReader","getInstanceDetails","instanceDetails","setState","CloseButton","UISref","to","Spinner","size","__decorateClass","UIRouterContext","CloudFoundryLoadBalancerUpsertDescription","credentials","loadBalancerName","space","CloudFoundryLoadBalancerTransformer","$q","normalizeLoadBalancer","provider","type","instanceCounts","buildInstanceCounts","detachedInstances","concat","transformInstance","activeServerGroups","filter","sg","isDisabled","chain","flatten","value","resolve","constructNewCloudFoundryLoadBalancerTemplate","host","path","port","domain","routes","convertLoadBalancerForEditing","upToDateLoadBalancer","candidate","convertLoadBalancerToUpsertDescription","reduce","acc","has","camelCase","health","up","down","outOfService","succeeded","failed","starting","unknown","_a","loadBalancers","$inject","CloudFoundryLoadBalancerActions","deleteLoadBalancer","loadBalancerDeleteCommand","regions","LoadBalancerWriter","CloudFoundryLoadBalancerDetailsSection","Fragment","organization","index","params","accountId","CloudFoundryLoadBalancerStatusSection","HealthCounts","container","CloudFoundryLoadBalancerLinksSection","href","CloudFoundryLoadBalancerDetails","refreshListenerUnsubscribe","extractLoadBalancer","componentWillUnmount","onRefresh","loadBalancerNotFound","FormikConfigField","label","helpKey","children","HelpField","Buildpacks","fieldName","onChange","FieldArray","arrayHelpers","serverGroupCommand","form","values","buildpacks","getIn","_","FormikFormField","input","TextInput","required","remove","colSpan","EnvironmentVariables","environmentVariables","envPath","HealthCheck","HEALTH_CHECK_TYPE_OPTIONS","healthCheckTypeFieldName","healthCheckType","healthCheckHttpEndpointFieldName","onHealthCheckTypeChange","onHealthCheckHttpEndpointChange","RadioButtonInput","inline","options","InstanceParameters","diskQuotaFieldName","instancesFieldName","memoryFieldName","onDiskQuotaChange","onInstancesChange","onMemoryChange","Routes","isRequired","singleRouteOnly","hidden","Services","services","AccountRegionClusterSelector","destroy$","Subject","setRegionList","accountFilter","observableFrom","pipe","takeUntil","subscribe","availableRegions","AppListExtractor","getRegions","sort","setClusterList","clusterFilter","clusterFilterForCredentialsAndRegion","clusters","getClusters","clusterField","component","onAccountUpdate","option","onComponentUpdate","onRegionsUpdate","o","onRegionUpdate","onClusterUpdate","clusterName","filterByCluster","monikerClusterNameFilter","clusterMoniker","first","uniq","getMonikers","moniker","isNil","sequence","componentName","isSingleRegion","next","accounts","StageConfigField","Select","clearable","r","multi","Creatable","c","FormikAccountRegionClusterSelector","accountChanged","regionChanged","formik","credentialsField","get","ReactSelectInput","inputClassName","stringOptions","CloudFoundryAsgStageConfig","targetUpdated","target","updateStageField","componentUpdated","stage","cluster","AccountService","listAccounts","pipeline","TargetSelect","NgReact","strategy","model","StageConstants","TARGET_LIST","CloudFoundryLoadBalancersExecutionDetails","context","loadBalancerNames","serverGroupName","ExecutionDetailsSection","current","join","StageFailureMessage","message","failureMessage","StageExecutionLogs","CloudFoundryLoadBalancersStageConfig","formikRef","createRef","initialValues","SpinFormik","ref","onSubmit","CloudFoundryServiceExecutionDetails","serviceInstanceName","CloudFoundryServiceKeyExecutionDetails","serviceKeyName","_CloudFoundryMapLoadBalancerModal","submit","_b","selectedValues","coreServerGroup","serverGroupWriter","mapLoadBalancers","close","args","dismissModal","apply","accountRegionClusterUpdated","deferred","defer","promise","$uibModalInstanceEmulation","result","dismiss","assign","TaskMonitor","modalInstance","modalInstanceEmulation","refresh","rawAccounts","show","ReactModal","dialogClassName","TaskMonitorWrapper","monitor","ModalClose","Modal","Header","Title","Body","Form","ModalFooter","disabled","isValid","CloudFoundryMapLoadBalancerModal","defaultProps","closeModal","noop","PipelineConfigValidator","validator","_config","stagesToTest","PipelineConfigService","getAllUpstreamDependencies","allRegionsFound","regionFound","toTest","NameUtils","getClusterName","stack","freeFormDetails","validationConfig","passesValidation","validationMessage","fieldIsValid","fieldLabel","printableFieldLabel","hasMin","min","hasMax","max","config","upperFirst","fieldExists","field","_pipeline","routeErrors","route","exec","err","_BakeCloudFoundryManifestConfigForm","onTemplateArtifactEdited","artifact","setFieldValue","artifactAccount","onTemplateArtifactSelected","addInputArtifact","newInputArtifacts","inputArtifacts","removeInputArtifact","splice","getInputArtifact","outputNameChange","outputName","expectedArtifacts","matchArtifact","fieldColumns","e","StageArtifactSelectorDelegate","excludedArtifactTypePatterns","excludedArtifactTypes","expectedArtifactId","onArtifactEdited","onExpectedArtifactSelected","slice","a","BakeCloudFoundryManifestConfigForm","validateBakeCloudFoundryManifestStage","formValidator","FormValidator","withValidators","artifacts","validateProducedArtifacts","validateInputArtifacts","validateForm","excludeAllTypesExcept","ArtifactTypePatterns","BITBUCKET_FILE","CUSTOM_OBJECT","EMBEDDED_BASE64","GCS_OBJECT","GITHUB_FILE","GITLAB_FILE","S3_OBJECT","HTTP_FILE","ORACLE_OBJECT","BakeCloudFoundryManifestDetailsTab","bakedArtifacts","i","ManifestYaml","linkName","manifestText","decodeUnicodeBase64","reference","modalTitle","Overridable","Registry","registerStage","description","updateStage","stageWithDefaults","useMemo","FormikStageConfig","producesArtifacts","executionDetailsSections","ExecutionDetailsTasks","ExecutionArtifactTab","artifactExtractor","fields","ExpectedArtifactService","accumulateArtifacts","artifactRemover","artifactId","ArtifactReferenceService","removeArtifactFromFields","artifactDoesNotMatch","validateFn","CloudFoundryServerGroupCommandBuilder","envVarsFromObject","someObject","envVars","property","hasOwnProperty","envVar","getSubmitButtonLabel","mode","buildNewServerGroupCommand","defaults","viewState","submitButtonLabel","selectedProvider","startApplication","buildServerGroupCommandFromExisting","command","manifest","direct","memory","diskQuota","droplet","item","environment","env","serviceInstances","serviceInstance","detail","source","asgName","buildNewServerGroupCommandForPipeline","requiresTemplateSelection","buildServerGroupCommandFromPipeline","originalCluster","applicationArtifact","delayBeforeDisableSec","maxRemainingAsgs","rollback","targetPercentages","delayBeforeScaleDownSec","buildCloneServerGroupCommandFromPipeline","capacity","targetCluster","CloudFoundryServerGroupCommandBuilderShim","when","ServerGroupTemplateSelection","templateSelectionText","copied","notCopied","additionalCopyText","onDismiss","onTemplateSelected","DeployInitializer","CloudFoundryServerGroupArtifactSettings","KUBERNETES","FRONT50_PIPELINE_TEMPLATE","expectedArtifact","onArtifactChanged","LABEL","_values","StageArtifactSelector","renderLabel","CloudFoundryServerGroupConstantArtifactSettings","readOnly","AdditionalFields","handlePercentChange","percentages","set","forceUpdate","onDelete","addPercent","handleChange","checked","onFailure","content","style","width","placeholder","percentage","CloudFoundryDeploymentStrategySelector","strategies","additionalFields","AdditionalFieldsComponent","CoreRedBlackAdditionalFields","initializationMethod","defaultsDeep","scaleDown","AdditionalRollingRedBlackFields","currentStrategy","strategyChanged","selectStrategy","strategyOptionRenderer","Markdown","tag","onStrategyChange","oldStrategy","s","newStrategy","unset","onFieldChange","hasAdditionalFields","Boolean","paddingLeft","valueKey","optionRenderer","valueRenderer","marginTop","float","styleInject","css","insertAt","document","head","getElementsByTagName","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","CloudFoundryServerGroupBasicSettings","updateRegionList","getRegionsForAccount","onStrategyFieldChange","help","CheckboxInput","match","CloudFoundryServerGroupCloneSettings","t","val","CloudFoundryServerGroupConfigurationSettings","defaultDirectManifest","DOCKER_IMAGE","manifestSourceUpdated","capacityUpdated","getArtifactInput","getDirectInput","m","_props","isStorageSize","existingKeys","envErrors","myErrors","_CloudFoundryCreateServerGroupModal","templateSelected","initialize","cloneServerGroup","isClone","isSourceConstant","WizardModal","nextIdx","wizard","WizardPage","order","innerRef","CloudFoundryCreateServerGroupModal","CloudFoundryCloneServerGroupStageConfig","handleResult","addCluster","catch","destination","cloneTargets","accountExtractor","configAccountExtractor","provides","validators","_CloudFoundryCreateServiceBindingsStageConfigForm","loadRegions","creds","regionList","b","localeCompare","newServiceBindingRequests","serviceBindingRequests","updatable","restageRequiredUpdated","event","restartRequiredUpdated","updatableBindingUpdated","restageRequired","restartRequired","CloudFoundryCreateServiceBindingsStageConfigForm","validateCloudFoundryCreateServiceBindingsStage","every","req","validateServiceBindingRequests","CloudFoundryCreateServiceKeyStageConfig","clearAndReloadRegions","serviceInstanceNameUpdated","serviceKeyNameUpdated","accountUpdated","regionUpdated","it","preventSave","CloudFoundryDeleteServiceBindingsStageConfigForm","newServiceUnbindingRequests","serviceUnbindingRequests","validateCloudFoundryDeleteServiceBindingsStage","validateServiceUnbindingRequests","CloudFoundryDeleteServiceKeyStageConfig","ServiceTagsInput","newTagUpdated","newTag","addTag","tags","currentTags","trim","newTags","deleteTag","CreateServiceInstanceDirectInput","onServiceChanged","service","serviceUpdated","servicePlan","servicePlanUpdated","parametersUpdated","parameters","tagsUpdated","updatableUpdated","versioned","versionedUpdated","serviceNamesAndPlans","componentDidUpdate","prevProps","loadServices","ServicesReader","getServices","serviceWithPlans","servicePlans","TextAreaInput","CreateUserProvidedInput","syslogDrainUrlUpdated","syslogDrainUrl","routeServiceUrlUpdated","routeServiceUrl","credentialsUpdated","CloudFoundryDeployServiceStageConfig","updates","reloadRegions","serviceManifestSourceUpdated","userProvidedUpdated","userProvided","directInput","manifestInput","directManifest","sourceType","sourceStruct","serviceInput","manifestSource","isJson","JSON","parse","isYaml","safeLoad","fieldContent","supportsCustomTimeout","CloudFoundryDestroyServiceStageConfigForm","removeBindingsUpdated","removeBindings","validateCloudFoundryDestroyServiceStage","CloudFoundryResizeAsgStageConfig","instanceCountUpdated","instanceCount","parseInt","desired","memoryUpdated","diskQuotaUpdated","interestingHealthProviderNames","isNew","attributes","platformHealthOnlyShowOverride","platformHealthOnly","action","stageFieldUpdated","CloudFoundryRollbackClusterStageConfig","waitTimeBetweenRegionsUpdated","time","waitTimeBetweenRegions","componentUpdate","targetHealthyRollbackPercentage","controller","CloudFoundryRunJobStageConfig","jobName","logsUrl","maxLength","SpelText","docLink","CloudFoundryRecentLogsType","CloudFoundryRecentLogsType2","CloudFoundryRecentLogs","logs","showModal","errorMessage","bindAll","canShow","resourceGuid","generateResourceId","logsType","resourceInstanceIndex","APP","open","getConsoleOutput","response","output","exception","onHide","closeButton","valueOf","resourceDisplayName","Footer","Button","RunJobExecutionDetails","taskId","taskName","TASK","CloudFoundryShareServiceExecutionDetails","shareToRegions","restartable","CloudFoundryShareServiceStageConfig","clearAndResetShareToRegionList","shareToRegionsList","shareToRegionsUpdated","CloudFoundryUnshareServiceExecutionDetails","unshareFromRegions","CloudFoundryUnshareServiceStageConfig","unshareFromRegionsUpdated","ServerGroupInformationSection","pipelineId","createdTime","buildpack","version","ApplicationManagerSection","appsManagerUri","MetricsSection","metricsUri","ServerGroupSizingSection","HealthCheckSection","healthCheckHttpEndpoint","PackageSection","sourcePackage","checksum","BuildSection","ciBuild","jobNumber","jobUrl","appArtifact","url","BoundServicesSection","isEmpty","plan","EnvironmentVariablesSection","entries","k","v","CloudFoundryServerGroupTransformer","normalizeServerGroupDetails","normalizeServerGroup","convertServerGroupCommandToDeployConfiguration","base","convertManifestEnv","newEnv","create","_CloudFoundryMapLoadBalancersModal","CloudFoundryMapLoadBalancersModal","_CloudFoundryUnmapLoadBalancersModal","unmapLoadBalancers","CloudFoundryUnmapLoadBalancersModal","_CloudFoundryResizeServerGroupModal","reason","resizeServerGroup","renderDesired","NumberInput","touched","renderQuota","initialValue","TaskReason","CloudFoundryResizeServerGroupModal","_CloudFoundryRollbackServerGroupModal","restoreServerGroupName","rollbackType","rollbackContext","rollbackServerGroupName","rollbackServerGroup","previousServerGroup","allServerGroups","marginBottom","fastField","CloudFoundryRollbackServerGroupModal","CloudFoundryServerGroupActions","destroyServerGroup","stateParams","confirmationModalParams","askForReason","platformHealthType","ServerGroupWarningMessageService","addDestroyWarningMessage","disableServerGroup","addDisableWarningMessage","enableServerGroup","isRollbackEnabled","showEnableServerGroupModal","body","cancelButtonText","g","orderBy","disabledServerGroups","mapServerGroupToLoadBalancers","unmapServerGroupFromLoadBalancers","isEnableLocked","runningTasks","task","hasDisabledInstances","showEntityTags","SETTINGS","feature","entityTags","entityTagTargets","ClusterTargetBuilder","buildClusterTargets","role","Tooltip","AddEntityTagLinks","entityType","ownerOptions","onUpdate","cfServerGroupDetailsGetter","autoClose","serverGroupInfo","Observable","observer","summary","toCheck","possibleServerGroup","extractServerGroupSummary","ServerGroupReader","getServerGroup","CloudProviderRegistry","registerProvider","logo","transformer","CreateLoadBalancerModal","skipUpstreamStageCheck","detailsActions","detailsGetter","detailsSections","CloneServerGroupModal","commandBuilder","scalingActivitiesEnabled","CloudFoundryProviderSettings","providers","cloudfoundry","resetToOriginal","resetProvider"],"mappings":"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"}
|