@spinnaker/cloudfoundry 2026.0.3 → 2026.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{ApplicationNameValidator as e,HelpContentsRegistry as t,ReactInjector as a,ConfirmationModalService 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,StageConstants as y,NgReact 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,FormikStageConfig as q,FormValidator as $,ManifestYaml as L,decodeUnicodeBase64 as O,Overridable as V,Registry as z,ExecutionDetailsTasks as _,ExecutionArtifactTab as H,ExpectedArtifactService as K,ArtifactReferenceService 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{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(e,t){e.length>Ye.MAX_RESOURCE_NAME_LENGTH&&t.push(`The maximum length for an application in Cloud Foundry is ${Ye.MAX_RESOURCE_NAME_LENGTH} characters.`)}validate(e=""){const t=[],a=[];return e&&e.length&&(Ye.validateSpecialCharacters(e,t,a),Ye.validateLength(e,a)),{warnings:t,errors:a}}};let Ze=Ye;Ze.MAX_RESOURCE_NAME_LENGTH=63,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(){a.$state.includes("**.serverGroup",{instanceId:t.name})&&a.$state.go("^")}};n.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.defineProperty,nt=Object.getOwnPropertyDescriptor;let rt=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.")))))}};rt=((e,t,a,n)=>{for(var r,s=n>1?void 0:n?nt(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(s=(n?r(t,a,s):r(s))||s);return n&&s&&at(t,a,s),s})([ue],rt);class st{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 it{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 st(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}}it.$inject=["$q"];class lt extends Ge.Component{constructor(){super(...arguments),this.deleteLoadBalancer=()=>{const{application:e,loadBalancer:t}=this.props,r={application:e,title:"Deleting "+t.name,onTaskComplete(){a.$state.includes("**.serverGroup",{instanceId:t.name})&&a.$state.go("^")}};n.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 ot 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 ct 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 dt 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 mt=Object.defineProperty,pt=Object.getOwnPropertyDescriptor;let ut=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(lt,{application:e,loadBalancer:t})),!n&&!!t&&Ge.createElement("div",{className:"content"},Ge.createElement(ot,{loadBalancer:t}),Ge.createElement(ct,{loadBalancer:t}),Ge.createElement(dt,{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.")))))}};ut=((e,t,a,n)=>{for(var r,s=n>1?void 0:n?pt(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(s=(n?r(t,a,s):r(s))||s);return n&&s&&mt(t,a,s),s})([ue],ut);class Ct 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 ht 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 gt 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 vt 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 ft 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 Et 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 bt=({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 yt 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 Nt 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 St 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}=N;return Ge.createElement("div",{className:"form-horizontal"},!t.strategy&&Ge.createElement(yt,{accounts:r,application:e,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdated,component:a}),Ge.createElement(f,{label:"Target"},Ge.createElement(s,{model:{target:n},options:y.TARGET_LIST,onChange:this.targetUpdated})))}}function kt(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}))}(kt||(kt={})).title="cloudfoundryLoadBalancersConfig";class Ft 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}=N;return Ge.createElement("div",{className:"form-horizontal"},!r.strategy&&Ge.createElement(yt,{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:y.TARGET_LIST,onChange:this.targetUpdated})),Ge.createElement(x,{ref:this.formikRef,initialValues:n,onSubmit:null,render:()=>Ge.createElement(Et,{fieldName:"routes",isRequired:!0,singleRouteOnly:!0,onChange:t=>{e.loadBalancerNames=t,this.componentUpdated(e)}})}))}}function xt(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 At(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}))}(xt||(xt={})).title="cloudfoundryServiceConfig",(At||(At={})).title="cloudfoundryServiceKeyConfig";const Rt=class extends Ge.Component{constructor(e){super(e),this.destroy$=new _e,this.formikRef=Ge.createRef(),this.submit=e=>{var t,n;const{routes:r}=e,s=null==(n=null==(t=this.props.application.serverGroups)?void 0:t.data)?void 0:n.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((()=>a.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(),n=t.promise;this.$uibModalInstanceEmulation={result:n,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(e){return R.show(Rt,{application:e.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(yt,{accounts:e,application:t,cloudProvider:"cloudfoundry",isSingleRegion:!0,onComponentUpdate:this.accountRegionClusterUpdated,component:a}),Ge.createElement(Et,{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")))}))}};let wt=Rt;wt.defaultProps={closeModal:D,dismissModal:D};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 Tt=class 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 e=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:e.outputName})),Ge.createElement("h4",null,"Manifest Template"),Ge.createElement(B,{artifact:this.getInputArtifact(e,0).artifact,excludedArtifactTypePatterns:Tt.excludedArtifactTypes,expectedArtifactId:this.getInputArtifact(e,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:e}),Ge.createElement("h4",null,"Manifest Variables"),e.inputArtifacts&&e.inputArtifacts.length>1&&Ge.createElement("div",{className:"row form-group"},e.inputArtifacts.slice(1).map(((t,a)=>Ge.createElement("div",{key:a},Ge.createElement("div",{className:"col-md-offset-1 col-md-9"},Ge.createElement(B,{artifact:t.artifact,excludedArtifactTypePatterns:[],expectedArtifactId:t.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:e})),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")))}};let Dt=Tt;function Ut(e){const t=new $(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()}Dt.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);var It=Object.defineProperty,Gt=Object.getOwnPropertyDescriptor;let Bt=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"}))))}};Bt.title="bakedManifest",Bt=((e,t,a,n)=>{for(var r,s=n>1?void 0:n?Gt(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(s=(n?r(t,a,s):r(s))||s);return n&&s&&It(t,a,s),s})([V("bakeManifest.bakeManifestDetailsTab")],Bt);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(q,{application:e,onChange:n,pipeline:t,stage:r,validate:Ut,render:e=>Ge.createElement(Dt,{...e})})},producesArtifacts:!0,cloudProvider:"cloudfoundry",executionDetailsSections:[Bt,_,H],artifactExtractor:e=>K.accumulateArtifacts(["inputArtifacts"])(e).map((e=>e.id)),artifactRemover:(e,t)=>{var a,n;j.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:Ut});class Mt{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:Mt.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:Mt.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 Pt{constructor(e){this.$q=e}buildNewServerGroupCommand(e,t){return this.$q.when(Mt.buildNewServerGroupCommand(e,t))}buildServerGroupCommandFromExisting(e,t,a="clone"){return this.$q.when(Mt.buildServerGroupCommandFromExisting(e,t,a))}buildNewServerGroupCommandForPipeline(e,t){return this.$q.when(Mt.buildNewServerGroupCommandForPipeline(e,t))}buildServerGroupCommandFromPipeline(e,t,a,n){return this.$q.when(Mt.buildServerGroupCommandFromPipeline(e,t,a,n))}buildCloneServerGroupCommandFromPipeline(e,t){return this.$q.when(Mt.buildCloneServerGroupCommandFromPipeline(e,t))}}Pt.$inject=["$q"];class qt 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 $t 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(Ct,{label:"Artifact"},e)})))))}}class Lt 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 Ot 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 Vt 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:Ot,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 zt(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))}}zt(".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 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(Vt,{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 Ht 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(Nt,{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:y.TARGET_LIST.map((e=>({label:e.label,value:e.val,description:e.description}))),optionRenderer:this.strategyOptionRenderer,clearable:!1}),required:!0}))))}validate(e){return{}}}class Kt 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(Ct,{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(ft,{diskQuotaFieldName:"manifest.direct.diskQuota",instancesFieldName:"manifest.direct.instances",memoryFieldName:"manifest.direct.memory"}),Ge.createElement(ht,{fieldName:"manifest.direct.buildpacks"}),Ge.createElement(vt,{healthCheckHttpEndpointFieldName:"manifest.direct.healthCheckHttpEndpoint",healthCheckType:e.healthCheckType,healthCheckTypeFieldName:"manifest.direct.healthCheckType"}),Ge.createElement(Et,{fieldName:"manifest.direct.routes"}),Ge.createElement(gt,{fieldName:"manifest.direct.environment"}),Ge.createElement(bt,{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}}Kt.LABEL="Configuration";zt(".cloudfoundry-react-select {\n width: 100%;\n}\n");const jt=class 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((()=>a.serverGroupWriter.cloneServerGroup(e,this.props.application))))};const t=Ne(e,"command.viewState.pipeline",void 0),n=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:n,taskMonitor:new A({application:e.application,title:"Creating your server group",modalInstance:A.modalInstanceEmulation((()=>this.props.dismissModal())),onTaskComplete:this.onTaskComplete})}}static show(e){return R.show(jt,e,{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(qt,{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(_t,{ref:t,formik:e})}),a&&d&&Ge.createElement(ee,{label:"Application",wizard:s,order:n(),render:({innerRef:t})=>Ge.createElement(Lt,{ref:t,formik:e,source:l.source})}),a&&!d&&Ge.createElement(ee,{label:"Source",wizard:s,order:n(),render:({innerRef:t})=>Ge.createElement(Ht,{application:i,ref:t,formik:e})}),!a&&Ge.createElement(ee,{label:"Application",wizard:s,order:n(),render:({innerRef:a})=>Ge.createElement($t,{ref:a,formik:e,pipeline:t,stage:r})}),Ge.createElement(ee,{label:"Manifest",wizard:s,order:n(),render:({innerRef:a})=>Ge.createElement(Kt,{ref:a,formik:e,pipeline:t,stage:r})}))})}};let Wt=jt;Wt.defaultProps={closeModal:D,dismissModal:D};class Qt 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=Mt.buildCloneServerGroupCommandFromPipeline(t,a);Wt.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=y.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:Qt,configAccountExtractor:e=>[e.credentials],key:"cloneServerGroup",provides:"cloneServerGroup",validators:[]});const Jt=class 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 e=this.props.formik.values,{accounts:t,application:a}=this.state,{target:n}=e,{TargetSelect:r}=N;return Ge.createElement(Ge.Fragment,null,Ge.createElement("h4",null,"Basic Settings"),Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(yt,{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:y.TARGET_LIST,onChange:this.targetUpdated})),Ge.createElement(f,{label:"Restage Required"},Ge.createElement("input",{type:"checkbox",checked:e.restageRequired,onChange:this.restageRequiredUpdated})),Ge.createElement(f,{label:"Restart Required"},Ge.createElement("input",{type:"checkbox",checked:e.restartRequired,onChange:this.restartRequiredUpdated})),Ge.createElement("h4",null,"Service Bindings"),e.serviceBindingRequests&&e.serviceBindingRequests.length>0&&Ge.createElement("div",{className:"row form-group"},e.serviceBindingRequests.map(((t,a)=>Ge.createElement("div",{key:a},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[${a}].serviceInstanceName`,e.target.value)},value:t.serviceInstanceName})),Ge.createElement(B,{artifact:t.artifact,excludedArtifactTypePatterns:Jt.excludedArtifactTypes,expectedArtifactId:t.id,label:"Service Binding Parameters",onArtifactEdited:e=>{this.onTemplateArtifactEdited(e,a)},onExpectedArtifactSelected:e=>this.onTemplateArtifactSelected(e.id,a),pipeline:this.props.pipeline,stage:e}),Ge.createElement(f,{label:"Updatable Binding"},Ge.createElement("input",{type:"checkbox",checked:t.updatable,onChange:e=>this.updatableBindingUpdated(e,a)}))),Ge.createElement("div",{className:"col-md-1"},Ge.createElement("div",{className:"form-control-static"},Ge.createElement("button",{onClick:()=>this.removeInputArtifact(a)},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")))}};let Yt=Jt;function Zt(e){const t=new $(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()}Yt.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);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(q,{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],cloudProvider:"cloudfoundry",component:Xt,description:"Create a service key",executionDetailsSections:[At,_],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 ea 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}=N;return Ge.createElement(Ge.Fragment,null,Ge.createElement("h4",null,"Basic Settings"),Ge.createElement("div",{className:"form-horizontal"},Ge.createElement(yt,{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:y.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 ta(e){const t=new $(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(q,{application:e,onChange:n,pipeline:t,stage:r,validate:ta,render:e=>Ge.createElement(ea,{...e})})},producesArtifacts:!1,cloudProvider:"cloudfoundry",executionDetailsSections:[_],validateFn:ta});class aa 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:aa,description:"Delete a service key",executionDetailsSections:[At,_],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 na 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 ra 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(na,{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 sa 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(na,{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})))}}zt(".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 ia 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(sa,{onChange:this.serviceManifestSourceUpdated,service:e,onServiceChanged:e=>this.serviceManifestSourceUpdated({direct:e})}):Ge.createElement(ra,{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 la=(e,t)=>e&&e.direct?t?"userProvided":"direct":"artifact",oa=e=>e&&e.direct?"direct":"artifact";U.registerValidator("requiredDeployServiceField",new class{validate(e,t,a){const n=Ne(t,"manifest");if(la(n,Ne(t,"userProvided"))!==a.manifestSource)return null;const r=Ne(n,oa(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(la(n,Ne(t,"userProvided"))!==a.manifestSource)return null;const r=Ne(n,oa(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:ia,configAccountExtractor:e=>[e.credentials],supportsCustomTimeout:!0,description:"Deploys services using Open Service Broker and deploys user-provided services",executionDetailsSections:[xt,_],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:St,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 ca 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 da(e){const t=new $(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(q,{application:e,onChange:n,pipeline:t,stage:r,validate:da,render:e=>Ge.createElement(ca,{...e})})},supportsCustomTimeout:!0,executionDetailsSections:[xt,_],key:"destroyService",provides:"destroyService",validateFn:da}),z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],cloudProvider:"cloudfoundry",component:St,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:St,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:Ft,description:"Map a load balancer",executionDetailsSections:[kt,_],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 ma 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}=N;return Ge.createElement("div",{className:"cloudfoundry-resize-asg-stage form-horizontal"},!a.strategy&&Ge.createElement(yt,{accounts:e,application:t,cloudProvider:"cloudfoundry",onComponentUpdate:this.componentUpdated,component:n}),Ge.createElement(f,{label:"Target"},Ge.createElement(c,{model:{target:l},options:y.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:ma,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 pa 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(yt,{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:pa,controller:"cfRollbackClusterStageCtrl",validators:[{type:"requiredField",preventSave:!0,fieldName:"cluster"},{type:"requiredField",preventSave:!0,fieldName:"regions"},{type:"requiredField",preventSave:!0,fieldName:"credentials",fieldLabel:"account"}]});class ua 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}=N;return Ge.createElement("div",{className:"cloudfoundry-resize-asg-stage form-horizontal"},Ge.createElement(yt,{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:y.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 Ca,ha;(ha=Ca||(Ca={})).APP="app",ha.TASK="task";class ga 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}${t===Ca.APP?`:${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 va 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(ga,{account:r,region:s,resourceDisplayName:o,resourceGuid:i,logsType:Ca.TASK})),c&&Ge.createElement("dd",null,Ge.createElement("a",{target:"_blank",href:c},"External"))),!s&&Ge.createElement("div",{className:"well"},"Collecting additional details...")))))}}function fa(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}))}va.title="runJobDetails",z.pipeline.registerStage({accountExtractor:e=>[e.context.credentials],component:ua,configAccountExtractor:e=>[e.credentials],cloudProvider:"cloudfoundry",key:"runJob",provides:"runJob",restartable:!0,executionDetailsSections:[_,va],supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"credentials"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"command"}]}),(fa||(fa={})).title="cloudfoundryShareServiceConfig";class Ea 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 ba(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:Ea,executionDetailsSections:[fa,_],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:Ft,description:"Unmap a load balancer",executionDetailsSections:[kt,_],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"}]}),(ba||(ba={})).title="cloudfoundryUnshareServiceConfig";class ya 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:ya,controller:"cfUnshareServiceStageCtrl",executionDetailsSections:[ba,_],supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"requiredField",fieldName:"serviceInstanceName",preventSave:!0}]});class Na 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 Sa 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 ka 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 Fa 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 xa 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 Aa 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 Ra 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 wa 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 Ta 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 Da{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}}Da.$inject=["$q"];const Ua=class 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:n}=this.props,r={account:n.account,cloudProvider:n.cloudProvider,cluster:n.cluster,instanceCounts:n.instanceCounts,instances:n.instances,loadBalancers:t,name:n.name,region:n.region,type:n.type};this.state.taskMonitor.submit((()=>a.serverGroupWriter.mapLoadBalancers(r,this.props.application,{serverGroupName:n.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(e){return R.show(Ua,e,{})}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(Et,{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")))}))}};let Ia=Ua;Ia.defaultProps={closeModal:D,dismissModal:D};const Ga=class 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:n}=this.props,r={account:n.account,cloudProvider:n.cloudProvider,cluster:n.cluster,instanceCounts:n.instanceCounts,instances:n.instances,loadBalancers:t,name:n.name,region:n.region,type:n.type};this.state.taskMonitor.submit((()=>a.serverGroupWriter.unmapLoadBalancers(r,this.props.application,{serverGroupName:n.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(e){return R.show(Ga,e,{})}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(Et,{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")))}))}};let Ba=Ga;Ba.defaultProps={closeModal:D,dismissModal:D};const Ma=class 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:n,memory:r,reason:s}=e,{serverGroup:i,application:l}=this.props,o={capacity:{min:t,max:t,desired:t},diskQuota:n,memory:r,reason:s,serverGroupName:i.name};this.state.taskMonitor.submit((()=>a.serverGroupWriter.resizeServerGroup(i,l,o)))};const{capacity:t,diskQuota:n,memory:r}=e.serverGroup,{desired:s}=t;this.state={initialValues:{desired:s,diskQuota:n,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(e){return R.show(Ma,e,{})}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")))}))}};let Pa=Ma;Pa.defaultProps={closeModal:D,dismissModal:D};const qa=class 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:n}=e,{serverGroup:r,application:s}=this.props,i={rollbackType:"EXPLICIT",rollbackContext:{rollbackServerGroupName:r.name,restoreServerGroupName:n,targetHealthyRollbackPercentage:100},reason:t};this.state.taskMonitor.submit((()=>a.serverGroupWriter.rollbackServerGroup(r,s,i)))};const{previousServerGroup:t,serverGroup:n}=e,{name:r}=n;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(e){return R.show(qa,e,{})}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")))}))}};let $a=qa;$a.defaultProps={closeModal:D,dismissModal:D};class La 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:()=>{a.$state.includes("**.serverGroup",r)&&a.$state.go("^")}},i={header:"Really destroy "+t.name+"?",buttonText:"Destroy "+t.name,account:t.account,taskMonitorConfig:s,interestingHealthProviderNames:void 0,submitMethod:n=>(n.serverGroupName=t.name,a.serverGroupWriter.destroyServerGroup(t,e,n)),askForReason:!0,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Cloud Foundry"};ie.addDestroyWarningMessage(e,t,i),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(i.interestingHealthProviderNames=["Cloud Foundry"]),n.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:n=>(n.serverGroupName=t.name,a.serverGroupWriter.disableServerGroup(t,e.name,n)),askForReason:!0};ie.addDisableWarningMessage(e,t,s),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(s.interestingHealthProviderNames=["Cloud Foundry"]),n.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"};n.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});$a.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;Pa.show({application:e,serverGroup:t})},this.mapServerGroupToLoadBalancers=()=>{const{app:e,serverGroup:t}=this.props;Ia.show({application:e,serverGroup:t})},this.unmapServerGroupFromLoadBalancers=()=>{const{app:e,serverGroup:t}=this.props;Ba.show({application:e,serverGroup:t})},this.cloneServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a=Mt.buildServerGroupCommandFromExisting(e,t),n=`Clone ${t.name}`;Wt.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:n=>(n.serverGroupName=t.name,a.serverGroupWriter.enableServerGroup(t,e,n)),askForReason:!0};e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(s.interestingHealthProviderNames=["Cloud Foundry"]),n.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 Oa(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)}))}zt('.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:it,details:ut,CreateLoadBalancerModal:wt},serverGroup:{skipUpstreamStageCheck:!0,transformer:Da,detailsActions:La,detailsGetter:Oa,detailsSections:[Na,Sa,ka,Fa,xa,Ra,Aa,wa,Ta],CloneServerGroupModal:Wt,commandBuilder:Pt,scalingActivitiesEnabled:!1},instance:{details:rt}});const Va=le.providers.cloudfoundry||{defaults:{}};Va&&(Va.resetToOriginal=le.resetProvider("cloudfoundry"));export{yt as AccountRegionClusterSelector,Sa as ApplicationManagerSection,wa as BoundServicesSection,Ra as BuildSection,ht as Buildpacks,St as CloudFoundryAsgStageConfig,Wt as CloudFoundryCreateServerGroupModal,ut as CloudFoundryLoadBalancerDetails,it as CloudFoundryLoadBalancerTransformer,st as CloudFoundryLoadBalancerUpsertDescription,kt as CloudFoundryLoadBalancersExecutionDetails,Ft as CloudFoundryLoadBalancersStageConfig,wt as CloudFoundryMapLoadBalancerModal,Va as CloudFoundryProviderSettings,La as CloudFoundryServerGroupActions,Mt as CloudFoundryServerGroupCommandBuilder,Pt as CloudFoundryServerGroupCommandBuilderShim,Da as CloudFoundryServerGroupTransformer,xt as CloudFoundryServiceExecutionDetails,At as CloudFoundryServiceKeyExecutionDetails,gt as EnvironmentVariables,Ta as EnvironmentVariablesSection,Nt as FormikAccountRegionClusterSelector,Ct as FormikConfigField,vt as HealthCheck,xa as HealthCheckSection,ft as InstanceParameters,ka as MetricsSection,Aa as PackageSection,Et as Routes,Na as ServerGroupInformationSection,Fa as ServerGroupSizingSection,bt as Services,Oa as cfServerGroupDetailsGetter};
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};
2
2
  //# sourceMappingURL=index.js.map