@spinnaker/cloudfoundry 2026.2.2 → 2026.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/image/image.reader.cf.d.ts +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/instance/details/CloudFoundryInstanceActions.d.ts +5 -2
  5. package/dist/loadBalancer/configure/CloudFoundryMapLoadBalancerModal.d.ts +5 -4
  6. package/dist/loadBalancer/details/CloudFoundryLoadBalancerActions.d.ts +5 -2
  7. package/dist/loadBalancer/loadBalancer.transformer.d.ts +2 -5
  8. package/dist/pipeline/stages/cloneServerGroup/CloudFoundryCloneServerGroupStageConfig.d.ts +3 -0
  9. package/dist/serverGroup/configure/serverGroupCommandBuilderShim.service.cf.d.ts +5 -9
  10. package/dist/serverGroup/configure/wizard/CreateServerGroupModal.d.ts +5 -3
  11. package/dist/serverGroup/details/cloudFoundryServerGroupActions.d.ts +8 -2
  12. package/dist/serverGroup/details/mapLoadBalancers/CloudFoundryMapLoadBalancersModal.d.ts +5 -3
  13. package/dist/serverGroup/details/mapLoadBalancers/CloudFoundryUnmapLoadBalancersModal.d.ts +5 -3
  14. package/dist/serverGroup/details/resize/CloudFoundryResizeServerGroupModal.d.ts +5 -3
  15. package/dist/serverGroup/details/rollback/CloudFoundryRollbackServerGroupModal.d.ts +5 -3
  16. package/dist/serverGroup/serverGroup.transformer.d.ts +1 -4
  17. package/package.json +3 -9
  18. package/src/image/image.reader.cf.ts +1 -1
  19. package/src/instance/details/CloudFoundryInstanceActions.tsx +11 -6
  20. package/src/instance/details/CloudFoundryInstanceDetails.tsx +0 -2
  21. package/src/loadBalancer/configure/CloudFoundryMapLoadBalancerModal.tsx +10 -16
  22. package/src/loadBalancer/details/CloudFoundryLoadBalancerActions.tsx +10 -7
  23. package/src/loadBalancer/details/CloudFoundryLoadBalancerDetails.tsx +1 -3
  24. package/src/loadBalancer/loadBalancer.transformer.ts +3 -6
  25. package/src/pipeline/stages/cloneServerGroup/CloudFoundryCloneServerGroupStageConfig.tsx +13 -7
  26. package/src/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsStageConfigForm.tsx +1 -2
  27. package/src/pipeline/stages/createServiceBindings/cloudFoundryCreateServiceBindingsStageForm.spec.tsx +25 -21
  28. package/src/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsStageConfigForm.tsx +1 -2
  29. package/src/pipeline/stages/deleteServiceBindings/cloudFoundryDeleteServiceBindingsStageForm.spec.tsx +23 -18
  30. package/src/pipeline/stages/resizeAsg/CloudFoundryResizeAsgStageConfig.tsx +1 -2
  31. package/src/pipeline/stages/rollbackCluster/cloudFoundryRollbackClusterStage.module.ts +0 -1
  32. package/src/pipeline/stages/runJob/CloudFoundryRunJobStageConfig.tsx +1 -2
  33. package/src/pipeline/stages/unshareService/cloudFoundryUnshareServiceStage.module.ts +0 -1
  34. package/src/presentation/pipeline/stages/CloudFoundryAsgStageConfig.tsx +1 -2
  35. package/src/presentation/pipeline/stages/CloudFoundryLoadBalancersStageConfig.tsx +1 -2
  36. package/src/presentation/widgets/accountRegionClusterSelector/AccountRegionClusterSelector.spec.tsx +41 -43
  37. package/src/routerActions.spec.tsx +76 -0
  38. package/src/serverGroup/configure/serverGroupCommandBuilderShim.service.cf.ts +12 -18
  39. package/src/serverGroup/configure/wizard/CreateServerGroupModal.tsx +13 -7
  40. package/src/serverGroup/details/cfServerGroupDetailsGetter.ts +1 -1
  41. package/src/serverGroup/details/cloudFoundryServerGroupActions.tsx +39 -25
  42. package/src/serverGroup/details/mapLoadBalancers/CloudFoundryMapLoadBalancersModal.tsx +19 -6
  43. package/src/serverGroup/details/mapLoadBalancers/CloudFoundryUnmapLoadBalancersModal.tsx +19 -6
  44. package/src/serverGroup/details/resize/CloudFoundryResizeServerGroupModal.tsx +19 -6
  45. package/src/serverGroup/details/rollback/CloudFoundryRollbackServerGroupModal.tsx +13 -6
  46. package/src/serverGroup/serverGroup.transformer.ts +2 -5
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{ApplicationNameValidator as e,HelpContentsRegistry as t,ConfirmationModalService as a,ReactInjector as n,InstanceWriter as r,CollapsibleSection as s,timestamp as i,AccountTag as l,RecentHistoryService as o,InstanceReader as c,Spinner as d,LoadBalancerWriter as m,HealthCounts as p,HelpField as u,FormikFormField as C,TextInput as h,RadioButtonInput as g,AppListExtractor as v,StageConfigField as f,ReactSelectInput as E,AccountService as b,NgReact as y,StageConstants as N,ExecutionDetailsSection as S,StageFailureMessage as k,StageExecutionLogs as F,SpinFormik as x,TaskMonitor as A,ReactModal as R,TaskMonitorWrapper as w,ModalClose as T,noop as D,PipelineConfigValidator as U,PipelineConfigService as I,NameUtils as G,StageArtifactSelectorDelegate as B,excludeAllTypesExcept as M,ArtifactTypePatterns as P,FormValidator as q,FormikStageConfig as $,ManifestYaml as L,decodeUnicodeBase64 as O,Overridable as V,Registry as z,ExecutionDetailsTasks as _,ExecutionArtifactTab as H,ArtifactReferenceService as K,ExpectedArtifactService as j,DeployInitializer as W,StageArtifactSelector as Q,CoreRedBlackAdditionalFields as J,Markdown as Y,CheckboxInput as Z,WizardModal as X,WizardPage as ee,ServicesReader as te,TextAreaInput as ae,SpelText as ne,NumberInput as re,TaskReason as se,ServerGroupWarningMessageService as ie,SETTINGS as le,ClusterTargetBuilder as oe,AddEntityTagLinks as ce,ServerGroupReader as de,CloudProviderRegistry as me}from"@spinnaker/core";import{UISref as pe}from"@uirouter/react";import{UIRouterContext as ue}from"@uirouter/react-hybrid";import{cloneDeep as Ce,flattenDeep as he,chain as ge,has as ve,camelCase as fe,first as Ee,uniq as be,isNil as ye,get as Ne,upperFirst as Se,set as ke,defaultsDeep as Fe,unset as xe,includes as Ae,bindAll as Re,isEmpty as we,defaults as Te,orderBy as De,find as Ue,filter as Ie}from"lodash";import Ge from"react";import{Dropdown as Be,Modal as Me,ModalFooter as Pe,Button as qe,Tooltip as $e}from"react-bootstrap";import{FieldArray as Le,getIn as Oe,Form as Ve}from"formik";import{$q as ze}from"ngimport";import{Subject as _e,from as He,Observable as Ke}from"rxjs";import{takeUntil as je}from"rxjs/operators";import We,{Creatable as Qe}from"react-select";import{safeLoad as Je}from"js-yaml";const Ye=class e{static validateSpecialCharacters(e,t,a){if(!/^([a-zA-Z][a-zA-Z0-9]*)?$/.test(e)){/^([a-zA-Z][a-zA-Z0-9-]*)?$/.test(e)||a.push("The application name must begin with a letter and must contain only letters, digits or dashes. No special characters are allowed.")}}static validateLength(t,a){t.length>e.MAX_RESOURCE_NAME_LENGTH&&a.push(`The maximum length for an application in Cloud Foundry is ${e.MAX_RESOURCE_NAME_LENGTH} characters.`)}validate(t=""){const a=[],n=[];return t&&t.length&&(e.validateSpecialCharacters(t,a,n),e.validateLength(t,n)),{warnings:a,errors:n}}};Ye.MAX_RESOURCE_NAME_LENGTH=63;let Ze=Ye;e.registerValidator("cloudfoundry",new Ze);const Xe={"cf.service.deploy.timeout":"(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.","cf.service.destroy.timeout":"(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.","cf.serverGroup.stack":"(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.","cf.serverGroup.detail":"(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.","cf.serverGroup.startApplication":"<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>.","cf.serverGroup.requiredRoutes":"<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.","cf.serverGroup.routes":"(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.","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>","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>","cf.runJob.logsUrl":'<p>(Optional) A templated URL to an external logging system. The URL is used in the pipeline execution stage task details.</p><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:<ul><li><code>${appGuid}</code> the selected cluster CF app GUID.</li><li><code>${name}</code> the task name.</li></ul></p>',"cf.runJob.jobName":"(Optional) If left empty, a random string will be generated."};Object.keys(Xe).forEach(e=>t.register(e,Xe[e]));class et extends Ge.Component{constructor(){super(...arguments),this.terminateInstance=()=>{const{application:e,instance:t}=this.props,s=Ce(t);s.placement={},s.id=t.name;const i={application:e,title:"Terminating "+t.name,onTaskComplete(){n.$state.includes("**.serverGroup",{instanceId:t.name})&&n.$state.go("^")}};a.confirm({header:"Really terminate "+t.name+"?",buttonText:"Terminate",account:t.account,taskMonitorConfig:i,submitMethod:()=>r.terminateInstance(t,e,{cloudProvider:"cloudfoundry"})})}}render(){return Ge.createElement("div",{className:"actions"},Ge.createElement(Be,{className:"dropdown",id:"instance-actions-dropdown"},Ge.createElement(Be.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Instance Actions"),Ge.createElement(Be.Menu,{className:"dropdown-menu"},Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.terminateInstance},"Terminate")))))}}class tt extends Ge.Component{constructor(e){super(e)}render(){const{instance:e}=this.props;return Ge.createElement("div",null,Ge.createElement(s,{heading:"Instance Information",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Ge.createElement("dt",null,"Launched"),Ge.createElement("dd",null,i(e.launchTime)),Ge.createElement("dt",null,"In"),Ge.createElement("dd",null,Ge.createElement(l,{account:e.account})),Ge.createElement("dt",null,"Region"),Ge.createElement("dd",null,e.region))),Ge.createElement(s,{heading:"Status",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Ge.createElement("dt",null,Ge.createElement("span",{className:"glyphicon glyphicon-"+e.healthState+"-triangle"})),Ge.createElement("dd",null,e.healthState),e.details&&Ge.createElement("div",null,Ge.createElement("dt",null,"Details"),Ge.createElement("dd",null,e.details)))))}}var at=Object.getOwnPropertyDescriptor;let nt=class extends Ge.Component{constructor(e){super(e),this.state={loading:!0,instanceIdNotFound:e.instance.instanceId}}componentDidMount(){this.props.app.ready().then(()=>this.retrieveInstance(this.props.instance))}retrieveInstance(e){const t=he([this.props.app.getDataSource("serverGroups").data,this.props.app.getDataSource("loadBalancers").data,this.props.app.getDataSource("loadBalancers").data.map(e=>e.serverGroups)]).find(t=>t.instances.some(t=>t.id===e.instanceId));if(t){const a={region:t.region,account:t.account};"serverGroup"===t.category&&(a.serverGroup=t.name),o.addExtraDataToLatest("instances",a),c.getInstanceDetails(t.account,t.region,e.instanceId).then(e=>(e.account=t.account,e.region=t.region,e)).then(e=>{this.setState({instance:e,loading:!1})})}}render(){const{app:e}=this.props,{instance:t,instanceIdNotFound:a,loading:n}=this.state,r=Ge.createElement("div",{className:"close-button"},Ge.createElement(pe,{to:"^"},Ge.createElement("span",{className:"glyphicon glyphicon-remove"})));return Ge.createElement("div",{className:"details-panel"},n&&Ge.createElement("div",{className:"header"},r,Ge.createElement("div",{className:"horizontal center middle"},Ge.createElement(d,{size:"small"}))),!n&&t&&Ge.createElement("div",{className:"header"},r,Ge.createElement("div",{className:"header-text horizontal middle"},Ge.createElement("span",{className:"glyphicon glyphicon-hdd "+t.healthState}),Ge.createElement("h3",{className:"horizontal middle space-between flex-1"},t.name)),Ge.createElement(et,{application:e,instance:t})),!n&&t&&Ge.createElement("div",{className:"content"},Ge.createElement(tt,{instance:t})),!n&&!t&&Ge.createElement("div",{className:"header"},r,Ge.createElement("div",{className:"header-text horizontal middle"},Ge.createElement("h3",{className:"horizontal middle space-between flex-1"},a))),!n&&!t&&Ge.createElement("div",{className:"content"},Ge.createElement("div",{className:"content-section"},Ge.createElement("div",{className:"content-body text-center"},Ge.createElement("h3",null,"Instance not found.")))))}};nt=((e,t,a,n)=>{for(var r,s=n>1?void 0:n?at(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(s=r(s)||s);return s})([ue],nt);class rt{constructor(e){this.id=e.id,this.credentials=e.account,this.account=this.credentials,this.cloudProvider=e.cloudProvider,this.loadBalancerName=e.name,this.name=e.name,this.region=e.region,this.serverGroups=e.serverGroups,this.space=e.space}}class st{constructor(e){this.$q=e}normalizeLoadBalancer(e){e.provider=e.type,e.instanceCounts=this.buildInstanceCounts(e.serverGroups),e.instances=[],e.serverGroups.forEach(t=>{t.account=e.account,t.region=e.region,t.cloudProvider=e.provider,t.detachedInstances&&(t.detachedInstances=t.detachedInstances.map(e=>({id:e}))),t.instances=t.instances.concat(t.detachedInstances||[]).map(t=>this.transformInstance(t,e))});const t=e.serverGroups.filter(e=>!e.isDisabled);return e.instances=ge(t).map("instances").flatten().value(),this.$q.resolve(e)}constructNewCloudFoundryLoadBalancerTemplate(e){return{cloudProvider:"cloudfoundry",credentials:void 0,name:e.name,id:void 0,host:"",path:"",port:"",region:"",domain:"",serverGroups:[],routes:[]}}convertLoadBalancerForEditing(e,t){return t.getDataSource("loadBalancers").ready().then(()=>{const a=t.getDataSource("loadBalancers").data.find(t=>t.name===e.name&&t.account===e.account);return a&&(e.serverGroups=Ce(a.serverGroups)),e})}convertLoadBalancerToUpsertDescription(e){return new rt(e)}buildInstanceCounts(e){const t=ge(e).map("instances").flatten().reduce((e,t)=>(ve(t,"health.state")&&e[fe(t.health.state)]++,e),{up:0,down:0,outOfService:0,succeeded:0,failed:0,starting:0,unknown:0}).value();return t.outOfService+=ge(e).map("detachedInstances").flatten().value().length,t}transformInstance(e,t){var a;e.provider=t.type,e.account=t.account,e.region=t.region,e.loadBalancers=[t.name];const n=e.health||{};return e.healthState=null!=(a=n.state)?a:"OutOfService",e.health=[n],e}}st.$inject=["$q"];class it extends Ge.Component{constructor(){super(...arguments),this.deleteLoadBalancer=()=>{const{application:e,loadBalancer:t}=this.props,r={application:e,title:"Deleting "+t.name,onTaskComplete(){n.$state.includes("**.serverGroup",{instanceId:t.name})&&n.$state.go("^")}};a.confirm({header:"Really delete "+t.name+"?",buttonText:"Delete "+t.name,account:t.account,taskMonitorConfig:r,submitMethod:()=>{const a={cloudProvider:t.cloudProvider,credentials:t.account,regions:[t.region],loadBalancerName:t.name};return m.deleteLoadBalancer(a,e)}})}}render(){return Ge.createElement("div",{className:"actions"},Ge.createElement(Be,{className:"dropdown",id:"instance-actions-dropdown"},Ge.createElement(Be.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Load Balancer Actions"),Ge.createElement(Be.Menu,{className:"dropdown-menu"},Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.deleteLoadBalancer},"Delete Load Balancer")))))}}class lt extends Ge.Component{constructor(e){super(e)}render(){const{loadBalancer:e}=this.props;return Ge.createElement(Ge.Fragment,null,Ge.createElement(s,{heading:"Load Balancer Details",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Ge.createElement("dt",null,"In"),Ge.createElement("dd",null,Ge.createElement(l,{account:e.account})),Ge.createElement("dt",null,"Organization"),Ge.createElement("dd",null,e.space.organization.name),Ge.createElement("dt",null,"Space"),Ge.createElement("dd",null,e.space.name),e.serverGroups&&Ge.createElement(Ge.Fragment,null,Ge.createElement("dt",null,"Server Groups"),Ge.createElement("dd",null,Ge.createElement("ul",null,e.serverGroups.map((e,t)=>Ge.createElement("li",{key:t},Ge.createElement(pe,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"cloudfoundry"}},Ge.createElement("a",null,e.name))))))))))}}class ot extends Ge.Component{constructor(e){super(e)}render(){const{loadBalancer:e}=this.props;return Ge.createElement(Ge.Fragment,null,Ge.createElement(s,{heading:"Status",defaultExpanded:!0},Ge.createElement(p,{className:"pull-left",container:e.instanceCounts})))}}class ct extends Ge.Component{constructor(e){super(e)}render(){const{loadBalancer:e}=this.props;return Ge.createElement(Ge.Fragment,null,Ge.createElement(s,{heading:"Application links",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Ge.createElement("dt",null,"HTTP"),Ge.createElement("dd",null,Ge.createElement("a",{href:"http://"+e.name},"http://"+e.name)),Ge.createElement("dt",null,"HTTPS"),Ge.createElement("dd",null,Ge.createElement("a",{href:"https://"+e.name},"https://"+e.name)))))}}var dt=Object.getOwnPropertyDescriptor;let mt=class extends Ge.Component{constructor(e){super(e),this.state={loading:!0,loadBalancer:void 0,refreshListenerUnsubscribe:()=>{}},e.app.getDataSource("loadBalancers").ready().then(()=>this.extractLoadBalancer())}componentWillUnmount(){this.state.refreshListenerUnsubscribe()}extractLoadBalancer(){const{name:e}=this.props.loadBalancer,t=this.props.app.getDataSource("loadBalancers").data.find(t=>t.name===e&&t.account===this.props.loadBalancer.accountId);this.setState({loading:!1,loadBalancer:t}),this.state.refreshListenerUnsubscribe(),t?this.setState({refreshListenerUnsubscribe:this.props.app.getDataSource("loadBalancers").onRefresh(null,()=>this.extractLoadBalancer())}):this.setState({refreshListenerUnsubscribe:()=>{}})}render(){const{app:e}=this.props,{loadBalancer:t,loadBalancerNotFound:a,loading:n}=this.state,r=Ge.createElement("div",{className:"close-button"},Ge.createElement(pe,{to:"^"},Ge.createElement("span",{className:"glyphicon glyphicon-remove"})));return Ge.createElement("div",{className:"details-panel"},n&&Ge.createElement("div",{className:"header"},r,Ge.createElement("div",{className:"horizontal center middle"},Ge.createElement(d,{size:"small"}))),!n&&!!t&&Ge.createElement("div",{className:"header"},r,Ge.createElement("div",{className:"header-text horizontal middle"},Ge.createElement("i",{className:"fa icon-sitemap"}),Ge.createElement("h3",{className:"horizontal middle space-between flex-1"},t.name)),Ge.createElement(it,{application:e,loadBalancer:t})),!n&&!!t&&Ge.createElement("div",{className:"content"},Ge.createElement(lt,{loadBalancer:t}),Ge.createElement(ot,{loadBalancer:t}),Ge.createElement(ct,{loadBalancer:t})),!n&&!t&&Ge.createElement("div",{className:"header"},r,Ge.createElement("div",{className:"header-text horizontal middle"},Ge.createElement("h3",{className:"horizontal middle space-between flex-1"},a))),!n&&!t&&Ge.createElement("div",{className:"content"},Ge.createElement("div",{className:"content-section"},Ge.createElement("div",{className:"content-body text-center"},Ge.createElement("h3",null,"Instance not found.")))))}};mt=((e,t,a,n)=>{for(var r,s=n>1?void 0:n?dt(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(s=r(s)||s);return s})([ue],mt);class pt extends Ge.Component{constructor(e){super(e)}render(){const{label:e,helpKey:t,children:a}=this.props;return Ge.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},Ge.createElement("label",{className:"sm-label-right"},Ge.createElement("span",{className:"label-text"},e," "),t&&Ge.createElement(u,{id:t})),Ge.createElement("div",{className:"flex-grow"},a))}}class ut extends Ge.Component{render(){const{fieldName:e,onChange:t}=this.props;return Ge.createElement("div",null,Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("b",null,"Buildpacks"),Ge.createElement(Le,{name:e,render:a=>{const n=a.form.values,r=Oe(n,e)||[];return Ge.createElement("table",{className:"table table-condensed packed metadata"},Ge.createElement("tbody",null,r.map((r,s)=>Ge.createElement("tr",{key:s},Ge.createElement("td",null,Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:`${e}[${s}]`,onChange:()=>{t&&t(Oe(n,e)||[])},input:e=>Ge.createElement(h,{...e}),required:!0}))),Ge.createElement("td",null,Ge.createElement("a",{className:"btn btn-link sm-label",onClick:()=>a.remove(s)},Ge.createElement("span",{className:"glyphicon glyphicon-trash"})))))),Ge.createElement("tfoot",null,Ge.createElement("tr",null,Ge.createElement("td",{colSpan:2},Ge.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>a.push("")},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Buildpack")))))}}))))}}class Ct extends Ge.Component{render(){const{fieldName:e,onChange:t}=this.props;return Ge.createElement("div",null,Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("b",null,"Environment Variables"),Ge.createElement(Le,{name:e,render:a=>{const n=a.form.values,r=Oe(n,e)||[];return Ge.createElement("table",{className:"table table-condensed packed tags"},Ge.createElement("thead",null,Ge.createElement("tr",null,Ge.createElement("th",null,"Name"),Ge.createElement("th",null,"Value"))),Ge.createElement("tbody",null,r.map((r,s)=>{const i=`${e}[${s}]`;return Ge.createElement("tr",{key:s},Ge.createElement("td",null,Ge.createElement(C,{name:`${i}.key`,onChange:()=>{t&&t(Oe(n,e)||[])},input:e=>Ge.createElement(h,{...e}),required:!0})),Ge.createElement("td",null,Ge.createElement(C,{name:`${i}.value`,onChange:()=>{t&&t(Oe(n,e)||[])},input:e=>Ge.createElement(h,{...e}),required:!0})),Ge.createElement("td",null,Ge.createElement("a",{className:"btn btn-link sm-label"},Ge.createElement("span",{className:"glyphicon glyphicon-trash",onClick:()=>a.remove(s)}))))})),Ge.createElement("tfoot",null,Ge.createElement("tr",null,Ge.createElement("td",{colSpan:3},Ge.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>a.push({key:"",value:""})},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Environment Variable")))))}}))))}}class ht extends Ge.Component{constructor(){super(...arguments),this.HEALTH_CHECK_TYPE_OPTIONS=[{label:"port",value:"port"},{label:"HTTP",value:"http"},{label:"process",value:"process"}]}render(){const{healthCheckTypeFieldName:e,healthCheckType:t,healthCheckHttpEndpointFieldName:a,onHealthCheckTypeChange:n,onHealthCheckHttpEndpointChange:r}=this.props;return Ge.createElement("div",{className:"col-md-9"},Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:e,label:"Health Check Type",input:e=>Ge.createElement(g,{...e,inline:!0,options:this.HEALTH_CHECK_TYPE_OPTIONS}),onChange:e=>{n&&n(e)}})),"http"===t&&Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:a,label:"Endpoint",input:e=>Ge.createElement(h,{...e,required:!0}),onChange:e=>{r&&r(e)},required:!0})))}}class gt extends Ge.Component{render(){const{diskQuotaFieldName:e,instancesFieldName:t,memoryFieldName:a,onDiskQuotaChange:n,onInstancesChange:r,onMemoryChange:s}=this.props;return Ge.createElement("div",null,Ge.createElement("div",{className:"col-md-9"},Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:a,input:e=>Ge.createElement(h,{...e}),label:"Memory",onChange:e=>{s&&s(e)}})),Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:e,input:e=>Ge.createElement(h,{...e}),label:"Disk Quota",onChange:e=>{n&&n(e)}})),Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:t,input:e=>Ge.createElement(h,{type:"number",...e}),label:"Instances",onChange:e=>{r&&r(e)},required:!0}))))}}class vt extends Ge.Component{render(){const{fieldName:e,isRequired:t,onChange:a,singleRouteOnly:n}=this.props;return Ge.createElement("div",null,Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("b",null,n?"Route":"Routes")," ",!t&&Ge.createElement(u,{id:"cf.serverGroup.routes"}),!!t&&Ge.createElement(u,{id:"cf.serverGroup.requiredRoutes"}),Ge.createElement(Le,{name:e,render:t=>{const r=t.form.values,s=Oe(r,e)||[];return Ge.createElement("table",{className:"table table-condensed packed metadata"},Ge.createElement("tbody",null,s.map((s,i)=>Ge.createElement("tr",{key:i},Ge.createElement("td",null,Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:`${e}[${i}]`,onChange:()=>{a&&a(Oe(r,e)||[])},input:e=>Ge.createElement(h,{...e}),required:!0}))),Ge.createElement("td",{hidden:n},Ge.createElement("a",{className:"btn btn-link sm-label",onClick:()=>t.remove(i)},Ge.createElement("span",{className:"glyphicon glyphicon-trash"})))))),Ge.createElement("tfoot",null,Ge.createElement("tr",{hidden:n},Ge.createElement("td",{colSpan:2},Ge.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>t.push("")},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Route")))))}}))))}}const ft=({fieldName:e})=>Ge.createElement("div",null,Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("b",null,"Bind Services"),Ge.createElement(Le,{name:e,render:t=>{const a=t.form.values,n=Oe(a,e)||[];return Ge.createElement("table",{className:"table table-condensed packed metadata"},Ge.createElement("tbody",null,n.map((a,n)=>Ge.createElement("tr",{key:n},Ge.createElement("td",null,Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:`${e}[${n}]`,input:e=>Ge.createElement(h,{...e}),required:!0}))),Ge.createElement("td",null,Ge.createElement("a",{className:"btn btn-link sm-label",onClick:()=>t.remove(n)},Ge.createElement("span",{className:"glyphicon glyphicon-trash"})))))),Ge.createElement("tfoot",null,Ge.createElement("tr",null,Ge.createElement("td",{colSpan:2},Ge.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>t.push("")},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Service")))))}}))));class Et extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.setRegionList=e=>{const{application:t}=this.props,a=t=>!t||t.account===e;He(t.ready()).pipe(je(this.destroy$)).subscribe(()=>{const e=v.getRegions([t],a);e.sort(),this.setState({availableRegions:e})})},this.setClusterList=(e,t)=>{const{application:a}=this.props;He(a.ready()).pipe(je(this.destroy$)).subscribe(()=>{const n=v.clusterFilterForCredentialsAndRegion(e,t),r=v.getClusters([a],n),s=this.props.component[this.state.clusterField];s&&!r.includes(s)&&r.push(s),this.setState({clusters:r})})},this.onAccountUpdate=e=>{const t=e.value;this.setRegionList(t),this.setClusterList(t,[]),this.props.onComponentUpdate&&this.props.onComponentUpdate({...this.props.component,credentials:t,region:"",regions:[],[this.state.clusterField]:void 0})},this.onRegionsUpdate=e=>{const t=e.map(e=>e.value);this.setClusterList(this.props.component.credentials,t),this.props.onComponentUpdate&&this.props.onComponentUpdate({...this.props.component,regions:t,[this.state.clusterField]:void 0})},this.onRegionUpdate=e=>{const t=e.value;this.setClusterList(this.props.component.credentials,[t]),this.props.onComponentUpdate&&this.props.onComponentUpdate({...this.props.component,region:t,[this.state.clusterField]:void 0})},this.onClusterUpdate=e=>{const t=e.value,a=v.monikerClusterNameFilter(t),n=Ee(be(v.getMonikers([this.props.application],a)));let r;if(ye(n)?r=void 0:(n.sequence=null,r=n),e.className){const e=this.state.clusters;e.push(t),this.setState(e)}this.props.onComponentUpdate&&this.props.onComponentUpdate({...this.props.component,[this.state.clusterField]:t,moniker:r})};const t=e.clusterField||"cluster";this.state={availableRegions:[],cloudProvider:e.cloudProvider,clusterField:t,clusters:[],componentName:e.componentName||"",[t]:e.component[t]}}componentDidMount(){this.setRegionList(this.props.component.credentials),this.setClusterList(this.props.component.credentials,this.props.isSingleRegion?[this.props.component.region]:this.props.component.regions)}componentWillUnmount(){this.destroy$.next()}render(){const{accounts:e,isSingleRegion:t,component:a}=this.props,{availableRegions:n,clusters:r,clusterField:s,componentName:i}=this.state;return Ge.createElement(Ge.Fragment,null,Ge.createElement(f,{label:"Account"},Ge.createElement(We,{name:i?`${i}.credentials`:"credentials",options:e&&e.map(e=>({label:e.name,value:e.name})),clearable:!1,value:a.credentials,onChange:this.onAccountUpdate})),!t&&Ge.createElement(f,{label:"Region"},Ge.createElement(We,{name:i?`${i}.regions`:"regions",options:n&&n.map(e=>({label:e,value:e})),multi:!0,clearable:!1,value:a.regions,onChange:this.onRegionsUpdate})),t&&Ge.createElement(f,{label:"Region"},Ge.createElement(We,{name:i?`${i}.region`:"region",options:n&&n.map(e=>({label:e,value:e})),multi:!1,clearable:!1,value:a.region,onChange:this.onRegionUpdate})),Ge.createElement(f,{label:"Cluster",helpKey:"pipeline.config.findAmi.cluster"},Ge.createElement(Qe,{name:i?`${i}.${s}`:`${s}`,options:r&&r.map(e=>({label:e,value:e})),clearable:!1,value:a[s],onChange:this.onClusterUpdate})))}}class bt extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.setRegionList=e=>{const{application:t}=this.props,a=t=>!t||t.account===e;He(t.ready()).pipe(je(this.destroy$)).subscribe(()=>{const e=v.getRegions([t],a);e.sort(),this.setState({availableRegions:e})})},this.setClusterList=(e,t)=>{const{application:a}=this.props;He(a.ready()).pipe(je(this.destroy$)).subscribe(()=>{const n=v.clusterFilterForCredentialsAndRegion(e,t),r=v.getClusters([a],n);this.setState({clusters:r})})},this.accountChanged=e=>{this.setRegionList(e),this.setClusterList(e,[])},this.regionChanged=e=>{const{componentName:t,formik:a}=this.props,{credentialsField:n}=this.state,r=Ne(a.values,t?`${t}.${n}`:`${n}`,void 0);this.setClusterList(r,[e])};const t=e.credentialsField||"credentials",a=e.clusterField||"cluster";this.state={availableRegions:[],cloudProvider:e.cloudProvider,clusterField:a,clusters:[],componentName:e.componentName||"",credentialsField:t}}componentDidMount(){const{componentName:e,formik:t}=this.props,{credentialsField:a}=this.state,n=Ne(t.values,e?`${e}.${a}`:`${a}`,void 0),r=Ne(t.values,e?`${e}.region`:"region",void 0);this.setRegionList(n),this.setClusterList(n,[r])}componentWillUnmount(){this.destroy$.next()}render(){const{accounts:e}=this.props,{credentialsField:t,availableRegions:a,clusters:n,clusterField:r,componentName:s}=this.state;return Ge.createElement("div",{className:"col-md-9"},Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:s?`${s}.${t}`:`${t}`,label:"Account",input:t=>Ge.createElement(E,{inputClassName:"cloudfoundry-react-select",...t,stringOptions:e&&e.map(e=>e.name),clearable:!1}),onChange:this.accountChanged,required:!0})),Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:s?`${s}.region`:"region",label:"Region",input:e=>Ge.createElement(E,{inputClassName:"cloudfoundry-react-select",...e,stringOptions:a,clearable:!1}),onChange:this.regionChanged,required:!0})),Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:s?`${s}.${r}`:`${r}`,label:"Cluster",input:e=>Ge.createElement(E,{inputClassName:"cloudfoundry-react-select",...e,stringOptions:n,clearable:!1}),required:!0})))}}class yt extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.targetUpdated=e=>{this.props.updateStageField({target:e})},this.componentUpdated=e=>{this.props.updateStageField({credentials:e.credentials,regions:e.regions,cluster:e.cluster})},this.props.updateStageField({cloudProvider:"cloudfoundry"}),this.state={accounts:[]}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{application:e,pipeline:t,stage:a}=this.props,{target:n}=a,{accounts:r}=this.state,{TargetSelect:s}=y;return Ge.createElement("div",{className:"form-horizontal"},!t.strategy&&Ge.createElement(Et,{accounts:r,application:e,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdated,component:a}),Ge.createElement(f,{label:"Target"},Ge.createElement(s,{model:{target:n},options:N.TARGET_LIST,onChange:this.targetUpdated})))}}function Nt(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"credentials",void 0),r=Ne(a,"region",void 0),s=Ne(a,"loadBalancerNames",void 0),i=Ne(a,"serverGroupName",void 0);return Ge.createElement(S,{name:e.name,current:e.current},Ge.createElement("div",{className:"step-section-details"},Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("dl",{className:"dl-horizontal"},Ge.createElement("dt",null,"Account"),Ge.createElement("dd",null,Ge.createElement(l,{account:n})),Ge.createElement("dt",null,"Region"),Ge.createElement("dd",null,r,Ge.createElement("br",null)),Ge.createElement("dt",null,"Server Group Name"),Ge.createElement("dd",null,i,Ge.createElement("br",null)),Ge.createElement("dt",null,"Load Balancers"),Ge.createElement("dd",null,s.join(", "),Ge.createElement("br",null)))))),Ge.createElement(k,{stage:e.stage,message:e.stage.failureMessage}),Ge.createElement(F,{stage:e.stage}))}(Nt||(Nt={})).title="cloudfoundryLoadBalancersConfig";class St extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.formikRef=Ge.createRef(),this.targetUpdated=e=>{this.props.updateStageField({target:e})},this.componentUpdated=e=>{this.props.updateStageField({credentials:e.credentials,region:e.region,cluster:e.cluster,loadBalancerNames:e.loadBalancerNames})};const{loadBalancerNames:t}=e.stage,a=t&&t.length?t:[""];this.props.updateStageField({cloudProvider:"cloudfoundry",loadBalancerNames:a}),this.state={accounts:[],application:e.application,initialValues:{routes:a},pipeline:e.pipeline}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{stage:e}=this.props,{accounts:t,application:a,initialValues:n,pipeline:r}=this.state,{target:s}=e,{TargetSelect:i}=y;return Ge.createElement("div",{className:"form-horizontal"},!r.strategy&&Ge.createElement(Et,{accounts:t,application:a,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.componentUpdated,component:e}),Ge.createElement(f,{label:"Target"},Ge.createElement(i,{model:{target:s},options:N.TARGET_LIST,onChange:this.targetUpdated})),Ge.createElement(x,{ref:this.formikRef,initialValues:n,onSubmit:null,render:()=>Ge.createElement(vt,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0,onChange:t=>{e.loadBalancerNames=t,this.componentUpdated(e)}})}))}}function kt(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"service.account",void 0),r=Ne(a,"service.region",void 0),s=Ne(a,"service.instance.name",void 0);return Ge.createElement(S,{name:e.name,current:e.current},Ge.createElement("div",{className:"step-section-details"},Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("dl",{className:"dl-horizontal"},Ge.createElement("dt",null,"Account"),Ge.createElement("dd",null,Ge.createElement(l,{account:n})),Ge.createElement("dt",null,"Region"),Ge.createElement("dd",null,r,Ge.createElement("br",null)),Ge.createElement("dt",null,"Service Instance Name"),Ge.createElement("dd",null,s,Ge.createElement("br",null)))))),Ge.createElement(k,{stage:t,message:t.failureMessage}),Ge.createElement(F,{stage:t}))}function Ft(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"service.account",void 0),r=Ne(a,"service.region",void 0),s=Ne(a,"serviceInstanceName",void 0),i=Ne(a,"serviceKeyName",void 0);return Ge.createElement(S,{name:e.name,current:e.current},Ge.createElement("div",{className:"step-section-details"},Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("dl",{className:"dl-horizontal"},Ge.createElement("dt",null,"Account"),Ge.createElement("dd",null,Ge.createElement(l,{account:n})),Ge.createElement("dt",null,"Region"),Ge.createElement("dd",null,r,Ge.createElement("br",null)),Ge.createElement("dt",null,"Service Instance Name"),Ge.createElement("dd",null,s,Ge.createElement("br",null)),Ge.createElement("dt",null,"Service Key Name"),Ge.createElement("dd",null,i,Ge.createElement("br",null)))))),Ge.createElement(k,{stage:e.stage,message:e.stage.failureMessage}),Ge.createElement(F,{stage:e.stage}))}(kt||(kt={})).title="cloudfoundryServiceConfig",(Ft||(Ft={})).title="cloudfoundryServiceKeyConfig";const xt=class e extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.formikRef=Ge.createRef(),this.submit=e=>{var t,a;const{routes:r}=e,s=null==(a=null==(t=this.props.application.serverGroups)?void 0:t.data)?void 0:a.find(e=>e.cluster===this.state.selectedValues.cluster&&e.account===this.state.selectedValues.credentials&&e.region===this.state.selectedValues.region),i={account:s.account,cloudProvider:s.cloudProvider,cluster:s.cluster,instanceCounts:s.instanceCounts,instances:s.instances,loadBalancers:r,name:s.name,region:s.region,type:s.type};this.state.taskMonitor.submit(()=>n.serverGroupWriter.mapLoadBalancers(i,this.props.application,{serverGroupName:s.name}))},this.close=e=>{this.props.dismissModal.apply(null,e)},this.accountRegionClusterUpdated=e=>{this.setState({selectedValues:{cluster:e.cluster,credentials:e.credentials,region:e.region,routes:[""]}})};const t=ze.defer(),a=t.promise;this.$uibModalInstanceEmulation={result:a,close:()=>this.props.dismissModal(),dismiss:()=>this.props.dismissModal()},Object.assign(this.$uibModalInstanceEmulation,{deferred:t}),this.state={accounts:[],regions:[],application:e.application,selectedValues:{credentials:"",region:"",cluster:"",routes:[""]},taskMonitor:new A({application:e.application,title:"Mapping a route to your server group",modalInstance:A.modalInstanceEmulation(()=>this.props.dismissModal()),onTaskComplete:()=>this.props.application.serverGroups.refresh()})},He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}static show(t){return R.show(e,{application:t.app},{dialogClassName:"wizard-modal modal-lg"})}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{accounts:e,application:t,selectedValues:a}=this.state;return Ge.createElement(Ge.Fragment,null,Ge.createElement(w,{monitor:this.state.taskMonitor}),Ge.createElement(x,{ref:this.formikRef,initialValues:a,onSubmit:this.submit,render:n=>Ge.createElement(Ge.Fragment,null,Ge.createElement(T,{dismiss:this.close}),Ge.createElement(Me.Header,null,Ge.createElement(Me.Title,null,"Map route")),Ge.createElement(Me.Body,null,Ge.createElement(Ve,{className:"form-horizontal"},Ge.createElement(Et,{accounts:e,application:t,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.accountRegionClusterUpdated,component:a}),Ge.createElement(vt,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0}))),Ge.createElement(Pe,null,Ge.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Ge.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(n.values),disabled:!n.isValid},"Submit")))}))}};xt.defaultProps={closeModal:D,dismissModal:D};let At=xt;U.registerValidator("cfTargetImpedance",new class{validate(e,t,a,n){const r=I.getAllUpstreamDependencies(e,t),s=t.regions||[];let i=!0;return s.forEach(e=>{let a=!1;r.forEach(n=>{"deploy"===n.type&&n.clusters&&n.clusters.length?n.clusters.forEach(n=>{G.getClusterName(n.application,n.stack,n.freeFormDetails)===t.cluster&&n.account===t.credentials&&n.region===e&&(a=!0)}):"cloneServerGroup"===n.type&&G.getClusterName(n.application,n.stack,n.freeFormDetails)===t.cluster&&n.region===e&&(a=!0)}),a||(i=!1)}),i?null:a.message}});U.registerValidator("cfInstanceSizeField",new class{validate(e,t,a){return this.passesValidation(t,a)?null:this.validationMessage(a,e)}passesValidation(e,t){return this.fieldIsValid(e,t)}validationMessage(e,t){const a=this.printableFieldLabel(e),n=ve(e,"min"),r=n?Ne(e,"min"):"NA",s=ve(e,"max"),i=s?Ne(e,"max"):"NA";let l="";return n?l=s?`<strong>${a}</strong> should be from ${r} to ${i} in ${t.name}.`:`<strong>${a}</strong> should be at least ${r} in ${t.name}.`:s&&(l=`<strong>${a}</strong> should be no more than ${i} in ${t.name}.`),e.message||l}printableFieldLabel(e){const t=e.fieldLabel||e.fieldName;return Se(t)}fieldIsValid(e,t){const a=ve(e,t.fieldName),n=Ne(e,t.fieldName),r=ve(t,"max"),s=ve(t,"min"),i=Ne(t,"max"),l=Ne(t,"min");return a&&(!r||r&&n<=i)&&(!s||s&&n>=l)}});U.registerValidator("cfRequiredRoutesField",new class{validate(e,t,a){const n=Ne(t,a.fieldName).map(e=>{if(null===/^([-\w]+)\.([-.\w]+)(:\d+)?([-/\w]+)?$/gm.exec(e=e||"")){if(null===/^\${.*}$/g.exec(e))return`"${e}" did not match the expected format "host.some.domain[:9999][/some/path]"`}return null}).filter(e=>null!=e);return n&&n.length&&n[0]||null}});const Rt=class e extends Ge.Component{constructor(){super(...arguments),this.onTemplateArtifactEdited=(e,t)=>{this.props.formik.setFieldValue(`inputArtifacts[${t}].id`,null),this.props.formik.setFieldValue(`inputArtifacts[${t}].artifact`,e),this.props.formik.setFieldValue(`inputArtifacts[${t}].account`,e.artifactAccount)},this.onTemplateArtifactSelected=(e,t)=>{this.props.formik.setFieldValue(`inputArtifacts[${t}].id`,e),this.props.formik.setFieldValue(`inputArtifacts[${t}].artifact`,null)},this.addInputArtifact=()=>{const e=[...this.props.formik.values.inputArtifacts,{account:"",id:""}];this.props.formik.setFieldValue("inputArtifacts",e)},this.removeInputArtifact=e=>{const t=[...this.props.formik.values.inputArtifacts];t.splice(e,1),this.props.formik.setFieldValue("inputArtifacts",t)},this.getInputArtifact=(e,t)=>e.inputArtifacts&&0!==e.inputArtifacts.length?e.inputArtifacts[t]:{account:"",id:""},this.outputNameChange=e=>{const t=this.props.formik.values.expectedArtifacts;t&&1===t.length&&t[0].matchArtifact&&"embedded/base64"===t[0].matchArtifact.type&&this.props.formik.setFieldValue("expectedArtifacts",[{...t[0],matchArtifact:{...t[0].matchArtifact,name:e}}])}}componentDidMount(){const e=this.props.formik.values;e.inputArtifacts&&0===e.inputArtifacts.length&&this.props.formik.setFieldValue("inputArtifacts",[{account:"",id:""}])}render(){const t=this.props.formik.values;return Ge.createElement(Ge.Fragment,null,Ge.createElement("h4",null,"Manifest Options"),Ge.createElement(f,{fieldColumns:3,label:"Name",helpKey:"pipeline.config.bake.cf.manifest.name"},Ge.createElement(h,{onChange:e=>{this.props.formik.setFieldValue("outputName",e.target.value),this.outputNameChange(e.target.value)},value:t.outputName})),Ge.createElement("h4",null,"Manifest Template"),Ge.createElement(B,{artifact:this.getInputArtifact(t,0).artifact,excludedArtifactTypePatterns:e.excludedArtifactTypes,expectedArtifactId:this.getInputArtifact(t,0).id,label:"Template Artifact",onArtifactEdited:e=>{this.onTemplateArtifactEdited(e,0)},helpKey:"pipeline.config.bake.cf.manifest.templateArtifact",onExpectedArtifactSelected:e=>this.onTemplateArtifactSelected(e.id,0),pipeline:this.props.pipeline,stage:t}),Ge.createElement("h4",null,"Manifest Variables"),t.inputArtifacts&&t.inputArtifacts.length>1&&Ge.createElement("div",{className:"row form-group"},t.inputArtifacts.slice(1).map((e,a)=>Ge.createElement("div",{key:a},Ge.createElement("div",{className:"col-md-offset-1 col-md-9"},Ge.createElement(B,{artifact:e.artifact,excludedArtifactTypePatterns:[],expectedArtifactId:e.id,label:"Variables Artifact",onArtifactEdited:e=>{this.onTemplateArtifactEdited(e,a+1)},onExpectedArtifactSelected:e=>this.onTemplateArtifactSelected(e.id,a+1),helpKey:"pipeline.config.bake.cf.manifest.varsArtifact",pipeline:this.props.pipeline,stage:t})),Ge.createElement("div",{className:"col-md-1"},Ge.createElement("div",{className:"form-control-static"},Ge.createElement("button",{onClick:()=>this.removeInputArtifact(a+1)},Ge.createElement("span",{className:"glyphicon glyphicon-trash"}),Ge.createElement("span",{className:"sr-only"},"Remove field"))))))),Ge.createElement(f,{fieldColumns:8,label:""},Ge.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addInputArtifact()},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),"Add variables artifact")))}};Rt.excludedArtifactTypes=M(P.BITBUCKET_FILE,P.CUSTOM_OBJECT,P.EMBEDDED_BASE64,P.GCS_OBJECT,P.GITHUB_FILE,P.GITLAB_FILE,P.S3_OBJECT,P.HTTP_FILE,P.ORACLE_OBJECT);let wt=Rt;function Tt(e){const t=new q(e);return t.field("expectedArtifacts","Produced artifacts").required().withValidators(e=>{if(!function(e){var t,a;return 1===(null==e?void 0:e.length)&&"embedded/base64"===(null==(a=null==(t=e[0])?void 0:t.matchArtifact)?void 0:a.type)}(e))return"Exactly one expected artifact of type embedded/base64 must be configured in the Produces Artifacts section"}),t.field("outputName","Name").required(),t.field("inputArtifacts","Template and Variables Artifacts").required().withValidators(e=>{if(!function(e){return(null==e?void 0:e.length)>=2}(e))return"There should be one manifest template and at least one variables artifact"}),t.validateForm()}var Dt=Object.getOwnPropertyDescriptor;let Ut=class extends Ge.Component{render(){const{current:e,name:t,stage:a}=this.props,n=(a.context.artifacts||[]).filter(e=>"embedded/base64"===e.type);return Ge.createElement(S,{name:t,current:e},Ge.createElement(k,{stage:a,message:a.failureMessage}),n.map((e,t)=>Ge.createElement(L,{key:t,linkName:n.length>1?`Baked Manifest ${t} YAML`:"Baked Manifest YAML",manifestText:O(e.reference),modalTitle:"Baked Manifest"})))}};Ut.title="bakedManifest",Ut=((e,t,a,n)=>{for(var r,s=n>1?void 0:n?Dt(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(s=r(s)||s);return s})([V("bakeManifest.bakeManifestDetailsTab")],Ut);z.pipeline.registerStage({label:"Bake CloudFoundry Manifest",description:"Bake a CF manifest using external variables files.",key:"bakeCloudFoundryManifest",component:function({application:e,pipeline:t,stage:a,updateStage:n}){const r=Ge.useMemo(()=>({inputArtifacts:[],...Ce(a)}),[]);return Ge.createElement($,{application:e,onChange:n,pipeline:t,stage:r,validate:Tt,render:e=>Ge.createElement(wt,{...e})})},producesArtifacts:!0,cloudProvider:"cloudfoundry",executionDetailsSections:[Ut,_,H],artifactExtractor:e=>j.accumulateArtifacts(["inputArtifacts"])(e).map(e=>e.id),artifactRemover:(e,t)=>{var a,n;K.removeArtifactFromFields(["expectedArtifactId"])(e,t);const r=e=>e.id!==t;e.expectedArtifacts=(null!=(a=e.expectedArtifacts)?a:[]).filter(r),e.inputArtifacts=(null!=(n=e.inputArtifacts)?n:[]).filter(r)},validateFn:Tt});class It{static envVarsFromObject(e){const t=[];for(const a in e)if(e.hasOwnProperty(a)){const n={key:a,value:e[a]};t.push(n)}return t}static getSubmitButtonLabel(e){switch(e){case"createPipeline":return"Add";case"editPipeline":case"editClonePipeline":return"Done";case"clone":return"Clone";default:return"Create"}}static buildNewServerGroupCommand(e,t){return t=t||{},{application:e.name,stack:"",freeFormDetails:"",region:"",strategy:"",credentials:"",viewState:{mode:t.mode||"create",submitButtonLabel:It.getSubmitButtonLabel(t.mode||"create")},selectedProvider:"cloudfoundry",startApplication:!0}}static buildServerGroupCommandFromExisting(e,t,a="clone"){const n=this.buildNewServerGroupCommand(e,{mode:a});return n.credentials="",n.manifest={direct:{memory:t.memory?t.memory+"M":"1024M",diskQuota:t.diskQuota?t.diskQuota+"M":"1024M",buildpacks:t.droplet&&t.droplet.buildpacks?t.droplet.buildpacks.map(e=>e.name):[],instances:t.instances?t.instances.length:1,routes:t.loadBalancers||[],environment:It.envVarsFromObject(t.env),services:(t.serviceInstances||[]).map(e=>e.name),healthCheckType:"port"}},n.region="",n.stack=t.stack,n.freeFormDetails=t.detail,n.source={asgName:t.name,region:t.region,account:t.account},n}static buildNewServerGroupCommandForPipeline(e,t){const a=this.buildNewServerGroupCommand({name:t.application},{mode:"editPipeline"});return a.viewState={...a.viewState,pipeline:t,requiresTemplateSelection:!0,stage:e},a}static buildServerGroupCommandFromPipeline(e,t,a,n){const r=this.buildNewServerGroupCommand(e,{mode:"editPipeline"});return r.credentials=t.account,r.applicationArtifact=t.applicationArtifact,r.delayBeforeDisableSec=t.delayBeforeDisableSec,r.manifest=t.manifest,r.maxRemainingAsgs=t.maxRemainingAsgs,r.region=t.region,r.rollback=t.rollback,r.strategy=t.strategy,r.startApplication=t.startApplication,r.targetPercentages=t.targetPercentages,r.delayBeforeScaleDownSec=t.delayBeforeScaleDownSec,t.stack&&(r.stack=t.stack),t.freeFormDetails&&(r.freeFormDetails=t.freeFormDetails),r.viewState={...r.viewState,pipeline:n,stage:a},r}static buildCloneServerGroupCommandFromPipeline(e,t){const a=this.buildNewServerGroupCommand({name:t.application},{mode:"editClonePipeline"});return a.credentials=e.credentials,a.capacity=e.capacity,a.account=e.account,a.delayBeforeDisableSec=e.delayBeforeDisableSec,a.freeFormDetails=e.freeFormDetails||a.freeFormDetails,a.maxRemainingAsgs=e.maxRemainingAsgs,a.region=e.region,a.startApplication=void 0===e.startApplication||e.startApplication,a.stack=e.stack||a.stack,a.strategy=e.strategy,a.target=e.target,a.targetCluster=e.targetCluster,a.manifest=e.manifest||a.manifest,a.source=e.source,a.viewState={...a.viewState,pipeline:t,stage:e},a}}class Gt{constructor(e){this.$q=e}buildNewServerGroupCommand(e,t){return this.$q.when(It.buildNewServerGroupCommand(e,t))}buildServerGroupCommandFromExisting(e,t,a="clone"){return this.$q.when(It.buildServerGroupCommandFromExisting(e,t,a))}buildNewServerGroupCommandForPipeline(e,t){return this.$q.when(It.buildNewServerGroupCommandForPipeline(e,t))}buildServerGroupCommandFromPipeline(e,t,a,n){return this.$q.when(It.buildServerGroupCommandFromPipeline(e,t,a,n))}buildCloneServerGroupCommandFromPipeline(e,t){return this.$q.when(It.buildCloneServerGroupCommandFromPipeline(e,t))}}Gt.$inject=["$q"];class Bt extends Ge.Component{constructor(e){super(e),this.state={templateSelectionText:{copied:["account, region, cluster name (stack, details)","routes","service instances","instance settings","environment variables"],notCopied:["artifacts"],additionalCopyText:""}}}render(){const{app:e,command:t,onDismiss:a,onTemplateSelected:n}=this.props,{templateSelectionText:r}=this.state;return Ge.createElement(W,{cloudProvider:"cloudfoundry",application:e,command:t,onDismiss:a,onTemplateSelected:n,templateSelectionText:r})}}class Mt extends Ge.Component{constructor(){super(...arguments),this.excludedArtifactTypePatterns=[P.KUBERNETES,P.FRONT50_PIPELINE_TEMPLATE],this.onExpectedArtifactSelected=e=>{this.props.formik.setFieldValue("applicationArtifact",{artifactId:e.id})},this.onArtifactChanged=e=>{this.props.formik.setFieldValue("applicationArtifact",{artifact:e})}}static get LABEL(){return"Artifact"}validate(e){const{applicationArtifact:t}=this.props.formik.values,a={};return t&&(t.artifact&&t.artifact.type&&t.artifact.reference||t.artifactId)||(a.applicationArtifact="Application artifact information is required"),a}render(){const{formik:e,stage:t,pipeline:a}=this.props,n=e.values.applicationArtifact;return Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-11"},Ge.createElement("div",{className:"StandardFieldLayout flex-container-h margin-between-lg"},Ge.createElement("div",{className:"flex-grow"},Ge.createElement(Q,{pipeline:a,stage:t,expectedArtifactId:n&&n.artifactId,artifact:n&&n.artifact,onExpectedArtifactSelected:this.onExpectedArtifactSelected,onArtifactEdited:this.onArtifactChanged,excludedArtifactTypePatterns:this.excludedArtifactTypePatterns,renderLabel:e=>Ge.createElement(pt,{label:"Artifact"},e)})))))}}class Pt extends Ge.Component{constructor(e){super(e);const{source:t}=e;this.props.formik.setFieldValue("source",t)}render(){const{source:e}=this.props;return Ge.createElement("div",null,Ge.createElement("div",{className:"form-group row"},Ge.createElement("label",{className:"col-md-3 col-form-label sm-label-right"},"Account"),Ge.createElement("div",{className:"col-md-7"},Ge.createElement("input",{className:"form-control",type:"text",id:"cluster",value:e.account,readOnly:!0}))),Ge.createElement("div",{className:"form-group row"},Ge.createElement("label",{className:"col-md-3 col-form-label sm-label-right"},"Region"),Ge.createElement("div",{className:"col-md-7"},Ge.createElement("input",{className:"form-control",type:"text",id:"cluster",value:e.region,readOnly:!0}))),Ge.createElement("div",{className:"form-group row"},Ge.createElement("label",{className:"col-md-3 col-form-label sm-label-right"},"Server Group"),Ge.createElement("div",{className:"col-md-7"},Ge.createElement("input",{className:"form-control",type:"text",id:"cluster",value:e.asgName,readOnly:!0}))))}}class qt extends Ge.Component{constructor(){super(...arguments),this.handlePercentChange=(e,t,a)=>{const n=this.props.command.targetPercentages;n[a]=t,ke(this.props.command,e,n),this.forceUpdate()},this.onDelete=e=>{const t=this.props.command.targetPercentages;t.splice(e,1),ke(this.props.command,"targetPercentages",t),this.forceUpdate()},this.addPercent=()=>{const e=this.props.command.targetPercentages;e.push(100),ke(this.props.command,"targetPercentages",e),this.forceUpdate()},this.handleChange=(e,t)=>{ke(this.props.command,e,t),this.forceUpdate()}}render(){const{command:e}=this.props;return Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("div",{className:"col-md-12 checkbox"},Ge.createElement("label",null,Ge.createElement("input",{type:"checkbox",checked:e.rollback.onFailure,onChange:e=>this.handleChange("rollback.onFailure",e.target.checked)}),"Rollback to previous server group if deployment fails ",Ge.createElement(u,{id:"strategy.rollingRedBlack.rollback"}))),Ge.createElement("div",{className:"col-md-12 form-inline sp-margin-m-bottom sp-margin-m-top"},Ge.createElement("label",null,"Wait Before Scale Down  ",Ge.createElement(u,{content:"Time to wait before scaling down source server group"})),Ge.createElement("div",null,Ge.createElement("input",{className:"form-control input-sm",style:{width:"60px"},min:"0",type:"number",value:e.delayBeforeDisableSec,onChange:e=>this.handleChange("delayBeforeDisableSec",e.target.value),placeholder:"0"}),"  seconds")),Ge.createElement("div",{className:"col-md-12 form-inline sp-margin-m-bottom"},Ge.createElement("label",null,"Maximum number of server groups to leave  ",Ge.createElement(u,{id:"strategy.redblack.maxRemainingAsgs"})),Ge.createElement("div",null,Ge.createElement("input",{className:"form-control input-sm",style:{width:"60px"},min:"2",type:"number",value:e.maxRemainingAsgs,onChange:e=>this.handleChange("maxRemainingAsgs",e.target.value)}),"  server groups")),Ge.createElement("div",{className:"col-md-12 form-inline sp-margin-m-bottom"},Ge.createElement("label",null,"Wait Before Cluster Scale Down  ",Ge.createElement(u,{content:"Time to wait before scaling down the cluster after deployment"})),Ge.createElement("div",null,Ge.createElement("input",{className:"form-control input-sm",style:{width:"60px"},min:"0",type:"number",value:e.delayBeforeScaleDownSec,onChange:e=>this.handleChange("delayBeforeScaleDownSec",e.target.value),placeholder:"0"}),"  seconds")),Ge.createElement("label",null,"Scale by percentages  ",Ge.createElement(u,{content:"Steps to get to full capacity in percent"})),Ge.createElement("table",{className:"table table-condensed packed metadata"},Ge.createElement("tbody",null,e.targetPercentages.map((e,t)=>Ge.createElement("tr",{key:t},Ge.createElement("td",null,Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement("input",{className:"form-control",min:"0",type:"number",value:e,onChange:e=>this.handlePercentChange("targetPercentages",e.target.value,t),placeholder:"100"}))),Ge.createElement("td",null,Ge.createElement("a",{className:"btn btn-link sm-label",onClick:()=>this.onDelete(t)},Ge.createElement("span",{className:"glyphicon glyphicon-trash"})))))),Ge.createElement("tfoot",null,Ge.createElement("tr",null,Ge.createElement("td",{colSpan:2},Ge.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>this.addPercent()},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add percentage")))))))}}class $t extends Ge.Component{constructor(){super(...arguments),this.state={strategies:[{label:"None",description:"Creates the next server group with no impact on existing server groups",key:""},{label:"Highlander",description:"Destroys <i>all</i> previous server groups in the cluster as soon as new server group passes health checks",key:"highlander"},{label:"Red/Black",description:"Disables <i>all</i> previous server groups in the cluster as soon as new server group passes health checks",key:"redblack",additionalFields:["maxRemainingAsgs"],AdditionalFieldsComponent:J,initializationMethod:e=>{Fe(e,{rollback:{onFailure:!1},maxRemainingAsgs:2,delayBeforeDisableSec:0,delayBeforeScaleDownSec:0,scaleDown:!1})}},{label:"Rolling Red/Black",description:"Gradually replaces <i>all</i> previous server group instances in the cluster as soon as new server group instances pass health checks",key:"cfrollingredblack",additionalFields:["targetPercentages"],AdditionalFieldsComponent:qt,initializationMethod:e=>{Fe(e,{rollback:{onFailure:!1},targetPercentages:e.targetPercentages?e.targetPercentages:[50,100],delayBeforeDisableSec:0,delayBeforeScaleDownSec:0,maxRemainingAsgs:2,scaleDown:!1})}}],currentStrategy:null,AdditionalFieldsComponent:void 0},this.strategyChanged=e=>{this.selectStrategy(e.key)},this.strategyOptionRenderer=e=>Ge.createElement("div",{className:"body-regular"},Ge.createElement("strong",null,Ge.createElement(Y,{tag:"span",message:e.label})),Ge.createElement("div",null,Ge.createElement(Y,{tag:"span",message:e.description})))}selectStrategy(e){const{command:t,onStrategyChange:a}=this.props,n=this.state.strategies.find(e=>e.key===this.state.currentStrategy),r=this.state.strategies.find(t=>t.key===e);let s;n&&n.additionalFields&&n.additionalFields.forEach(e=>{r&&r.additionalFields&&r.additionalFields.includes(e)||xe(t,e)}),r&&(s=r.AdditionalFieldsComponent,r.initializationMethod&&r.initializationMethod(t)),t.strategy=e,a&&r&&a(t,r),this.setState({currentStrategy:e,AdditionalFieldsComponent:s})}componentDidMount(){this.selectStrategy(this.props.command.strategy)}render(){const{command:e,onFieldChange:t}=this.props,{AdditionalFieldsComponent:a,currentStrategy:n,strategies:r}=this.state,s=Boolean(a);return r&&r.length?Ge.createElement("div",null,Ge.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},Ge.createElement("div",{className:"sm-label-right",style:{paddingLeft:"13px"}},"Strategy  ",Ge.createElement(u,{id:"core.serverGroup.strategy"})),Ge.createElement("div",{className:"flex-grow"},Ge.createElement(We,{clearable:!1,required:!0,options:r,placeholder:"None",valueKey:"key",value:n,optionRenderer:this.strategyOptionRenderer,valueRenderer:e=>Ge.createElement(Ge.Fragment,null,e.label),onChange:this.strategyChanged}))),s&&Ge.createElement("div",{className:"form-group col-md-9 col-md-offset-3",style:{marginTop:"5px",float:"right"}},Ge.createElement(a,{command:e,onChange:t}))):null}}function Lt(e,t){void 0===t&&(t={});var a=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===a&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}Lt(".cloud-foundry-radio-button {\n margin-left: 20px;\n padding-left: 20px;\n padding-right: 20px;\n}\n.cloud-foundry-input {\n margin-left: 15px;\n}\n.cloud-foundry-checkbox input[type='checkbox'] {\n margin-left: -5px;\n margin-top: 9px;\n}\n");class Ot extends Ge.Component{constructor(){super(...arguments),this.destroy$=new _e,this.state={accounts:[],regions:[]},this.accountChanged=()=>{this.updateRegionList(),this.props.formik.setFieldValue("region","")},this.updateRegionList=()=>{const e=Ne(this.props.formik.values,"credentials",void 0);e&&He(b.getRegionsForAccount(e)).pipe(je(this.destroy$)).subscribe(e=>this.setState({regions:e}))},this.strategyChanged=(e,t)=>{this.props.formik.setFieldValue("strategy",t.key)},this.onStrategyFieldChange=(e,t)=>{this.props.formik.setFieldValue(e,t)}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>{this.setState({accounts:e}),this.updateRegionList()})}componentWillUnmount(){this.destroy$.next()}render(){const{formik:e}=this.props,{accounts:t,regions:a}=this.state,{values:n}=e;return Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-11"},Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:"credentials",label:"Account",input:e=>Ge.createElement(E,{inputClassName:"cloudfoundry-react-select",...e,stringOptions:t&&t.map(e=>e.name),clearable:!1}),onChange:this.accountChanged,required:!0})),Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:"region",label:"Region",input:e=>Ge.createElement(E,{...e,stringOptions:a&&a.map(e=>e.name),inputClassName:"cloudfoundry-react-select",clearable:!1}),required:!0})),Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:"stack",label:"Stack",input:e=>Ge.createElement(h,{...e}),help:Ge.createElement(u,{id:"cf.serverGroup.stack"})})),Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:"freeFormDetails",label:"Detail",input:e=>Ge.createElement(h,{...e}),help:Ge.createElement(u,{id:"cf.serverGroup.detail"})})),Ge.createElement("div",{className:"sp-margin-m-bottom cloud-foundry-checkbox"},Ge.createElement(C,{name:"startApplication",label:"Start on creation",input:e=>Ge.createElement(Z,{...e}),help:Ge.createElement(u,{id:"cf.serverGroup.startApplication"})})),("editPipeline"===n.viewState.mode||"createPipeline"===n.viewState.mode||"editClonePipeline"===n.viewState.mode)&&Ge.createElement($t,{onFieldChange:this.onStrategyFieldChange,onStrategyChange:this.strategyChanged,command:n})))}validate(e){const t={};return e.stack&&!e.stack.match(/^[a-zA-Z0-9]*$/)&&(t.stack="Stack can only contain letters and numbers."),e.freeFormDetails&&!e.freeFormDetails.match(/^[a-zA-Z0-9-]*$/)&&(t.freeFormDetails="Detail can only contain letters, numbers, and dashes."),t}}class Vt extends Ge.Component{constructor(){super(...arguments),this.destroy$=new _e,this.state={accounts:[]},this.strategyOptionRenderer=e=>Ge.createElement("div",{className:"body-regular"},Ge.createElement("strong",null,Ge.createElement(Y,{tag:"span",message:e.label})),Ge.createElement("div",null,Ge.createElement(Y,{tag:"span",message:e.description})))}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{application:e,formik:t}=this.props,{accounts:a}=this.state;return Ge.createElement("div",{className:"form-group"},Ge.createElement(bt,{componentName:"source",accounts:a,application:e,cloudProvider:"cloudfoundry",clusterField:"clusterName",credentialsField:"account",formik:t}),Ge.createElement("div",{className:"col-md-9"},Ge.createElement("div",{className:"sp-margin-m-bottom"},Ge.createElement(C,{name:"target",label:"Target",input:e=>Ge.createElement(E,{inputClassName:"cloudfoundry-react-select",...e,options:N.TARGET_LIST.map(e=>({label:e.label,value:e.val,description:e.description})),optionRenderer:this.strategyOptionRenderer,clearable:!1}),required:!0}))))}validate(e){return{}}}class zt extends Ge.Component{constructor(){super(...arguments),this.defaultDirectManifest={direct:{memory:"1024M",diskQuota:"1024M",instances:1,buildpacks:[],healthCheckType:"port",routes:[],environment:[],services:[]}},this.excludedArtifactTypePatterns=[P.KUBERNETES,P.DOCKER_IMAGE,P.FRONT50_PIPELINE_TEMPLATE],this.manifestSourceUpdated=e=>{switch(e){case"artifact":this.props.formik.setFieldValue("manifest",{}),this.capacityUpdated("1");break;case"direct":this.props.formik.setFieldValue("manifest",this.defaultDirectManifest)}},this.capacityUpdated=e=>{this.props.formik.setFieldValue("capacity.min",e),this.props.formik.setFieldValue("capacity.max",e),this.props.formik.setFieldValue("capacity.desired",e)},this.getArtifactInput=()=>{const{formik:e,stage:t,pipeline:a}=this.props,n=e.values.manifest;return Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-11"},Ge.createElement("div",{className:"StandardFieldLayout flex-container-h margin-between-lg"},Ge.createElement("div",{className:"flex-grow"},Ge.createElement(Q,{pipeline:a,stage:t,expectedArtifactId:n&&n.artifactId,artifact:n&&n.artifact,onExpectedArtifactSelected:this.onExpectedArtifactSelected,onArtifactEdited:this.onArtifactChanged,excludedArtifactTypePatterns:this.excludedArtifactTypePatterns,renderLabel:e=>Ge.createElement(pt,{label:"Artifact"},e)})))))},this.onExpectedArtifactSelected=e=>{this.props.formik.setFieldValue("manifest",{artifactId:e.id})},this.onArtifactChanged=e=>{this.props.formik.setFieldValue("manifest",{artifact:e})},this.getDirectInput=()=>{const e=this.props.formik.values.manifest.direct;return Ge.createElement("div",null,Ge.createElement(gt,{diskQuotaFieldName:"manifest.direct.diskQuota",instancesFieldName:"manifest.direct.instances",memoryFieldName:"manifest.direct.memory"}),Ge.createElement(ut,{fieldName:"manifest.direct.buildpacks"}),Ge.createElement(ht,{healthCheckHttpEndpointFieldName:"manifest.direct.healthCheckHttpEndpoint",healthCheckType:e.healthCheckType,healthCheckTypeFieldName:"manifest.direct.healthCheckType"}),Ge.createElement(vt,{fieldName:"manifest.direct.routes"}),Ge.createElement(Ct,{fieldName:"manifest.direct.environment"}),Ge.createElement(ft,{fieldName:"manifest.direct.services"}))}}render(){const e=this.props.formik.values.manifest,t=e&&!!e.direct;return Ge.createElement(Ge.Fragment,null,Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-11"},Ge.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},Ge.createElement("div",{className:"sm-label-right"},"Source Type"),Ge.createElement("div",{className:"flex-grow"},Ge.createElement(g,{inline:!0,value:t?"direct":"artifact",options:[{label:"Artifact",value:"artifact"},{label:"Form",value:"direct"}],onChange:e=>this.manifestSourceUpdated(e.target.value)}))))),t?this.getDirectInput():this.getArtifactInput())}validate(e){const t={},a=e=>/\d+[MG]/.test(e);if(!this.props.formik.values.manifest)return t.manifest="No manifest information provided",t;const n=this.props.formik.values.manifest.direct;if(n){if(a(n.memory)||(t.manifest=t.manifest||{},t.manifest.memory="Provide a size (e.g.: 256M, 1G)"),a(n.diskQuota)||(t.manifest=t.manifest||{},t.manifest.diskQuota="Provide a size (e.g.: 256M, 1G)"),n.routes){const e=n.routes.map(e=>e&&null===/^([-\w]+)\.([-.\w]+)(:\d+)?([-/\w]+)?$/gm.exec(e)?'A route did not match the expected format "host.some.domain[:9999][/some/path]"':null);e.some(e=>!!e)&&(t.manifest=t.manifest||{},t.manifest.routes=e)}if(n.environment){const e=[],a=n.environment.map(t=>{let a;if(t.key){/^\w+$/g.exec(t.key)?e.filter(e=>e===t.key).length>0?a={key:"Duplicate variable name"}:e.push(t.key):a={key:"This field must be alphanumeric"}}return a});a.some(e=>!!e)&&(t.manifest=t.manifest||{},t.manifest.environment=a)}}else{const{manifest:e}=this.props.formik.values;e&&(e.artifact&&e.artifact.type&&e.artifact.reference||e.artifactId)||(t.manifest="Manifest artifact information is required")}return t}}zt.LABEL="Configuration";Lt(".cloudfoundry-react-select {\n width: 100%;\n}\n");const _t=class e extends Ge.Component{constructor(e){super(e),this.templateSelected=()=>{this.setState({requiresTemplateSelection:!1}),this.initialize()},this.initialize=()=>{this.setState({loading:!1})},this.onTaskComplete=()=>{this.props.application.serverGroups.refresh()},this.submit=e=>{e.selectedProvider="cloudfoundry","createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode||"editClonePipeline"===e.viewState.mode?this.props.closeModal&&this.props.closeModal(e):(e.viewState.mode,this.state.taskMonitor.submit(()=>n.serverGroupWriter.cloneServerGroup(e,this.props.application)))};const t=Ne(e,"command.viewState.pipeline",void 0),a=Ne(e,"command.viewState.stage",void 0),r=Ne(e,"command.viewState.mode",void 0);this.state={pipeline:t,isClone:!!e.isSourceConstant||"editClonePipeline"===r,loading:!1,requiresTemplateSelection:Ne(e,"command.viewState.requiresTemplateSelection",!1),stage:a,taskMonitor:new A({application:e.application,title:"Creating your server group",modalInstance:A.modalInstanceEmulation(()=>this.props.dismissModal()),onTaskComplete:this.onTaskComplete})}}static show(t){return R.show(e,t,{dialogClassName:"wizard-modal modal-lg"})}render(){const{loading:e,pipeline:t,isClone:a,requiresTemplateSelection:n,stage:r,taskMonitor:s}=this.state,{application:i,command:l,dismissModal:o,title:c,isSourceConstant:d}=this.props;return n?Ge.createElement(Bt,{app:i,command:l,onDismiss:o,onTemplateSelected:this.templateSelected}):Ge.createElement(X,{heading:c,initialValues:l,loading:e,taskMonitor:s,dismissModal:o,closeModal:this.submit,submitButtonLabel:l.viewState.submitButtonLabel,render:({formik:e,nextIdx:n,wizard:s})=>Ge.createElement(Ge.Fragment,null,Ge.createElement(ee,{label:"Basic Settings",wizard:s,order:n(),render:({innerRef:t})=>Ge.createElement(Ot,{ref:t,formik:e})}),a&&d&&Ge.createElement(ee,{label:"Application",wizard:s,order:n(),render:({innerRef:t})=>Ge.createElement(Pt,{ref:t,formik:e,source:l.source})}),a&&!d&&Ge.createElement(ee,{label:"Source",wizard:s,order:n(),render:({innerRef:t})=>Ge.createElement(Vt,{application:i,ref:t,formik:e})}),!a&&Ge.createElement(ee,{label:"Application",wizard:s,order:n(),render:({innerRef:a})=>Ge.createElement(Mt,{ref:a,formik:e,pipeline:t,stage:r})}),Ge.createElement(ee,{label:"Manifest",wizard:s,order:n(),render:({innerRef:a})=>Ge.createElement(zt,{ref:a,formik:e,pipeline:t,stage:r})}))})}};_t.defaultProps={closeModal:D,dismissModal:D};let Ht=_t;class Kt extends Ge.Component{constructor(e){super(e),this.handleResult=e=>{this.props.updateStageField({credentials:e.credentials,capacity:e.capacity,account:e.account,delayBeforeDisableSec:e.delayBeforeDisableSec,freeFormDetails:e.freeFormDetails,maxRemainingAsgs:e.maxRemainingAsgs,region:e.region,startApplication:e.startApplication,stack:e.stack,strategy:e.strategy,target:e.target,targetCluster:e.targetCluster,manifest:e.manifest,source:e.source}),this.setState({buttonText:"Edit clone configuration"})},this.addCluster=()=>{const{application:e,stage:t,pipeline:a}=this.props,n=It.buildCloneServerGroupCommandFromPipeline(t,a);Ht.show({application:e,command:n,isSourceConstant:!1,title:"Clone Cluster"}).then(this.handleResult).catch(()=>{})},this.props.updateStageField({cloudProvider:"cloudfoundry",application:e.application.name}),this.state={buttonText:e.stage.destination?"Edit clone configuration":"Add clone configuration"}}render(){const{stage:e}=this.props,{buttonText:t}=this.state,a=N.TARGET_LIST;return Ge.createElement("div",{className:"form-horizontal"},Ge.createElement("div",null,Ge.createElement("h4",null,"Clone Source"),Ge.createElement("table",{className:"table table-condensed table-deployStage"},Ge.createElement("thead",null,Ge.createElement("tr",null,Ge.createElement("th",null,"Account"),Ge.createElement("th",null,"Region"),Ge.createElement("th",null,"Cluster"),Ge.createElement("th",null,"Target"))),Ge.createElement("tbody",null,Ge.createElement("tr",null,Ge.createElement("td",null,e.source?e.source.account:""),Ge.createElement("td",null,e.source?e.source.region:""),Ge.createElement("td",null,e.source?e.source.clusterName:""),Ge.createElement("td",null,e.source?a.filter(t=>t.val===e.source.target).map(e=>e.label):""))))),Ge.createElement("div",null,Ge.createElement("h4",null,"Clone Destination"),Ge.createElement("table",{className:"table table-condensed table-deployStage"},Ge.createElement("thead",null,Ge.createElement("tr",null,Ge.createElement("th",null,"Account"),Ge.createElement("th",null,"Region"))),Ge.createElement("tbody",null,Ge.createElement("tr",null,Ge.createElement("td",null,e.credentials),Ge.createElement("td",null,e.region))))),Ge.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addCluster()},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," ",t))}}z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:Kt,configAccountExtractor:e=>[e.credentials],key:"cloneServerGroup",provides:"cloneServerGroup",validators:[]});const jt=class e extends Ge.Component{constructor(e,t){super(e,t),this.destroy$=new _e,this.loadRegions=e=>{this.setState({regions:[]}),He(b.getRegionsForAccount(e)).pipe(je(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.onTemplateArtifactEdited=(e,t)=>{this.props.formik.setFieldValue(`serviceBindingRequests[${t}].id`,null),this.props.formik.setFieldValue(`serviceBindingRequests[${t}].artifact`,e)},this.onTemplateArtifactSelected=(e,t)=>{this.props.formik.setFieldValue(`serviceBindingRequests[${t}].id`,e),this.props.formik.setFieldValue(`serviceBindingRequests[${t}].artifact`,null)},this.addInputArtifact=()=>{const e=[...this.props.formik.values.serviceBindingRequests,{serviceInstanceName:"",updatable:!1}];this.props.formik.setFieldValue("serviceBindingRequests",e)},this.removeInputArtifact=e=>{const t=[...this.props.formik.values.serviceBindingRequests];t.splice(e,1),this.props.formik.setFieldValue("serviceBindingRequests",t)},this.targetUpdated=e=>{this.props.formik.setFieldValue("target",e)},this.restageRequiredUpdated=e=>{this.props.formik.setFieldValue("restageRequired",e.target.checked),this.props.formik.setFieldValue("restartRequired",!e.target.checked)},this.restartRequiredUpdated=e=>{this.props.formik.setFieldValue("restartRequired",e.target.checked),this.props.formik.setFieldValue("restageRequired",!e.target.checked)},this.updatableBindingUpdated=(e,t)=>{this.props.formik.setFieldValue(`serviceBindingRequests[${t}].updatable`,e.target.checked)},this.accountRegionClusterUpdated=e=>{this.props.formik.setFieldValue("cluster",e.cluster),this.props.formik.setFieldValue("credentials",e.credentials),this.props.formik.setFieldValue("region",e.region)},this.state={accounts:[],regions:[],application:e.application},He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentDidMount(){const e=this.props.formik.values;this.props.formik.setFieldValue("cloudProvider","cloudfoundry"),e.serviceBindingRequests&&0===e.serviceBindingRequests.length&&this.props.formik.setFieldValue("serviceBindingRequests",[{serviceInstanceName:"",updatable:!1}]),e.credentials&&this.loadRegions(e.credentials)}componentWillUnmount(){this.destroy$.next()}render(){const t=this.props.formik.values,{accounts:a,application:n}=this.state,{target:r}=t,{TargetSelect:s}=y;return Ge.createElement(Ge.Fragment,null,Ge.createElement("h4",null,"Basic Settings"),Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(Et,{accounts:a,application:n,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.accountRegionClusterUpdated,component:t})),Ge.createElement(f,{label:"Target"},Ge.createElement(s,{model:{target:r},options:N.TARGET_LIST,onChange:this.targetUpdated})),Ge.createElement(f,{label:"Restage Required"},Ge.createElement("input",{type:"checkbox",checked:t.restageRequired,onChange:this.restageRequiredUpdated})),Ge.createElement(f,{label:"Restart Required"},Ge.createElement("input",{type:"checkbox",checked:t.restartRequired,onChange:this.restartRequiredUpdated})),Ge.createElement("h4",null,"Service Bindings"),t.serviceBindingRequests&&t.serviceBindingRequests.length>0&&Ge.createElement("div",{className:"row form-group"},t.serviceBindingRequests.map((a,n)=>Ge.createElement("div",{key:n},Ge.createElement("div",{className:"col-md-offset-1 col-md-8"},Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement(h,{onChange:e=>{this.props.formik.setFieldValue(`serviceBindingRequests[${n}].serviceInstanceName`,e.target.value)},value:a.serviceInstanceName})),Ge.createElement(B,{artifact:a.artifact,excludedArtifactTypePatterns:e.excludedArtifactTypes,expectedArtifactId:a.id,label:"Service Binding Parameters",onArtifactEdited:e=>{this.onTemplateArtifactEdited(e,n)},onExpectedArtifactSelected:e=>this.onTemplateArtifactSelected(e.id,n),pipeline:this.props.pipeline,stage:t}),Ge.createElement(f,{label:"Updatable Binding"},Ge.createElement("input",{type:"checkbox",checked:a.updatable,onChange:e=>this.updatableBindingUpdated(e,n)}))),Ge.createElement("div",{className:"col-md-1"},Ge.createElement("div",{className:"form-control-static"},Ge.createElement("button",{onClick:()=>this.removeInputArtifact(n)},Ge.createElement("span",{className:"glyphicon glyphicon-trash"}),Ge.createElement("span",{className:"sr-only"},"Remove field"))))))),Ge.createElement(f,{fieldColumns:8,label:""},Ge.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addInputArtifact()},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),"Add Service Binding")))}};jt.excludedArtifactTypes=M(P.BITBUCKET_FILE,P.CUSTOM_OBJECT,P.EMBEDDED_BASE64,P.GCS_OBJECT,P.GITHUB_FILE,P.GITLAB_FILE,P.S3_OBJECT,P.HTTP_FILE,P.ORACLE_OBJECT);let Wt=jt;function Qt(e){const t=new q(e);return t.field("credentials","Account").required(),t.field("region","Region").required(),t.field("cluster","Cluster").required(),t.field("target","Target").required(),t.field("serviceBindingRequests","Service Binding Requests").required().withValidators(e=>{if(!function(e){if((null==e?void 0:e.length)<1)return!1;return e.every(e=>null==e?void 0:e.serviceInstanceName)}(e))return"There should be at least one service binding request. At a minimum, each request must have a service instance name."}),t.validateForm()}z.pipeline.registerStage({label:"Create Service Bindings",description:"Create CF service bindings with optional parameters.",key:"cloudFoundryCreateServiceBindings",component:function({application:e,pipeline:t,stage:a,updateStage:n}){const r=Ge.useMemo(()=>({serviceBindingRequests:[],restageRequired:!0,restartRequired:!1,credentials:"",region:"",...Ce(a)}),[]);return Ge.createElement($,{application:e,onChange:n,pipeline:t,stage:r,validate:Qt,render:e=>Ge.createElement(Wt,{...e})})},producesArtifacts:!1,cloudProvider:"cloudfoundry",executionDetailsSections:[_],validateFn:Qt});class Jt extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.clearAndReloadRegions=()=>{this.setState({regions:[]}),He(b.getRegionsForAccount(this.props.stage.credentials)).pipe(je(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.serviceInstanceNameUpdated=e=>{this.props.updateStageField({serviceInstanceName:e.target.value})},this.serviceKeyNameUpdated=e=>{this.props.updateStageField({serviceKeyName:e.target.value})},this.accountUpdated=e=>{const t=e.target.value;this.setState({regions:[]}),this.props.updateStageField({credentials:t,region:""}),this.clearAndReloadRegions()},this.regionUpdated=e=>{const t=e.target.value;this.props.updateStageField({region:t})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],regions:[]}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e.map(e=>e.name)})),this.props.stage.credentials&&this.clearAndReloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{credentials:e,region:t,serviceInstanceName:a,serviceKeyName:n}=this.props.stage,{accounts:r,regions:s}=this.state;return Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(f,{label:"Account"},Ge.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:e,stringOptions:r})),Ge.createElement(f,{label:"Region"},Ge.createElement(E,{clearable:!1,onChange:this.regionUpdated,value:t,stringOptions:s})),Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:a})),Ge.createElement(f,{label:"Service Key Name"},Ge.createElement(h,{type:"text",className:"form-control",onChange:this.serviceKeyNameUpdated,value:n})))}}z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:Jt,description:"Create a service key",executionDetailsSections:[Ft,_],key:"createServiceKey",label:"Create Service Key",validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"region",preventSave:!0},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0},{type:"requiredField",fieldName:"serviceKeyName",preventSave:!0}]});class Yt extends Ge.Component{constructor(e,t){super(e,t),this.destroy$=new _e,this.loadRegions=e=>{this.setState({regions:[]}),He(b.getRegionsForAccount(e)).pipe(je(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.addInputArtifact=()=>{const e=[...this.props.formik.values.serviceUnbindingRequests,{serviceInstanceName:"",updatable:!1}];this.props.formik.setFieldValue("serviceUnbindingRequests",e)},this.removeInputArtifact=e=>{const t=[...this.props.formik.values.serviceUnbindingRequests];t.splice(e,1),this.props.formik.setFieldValue("serviceUnbindingRequests",t)},this.targetUpdated=e=>{this.props.formik.setFieldValue("target",e)},this.accountRegionClusterUpdated=e=>{this.props.formik.setFieldValue("cluster",e.cluster),this.props.formik.setFieldValue("credentials",e.credentials),this.props.formik.setFieldValue("region",e.region)},this.state={accounts:[],regions:[],application:e.application},He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentDidMount(){const e=this.props.formik.values;this.props.formik.setFieldValue("cloudProvider","cloudfoundry"),e.serviceUnbindingRequests&&0===e.serviceUnbindingRequests.length&&this.props.formik.setFieldValue("serviceUnbindingRequests",[{serviceInstanceName:"",updatable:!1}]),e.credentials&&this.loadRegions(e.credentials)}componentWillUnmount(){this.destroy$.next()}render(){const e=this.props.formik.values,{accounts:t,application:a}=this.state,{target:n}=e,{TargetSelect:r}=y;return Ge.createElement(Ge.Fragment,null,Ge.createElement("h4",null,"Basic Settings"),Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(Et,{accounts:t,application:a,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.accountRegionClusterUpdated,component:e})),Ge.createElement(f,{label:"Target"},Ge.createElement(r,{model:{target:n},options:N.TARGET_LIST,onChange:this.targetUpdated})),Ge.createElement("h4",null,"Service Unbindings"),e.serviceUnbindingRequests&&e.serviceUnbindingRequests.length>0&&Ge.createElement("div",{className:"row form-group"},e.serviceUnbindingRequests.map((e,t)=>Ge.createElement("div",{key:t},Ge.createElement("div",{className:"col-md-offset-1 col-md-8"},Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement(h,{onChange:e=>{this.props.formik.setFieldValue(`serviceUnbindingRequests[${t}].serviceInstanceName`,e.target.value)},value:e.serviceInstanceName}))),Ge.createElement("div",{className:"col-md-1"},Ge.createElement("div",{className:"form-control-static"},Ge.createElement("button",{onClick:()=>this.removeInputArtifact(t)},Ge.createElement("span",{className:"glyphicon glyphicon-trash"}),Ge.createElement("span",{className:"sr-only"},"Remove field"))))))),Ge.createElement(f,{fieldColumns:8,label:""},Ge.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addInputArtifact()},Ge.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),"Add Service Unbinding")))}}function Zt(e){const t=new q(e);return t.field("credentials","Account").required(),t.field("region","Region").required(),t.field("cluster","Cluster").required(),t.field("target","Target").required(),t.field("serviceUnbindingRequests","Service Binding Requests").required().withValidators(e=>{if(!function(e){if((null==e?void 0:e.length)<1)return!1;return e.every(e=>e.serviceInstanceName)}(e))return"There should be at least one service binding request. At a minimum, each request must have a service instance name."}),t.validateForm()}z.pipeline.registerStage({label:"Delete Service Bindings",description:"Delete CF service bindings with optional parameters.",key:"cloudFoundryDeleteServiceBindings",component:function({application:e,pipeline:t,stage:a,updateStage:n}){const r=Ge.useMemo(()=>({serviceUnbindingRequests:[],restageRequired:!0,restartRequired:!1,credentials:"",region:"",...Ce(a)}),[]);return Ge.createElement($,{application:e,onChange:n,pipeline:t,stage:r,validate:Zt,render:e=>Ge.createElement(Yt,{...e})})},producesArtifacts:!1,cloudProvider:"cloudfoundry",executionDetailsSections:[_],validateFn:Zt});class Xt extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.clearAndReloadRegions=()=>{this.setState({regions:[]}),He(b.getRegionsForAccount(this.props.stage.credentials)).pipe(je(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.serviceInstanceNameUpdated=e=>{this.props.updateStageField({serviceInstanceName:e.target.value})},this.serviceKeyNameUpdated=e=>{this.props.updateStageField({serviceKeyName:e.target.value})},this.accountUpdated=e=>{const t=e.target.value;this.setState({regions:[]}),this.props.updateStageField({credentials:t,region:""}),this.clearAndReloadRegions()},this.regionUpdated=e=>{const t=e.target.value;this.props.updateStageField({region:t})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],regions:[]}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e.map(e=>e.name)})),this.props.stage.credentials&&this.clearAndReloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{credentials:e,region:t,serviceInstanceName:a,serviceKeyName:n}=this.props.stage,{accounts:r,regions:s}=this.state;return Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(f,{label:"Account"},Ge.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:e,stringOptions:r})),Ge.createElement(f,{label:"Region"},Ge.createElement(E,{clearable:!1,onChange:this.regionUpdated,value:t,stringOptions:s})),Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:a})),Ge.createElement(f,{label:"Service Key Name"},Ge.createElement(h,{type:"text",className:"form-control",onChange:this.serviceKeyNameUpdated,value:n})))}}z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",component:Xt,description:"Delete a service key",executionDetailsSections:[Ft,_],key:"deleteServiceKey",label:"Delete Service Key",validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"region",preventSave:!0},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0},{type:"requiredField",fieldName:"serviceKeyName",preventSave:!0}]});class ea extends Ge.Component{constructor(e){super(e),this.newTagUpdated=e=>{this.setState({newTag:e.target.value})},this.addTag=()=>{const{onChange:e,tags:t}=this.props,{newTag:a}=this.state,n=t||[];if(!Ae(n,a.trim())){const t=[...n,a.trim()].sort((e,t)=>e.localeCompare(t));this.setState({tags:t,newTag:""}),e(t)}},this.deleteTag=e=>{const{onChange:t,tags:a}=this.props,n=a.slice();n.splice(e,1),this.setState({tags:n}),t(n)},this.state={newTag:"",tags:this.props.tags||[]}}render(){const{tags:e,newTag:t}=this.state;return Ge.createElement(Ge.Fragment,null,Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-md-4"},Ge.createElement("input",{type:"text",className:"form-control",name:"newTag",onChange:this.newTagUpdated,value:t})),Ge.createElement("div",{className:"col-md-2"},Ge.createElement("button",{disabled:!t.trim(),className:"btn btn-default btn-sm btn-add-tag",onClick:this.addTag},"Add Tag"))),Ge.createElement("div",null,Ge.createElement("div",null,e&&e.map((e,t)=>Ge.createElement("span",{className:"badge badge-pill",key:t}," ",e," ",Ge.createElement("button",{type:"button",className:"close small","aria-label":"Close",onClick:()=>this.deleteTag(t)},Ge.createElement("span",{"aria-hidden":"true"},"×")))))))}}class ta extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.serviceInstanceNameUpdated=e=>{this.props.onServiceChanged({...this.props.service,serviceInstanceName:e.target.value})},this.serviceUpdated=e=>{this.props.onServiceChanged({...this.props.service,service:e.target.value,servicePlan:""})},this.servicePlanUpdated=e=>{this.props.onServiceChanged({...this.props.service,servicePlan:e.target.value})},this.parametersUpdated=e=>{this.props.onServiceChanged({...this.props.service,parameters:e.target.value})},this.tagsUpdated=e=>{this.props.onServiceChanged({...this.props.service,tags:e})},this.updatableUpdated=e=>{this.props.onServiceChanged({...this.props.service,updatable:e.target.checked,versioned:!1})},this.versionedUpdated=e=>{this.props.onServiceChanged({...this.props.service,versioned:e.target.checked,updatable:!1})},this.state={serviceNamesAndPlans:[]}}componentDidUpdate(e){const{credentials:t,region:a}=this.props;(t&&t!==e.credentials||a!==e.region)&&this.loadServices(t,a)}componentDidMount(){this.loadServices(this.props.credentials,this.props.region)}componentWillUnmount(){this.destroy$.next()}loadServices(e,t){e&&t&&He(te.getServices(e,t)).pipe(je(this.destroy$)).subscribe(e=>this.setState({serviceNamesAndPlans:e}))}render(){const{service:e}=this.props,t=this.state.serviceNamesAndPlans.map(e=>e.name),a=this.state.serviceNamesAndPlans.find(t=>t.name===e.service),n=a?a.servicePlans.map(e=>e.name):[];return Ge.createElement("div",null,Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:e.serviceInstanceName})),Ge.createElement(f,{label:"Service"},Ge.createElement(E,{clearable:!1,onChange:this.serviceUpdated,value:e.service,stringOptions:t})),Ge.createElement(f,{label:"Service Plan"},Ge.createElement(E,{clearable:!1,onChange:this.servicePlanUpdated,value:e.servicePlan,stringOptions:n})),Ge.createElement(f,{label:"Tags"},Ge.createElement(ea,{tags:e.tags||[],onChange:this.tagsUpdated})),Ge.createElement(f,{label:"Parameters"},Ge.createElement(ae,{className:"form-control",onChange:this.parametersUpdated,value:e.parameters||""})),Ge.createElement(f,{label:"Updatable",helpKey:"pipeline.config.cf.createservice.updatable"},Ge.createElement("input",{type:"checkbox",disabled:!!e.versioned,checked:!!e.updatable,onChange:this.updatableUpdated})),Ge.createElement(f,{label:"Versioned",helpKey:"pipeline.config.cf.createservice.versioned"},Ge.createElement("input",{type:"checkbox",disabled:!!e.updatable,checked:!!e.versioned,onChange:this.versionedUpdated})))}}class aa extends Ge.Component{constructor(e){super(e),this.serviceInstanceNameUpdated=e=>{this.props.onServiceChanged({...this.props.service,serviceInstanceName:e.target.value})},this.syslogDrainUrlUpdated=e=>{this.props.onServiceChanged({...this.props.service,syslogDrainUrl:e.target.value})},this.routeServiceUrlUpdated=e=>{this.props.onServiceChanged({...this.props.service,routeServiceUrl:e.target.value})},this.credentialsUpdated=e=>{this.props.onServiceChanged({...this.props.service,credentials:e.target.value})},this.tagsUpdated=e=>{this.props.onServiceChanged({...this.props.service,tags:e})},this.updatableUpdated=e=>{this.props.onServiceChanged({...this.props.service,updatable:e.target.checked,versioned:!1})},this.versionedUpdated=e=>{this.props.onServiceChanged({...this.props.service,versioned:e.target.checked,updatable:!1})}}render(){const{service:e}=this.props;return Ge.createElement(Ge.Fragment,null,Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:e.serviceInstanceName})),Ge.createElement(f,{label:"Syslog Drain URL"},Ge.createElement(h,{onChange:this.syslogDrainUrlUpdated,value:e.syslogDrainUrl})),Ge.createElement(f,{label:"Route Service URL"},Ge.createElement(h,{onChange:this.routeServiceUrlUpdated,value:e.routeServiceUrl})),Ge.createElement(f,{label:"Credentials"},Ge.createElement(ae,{onChange:this.credentialsUpdated,value:e.credentials})),Ge.createElement(f,{label:"Tags"},Ge.createElement(ea,{tags:e.tags||[],onChange:this.tagsUpdated})),Ge.createElement(f,{label:"Updatable",helpKey:"pipeline.config.cf.createservice.updatable"},Ge.createElement("input",{type:"checkbox",disabled:!!e.versioned,checked:!!e.updatable,onChange:this.updatableUpdated})),Ge.createElement(f,{label:"Versioned",helpKey:"pipeline.config.cf.createservice.versioned"},Ge.createElement("input",{type:"checkbox",disabled:!!e.updatable,checked:!!e.versioned,onChange:this.versionedUpdated})))}}Lt(".cloudfoundry-deploy-service-stage .btn-add-tag {\n margin-left: 1.25rem;\n}\n.cloudfoundry-deploy-service-stage .badge {\n margin-left: 0.2rem;\n}\n.cloudfoundry-deploy-service-stage .badge .close {\n margin-left: 0.25rem;\n font-size: 100%;\n}\n");class na extends Ge.Component{constructor(e){super(e),this.defaultDirectManifest={direct:{parameters:"",service:"",serviceInstanceName:"",servicePlan:"",updatable:!1,versioned:!1}},this.destroy$=new _e,this.accountUpdated=e=>{const t={credentials:e.target.value,region:""};this.props.stage.manifest&&!this.props.stage.manifest.direct||(t.manifest=this.defaultDirectManifest),this.props.updateStageField(t),this.reloadRegions()},this.reloadRegions=()=>{const{credentials:e}=this.props.stage;e&&He(b.getRegionsForAccount(e)).pipe(je(this.destroy$)).subscribe(e=>this.setState({regions:e}))},this.manifestSourceUpdated=e=>{switch(e){case"direct":this.props.updateStageField({manifest:this.defaultDirectManifest});break;case"artifact":this.props.updateStageField({manifest:{}})}},this.onExpectedArtifactSelected=e=>{this.props.updateStageField({manifest:{artifactId:e.id}})},this.onArtifactChanged=e=>{this.props.updateStageField({manifest:{artifact:e}})},this.regionUpdated=e=>{const t={region:e.target.value};this.props.stage.manifest.direct&&(t.manifest=this.defaultDirectManifest),this.props.updateStageField(t)},this.serviceManifestSourceUpdated=e=>{this.props.updateStageField({manifest:e})},this.userProvidedUpdated=e=>{this.props.updateStageField({userProvided:e.target.checked})},this.props.updateStageField({cloudProvider:"cloudfoundry"}),this.state={accounts:[],regions:[]}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.reloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{pipeline:e,stage:t}=this.props,{credentials:a,region:n,userProvided:r,manifest:s}=this.props.stage,{accounts:i,regions:l}=this.state,o=!s||!!s.direct;let c;if(o){const e=s&&s.direct||this.defaultDirectManifest;c=r?Ge.createElement(aa,{onChange:this.serviceManifestSourceUpdated,service:e,onServiceChanged:e=>this.serviceManifestSourceUpdated({direct:e})}):Ge.createElement(ta,{credentials:a,region:n,service:e,onServiceChanged:e=>this.serviceManifestSourceUpdated({direct:e})})}else c=Ge.createElement(f,{label:"Artifact"},Ge.createElement(Q,{pipeline:e,stage:t,expectedArtifactId:s.artifactId,excludedArtifactTypePatterns:[P.KUBERNETES,P.FRONT50_PIPELINE_TEMPLATE,P.DOCKER_IMAGE],artifact:s.artifact,onExpectedArtifactSelected:this.onExpectedArtifactSelected,onArtifactEdited:this.onArtifactChanged}));return Ge.createElement("div",{className:"form-horizontal cloudfoundry-deploy-service-stage"},Ge.createElement(f,{label:"Account"},Ge.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:a,stringOptions:i.map(e=>e.name)})),Ge.createElement(f,{label:"Region"},Ge.createElement(E,{clearable:!1,onChange:this.regionUpdated,value:n,stringOptions:l.map(e=>e.name)})),Ge.createElement(f,{label:"User-provided"},Ge.createElement("input",{type:"checkbox",checked:!!r,onChange:this.userProvidedUpdated})),Ge.createElement(f,{label:"Configuration Source"},Ge.createElement("div",{className:"radio radio-inline"},Ge.createElement("label",null,Ge.createElement("input",{type:"radio",checked:!o,onChange:()=>this.manifestSourceUpdated("artifact")})," ","Manifest")),Ge.createElement("div",{className:"radio radio-inline"},Ge.createElement("label",null,Ge.createElement("input",{type:"radio",checked:o,onChange:()=>this.manifestSourceUpdated("direct")})," Form"))),c)}}const ra=(e,t)=>e&&e.direct?t?"userProvided":"direct":"artifact",sa=e=>e&&e.direct?"direct":"artifact";U.registerValidator("requiredDeployServiceField",new class{validate(e,t,a){const n=Ne(t,"manifest");if(ra(n,Ne(t,"userProvided"))!==a.manifestSource)return null;const r=Ne(n,sa(n)),s=Ne(r,a.fieldName),i=a.fieldLabel||Se(a.fieldName);return s?null:`<strong>${i}</strong> is a required field for the Deploy Service stage.`}}),U.registerValidator("validDeployServiceParameterJsonOrYaml",new class{isJson(e){try{return JSON.parse(e),!0}catch(e){return!1}}isYaml(e){try{return Je(e),!0}catch(e){return!1}}validate(e,t,a){const n=Ne(t,"manifest");if(ra(n,Ne(t,"userProvided"))!==a.manifestSource)return null;const r=Ne(n,sa(n)),s=Ne(r,a.fieldName);if(s&&!this.isJson(s)&&!this.isYaml(s)){const e=Se(a.fieldLabel||a.fieldName);return a.message||`<strong>${e}</strong> should be a valid JSON or YAML string.`}return null}}),z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:na,configAccountExtractor:e=>[e.credentials],supportsCustomTimeout:!0,description:"Deploys services using Open Service Broker and deploys user-provided services",executionDetailsSections:[kt,_],key:"deployService",label:"Deploy Service",validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"region"},{type:"requiredDeployServiceField",manifestSource:"direct",fieldName:"serviceInstanceName",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"direct",fieldName:"service",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"direct",fieldName:"servicePlan",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"artifact",fieldName:"artifactAccount",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"artifact",fieldName:"reference",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"userProvided",fieldName:"serviceInstanceName",preventSave:!0},{type:"validDeployServiceParameterJsonOrYaml",manifestSource:"direct",fieldName:"parameters",preventSave:!0},{type:"validDeployServiceParameterJsonOrYaml",manifestSource:"userProvided",fieldName:"credentials",preventSave:!0}]}),z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:yt,configAccountExtractor:e=>[e.credentials],key:"destroyServerGroup",provides:"destroyServerGroup",validators:[{type:"cfTargetImpedance",message:"This pipeline will attempt to destroy a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]});class ia extends Ge.Component{constructor(e,t){super(e,t),this.destroy$=new _e,this.loadRegions=e=>{this.setState({regions:[]}),He(b.getRegionsForAccount(e)).pipe(je(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.accountUpdated=e=>{const t=e.value;this.props.formik.setFieldValue("credentials",t),this.props.formik.setFieldValue("region",""),t&&this.loadRegions(t)},this.regionUpdated=e=>{this.props.formik.setFieldValue("region",e.value)},this.serviceInstanceNameUpdated=e=>{this.props.formik.setFieldValue("serviceInstanceName",e.target.value)},this.removeBindingsUpdated=e=>{this.props.formik.setFieldValue("removeBindings",e.target.checked)},this.props.formik.setFieldValue("cloudProvider","cloudfoundry"),this.state={accounts:[],regions:[],application:e.application}}componentDidMount(){const e=this.props.formik.values;this.props.formik.setFieldValue("application",this.state.application.name),He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e})),e.credentials&&this.loadRegions(e.credentials)}componentWillUnmount(){this.destroy$.next()}render(){const e=this.props.formik.values,{accounts:t,regions:a}=this.state,{credentials:n,region:r,serviceInstanceName:s}=e;return Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(f,{label:"Account"},Ge.createElement(We,{options:t&&t.map(e=>({label:e.name,value:e.name})),clearable:!1,value:n,onChange:this.accountUpdated})),Ge.createElement(f,{label:"Region"},Ge.createElement(We,{options:a&&a.map(e=>({label:e,value:e})),clearable:!1,value:r,onChange:this.regionUpdated})),Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement("input",{type:"text",className:"form-control",required:!0,onChange:this.serviceInstanceNameUpdated,value:s})),Ge.createElement(f,{label:"Remove Bindings"},Ge.createElement("input",{type:"checkbox",checked:e.removeBindings,onChange:this.removeBindingsUpdated}),e.removeBindings&&Ge.createElement("div",null,"Warning: Prior to destroying, this will attempt to unbind any server groups that are bound to this service. This stage will fail if any server groups don't belong to the spinnaker application.")))}}function la(e){const t=new q(e);return t.field("credentials","Account").required(),t.field("region","Region").required(),t.field("serviceInstanceName","Service Instance Name").required(),t.field("application","Application").required(),t.validateForm()}z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",component:function({application:e,pipeline:t,stage:a,updateStage:n}){const r=Ge.useMemo(()=>({credentials:"",serviceInstanceName:"",removeBindings:!1,...Ce(a)}),[]);return Ge.createElement($,{application:e,onChange:n,pipeline:t,stage:r,validate:la,render:e=>Ge.createElement(ia,{...e})})},supportsCustomTimeout:!0,executionDetailsSections:[kt,_],key:"destroyService",provides:"destroyService",validateFn:la}),z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:yt,configAccountExtractor:e=>[e.credentials],key:"disableServerGroup",provides:"disableServerGroup",validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]}),z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:yt,configAccountExtractor:e=>[e.credentials],key:"enableServerGroup",provides:"enableServerGroup",validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]}),z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",component:St,description:"Map a load balancer",executionDetailsSections:[Nt,_],key:"mapLoadBalancers",label:"Map Load Balancer",validators:[{type:"requiredField",preventSave:!0,fieldName:"cluster"},{type:"requiredField",preventSave:!0,fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",preventSave:!0,fieldName:"region"},{type:"requiredField",preventSave:!0,fieldName:"target"},{type:"cfRequiredRoutesField",preventSave:!0,fieldName:"loadBalancerNames"}]});class oa extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.instanceCountUpdated=e=>{const t=parseInt(e.target.value,10);this.props.updateStageField({capacity:{desired:t,min:t,max:t}})},this.memoryUpdated=e=>{this.props.updateStageField({memory:parseInt(e.target.value,10)})},this.diskQuotaUpdated=e=>{this.props.updateStageField({diskQuota:parseInt(e.target.value,10)})},this.targetUpdated=e=>{this.props.updateStageField({target:e})},this.componentUpdated=e=>{this.props.updateStageField({credentials:e.credentials,regions:e.regions,cluster:e.cluster})};const{stage:t}=e;let a;t.isNew&&e.application.attributes.platformHealthOnlyShowOverride&&e.application.attributes.platformHealthOnly&&(a=["Cloud Foundry"]);const{capacity:n}=t;this.props.updateStageField({action:"scale_exact",capacity:n&&n.desired?n:{desired:1,min:1,max:1},cloudProvider:"cloudfoundry",diskQuota:t.diskQuota||1024,interestingHealthProviderNames:a,memory:t.memory||1024}),this.state={accounts:[]}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.props.stageFieldUpdated()}componentWillUnmount(){this.destroy$.next()}render(){const{accounts:e}=this.state,{application:t,pipeline:a,stage:n}=this.props,{capacity:r,diskQuota:s,memory:i,target:l}=n,o=r.desired,{TargetSelect:c}=y;return Ge.createElement("div",{className:"cloudfoundry-resize-asg-stage form-horizontal"},!a.strategy&&Ge.createElement(Et,{accounts:e,application:t,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdated,component:n}),Ge.createElement(f,{label:"Target"},Ge.createElement(c,{model:{target:l},options:N.TARGET_LIST,onChange:this.targetUpdated})),Ge.createElement("div",{className:"form-group"},Ge.createElement("span",{className:"col-md-3 sm-label-right"}),Ge.createElement("div",{className:"col-md-9"},Ge.createElement("div",{className:"col-md-3 sm-label-left"},"Instances"),Ge.createElement("div",{className:"col-md-3 sm-label-left"},"Mem (MB)"),Ge.createElement("div",{className:"col-md-3 sm-label-left"},"Disk (MB)")),Ge.createElement(f,{label:"Match capacity"},Ge.createElement("div",{className:"col-md-3"},Ge.createElement("input",{type:"number",key:"instanceCount",onChange:this.instanceCountUpdated,value:o,className:"form-control input-sm"})),Ge.createElement("div",{className:"col-md-3"},Ge.createElement("input",{type:"number",key:"memory",onChange:this.memoryUpdated,value:i,className:"form-control input-sm"})),Ge.createElement("div",{className:"col-md-3"},Ge.createElement("input",{type:"number",key:"diskQuota",onChange:this.diskQuotaUpdated,value:s,className:"form-control input-sm"})),Ge.createElement("div",{className:"col-md-9 col-md-offset-3"},Ge.createElement("em",{className:"subinput-note"},"Scaled capacity will match the numbers entered")))))}}z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:oa,configAccountExtractor:e=>[e.credentials],key:"resizeServerGroup",provides:"resizeServerGroup",validators:[{type:"cfTargetImpedance",message:"This pipeline will attempt to resize a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"cfInstanceSizeField",fieldName:"capacity.desired",fieldLabel:"Instances",min:0,preventSave:!0},{type:"cfInstanceSizeField",fieldName:"memory",fieldLabel:"Mem Mb",min:256,preventSave:!0},{type:"cfInstanceSizeField",fieldName:"diskQuota",fieldLabel:"Disk Mb",min:256,preventSave:!0}]});class ca extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.waitTimeBetweenRegionsUpdated=e=>{const t=parseInt(e.target.value||"0",10);this.props.updateStageField({waitTimeBetweenRegions:t})},this.componentUpdate=e=>{this.props.updateStageField({credentials:e.credentials,regions:e.regions,cluster:e.cluster,moniker:e.moniker})},this.props.updateStageField({cloudProvider:"cloudfoundry",regions:this.props.stage.regions||[],targetHealthyRollbackPercentage:100}),this.state={accounts:[]}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{application:e,pipeline:t,stage:a}=this.props,{waitTimeBetweenRegions:n}=a,{accounts:r}=this.state;return Ge.createElement("div",{className:"form-horizontal"},!t.strategy&&Ge.createElement(Et,{accounts:r,application:e,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdate,component:a}),a.regions.length>1&&Ge.createElement(f,{label:"Wait"},Ge.createElement("input",{type:"number",min:"0",value:n,onChange:this.waitTimeBetweenRegionsUpdated,className:"form-control input-sm inline-number"})," seconds between regional rollbacks."))}}z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],provides:"rollbackCluster",key:"rollbackCluster",cloudProvider:"cloudfoundry",component:ca,controller:"cfRollbackClusterStageCtrl",validators:[{type:"requiredField",preventSave:!0,fieldName:"cluster"},{type:"requiredField",preventSave:!0,fieldName:"regions"},{type:"requiredField",preventSave:!0,fieldName:"credentials",fieldLabel:"account"}]});class da extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.componentUpdated=e=>{this.props.updateStageField({credentials:e.credentials,region:e.region,cluster:e.cluster})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],region:""}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.props.stageFieldUpdated()}componentWillUnmount(){this.destroy$.next()}render(){const{application:e,stage:t}=this.props,{target:a,jobName:n,command:r,logsUrl:s}=t,{accounts:i}=this.state,{TargetSelect:l}=y;return Ge.createElement("div",{className:"cloudfoundry-resize-asg-stage form-horizontal"},Ge.createElement(Et,{accounts:i,application:e,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdated,component:t,isSingleRegion:!0}),Ge.createElement(f,{label:"Target"},Ge.createElement(l,{model:{target:a},options:N.TARGET_LIST,onChange:e=>this.props.updateStageField({target:e})})),Ge.createElement(f,{label:"Job Name",helpKey:"cf.runJob.jobName"},Ge.createElement(h,{type:"text",className:"form-control",onChange:e=>this.props.updateStageField({jobName:e.target.value}),value:n,maxLength:238})),Ge.createElement(f,{label:"Command"},Ge.createElement(h,{type:"text",className:"form-control",onChange:e=>this.props.updateStageField({command:e.target.value}),value:r})),Ge.createElement(f,{label:"Logs URL",helpKey:"cf.runJob.logsUrl"},Ge.createElement(ne,{placeholder:"",onChange:e=>this.props.updateStageField({logsUrl:e}),value:s,pipeline:this.props.pipeline,docLink:!1})))}}var ma=(e=>(e.APP="app",e.TASK="task",e))(ma||{});class pa extends Ge.Component{constructor(e){super(e),this.state={logs:"",showModal:!1,errorMessage:null},Re(this,["open","close","onClick"])}canShow(){const{resourceGuid:e}=this.props;return""!==e}generateResourceId(){const{resourceGuid:e,logsType:t,resourceInstanceIndex:a}=this.props;return`${t}:${e}${"app"===t?`:${a}`:""}`}close(){this.setState({showModal:!1})}open(){this.setState({showModal:!0})}onClick(){const{account:e,region:t}=this.props;c.getConsoleOutput(e,t,this.generateResourceId(),"cloudfoundry").then(e=>{this.setState({logs:e.output}),this.open()}).catch(e=>{this.setState({errorMessage:e.data.message}),this.open()})}render(){const{showModal:e,logs:t,errorMessage:a}=this.state;return this.canShow()?Ge.createElement("div",null,Ge.createElement("a",{onClick:this.onClick,className:"clickable"},"Recent"),Ge.createElement(Me,{show:e,onHide:this.close,dialogClassName:"modal-lg modal-fullscreen"},Ge.createElement(Me.Header,{closeButton:!0},Ge.createElement(Me.Title,null,"Recent logs"),Ge.createElement("h5",null,"CloudFoundry ",this.props.logsType.valueOf()," name: ",this.props.resourceDisplayName)),Ge.createElement(Me.Body,null,t.length>0&&Ge.createElement(Ge.Fragment,null,Ge.createElement("pre",{className:"body-small"},t)),0===t.length&&Ge.createElement(Ge.Fragment,null,"No logs returned."),a&&Ge.createElement("pre",{className:"body-small"},a)),Ge.createElement(Me.Footer,null,Ge.createElement(qe,{onClick:this.close},"Close")))):null}}class ua extends Ge.Component{render(){const{stage:e,name:t,current:a}=this.props,{context:n}=e,r=n["deploy.account.name"],s=Ne(e,["context","jobStatus","location"],""),i=Ne(e,["context","jobStatus","id"],""),o=Ne(e,["context","jobStatus","name"],""),c=Ne(e,["context","logsUrl"]);return Ge.createElement(S,{name:t,current:a},Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-md-9"},Ge.createElement("dl",{className:"dl-narrow dl-horizontal"},Ge.createElement("dt",null,"Account"),Ge.createElement("dd",null,Ge.createElement(l,{account:r})),s&&Ge.createElement(Ge.Fragment,null,Ge.createElement("dt",null,"Region"),Ge.createElement("dd",null,s),Ge.createElement("dt",null,"Logs"),Ge.createElement("dd",null,Ge.createElement(pa,{account:r,region:s,resourceDisplayName:o,resourceGuid:i,logsType:ma.TASK})),c&&Ge.createElement("dd",null,Ge.createElement("a",{target:"_blank",href:c},"External"))),!s&&Ge.createElement("div",{className:"well"},"Collecting additional details...")))))}}function Ca(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"service.account",void 0),r=Ne(a,"service.region",void 0),s=Ne(a,"serviceInstanceName",void 0),i=Ne(a,"shareToRegions",void 0);return Ge.createElement(S,{name:e.name,current:e.current},Ge.createElement("div",{className:"step-section-details"},Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("dl",{className:"dl-horizontal"},Ge.createElement("dt",null,"Account"),Ge.createElement("dd",null,Ge.createElement(l,{account:n})),Ge.createElement("dt",null,"Region"),Ge.createElement("dd",null,r,Ge.createElement("br",null)),Ge.createElement("dt",null,"Service Instance Name"),Ge.createElement("dd",null,s,Ge.createElement("br",null)),Ge.createElement("dt",null,"Sharing Regions"),Ge.createElement("dd",null,i.join(", "),Ge.createElement("br",null)))))),Ge.createElement(k,{stage:t,message:t.failureMessage}),Ge.createElement(F,{stage:t}))}ua.title="runJobDetails",z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],component:da,configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",key:"runJob",provides:"runJob",restartable:!0,executionDetailsSections:[_,ua],supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"credentials"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"command"}]}),(Ca||(Ca={})).title="cloudfoundryShareServiceConfig";class ha extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.clearAndReloadRegions=()=>{this.setState({regions:[]}),He(b.getRegionsForAccount(this.props.stage.credentials)).pipe(je(this.destroy$)).subscribe(e=>{const{region:t}=this.props.stage,a=e.map(e=>e.name);a.sort((e,t)=>e.localeCompare(t)),this.setState({regions:a}),t&&this.clearAndResetShareToRegionList(t,a)})},this.serviceInstanceNameUpdated=e=>{this.props.updateStageField({serviceInstanceName:e.target.value})},this.clearAndResetShareToRegionList=(e,t)=>{this.setState({shareToRegionsList:t.filter(t=>t!==e)})},this.accountUpdated=e=>{const t=e.target.value;this.setState({regions:[],shareToRegionsList:[]}),this.props.updateStageField({credentials:t,region:"",shareToRegions:[]}),t&&this.clearAndReloadRegions()},this.regionUpdated=e=>{const t=e.target.value;this.setState({shareToRegionsList:[]}),this.props.updateStageField({region:t,shareToRegions:[]}),this.clearAndResetShareToRegionList(t,this.state.regions)},this.shareToRegionsUpdated=e=>{this.props.updateStageField({shareToRegions:e.map(e=>e.value)})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],regions:[],shareToRegionsList:[]}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.props.stage.credentials&&this.clearAndReloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{credentials:e,region:t,serviceInstanceName:a,shareToRegions:n}=this.props.stage,{accounts:r,regions:s,shareToRegionsList:i}=this.state;return Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(f,{label:"Account"},Ge.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:e,stringOptions:r.map(e=>e.name)})),Ge.createElement(f,{label:"Region"},Ge.createElement(E,{clearable:!1,onChange:this.regionUpdated,value:t,stringOptions:s})),Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:a})),Ge.createElement(f,{label:"Share To Regions"},Ge.createElement(We,{options:i&&i.map(e=>({label:e,value:e})),multi:!0,clearable:!1,value:n,onChange:this.shareToRegionsUpdated})))}}function ga(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"service.account",void 0),r=Ne(a,"serviceInstanceName",void 0),s=Ne(a,"unshareFromRegions",void 0);return Ge.createElement(S,{name:e.name,current:e.current},Ge.createElement("div",{className:"step-section-details"},Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-md-12"},Ge.createElement("dl",{className:"dl-horizontal"},Ge.createElement("dt",null,"Account"),Ge.createElement("dd",null,Ge.createElement(l,{account:n})),Ge.createElement("dt",null,"Service Instance Name"),Ge.createElement("dd",null,r,Ge.createElement("br",null)),Ge.createElement("dt",null,"Unsharing Regions"),Ge.createElement("dd",null,s.join(", "),Ge.createElement("br",null)))))),Ge.createElement(k,{stage:t,message:t.failureMessage}),Ge.createElement(F,{stage:t}))}z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],provides:"shareService",key:"shareService",cloudProvider:"cloudfoundry",component:ha,executionDetailsSections:[Ca,_],supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0}]}),z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",component:St,description:"Unmap a load balancer",executionDetailsSections:[Nt,_],key:"unmapLoadBalancers",label:"Unmap Load Balancer",validators:[{type:"requiredField",preventSave:!0,fieldName:"cluster"},{type:"requiredField",preventSave:!0,fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",preventSave:!0,fieldName:"region"},{type:"requiredField",preventSave:!0,fieldName:"target"},{type:"cfRequiredRoutesField",preventSave:!0,fieldName:"loadBalancerNames"}]}),(ga||(ga={})).title="cloudfoundryUnshareServiceConfig";class va extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.clearAndReloadRegions=()=>{this.setState({regions:[]}),He(b.getRegionsForAccount(this.props.stage.credentials)).pipe(je(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.serviceInstanceNameUpdated=e=>{this.props.updateStageField({serviceInstanceName:e.target.value})},this.accountUpdated=e=>{const t=e.target.value;this.setState({regions:[]}),this.props.updateStageField({credentials:t,unshareFromRegions:[]}),t&&this.clearAndReloadRegions()},this.unshareFromRegionsUpdated=e=>{this.props.updateStageField({unshareFromRegions:e.map(e=>e.value)})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],regions:[]}}componentDidMount(){He(b.listAccounts("cloudfoundry")).pipe(je(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.props.stage.credentials&&this.clearAndReloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{credentials:e,serviceInstanceName:t,unshareFromRegions:a}=this.props.stage,{accounts:n,regions:r}=this.state;return Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(f,{label:"Account"},Ge.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:e,stringOptions:n.map(e=>e.name)})),Ge.createElement(f,{label:"Service Instance Name"},Ge.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:t})),Ge.createElement(f,{label:"Unshare From Regions"},Ge.createElement(We,{options:r&&r.map(e=>({label:e,value:e})),multi:!0,clearable:!1,value:a,onChange:this.unshareFromRegionsUpdated})))}}z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],provides:"unshareService",key:"unshareService",cloudProvider:"cloudfoundry",component:va,controller:"cfUnshareServiceStageCtrl",executionDetailsSections:[ga,_],supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0}]});class fa extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Ge.createElement(s,{heading:"Server Group Information",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Ge.createElement("dt",null,"Created"),e.pipelineId?Ge.createElement("dd",null,Ge.createElement("a",{target:"_blank",href:"/#/applications/"+e.app+"/executions/"+e.pipelineId},i(e.createdTime))):Ge.createElement("dd",null,i(e.createdTime)),Ge.createElement("dt",null,"Account"),Ge.createElement("dd",null,Ge.createElement(l,{account:e.account})),Ge.createElement("dt",null,"Organization"),Ge.createElement("dd",null,e.space.organization.name),Ge.createElement("dt",null,"Space"),Ge.createElement("dd",null,e.space.name),e.droplet&&Ge.createElement("div",null,Ge.createElement("dt",null,"Rootfs"),Ge.createElement("dd",null,e.droplet.stack),Ge.createElement("dt",null,"Buildpack"),e.droplet.buildpacks?e.droplet.buildpacks.map(function(e,t){return Ge.createElement("dd",{key:t},e.name," ",e.version)}):Ge.createElement("dd",null,"n/a"))))}}class Ea extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props,{appsManagerUri:t}=e;return Ge.createElement(Ge.Fragment,null,t&&Ge.createElement(s,{heading:"Apps Manager",defaultExpanded:!0},Ge.createElement("div",null,Ge.createElement("a",{href:t,target:"_blank"},"Apps Manager"))))}}class ba extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props,{metricsUri:t}=e;return Ge.createElement(Ge.Fragment,null,t&&Ge.createElement(s,{heading:"Metrics",defaultExpanded:!0},Ge.createElement("div",null,Ge.createElement("a",{href:t,target:"_blank"},"Metrics"))))}}class ya extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Ge.createElement(s,{heading:"Server Group Sizing",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Ge.createElement("dt",null,"Instances"),Ge.createElement("dd",null,e.instances.length),Ge.createElement("dt",null,"Disk (MB)"),Ge.createElement("dd",null,e.diskQuota),Ge.createElement("dt",null,"Memory (MB)"),Ge.createElement("dd",null,e.memory)))}}class Na extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Ge.createElement(s,{heading:"Health Check",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Ge.createElement("dt",null,"Type"),Ge.createElement("dd",null,void 0===e.healthCheckType?"port":e.healthCheckType),"http"===e.healthCheckType&&Ge.createElement("div",null,Ge.createElement("dt",null,"Endpoint"),Ge.createElement("dd",null,e.healthCheckHttpEndpoint))))}}class Sa extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Ge.createElement(Ge.Fragment,null,e.droplet&&e.droplet.sourcePackage&&Ge.createElement(s,{heading:"Package",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Ge.createElement("dt",null,"Checksum"),Ge.createElement("dd",null,e.droplet.sourcePackage.checksum))))}}class ka extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Ge.createElement(s,{heading:"Build",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},e.ciBuild&&e.ciBuild.jobName&&Ge.createElement("div",null,Ge.createElement("dt",null,"Job Name"),Ge.createElement("dd",null,e.ciBuild.jobName)),e.ciBuild&&e.ciBuild.jobNumber&&Ge.createElement("div",null,Ge.createElement("dt",null,"Job Number"),e.ciBuild.jobUrl?Ge.createElement("dd",null,Ge.createElement("a",{target:"_blank",href:e.ciBuild.jobUrl},e.ciBuild.jobNumber)):Ge.createElement("dd",null,e.ciBuild.jobNumber)),e.appArtifact&&e.appArtifact.name&&Ge.createElement("div",null,Ge.createElement("dt",null,"Artifact Name"),Ge.createElement("dd",null,e.appArtifact.name)),e.appArtifact&&e.appArtifact.version&&Ge.createElement("div",null,Ge.createElement("dt",null,"Version"),e.appArtifact.url?Ge.createElement("dd",null,Ge.createElement("a",{target:"_blank",href:e.appArtifact.url},e.appArtifact.version)):Ge.createElement("dd",null,e.appArtifact.version))))}}class Fa extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Ge.createElement(Ge.Fragment,null,!we(e.serviceInstances)&&Ge.createElement(s,{heading:"Bound Services",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},e.serviceInstances.map(function(e,t){return Ge.createElement("div",{key:t},Ge.createElement("dt",null,"Name"),Ge.createElement("dd",null,e.name),Ge.createElement("dt",null,"Plan"),Ge.createElement("dd",null,e.plan),Ge.createElement("dt",null,"Tags"),e.tags&&Ge.createElement("dd",null,e.tags.join(", ")))}))))}}class xa extends Ge.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Ge.createElement(Ge.Fragment,null,!we(e.env)&&Ge.createElement(s,{heading:"Environment Variables",defaultExpanded:!0},Ge.createElement("dl",{className:"dl-horizontal dl-narrow"},Object.entries(e.env).map(([e,t],a)=>Ge.createElement("div",{key:a},Ge.createElement("dt",null,e),Ge.createElement("dd",null,t))))))}}class Aa{constructor(e){this.$q=e}normalizeServerGroupDetails(e){return e}normalizeServerGroup(e){return this.$q.resolve(e)}convertServerGroupCommandToDeployConfiguration(e){const t=Te({viewState:[]},e);return t.cloudProvider="cloudfoundry",t.provider="cloudfoundry",t.account=t.credentials,delete t.viewState,delete t.selectedProvider,"direct"===t.manifest.type?t.manifest.env=this.convertManifestEnv(t.manifest.environment):t.manifest.env=t.manifest.environment,t}convertManifestEnv(e){const t=Object.create(null);for(const a of e)t[a.key]=a.value;return t}}Aa.$inject=["$q"];const Ra=class e extends Ge.Component{constructor(e){super(e),this.formikRef=Ge.createRef(),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=e=>{const{routes:t}=e,{serverGroup:a}=this.props,r={account:a.account,cloudProvider:a.cloudProvider,cluster:a.cluster,instanceCounts:a.instanceCounts,instances:a.instances,loadBalancers:t,name:a.name,region:a.region,type:a.type};this.state.taskMonitor.submit(()=>n.serverGroupWriter.mapLoadBalancers(r,this.props.application,{serverGroupName:a.name}))},this.state={initialValues:{routes:[""]},taskMonitor:new A({application:e.application,title:"Mapping a route to your server group",modalInstance:A.modalInstanceEmulation(()=>this.props.dismissModal()),onTaskComplete:()=>this.props.application.serverGroups.refresh()})}}static show(t){return R.show(e,t,{})}render(){const{serverGroup:e}=this.props,{initialValues:t}=this.state;return Ge.createElement(Ge.Fragment,null,Ge.createElement(w,{monitor:this.state.taskMonitor}),Ge.createElement(x,{ref:this.formikRef,initialValues:t,onSubmit:this.submit,render:t=>Ge.createElement(Ge.Fragment,null,Ge.createElement(T,{dismiss:this.close}),Ge.createElement(Me.Header,null,Ge.createElement(Me.Title,null,"Map route to ",e.name)),Ge.createElement(Me.Body,null,Ge.createElement(Ve,{className:"form-horizontal"},Ge.createElement(vt,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0}))),Ge.createElement(Pe,null,Ge.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Ge.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(t.values),disabled:!t.isValid},"Submit")))}))}};Ra.defaultProps={closeModal:D,dismissModal:D};let wa=Ra;const Ta=class e extends Ge.Component{constructor(e){super(e),this.formikRef=Ge.createRef(),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=e=>{const{routes:t}=e,{serverGroup:a}=this.props,r={account:a.account,cloudProvider:a.cloudProvider,cluster:a.cluster,instanceCounts:a.instanceCounts,instances:a.instances,loadBalancers:t,name:a.name,region:a.region,type:a.type};this.state.taskMonitor.submit(()=>n.serverGroupWriter.unmapLoadBalancers(r,this.props.application,{serverGroupName:a.name}))},this.state={initialValues:{routes:[""]},taskMonitor:new A({application:e.application,title:"Unmapping a route from your server group",modalInstance:A.modalInstanceEmulation(()=>this.props.dismissModal()),onTaskComplete:()=>this.props.application.serverGroups.refresh()})}}static show(t){return R.show(e,t,{})}render(){const{serverGroup:e}=this.props,{initialValues:t}=this.state;return Ge.createElement(Ge.Fragment,null,Ge.createElement(w,{monitor:this.state.taskMonitor}),Ge.createElement(x,{ref:this.formikRef,initialValues:t,onSubmit:this.submit,render:t=>Ge.createElement(Ge.Fragment,null,Ge.createElement(T,{dismiss:this.close}),Ge.createElement(Me.Header,null,Ge.createElement(Me.Title,null,"Unmap route from ",e.name)),Ge.createElement(Me.Body,null,Ge.createElement(Ve,{className:"form-horizontal"},Ge.createElement(vt,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0}))),Ge.createElement(Pe,null,Ge.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Ge.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(t.values),disabled:!t.isValid},"Submit")))}))}};Ta.defaultProps={closeModal:D,dismissModal:D};let Da=Ta;const Ua=class e extends Ge.Component{constructor(e){super(e),this.formikRef=Ge.createRef(),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=e=>{const{desired:t,diskQuota:a,memory:r,reason:s}=e,{serverGroup:i,application:l}=this.props,o={capacity:{min:t,max:t,desired:t},diskQuota:a,memory:r,reason:s,serverGroupName:i.name};this.state.taskMonitor.submit(()=>n.serverGroupWriter.resizeServerGroup(i,l,o))};const{capacity:t,diskQuota:a,memory:r}=e.serverGroup,{desired:s}=t;this.state={initialValues:{desired:s,diskQuota:a,memory:r},taskMonitor:new A({application:e.application,title:"Resizing your server group",modalInstance:A.modalInstanceEmulation(()=>this.props.dismissModal()),onTaskComplete:()=>this.props.application.serverGroups.refresh()})}}static show(t){return R.show(e,t,{})}renderDesired(e){const{serverGroup:t}=this.props,{capacity:a}=t;return Ge.createElement("div",null,Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-3 sm-label-right"},"Current size"),Ge.createElement("div",{className:"col-md-4"},Ge.createElement("div",{className:"horizontal middle"},Ge.createElement("input",{type:"number",className:"NumberInput form-control",value:a.desired,disabled:!0}),Ge.createElement("div",{className:"sp-padding-xs-xaxis"},"instances")))),Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-3 sm-label-right"},"Resize to"),Ge.createElement("div",{className:"col-md-4"},Ge.createElement("div",{className:"horizontal middle"},Ge.createElement(C,{name:"desired",input:e=>Ge.createElement(re,{...e,min:0}),touched:!0,required:!0,onChange:t=>{e.setFieldValue("min",t),e.setFieldValue("max",t)}}),Ge.createElement("div",{className:"sp-padding-xs-xaxis"},"instances")))))}renderQuota(e,t,a,n){return Ge.createElement("div",null,Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-3 sm-label-right"},"Current size"),Ge.createElement("div",{className:"col-md-5"},Ge.createElement("div",{className:"horizontal middle"},Ge.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},Ge.createElement("input",{type:"number",className:"NumberInput form-control",value:n,disabled:!0})),Ge.createElement("div",{className:"sp-padding-xs-xaxis"},a)))),Ge.createElement("div",{className:"form-group"},Ge.createElement("div",{className:"col-md-3 sm-label-right"},"Resize to"),Ge.createElement("div",{className:"col-md-5"},Ge.createElement("div",{className:"horizontal middle"},Ge.createElement(C,{name:t,input:e=>Ge.createElement(re,{...e,min:64}),touched:!0,required:!0,onChange:t=>{e.setFieldValue("min",t),e.setFieldValue("max",t)}}),Ge.createElement("div",{className:"sp-padding-xs-xaxis"},a)))))}render(){const{serverGroup:e}=this.props,{diskQuota:t,memory:a}=e,{initialValues:n}=this.state;return Ge.createElement(Ge.Fragment,null,Ge.createElement(w,{monitor:this.state.taskMonitor}),Ge.createElement(x,{ref:this.formikRef,initialValues:n,onSubmit:this.submit,render:n=>Ge.createElement(Ge.Fragment,null,Ge.createElement(T,{dismiss:this.close}),Ge.createElement(Me.Header,null,Ge.createElement(Me.Title,null,"Resize ",e.name)),Ge.createElement(Me.Body,null,Ge.createElement(Ve,{className:"form-horizontal"},this.renderDesired(n),this.renderQuota(n,"diskQuota","Disk (MB)",t),this.renderQuota(n,"memory","Mem (MB)",a),Ge.createElement(se,{reason:n.values.reason,onChange:e=>n.setFieldValue("reason",e)}))),Ge.createElement(Pe,null,Ge.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Ge.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(n.values),disabled:!n.isValid},"Submit")))}))}};Ua.defaultProps={closeModal:D,dismissModal:D};let Ia=Ua;const Ga=class e extends Ge.Component{constructor(e){super(e),this.formikRef=Ge.createRef(),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=e=>{const{reason:t,restoreServerGroupName:a}=e,{serverGroup:r,application:s}=this.props,i={rollbackType:"EXPLICIT",rollbackContext:{rollbackServerGroupName:r.name,restoreServerGroupName:a,targetHealthyRollbackPercentage:100},reason:t};this.state.taskMonitor.submit(()=>n.serverGroupWriter.rollbackServerGroup(r,s,i))};const{previousServerGroup:t,serverGroup:a}=e,{name:r}=a;this.state={initialValues:{restoreServerGroupName:t?t.name:void 0},taskMonitor:new A({application:e.application,title:"Rollback "+r,modalInstance:A.modalInstanceEmulation(()=>this.props.dismissModal()),onTaskComplete:()=>this.props.application.serverGroups.refresh()})}}static show(t){return R.show(e,t,{})}render(){const{allServerGroups:e,serverGroup:t}=this.props,{initialValues:a}=this.state;return Ge.createElement(Ge.Fragment,null,Ge.createElement(w,{monitor:this.state.taskMonitor}),Ge.createElement(x,{ref:this.formikRef,initialValues:a,onSubmit:this.submit,render:a=>Ge.createElement(Ge.Fragment,null,Ge.createElement(T,{dismiss:this.close}),Ge.createElement(Me.Header,null,Ge.createElement(Me.Title,null,"Rollback ",t.name)),Ge.createElement(Me.Body,null,Ge.createElement(Ve,{className:"form-horizontal"},Ge.createElement("div",{className:"row",style:{marginTop:"10px",marginBottom:"10px"}},Ge.createElement("div",{className:"col-md-3 sm-label-right"},"Restore to"),Ge.createElement("div",{className:"col-md-7"},Ge.createElement(C,{name:"restoreServerGroupName",fastField:!0,input:t=>Ge.createElement(E,{inputClassName:"cloudfoundry-react-select",...t,stringOptions:e&&e.map(e=>e.name),clearable:!1}),required:!0}))),Ge.createElement(se,{reason:a.values.reason,onChange:e=>a.setFieldValue("reason",e)})),Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-sm-4 sm-label-right"},"Rollback Operations")),Ge.createElement("div",{className:"row"},Ge.createElement("div",{className:"col-sm-11 col-sm-offset-1"},Ge.createElement("ol",null,Ge.createElement("li",null,"Enable ",Ge.createElement("em",null,a.values.restoreServerGroupName||"previous server group")),Ge.createElement("li",null,"Disable ",t.name)),Ge.createElement("p",null,"This rollback will affect server groups in ",t.account," (",t.region,").")))),Ge.createElement(Pe,null,Ge.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Ge.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(a.values)},"Submit")))}))}};Ga.defaultProps={closeModal:D,dismissModal:D};let Ba=Ga;class Ma extends Ge.Component{constructor(){super(...arguments),this.destroyServerGroup=()=>{const{app:e,serverGroup:t}=this.props,r={name:t.name,accountId:t.account,region:t.region},s={application:e,title:"Destroying "+t.name,onTaskComplete:()=>{n.$state.includes("**.serverGroup",r)&&n.$state.go("^")}},i={header:"Really destroy "+t.name+"?",buttonText:"Destroy "+t.name,account:t.account,taskMonitorConfig:s,interestingHealthProviderNames:void 0,submitMethod:a=>(a.serverGroupName=t.name,n.serverGroupWriter.destroyServerGroup(t,e,a)),askForReason:!0,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Cloud Foundry"};ie.addDestroyWarningMessage(e,t,i),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(i.interestingHealthProviderNames=["Cloud Foundry"]),a.confirm(i)},this.disableServerGroup=()=>{const{app:e,serverGroup:t}=this.props,r={application:e,title:"Disabling "+t.name},s={header:"Really disable "+t.name+"?",buttonText:"Disable "+t.name,account:t.account,interestingHealthProviderNames:void 0,taskMonitorConfig:r,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Cloud Foundry",submitMethod:a=>(a.serverGroupName=t.name,n.serverGroupWriter.disableServerGroup(t,e.name,a)),askForReason:!0};ie.addDisableWarningMessage(e,t,s),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(s.interestingHealthProviderNames=["Cloud Foundry"]),a.confirm(s)},this.enableServerGroup=()=>{if(!this.isRollbackEnabled())return void this.showEnableServerGroupModal();const e={header:"Rolling back?",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?",buttonText:"Yes, let's start the orchestrated rollback",cancelButtonText:"No, I just want to enable the server group"};a.confirm(e).then(()=>this.rollbackServerGroup()).catch(({source:e})=>{"footer"===e&&this.showEnableServerGroupModal()})},this.rollbackServerGroup=()=>{const{app:e}=this.props;let t,a=this.props.serverGroup,n=e.serverGroups.data.filter(e=>e.cluster===a.cluster&&e.region===a.region&&e.account===a.account);a.isDisabled&&(t=a,a=De(n.filter(e=>e.name!==t.name&&!e.isDisabled),["instanceCounts.total","createdTime"],["desc","desc"])[0]),n=n.filter(e=>e.name!==a.name),1!==n.length||t||(t=n[0]);const r=Ue(e.clusters,{name:a.cluster,account:a.account,serverGroups:[]}),s=Ie(r.serverGroups,{isDisabled:!0,region:a.region});Ba.show({serverGroup:a,previousServerGroup:t,disabledServerGroups:s.sort((e,t)=>t.name.localeCompare(e.name)),allServerGroups:n.sort((e,t)=>t.name.localeCompare(e.name)),application:e})},this.resizeServerGroup=()=>{const{app:e,serverGroup:t}=this.props;Ia.show({application:e,serverGroup:t})},this.mapServerGroupToLoadBalancers=()=>{const{app:e,serverGroup:t}=this.props;wa.show({application:e,serverGroup:t})},this.unmapServerGroupFromLoadBalancers=()=>{const{app:e,serverGroup:t}=this.props;Da.show({application:e,serverGroup:t})},this.cloneServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a=It.buildServerGroupCommandFromExisting(e,t),n=`Clone ${t.name}`;Ht.show({application:e,command:a,isSourceConstant:!0,serverGroup:t,title:n})}}isEnableLocked(){if(this.props.serverGroup.isDisabled){if((this.props.serverGroup.runningTasks||[]).filter(e=>Ne(e,"execution.stages",[]).some(e=>"resizeServerGroup"===e.type)).length)return!0}return!1}isRollbackEnabled(){const{app:e,serverGroup:t}=this.props;return!t.isDisabled||e.getDataSource("serverGroups").data.some(e=>e.cluster===t.cluster&&e.region===t.region&&e.account===t.account&&!e.isDisabled)}hasDisabledInstances(){return this.props.serverGroup.isDisabled||Ne(this.props.serverGroup,"instanceCounts.outOfService",0)>0}showEnableServerGroupModal(){const{app:e,serverGroup:t}=this.props,r={application:e,title:"Enabling "+t.name},s={header:"Really enable "+t.name+"?",buttonText:"Enable "+t.name,account:t.account,interestingHealthProviderNames:void 0,taskMonitorConfig:r,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Cloud Foundry",submitMethod:a=>(a.serverGroupName=t.name,n.serverGroupWriter.enableServerGroup(t,e,a)),askForReason:!0};e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(s.interestingHealthProviderNames=["Cloud Foundry"]),a.confirm(s)}render(){const{app:e,serverGroup:t}=this.props,{loadBalancers:a}=t,n=le.feature&&le.feature.entityTags,r=oe.buildClusterTargets(t);return Ge.createElement(Be,{className:"dropdown",id:"server-group-actions-dropdown"},Ge.createElement(Be.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Server Group Actions"),Ge.createElement(Be.Menu,{className:"dropdown-menu"},this.isRollbackEnabled()&&Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.rollbackServerGroup},"Rollback")),this.isRollbackEnabled()&&Ge.createElement("li",{role:"presentation",className:"divider"}),Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.resizeServerGroup},"Resize")),!t.isDisabled&&Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.disableServerGroup},"Disable")),this.hasDisabledInstances()&&!this.isEnableLocked()&&Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.enableServerGroup},"Enable")),this.isEnableLocked()&&Ge.createElement("li",{className:"disabled"},Ge.createElement($e,{value:"Cannot enable this server group until resize operation completes",placement:"left"},Ge.createElement("a",null,Ge.createElement("span",{className:"small glyphicon glyphicon-lock"})," Enable"))),Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.destroyServerGroup},"Destroy")),Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.cloneServerGroup},"Clone")),!t.isDisabled&&Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.mapServerGroupToLoadBalancers},"Map Load Balancer")),!t.isDisabled&&a&&!!a.length&&Ge.createElement("li",null,Ge.createElement("a",{className:"clickable",onClick:this.unmapServerGroupFromLoadBalancers},"Unmap Load Balancer")),n&&Ge.createElement(ce,{component:t,application:e,entityType:"serverGroup",ownerOptions:r,onUpdate:()=>e.serverGroups.refresh()})))}}function Pa(e,t){const{app:a,serverGroup:n}=e;return new Ke(r=>{(function(e){const{app:t,serverGroup:a}=e;return t.ready().then(()=>{let e=t.serverGroups.data.find(e=>e.name===a.name&&e.account===a.accountId&&e.region===a.region);return e||t.loadBalancers.data.some(t=>t.account===a.accountId&&t.region===a.region&&t.serverGroups.some(t=>t.name===a.name&&(e=t,!0))),e})})(e).then(e=>{de.getServerGroup(a.name,n.accountId,n.region,n.name).then(a=>{Object.assign(a,e,{account:n.accountId}),we(a)?t():r.next(a)},t)},t)})}Lt('.cloud-provider-logo .icon-cloudfoundry {\n -webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%3Csvg width%3D%22300px%22 height%3D%22300px%22 viewBox%3D%220 0 300 300%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E %3C!-- Generator%3A Sketch 50.2 (55047) - http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch --%3E %3Ctitle%3Ecf_logo%3C%2Ftitle%3E %3Cdesc%3ECreated with Sketch.%3C%2Fdesc%3E %3Cdefs%3E%3C%2Fdefs%3E %3Cg id%3D%22cf_logo%22 stroke%3D%22none%22 stroke-width%3D%221%22 fill%3D%22none%22 fill-rule%3D%22evenodd%22%3E %3Cpath d%3D%22M178.263372%2C122.718681 C186.913513%2C115.731062 192.264847%2C105.825834 192.16919%2C94.8631089 C191.983342%2C73.9653286 172.094852%2C57.1484045 147.743272%2C57.1484045 C123.391692%2C57.1484045 103.497736%2C73.9653286 103.317354%2C94.8631089 C103.218964%2C105.825834 108.570299%2C115.728351 117.220439%2C122.71597 C127.925842%2C131.365758 136.693504%2C148.855142 137.210052%2C167.952465 C137.781262%2C189.145802 136.321807%2C213.674325 135.425363%2C226.155508 C123.984767%2C227.766159 115.944099%2C231.559592 115.944099%2C235.982102 C115.944099%2C241.866127 130.180618%2C248.650381 147.743272%2C248.650381 C165.303194%2C248.650381 179.539712%2C241.866127 179.539712%2C235.982102 C179.539712%2C231.559592 171.501778%2C227.766159 160.058448%2C226.155508 C159.162004%2C213.674325 157.702549%2C189.145802 158.273759%2C167.952465 C158.790308%2C148.855142 167.557969%2C131.365758 178.263372%2C122.718681%22 id%3D%22Fill-1%22 fill%3D%22%231B1A19%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M234.330842%2C245.57087 C235.853157%2C244.936371 237.629647%2C244.423892 239.594718%2C244.046988 C241.423137%2C243.645682 243.462001%2C243.390798 245.68398%2C243.317586 C245.68398%2C243.317586 245.58559%2C242.63428 245.448937%2C241.62559 C245.386076%2C240.625035 244.910523%2C239.299095 244.454102%2C237.984002 C244.224525%2C237.335946 243.989482%2C236.693313 243.779036%2C236.094064 C243.511196%2C235.500238 243.16683%2C234.952509 242.920854%2C234.477991 C242.404306%2C233.550647 242.05994%2C232.929706 242.05994%2C232.929706 C239.865291%2C232.577206 237.790898%2C232.089131 235.779364%2C231.516997 C233.729568%2C230.944864 231.802759%2C230.288673 230.108261%2C229.580963 C226.894181%2C228.179101 223.874147%2C226.609124 222.278039%2C224.857474 C220.351231%2C223.189881 219.995933%2C221.519577 220.058793%2C220.011965 C220.168116%2C219.269005 220.512482%2C218.550449 221.102823%2C217.880701 C221.641236%2C217.221798 222.354565%2C216.627973 223.382196%2C216.115493 C223.382196%2C216.115493 222.60874%2C215.689783 221.479985%2C215.057995 C220.903309%2C214.751592 220.280171%2C214.388247 219.542245%2C214.008632 C218.768788%2C213.642576 217.957069%2C213.254826 217.148083%2C212.875212 C215.551975%2C212.121406 213.955866%2C211.364888 212.619399%2C210.868678 C211.343059%2C210.356198 210.498543%2C210.014545 210.498543%2C210.014545 C208.948897%2C210.220622 207.270798%2C210.331794 205.562634%2C210.356198 C203.794343%2C210.391448 201.990522%2C210.342641 200.23863%2C210.212487 C196.789506%2C209.91693 193.280255%2C209.442412 190.246556%2C208.553029 C188.675046%2C208.151722 187.338578%2C207.677204 186.171561%2C207.153878 C185.004544%2C206.641399 183.96598%2C206.131631 183.129663%2C205.559497 C181.533555%2C204.401673 180.443064%2C203.233003 180.451263%2C202.053486 C180.451263%2C202.053486 179.483759%2C201.893506 178.037969%2C201.649468 C176.540252%2C201.418987 173.348036%2C200.993277 171.322837%2C200.724835 C171.287307%2C201.063777 171.065929%2C201.383738 170.992136%2C201.942313 L170.475588%2C204.401673 C169.420626%2C209.320393 172.293074%2C214.312324 177.16339%2C215.714186 C189.095937%2C219.157832 198.112308%2C224.83307 200.716916%2C231.796285 C205.980792%2C245.885407 183.86759%2C259.657281 150.239999%2C259.657281 C116.598742%2C259.657281 94.4828068%2C245.885407 99.7357514%2C231.796285 C102.277499%2C225.003896 110.941304%2C219.439832 122.442028%2C215.96907 C127.533722%2C214.434343 130.553755%2C209.236335 129.460531%2C204.073578 L128.749935%2C200.724835 C127.410734%2C200.882104 125.852889%2C201.077334 124.256781%2C201.272565 C122.258913%2C201.492199 120.353969%2C201.84741 118.894514%2C202.07789 C117.435059%2C202.305659 116.45389%2C202.479197 116.45389%2C202.479197 C116.55228%2C203.623463 115.729629%2C204.911441 114.158118%2C206.023169 C113.335467%2C206.581745 112.42809%2C207.164725 111.310268%2C207.690762 C110.192446%2C208.224934 108.817715%2C208.675048 107.382858%2C209.149566 C105.896073%2C209.613238 104.24257%2C209.954891 102.583602%2C210.245025 C100.951964%2C210.562275 99.2082705%2C210.792755 97.4181151%2C210.939178 C93.8460034%2C211.221177 90.2629595%2C211.294388 87.0106161%2C210.893082 C87.0106161%2C210.893082 86.7892381%2C210.977139 86.4202748%2C211.123562 C86.0649768%2C211.280831 85.4855677%2C211.486907 84.9116247%2C211.768907 C83.7200098%2C212.330194 82.1129695%2C213.094846 80.4922639%2C213.86221 C78.8961559%2C214.653977 77.4749638%2C215.50811 76.3216118%2C216.139897 C75.7422027%2C216.454435 75.2639169%2C216.725588 74.9332164%2C216.907261 C74.6271135%2C217.113337 74.4549306%2C217.221798 74.4549306%2C217.221798 C76.7015073%2C218.257604 77.9532496%2C219.659466 78.1964921%2C221.145386 C78.7622359%2C222.715363 77.9887794%2C224.344994 76.5293244%2C226.123759 C75.6848084%2C227.0267 74.5423886%2C227.878121 73.3753712%2C228.705138 C72.1372943%2C229.543002 70.5876483%2C230.334769 68.8576202%2C231.091287 C65.6189421%2C232.612456 61.4209593%2C233.951953 56.9168736%2C234.757278 C56.9168736%2C234.757278 56.5260458%2C235.391777 56.228142%2C236.338102 C55.8865093%2C237.303407 55.4328211%2C238.604943 54.9654675%2C239.933594 C54.7686871%2C241.245976 54.585572%2C242.59903 54.4379866%2C243.634836 C54.2439392%2C244.678776 54.3395964%2C245.35937 54.3395964%2C245.35937 C58.9912674%2C245.410889 63.1291229%2C246.189099 66.2202157%2C247.420135 C69.8169249%2C248.602363 71.9897089%2C250.364859 73.6705419%2C252.520527 C74.9960768%2C254.847022 75.5235577%2C257.281978 74.3428751%2C260.093837 C73.5202235%2C262.835197 71.2627145%2C265.891094 67.5840135%2C268.664991 C67.5840135%2C268.664991 67.7917261%2C268.849375 68.1470242%2C269.153067 C68.5515173%2C269.445913 69.1418586%2C269.860777 69.8524547%2C270.359699 C71.3146427%2C271.357543 73.1539932%2C272.770251 75.315845%2C274.047383 C77.5979516%2C275.291976 79.9155879%2C276.544704 81.6729466%2C277.507298 C82.5420602%2C277.995374 83.4275722%2C278.299066 83.9796507%2C278.55395 C84.5563267%2C278.808834 84.8870272%2C278.941699 84.8870272%2C278.941699 C90.0771113%2C276.739935 95.6498242%2C275.606514 101.222537%2C275.023535 C104.007527%2C274.727978 106.743322%2C274.657478 109.358862%2C274.828304 C112.020864%2C274.96117 114.734794%2C275.169958 117.273808%2C275.763783 C119.790958%2C276.422686 122.245248%2C277.043626 124.393434%2C277.995374 C126.57715%2C278.930853 128.517624%2C280.159177 130.354242%2C281.341405 C134.024744%2C283.825169 136.847996%2C287.333892 138.064209%2C291.021576 C138.064209%2C291.021576 139.952755%2C291.094787 142.78694%2C291.20596 C145.63479%2C291.27646 149.428279%2C291.534056 153.208104%2C291.338825 C156.990661%2C291.216806 160.778685%2C291.154441 163.591005%2C290.972768 C166.365063%2C290.704327 168.218079%2C290.536212 168.218079%2C290.536212 C168.608907%2C288.611024 169.469821%2C286.797009 170.647771%2C285.151108 C171.22718%2C284.348495 171.888581%2C283.581131 172.623774%2C282.865287 C173.33437%2C282.122327 174.083229%2C281.365809 174.919546%2C280.698772 C176.564849%2C279.359275 178.43973%2C278.201451 180.563318%2C277.274107 C182.624047%2C276.314224 184.835094%2C275.411284 187.387774%2C274.841862 C189.989648%2C274.329382 192.430272%2C273.819614 195.081342%2C273.63523 C197.696882%2C273.426442 200.544733%2C273.548461 203.182137%2C273.659634 C208.571735%2C273.949768 214.546208%2C275.180804 219.739025%2C277.127684 C219.739025%2C277.127684 220.889644%2C276.495897 222.60874%2C275.544149 C224.254043%2C274.57342 226.623608%2C273.415596 228.43836%2C271.978484 C230.294109%2C270.614583 232.245515%2C269.323894 233.420732%2C268.252838 C234.574084%2C267.181783 235.325676%2C266.476785 235.325676%2C266.476785 C231.461127%2C263.833041 229.236414%2C260.996778 227.815222%2C258.195765 C227.151088%2C256.845421 226.967973%2C255.576424 226.92971%2C254.323696 C226.83132%2C253.057411 227.101893%2C251.877894 227.815222%2C250.779723 C228.820989%2C248.539998 231.398266%2C246.883251 234.330842%2C245.57087%22 id%3D%22Fill-2%22 fill%3D%22%23000000%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M118.447097%2C177.453406 C118.447097%2C177.453406 123.443134%2C158.68689 101.750823%2C134.472906 L101.026562%2C133.724523 C91.8872032%2C122.97872 86.8529035%2C109.342424 86.8529035%2C95.3265125 C86.8529035%2C62.4247782 113.863752%2C35.6538187 147.067719%2C35.6538187 L148.464314%2C35.6538187 C181.671013%2C35.6538187 208.684595%2C62.4247782 208.684595%2C95.3265125 C208.684595%2C109.342424 203.650296%2C122.97872 194.519137%2C133.716388 C194.412547%2C133.835696 194.166572%2C134.087868 193.794875%2C134.456637 C174.534989%2C153.591921 177.084936%2C177.453406 177.084936%2C177.453406 C212.256707%2C165.425049 236.017946%2C132.612795 236.220192%2C95.8091653 C236.471634%2C49.7944603 199.034155%2C10.5748554 152.774352%2C8.37309111 C152.194943%2C8.34597578 151.623733%2C8.33241812 151.052523%2C8.33241812 C150.352859%2C8.33241812 147.750985%2C8.38393723 147.761917%2C8.38393723 C147.688124%2C8.38393723 145.181907%2C8.33241812 144.484976%2C8.33241812 C143.913766%2C8.33241812 143.339823%2C8.34597578 142.771346%2C8.37309111 C96.5006113%2C10.5748554 59.063132%2C49.7944603 59.3173068%2C95.8091653 C59.5140872%2C132.612795 83.2780588%2C165.425049 118.447097%2C177.453406%22 id%3D%22Fill-3%22 fill%3D%22%23000000%22%3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E");\n mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%3Csvg width%3D%22300px%22 height%3D%22300px%22 viewBox%3D%220 0 300 300%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E %3C!-- Generator%3A Sketch 50.2 (55047) - http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch --%3E %3Ctitle%3Ecf_logo%3C%2Ftitle%3E %3Cdesc%3ECreated with Sketch.%3C%2Fdesc%3E %3Cdefs%3E%3C%2Fdefs%3E %3Cg id%3D%22cf_logo%22 stroke%3D%22none%22 stroke-width%3D%221%22 fill%3D%22none%22 fill-rule%3D%22evenodd%22%3E %3Cpath d%3D%22M178.263372%2C122.718681 C186.913513%2C115.731062 192.264847%2C105.825834 192.16919%2C94.8631089 C191.983342%2C73.9653286 172.094852%2C57.1484045 147.743272%2C57.1484045 C123.391692%2C57.1484045 103.497736%2C73.9653286 103.317354%2C94.8631089 C103.218964%2C105.825834 108.570299%2C115.728351 117.220439%2C122.71597 C127.925842%2C131.365758 136.693504%2C148.855142 137.210052%2C167.952465 C137.781262%2C189.145802 136.321807%2C213.674325 135.425363%2C226.155508 C123.984767%2C227.766159 115.944099%2C231.559592 115.944099%2C235.982102 C115.944099%2C241.866127 130.180618%2C248.650381 147.743272%2C248.650381 C165.303194%2C248.650381 179.539712%2C241.866127 179.539712%2C235.982102 C179.539712%2C231.559592 171.501778%2C227.766159 160.058448%2C226.155508 C159.162004%2C213.674325 157.702549%2C189.145802 158.273759%2C167.952465 C158.790308%2C148.855142 167.557969%2C131.365758 178.263372%2C122.718681%22 id%3D%22Fill-1%22 fill%3D%22%231B1A19%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M234.330842%2C245.57087 C235.853157%2C244.936371 237.629647%2C244.423892 239.594718%2C244.046988 C241.423137%2C243.645682 243.462001%2C243.390798 245.68398%2C243.317586 C245.68398%2C243.317586 245.58559%2C242.63428 245.448937%2C241.62559 C245.386076%2C240.625035 244.910523%2C239.299095 244.454102%2C237.984002 C244.224525%2C237.335946 243.989482%2C236.693313 243.779036%2C236.094064 C243.511196%2C235.500238 243.16683%2C234.952509 242.920854%2C234.477991 C242.404306%2C233.550647 242.05994%2C232.929706 242.05994%2C232.929706 C239.865291%2C232.577206 237.790898%2C232.089131 235.779364%2C231.516997 C233.729568%2C230.944864 231.802759%2C230.288673 230.108261%2C229.580963 C226.894181%2C228.179101 223.874147%2C226.609124 222.278039%2C224.857474 C220.351231%2C223.189881 219.995933%2C221.519577 220.058793%2C220.011965 C220.168116%2C219.269005 220.512482%2C218.550449 221.102823%2C217.880701 C221.641236%2C217.221798 222.354565%2C216.627973 223.382196%2C216.115493 C223.382196%2C216.115493 222.60874%2C215.689783 221.479985%2C215.057995 C220.903309%2C214.751592 220.280171%2C214.388247 219.542245%2C214.008632 C218.768788%2C213.642576 217.957069%2C213.254826 217.148083%2C212.875212 C215.551975%2C212.121406 213.955866%2C211.364888 212.619399%2C210.868678 C211.343059%2C210.356198 210.498543%2C210.014545 210.498543%2C210.014545 C208.948897%2C210.220622 207.270798%2C210.331794 205.562634%2C210.356198 C203.794343%2C210.391448 201.990522%2C210.342641 200.23863%2C210.212487 C196.789506%2C209.91693 193.280255%2C209.442412 190.246556%2C208.553029 C188.675046%2C208.151722 187.338578%2C207.677204 186.171561%2C207.153878 C185.004544%2C206.641399 183.96598%2C206.131631 183.129663%2C205.559497 C181.533555%2C204.401673 180.443064%2C203.233003 180.451263%2C202.053486 C180.451263%2C202.053486 179.483759%2C201.893506 178.037969%2C201.649468 C176.540252%2C201.418987 173.348036%2C200.993277 171.322837%2C200.724835 C171.287307%2C201.063777 171.065929%2C201.383738 170.992136%2C201.942313 L170.475588%2C204.401673 C169.420626%2C209.320393 172.293074%2C214.312324 177.16339%2C215.714186 C189.095937%2C219.157832 198.112308%2C224.83307 200.716916%2C231.796285 C205.980792%2C245.885407 183.86759%2C259.657281 150.239999%2C259.657281 C116.598742%2C259.657281 94.4828068%2C245.885407 99.7357514%2C231.796285 C102.277499%2C225.003896 110.941304%2C219.439832 122.442028%2C215.96907 C127.533722%2C214.434343 130.553755%2C209.236335 129.460531%2C204.073578 L128.749935%2C200.724835 C127.410734%2C200.882104 125.852889%2C201.077334 124.256781%2C201.272565 C122.258913%2C201.492199 120.353969%2C201.84741 118.894514%2C202.07789 C117.435059%2C202.305659 116.45389%2C202.479197 116.45389%2C202.479197 C116.55228%2C203.623463 115.729629%2C204.911441 114.158118%2C206.023169 C113.335467%2C206.581745 112.42809%2C207.164725 111.310268%2C207.690762 C110.192446%2C208.224934 108.817715%2C208.675048 107.382858%2C209.149566 C105.896073%2C209.613238 104.24257%2C209.954891 102.583602%2C210.245025 C100.951964%2C210.562275 99.2082705%2C210.792755 97.4181151%2C210.939178 C93.8460034%2C211.221177 90.2629595%2C211.294388 87.0106161%2C210.893082 C87.0106161%2C210.893082 86.7892381%2C210.977139 86.4202748%2C211.123562 C86.0649768%2C211.280831 85.4855677%2C211.486907 84.9116247%2C211.768907 C83.7200098%2C212.330194 82.1129695%2C213.094846 80.4922639%2C213.86221 C78.8961559%2C214.653977 77.4749638%2C215.50811 76.3216118%2C216.139897 C75.7422027%2C216.454435 75.2639169%2C216.725588 74.9332164%2C216.907261 C74.6271135%2C217.113337 74.4549306%2C217.221798 74.4549306%2C217.221798 C76.7015073%2C218.257604 77.9532496%2C219.659466 78.1964921%2C221.145386 C78.7622359%2C222.715363 77.9887794%2C224.344994 76.5293244%2C226.123759 C75.6848084%2C227.0267 74.5423886%2C227.878121 73.3753712%2C228.705138 C72.1372943%2C229.543002 70.5876483%2C230.334769 68.8576202%2C231.091287 C65.6189421%2C232.612456 61.4209593%2C233.951953 56.9168736%2C234.757278 C56.9168736%2C234.757278 56.5260458%2C235.391777 56.228142%2C236.338102 C55.8865093%2C237.303407 55.4328211%2C238.604943 54.9654675%2C239.933594 C54.7686871%2C241.245976 54.585572%2C242.59903 54.4379866%2C243.634836 C54.2439392%2C244.678776 54.3395964%2C245.35937 54.3395964%2C245.35937 C58.9912674%2C245.410889 63.1291229%2C246.189099 66.2202157%2C247.420135 C69.8169249%2C248.602363 71.9897089%2C250.364859 73.6705419%2C252.520527 C74.9960768%2C254.847022 75.5235577%2C257.281978 74.3428751%2C260.093837 C73.5202235%2C262.835197 71.2627145%2C265.891094 67.5840135%2C268.664991 C67.5840135%2C268.664991 67.7917261%2C268.849375 68.1470242%2C269.153067 C68.5515173%2C269.445913 69.1418586%2C269.860777 69.8524547%2C270.359699 C71.3146427%2C271.357543 73.1539932%2C272.770251 75.315845%2C274.047383 C77.5979516%2C275.291976 79.9155879%2C276.544704 81.6729466%2C277.507298 C82.5420602%2C277.995374 83.4275722%2C278.299066 83.9796507%2C278.55395 C84.5563267%2C278.808834 84.8870272%2C278.941699 84.8870272%2C278.941699 C90.0771113%2C276.739935 95.6498242%2C275.606514 101.222537%2C275.023535 C104.007527%2C274.727978 106.743322%2C274.657478 109.358862%2C274.828304 C112.020864%2C274.96117 114.734794%2C275.169958 117.273808%2C275.763783 C119.790958%2C276.422686 122.245248%2C277.043626 124.393434%2C277.995374 C126.57715%2C278.930853 128.517624%2C280.159177 130.354242%2C281.341405 C134.024744%2C283.825169 136.847996%2C287.333892 138.064209%2C291.021576 C138.064209%2C291.021576 139.952755%2C291.094787 142.78694%2C291.20596 C145.63479%2C291.27646 149.428279%2C291.534056 153.208104%2C291.338825 C156.990661%2C291.216806 160.778685%2C291.154441 163.591005%2C290.972768 C166.365063%2C290.704327 168.218079%2C290.536212 168.218079%2C290.536212 C168.608907%2C288.611024 169.469821%2C286.797009 170.647771%2C285.151108 C171.22718%2C284.348495 171.888581%2C283.581131 172.623774%2C282.865287 C173.33437%2C282.122327 174.083229%2C281.365809 174.919546%2C280.698772 C176.564849%2C279.359275 178.43973%2C278.201451 180.563318%2C277.274107 C182.624047%2C276.314224 184.835094%2C275.411284 187.387774%2C274.841862 C189.989648%2C274.329382 192.430272%2C273.819614 195.081342%2C273.63523 C197.696882%2C273.426442 200.544733%2C273.548461 203.182137%2C273.659634 C208.571735%2C273.949768 214.546208%2C275.180804 219.739025%2C277.127684 C219.739025%2C277.127684 220.889644%2C276.495897 222.60874%2C275.544149 C224.254043%2C274.57342 226.623608%2C273.415596 228.43836%2C271.978484 C230.294109%2C270.614583 232.245515%2C269.323894 233.420732%2C268.252838 C234.574084%2C267.181783 235.325676%2C266.476785 235.325676%2C266.476785 C231.461127%2C263.833041 229.236414%2C260.996778 227.815222%2C258.195765 C227.151088%2C256.845421 226.967973%2C255.576424 226.92971%2C254.323696 C226.83132%2C253.057411 227.101893%2C251.877894 227.815222%2C250.779723 C228.820989%2C248.539998 231.398266%2C246.883251 234.330842%2C245.57087%22 id%3D%22Fill-2%22 fill%3D%22%23000000%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M118.447097%2C177.453406 C118.447097%2C177.453406 123.443134%2C158.68689 101.750823%2C134.472906 L101.026562%2C133.724523 C91.8872032%2C122.97872 86.8529035%2C109.342424 86.8529035%2C95.3265125 C86.8529035%2C62.4247782 113.863752%2C35.6538187 147.067719%2C35.6538187 L148.464314%2C35.6538187 C181.671013%2C35.6538187 208.684595%2C62.4247782 208.684595%2C95.3265125 C208.684595%2C109.342424 203.650296%2C122.97872 194.519137%2C133.716388 C194.412547%2C133.835696 194.166572%2C134.087868 193.794875%2C134.456637 C174.534989%2C153.591921 177.084936%2C177.453406 177.084936%2C177.453406 C212.256707%2C165.425049 236.017946%2C132.612795 236.220192%2C95.8091653 C236.471634%2C49.7944603 199.034155%2C10.5748554 152.774352%2C8.37309111 C152.194943%2C8.34597578 151.623733%2C8.33241812 151.052523%2C8.33241812 C150.352859%2C8.33241812 147.750985%2C8.38393723 147.761917%2C8.38393723 C147.688124%2C8.38393723 145.181907%2C8.33241812 144.484976%2C8.33241812 C143.913766%2C8.33241812 143.339823%2C8.34597578 142.771346%2C8.37309111 C96.5006113%2C10.5748554 59.063132%2C49.7944603 59.3173068%2C95.8091653 C59.5140872%2C132.612795 83.2780588%2C165.425049 118.447097%2C177.453406%22 id%3D%22Fill-3%22 fill%3D%22%23000000%22%3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E");\n}\n'),me.registerProvider("cloudfoundry",{name:"Cloud Foundry",logo:{path:"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"},loadBalancer:{transformer:st,details:mt,CreateLoadBalancerModal:At},serverGroup:{skipUpstreamStageCheck:!0,transformer:Aa,detailsActions:Ma,detailsGetter:Pa,detailsSections:[fa,Ea,ba,ya,Na,ka,Sa,Fa,xa],CloneServerGroupModal:Ht,commandBuilder:Gt,scalingActivitiesEnabled:!1},instance:{details:nt}});const qa=le.providers.cloudfoundry||{defaults:{}};qa&&(qa.resetToOriginal=le.resetProvider("cloudfoundry"));export{Et as AccountRegionClusterSelector,Ea as ApplicationManagerSection,Fa as BoundServicesSection,ka as BuildSection,ut as Buildpacks,yt as CloudFoundryAsgStageConfig,Ht as CloudFoundryCreateServerGroupModal,mt as CloudFoundryLoadBalancerDetails,st as CloudFoundryLoadBalancerTransformer,rt as CloudFoundryLoadBalancerUpsertDescription,Nt as CloudFoundryLoadBalancersExecutionDetails,St as CloudFoundryLoadBalancersStageConfig,At as CloudFoundryMapLoadBalancerModal,qa as CloudFoundryProviderSettings,Ma as CloudFoundryServerGroupActions,It as CloudFoundryServerGroupCommandBuilder,Gt as CloudFoundryServerGroupCommandBuilderShim,Aa as CloudFoundryServerGroupTransformer,kt as CloudFoundryServiceExecutionDetails,Ft as CloudFoundryServiceKeyExecutionDetails,Ct as EnvironmentVariables,xa as EnvironmentVariablesSection,bt as FormikAccountRegionClusterSelector,pt as FormikConfigField,ht as HealthCheck,Na as HealthCheckSection,gt as InstanceParameters,ba as MetricsSection,Sa as PackageSection,vt as Routes,fa as ServerGroupInformationSection,ya as ServerGroupSizingSection,ft as Services,Pa as cfServerGroupDetailsGetter};
1
+ import{ApplicationNameValidator as e,HelpContentsRegistry as t,ConfirmationModalService as a,withRouter as n,InstanceWriter as r,CollapsibleSection as s,timestamp as i,AccountTag as l,RecentHistoryService as o,InstanceReader as c,Spinner as d,LoadBalancerWriter as m,HealthCounts as p,HelpField as u,FormikFormField as C,TextInput as h,RadioButtonInput as g,AppListExtractor as v,StageConfigField as f,ReactSelectInput as E,AccountService as b,TargetSelect as y,StageConstants as N,ExecutionDetailsSection as S,StageFailureMessage as k,StageExecutionLogs as F,SpinFormik as x,TaskMonitor as A,ReactModal as R,TaskMonitorWrapper as w,ModalClose as T,DeckRuntimeContext as D,noop as U,PipelineConfigValidator as G,PipelineConfigService as B,NameUtils as I,StageArtifactSelectorDelegate as M,excludeAllTypesExcept as P,ArtifactTypePatterns as q,FormValidator as L,FormikStageConfig as $,ManifestYaml as O,decodeUnicodeBase64 as V,Overridable as z,Registry as _,ExecutionDetailsTasks as H,ExecutionArtifactTab as K,ArtifactReferenceService as W,ExpectedArtifactService as j,DeployInitializer as Q,StageArtifactSelector as J,CoreRedBlackAdditionalFields as Y,Markdown as Z,CheckboxInput as X,WizardModal as ee,WizardPage as te,ServicesReader as ae,TextAreaInput as ne,SpelText as re,NumberInput as se,TaskReason as ie,ServerGroupWarningMessageService as le,SETTINGS as oe,ClusterTargetBuilder as ce,AddEntityTagLinks as de,ServerGroupReader as me,CloudProviderRegistry as pe}from"@spinnaker/core";import{UISref as ue}from"@uirouter/react";import{cloneDeep as Ce,flattenDeep as he,chain as ge,has as ve,camelCase as fe,first as Ee,uniq as be,isNil as ye,get as Ne,upperFirst as Se,set as ke,defaultsDeep as Fe,unset as xe,includes as Ae,bindAll as Re,isEmpty as we,defaults as Te,orderBy as De,find as Ue,filter as Ge}from"lodash";import Be from"react";import{Dropdown as Ie,Modal as Me,ModalFooter as Pe,Button as qe,Tooltip as Le}from"react-bootstrap";import{FieldArray as $e,getIn as Oe,Form as Ve}from"formik";import{Subject as ze,from as _e,Observable as He}from"rxjs";import{takeUntil as Ke}from"rxjs/operators";import We,{Creatable as je}from"react-select";import{safeLoad as Qe}from"js-yaml";const Je=class e{static validateSpecialCharacters(e,t,a){if(!/^([a-zA-Z][a-zA-Z0-9]*)?$/.test(e)){/^([a-zA-Z][a-zA-Z0-9-]*)?$/.test(e)||a.push("The application name must begin with a letter and must contain only letters, digits or dashes. No special characters are allowed.")}}static validateLength(t,a){t.length>e.MAX_RESOURCE_NAME_LENGTH&&a.push(`The maximum length for an application in Cloud Foundry is ${e.MAX_RESOURCE_NAME_LENGTH} characters.`)}validate(t=""){const a=[],n=[];return t&&t.length&&(e.validateSpecialCharacters(t,a,n),e.validateLength(t,n)),{warnings:a,errors:n}}};Je.MAX_RESOURCE_NAME_LENGTH=63;let Ye=Je;e.registerValidator("cloudfoundry",new Ye);const Ze={"cf.service.deploy.timeout":"(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.","cf.service.destroy.timeout":"(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.","cf.serverGroup.stack":"(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.","cf.serverGroup.detail":"(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.","cf.serverGroup.startApplication":"<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>.","cf.serverGroup.requiredRoutes":"<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.","cf.serverGroup.routes":"(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.","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>","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>","cf.runJob.logsUrl":'<p>(Optional) A templated URL to an external logging system. The URL is used in the pipeline execution stage task details.</p><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:<ul><li><code>${appGuid}</code> the selected cluster CF app GUID.</li><li><code>${name}</code> the task name.</li></ul></p>',"cf.runJob.jobName":"(Optional) If left empty, a random string will be generated."};Object.keys(Ze).forEach(e=>t.register(e,Ze[e]));class Xe extends Be.Component{constructor(){super(...arguments),this.terminateInstance=()=>{const{application:e,instance:t}=this.props,n=Ce(t);n.placement={},n.id=t.name;const s={application:e,title:"Terminating "+t.name,onTaskComplete:()=>{this.props.stateService.includes("**.serverGroup",{instanceId:t.name})&&this.props.stateService.go("^")}};a.confirm({header:"Really terminate "+t.name+"?",buttonText:"Terminate",account:t.account,taskMonitorConfig:s,submitMethod:()=>r.terminateInstance(t,e,{cloudProvider:"cloudfoundry"})})}}render(){return Be.createElement("div",{className:"actions"},Be.createElement(Ie,{className:"dropdown",id:"instance-actions-dropdown"},Be.createElement(Ie.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Instance Actions"),Be.createElement(Ie.Menu,{className:"dropdown-menu"},Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.terminateInstance},"Terminate")))))}}const et=n(Xe);class tt extends Be.Component{constructor(e){super(e)}render(){const{instance:e}=this.props;return Be.createElement("div",null,Be.createElement(s,{heading:"Instance Information",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Be.createElement("dt",null,"Launched"),Be.createElement("dd",null,i(e.launchTime)),Be.createElement("dt",null,"In"),Be.createElement("dd",null,Be.createElement(l,{account:e.account})),Be.createElement("dt",null,"Region"),Be.createElement("dd",null,e.region))),Be.createElement(s,{heading:"Status",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Be.createElement("dt",null,Be.createElement("span",{className:"glyphicon glyphicon-"+e.healthState+"-triangle"})),Be.createElement("dd",null,e.healthState),e.details&&Be.createElement("div",null,Be.createElement("dt",null,"Details"),Be.createElement("dd",null,e.details)))))}}class at extends Be.Component{constructor(e){super(e),this.state={loading:!0,instanceIdNotFound:e.instance.instanceId}}componentDidMount(){this.props.app.ready().then(()=>this.retrieveInstance(this.props.instance))}retrieveInstance(e){const t=he([this.props.app.getDataSource("serverGroups").data,this.props.app.getDataSource("loadBalancers").data,this.props.app.getDataSource("loadBalancers").data.map(e=>e.serverGroups)]).find(t=>t.instances.some(t=>t.id===e.instanceId));if(t){const a={region:t.region,account:t.account};"serverGroup"===t.category&&(a.serverGroup=t.name),o.addExtraDataToLatest("instances",a),c.getInstanceDetails(t.account,t.region,e.instanceId).then(e=>(e.account=t.account,e.region=t.region,e)).then(e=>{this.setState({instance:e,loading:!1})})}}render(){const{app:e}=this.props,{instance:t,instanceIdNotFound:a,loading:n}=this.state,r=Be.createElement("div",{className:"close-button"},Be.createElement(ue,{to:"^"},Be.createElement("span",{className:"glyphicon glyphicon-remove"})));return Be.createElement("div",{className:"details-panel"},n&&Be.createElement("div",{className:"header"},r,Be.createElement("div",{className:"horizontal center middle"},Be.createElement(d,{size:"small"}))),!n&&t&&Be.createElement("div",{className:"header"},r,Be.createElement("div",{className:"header-text horizontal middle"},Be.createElement("span",{className:"glyphicon glyphicon-hdd "+t.healthState}),Be.createElement("h3",{className:"horizontal middle space-between flex-1"},t.name)),Be.createElement(et,{application:e,instance:t})),!n&&t&&Be.createElement("div",{className:"content"},Be.createElement(tt,{instance:t})),!n&&!t&&Be.createElement("div",{className:"header"},r,Be.createElement("div",{className:"header-text horizontal middle"},Be.createElement("h3",{className:"horizontal middle space-between flex-1"},a))),!n&&!t&&Be.createElement("div",{className:"content"},Be.createElement("div",{className:"content-section"},Be.createElement("div",{className:"content-body text-center"},Be.createElement("h3",null,"Instance not found.")))))}}class nt{constructor(e){this.id=e.id,this.credentials=e.account,this.account=this.credentials,this.cloudProvider=e.cloudProvider,this.loadBalancerName=e.name,this.name=e.name,this.region=e.region,this.serverGroups=e.serverGroups,this.space=e.space}}class rt{normalizeLoadBalancer(e){e.provider=e.type,e.instanceCounts=this.buildInstanceCounts(e.serverGroups),e.instances=[],e.serverGroups.forEach(t=>{t.account=e.account,t.region=e.region,t.cloudProvider=e.provider,t.detachedInstances&&(t.detachedInstances=t.detachedInstances.map(e=>({id:e}))),t.instances=t.instances.concat(t.detachedInstances||[]).map(t=>this.transformInstance(t,e))});const t=e.serverGroups.filter(e=>!e.isDisabled);return e.instances=ge(t).map("instances").flatten().value(),Promise.resolve(e)}constructNewCloudFoundryLoadBalancerTemplate(e){return{cloudProvider:"cloudfoundry",credentials:void 0,name:e.name,id:void 0,host:"",path:"",port:"",region:"",domain:"",serverGroups:[],routes:[]}}convertLoadBalancerForEditing(e,t){return t.getDataSource("loadBalancers").ready().then(()=>{const a=t.getDataSource("loadBalancers").data.find(t=>t.name===e.name&&t.account===e.account);return a&&(e.serverGroups=Ce(a.serverGroups)),e})}convertLoadBalancerToUpsertDescription(e){return new nt(e)}buildInstanceCounts(e){const t=ge(e).map("instances").flatten().reduce((e,t)=>(ve(t,"health.state")&&e[fe(t.health.state)]++,e),{up:0,down:0,outOfService:0,succeeded:0,failed:0,starting:0,unknown:0}).value();return t.outOfService+=ge(e).map("detachedInstances").flatten().value().length,t}transformInstance(e,t){var a;e.provider=t.type,e.account=t.account,e.region=t.region,e.loadBalancers=[t.name];const n=e.health||{};return e.healthState=null!=(a=n.state)?a:"OutOfService",e.health=[n],e}}class st extends Be.Component{constructor(){super(...arguments),this.deleteLoadBalancer=()=>{const{application:e,loadBalancer:t}=this.props,n={application:e,title:"Deleting "+t.name,onTaskComplete:()=>{this.props.stateService.includes("**.serverGroup",{instanceId:t.name})&&this.props.stateService.go("^")}};a.confirm({header:"Really delete "+t.name+"?",buttonText:"Delete "+t.name,account:t.account,taskMonitorConfig:n,submitMethod:()=>{const a={cloudProvider:t.cloudProvider,credentials:t.account,regions:[t.region],loadBalancerName:t.name};return m.deleteLoadBalancer(a,e)}})}}render(){return Be.createElement("div",{className:"actions"},Be.createElement(Ie,{className:"dropdown",id:"instance-actions-dropdown"},Be.createElement(Ie.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Load Balancer Actions"),Be.createElement(Ie.Menu,{className:"dropdown-menu"},Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.deleteLoadBalancer},"Delete Load Balancer")))))}}const it=n(st);class lt extends Be.Component{constructor(e){super(e)}render(){const{loadBalancer:e}=this.props;return Be.createElement(Be.Fragment,null,Be.createElement(s,{heading:"Load Balancer Details",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Be.createElement("dt",null,"In"),Be.createElement("dd",null,Be.createElement(l,{account:e.account})),Be.createElement("dt",null,"Organization"),Be.createElement("dd",null,e.space.organization.name),Be.createElement("dt",null,"Space"),Be.createElement("dd",null,e.space.name),e.serverGroups&&Be.createElement(Be.Fragment,null,Be.createElement("dt",null,"Server Groups"),Be.createElement("dd",null,Be.createElement("ul",null,e.serverGroups.map((e,t)=>Be.createElement("li",{key:t},Be.createElement(ue,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"cloudfoundry"}},Be.createElement("a",null,e.name))))))))))}}class ot extends Be.Component{constructor(e){super(e)}render(){const{loadBalancer:e}=this.props;return Be.createElement(Be.Fragment,null,Be.createElement(s,{heading:"Status",defaultExpanded:!0},Be.createElement(p,{className:"pull-left",container:e.instanceCounts})))}}class ct extends Be.Component{constructor(e){super(e)}render(){const{loadBalancer:e}=this.props;return Be.createElement(Be.Fragment,null,Be.createElement(s,{heading:"Application links",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Be.createElement("dt",null,"HTTP"),Be.createElement("dd",null,Be.createElement("a",{href:"http://"+e.name},"http://"+e.name)),Be.createElement("dt",null,"HTTPS"),Be.createElement("dd",null,Be.createElement("a",{href:"https://"+e.name},"https://"+e.name)))))}}class dt extends Be.Component{constructor(e){super(e),this.state={loading:!0,loadBalancer:void 0,refreshListenerUnsubscribe:()=>{}},e.app.getDataSource("loadBalancers").ready().then(()=>this.extractLoadBalancer())}componentWillUnmount(){this.state.refreshListenerUnsubscribe()}extractLoadBalancer(){const{name:e}=this.props.loadBalancer,t=this.props.app.getDataSource("loadBalancers").data.find(t=>t.name===e&&t.account===this.props.loadBalancer.accountId);this.setState({loading:!1,loadBalancer:t}),this.state.refreshListenerUnsubscribe(),t?this.setState({refreshListenerUnsubscribe:this.props.app.getDataSource("loadBalancers").onRefresh(()=>this.extractLoadBalancer())}):this.setState({refreshListenerUnsubscribe:()=>{}})}render(){const{app:e}=this.props,{loadBalancer:t,loadBalancerNotFound:a,loading:n}=this.state,r=Be.createElement("div",{className:"close-button"},Be.createElement(ue,{to:"^"},Be.createElement("span",{className:"glyphicon glyphicon-remove"})));return Be.createElement("div",{className:"details-panel"},n&&Be.createElement("div",{className:"header"},r,Be.createElement("div",{className:"horizontal center middle"},Be.createElement(d,{size:"small"}))),!n&&!!t&&Be.createElement("div",{className:"header"},r,Be.createElement("div",{className:"header-text horizontal middle"},Be.createElement("i",{className:"fa icon-sitemap"}),Be.createElement("h3",{className:"horizontal middle space-between flex-1"},t.name)),Be.createElement(it,{application:e,loadBalancer:t})),!n&&!!t&&Be.createElement("div",{className:"content"},Be.createElement(lt,{loadBalancer:t}),Be.createElement(ot,{loadBalancer:t}),Be.createElement(ct,{loadBalancer:t})),!n&&!t&&Be.createElement("div",{className:"header"},r,Be.createElement("div",{className:"header-text horizontal middle"},Be.createElement("h3",{className:"horizontal middle space-between flex-1"},a))),!n&&!t&&Be.createElement("div",{className:"content"},Be.createElement("div",{className:"content-section"},Be.createElement("div",{className:"content-body text-center"},Be.createElement("h3",null,"Instance not found.")))))}}class mt extends Be.Component{constructor(e){super(e)}render(){const{label:e,helpKey:t,children:a}=this.props;return Be.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},Be.createElement("label",{className:"sm-label-right"},Be.createElement("span",{className:"label-text"},e," "),t&&Be.createElement(u,{id:t})),Be.createElement("div",{className:"flex-grow"},a))}}class pt extends Be.Component{render(){const{fieldName:e,onChange:t}=this.props;return Be.createElement("div",null,Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-12"},Be.createElement("b",null,"Buildpacks"),Be.createElement($e,{name:e,render:a=>{const n=a.form.values,r=Oe(n,e)||[];return Be.createElement("table",{className:"table table-condensed packed metadata"},Be.createElement("tbody",null,r.map((r,s)=>Be.createElement("tr",{key:s},Be.createElement("td",null,Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:`${e}[${s}]`,onChange:()=>{t&&t(Oe(n,e)||[])},input:e=>Be.createElement(h,{...e}),required:!0}))),Be.createElement("td",null,Be.createElement("a",{className:"btn btn-link sm-label",onClick:()=>a.remove(s)},Be.createElement("span",{className:"glyphicon glyphicon-trash"})))))),Be.createElement("tfoot",null,Be.createElement("tr",null,Be.createElement("td",{colSpan:2},Be.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>a.push("")},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Buildpack")))))}}))))}}class ut extends Be.Component{render(){const{fieldName:e,onChange:t}=this.props;return Be.createElement("div",null,Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-12"},Be.createElement("b",null,"Environment Variables"),Be.createElement($e,{name:e,render:a=>{const n=a.form.values,r=Oe(n,e)||[];return Be.createElement("table",{className:"table table-condensed packed tags"},Be.createElement("thead",null,Be.createElement("tr",null,Be.createElement("th",null,"Name"),Be.createElement("th",null,"Value"))),Be.createElement("tbody",null,r.map((r,s)=>{const i=`${e}[${s}]`;return Be.createElement("tr",{key:s},Be.createElement("td",null,Be.createElement(C,{name:`${i}.key`,onChange:()=>{t&&t(Oe(n,e)||[])},input:e=>Be.createElement(h,{...e}),required:!0})),Be.createElement("td",null,Be.createElement(C,{name:`${i}.value`,onChange:()=>{t&&t(Oe(n,e)||[])},input:e=>Be.createElement(h,{...e}),required:!0})),Be.createElement("td",null,Be.createElement("a",{className:"btn btn-link sm-label"},Be.createElement("span",{className:"glyphicon glyphicon-trash",onClick:()=>a.remove(s)}))))})),Be.createElement("tfoot",null,Be.createElement("tr",null,Be.createElement("td",{colSpan:3},Be.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>a.push({key:"",value:""})},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Environment Variable")))))}}))))}}class Ct extends Be.Component{constructor(){super(...arguments),this.HEALTH_CHECK_TYPE_OPTIONS=[{label:"port",value:"port"},{label:"HTTP",value:"http"},{label:"process",value:"process"}]}render(){const{healthCheckTypeFieldName:e,healthCheckType:t,healthCheckHttpEndpointFieldName:a,onHealthCheckTypeChange:n,onHealthCheckHttpEndpointChange:r}=this.props;return Be.createElement("div",{className:"col-md-9"},Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:e,label:"Health Check Type",input:e=>Be.createElement(g,{...e,inline:!0,options:this.HEALTH_CHECK_TYPE_OPTIONS}),onChange:e=>{n&&n(e)}})),"http"===t&&Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:a,label:"Endpoint",input:e=>Be.createElement(h,{...e,required:!0}),onChange:e=>{r&&r(e)},required:!0})))}}class ht extends Be.Component{render(){const{diskQuotaFieldName:e,instancesFieldName:t,memoryFieldName:a,onDiskQuotaChange:n,onInstancesChange:r,onMemoryChange:s}=this.props;return Be.createElement("div",null,Be.createElement("div",{className:"col-md-9"},Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:a,input:e=>Be.createElement(h,{...e}),label:"Memory",onChange:e=>{s&&s(e)}})),Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:e,input:e=>Be.createElement(h,{...e}),label:"Disk Quota",onChange:e=>{n&&n(e)}})),Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:t,input:e=>Be.createElement(h,{type:"number",...e}),label:"Instances",onChange:e=>{r&&r(e)},required:!0}))))}}class gt extends Be.Component{render(){const{fieldName:e,isRequired:t,onChange:a,singleRouteOnly:n}=this.props;return Be.createElement("div",null,Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-12"},Be.createElement("b",null,n?"Route":"Routes")," ",!t&&Be.createElement(u,{id:"cf.serverGroup.routes"}),!!t&&Be.createElement(u,{id:"cf.serverGroup.requiredRoutes"}),Be.createElement($e,{name:e,render:t=>{const r=t.form.values,s=Oe(r,e)||[];return Be.createElement("table",{className:"table table-condensed packed metadata"},Be.createElement("tbody",null,s.map((s,i)=>Be.createElement("tr",{key:i},Be.createElement("td",null,Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:`${e}[${i}]`,onChange:()=>{a&&a(Oe(r,e)||[])},input:e=>Be.createElement(h,{...e}),required:!0}))),Be.createElement("td",{hidden:n},Be.createElement("a",{className:"btn btn-link sm-label",onClick:()=>t.remove(i)},Be.createElement("span",{className:"glyphicon glyphicon-trash"})))))),Be.createElement("tfoot",null,Be.createElement("tr",{hidden:n},Be.createElement("td",{colSpan:2},Be.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>t.push("")},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Route")))))}}))))}}const vt=({fieldName:e})=>Be.createElement("div",null,Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-12"},Be.createElement("b",null,"Bind Services"),Be.createElement($e,{name:e,render:t=>{const a=t.form.values,n=Oe(a,e)||[];return Be.createElement("table",{className:"table table-condensed packed metadata"},Be.createElement("tbody",null,n.map((a,n)=>Be.createElement("tr",{key:n},Be.createElement("td",null,Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:`${e}[${n}]`,input:e=>Be.createElement(h,{...e}),required:!0}))),Be.createElement("td",null,Be.createElement("a",{className:"btn btn-link sm-label",onClick:()=>t.remove(n)},Be.createElement("span",{className:"glyphicon glyphicon-trash"})))))),Be.createElement("tfoot",null,Be.createElement("tr",null,Be.createElement("td",{colSpan:2},Be.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>t.push("")},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Service")))))}}))));class ft extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.setRegionList=e=>{const{application:t}=this.props,a=t=>!t||t.account===e;_e(t.ready()).pipe(Ke(this.destroy$)).subscribe(()=>{const e=v.getRegions([t],a);e.sort(),this.setState({availableRegions:e})})},this.setClusterList=(e,t)=>{const{application:a}=this.props;_e(a.ready()).pipe(Ke(this.destroy$)).subscribe(()=>{const n=v.clusterFilterForCredentialsAndRegion(e,t),r=v.getClusters([a],n),s=this.props.component[this.state.clusterField];s&&!r.includes(s)&&r.push(s),this.setState({clusters:r})})},this.onAccountUpdate=e=>{const t=e.value;this.setRegionList(t),this.setClusterList(t,[]),this.props.onComponentUpdate&&this.props.onComponentUpdate({...this.props.component,credentials:t,region:"",regions:[],[this.state.clusterField]:void 0})},this.onRegionsUpdate=e=>{const t=e.map(e=>e.value);this.setClusterList(this.props.component.credentials,t),this.props.onComponentUpdate&&this.props.onComponentUpdate({...this.props.component,regions:t,[this.state.clusterField]:void 0})},this.onRegionUpdate=e=>{const t=e.value;this.setClusterList(this.props.component.credentials,[t]),this.props.onComponentUpdate&&this.props.onComponentUpdate({...this.props.component,region:t,[this.state.clusterField]:void 0})},this.onClusterUpdate=e=>{const t=e.value,a=v.monikerClusterNameFilter(t),n=Ee(be(v.getMonikers([this.props.application],a)));let r;if(ye(n)?r=void 0:(n.sequence=null,r=n),e.className){const e=this.state.clusters;e.push(t),this.setState(e)}this.props.onComponentUpdate&&this.props.onComponentUpdate({...this.props.component,[this.state.clusterField]:t,moniker:r})};const t=e.clusterField||"cluster";this.state={availableRegions:[],cloudProvider:e.cloudProvider,clusterField:t,clusters:[],componentName:e.componentName||"",[t]:e.component[t]}}componentDidMount(){this.setRegionList(this.props.component.credentials),this.setClusterList(this.props.component.credentials,this.props.isSingleRegion?[this.props.component.region]:this.props.component.regions)}componentWillUnmount(){this.destroy$.next()}render(){const{accounts:e,isSingleRegion:t,component:a}=this.props,{availableRegions:n,clusters:r,clusterField:s,componentName:i}=this.state;return Be.createElement(Be.Fragment,null,Be.createElement(f,{label:"Account"},Be.createElement(We,{name:i?`${i}.credentials`:"credentials",options:e&&e.map(e=>({label:e.name,value:e.name})),clearable:!1,value:a.credentials,onChange:this.onAccountUpdate})),!t&&Be.createElement(f,{label:"Region"},Be.createElement(We,{name:i?`${i}.regions`:"regions",options:n&&n.map(e=>({label:e,value:e})),multi:!0,clearable:!1,value:a.regions,onChange:this.onRegionsUpdate})),t&&Be.createElement(f,{label:"Region"},Be.createElement(We,{name:i?`${i}.region`:"region",options:n&&n.map(e=>({label:e,value:e})),multi:!1,clearable:!1,value:a.region,onChange:this.onRegionUpdate})),Be.createElement(f,{label:"Cluster",helpKey:"pipeline.config.findAmi.cluster"},Be.createElement(je,{name:i?`${i}.${s}`:`${s}`,options:r&&r.map(e=>({label:e,value:e})),clearable:!1,value:a[s],onChange:this.onClusterUpdate})))}}class Et extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.setRegionList=e=>{const{application:t}=this.props,a=t=>!t||t.account===e;_e(t.ready()).pipe(Ke(this.destroy$)).subscribe(()=>{const e=v.getRegions([t],a);e.sort(),this.setState({availableRegions:e})})},this.setClusterList=(e,t)=>{const{application:a}=this.props;_e(a.ready()).pipe(Ke(this.destroy$)).subscribe(()=>{const n=v.clusterFilterForCredentialsAndRegion(e,t),r=v.getClusters([a],n);this.setState({clusters:r})})},this.accountChanged=e=>{this.setRegionList(e),this.setClusterList(e,[])},this.regionChanged=e=>{const{componentName:t,formik:a}=this.props,{credentialsField:n}=this.state,r=Ne(a.values,t?`${t}.${n}`:`${n}`,void 0);this.setClusterList(r,[e])};const t=e.credentialsField||"credentials",a=e.clusterField||"cluster";this.state={availableRegions:[],cloudProvider:e.cloudProvider,clusterField:a,clusters:[],componentName:e.componentName||"",credentialsField:t}}componentDidMount(){const{componentName:e,formik:t}=this.props,{credentialsField:a}=this.state,n=Ne(t.values,e?`${e}.${a}`:`${a}`,void 0),r=Ne(t.values,e?`${e}.region`:"region",void 0);this.setRegionList(n),this.setClusterList(n,[r])}componentWillUnmount(){this.destroy$.next()}render(){const{accounts:e}=this.props,{credentialsField:t,availableRegions:a,clusters:n,clusterField:r,componentName:s}=this.state;return Be.createElement("div",{className:"col-md-9"},Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:s?`${s}.${t}`:`${t}`,label:"Account",input:t=>Be.createElement(E,{inputClassName:"cloudfoundry-react-select",...t,stringOptions:e&&e.map(e=>e.name),clearable:!1}),onChange:this.accountChanged,required:!0})),Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:s?`${s}.region`:"region",label:"Region",input:e=>Be.createElement(E,{inputClassName:"cloudfoundry-react-select",...e,stringOptions:a,clearable:!1}),onChange:this.regionChanged,required:!0})),Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:s?`${s}.${r}`:`${r}`,label:"Cluster",input:e=>Be.createElement(E,{inputClassName:"cloudfoundry-react-select",...e,stringOptions:n,clearable:!1}),required:!0})))}}class bt extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.targetUpdated=e=>{this.props.updateStageField({target:e})},this.componentUpdated=e=>{this.props.updateStageField({credentials:e.credentials,regions:e.regions,cluster:e.cluster})},this.props.updateStageField({cloudProvider:"cloudfoundry"}),this.state={accounts:[]}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{application:e,pipeline:t,stage:a}=this.props,{target:n}=a,{accounts:r}=this.state;return Be.createElement("div",{className:"form-horizontal"},!t.strategy&&Be.createElement(ft,{accounts:r,application:e,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdated,component:a}),Be.createElement(f,{label:"Target"},Be.createElement(y,{model:{target:n},options:N.TARGET_LIST,onChange:this.targetUpdated})))}}function yt(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"credentials",void 0),r=Ne(a,"region",void 0),s=Ne(a,"loadBalancerNames",void 0),i=Ne(a,"serverGroupName",void 0);return Be.createElement(S,{name:e.name,current:e.current},Be.createElement("div",{className:"step-section-details"},Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-md-12"},Be.createElement("dl",{className:"dl-horizontal"},Be.createElement("dt",null,"Account"),Be.createElement("dd",null,Be.createElement(l,{account:n})),Be.createElement("dt",null,"Region"),Be.createElement("dd",null,r,Be.createElement("br",null)),Be.createElement("dt",null,"Server Group Name"),Be.createElement("dd",null,i,Be.createElement("br",null)),Be.createElement("dt",null,"Load Balancers"),Be.createElement("dd",null,s.join(", "),Be.createElement("br",null)))))),Be.createElement(k,{stage:e.stage,message:e.stage.failureMessage}),Be.createElement(F,{stage:e.stage}))}(yt||(yt={})).title="cloudfoundryLoadBalancersConfig";class Nt extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.formikRef=Be.createRef(),this.targetUpdated=e=>{this.props.updateStageField({target:e})},this.componentUpdated=e=>{this.props.updateStageField({credentials:e.credentials,region:e.region,cluster:e.cluster,loadBalancerNames:e.loadBalancerNames})};const{loadBalancerNames:t}=e.stage,a=t&&t.length?t:[""];this.props.updateStageField({cloudProvider:"cloudfoundry",loadBalancerNames:a}),this.state={accounts:[],application:e.application,initialValues:{routes:a},pipeline:e.pipeline}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{stage:e}=this.props,{accounts:t,application:a,initialValues:n,pipeline:r}=this.state,{target:s}=e;return Be.createElement("div",{className:"form-horizontal"},!r.strategy&&Be.createElement(ft,{accounts:t,application:a,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.componentUpdated,component:e}),Be.createElement(f,{label:"Target"},Be.createElement(y,{model:{target:s},options:N.TARGET_LIST,onChange:this.targetUpdated})),Be.createElement(x,{ref:this.formikRef,initialValues:n,onSubmit:null,render:()=>Be.createElement(gt,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0,onChange:t=>{e.loadBalancerNames=t,this.componentUpdated(e)}})}))}}function St(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"service.account",void 0),r=Ne(a,"service.region",void 0),s=Ne(a,"service.instance.name",void 0);return Be.createElement(S,{name:e.name,current:e.current},Be.createElement("div",{className:"step-section-details"},Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-md-12"},Be.createElement("dl",{className:"dl-horizontal"},Be.createElement("dt",null,"Account"),Be.createElement("dd",null,Be.createElement(l,{account:n})),Be.createElement("dt",null,"Region"),Be.createElement("dd",null,r,Be.createElement("br",null)),Be.createElement("dt",null,"Service Instance Name"),Be.createElement("dd",null,s,Be.createElement("br",null)))))),Be.createElement(k,{stage:t,message:t.failureMessage}),Be.createElement(F,{stage:t}))}function kt(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"service.account",void 0),r=Ne(a,"service.region",void 0),s=Ne(a,"serviceInstanceName",void 0),i=Ne(a,"serviceKeyName",void 0);return Be.createElement(S,{name:e.name,current:e.current},Be.createElement("div",{className:"step-section-details"},Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-md-12"},Be.createElement("dl",{className:"dl-horizontal"},Be.createElement("dt",null,"Account"),Be.createElement("dd",null,Be.createElement(l,{account:n})),Be.createElement("dt",null,"Region"),Be.createElement("dd",null,r,Be.createElement("br",null)),Be.createElement("dt",null,"Service Instance Name"),Be.createElement("dd",null,s,Be.createElement("br",null)),Be.createElement("dt",null,"Service Key Name"),Be.createElement("dd",null,i,Be.createElement("br",null)))))),Be.createElement(k,{stage:e.stage,message:e.stage.failureMessage}),Be.createElement(F,{stage:e.stage}))}(St||(St={})).title="cloudfoundryServiceConfig",(kt||(kt={})).title="cloudfoundryServiceKeyConfig";const Ft=class e extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.formikRef=Be.createRef(),this.submit=e=>{var t,a;const{routes:n}=e,r=null==(a=null==(t=this.props.application.serverGroups)?void 0:t.data)?void 0:a.find(e=>e.cluster===this.state.selectedValues.cluster&&e.account===this.state.selectedValues.credentials&&e.region===this.state.selectedValues.region),s={account:r.account,cloudProvider:r.cloudProvider,cluster:r.cluster,instanceCounts:r.instanceCounts,instances:r.instances,loadBalancers:n,name:r.name,region:r.region,type:r.type};this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.mapLoadBalancers(s,this.props.application,{serverGroupName:r.name}))},this.close=e=>{this.props.dismissModal.apply(null,e)},this.accountRegionClusterUpdated=e=>{this.setState({selectedValues:{cluster:e.cluster,credentials:e.credentials,region:e.region,routes:[""]}})},this.state={accounts:[],regions:[],application:e.application,selectedValues:{credentials:"",region:"",cluster:"",routes:[""]},taskMonitor:new A({application:e.application,title:"Mapping a route to your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.props.application.serverGroups.refresh()})},_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}static show(t,a){return R.show(e,{application:t.app},{dialogClassName:"wizard-modal modal-lg"},a)}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{accounts:e,application:t,selectedValues:a}=this.state;return Be.createElement(Be.Fragment,null,Be.createElement(w,{monitor:this.state.taskMonitor}),Be.createElement(x,{ref:this.formikRef,initialValues:a,onSubmit:this.submit,render:n=>Be.createElement(Be.Fragment,null,Be.createElement(T,{dismiss:this.close}),Be.createElement(Me.Header,null,Be.createElement(Me.Title,null,"Map route")),Be.createElement(Me.Body,null,Be.createElement(Ve,{className:"form-horizontal"},Be.createElement(ft,{accounts:e,application:t,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.accountRegionClusterUpdated,component:a}),Be.createElement(gt,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0}))),Be.createElement(Pe,null,Be.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Be.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(n.values),disabled:!n.isValid},"Submit")))}))}};Ft.contextType=D,Ft.defaultProps={closeModal:U,dismissModal:U};let xt=Ft;G.registerValidator("cfTargetImpedance",new class{validate(e,t,a,n){const r=B.getAllUpstreamDependencies(e,t),s=t.regions||[];let i=!0;return s.forEach(e=>{let a=!1;r.forEach(n=>{"deploy"===n.type&&n.clusters&&n.clusters.length?n.clusters.forEach(n=>{I.getClusterName(n.application,n.stack,n.freeFormDetails)===t.cluster&&n.account===t.credentials&&n.region===e&&(a=!0)}):"cloneServerGroup"===n.type&&I.getClusterName(n.application,n.stack,n.freeFormDetails)===t.cluster&&n.region===e&&(a=!0)}),a||(i=!1)}),i?null:a.message}});G.registerValidator("cfInstanceSizeField",new class{validate(e,t,a){return this.passesValidation(t,a)?null:this.validationMessage(a,e)}passesValidation(e,t){return this.fieldIsValid(e,t)}validationMessage(e,t){const a=this.printableFieldLabel(e),n=ve(e,"min"),r=n?Ne(e,"min"):"NA",s=ve(e,"max"),i=s?Ne(e,"max"):"NA";let l="";return n?l=s?`<strong>${a}</strong> should be from ${r} to ${i} in ${t.name}.`:`<strong>${a}</strong> should be at least ${r} in ${t.name}.`:s&&(l=`<strong>${a}</strong> should be no more than ${i} in ${t.name}.`),e.message||l}printableFieldLabel(e){const t=e.fieldLabel||e.fieldName;return Se(t)}fieldIsValid(e,t){const a=ve(e,t.fieldName),n=Ne(e,t.fieldName),r=ve(t,"max"),s=ve(t,"min"),i=Ne(t,"max"),l=Ne(t,"min");return a&&(!r||r&&n<=i)&&(!s||s&&n>=l)}});G.registerValidator("cfRequiredRoutesField",new class{validate(e,t,a){const n=Ne(t,a.fieldName).map(e=>{if(null===/^([-\w]+)\.([-.\w]+)(:\d+)?([-/\w]+)?$/gm.exec(e=e||"")){if(null===/^\${.*}$/g.exec(e))return`"${e}" did not match the expected format "host.some.domain[:9999][/some/path]"`}return null}).filter(e=>null!=e);return n&&n.length&&n[0]||null}});const At=class e extends Be.Component{constructor(){super(...arguments),this.onTemplateArtifactEdited=(e,t)=>{this.props.formik.setFieldValue(`inputArtifacts[${t}].id`,null),this.props.formik.setFieldValue(`inputArtifacts[${t}].artifact`,e),this.props.formik.setFieldValue(`inputArtifacts[${t}].account`,e.artifactAccount)},this.onTemplateArtifactSelected=(e,t)=>{this.props.formik.setFieldValue(`inputArtifacts[${t}].id`,e),this.props.formik.setFieldValue(`inputArtifacts[${t}].artifact`,null)},this.addInputArtifact=()=>{const e=[...this.props.formik.values.inputArtifacts,{account:"",id:""}];this.props.formik.setFieldValue("inputArtifacts",e)},this.removeInputArtifact=e=>{const t=[...this.props.formik.values.inputArtifacts];t.splice(e,1),this.props.formik.setFieldValue("inputArtifacts",t)},this.getInputArtifact=(e,t)=>e.inputArtifacts&&0!==e.inputArtifacts.length?e.inputArtifacts[t]:{account:"",id:""},this.outputNameChange=e=>{const t=this.props.formik.values.expectedArtifacts;t&&1===t.length&&t[0].matchArtifact&&"embedded/base64"===t[0].matchArtifact.type&&this.props.formik.setFieldValue("expectedArtifacts",[{...t[0],matchArtifact:{...t[0].matchArtifact,name:e}}])}}componentDidMount(){const e=this.props.formik.values;e.inputArtifacts&&0===e.inputArtifacts.length&&this.props.formik.setFieldValue("inputArtifacts",[{account:"",id:""}])}render(){const t=this.props.formik.values;return Be.createElement(Be.Fragment,null,Be.createElement("h4",null,"Manifest Options"),Be.createElement(f,{fieldColumns:3,label:"Name",helpKey:"pipeline.config.bake.cf.manifest.name"},Be.createElement(h,{onChange:e=>{this.props.formik.setFieldValue("outputName",e.target.value),this.outputNameChange(e.target.value)},value:t.outputName})),Be.createElement("h4",null,"Manifest Template"),Be.createElement(M,{artifact:this.getInputArtifact(t,0).artifact,excludedArtifactTypePatterns:e.excludedArtifactTypes,expectedArtifactId:this.getInputArtifact(t,0).id,label:"Template Artifact",onArtifactEdited:e=>{this.onTemplateArtifactEdited(e,0)},helpKey:"pipeline.config.bake.cf.manifest.templateArtifact",onExpectedArtifactSelected:e=>this.onTemplateArtifactSelected(e.id,0),pipeline:this.props.pipeline,stage:t}),Be.createElement("h4",null,"Manifest Variables"),t.inputArtifacts&&t.inputArtifacts.length>1&&Be.createElement("div",{className:"row form-group"},t.inputArtifacts.slice(1).map((e,a)=>Be.createElement("div",{key:a},Be.createElement("div",{className:"col-md-offset-1 col-md-9"},Be.createElement(M,{artifact:e.artifact,excludedArtifactTypePatterns:[],expectedArtifactId:e.id,label:"Variables Artifact",onArtifactEdited:e=>{this.onTemplateArtifactEdited(e,a+1)},onExpectedArtifactSelected:e=>this.onTemplateArtifactSelected(e.id,a+1),helpKey:"pipeline.config.bake.cf.manifest.varsArtifact",pipeline:this.props.pipeline,stage:t})),Be.createElement("div",{className:"col-md-1"},Be.createElement("div",{className:"form-control-static"},Be.createElement("button",{onClick:()=>this.removeInputArtifact(a+1)},Be.createElement("span",{className:"glyphicon glyphicon-trash"}),Be.createElement("span",{className:"sr-only"},"Remove field"))))))),Be.createElement(f,{fieldColumns:8,label:""},Be.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addInputArtifact()},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),"Add variables artifact")))}};At.excludedArtifactTypes=P(q.BITBUCKET_FILE,q.CUSTOM_OBJECT,q.EMBEDDED_BASE64,q.GCS_OBJECT,q.GITHUB_FILE,q.GITLAB_FILE,q.S3_OBJECT,q.HTTP_FILE,q.ORACLE_OBJECT);let Rt=At;function wt(e){const t=new L(e);return t.field("expectedArtifacts","Produced artifacts").required().withValidators(e=>{if(!function(e){var t,a;return 1===(null==e?void 0:e.length)&&"embedded/base64"===(null==(a=null==(t=e[0])?void 0:t.matchArtifact)?void 0:a.type)}(e))return"Exactly one expected artifact of type embedded/base64 must be configured in the Produces Artifacts section"}),t.field("outputName","Name").required(),t.field("inputArtifacts","Template and Variables Artifacts").required().withValidators(e=>{if(!function(e){return(null==e?void 0:e.length)>=2}(e))return"There should be one manifest template and at least one variables artifact"}),t.validateForm()}var Tt=Object.getOwnPropertyDescriptor;let Dt=class extends Be.Component{render(){const{current:e,name:t,stage:a}=this.props,n=(a.context.artifacts||[]).filter(e=>"embedded/base64"===e.type);return Be.createElement(S,{name:t,current:e},Be.createElement(k,{stage:a,message:a.failureMessage}),n.map((e,t)=>Be.createElement(O,{key:t,linkName:n.length>1?`Baked Manifest ${t} YAML`:"Baked Manifest YAML",manifestText:V(e.reference),modalTitle:"Baked Manifest"})))}};Dt.title="bakedManifest",Dt=((e,t,a,n)=>{for(var r,s=n>1?void 0:n?Tt(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(s=r(s)||s);return s})([z("bakeManifest.bakeManifestDetailsTab")],Dt);_.pipeline.registerStage({label:"Bake CloudFoundry Manifest",description:"Bake a CF manifest using external variables files.",key:"bakeCloudFoundryManifest",component:function({application:e,pipeline:t,stage:a,updateStage:n}){const r=Be.useMemo(()=>({inputArtifacts:[],...Ce(a)}),[]);return Be.createElement($,{application:e,onChange:n,pipeline:t,stage:r,validate:wt,render:e=>Be.createElement(Rt,{...e})})},producesArtifacts:!0,cloudProvider:"cloudfoundry",executionDetailsSections:[Dt,H,K],artifactExtractor:e=>j.accumulateArtifacts(["inputArtifacts"])(e).map(e=>e.id),artifactRemover:(e,t)=>{var a,n;W.removeArtifactFromFields(["expectedArtifactId"])(e,t);const r=e=>e.id!==t;e.expectedArtifacts=(null!=(a=e.expectedArtifacts)?a:[]).filter(r),e.inputArtifacts=(null!=(n=e.inputArtifacts)?n:[]).filter(r)},validateFn:wt});class Ut{static envVarsFromObject(e){const t=[];for(const a in e)if(e.hasOwnProperty(a)){const n={key:a,value:e[a]};t.push(n)}return t}static getSubmitButtonLabel(e){switch(e){case"createPipeline":return"Add";case"editPipeline":case"editClonePipeline":return"Done";case"clone":return"Clone";default:return"Create"}}static buildNewServerGroupCommand(e,t){return t=t||{},{application:e.name,stack:"",freeFormDetails:"",region:"",strategy:"",credentials:"",viewState:{mode:t.mode||"create",submitButtonLabel:Ut.getSubmitButtonLabel(t.mode||"create")},selectedProvider:"cloudfoundry",startApplication:!0}}static buildServerGroupCommandFromExisting(e,t,a="clone"){const n=this.buildNewServerGroupCommand(e,{mode:a});return n.credentials="",n.manifest={direct:{memory:t.memory?t.memory+"M":"1024M",diskQuota:t.diskQuota?t.diskQuota+"M":"1024M",buildpacks:t.droplet&&t.droplet.buildpacks?t.droplet.buildpacks.map(e=>e.name):[],instances:t.instances?t.instances.length:1,routes:t.loadBalancers||[],environment:Ut.envVarsFromObject(t.env),services:(t.serviceInstances||[]).map(e=>e.name),healthCheckType:"port"}},n.region="",n.stack=t.stack,n.freeFormDetails=t.detail,n.source={asgName:t.name,region:t.region,account:t.account},n}static buildNewServerGroupCommandForPipeline(e,t){const a=this.buildNewServerGroupCommand({name:t.application},{mode:"editPipeline"});return a.viewState={...a.viewState,pipeline:t,requiresTemplateSelection:!0,stage:e},a}static buildServerGroupCommandFromPipeline(e,t,a,n){const r=this.buildNewServerGroupCommand(e,{mode:"editPipeline"});return r.credentials=t.account,r.applicationArtifact=t.applicationArtifact,r.delayBeforeDisableSec=t.delayBeforeDisableSec,r.manifest=t.manifest,r.maxRemainingAsgs=t.maxRemainingAsgs,r.region=t.region,r.rollback=t.rollback,r.strategy=t.strategy,r.startApplication=t.startApplication,r.targetPercentages=t.targetPercentages,r.delayBeforeScaleDownSec=t.delayBeforeScaleDownSec,t.stack&&(r.stack=t.stack),t.freeFormDetails&&(r.freeFormDetails=t.freeFormDetails),r.viewState={...r.viewState,pipeline:n,stage:a},r}static buildCloneServerGroupCommandFromPipeline(e,t){const a=this.buildNewServerGroupCommand({name:t.application},{mode:"editClonePipeline"});return a.credentials=e.credentials,a.capacity=e.capacity,a.account=e.account,a.delayBeforeDisableSec=e.delayBeforeDisableSec,a.freeFormDetails=e.freeFormDetails||a.freeFormDetails,a.maxRemainingAsgs=e.maxRemainingAsgs,a.region=e.region,a.startApplication=void 0===e.startApplication||e.startApplication,a.stack=e.stack||a.stack,a.strategy=e.strategy,a.target=e.target,a.targetCluster=e.targetCluster,a.manifest=e.manifest||a.manifest,a.source=e.source,a.viewState={...a.viewState,pipeline:t,stage:e},a}}class Gt{buildNewServerGroupCommand(e,t){return Promise.resolve(Ut.buildNewServerGroupCommand(e,t))}buildServerGroupCommandFromExisting(e,t,a="clone"){return Promise.resolve(Ut.buildServerGroupCommandFromExisting(e,t,a))}buildNewServerGroupCommandForPipeline(e,t){return Promise.resolve(Ut.buildNewServerGroupCommandForPipeline(e,t))}buildServerGroupCommandFromPipeline(e,t,a,n){return Promise.resolve(Ut.buildServerGroupCommandFromPipeline(e,t,a,n))}buildCloneServerGroupCommandFromPipeline(e,t){return Promise.resolve(Ut.buildCloneServerGroupCommandFromPipeline(e,t))}}class Bt extends Be.Component{constructor(e){super(e),this.state={templateSelectionText:{copied:["account, region, cluster name (stack, details)","routes","service instances","instance settings","environment variables"],notCopied:["artifacts"],additionalCopyText:""}}}render(){const{app:e,command:t,onDismiss:a,onTemplateSelected:n}=this.props,{templateSelectionText:r}=this.state;return Be.createElement(Q,{cloudProvider:"cloudfoundry",application:e,command:t,onDismiss:a,onTemplateSelected:n,templateSelectionText:r})}}class It extends Be.Component{constructor(){super(...arguments),this.excludedArtifactTypePatterns=[q.KUBERNETES,q.FRONT50_PIPELINE_TEMPLATE],this.onExpectedArtifactSelected=e=>{this.props.formik.setFieldValue("applicationArtifact",{artifactId:e.id})},this.onArtifactChanged=e=>{this.props.formik.setFieldValue("applicationArtifact",{artifact:e})}}static get LABEL(){return"Artifact"}validate(e){const{applicationArtifact:t}=this.props.formik.values,a={};return t&&(t.artifact&&t.artifact.type&&t.artifact.reference||t.artifactId)||(a.applicationArtifact="Application artifact information is required"),a}render(){const{formik:e,stage:t,pipeline:a}=this.props,n=e.values.applicationArtifact;return Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-11"},Be.createElement("div",{className:"StandardFieldLayout flex-container-h margin-between-lg"},Be.createElement("div",{className:"flex-grow"},Be.createElement(J,{pipeline:a,stage:t,expectedArtifactId:n&&n.artifactId,artifact:n&&n.artifact,onExpectedArtifactSelected:this.onExpectedArtifactSelected,onArtifactEdited:this.onArtifactChanged,excludedArtifactTypePatterns:this.excludedArtifactTypePatterns,renderLabel:e=>Be.createElement(mt,{label:"Artifact"},e)})))))}}class Mt extends Be.Component{constructor(e){super(e);const{source:t}=e;this.props.formik.setFieldValue("source",t)}render(){const{source:e}=this.props;return Be.createElement("div",null,Be.createElement("div",{className:"form-group row"},Be.createElement("label",{className:"col-md-3 col-form-label sm-label-right"},"Account"),Be.createElement("div",{className:"col-md-7"},Be.createElement("input",{className:"form-control",type:"text",id:"cluster",value:e.account,readOnly:!0}))),Be.createElement("div",{className:"form-group row"},Be.createElement("label",{className:"col-md-3 col-form-label sm-label-right"},"Region"),Be.createElement("div",{className:"col-md-7"},Be.createElement("input",{className:"form-control",type:"text",id:"cluster",value:e.region,readOnly:!0}))),Be.createElement("div",{className:"form-group row"},Be.createElement("label",{className:"col-md-3 col-form-label sm-label-right"},"Server Group"),Be.createElement("div",{className:"col-md-7"},Be.createElement("input",{className:"form-control",type:"text",id:"cluster",value:e.asgName,readOnly:!0}))))}}class Pt extends Be.Component{constructor(){super(...arguments),this.handlePercentChange=(e,t,a)=>{const n=this.props.command.targetPercentages;n[a]=t,ke(this.props.command,e,n),this.forceUpdate()},this.onDelete=e=>{const t=this.props.command.targetPercentages;t.splice(e,1),ke(this.props.command,"targetPercentages",t),this.forceUpdate()},this.addPercent=()=>{const e=this.props.command.targetPercentages;e.push(100),ke(this.props.command,"targetPercentages",e),this.forceUpdate()},this.handleChange=(e,t)=>{ke(this.props.command,e,t),this.forceUpdate()}}render(){const{command:e}=this.props;return Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-12"},Be.createElement("div",{className:"col-md-12 checkbox"},Be.createElement("label",null,Be.createElement("input",{type:"checkbox",checked:e.rollback.onFailure,onChange:e=>this.handleChange("rollback.onFailure",e.target.checked)}),"Rollback to previous server group if deployment fails ",Be.createElement(u,{id:"strategy.rollingRedBlack.rollback"}))),Be.createElement("div",{className:"col-md-12 form-inline sp-margin-m-bottom sp-margin-m-top"},Be.createElement("label",null,"Wait Before Scale Down  ",Be.createElement(u,{content:"Time to wait before scaling down source server group"})),Be.createElement("div",null,Be.createElement("input",{className:"form-control input-sm",style:{width:"60px"},min:"0",type:"number",value:e.delayBeforeDisableSec,onChange:e=>this.handleChange("delayBeforeDisableSec",e.target.value),placeholder:"0"}),"  seconds")),Be.createElement("div",{className:"col-md-12 form-inline sp-margin-m-bottom"},Be.createElement("label",null,"Maximum number of server groups to leave  ",Be.createElement(u,{id:"strategy.redblack.maxRemainingAsgs"})),Be.createElement("div",null,Be.createElement("input",{className:"form-control input-sm",style:{width:"60px"},min:"2",type:"number",value:e.maxRemainingAsgs,onChange:e=>this.handleChange("maxRemainingAsgs",e.target.value)}),"  server groups")),Be.createElement("div",{className:"col-md-12 form-inline sp-margin-m-bottom"},Be.createElement("label",null,"Wait Before Cluster Scale Down  ",Be.createElement(u,{content:"Time to wait before scaling down the cluster after deployment"})),Be.createElement("div",null,Be.createElement("input",{className:"form-control input-sm",style:{width:"60px"},min:"0",type:"number",value:e.delayBeforeScaleDownSec,onChange:e=>this.handleChange("delayBeforeScaleDownSec",e.target.value),placeholder:"0"}),"  seconds")),Be.createElement("label",null,"Scale by percentages  ",Be.createElement(u,{content:"Steps to get to full capacity in percent"})),Be.createElement("table",{className:"table table-condensed packed metadata"},Be.createElement("tbody",null,e.targetPercentages.map((e,t)=>Be.createElement("tr",{key:t},Be.createElement("td",null,Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement("input",{className:"form-control",min:"0",type:"number",value:e,onChange:e=>this.handlePercentChange("targetPercentages",e.target.value,t),placeholder:"100"}))),Be.createElement("td",null,Be.createElement("a",{className:"btn btn-link sm-label",onClick:()=>this.onDelete(t)},Be.createElement("span",{className:"glyphicon glyphicon-trash"})))))),Be.createElement("tfoot",null,Be.createElement("tr",null,Be.createElement("td",{colSpan:2},Be.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>this.addPercent()},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add percentage")))))))}}class qt extends Be.Component{constructor(){super(...arguments),this.state={strategies:[{label:"None",description:"Creates the next server group with no impact on existing server groups",key:""},{label:"Highlander",description:"Destroys <i>all</i> previous server groups in the cluster as soon as new server group passes health checks",key:"highlander"},{label:"Red/Black",description:"Disables <i>all</i> previous server groups in the cluster as soon as new server group passes health checks",key:"redblack",additionalFields:["maxRemainingAsgs"],AdditionalFieldsComponent:Y,initializationMethod:e=>{Fe(e,{rollback:{onFailure:!1},maxRemainingAsgs:2,delayBeforeDisableSec:0,delayBeforeScaleDownSec:0,scaleDown:!1})}},{label:"Rolling Red/Black",description:"Gradually replaces <i>all</i> previous server group instances in the cluster as soon as new server group instances pass health checks",key:"cfrollingredblack",additionalFields:["targetPercentages"],AdditionalFieldsComponent:Pt,initializationMethod:e=>{Fe(e,{rollback:{onFailure:!1},targetPercentages:e.targetPercentages?e.targetPercentages:[50,100],delayBeforeDisableSec:0,delayBeforeScaleDownSec:0,maxRemainingAsgs:2,scaleDown:!1})}}],currentStrategy:null,AdditionalFieldsComponent:void 0},this.strategyChanged=e=>{this.selectStrategy(e.key)},this.strategyOptionRenderer=e=>Be.createElement("div",{className:"body-regular"},Be.createElement("strong",null,Be.createElement(Z,{tag:"span",message:e.label})),Be.createElement("div",null,Be.createElement(Z,{tag:"span",message:e.description})))}selectStrategy(e){const{command:t,onStrategyChange:a}=this.props,n=this.state.strategies.find(e=>e.key===this.state.currentStrategy),r=this.state.strategies.find(t=>t.key===e);let s;n&&n.additionalFields&&n.additionalFields.forEach(e=>{r&&r.additionalFields&&r.additionalFields.includes(e)||xe(t,e)}),r&&(s=r.AdditionalFieldsComponent,r.initializationMethod&&r.initializationMethod(t)),t.strategy=e,a&&r&&a(t,r),this.setState({currentStrategy:e,AdditionalFieldsComponent:s})}componentDidMount(){this.selectStrategy(this.props.command.strategy)}render(){const{command:e,onFieldChange:t}=this.props,{AdditionalFieldsComponent:a,currentStrategy:n,strategies:r}=this.state,s=Boolean(a);return r&&r.length?Be.createElement("div",null,Be.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},Be.createElement("div",{className:"sm-label-right",style:{paddingLeft:"13px"}},"Strategy  ",Be.createElement(u,{id:"core.serverGroup.strategy"})),Be.createElement("div",{className:"flex-grow"},Be.createElement(We,{clearable:!1,required:!0,options:r,placeholder:"None",valueKey:"key",value:n,optionRenderer:this.strategyOptionRenderer,valueRenderer:e=>Be.createElement(Be.Fragment,null,e.label),onChange:this.strategyChanged}))),s&&Be.createElement("div",{className:"form-group col-md-9 col-md-offset-3",style:{marginTop:"5px",float:"right"}},Be.createElement(a,{command:e,onChange:t}))):null}}function Lt(e,t){void 0===t&&(t={});var a=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===a&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}Lt(".cloud-foundry-radio-button {\n margin-left: 20px;\n padding-left: 20px;\n padding-right: 20px;\n}\n.cloud-foundry-input {\n margin-left: 15px;\n}\n.cloud-foundry-checkbox input[type='checkbox'] {\n margin-left: -5px;\n margin-top: 9px;\n}\n");class $t extends Be.Component{constructor(){super(...arguments),this.destroy$=new ze,this.state={accounts:[],regions:[]},this.accountChanged=()=>{this.updateRegionList(),this.props.formik.setFieldValue("region","")},this.updateRegionList=()=>{const e=Ne(this.props.formik.values,"credentials",void 0);e&&_e(b.getRegionsForAccount(e)).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({regions:e}))},this.strategyChanged=(e,t)=>{this.props.formik.setFieldValue("strategy",t.key)},this.onStrategyFieldChange=(e,t)=>{this.props.formik.setFieldValue(e,t)}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>{this.setState({accounts:e}),this.updateRegionList()})}componentWillUnmount(){this.destroy$.next()}render(){const{formik:e}=this.props,{accounts:t,regions:a}=this.state,{values:n}=e;return Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-11"},Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:"credentials",label:"Account",input:e=>Be.createElement(E,{inputClassName:"cloudfoundry-react-select",...e,stringOptions:t&&t.map(e=>e.name),clearable:!1}),onChange:this.accountChanged,required:!0})),Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:"region",label:"Region",input:e=>Be.createElement(E,{...e,stringOptions:a&&a.map(e=>e.name),inputClassName:"cloudfoundry-react-select",clearable:!1}),required:!0})),Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:"stack",label:"Stack",input:e=>Be.createElement(h,{...e}),help:Be.createElement(u,{id:"cf.serverGroup.stack"})})),Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:"freeFormDetails",label:"Detail",input:e=>Be.createElement(h,{...e}),help:Be.createElement(u,{id:"cf.serverGroup.detail"})})),Be.createElement("div",{className:"sp-margin-m-bottom cloud-foundry-checkbox"},Be.createElement(C,{name:"startApplication",label:"Start on creation",input:e=>Be.createElement(X,{...e}),help:Be.createElement(u,{id:"cf.serverGroup.startApplication"})})),("editPipeline"===n.viewState.mode||"createPipeline"===n.viewState.mode||"editClonePipeline"===n.viewState.mode)&&Be.createElement(qt,{onFieldChange:this.onStrategyFieldChange,onStrategyChange:this.strategyChanged,command:n})))}validate(e){const t={};return e.stack&&!e.stack.match(/^[a-zA-Z0-9]*$/)&&(t.stack="Stack can only contain letters and numbers."),e.freeFormDetails&&!e.freeFormDetails.match(/^[a-zA-Z0-9-]*$/)&&(t.freeFormDetails="Detail can only contain letters, numbers, and dashes."),t}}class Ot extends Be.Component{constructor(){super(...arguments),this.destroy$=new ze,this.state={accounts:[]},this.strategyOptionRenderer=e=>Be.createElement("div",{className:"body-regular"},Be.createElement("strong",null,Be.createElement(Z,{tag:"span",message:e.label})),Be.createElement("div",null,Be.createElement(Z,{tag:"span",message:e.description})))}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{application:e,formik:t}=this.props,{accounts:a}=this.state;return Be.createElement("div",{className:"form-group"},Be.createElement(Et,{componentName:"source",accounts:a,application:e,cloudProvider:"cloudfoundry",clusterField:"clusterName",credentialsField:"account",formik:t}),Be.createElement("div",{className:"col-md-9"},Be.createElement("div",{className:"sp-margin-m-bottom"},Be.createElement(C,{name:"target",label:"Target",input:e=>Be.createElement(E,{inputClassName:"cloudfoundry-react-select",...e,options:N.TARGET_LIST.map(e=>({label:e.label,value:e.val,description:e.description})),optionRenderer:this.strategyOptionRenderer,clearable:!1}),required:!0}))))}validate(e){return{}}}class Vt extends Be.Component{constructor(){super(...arguments),this.defaultDirectManifest={direct:{memory:"1024M",diskQuota:"1024M",instances:1,buildpacks:[],healthCheckType:"port",routes:[],environment:[],services:[]}},this.excludedArtifactTypePatterns=[q.KUBERNETES,q.DOCKER_IMAGE,q.FRONT50_PIPELINE_TEMPLATE],this.manifestSourceUpdated=e=>{switch(e){case"artifact":this.props.formik.setFieldValue("manifest",{}),this.capacityUpdated("1");break;case"direct":this.props.formik.setFieldValue("manifest",this.defaultDirectManifest)}},this.capacityUpdated=e=>{this.props.formik.setFieldValue("capacity.min",e),this.props.formik.setFieldValue("capacity.max",e),this.props.formik.setFieldValue("capacity.desired",e)},this.getArtifactInput=()=>{const{formik:e,stage:t,pipeline:a}=this.props,n=e.values.manifest;return Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-11"},Be.createElement("div",{className:"StandardFieldLayout flex-container-h margin-between-lg"},Be.createElement("div",{className:"flex-grow"},Be.createElement(J,{pipeline:a,stage:t,expectedArtifactId:n&&n.artifactId,artifact:n&&n.artifact,onExpectedArtifactSelected:this.onExpectedArtifactSelected,onArtifactEdited:this.onArtifactChanged,excludedArtifactTypePatterns:this.excludedArtifactTypePatterns,renderLabel:e=>Be.createElement(mt,{label:"Artifact"},e)})))))},this.onExpectedArtifactSelected=e=>{this.props.formik.setFieldValue("manifest",{artifactId:e.id})},this.onArtifactChanged=e=>{this.props.formik.setFieldValue("manifest",{artifact:e})},this.getDirectInput=()=>{const e=this.props.formik.values.manifest.direct;return Be.createElement("div",null,Be.createElement(ht,{diskQuotaFieldName:"manifest.direct.diskQuota",instancesFieldName:"manifest.direct.instances",memoryFieldName:"manifest.direct.memory"}),Be.createElement(pt,{fieldName:"manifest.direct.buildpacks"}),Be.createElement(Ct,{healthCheckHttpEndpointFieldName:"manifest.direct.healthCheckHttpEndpoint",healthCheckType:e.healthCheckType,healthCheckTypeFieldName:"manifest.direct.healthCheckType"}),Be.createElement(gt,{fieldName:"manifest.direct.routes"}),Be.createElement(ut,{fieldName:"manifest.direct.environment"}),Be.createElement(vt,{fieldName:"manifest.direct.services"}))}}render(){const e=this.props.formik.values.manifest,t=e&&!!e.direct;return Be.createElement(Be.Fragment,null,Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-11"},Be.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},Be.createElement("div",{className:"sm-label-right"},"Source Type"),Be.createElement("div",{className:"flex-grow"},Be.createElement(g,{inline:!0,value:t?"direct":"artifact",options:[{label:"Artifact",value:"artifact"},{label:"Form",value:"direct"}],onChange:e=>this.manifestSourceUpdated(e.target.value)}))))),t?this.getDirectInput():this.getArtifactInput())}validate(e){const t={},a=e=>/\d+[MG]/.test(e);if(!this.props.formik.values.manifest)return t.manifest="No manifest information provided",t;const n=this.props.formik.values.manifest.direct;if(n){if(a(n.memory)||(t.manifest=t.manifest||{},t.manifest.memory="Provide a size (e.g.: 256M, 1G)"),a(n.diskQuota)||(t.manifest=t.manifest||{},t.manifest.diskQuota="Provide a size (e.g.: 256M, 1G)"),n.routes){const e=n.routes.map(e=>e&&null===/^([-\w]+)\.([-.\w]+)(:\d+)?([-/\w]+)?$/gm.exec(e)?'A route did not match the expected format "host.some.domain[:9999][/some/path]"':null);e.some(e=>!!e)&&(t.manifest=t.manifest||{},t.manifest.routes=e)}if(n.environment){const e=[],a=n.environment.map(t=>{let a;if(t.key){/^\w+$/g.exec(t.key)?e.filter(e=>e===t.key).length>0?a={key:"Duplicate variable name"}:e.push(t.key):a={key:"This field must be alphanumeric"}}return a});a.some(e=>!!e)&&(t.manifest=t.manifest||{},t.manifest.environment=a)}}else{const{manifest:e}=this.props.formik.values;e&&(e.artifact&&e.artifact.type&&e.artifact.reference||e.artifactId)||(t.manifest="Manifest artifact information is required")}return t}}Vt.LABEL="Configuration";Lt(".cloudfoundry-react-select {\n width: 100%;\n}\n");const zt=class e extends Be.Component{constructor(e){super(e),this.templateSelected=()=>{this.setState({requiresTemplateSelection:!1}),this.initialize()},this.initialize=()=>{this.setState({loading:!1})},this.onTaskComplete=()=>{this.props.application.serverGroups.refresh()},this.submit=e=>{e.selectedProvider="cloudfoundry","createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode||"editClonePipeline"===e.viewState.mode?this.props.closeModal&&this.props.closeModal(e):(e.viewState.mode,this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.cloneServerGroup(e,this.props.application)))};const t=Ne(e,"command.viewState.pipeline",void 0),a=Ne(e,"command.viewState.stage",void 0),n=Ne(e,"command.viewState.mode",void 0);this.state={pipeline:t,isClone:!!e.isSourceConstant||"editClonePipeline"===n,loading:!1,requiresTemplateSelection:Ne(e,"command.viewState.requiresTemplateSelection",!1),stage:a,taskMonitor:new A({application:e.application,title:"Creating your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:this.onTaskComplete})}}static show(t,a){return R.show(e,t,{dialogClassName:"wizard-modal modal-lg"},a)}render(){const{loading:e,pipeline:t,isClone:a,requiresTemplateSelection:n,stage:r,taskMonitor:s}=this.state,{application:i,command:l,dismissModal:o,title:c,isSourceConstant:d}=this.props;return n?Be.createElement(Bt,{app:i,command:l,onDismiss:o,onTemplateSelected:this.templateSelected}):Be.createElement(ee,{heading:c,initialValues:l,loading:e,taskMonitor:s,dismissModal:o,closeModal:this.submit,submitButtonLabel:l.viewState.submitButtonLabel,render:({formik:e,nextIdx:n,wizard:s})=>Be.createElement(Be.Fragment,null,Be.createElement(te,{label:"Basic Settings",wizard:s,order:n(),render:({innerRef:t})=>Be.createElement($t,{ref:t,formik:e})}),a&&d&&Be.createElement(te,{label:"Application",wizard:s,order:n(),render:({innerRef:t})=>Be.createElement(Mt,{ref:t,formik:e,source:l.source})}),a&&!d&&Be.createElement(te,{label:"Source",wizard:s,order:n(),render:({innerRef:t})=>Be.createElement(Ot,{application:i,ref:t,formik:e})}),!a&&Be.createElement(te,{label:"Application",wizard:s,order:n(),render:({innerRef:a})=>Be.createElement(It,{ref:a,formik:e,pipeline:t,stage:r})}),Be.createElement(te,{label:"Manifest",wizard:s,order:n(),render:({innerRef:a})=>Be.createElement(Vt,{ref:a,formik:e,pipeline:t,stage:r})}))})}};zt.contextType=D,zt.defaultProps={closeModal:U,dismissModal:U};let _t=zt;class Ht extends Be.Component{constructor(e){super(e),this.handleResult=e=>{this.props.updateStageField({credentials:e.credentials,capacity:e.capacity,account:e.account,delayBeforeDisableSec:e.delayBeforeDisableSec,freeFormDetails:e.freeFormDetails,maxRemainingAsgs:e.maxRemainingAsgs,region:e.region,startApplication:e.startApplication,stack:e.stack,strategy:e.strategy,target:e.target,targetCluster:e.targetCluster,manifest:e.manifest,source:e.source}),this.setState({buttonText:"Edit clone configuration"})},this.addCluster=()=>{const{application:e,stage:t,pipeline:a}=this.props,n=Ut.buildCloneServerGroupCommandFromPipeline(t,a);_t.show({application:e,command:n,isSourceConstant:!1,title:"Clone Cluster"},this.context.services).then(this.handleResult).catch(()=>{})},this.props.updateStageField({cloudProvider:"cloudfoundry",application:e.application.name}),this.state={buttonText:e.stage.destination?"Edit clone configuration":"Add clone configuration"}}render(){const{stage:e}=this.props,{buttonText:t}=this.state,a=N.TARGET_LIST;return Be.createElement("div",{className:"form-horizontal"},Be.createElement("div",null,Be.createElement("h4",null,"Clone Source"),Be.createElement("table",{className:"table table-condensed table-deployStage"},Be.createElement("thead",null,Be.createElement("tr",null,Be.createElement("th",null,"Account"),Be.createElement("th",null,"Region"),Be.createElement("th",null,"Cluster"),Be.createElement("th",null,"Target"))),Be.createElement("tbody",null,Be.createElement("tr",null,Be.createElement("td",null,e.source?e.source.account:""),Be.createElement("td",null,e.source?e.source.region:""),Be.createElement("td",null,e.source?e.source.clusterName:""),Be.createElement("td",null,e.source?a.filter(t=>t.val===e.source.target).map(e=>e.label):""))))),Be.createElement("div",null,Be.createElement("h4",null,"Clone Destination"),Be.createElement("table",{className:"table table-condensed table-deployStage"},Be.createElement("thead",null,Be.createElement("tr",null,Be.createElement("th",null,"Account"),Be.createElement("th",null,"Region"))),Be.createElement("tbody",null,Be.createElement("tr",null,Be.createElement("td",null,e.credentials),Be.createElement("td",null,e.region))))),Be.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addCluster()},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," ",t))}}Ht.contextType=D,_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:Ht,configAccountExtractor:e=>[e.credentials],key:"cloneServerGroup",provides:"cloneServerGroup",validators:[]});const Kt=class e extends Be.Component{constructor(e,t){super(e,t),this.destroy$=new ze,this.loadRegions=e=>{this.setState({regions:[]}),_e(b.getRegionsForAccount(e)).pipe(Ke(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.onTemplateArtifactEdited=(e,t)=>{this.props.formik.setFieldValue(`serviceBindingRequests[${t}].id`,null),this.props.formik.setFieldValue(`serviceBindingRequests[${t}].artifact`,e)},this.onTemplateArtifactSelected=(e,t)=>{this.props.formik.setFieldValue(`serviceBindingRequests[${t}].id`,e),this.props.formik.setFieldValue(`serviceBindingRequests[${t}].artifact`,null)},this.addInputArtifact=()=>{const e=[...this.props.formik.values.serviceBindingRequests,{serviceInstanceName:"",updatable:!1}];this.props.formik.setFieldValue("serviceBindingRequests",e)},this.removeInputArtifact=e=>{const t=[...this.props.formik.values.serviceBindingRequests];t.splice(e,1),this.props.formik.setFieldValue("serviceBindingRequests",t)},this.targetUpdated=e=>{this.props.formik.setFieldValue("target",e)},this.restageRequiredUpdated=e=>{this.props.formik.setFieldValue("restageRequired",e.target.checked),this.props.formik.setFieldValue("restartRequired",!e.target.checked)},this.restartRequiredUpdated=e=>{this.props.formik.setFieldValue("restartRequired",e.target.checked),this.props.formik.setFieldValue("restageRequired",!e.target.checked)},this.updatableBindingUpdated=(e,t)=>{this.props.formik.setFieldValue(`serviceBindingRequests[${t}].updatable`,e.target.checked)},this.accountRegionClusterUpdated=e=>{this.props.formik.setFieldValue("cluster",e.cluster),this.props.formik.setFieldValue("credentials",e.credentials),this.props.formik.setFieldValue("region",e.region)},this.state={accounts:[],regions:[],application:e.application},_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentDidMount(){const e=this.props.formik.values;this.props.formik.setFieldValue("cloudProvider","cloudfoundry"),e.serviceBindingRequests&&0===e.serviceBindingRequests.length&&this.props.formik.setFieldValue("serviceBindingRequests",[{serviceInstanceName:"",updatable:!1}]),e.credentials&&this.loadRegions(e.credentials)}componentWillUnmount(){this.destroy$.next()}render(){const t=this.props.formik.values,{accounts:a,application:n}=this.state,{target:r}=t;return Be.createElement(Be.Fragment,null,Be.createElement("h4",null,"Basic Settings"),Be.createElement("div",{className:"form-horizontal"},Be.createElement(ft,{accounts:a,application:n,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.accountRegionClusterUpdated,component:t})),Be.createElement(f,{label:"Target"},Be.createElement(y,{model:{target:r},options:N.TARGET_LIST,onChange:this.targetUpdated})),Be.createElement(f,{label:"Restage Required"},Be.createElement("input",{type:"checkbox",checked:t.restageRequired,onChange:this.restageRequiredUpdated})),Be.createElement(f,{label:"Restart Required"},Be.createElement("input",{type:"checkbox",checked:t.restartRequired,onChange:this.restartRequiredUpdated})),Be.createElement("h4",null,"Service Bindings"),t.serviceBindingRequests&&t.serviceBindingRequests.length>0&&Be.createElement("div",{className:"row form-group"},t.serviceBindingRequests.map((a,n)=>Be.createElement("div",{key:n},Be.createElement("div",{className:"col-md-offset-1 col-md-8"},Be.createElement(f,{label:"Service Instance Name"},Be.createElement(h,{onChange:e=>{this.props.formik.setFieldValue(`serviceBindingRequests[${n}].serviceInstanceName`,e.target.value)},value:a.serviceInstanceName})),Be.createElement(M,{artifact:a.artifact,excludedArtifactTypePatterns:e.excludedArtifactTypes,expectedArtifactId:a.id,label:"Service Binding Parameters",onArtifactEdited:e=>{this.onTemplateArtifactEdited(e,n)},onExpectedArtifactSelected:e=>this.onTemplateArtifactSelected(e.id,n),pipeline:this.props.pipeline,stage:t}),Be.createElement(f,{label:"Updatable Binding"},Be.createElement("input",{type:"checkbox",checked:a.updatable,onChange:e=>this.updatableBindingUpdated(e,n)}))),Be.createElement("div",{className:"col-md-1"},Be.createElement("div",{className:"form-control-static"},Be.createElement("button",{onClick:()=>this.removeInputArtifact(n)},Be.createElement("span",{className:"glyphicon glyphicon-trash"}),Be.createElement("span",{className:"sr-only"},"Remove field"))))))),Be.createElement(f,{fieldColumns:8,label:""},Be.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addInputArtifact()},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),"Add Service Binding")))}};Kt.excludedArtifactTypes=P(q.BITBUCKET_FILE,q.CUSTOM_OBJECT,q.EMBEDDED_BASE64,q.GCS_OBJECT,q.GITHUB_FILE,q.GITLAB_FILE,q.S3_OBJECT,q.HTTP_FILE,q.ORACLE_OBJECT);let Wt=Kt;function jt(e){const t=new L(e);return t.field("credentials","Account").required(),t.field("region","Region").required(),t.field("cluster","Cluster").required(),t.field("target","Target").required(),t.field("serviceBindingRequests","Service Binding Requests").required().withValidators(e=>{if(!function(e){if((null==e?void 0:e.length)<1)return!1;return e.every(e=>null==e?void 0:e.serviceInstanceName)}(e))return"There should be at least one service binding request. At a minimum, each request must have a service instance name."}),t.validateForm()}_.pipeline.registerStage({label:"Create Service Bindings",description:"Create CF service bindings with optional parameters.",key:"cloudFoundryCreateServiceBindings",component:function({application:e,pipeline:t,stage:a,updateStage:n}){const r=Be.useMemo(()=>({serviceBindingRequests:[],restageRequired:!0,restartRequired:!1,credentials:"",region:"",...Ce(a)}),[]);return Be.createElement($,{application:e,onChange:n,pipeline:t,stage:r,validate:jt,render:e=>Be.createElement(Wt,{...e})})},producesArtifacts:!1,cloudProvider:"cloudfoundry",executionDetailsSections:[H],validateFn:jt});class Qt extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.clearAndReloadRegions=()=>{this.setState({regions:[]}),_e(b.getRegionsForAccount(this.props.stage.credentials)).pipe(Ke(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.serviceInstanceNameUpdated=e=>{this.props.updateStageField({serviceInstanceName:e.target.value})},this.serviceKeyNameUpdated=e=>{this.props.updateStageField({serviceKeyName:e.target.value})},this.accountUpdated=e=>{const t=e.target.value;this.setState({regions:[]}),this.props.updateStageField({credentials:t,region:""}),this.clearAndReloadRegions()},this.regionUpdated=e=>{const t=e.target.value;this.props.updateStageField({region:t})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],regions:[]}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e.map(e=>e.name)})),this.props.stage.credentials&&this.clearAndReloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{credentials:e,region:t,serviceInstanceName:a,serviceKeyName:n}=this.props.stage,{accounts:r,regions:s}=this.state;return Be.createElement("div",{className:"form-horizontal"},Be.createElement(f,{label:"Account"},Be.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:e,stringOptions:r})),Be.createElement(f,{label:"Region"},Be.createElement(E,{clearable:!1,onChange:this.regionUpdated,value:t,stringOptions:s})),Be.createElement(f,{label:"Service Instance Name"},Be.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:a})),Be.createElement(f,{label:"Service Key Name"},Be.createElement(h,{type:"text",className:"form-control",onChange:this.serviceKeyNameUpdated,value:n})))}}_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:Qt,description:"Create a service key",executionDetailsSections:[kt,H],key:"createServiceKey",label:"Create Service Key",validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"region",preventSave:!0},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0},{type:"requiredField",fieldName:"serviceKeyName",preventSave:!0}]});class Jt extends Be.Component{constructor(e,t){super(e,t),this.destroy$=new ze,this.loadRegions=e=>{this.setState({regions:[]}),_e(b.getRegionsForAccount(e)).pipe(Ke(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.addInputArtifact=()=>{const e=[...this.props.formik.values.serviceUnbindingRequests,{serviceInstanceName:"",updatable:!1}];this.props.formik.setFieldValue("serviceUnbindingRequests",e)},this.removeInputArtifact=e=>{const t=[...this.props.formik.values.serviceUnbindingRequests];t.splice(e,1),this.props.formik.setFieldValue("serviceUnbindingRequests",t)},this.targetUpdated=e=>{this.props.formik.setFieldValue("target",e)},this.accountRegionClusterUpdated=e=>{this.props.formik.setFieldValue("cluster",e.cluster),this.props.formik.setFieldValue("credentials",e.credentials),this.props.formik.setFieldValue("region",e.region)},this.state={accounts:[],regions:[],application:e.application},_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentDidMount(){const e=this.props.formik.values;this.props.formik.setFieldValue("cloudProvider","cloudfoundry"),e.serviceUnbindingRequests&&0===e.serviceUnbindingRequests.length&&this.props.formik.setFieldValue("serviceUnbindingRequests",[{serviceInstanceName:"",updatable:!1}]),e.credentials&&this.loadRegions(e.credentials)}componentWillUnmount(){this.destroy$.next()}render(){const e=this.props.formik.values,{accounts:t,application:a}=this.state,{target:n}=e;return Be.createElement(Be.Fragment,null,Be.createElement("h4",null,"Basic Settings"),Be.createElement("div",{className:"form-horizontal"},Be.createElement(ft,{accounts:t,application:a,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.accountRegionClusterUpdated,component:e})),Be.createElement(f,{label:"Target"},Be.createElement(y,{model:{target:n},options:N.TARGET_LIST,onChange:this.targetUpdated})),Be.createElement("h4",null,"Service Unbindings"),e.serviceUnbindingRequests&&e.serviceUnbindingRequests.length>0&&Be.createElement("div",{className:"row form-group"},e.serviceUnbindingRequests.map((e,t)=>Be.createElement("div",{key:t},Be.createElement("div",{className:"col-md-offset-1 col-md-8"},Be.createElement(f,{label:"Service Instance Name"},Be.createElement(h,{onChange:e=>{this.props.formik.setFieldValue(`serviceUnbindingRequests[${t}].serviceInstanceName`,e.target.value)},value:e.serviceInstanceName}))),Be.createElement("div",{className:"col-md-1"},Be.createElement("div",{className:"form-control-static"},Be.createElement("button",{onClick:()=>this.removeInputArtifact(t)},Be.createElement("span",{className:"glyphicon glyphicon-trash"}),Be.createElement("span",{className:"sr-only"},"Remove field"))))))),Be.createElement(f,{fieldColumns:8,label:""},Be.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addInputArtifact()},Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),"Add Service Unbinding")))}}function Yt(e){const t=new L(e);return t.field("credentials","Account").required(),t.field("region","Region").required(),t.field("cluster","Cluster").required(),t.field("target","Target").required(),t.field("serviceUnbindingRequests","Service Binding Requests").required().withValidators(e=>{if(!function(e){if((null==e?void 0:e.length)<1)return!1;return e.every(e=>e.serviceInstanceName)}(e))return"There should be at least one service binding request. At a minimum, each request must have a service instance name."}),t.validateForm()}_.pipeline.registerStage({label:"Delete Service Bindings",description:"Delete CF service bindings with optional parameters.",key:"cloudFoundryDeleteServiceBindings",component:function({application:e,pipeline:t,stage:a,updateStage:n}){const r=Be.useMemo(()=>({serviceUnbindingRequests:[],restageRequired:!0,restartRequired:!1,credentials:"",region:"",...Ce(a)}),[]);return Be.createElement($,{application:e,onChange:n,pipeline:t,stage:r,validate:Yt,render:e=>Be.createElement(Jt,{...e})})},producesArtifacts:!1,cloudProvider:"cloudfoundry",executionDetailsSections:[H],validateFn:Yt});class Zt extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.clearAndReloadRegions=()=>{this.setState({regions:[]}),_e(b.getRegionsForAccount(this.props.stage.credentials)).pipe(Ke(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.serviceInstanceNameUpdated=e=>{this.props.updateStageField({serviceInstanceName:e.target.value})},this.serviceKeyNameUpdated=e=>{this.props.updateStageField({serviceKeyName:e.target.value})},this.accountUpdated=e=>{const t=e.target.value;this.setState({regions:[]}),this.props.updateStageField({credentials:t,region:""}),this.clearAndReloadRegions()},this.regionUpdated=e=>{const t=e.target.value;this.props.updateStageField({region:t})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],regions:[]}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e.map(e=>e.name)})),this.props.stage.credentials&&this.clearAndReloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{credentials:e,region:t,serviceInstanceName:a,serviceKeyName:n}=this.props.stage,{accounts:r,regions:s}=this.state;return Be.createElement("div",{className:"form-horizontal"},Be.createElement(f,{label:"Account"},Be.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:e,stringOptions:r})),Be.createElement(f,{label:"Region"},Be.createElement(E,{clearable:!1,onChange:this.regionUpdated,value:t,stringOptions:s})),Be.createElement(f,{label:"Service Instance Name"},Be.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:a})),Be.createElement(f,{label:"Service Key Name"},Be.createElement(h,{type:"text",className:"form-control",onChange:this.serviceKeyNameUpdated,value:n})))}}_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",component:Zt,description:"Delete a service key",executionDetailsSections:[kt,H],key:"deleteServiceKey",label:"Delete Service Key",validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"region",preventSave:!0},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0},{type:"requiredField",fieldName:"serviceKeyName",preventSave:!0}]});class Xt extends Be.Component{constructor(e){super(e),this.newTagUpdated=e=>{this.setState({newTag:e.target.value})},this.addTag=()=>{const{onChange:e,tags:t}=this.props,{newTag:a}=this.state,n=t||[];if(!Ae(n,a.trim())){const t=[...n,a.trim()].sort((e,t)=>e.localeCompare(t));this.setState({tags:t,newTag:""}),e(t)}},this.deleteTag=e=>{const{onChange:t,tags:a}=this.props,n=a.slice();n.splice(e,1),this.setState({tags:n}),t(n)},this.state={newTag:"",tags:this.props.tags||[]}}render(){const{tags:e,newTag:t}=this.state;return Be.createElement(Be.Fragment,null,Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-md-4"},Be.createElement("input",{type:"text",className:"form-control",name:"newTag",onChange:this.newTagUpdated,value:t})),Be.createElement("div",{className:"col-md-2"},Be.createElement("button",{disabled:!t.trim(),className:"btn btn-default btn-sm btn-add-tag",onClick:this.addTag},"Add Tag"))),Be.createElement("div",null,Be.createElement("div",null,e&&e.map((e,t)=>Be.createElement("span",{className:"badge badge-pill",key:t}," ",e," ",Be.createElement("button",{type:"button",className:"close small","aria-label":"Close",onClick:()=>this.deleteTag(t)},Be.createElement("span",{"aria-hidden":"true"},"×")))))))}}class ea extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.serviceInstanceNameUpdated=e=>{this.props.onServiceChanged({...this.props.service,serviceInstanceName:e.target.value})},this.serviceUpdated=e=>{this.props.onServiceChanged({...this.props.service,service:e.target.value,servicePlan:""})},this.servicePlanUpdated=e=>{this.props.onServiceChanged({...this.props.service,servicePlan:e.target.value})},this.parametersUpdated=e=>{this.props.onServiceChanged({...this.props.service,parameters:e.target.value})},this.tagsUpdated=e=>{this.props.onServiceChanged({...this.props.service,tags:e})},this.updatableUpdated=e=>{this.props.onServiceChanged({...this.props.service,updatable:e.target.checked,versioned:!1})},this.versionedUpdated=e=>{this.props.onServiceChanged({...this.props.service,versioned:e.target.checked,updatable:!1})},this.state={serviceNamesAndPlans:[]}}componentDidUpdate(e){const{credentials:t,region:a}=this.props;(t&&t!==e.credentials||a!==e.region)&&this.loadServices(t,a)}componentDidMount(){this.loadServices(this.props.credentials,this.props.region)}componentWillUnmount(){this.destroy$.next()}loadServices(e,t){e&&t&&_e(ae.getServices(e,t)).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({serviceNamesAndPlans:e}))}render(){const{service:e}=this.props,t=this.state.serviceNamesAndPlans.map(e=>e.name),a=this.state.serviceNamesAndPlans.find(t=>t.name===e.service),n=a?a.servicePlans.map(e=>e.name):[];return Be.createElement("div",null,Be.createElement(f,{label:"Service Instance Name"},Be.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:e.serviceInstanceName})),Be.createElement(f,{label:"Service"},Be.createElement(E,{clearable:!1,onChange:this.serviceUpdated,value:e.service,stringOptions:t})),Be.createElement(f,{label:"Service Plan"},Be.createElement(E,{clearable:!1,onChange:this.servicePlanUpdated,value:e.servicePlan,stringOptions:n})),Be.createElement(f,{label:"Tags"},Be.createElement(Xt,{tags:e.tags||[],onChange:this.tagsUpdated})),Be.createElement(f,{label:"Parameters"},Be.createElement(ne,{className:"form-control",onChange:this.parametersUpdated,value:e.parameters||""})),Be.createElement(f,{label:"Updatable",helpKey:"pipeline.config.cf.createservice.updatable"},Be.createElement("input",{type:"checkbox",disabled:!!e.versioned,checked:!!e.updatable,onChange:this.updatableUpdated})),Be.createElement(f,{label:"Versioned",helpKey:"pipeline.config.cf.createservice.versioned"},Be.createElement("input",{type:"checkbox",disabled:!!e.updatable,checked:!!e.versioned,onChange:this.versionedUpdated})))}}class ta extends Be.Component{constructor(e){super(e),this.serviceInstanceNameUpdated=e=>{this.props.onServiceChanged({...this.props.service,serviceInstanceName:e.target.value})},this.syslogDrainUrlUpdated=e=>{this.props.onServiceChanged({...this.props.service,syslogDrainUrl:e.target.value})},this.routeServiceUrlUpdated=e=>{this.props.onServiceChanged({...this.props.service,routeServiceUrl:e.target.value})},this.credentialsUpdated=e=>{this.props.onServiceChanged({...this.props.service,credentials:e.target.value})},this.tagsUpdated=e=>{this.props.onServiceChanged({...this.props.service,tags:e})},this.updatableUpdated=e=>{this.props.onServiceChanged({...this.props.service,updatable:e.target.checked,versioned:!1})},this.versionedUpdated=e=>{this.props.onServiceChanged({...this.props.service,versioned:e.target.checked,updatable:!1})}}render(){const{service:e}=this.props;return Be.createElement(Be.Fragment,null,Be.createElement(f,{label:"Service Instance Name"},Be.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:e.serviceInstanceName})),Be.createElement(f,{label:"Syslog Drain URL"},Be.createElement(h,{onChange:this.syslogDrainUrlUpdated,value:e.syslogDrainUrl})),Be.createElement(f,{label:"Route Service URL"},Be.createElement(h,{onChange:this.routeServiceUrlUpdated,value:e.routeServiceUrl})),Be.createElement(f,{label:"Credentials"},Be.createElement(ne,{onChange:this.credentialsUpdated,value:e.credentials})),Be.createElement(f,{label:"Tags"},Be.createElement(Xt,{tags:e.tags||[],onChange:this.tagsUpdated})),Be.createElement(f,{label:"Updatable",helpKey:"pipeline.config.cf.createservice.updatable"},Be.createElement("input",{type:"checkbox",disabled:!!e.versioned,checked:!!e.updatable,onChange:this.updatableUpdated})),Be.createElement(f,{label:"Versioned",helpKey:"pipeline.config.cf.createservice.versioned"},Be.createElement("input",{type:"checkbox",disabled:!!e.updatable,checked:!!e.versioned,onChange:this.versionedUpdated})))}}Lt(".cloudfoundry-deploy-service-stage .btn-add-tag {\n margin-left: 1.25rem;\n}\n.cloudfoundry-deploy-service-stage .badge {\n margin-left: 0.2rem;\n}\n.cloudfoundry-deploy-service-stage .badge .close {\n margin-left: 0.25rem;\n font-size: 100%;\n}\n");class aa extends Be.Component{constructor(e){super(e),this.defaultDirectManifest={direct:{parameters:"",service:"",serviceInstanceName:"",servicePlan:"",updatable:!1,versioned:!1}},this.destroy$=new ze,this.accountUpdated=e=>{const t={credentials:e.target.value,region:""};this.props.stage.manifest&&!this.props.stage.manifest.direct||(t.manifest=this.defaultDirectManifest),this.props.updateStageField(t),this.reloadRegions()},this.reloadRegions=()=>{const{credentials:e}=this.props.stage;e&&_e(b.getRegionsForAccount(e)).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({regions:e}))},this.manifestSourceUpdated=e=>{switch(e){case"direct":this.props.updateStageField({manifest:this.defaultDirectManifest});break;case"artifact":this.props.updateStageField({manifest:{}})}},this.onExpectedArtifactSelected=e=>{this.props.updateStageField({manifest:{artifactId:e.id}})},this.onArtifactChanged=e=>{this.props.updateStageField({manifest:{artifact:e}})},this.regionUpdated=e=>{const t={region:e.target.value};this.props.stage.manifest.direct&&(t.manifest=this.defaultDirectManifest),this.props.updateStageField(t)},this.serviceManifestSourceUpdated=e=>{this.props.updateStageField({manifest:e})},this.userProvidedUpdated=e=>{this.props.updateStageField({userProvided:e.target.checked})},this.props.updateStageField({cloudProvider:"cloudfoundry"}),this.state={accounts:[],regions:[]}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.reloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{pipeline:e,stage:t}=this.props,{credentials:a,region:n,userProvided:r,manifest:s}=this.props.stage,{accounts:i,regions:l}=this.state,o=!s||!!s.direct;let c;if(o){const e=s&&s.direct||this.defaultDirectManifest;c=r?Be.createElement(ta,{onChange:this.serviceManifestSourceUpdated,service:e,onServiceChanged:e=>this.serviceManifestSourceUpdated({direct:e})}):Be.createElement(ea,{credentials:a,region:n,service:e,onServiceChanged:e=>this.serviceManifestSourceUpdated({direct:e})})}else c=Be.createElement(f,{label:"Artifact"},Be.createElement(J,{pipeline:e,stage:t,expectedArtifactId:s.artifactId,excludedArtifactTypePatterns:[q.KUBERNETES,q.FRONT50_PIPELINE_TEMPLATE,q.DOCKER_IMAGE],artifact:s.artifact,onExpectedArtifactSelected:this.onExpectedArtifactSelected,onArtifactEdited:this.onArtifactChanged}));return Be.createElement("div",{className:"form-horizontal cloudfoundry-deploy-service-stage"},Be.createElement(f,{label:"Account"},Be.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:a,stringOptions:i.map(e=>e.name)})),Be.createElement(f,{label:"Region"},Be.createElement(E,{clearable:!1,onChange:this.regionUpdated,value:n,stringOptions:l.map(e=>e.name)})),Be.createElement(f,{label:"User-provided"},Be.createElement("input",{type:"checkbox",checked:!!r,onChange:this.userProvidedUpdated})),Be.createElement(f,{label:"Configuration Source"},Be.createElement("div",{className:"radio radio-inline"},Be.createElement("label",null,Be.createElement("input",{type:"radio",checked:!o,onChange:()=>this.manifestSourceUpdated("artifact")})," ","Manifest")),Be.createElement("div",{className:"radio radio-inline"},Be.createElement("label",null,Be.createElement("input",{type:"radio",checked:o,onChange:()=>this.manifestSourceUpdated("direct")})," Form"))),c)}}const na=(e,t)=>e&&e.direct?t?"userProvided":"direct":"artifact",ra=e=>e&&e.direct?"direct":"artifact";G.registerValidator("requiredDeployServiceField",new class{validate(e,t,a){const n=Ne(t,"manifest");if(na(n,Ne(t,"userProvided"))!==a.manifestSource)return null;const r=Ne(n,ra(n)),s=Ne(r,a.fieldName),i=a.fieldLabel||Se(a.fieldName);return s?null:`<strong>${i}</strong> is a required field for the Deploy Service stage.`}}),G.registerValidator("validDeployServiceParameterJsonOrYaml",new class{isJson(e){try{return JSON.parse(e),!0}catch(e){return!1}}isYaml(e){try{return Qe(e),!0}catch(e){return!1}}validate(e,t,a){const n=Ne(t,"manifest");if(na(n,Ne(t,"userProvided"))!==a.manifestSource)return null;const r=Ne(n,ra(n)),s=Ne(r,a.fieldName);if(s&&!this.isJson(s)&&!this.isYaml(s)){const e=Se(a.fieldLabel||a.fieldName);return a.message||`<strong>${e}</strong> should be a valid JSON or YAML string.`}return null}}),_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:aa,configAccountExtractor:e=>[e.credentials],supportsCustomTimeout:!0,description:"Deploys services using Open Service Broker and deploys user-provided services",executionDetailsSections:[St,H],key:"deployService",label:"Deploy Service",validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"region"},{type:"requiredDeployServiceField",manifestSource:"direct",fieldName:"serviceInstanceName",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"direct",fieldName:"service",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"direct",fieldName:"servicePlan",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"artifact",fieldName:"artifactAccount",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"artifact",fieldName:"reference",preventSave:!0},{type:"requiredDeployServiceField",manifestSource:"userProvided",fieldName:"serviceInstanceName",preventSave:!0},{type:"validDeployServiceParameterJsonOrYaml",manifestSource:"direct",fieldName:"parameters",preventSave:!0},{type:"validDeployServiceParameterJsonOrYaml",manifestSource:"userProvided",fieldName:"credentials",preventSave:!0}]}),_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:bt,configAccountExtractor:e=>[e.credentials],key:"destroyServerGroup",provides:"destroyServerGroup",validators:[{type:"cfTargetImpedance",message:"This pipeline will attempt to destroy a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]});class sa extends Be.Component{constructor(e,t){super(e,t),this.destroy$=new ze,this.loadRegions=e=>{this.setState({regions:[]}),_e(b.getRegionsForAccount(e)).pipe(Ke(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.accountUpdated=e=>{const t=e.value;this.props.formik.setFieldValue("credentials",t),this.props.formik.setFieldValue("region",""),t&&this.loadRegions(t)},this.regionUpdated=e=>{this.props.formik.setFieldValue("region",e.value)},this.serviceInstanceNameUpdated=e=>{this.props.formik.setFieldValue("serviceInstanceName",e.target.value)},this.removeBindingsUpdated=e=>{this.props.formik.setFieldValue("removeBindings",e.target.checked)},this.props.formik.setFieldValue("cloudProvider","cloudfoundry"),this.state={accounts:[],regions:[],application:e.application}}componentDidMount(){const e=this.props.formik.values;this.props.formik.setFieldValue("application",this.state.application.name),_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e})),e.credentials&&this.loadRegions(e.credentials)}componentWillUnmount(){this.destroy$.next()}render(){const e=this.props.formik.values,{accounts:t,regions:a}=this.state,{credentials:n,region:r,serviceInstanceName:s}=e;return Be.createElement("div",{className:"form-horizontal"},Be.createElement(f,{label:"Account"},Be.createElement(We,{options:t&&t.map(e=>({label:e.name,value:e.name})),clearable:!1,value:n,onChange:this.accountUpdated})),Be.createElement(f,{label:"Region"},Be.createElement(We,{options:a&&a.map(e=>({label:e,value:e})),clearable:!1,value:r,onChange:this.regionUpdated})),Be.createElement(f,{label:"Service Instance Name"},Be.createElement("input",{type:"text",className:"form-control",required:!0,onChange:this.serviceInstanceNameUpdated,value:s})),Be.createElement(f,{label:"Remove Bindings"},Be.createElement("input",{type:"checkbox",checked:e.removeBindings,onChange:this.removeBindingsUpdated}),e.removeBindings&&Be.createElement("div",null,"Warning: Prior to destroying, this will attempt to unbind any server groups that are bound to this service. This stage will fail if any server groups don't belong to the spinnaker application.")))}}function ia(e){const t=new L(e);return t.field("credentials","Account").required(),t.field("region","Region").required(),t.field("serviceInstanceName","Service Instance Name").required(),t.field("application","Application").required(),t.validateForm()}_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",component:function({application:e,pipeline:t,stage:a,updateStage:n}){const r=Be.useMemo(()=>({credentials:"",serviceInstanceName:"",removeBindings:!1,...Ce(a)}),[]);return Be.createElement($,{application:e,onChange:n,pipeline:t,stage:r,validate:ia,render:e=>Be.createElement(sa,{...e})})},supportsCustomTimeout:!0,executionDetailsSections:[St,H],key:"destroyService",provides:"destroyService",validateFn:ia}),_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:bt,configAccountExtractor:e=>[e.credentials],key:"disableServerGroup",provides:"disableServerGroup",validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]}),_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:bt,configAccountExtractor:e=>[e.credentials],key:"enableServerGroup",provides:"enableServerGroup",validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]}),_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",component:Nt,description:"Map a load balancer",executionDetailsSections:[yt,H],key:"mapLoadBalancers",label:"Map Load Balancer",validators:[{type:"requiredField",preventSave:!0,fieldName:"cluster"},{type:"requiredField",preventSave:!0,fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",preventSave:!0,fieldName:"region"},{type:"requiredField",preventSave:!0,fieldName:"target"},{type:"cfRequiredRoutesField",preventSave:!0,fieldName:"loadBalancerNames"}]});class la extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.instanceCountUpdated=e=>{const t=parseInt(e.target.value,10);this.props.updateStageField({capacity:{desired:t,min:t,max:t}})},this.memoryUpdated=e=>{this.props.updateStageField({memory:parseInt(e.target.value,10)})},this.diskQuotaUpdated=e=>{this.props.updateStageField({diskQuota:parseInt(e.target.value,10)})},this.targetUpdated=e=>{this.props.updateStageField({target:e})},this.componentUpdated=e=>{this.props.updateStageField({credentials:e.credentials,regions:e.regions,cluster:e.cluster})};const{stage:t}=e;let a;t.isNew&&e.application.attributes.platformHealthOnlyShowOverride&&e.application.attributes.platformHealthOnly&&(a=["Cloud Foundry"]);const{capacity:n}=t;this.props.updateStageField({action:"scale_exact",capacity:n&&n.desired?n:{desired:1,min:1,max:1},cloudProvider:"cloudfoundry",diskQuota:t.diskQuota||1024,interestingHealthProviderNames:a,memory:t.memory||1024}),this.state={accounts:[]}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.props.stageFieldUpdated()}componentWillUnmount(){this.destroy$.next()}render(){const{accounts:e}=this.state,{application:t,pipeline:a,stage:n}=this.props,{capacity:r,diskQuota:s,memory:i,target:l}=n,o=r.desired;return Be.createElement("div",{className:"cloudfoundry-resize-asg-stage form-horizontal"},!a.strategy&&Be.createElement(ft,{accounts:e,application:t,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdated,component:n}),Be.createElement(f,{label:"Target"},Be.createElement(y,{model:{target:l},options:N.TARGET_LIST,onChange:this.targetUpdated})),Be.createElement("div",{className:"form-group"},Be.createElement("span",{className:"col-md-3 sm-label-right"}),Be.createElement("div",{className:"col-md-9"},Be.createElement("div",{className:"col-md-3 sm-label-left"},"Instances"),Be.createElement("div",{className:"col-md-3 sm-label-left"},"Mem (MB)"),Be.createElement("div",{className:"col-md-3 sm-label-left"},"Disk (MB)")),Be.createElement(f,{label:"Match capacity"},Be.createElement("div",{className:"col-md-3"},Be.createElement("input",{type:"number",key:"instanceCount",onChange:this.instanceCountUpdated,value:o,className:"form-control input-sm"})),Be.createElement("div",{className:"col-md-3"},Be.createElement("input",{type:"number",key:"memory",onChange:this.memoryUpdated,value:i,className:"form-control input-sm"})),Be.createElement("div",{className:"col-md-3"},Be.createElement("input",{type:"number",key:"diskQuota",onChange:this.diskQuotaUpdated,value:s,className:"form-control input-sm"})),Be.createElement("div",{className:"col-md-9 col-md-offset-3"},Be.createElement("em",{className:"subinput-note"},"Scaled capacity will match the numbers entered")))))}}_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:la,configAccountExtractor:e=>[e.credentials],key:"resizeServerGroup",provides:"resizeServerGroup",validators:[{type:"cfTargetImpedance",message:"This pipeline will attempt to resize a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"cfInstanceSizeField",fieldName:"capacity.desired",fieldLabel:"Instances",min:0,preventSave:!0},{type:"cfInstanceSizeField",fieldName:"memory",fieldLabel:"Mem Mb",min:256,preventSave:!0},{type:"cfInstanceSizeField",fieldName:"diskQuota",fieldLabel:"Disk Mb",min:256,preventSave:!0}]});class oa extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.waitTimeBetweenRegionsUpdated=e=>{const t=parseInt(e.target.value||"0",10);this.props.updateStageField({waitTimeBetweenRegions:t})},this.componentUpdate=e=>{this.props.updateStageField({credentials:e.credentials,regions:e.regions,cluster:e.cluster,moniker:e.moniker})},this.props.updateStageField({cloudProvider:"cloudfoundry",regions:this.props.stage.regions||[],targetHealthyRollbackPercentage:100}),this.state={accounts:[]}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e}))}componentWillUnmount(){this.destroy$.next()}render(){const{application:e,pipeline:t,stage:a}=this.props,{waitTimeBetweenRegions:n}=a,{accounts:r}=this.state;return Be.createElement("div",{className:"form-horizontal"},!t.strategy&&Be.createElement(ft,{accounts:r,application:e,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdate,component:a}),a.regions.length>1&&Be.createElement(f,{label:"Wait"},Be.createElement("input",{type:"number",min:"0",value:n,onChange:this.waitTimeBetweenRegionsUpdated,className:"form-control input-sm inline-number"})," seconds between regional rollbacks."))}}_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],provides:"rollbackCluster",key:"rollbackCluster",cloudProvider:"cloudfoundry",component:oa,validators:[{type:"requiredField",preventSave:!0,fieldName:"cluster"},{type:"requiredField",preventSave:!0,fieldName:"regions"},{type:"requiredField",preventSave:!0,fieldName:"credentials",fieldLabel:"account"}]});class ca extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.componentUpdated=e=>{this.props.updateStageField({credentials:e.credentials,region:e.region,cluster:e.cluster})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],region:""}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.props.stageFieldUpdated()}componentWillUnmount(){this.destroy$.next()}render(){const{application:e,stage:t}=this.props,{target:a,jobName:n,command:r,logsUrl:s}=t,{accounts:i}=this.state;return Be.createElement("div",{className:"cloudfoundry-resize-asg-stage form-horizontal"},Be.createElement(ft,{accounts:i,application:e,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdated,component:t,isSingleRegion:!0}),Be.createElement(f,{label:"Target"},Be.createElement(y,{model:{target:a},options:N.TARGET_LIST,onChange:e=>this.props.updateStageField({target:e})})),Be.createElement(f,{label:"Job Name",helpKey:"cf.runJob.jobName"},Be.createElement(h,{type:"text",className:"form-control",onChange:e=>this.props.updateStageField({jobName:e.target.value}),value:n,maxLength:238})),Be.createElement(f,{label:"Command"},Be.createElement(h,{type:"text",className:"form-control",onChange:e=>this.props.updateStageField({command:e.target.value}),value:r})),Be.createElement(f,{label:"Logs URL",helpKey:"cf.runJob.logsUrl"},Be.createElement(re,{placeholder:"",onChange:e=>this.props.updateStageField({logsUrl:e}),value:s,pipeline:this.props.pipeline,docLink:!1})))}}var da=(e=>(e.APP="app",e.TASK="task",e))(da||{});class ma extends Be.Component{constructor(e){super(e),this.state={logs:"",showModal:!1,errorMessage:null},Re(this,["open","close","onClick"])}canShow(){const{resourceGuid:e}=this.props;return""!==e}generateResourceId(){const{resourceGuid:e,logsType:t,resourceInstanceIndex:a}=this.props;return`${t}:${e}${"app"===t?`:${a}`:""}`}close(){this.setState({showModal:!1})}open(){this.setState({showModal:!0})}onClick(){const{account:e,region:t}=this.props;c.getConsoleOutput(e,t,this.generateResourceId(),"cloudfoundry").then(e=>{this.setState({logs:e.output}),this.open()}).catch(e=>{this.setState({errorMessage:e.data.message}),this.open()})}render(){const{showModal:e,logs:t,errorMessage:a}=this.state;return this.canShow()?Be.createElement("div",null,Be.createElement("a",{onClick:this.onClick,className:"clickable"},"Recent"),Be.createElement(Me,{show:e,onHide:this.close,dialogClassName:"modal-lg modal-fullscreen"},Be.createElement(Me.Header,{closeButton:!0},Be.createElement(Me.Title,null,"Recent logs"),Be.createElement("h5",null,"CloudFoundry ",this.props.logsType.valueOf()," name: ",this.props.resourceDisplayName)),Be.createElement(Me.Body,null,t.length>0&&Be.createElement(Be.Fragment,null,Be.createElement("pre",{className:"body-small"},t)),0===t.length&&Be.createElement(Be.Fragment,null,"No logs returned."),a&&Be.createElement("pre",{className:"body-small"},a)),Be.createElement(Me.Footer,null,Be.createElement(qe,{onClick:this.close},"Close")))):null}}class pa extends Be.Component{render(){const{stage:e,name:t,current:a}=this.props,{context:n}=e,r=n["deploy.account.name"],s=Ne(e,["context","jobStatus","location"],""),i=Ne(e,["context","jobStatus","id"],""),o=Ne(e,["context","jobStatus","name"],""),c=Ne(e,["context","logsUrl"]);return Be.createElement(S,{name:t,current:a},Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-md-9"},Be.createElement("dl",{className:"dl-narrow dl-horizontal"},Be.createElement("dt",null,"Account"),Be.createElement("dd",null,Be.createElement(l,{account:r})),s&&Be.createElement(Be.Fragment,null,Be.createElement("dt",null,"Region"),Be.createElement("dd",null,s),Be.createElement("dt",null,"Logs"),Be.createElement("dd",null,Be.createElement(ma,{account:r,region:s,resourceDisplayName:o,resourceGuid:i,logsType:da.TASK})),c&&Be.createElement("dd",null,Be.createElement("a",{target:"_blank",href:c},"External"))),!s&&Be.createElement("div",{className:"well"},"Collecting additional details...")))))}}function ua(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"service.account",void 0),r=Ne(a,"service.region",void 0),s=Ne(a,"serviceInstanceName",void 0),i=Ne(a,"shareToRegions",void 0);return Be.createElement(S,{name:e.name,current:e.current},Be.createElement("div",{className:"step-section-details"},Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-md-12"},Be.createElement("dl",{className:"dl-horizontal"},Be.createElement("dt",null,"Account"),Be.createElement("dd",null,Be.createElement(l,{account:n})),Be.createElement("dt",null,"Region"),Be.createElement("dd",null,r,Be.createElement("br",null)),Be.createElement("dt",null,"Service Instance Name"),Be.createElement("dd",null,s,Be.createElement("br",null)),Be.createElement("dt",null,"Sharing Regions"),Be.createElement("dd",null,i.join(", "),Be.createElement("br",null)))))),Be.createElement(k,{stage:t,message:t.failureMessage}),Be.createElement(F,{stage:t}))}pa.title="runJobDetails",_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],component:ca,configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",key:"runJob",provides:"runJob",restartable:!0,executionDetailsSections:[H,pa],supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"credentials"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"command"}]}),(ua||(ua={})).title="cloudfoundryShareServiceConfig";class Ca extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.clearAndReloadRegions=()=>{this.setState({regions:[]}),_e(b.getRegionsForAccount(this.props.stage.credentials)).pipe(Ke(this.destroy$)).subscribe(e=>{const{region:t}=this.props.stage,a=e.map(e=>e.name);a.sort((e,t)=>e.localeCompare(t)),this.setState({regions:a}),t&&this.clearAndResetShareToRegionList(t,a)})},this.serviceInstanceNameUpdated=e=>{this.props.updateStageField({serviceInstanceName:e.target.value})},this.clearAndResetShareToRegionList=(e,t)=>{this.setState({shareToRegionsList:t.filter(t=>t!==e)})},this.accountUpdated=e=>{const t=e.target.value;this.setState({regions:[],shareToRegionsList:[]}),this.props.updateStageField({credentials:t,region:"",shareToRegions:[]}),t&&this.clearAndReloadRegions()},this.regionUpdated=e=>{const t=e.target.value;this.setState({shareToRegionsList:[]}),this.props.updateStageField({region:t,shareToRegions:[]}),this.clearAndResetShareToRegionList(t,this.state.regions)},this.shareToRegionsUpdated=e=>{this.props.updateStageField({shareToRegions:e.map(e=>e.value)})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],regions:[],shareToRegionsList:[]}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.props.stage.credentials&&this.clearAndReloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{credentials:e,region:t,serviceInstanceName:a,shareToRegions:n}=this.props.stage,{accounts:r,regions:s,shareToRegionsList:i}=this.state;return Be.createElement("div",{className:"form-horizontal"},Be.createElement(f,{label:"Account"},Be.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:e,stringOptions:r.map(e=>e.name)})),Be.createElement(f,{label:"Region"},Be.createElement(E,{clearable:!1,onChange:this.regionUpdated,value:t,stringOptions:s})),Be.createElement(f,{label:"Service Instance Name"},Be.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:a})),Be.createElement(f,{label:"Share To Regions"},Be.createElement(We,{options:i&&i.map(e=>({label:e,value:e})),multi:!0,clearable:!1,value:n,onChange:this.shareToRegionsUpdated})))}}function ha(e){const{stage:t}=e,{context:a}=t,n=Ne(a,"service.account",void 0),r=Ne(a,"serviceInstanceName",void 0),s=Ne(a,"unshareFromRegions",void 0);return Be.createElement(S,{name:e.name,current:e.current},Be.createElement("div",{className:"step-section-details"},Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-md-12"},Be.createElement("dl",{className:"dl-horizontal"},Be.createElement("dt",null,"Account"),Be.createElement("dd",null,Be.createElement(l,{account:n})),Be.createElement("dt",null,"Service Instance Name"),Be.createElement("dd",null,r,Be.createElement("br",null)),Be.createElement("dt",null,"Unsharing Regions"),Be.createElement("dd",null,s.join(", "),Be.createElement("br",null)))))),Be.createElement(k,{stage:t,message:t.failureMessage}),Be.createElement(F,{stage:t}))}_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],provides:"shareService",key:"shareService",cloudProvider:"cloudfoundry",component:Ca,executionDetailsSections:[ua,H],supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0}]}),_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",component:Nt,description:"Unmap a load balancer",executionDetailsSections:[yt,H],key:"unmapLoadBalancers",label:"Unmap Load Balancer",validators:[{type:"requiredField",preventSave:!0,fieldName:"cluster"},{type:"requiredField",preventSave:!0,fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",preventSave:!0,fieldName:"region"},{type:"requiredField",preventSave:!0,fieldName:"target"},{type:"cfRequiredRoutesField",preventSave:!0,fieldName:"loadBalancerNames"}]}),(ha||(ha={})).title="cloudfoundryUnshareServiceConfig";class ga extends Be.Component{constructor(e){super(e),this.destroy$=new ze,this.clearAndReloadRegions=()=>{this.setState({regions:[]}),_e(b.getRegionsForAccount(this.props.stage.credentials)).pipe(Ke(this.destroy$)).subscribe(e=>{const t=e.map(e=>e.name);t.sort((e,t)=>e.localeCompare(t)),this.setState({regions:t})})},this.serviceInstanceNameUpdated=e=>{this.props.updateStageField({serviceInstanceName:e.target.value})},this.accountUpdated=e=>{const t=e.target.value;this.setState({regions:[]}),this.props.updateStageField({credentials:t,unshareFromRegions:[]}),t&&this.clearAndReloadRegions()},this.unshareFromRegionsUpdated=e=>{this.props.updateStageField({unshareFromRegions:e.map(e=>e.value)})},e.stage.cloudProvider="cloudfoundry",this.state={accounts:[],regions:[]}}componentDidMount(){_e(b.listAccounts("cloudfoundry")).pipe(Ke(this.destroy$)).subscribe(e=>this.setState({accounts:e})),this.props.stage.credentials&&this.clearAndReloadRegions()}componentWillUnmount(){this.destroy$.next()}render(){const{credentials:e,serviceInstanceName:t,unshareFromRegions:a}=this.props.stage,{accounts:n,regions:r}=this.state;return Be.createElement("div",{className:"form-horizontal"},Be.createElement(f,{label:"Account"},Be.createElement(E,{clearable:!1,onChange:this.accountUpdated,value:e,stringOptions:n.map(e=>e.name)})),Be.createElement(f,{label:"Service Instance Name"},Be.createElement(h,{type:"text",className:"form-control",onChange:this.serviceInstanceNameUpdated,value:t})),Be.createElement(f,{label:"Unshare From Regions"},Be.createElement(We,{options:r&&r.map(e=>({label:e,value:e})),multi:!0,clearable:!1,value:a,onChange:this.unshareFromRegionsUpdated})))}}_.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],provides:"unshareService",key:"unshareService",cloudProvider:"cloudfoundry",component:ga,executionDetailsSections:[ha,H],supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0}]});class va extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Be.createElement(s,{heading:"Server Group Information",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Be.createElement("dt",null,"Created"),e.pipelineId?Be.createElement("dd",null,Be.createElement("a",{target:"_blank",href:"/#/applications/"+e.app+"/executions/"+e.pipelineId},i(e.createdTime))):Be.createElement("dd",null,i(e.createdTime)),Be.createElement("dt",null,"Account"),Be.createElement("dd",null,Be.createElement(l,{account:e.account})),Be.createElement("dt",null,"Organization"),Be.createElement("dd",null,e.space.organization.name),Be.createElement("dt",null,"Space"),Be.createElement("dd",null,e.space.name),e.droplet&&Be.createElement("div",null,Be.createElement("dt",null,"Rootfs"),Be.createElement("dd",null,e.droplet.stack),Be.createElement("dt",null,"Buildpack"),e.droplet.buildpacks?e.droplet.buildpacks.map(function(e,t){return Be.createElement("dd",{key:t},e.name," ",e.version)}):Be.createElement("dd",null,"n/a"))))}}class fa extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props,{appsManagerUri:t}=e;return Be.createElement(Be.Fragment,null,t&&Be.createElement(s,{heading:"Apps Manager",defaultExpanded:!0},Be.createElement("div",null,Be.createElement("a",{href:t,target:"_blank"},"Apps Manager"))))}}class Ea extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props,{metricsUri:t}=e;return Be.createElement(Be.Fragment,null,t&&Be.createElement(s,{heading:"Metrics",defaultExpanded:!0},Be.createElement("div",null,Be.createElement("a",{href:t,target:"_blank"},"Metrics"))))}}class ba extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Be.createElement(s,{heading:"Server Group Sizing",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Be.createElement("dt",null,"Instances"),Be.createElement("dd",null,e.instances.length),Be.createElement("dt",null,"Disk (MB)"),Be.createElement("dd",null,e.diskQuota),Be.createElement("dt",null,"Memory (MB)"),Be.createElement("dd",null,e.memory)))}}class ya extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Be.createElement(s,{heading:"Health Check",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Be.createElement("dt",null,"Type"),Be.createElement("dd",null,void 0===e.healthCheckType?"port":e.healthCheckType),"http"===e.healthCheckType&&Be.createElement("div",null,Be.createElement("dt",null,"Endpoint"),Be.createElement("dd",null,e.healthCheckHttpEndpoint))))}}class Na extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Be.createElement(Be.Fragment,null,e.droplet&&e.droplet.sourcePackage&&Be.createElement(s,{heading:"Package",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Be.createElement("dt",null,"Checksum"),Be.createElement("dd",null,e.droplet.sourcePackage.checksum))))}}class Sa extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Be.createElement(s,{heading:"Build",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},e.ciBuild&&e.ciBuild.jobName&&Be.createElement("div",null,Be.createElement("dt",null,"Job Name"),Be.createElement("dd",null,e.ciBuild.jobName)),e.ciBuild&&e.ciBuild.jobNumber&&Be.createElement("div",null,Be.createElement("dt",null,"Job Number"),e.ciBuild.jobUrl?Be.createElement("dd",null,Be.createElement("a",{target:"_blank",href:e.ciBuild.jobUrl},e.ciBuild.jobNumber)):Be.createElement("dd",null,e.ciBuild.jobNumber)),e.appArtifact&&e.appArtifact.name&&Be.createElement("div",null,Be.createElement("dt",null,"Artifact Name"),Be.createElement("dd",null,e.appArtifact.name)),e.appArtifact&&e.appArtifact.version&&Be.createElement("div",null,Be.createElement("dt",null,"Version"),e.appArtifact.url?Be.createElement("dd",null,Be.createElement("a",{target:"_blank",href:e.appArtifact.url},e.appArtifact.version)):Be.createElement("dd",null,e.appArtifact.version))))}}class ka extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Be.createElement(Be.Fragment,null,!we(e.serviceInstances)&&Be.createElement(s,{heading:"Bound Services",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},e.serviceInstances.map(function(e,t){return Be.createElement("div",{key:t},Be.createElement("dt",null,"Name"),Be.createElement("dd",null,e.name),Be.createElement("dt",null,"Plan"),Be.createElement("dd",null,e.plan),Be.createElement("dt",null,"Tags"),e.tags&&Be.createElement("dd",null,e.tags.join(", ")))}))))}}class Fa extends Be.Component{constructor(e){super(e)}render(){const{serverGroup:e}=this.props;return Be.createElement(Be.Fragment,null,!we(e.env)&&Be.createElement(s,{heading:"Environment Variables",defaultExpanded:!0},Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Object.entries(e.env).map(([e,t],a)=>Be.createElement("div",{key:a},Be.createElement("dt",null,e),Be.createElement("dd",null,t))))))}}class xa{normalizeServerGroupDetails(e){return e}normalizeServerGroup(e){return Promise.resolve(e)}convertServerGroupCommandToDeployConfiguration(e){const t=Te({viewState:[]},e);return t.cloudProvider="cloudfoundry",t.provider="cloudfoundry",t.account=t.credentials,delete t.viewState,delete t.selectedProvider,"direct"===t.manifest.type?t.manifest.env=this.convertManifestEnv(t.manifest.environment):t.manifest.env=t.manifest.environment,t}convertManifestEnv(e){const t=Object.create(null);for(const a of e)t[a.key]=a.value;return t}}const Aa=class e extends Be.Component{constructor(e){super(e),this.formikRef=Be.createRef(),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=e=>{const{routes:t}=e,{serverGroup:a}=this.props,n={account:a.account,cloudProvider:a.cloudProvider,cluster:a.cluster,instanceCounts:a.instanceCounts,instances:a.instances,loadBalancers:t,name:a.name,region:a.region,type:a.type};this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.mapLoadBalancers(n,this.props.application,{serverGroupName:a.name}))},this.state={initialValues:{routes:[""]},taskMonitor:new A({application:e.application,title:"Mapping a route to your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.props.application.serverGroups.refresh()})}}static show(t,a){return R.show(e,t,{},a)}render(){const{serverGroup:e}=this.props,{initialValues:t}=this.state;return Be.createElement(Be.Fragment,null,Be.createElement(w,{monitor:this.state.taskMonitor}),Be.createElement(x,{ref:this.formikRef,initialValues:t,onSubmit:this.submit,render:t=>Be.createElement(Be.Fragment,null,Be.createElement(T,{dismiss:this.close}),Be.createElement(Me.Header,null,Be.createElement(Me.Title,null,"Map route to ",e.name)),Be.createElement(Me.Body,null,Be.createElement(Ve,{className:"form-horizontal"},Be.createElement(gt,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0}))),Be.createElement(Pe,null,Be.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Be.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(t.values),disabled:!t.isValid},"Submit")))}))}};Aa.contextType=D,Aa.defaultProps={closeModal:U,dismissModal:U};let Ra=Aa;const wa=class e extends Be.Component{constructor(e){super(e),this.formikRef=Be.createRef(),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=e=>{const{routes:t}=e,{serverGroup:a}=this.props,n={account:a.account,cloudProvider:a.cloudProvider,cluster:a.cluster,instanceCounts:a.instanceCounts,instances:a.instances,loadBalancers:t,name:a.name,region:a.region,type:a.type};this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.unmapLoadBalancers(n,this.props.application,{serverGroupName:a.name}))},this.state={initialValues:{routes:[""]},taskMonitor:new A({application:e.application,title:"Unmapping a route from your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.props.application.serverGroups.refresh()})}}static show(t,a){return R.show(e,t,{},a)}render(){const{serverGroup:e}=this.props,{initialValues:t}=this.state;return Be.createElement(Be.Fragment,null,Be.createElement(w,{monitor:this.state.taskMonitor}),Be.createElement(x,{ref:this.formikRef,initialValues:t,onSubmit:this.submit,render:t=>Be.createElement(Be.Fragment,null,Be.createElement(T,{dismiss:this.close}),Be.createElement(Me.Header,null,Be.createElement(Me.Title,null,"Unmap route from ",e.name)),Be.createElement(Me.Body,null,Be.createElement(Ve,{className:"form-horizontal"},Be.createElement(gt,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0}))),Be.createElement(Pe,null,Be.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Be.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(t.values),disabled:!t.isValid},"Submit")))}))}};wa.contextType=D,wa.defaultProps={closeModal:U,dismissModal:U};let Ta=wa;const Da=class e extends Be.Component{constructor(e){super(e),this.formikRef=Be.createRef(),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=e=>{const{desired:t,diskQuota:a,memory:n,reason:r}=e,{serverGroup:s,application:i}=this.props,l={capacity:{min:t,max:t,desired:t},diskQuota:a,memory:n,reason:r,serverGroupName:s.name};this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.resizeServerGroup(s,i,l))};const{capacity:t,diskQuota:a,memory:n}=e.serverGroup,{desired:r}=t;this.state={initialValues:{desired:r,diskQuota:a,memory:n},taskMonitor:new A({application:e.application,title:"Resizing your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.props.application.serverGroups.refresh()})}}static show(t,a){return R.show(e,t,{},a)}renderDesired(e){const{serverGroup:t}=this.props,{capacity:a}=t;return Be.createElement("div",null,Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-3 sm-label-right"},"Current size"),Be.createElement("div",{className:"col-md-4"},Be.createElement("div",{className:"horizontal middle"},Be.createElement("input",{type:"number",className:"NumberInput form-control",value:a.desired,disabled:!0}),Be.createElement("div",{className:"sp-padding-xs-xaxis"},"instances")))),Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-3 sm-label-right"},"Resize to"),Be.createElement("div",{className:"col-md-4"},Be.createElement("div",{className:"horizontal middle"},Be.createElement(C,{name:"desired",input:e=>Be.createElement(se,{...e,min:0}),touched:!0,required:!0,onChange:t=>{e.setFieldValue("min",t),e.setFieldValue("max",t)}}),Be.createElement("div",{className:"sp-padding-xs-xaxis"},"instances")))))}renderQuota(e,t,a,n){return Be.createElement("div",null,Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-3 sm-label-right"},"Current size"),Be.createElement("div",{className:"col-md-5"},Be.createElement("div",{className:"horizontal middle"},Be.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},Be.createElement("input",{type:"number",className:"NumberInput form-control",value:n,disabled:!0})),Be.createElement("div",{className:"sp-padding-xs-xaxis"},a)))),Be.createElement("div",{className:"form-group"},Be.createElement("div",{className:"col-md-3 sm-label-right"},"Resize to"),Be.createElement("div",{className:"col-md-5"},Be.createElement("div",{className:"horizontal middle"},Be.createElement(C,{name:t,input:e=>Be.createElement(se,{...e,min:64}),touched:!0,required:!0,onChange:t=>{e.setFieldValue("min",t),e.setFieldValue("max",t)}}),Be.createElement("div",{className:"sp-padding-xs-xaxis"},a)))))}render(){const{serverGroup:e}=this.props,{diskQuota:t,memory:a}=e,{initialValues:n}=this.state;return Be.createElement(Be.Fragment,null,Be.createElement(w,{monitor:this.state.taskMonitor}),Be.createElement(x,{ref:this.formikRef,initialValues:n,onSubmit:this.submit,render:n=>Be.createElement(Be.Fragment,null,Be.createElement(T,{dismiss:this.close}),Be.createElement(Me.Header,null,Be.createElement(Me.Title,null,"Resize ",e.name)),Be.createElement(Me.Body,null,Be.createElement(Ve,{className:"form-horizontal"},this.renderDesired(n),this.renderQuota(n,"diskQuota","Disk (MB)",t),this.renderQuota(n,"memory","Mem (MB)",a),Be.createElement(ie,{reason:n.values.reason,onChange:e=>n.setFieldValue("reason",e)}))),Be.createElement(Pe,null,Be.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Be.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(n.values),disabled:!n.isValid},"Submit")))}))}};Da.contextType=D,Da.defaultProps={closeModal:U,dismissModal:U};let Ua=Da;const Ga=class e extends Be.Component{constructor(e){super(e),this.formikRef=Be.createRef(),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=e=>{const{reason:t,restoreServerGroupName:a}=e,{serverGroup:n,application:r}=this.props,s={rollbackType:"EXPLICIT",rollbackContext:{rollbackServerGroupName:n.name,restoreServerGroupName:a,targetHealthyRollbackPercentage:100},reason:t};this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.rollbackServerGroup(n,r,s))};const{previousServerGroup:t,serverGroup:a}=e,{name:n}=a;this.state={initialValues:{restoreServerGroupName:t?t.name:void 0},taskMonitor:new A({application:e.application,title:"Rollback "+n,onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.props.application.serverGroups.refresh()})}}static show(t,a){return R.show(e,t,{},a)}render(){const{allServerGroups:e,serverGroup:t}=this.props,{initialValues:a}=this.state;return Be.createElement(Be.Fragment,null,Be.createElement(w,{monitor:this.state.taskMonitor}),Be.createElement(x,{ref:this.formikRef,initialValues:a,onSubmit:this.submit,render:a=>Be.createElement(Be.Fragment,null,Be.createElement(T,{dismiss:this.close}),Be.createElement(Me.Header,null,Be.createElement(Me.Title,null,"Rollback ",t.name)),Be.createElement(Me.Body,null,Be.createElement(Ve,{className:"form-horizontal"},Be.createElement("div",{className:"row",style:{marginTop:"10px",marginBottom:"10px"}},Be.createElement("div",{className:"col-md-3 sm-label-right"},"Restore to"),Be.createElement("div",{className:"col-md-7"},Be.createElement(C,{name:"restoreServerGroupName",fastField:!0,input:t=>Be.createElement(E,{inputClassName:"cloudfoundry-react-select",...t,stringOptions:e&&e.map(e=>e.name),clearable:!1}),required:!0}))),Be.createElement(ie,{reason:a.values.reason,onChange:e=>a.setFieldValue("reason",e)})),Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-sm-4 sm-label-right"},"Rollback Operations")),Be.createElement("div",{className:"row"},Be.createElement("div",{className:"col-sm-11 col-sm-offset-1"},Be.createElement("ol",null,Be.createElement("li",null,"Enable ",Be.createElement("em",null,a.values.restoreServerGroupName||"previous server group")),Be.createElement("li",null,"Disable ",t.name)),Be.createElement("p",null,"This rollback will affect server groups in ",t.account," (",t.region,").")))),Be.createElement(Pe,null,Be.createElement("button",{className:"btn btn-default",onClick:this.close},"Cancel"),Be.createElement("button",{type:"submit",className:"btn btn-primary",onClick:()=>this.submit(a.values)},"Submit")))}))}};Ga.contextType=D,Ga.defaultProps={closeModal:U,dismissModal:U};let Ba=Ga;class Ia extends Be.Component{constructor(){super(...arguments),this.destroyServerGroup=()=>{const{app:e,serverGroup:t}=this.props,n={name:t.name,accountId:t.account,region:t.region},r={application:e,title:"Destroying "+t.name,onTaskComplete:()=>{this.props.stateService.includes("**.serverGroup",n)&&this.props.stateService.go("^")}},s={header:"Really destroy "+t.name+"?",buttonText:"Destroy "+t.name,account:t.account,taskMonitorConfig:r,interestingHealthProviderNames:void 0,submitMethod:a=>(a.serverGroupName=t.name,this.context.services.serverGroupWriter.destroyServerGroup(t,e,a)),askForReason:!0,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Cloud Foundry"};le.addDestroyWarningMessage(e,t,s),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(s.interestingHealthProviderNames=["Cloud Foundry"]),a.confirm(s)},this.disableServerGroup=()=>{const{app:e,serverGroup:t}=this.props,n={application:e,title:"Disabling "+t.name},r={header:"Really disable "+t.name+"?",buttonText:"Disable "+t.name,account:t.account,interestingHealthProviderNames:void 0,taskMonitorConfig:n,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Cloud Foundry",submitMethod:a=>(a.serverGroupName=t.name,this.context.services.serverGroupWriter.disableServerGroup(t,e.name,a)),askForReason:!0};le.addDisableWarningMessage(e,t,r),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(r.interestingHealthProviderNames=["Cloud Foundry"]),a.confirm(r)},this.enableServerGroup=()=>{if(!this.isRollbackEnabled())return void this.showEnableServerGroupModal();const e={header:"Rolling back?",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?",buttonText:"Yes, let's start the orchestrated rollback",cancelButtonText:"No, I just want to enable the server group"};a.confirm(e).then(()=>this.rollbackServerGroup()).catch(({source:e})=>{"footer"===e&&this.showEnableServerGroupModal()})},this.rollbackServerGroup=()=>{const{app:e}=this.props;let t,a=this.props.serverGroup,n=e.serverGroups.data.filter(e=>e.cluster===a.cluster&&e.region===a.region&&e.account===a.account);a.isDisabled&&(t=a,a=De(n.filter(e=>e.name!==t.name&&!e.isDisabled),["instanceCounts.total","createdTime"],["desc","desc"])[0]),n=n.filter(e=>e.name!==a.name),1!==n.length||t||(t=n[0]);const r=Ue(e.clusters,{name:a.cluster,account:a.account,serverGroups:[]}),s=Ge(r.serverGroups,{isDisabled:!0,region:a.region});Ba.show({serverGroup:a,previousServerGroup:t,disabledServerGroups:s.sort((e,t)=>t.name.localeCompare(e.name)),allServerGroups:n.sort((e,t)=>t.name.localeCompare(e.name)),application:e},this.context.services)},this.resizeServerGroup=()=>{const{app:e,serverGroup:t}=this.props;Ua.show({application:e,serverGroup:t},this.context.services)},this.mapServerGroupToLoadBalancers=()=>{const{app:e,serverGroup:t}=this.props;Ra.show({application:e,serverGroup:t},this.context.services)},this.unmapServerGroupFromLoadBalancers=()=>{const{app:e,serverGroup:t}=this.props;Ta.show({application:e,serverGroup:t},this.context.services)},this.cloneServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a=Ut.buildServerGroupCommandFromExisting(e,t),n=`Clone ${t.name}`;_t.show({application:e,command:a,isSourceConstant:!0,serverGroup:t,title:n},this.context.services)}}isEnableLocked(){if(this.props.serverGroup.isDisabled){if((this.props.serverGroup.runningTasks||[]).filter(e=>Ne(e,"execution.stages",[]).some(e=>"resizeServerGroup"===e.type)).length)return!0}return!1}isRollbackEnabled(){const{app:e,serverGroup:t}=this.props;return!t.isDisabled||e.getDataSource("serverGroups").data.some(e=>e.cluster===t.cluster&&e.region===t.region&&e.account===t.account&&!e.isDisabled)}hasDisabledInstances(){return this.props.serverGroup.isDisabled||Ne(this.props.serverGroup,"instanceCounts.outOfService",0)>0}showEnableServerGroupModal(){const{app:e,serverGroup:t}=this.props,n={application:e,title:"Enabling "+t.name},r={header:"Really enable "+t.name+"?",buttonText:"Enable "+t.name,account:t.account,interestingHealthProviderNames:void 0,taskMonitorConfig:n,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Cloud Foundry",submitMethod:a=>(a.serverGroupName=t.name,this.context.services.serverGroupWriter.enableServerGroup(t,e,a)),askForReason:!0};e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(r.interestingHealthProviderNames=["Cloud Foundry"]),a.confirm(r)}render(){const{app:e,serverGroup:t}=this.props,{loadBalancers:a}=t,n=oe.feature&&oe.feature.entityTags,r=ce.buildClusterTargets(t);return Be.createElement(Ie,{className:"dropdown",id:"server-group-actions-dropdown"},Be.createElement(Ie.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Server Group Actions"),Be.createElement(Ie.Menu,{className:"dropdown-menu"},this.isRollbackEnabled()&&Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.rollbackServerGroup},"Rollback")),this.isRollbackEnabled()&&Be.createElement("li",{role:"presentation",className:"divider"}),Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.resizeServerGroup},"Resize")),!t.isDisabled&&Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.disableServerGroup},"Disable")),this.hasDisabledInstances()&&!this.isEnableLocked()&&Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.enableServerGroup},"Enable")),this.isEnableLocked()&&Be.createElement("li",{className:"disabled"},Be.createElement(Le,{value:"Cannot enable this server group until resize operation completes",placement:"left"},Be.createElement("a",null,Be.createElement("span",{className:"small glyphicon glyphicon-lock"})," Enable"))),Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.destroyServerGroup},"Destroy")),Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.cloneServerGroup},"Clone")),!t.isDisabled&&Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.mapServerGroupToLoadBalancers},"Map Load Balancer")),!t.isDisabled&&a&&!!a.length&&Be.createElement("li",null,Be.createElement("a",{className:"clickable",onClick:this.unmapServerGroupFromLoadBalancers},"Unmap Load Balancer")),n&&Be.createElement(de,{component:t,application:e,entityType:"serverGroup",ownerOptions:r,onUpdate:()=>e.serverGroups.refresh()})))}}Ia.contextType=D;const Ma=n(Ia);function Pa(e,t){const{app:a,serverGroup:n}=e;return new He(r=>{(function(e){const{app:t,serverGroup:a}=e;return t.ready().then(()=>{let e=t.serverGroups.data.find(e=>e.name===a.name&&e.account===a.accountId&&e.region===a.region);return e||t.loadBalancers.data.some(t=>t.account===a.accountId&&t.region===a.region&&t.serverGroups.some(t=>t.name===a.name&&(e=t,!0))),e})})(e).then(e=>{me.getServerGroup(a.name,n.accountId,n.region,n.name).then(a=>{Object.assign(a,e,{account:n.accountId}),we(a)?t():r.next(a)},t)},t)})}Lt('.cloud-provider-logo .icon-cloudfoundry {\n -webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%3Csvg width%3D%22300px%22 height%3D%22300px%22 viewBox%3D%220 0 300 300%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E %3C!-- Generator%3A Sketch 50.2 (55047) - http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch --%3E %3Ctitle%3Ecf_logo%3C%2Ftitle%3E %3Cdesc%3ECreated with Sketch.%3C%2Fdesc%3E %3Cdefs%3E%3C%2Fdefs%3E %3Cg id%3D%22cf_logo%22 stroke%3D%22none%22 stroke-width%3D%221%22 fill%3D%22none%22 fill-rule%3D%22evenodd%22%3E %3Cpath d%3D%22M178.263372%2C122.718681 C186.913513%2C115.731062 192.264847%2C105.825834 192.16919%2C94.8631089 C191.983342%2C73.9653286 172.094852%2C57.1484045 147.743272%2C57.1484045 C123.391692%2C57.1484045 103.497736%2C73.9653286 103.317354%2C94.8631089 C103.218964%2C105.825834 108.570299%2C115.728351 117.220439%2C122.71597 C127.925842%2C131.365758 136.693504%2C148.855142 137.210052%2C167.952465 C137.781262%2C189.145802 136.321807%2C213.674325 135.425363%2C226.155508 C123.984767%2C227.766159 115.944099%2C231.559592 115.944099%2C235.982102 C115.944099%2C241.866127 130.180618%2C248.650381 147.743272%2C248.650381 C165.303194%2C248.650381 179.539712%2C241.866127 179.539712%2C235.982102 C179.539712%2C231.559592 171.501778%2C227.766159 160.058448%2C226.155508 C159.162004%2C213.674325 157.702549%2C189.145802 158.273759%2C167.952465 C158.790308%2C148.855142 167.557969%2C131.365758 178.263372%2C122.718681%22 id%3D%22Fill-1%22 fill%3D%22%231B1A19%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M234.330842%2C245.57087 C235.853157%2C244.936371 237.629647%2C244.423892 239.594718%2C244.046988 C241.423137%2C243.645682 243.462001%2C243.390798 245.68398%2C243.317586 C245.68398%2C243.317586 245.58559%2C242.63428 245.448937%2C241.62559 C245.386076%2C240.625035 244.910523%2C239.299095 244.454102%2C237.984002 C244.224525%2C237.335946 243.989482%2C236.693313 243.779036%2C236.094064 C243.511196%2C235.500238 243.16683%2C234.952509 242.920854%2C234.477991 C242.404306%2C233.550647 242.05994%2C232.929706 242.05994%2C232.929706 C239.865291%2C232.577206 237.790898%2C232.089131 235.779364%2C231.516997 C233.729568%2C230.944864 231.802759%2C230.288673 230.108261%2C229.580963 C226.894181%2C228.179101 223.874147%2C226.609124 222.278039%2C224.857474 C220.351231%2C223.189881 219.995933%2C221.519577 220.058793%2C220.011965 C220.168116%2C219.269005 220.512482%2C218.550449 221.102823%2C217.880701 C221.641236%2C217.221798 222.354565%2C216.627973 223.382196%2C216.115493 C223.382196%2C216.115493 222.60874%2C215.689783 221.479985%2C215.057995 C220.903309%2C214.751592 220.280171%2C214.388247 219.542245%2C214.008632 C218.768788%2C213.642576 217.957069%2C213.254826 217.148083%2C212.875212 C215.551975%2C212.121406 213.955866%2C211.364888 212.619399%2C210.868678 C211.343059%2C210.356198 210.498543%2C210.014545 210.498543%2C210.014545 C208.948897%2C210.220622 207.270798%2C210.331794 205.562634%2C210.356198 C203.794343%2C210.391448 201.990522%2C210.342641 200.23863%2C210.212487 C196.789506%2C209.91693 193.280255%2C209.442412 190.246556%2C208.553029 C188.675046%2C208.151722 187.338578%2C207.677204 186.171561%2C207.153878 C185.004544%2C206.641399 183.96598%2C206.131631 183.129663%2C205.559497 C181.533555%2C204.401673 180.443064%2C203.233003 180.451263%2C202.053486 C180.451263%2C202.053486 179.483759%2C201.893506 178.037969%2C201.649468 C176.540252%2C201.418987 173.348036%2C200.993277 171.322837%2C200.724835 C171.287307%2C201.063777 171.065929%2C201.383738 170.992136%2C201.942313 L170.475588%2C204.401673 C169.420626%2C209.320393 172.293074%2C214.312324 177.16339%2C215.714186 C189.095937%2C219.157832 198.112308%2C224.83307 200.716916%2C231.796285 C205.980792%2C245.885407 183.86759%2C259.657281 150.239999%2C259.657281 C116.598742%2C259.657281 94.4828068%2C245.885407 99.7357514%2C231.796285 C102.277499%2C225.003896 110.941304%2C219.439832 122.442028%2C215.96907 C127.533722%2C214.434343 130.553755%2C209.236335 129.460531%2C204.073578 L128.749935%2C200.724835 C127.410734%2C200.882104 125.852889%2C201.077334 124.256781%2C201.272565 C122.258913%2C201.492199 120.353969%2C201.84741 118.894514%2C202.07789 C117.435059%2C202.305659 116.45389%2C202.479197 116.45389%2C202.479197 C116.55228%2C203.623463 115.729629%2C204.911441 114.158118%2C206.023169 C113.335467%2C206.581745 112.42809%2C207.164725 111.310268%2C207.690762 C110.192446%2C208.224934 108.817715%2C208.675048 107.382858%2C209.149566 C105.896073%2C209.613238 104.24257%2C209.954891 102.583602%2C210.245025 C100.951964%2C210.562275 99.2082705%2C210.792755 97.4181151%2C210.939178 C93.8460034%2C211.221177 90.2629595%2C211.294388 87.0106161%2C210.893082 C87.0106161%2C210.893082 86.7892381%2C210.977139 86.4202748%2C211.123562 C86.0649768%2C211.280831 85.4855677%2C211.486907 84.9116247%2C211.768907 C83.7200098%2C212.330194 82.1129695%2C213.094846 80.4922639%2C213.86221 C78.8961559%2C214.653977 77.4749638%2C215.50811 76.3216118%2C216.139897 C75.7422027%2C216.454435 75.2639169%2C216.725588 74.9332164%2C216.907261 C74.6271135%2C217.113337 74.4549306%2C217.221798 74.4549306%2C217.221798 C76.7015073%2C218.257604 77.9532496%2C219.659466 78.1964921%2C221.145386 C78.7622359%2C222.715363 77.9887794%2C224.344994 76.5293244%2C226.123759 C75.6848084%2C227.0267 74.5423886%2C227.878121 73.3753712%2C228.705138 C72.1372943%2C229.543002 70.5876483%2C230.334769 68.8576202%2C231.091287 C65.6189421%2C232.612456 61.4209593%2C233.951953 56.9168736%2C234.757278 C56.9168736%2C234.757278 56.5260458%2C235.391777 56.228142%2C236.338102 C55.8865093%2C237.303407 55.4328211%2C238.604943 54.9654675%2C239.933594 C54.7686871%2C241.245976 54.585572%2C242.59903 54.4379866%2C243.634836 C54.2439392%2C244.678776 54.3395964%2C245.35937 54.3395964%2C245.35937 C58.9912674%2C245.410889 63.1291229%2C246.189099 66.2202157%2C247.420135 C69.8169249%2C248.602363 71.9897089%2C250.364859 73.6705419%2C252.520527 C74.9960768%2C254.847022 75.5235577%2C257.281978 74.3428751%2C260.093837 C73.5202235%2C262.835197 71.2627145%2C265.891094 67.5840135%2C268.664991 C67.5840135%2C268.664991 67.7917261%2C268.849375 68.1470242%2C269.153067 C68.5515173%2C269.445913 69.1418586%2C269.860777 69.8524547%2C270.359699 C71.3146427%2C271.357543 73.1539932%2C272.770251 75.315845%2C274.047383 C77.5979516%2C275.291976 79.9155879%2C276.544704 81.6729466%2C277.507298 C82.5420602%2C277.995374 83.4275722%2C278.299066 83.9796507%2C278.55395 C84.5563267%2C278.808834 84.8870272%2C278.941699 84.8870272%2C278.941699 C90.0771113%2C276.739935 95.6498242%2C275.606514 101.222537%2C275.023535 C104.007527%2C274.727978 106.743322%2C274.657478 109.358862%2C274.828304 C112.020864%2C274.96117 114.734794%2C275.169958 117.273808%2C275.763783 C119.790958%2C276.422686 122.245248%2C277.043626 124.393434%2C277.995374 C126.57715%2C278.930853 128.517624%2C280.159177 130.354242%2C281.341405 C134.024744%2C283.825169 136.847996%2C287.333892 138.064209%2C291.021576 C138.064209%2C291.021576 139.952755%2C291.094787 142.78694%2C291.20596 C145.63479%2C291.27646 149.428279%2C291.534056 153.208104%2C291.338825 C156.990661%2C291.216806 160.778685%2C291.154441 163.591005%2C290.972768 C166.365063%2C290.704327 168.218079%2C290.536212 168.218079%2C290.536212 C168.608907%2C288.611024 169.469821%2C286.797009 170.647771%2C285.151108 C171.22718%2C284.348495 171.888581%2C283.581131 172.623774%2C282.865287 C173.33437%2C282.122327 174.083229%2C281.365809 174.919546%2C280.698772 C176.564849%2C279.359275 178.43973%2C278.201451 180.563318%2C277.274107 C182.624047%2C276.314224 184.835094%2C275.411284 187.387774%2C274.841862 C189.989648%2C274.329382 192.430272%2C273.819614 195.081342%2C273.63523 C197.696882%2C273.426442 200.544733%2C273.548461 203.182137%2C273.659634 C208.571735%2C273.949768 214.546208%2C275.180804 219.739025%2C277.127684 C219.739025%2C277.127684 220.889644%2C276.495897 222.60874%2C275.544149 C224.254043%2C274.57342 226.623608%2C273.415596 228.43836%2C271.978484 C230.294109%2C270.614583 232.245515%2C269.323894 233.420732%2C268.252838 C234.574084%2C267.181783 235.325676%2C266.476785 235.325676%2C266.476785 C231.461127%2C263.833041 229.236414%2C260.996778 227.815222%2C258.195765 C227.151088%2C256.845421 226.967973%2C255.576424 226.92971%2C254.323696 C226.83132%2C253.057411 227.101893%2C251.877894 227.815222%2C250.779723 C228.820989%2C248.539998 231.398266%2C246.883251 234.330842%2C245.57087%22 id%3D%22Fill-2%22 fill%3D%22%23000000%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M118.447097%2C177.453406 C118.447097%2C177.453406 123.443134%2C158.68689 101.750823%2C134.472906 L101.026562%2C133.724523 C91.8872032%2C122.97872 86.8529035%2C109.342424 86.8529035%2C95.3265125 C86.8529035%2C62.4247782 113.863752%2C35.6538187 147.067719%2C35.6538187 L148.464314%2C35.6538187 C181.671013%2C35.6538187 208.684595%2C62.4247782 208.684595%2C95.3265125 C208.684595%2C109.342424 203.650296%2C122.97872 194.519137%2C133.716388 C194.412547%2C133.835696 194.166572%2C134.087868 193.794875%2C134.456637 C174.534989%2C153.591921 177.084936%2C177.453406 177.084936%2C177.453406 C212.256707%2C165.425049 236.017946%2C132.612795 236.220192%2C95.8091653 C236.471634%2C49.7944603 199.034155%2C10.5748554 152.774352%2C8.37309111 C152.194943%2C8.34597578 151.623733%2C8.33241812 151.052523%2C8.33241812 C150.352859%2C8.33241812 147.750985%2C8.38393723 147.761917%2C8.38393723 C147.688124%2C8.38393723 145.181907%2C8.33241812 144.484976%2C8.33241812 C143.913766%2C8.33241812 143.339823%2C8.34597578 142.771346%2C8.37309111 C96.5006113%2C10.5748554 59.063132%2C49.7944603 59.3173068%2C95.8091653 C59.5140872%2C132.612795 83.2780588%2C165.425049 118.447097%2C177.453406%22 id%3D%22Fill-3%22 fill%3D%22%23000000%22%3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E");\n mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%3Csvg width%3D%22300px%22 height%3D%22300px%22 viewBox%3D%220 0 300 300%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E %3C!-- Generator%3A Sketch 50.2 (55047) - http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch --%3E %3Ctitle%3Ecf_logo%3C%2Ftitle%3E %3Cdesc%3ECreated with Sketch.%3C%2Fdesc%3E %3Cdefs%3E%3C%2Fdefs%3E %3Cg id%3D%22cf_logo%22 stroke%3D%22none%22 stroke-width%3D%221%22 fill%3D%22none%22 fill-rule%3D%22evenodd%22%3E %3Cpath d%3D%22M178.263372%2C122.718681 C186.913513%2C115.731062 192.264847%2C105.825834 192.16919%2C94.8631089 C191.983342%2C73.9653286 172.094852%2C57.1484045 147.743272%2C57.1484045 C123.391692%2C57.1484045 103.497736%2C73.9653286 103.317354%2C94.8631089 C103.218964%2C105.825834 108.570299%2C115.728351 117.220439%2C122.71597 C127.925842%2C131.365758 136.693504%2C148.855142 137.210052%2C167.952465 C137.781262%2C189.145802 136.321807%2C213.674325 135.425363%2C226.155508 C123.984767%2C227.766159 115.944099%2C231.559592 115.944099%2C235.982102 C115.944099%2C241.866127 130.180618%2C248.650381 147.743272%2C248.650381 C165.303194%2C248.650381 179.539712%2C241.866127 179.539712%2C235.982102 C179.539712%2C231.559592 171.501778%2C227.766159 160.058448%2C226.155508 C159.162004%2C213.674325 157.702549%2C189.145802 158.273759%2C167.952465 C158.790308%2C148.855142 167.557969%2C131.365758 178.263372%2C122.718681%22 id%3D%22Fill-1%22 fill%3D%22%231B1A19%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M234.330842%2C245.57087 C235.853157%2C244.936371 237.629647%2C244.423892 239.594718%2C244.046988 C241.423137%2C243.645682 243.462001%2C243.390798 245.68398%2C243.317586 C245.68398%2C243.317586 245.58559%2C242.63428 245.448937%2C241.62559 C245.386076%2C240.625035 244.910523%2C239.299095 244.454102%2C237.984002 C244.224525%2C237.335946 243.989482%2C236.693313 243.779036%2C236.094064 C243.511196%2C235.500238 243.16683%2C234.952509 242.920854%2C234.477991 C242.404306%2C233.550647 242.05994%2C232.929706 242.05994%2C232.929706 C239.865291%2C232.577206 237.790898%2C232.089131 235.779364%2C231.516997 C233.729568%2C230.944864 231.802759%2C230.288673 230.108261%2C229.580963 C226.894181%2C228.179101 223.874147%2C226.609124 222.278039%2C224.857474 C220.351231%2C223.189881 219.995933%2C221.519577 220.058793%2C220.011965 C220.168116%2C219.269005 220.512482%2C218.550449 221.102823%2C217.880701 C221.641236%2C217.221798 222.354565%2C216.627973 223.382196%2C216.115493 C223.382196%2C216.115493 222.60874%2C215.689783 221.479985%2C215.057995 C220.903309%2C214.751592 220.280171%2C214.388247 219.542245%2C214.008632 C218.768788%2C213.642576 217.957069%2C213.254826 217.148083%2C212.875212 C215.551975%2C212.121406 213.955866%2C211.364888 212.619399%2C210.868678 C211.343059%2C210.356198 210.498543%2C210.014545 210.498543%2C210.014545 C208.948897%2C210.220622 207.270798%2C210.331794 205.562634%2C210.356198 C203.794343%2C210.391448 201.990522%2C210.342641 200.23863%2C210.212487 C196.789506%2C209.91693 193.280255%2C209.442412 190.246556%2C208.553029 C188.675046%2C208.151722 187.338578%2C207.677204 186.171561%2C207.153878 C185.004544%2C206.641399 183.96598%2C206.131631 183.129663%2C205.559497 C181.533555%2C204.401673 180.443064%2C203.233003 180.451263%2C202.053486 C180.451263%2C202.053486 179.483759%2C201.893506 178.037969%2C201.649468 C176.540252%2C201.418987 173.348036%2C200.993277 171.322837%2C200.724835 C171.287307%2C201.063777 171.065929%2C201.383738 170.992136%2C201.942313 L170.475588%2C204.401673 C169.420626%2C209.320393 172.293074%2C214.312324 177.16339%2C215.714186 C189.095937%2C219.157832 198.112308%2C224.83307 200.716916%2C231.796285 C205.980792%2C245.885407 183.86759%2C259.657281 150.239999%2C259.657281 C116.598742%2C259.657281 94.4828068%2C245.885407 99.7357514%2C231.796285 C102.277499%2C225.003896 110.941304%2C219.439832 122.442028%2C215.96907 C127.533722%2C214.434343 130.553755%2C209.236335 129.460531%2C204.073578 L128.749935%2C200.724835 C127.410734%2C200.882104 125.852889%2C201.077334 124.256781%2C201.272565 C122.258913%2C201.492199 120.353969%2C201.84741 118.894514%2C202.07789 C117.435059%2C202.305659 116.45389%2C202.479197 116.45389%2C202.479197 C116.55228%2C203.623463 115.729629%2C204.911441 114.158118%2C206.023169 C113.335467%2C206.581745 112.42809%2C207.164725 111.310268%2C207.690762 C110.192446%2C208.224934 108.817715%2C208.675048 107.382858%2C209.149566 C105.896073%2C209.613238 104.24257%2C209.954891 102.583602%2C210.245025 C100.951964%2C210.562275 99.2082705%2C210.792755 97.4181151%2C210.939178 C93.8460034%2C211.221177 90.2629595%2C211.294388 87.0106161%2C210.893082 C87.0106161%2C210.893082 86.7892381%2C210.977139 86.4202748%2C211.123562 C86.0649768%2C211.280831 85.4855677%2C211.486907 84.9116247%2C211.768907 C83.7200098%2C212.330194 82.1129695%2C213.094846 80.4922639%2C213.86221 C78.8961559%2C214.653977 77.4749638%2C215.50811 76.3216118%2C216.139897 C75.7422027%2C216.454435 75.2639169%2C216.725588 74.9332164%2C216.907261 C74.6271135%2C217.113337 74.4549306%2C217.221798 74.4549306%2C217.221798 C76.7015073%2C218.257604 77.9532496%2C219.659466 78.1964921%2C221.145386 C78.7622359%2C222.715363 77.9887794%2C224.344994 76.5293244%2C226.123759 C75.6848084%2C227.0267 74.5423886%2C227.878121 73.3753712%2C228.705138 C72.1372943%2C229.543002 70.5876483%2C230.334769 68.8576202%2C231.091287 C65.6189421%2C232.612456 61.4209593%2C233.951953 56.9168736%2C234.757278 C56.9168736%2C234.757278 56.5260458%2C235.391777 56.228142%2C236.338102 C55.8865093%2C237.303407 55.4328211%2C238.604943 54.9654675%2C239.933594 C54.7686871%2C241.245976 54.585572%2C242.59903 54.4379866%2C243.634836 C54.2439392%2C244.678776 54.3395964%2C245.35937 54.3395964%2C245.35937 C58.9912674%2C245.410889 63.1291229%2C246.189099 66.2202157%2C247.420135 C69.8169249%2C248.602363 71.9897089%2C250.364859 73.6705419%2C252.520527 C74.9960768%2C254.847022 75.5235577%2C257.281978 74.3428751%2C260.093837 C73.5202235%2C262.835197 71.2627145%2C265.891094 67.5840135%2C268.664991 C67.5840135%2C268.664991 67.7917261%2C268.849375 68.1470242%2C269.153067 C68.5515173%2C269.445913 69.1418586%2C269.860777 69.8524547%2C270.359699 C71.3146427%2C271.357543 73.1539932%2C272.770251 75.315845%2C274.047383 C77.5979516%2C275.291976 79.9155879%2C276.544704 81.6729466%2C277.507298 C82.5420602%2C277.995374 83.4275722%2C278.299066 83.9796507%2C278.55395 C84.5563267%2C278.808834 84.8870272%2C278.941699 84.8870272%2C278.941699 C90.0771113%2C276.739935 95.6498242%2C275.606514 101.222537%2C275.023535 C104.007527%2C274.727978 106.743322%2C274.657478 109.358862%2C274.828304 C112.020864%2C274.96117 114.734794%2C275.169958 117.273808%2C275.763783 C119.790958%2C276.422686 122.245248%2C277.043626 124.393434%2C277.995374 C126.57715%2C278.930853 128.517624%2C280.159177 130.354242%2C281.341405 C134.024744%2C283.825169 136.847996%2C287.333892 138.064209%2C291.021576 C138.064209%2C291.021576 139.952755%2C291.094787 142.78694%2C291.20596 C145.63479%2C291.27646 149.428279%2C291.534056 153.208104%2C291.338825 C156.990661%2C291.216806 160.778685%2C291.154441 163.591005%2C290.972768 C166.365063%2C290.704327 168.218079%2C290.536212 168.218079%2C290.536212 C168.608907%2C288.611024 169.469821%2C286.797009 170.647771%2C285.151108 C171.22718%2C284.348495 171.888581%2C283.581131 172.623774%2C282.865287 C173.33437%2C282.122327 174.083229%2C281.365809 174.919546%2C280.698772 C176.564849%2C279.359275 178.43973%2C278.201451 180.563318%2C277.274107 C182.624047%2C276.314224 184.835094%2C275.411284 187.387774%2C274.841862 C189.989648%2C274.329382 192.430272%2C273.819614 195.081342%2C273.63523 C197.696882%2C273.426442 200.544733%2C273.548461 203.182137%2C273.659634 C208.571735%2C273.949768 214.546208%2C275.180804 219.739025%2C277.127684 C219.739025%2C277.127684 220.889644%2C276.495897 222.60874%2C275.544149 C224.254043%2C274.57342 226.623608%2C273.415596 228.43836%2C271.978484 C230.294109%2C270.614583 232.245515%2C269.323894 233.420732%2C268.252838 C234.574084%2C267.181783 235.325676%2C266.476785 235.325676%2C266.476785 C231.461127%2C263.833041 229.236414%2C260.996778 227.815222%2C258.195765 C227.151088%2C256.845421 226.967973%2C255.576424 226.92971%2C254.323696 C226.83132%2C253.057411 227.101893%2C251.877894 227.815222%2C250.779723 C228.820989%2C248.539998 231.398266%2C246.883251 234.330842%2C245.57087%22 id%3D%22Fill-2%22 fill%3D%22%23000000%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M118.447097%2C177.453406 C118.447097%2C177.453406 123.443134%2C158.68689 101.750823%2C134.472906 L101.026562%2C133.724523 C91.8872032%2C122.97872 86.8529035%2C109.342424 86.8529035%2C95.3265125 C86.8529035%2C62.4247782 113.863752%2C35.6538187 147.067719%2C35.6538187 L148.464314%2C35.6538187 C181.671013%2C35.6538187 208.684595%2C62.4247782 208.684595%2C95.3265125 C208.684595%2C109.342424 203.650296%2C122.97872 194.519137%2C133.716388 C194.412547%2C133.835696 194.166572%2C134.087868 193.794875%2C134.456637 C174.534989%2C153.591921 177.084936%2C177.453406 177.084936%2C177.453406 C212.256707%2C165.425049 236.017946%2C132.612795 236.220192%2C95.8091653 C236.471634%2C49.7944603 199.034155%2C10.5748554 152.774352%2C8.37309111 C152.194943%2C8.34597578 151.623733%2C8.33241812 151.052523%2C8.33241812 C150.352859%2C8.33241812 147.750985%2C8.38393723 147.761917%2C8.38393723 C147.688124%2C8.38393723 145.181907%2C8.33241812 144.484976%2C8.33241812 C143.913766%2C8.33241812 143.339823%2C8.34597578 142.771346%2C8.37309111 C96.5006113%2C10.5748554 59.063132%2C49.7944603 59.3173068%2C95.8091653 C59.5140872%2C132.612795 83.2780588%2C165.425049 118.447097%2C177.453406%22 id%3D%22Fill-3%22 fill%3D%22%23000000%22%3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E");\n}\n'),pe.registerProvider("cloudfoundry",{name:"Cloud Foundry",logo:{path:"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"},loadBalancer:{transformer:rt,details:dt,CreateLoadBalancerModal:xt},serverGroup:{skipUpstreamStageCheck:!0,transformer:xa,detailsActions:Ma,detailsGetter:Pa,detailsSections:[va,fa,Ea,ba,ya,Sa,Na,ka,Fa],CloneServerGroupModal:_t,commandBuilder:Gt,scalingActivitiesEnabled:!1},instance:{details:at}});const qa=oe.providers.cloudfoundry||{defaults:{}};qa&&(qa.resetToOriginal=oe.resetProvider("cloudfoundry"));export{ft as AccountRegionClusterSelector,fa as ApplicationManagerSection,ka as BoundServicesSection,Sa as BuildSection,pt as Buildpacks,bt as CloudFoundryAsgStageConfig,_t as CloudFoundryCreateServerGroupModal,dt as CloudFoundryLoadBalancerDetails,rt as CloudFoundryLoadBalancerTransformer,nt as CloudFoundryLoadBalancerUpsertDescription,yt as CloudFoundryLoadBalancersExecutionDetails,Nt as CloudFoundryLoadBalancersStageConfig,xt as CloudFoundryMapLoadBalancerModal,qa as CloudFoundryProviderSettings,Ma as CloudFoundryServerGroupActions,Ia as CloudFoundryServerGroupActionsComponent,Ut as CloudFoundryServerGroupCommandBuilder,Gt as CloudFoundryServerGroupCommandBuilderShim,xa as CloudFoundryServerGroupTransformer,St as CloudFoundryServiceExecutionDetails,kt as CloudFoundryServiceKeyExecutionDetails,ut as EnvironmentVariables,Fa as EnvironmentVariablesSection,Et as FormikAccountRegionClusterSelector,mt as FormikConfigField,Ct as HealthCheck,ya as HealthCheckSection,ht as InstanceParameters,Ea as MetricsSection,Na as PackageSection,gt as Routes,va as ServerGroupInformationSection,ba as ServerGroupSizingSection,vt as Services,Pa as cfServerGroupDetailsGetter};
2
2
  //# sourceMappingURL=index.js.map