@spinnaker/google 2026.3.1 → 2026.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/autoscalingPolicy/GceAutoScalingFieldLayout.d.ts +2 -2
- package/dist/domain/loadBalancer.d.ts +6 -3
- package/dist/image/ImageSelect.d.ts +1 -1
- package/dist/index.js +159 -1
- package/dist/index.js.map +1 -1
- package/dist/loadBalancer/configure/common/gceLoadBalancerModels.d.ts +13 -2
- package/dist/loadBalancer/configure/http/GceHttpLoadBalancerEditor.d.ts +3 -0
- package/dist/loadBalancer/configure/http/GceHttpLoadBalancerModal.d.ts +1 -1
- package/dist/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.d.ts +30 -0
- package/dist/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.d.ts +53 -0
- package/dist/loadBalancer/httpLoadBalancerUtils.service.d.ts +3 -1
- package/dist/serverGroup/configure/wizard/GceCloneServerGroupModal.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/GceServerGroupWizard.types.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/customInstance/CustomInstanceConfigurer.d.ts +1 -1
- package/dist/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.d.ts +2 -2
- package/dist/serverGroup/configure/wizard/pages/AdvancedSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/pages/Policies.d.ts +21 -3
- package/dist/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/pages/ServerGroupCapacity.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/pages/ServerGroupImageSettings.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/pages/ServerGroupInstanceType.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.d.ts +2 -2
- package/dist/serverGroup/details/GceInstanceFlexibilityPolicyDetails.d.ts +2 -2
- package/dist/serverGroup/details/stateful/MarkDiskStatefulButton.d.ts +2 -2
- package/dist/serverGroup/details/stateful/UpdateBootImageButton.d.ts +2 -2
- package/package.json +5 -5
- package/src/autoHealingPolicy/GceAutoHealingPolicyEditor.spec.tsx +68 -52
- package/src/autoscalingPolicy/GceAutoscalingPolicyEditor.spec.tsx +43 -50
- package/src/autoscalingPolicy/GceAutoscalingPolicyEditor.tsx +1 -1
- package/src/autoscalingPolicy/GceAutoscalingPolicyWriter.spec.ts +1 -1
- package/src/domain/loadBalancer.ts +6 -3
- package/src/gce.module.spec.ts +132 -153
- package/src/instance/details/GceInstanceDetails.spec.tsx +86 -83
- package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.spec.tsx +162 -121
- package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.tsx +13 -1
- package/src/loadBalancer/configure/common/GceProxyLoadBalancerEditor.spec.tsx +47 -30
- package/src/loadBalancer/configure/common/GceProxyLoadBalancerEditor.tsx +2 -1
- package/src/loadBalancer/configure/common/GceProxyLoadBalancerModal.spec.tsx +85 -57
- package/src/loadBalancer/configure/common/gceLoadBalancerData.spec.ts +17 -16
- package/src/loadBalancer/configure/common/gceLoadBalancerModels.spec.ts +230 -5
- package/src/loadBalancer/configure/common/gceLoadBalancerModels.ts +186 -22
- package/src/loadBalancer/configure/common/gceLoadBalancerSubmission.spec.ts +298 -2
- package/src/loadBalancer/configure/common/gceLoadBalancerSubmission.ts +35 -5
- package/src/loadBalancer/configure/common/useGceLoadBalancerData.spec.tsx +37 -46
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerEditor.spec.tsx +399 -58
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerEditor.tsx +148 -41
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.spec.tsx +169 -36
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.tsx +80 -12
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerModal.spec.tsx +224 -124
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerModal.tsx +8 -2
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.spec.tsx +57 -22
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.tsx +21 -0
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerRoutingEditor.spec.tsx +24 -20
- package/src/loadBalancer/configure/network/GceNetworkLoadBalancerEditor.spec.tsx +41 -32
- package/src/loadBalancer/configure/network/GceNetworkLoadBalancerModal.spec.tsx +35 -30
- package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.spec.tsx +443 -0
- package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.tsx +401 -0
- package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.spec.tsx +330 -0
- package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.tsx +348 -0
- package/src/loadBalancer/details/gceLoadBalancerDetails.spec.tsx +439 -35
- package/src/loadBalancer/details/gceLoadBalancerDetails.tsx +104 -21
- package/src/loadBalancer/httpLoadBalancerUtils.service.spec.ts +126 -0
- package/src/loadBalancer/httpLoadBalancerUtils.service.ts +27 -11
- package/src/loadBalancer/loadBalancer.setTransformer.spec.ts +165 -0
- package/src/loadBalancer/loadBalancer.setTransformer.ts +15 -2
- package/src/pipeline/stages/googleStageConfig.spec.js +22 -16
- package/src/securityGroup/configure/GceSecurityGroupModal.spec.tsx +177 -193
- package/src/securityGroup/configure/GceSecurityGroupModal.tsx +14 -2
- package/src/securityGroup/details/GceSecurityGroupDetails.spec.tsx +69 -78
- package/src/serverGroup/configure/serverGroupCommandBuilder.service.spec.js +35 -15
- package/src/serverGroup/configure/serverGroupConfiguration.service.js +7 -1
- package/src/serverGroup/configure/serverGroupConfiguration.service.spec.js +74 -4
- package/src/serverGroup/configure/wizard/GceCloneServerGroupModal.spec.tsx +593 -855
- package/src/serverGroup/configure/wizard/GceCloneServerGroupModal.tsx +120 -38
- package/src/serverGroup/configure/wizard/GceServerGroupWizard.types.ts +1 -0
- package/src/serverGroup/configure/wizard/GceServerGroupWizardPage.spec.tsx +53 -50
- package/src/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.spec.tsx +65 -49
- package/src/serverGroup/configure/wizard/hiddenMetadataKeys.value.js +1 -0
- package/src/serverGroup/configure/wizard/pages/AdvancedSettings.spec.tsx +101 -108
- package/src/serverGroup/configure/wizard/pages/AdvancedSettings.tsx +32 -28
- package/src/serverGroup/configure/wizard/pages/GceServerGroupFirewalls.spec.tsx +60 -59
- package/src/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.spec.tsx +240 -114
- package/src/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.tsx +152 -63
- package/src/serverGroup/configure/wizard/pages/Policies.spec.tsx +93 -48
- package/src/serverGroup/configure/wizard/pages/Policies.tsx +80 -55
- package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.spec.tsx +123 -94
- package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.tsx +24 -18
- package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.spec.tsx +152 -133
- package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.tsx +40 -37
- package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.spec.tsx +66 -60
- package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.tsx +8 -2
- package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.spec.tsx +131 -101
- package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx +29 -28
- package/src/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.spec.tsx +104 -81
- package/src/serverGroup/details/GceInstanceFlexibilityPolicyDetails.spec.tsx +10 -11
- package/src/serverGroup/details/autoHealingPolicy/GceAutoHealingPolicyDetails.spec.tsx +51 -59
- package/src/serverGroup/details/autoHealingPolicy/modal/GceUpsertAutoHealingPolicyModal.spec.tsx +3 -3
- package/src/serverGroup/details/autoscalingPolicy/GceAutoscalingPolicyDetails.spec.tsx +49 -58
- package/src/serverGroup/details/autoscalingPolicy/modal/GceUpsertAutoscalingPolicyModal.spec.tsx +3 -3
- package/src/serverGroup/details/gceServerGroupDetails.spec.tsx +162 -141
- package/src/serverGroup/details/resize/GceResizeServerGroupModal.spec.tsx +102 -86
- package/src/serverGroup/details/resize/GceResizeServerGroupModal.tsx +4 -0
- package/src/serverGroup/details/rollback/GceRollbackServerGroupModal.spec.tsx +40 -31
- package/src/serverGroup/serverGroup.transformer.js +1 -0
- package/src/serverGroup/serverGroup.transformer.spec.js +48 -0
- package/src/validation/ApplicationNameValidator.spec.ts +1 -1
- /package/dist/{gce.logo2ae85d8704b1d6b8.png → gce.logoChI3w_A5.png} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,2 +1,160 @@
|
|
|
1
|
-
import{SearchService as e,InfrastructureCaches as t,REST as a,HelpContentsRegistry as n,withRouter as r,InstanceActions as i,RecentHistoryService as l,InstanceReader as o,Details as s,CollapsibleSection as c,AccountTag as d,ConfirmationModalService as u,InstanceWriter as m,AccountService as p,SETTINGS as h,SubnetReader as g,NetworkReader as v,ReactModal as b,TaskMonitor as f,TaskMonitorWrapper as y,ModalClose as k,Spinner as E,SubmitButton as C,LoadBalancerWriter as S,TaskExecutor as N,noop as T,useDeckRuntimeServices as A,useDataSource as w,CloudProviderRegistry as P,ManagedMenuItem as I,AuthenticationService as M,BakeryReader as D,ExpectedArtifactService as G,StageConfigField as x,MapEditor as R,Registry as B,BakeExecutionLabel as F,ExecutionDetailsTasks as L,ExecutionArtifactTab as z,ArtifactReferenceService as O,ExecutionDetailsSection as H,StageFailureMessage as U,AccountRegionClusterSelector as $,StageConstants as q,TargetSelect as _,DeploymentStrategySelector as j,NameUtils as V,PipelineConfigService as K,SecurityGroupWriter as Z,FirewallLabels as W,DeckRuntimeContext as Y,HelpField as X,TaskReason as J,Markdown as Q,StageArtifactSelectorDelegate as ee,excludeAllTypesExcept as te,ArtifactTypePatterns as ae,SpelService as ne,WizardModal as re,WizardPage as ie,CheckboxInput as le,confirmNotManaged as oe,ValidationMessage as se,PlatformHealthOverride as ce,UserVerification as de,ServerGroupReader as ue,ServerGroupWarningMessageService as me,ErrorModalService as pe,ApplicationNameValidator as he,DeploymentStrategyRegistry as ge}from"@spinnaker/core";import ve,{uniqWith as be,chain as fe,isEqual as ye,defaults as ke,uniq as Ee,partition as Ce,groupBy as Se,map as Ne,cloneDeep as Te,get as Ae,intersectionBy as we,isFinite as Pe,isPlainObject as Ie,isEmpty as Me}from"lodash";import De,{useState as Ge,useLayoutEffect as xe,useRef as Re,useEffect as Be,useCallback as Fe}from"react";import Le,{Async as ze}from"react-select";import{Observable as Oe}from"rxjs";class He{listCertificates(){return e.search({q:"",type:"sslCertificates",allowShortQuery:"true"},t.get("certificates")).then(e=>e&&e.results?e.results.filter(e=>"gce"===e.provider):[]).catch(()=>[])}}class Ue{listHealthChecks(a){return a?this.listHealthChecks().then(e=>e.filter(e=>e.healthCheckType===a)):e.search({q:"",type:"healthChecks",allowShortQuery:"true"},t.get("healthChecks")).then(e=>{if(e&&e.results){const t=e.results.filter(e=>"gce"===e.provider).map(e=>{const t=JSON.parse(e.healthCheck);return t.account=e.account,t});return be(t,(e,t)=>e.name===t.name&&e.healthCheckType===t.healthCheckType&&e.account===t.account)}return[]}).catch(()=>[])}}class $e{constructor(){const n=new He,r=new Ue,i=Object.create(null);return i.addresses={initializers:[()=>e.search({q:"",type:"addresses",allowShortQuery:"true"},t.get("addresses")).then(e=>e&&e.results?e.results.filter(e=>"gce"===e.provider).map(e=>({...JSON.parse(e.address),account:e.account,region:e.region})):[]).catch(()=>[])]},i.backendServices={initializers:[()=>a("/search").useCache(t.get("backendServices")).query({q:"",type:"backendServices",allowShortQuery:"true"}).get()]},i.certificates={initializers:[()=>n.listCertificates()]},i.healthChecks={initializers:[()=>r.listHealthChecks()]},i}}const qe={"gce.httpLoadBalancer.certificate":"The name of an SSL certificate. If specified, Spinnaker will create an HTTPS load balancer.","gce.httpLoadBalancer.certificateMap":"A Certificate Manager certificate map name. Certificate maps let GCP manage and auto-rotate TLS certificates, replacing individual certificate selection.","gce.httpLoadBalancer.defaultService":"A default service handles any requests that do not match a specified host rule or path matching rule.","gce.httpLoadBalancer.externalIP":"The IP address for this listener. If you do not specify an IP, your listener will be assigned an ephemeral IP.","gce.httpLoadBalancer.hostRule.hostPattern":"For example, <b>example.com</b>.","gce.httpLoadBalancer.namedPort":"\n For HTTP(S) and SSL/TCP load balancers,\n incoming traffic is directed through a named port (for Spinnaker, the named port is <b>http</b>).\n The mapping from named port to port number is specified per server group\n and can be configured within the server group creation dialogue under <b>Port Name Mapping</b>.","gce.httpLoadBalancer.pathRule.paths":"For example, <b>/path</b> in <b>example.com/path</b>","gce.httpLoadBalancer.port":"HTTP requests can be load balanced based on port 80 or port 8080. HTTPS requests can be load balanced on port 443.","gce.image.artifact":"The artifact that is to be deployed to this cluster. The artifact should represent a deployable image.","gce.image.source":"\n <p>Where the image to deploy is read from.</p>\n <p>\n <b>Artifact:</b> Deploy an artifact that was supplied/created upstream. The expected artifact must be referenced here, and will be bound at runtime.\n </p>\n <p>\n <b>Prior Stage:</b> Deploy the result of the most recent Bake or Find Image stage.\n </p>\n ","gce.instance.customInstance.cores":"<ul><li>Above 1, vCPU count must be even.</li><li>Zones that support Haswell and Ivy Bridge processors can support custom machine types up to 32 vCPUs.</li><li>Zones that support Sandy Bridge processors can support up to 16 vCPUs.</li></ul>","gce.instance.customInstance.memory":"<ul><li>Memory per vCPU must be between .9 GB and 6.5 GB.</li><li>Total memory must be a multiple of 256 MB.</li><li>Memory per vCPU must be between .9 GB and 800 GB if selected extended memory feature.</li></ul>","gce.instance.customInstance.extendedmemory":'Add more memory per vCPU to your VM instance. <a href="https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#extendedmemory">Click here </a>for more information regarding extended memory',"gce.instance.customMetadata.instance-template":"The instance template used to configure this instance.","gce.instance.customMetadata.load-balancer-names":'This field is used to "remember" what load balancers this instance is associated with, even if it is deregistered.',"gce.instance.customMetadata.global-load-balancer-names":'This field is used to "remember" what global load balancers this instance is associated with, even if it is deregistered.',"gce.instance.customMetadata.backend-service-names":'This field is used to "remember" what backend services this instance is associated with, even if it is deregistered.',"gce.instance.customMetadata.load-balancing-policy":'This field is used to "remember" the load balancing policy this instance is associated with, even if it is deregistered.',"gce.instance.customMetadata.startup-script":"This script will run automatically on every boot.","gce.instance.labels.spinnaker-region":"This label can be used to group instances when querying for metrics.","gce.instance.labels.spinnaker-server-group":"This label can be used to group instances when querying for metrics.","gce.instance.storage":"<p>Storage options can be fully-configured on the <b>Advanced Settings</b> tab. These are just default settings. Please be aware of your Local SSD quotas as you provision VMs.</p>","gce.instance.storage.localSSD":"<p>Local SSD disks are always 375GB. All non shared-core instance types support attaching up to 8 Local SSD disks. Please be aware of your Local SSD quotas as you provision VMs.</p>","gce.instance.serviceAccount":'<p>Service accounts authenticate applications running on your virtual machine instances to other Google Cloud Platform services. Valid values are either "default" or the full email address of a custom service account.</p>',"gce.instance.authScopes":"<p>Service account scopes specify which Google Cloud Platform APIs your instances can authenticate with, and define the level of access that your instances have with those services. You can enter custom auth scopes by typing into the blank field.</p>","gce.instance.authScopes.cloud-platform":"<p>The instances in this server group have full API access to all Google Cloud services.</p>","gce.instanceType.32core":"<p>32-core machine types are in Beta and are available only in Ivy Bridge and Haswell zones.</p>","gce.internalLoadBalancer.ports":"Use a comma to separate up to five TCP ports.","gce.internalHttpLoadBalancer.network":"Network must have a subnet whose 'purpose' is 'INTERNAL_HTTPS_LOAD_BALANCER'","gce.loadBalancer.connectionDraining":"(Optional) If set, enables connection draining for this backend service. This field defines the number of seconds to wait before instances that belong to this backend service are terminated in order to drain in-flight connections.","gce.loadBalancer.detail":"<p>(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.</p>","gce.loadBalancer.advancedSettings.healthInterval":"<p>Configures the interval, in seconds, between load balancer health checks.</p><p>Default: <b>10</b></p>","gce.loadBalancer.advancedSettings.healthyThreshold":"<p>Configures the number of healthy observations before reinstituting an instance into the load balancer’s traffic rotation.</p><p>Default: <b>10</b></p>","gce.loadBalancer.advancedSettings.unhealthyThreshold":"<p>Configures the number of unhealthy observations before deservicing an instance from the load balancer.</p><p>Default: <b>2</b></p>","gce.loadBalancer.healthCheck":"(Optional) <b>Health Checks</b> use HTTP requests to determine if a VM instance is healthy.","gce.loadBalancer.portName":"(Required) The <b>Port Name</b> this backend service will forward traffic to. Load balancers in GCP specify a <b>Port Name</b>, and each server group added to a load balancer needs to specify a mapping from that <b>Port Name</b> to a port to actually receive traffic.","gce.loadBalancer.portRange":"(Optional) Only packets addressed to ports in the specified <b>Port Range</b> will be forwarded. If left empty, all ports are forwarded. Must be a single port number or two port numbers separated by a dash. Each port number must be between 1 and 65535, inclusive. For example: 5000-5999.","gce.securityGroup.sourceCIDRs":"Traffic is only allowed from sources that match one of these CIDR ranges, or one of the source tags above.","gce.securityGroup.sourceTags":"Traffic is only allowed from sources that match one of these tags, or one of the source CIDR ranges below.","gce.securityGroup.targetTags":"Traffic is only allowed if the target instance has one of these tags.","gce.securityGroup.targetServiceAccounts":"Traffic is allowed if the target instance has one of these service accounts.","gce.securityGroup.sourceServiceAccounts":"Traffic is allowed if the source instance has one of these service accounts.","gce.serverGroup.associatePublicIpAddress.providerField":"Check if new GCE server groups in this application should be assigned a public IP address by default.","gce.serverGroup.resizeWithAutoscalingPolicy":"\n Setting the desired instance count for a server group with an autoscaler is not supported by Spinnaker;\n if the desired instance count differs from the instance count that the autoscaler wants to maintain for its configured metrics,\n it will quickly override the desired instance count.","gce.serverGroup.scalingPolicy.coolDownPeriodSec":"How long to wait before collecting information from a new instance. This should be at least the time it takes to initialize the instance.","gce.serverGroup.scalingPolicy.cpuUtilization":"Autoscaler adds or removes instances to maintain this CPU usage on each instance.","gce.serverGroup.scalingPolicy.predictiveAutoscaling":"Autoscaler adds or removes instances based on forecasted load. You must set a CPU utilization target to enable predictive autoscaling.","gce.serverGroup.scalingPolicy.loadBalancingUtilization":"Autoscaler adds or removes instances to maintain this usage of load-balancing capacity.","gce.serverGroup.scalingPolicy.customMetricUtilizations":"Autoscaler adds or removes instances to maintain this usage for custom metric.","gce.serverGroup.scalingPolicy.cronExpression":"\n Start time and recurrence using a cron expression. Examples: <br/>\n Every day at 3 PM:<br/>\n 0 15 * * *<br/>\n Every week Monday to Friday at 8:30 AM: <br/>\n 30 8 * * Mon-Fri<br/>\n Once on 30 January 2030 at midnight: <br/>\n 0 0 30 1 * 2030","gce.serverGroup.imageName":"(Required) <b>Image</b> is the Google Compute Engine image. Images are restricted to the account selected.","gce.serverGroup.capacity":"The number of instances that the instance group manager will attempt to maintain. Deleting or abandoning instances will affect this number, as will resizing the group.","gce.serverGroup.minCpuPlatform":'The baseline minimum CPU platform to use for your instances, whenever available. Select "Automatic" unless you have a specific need.',"gce.serverGroup.customMetadata":"<b>Custom Metadata</b> will be propagated to the instances in this server group. This is useful for passing in arbitrary values that can be queried by your code on the instance.","gce.serverGroup.userData":"<p>Custom user data will be propagated to the instances in this server group. Key/value pairs can either be newline or comma delimited.</p><strong>Example:</strong><br/> <pre>key=value<br>key2=value2</pre>","gce.serverGroup.customMetadata.load-balancer-names":'This field is used to "remember" what load balancers this server group is associated with, even if the instances are deregistered.',"gce.serverGroup.customMetadata.global-load-balancer-names":'This field is used to "remember" what global load balancers this server group is associated with, even if the instances are deregistered.',"gce.serverGroup.customMetadata.backend-service-names":'This field is used to "remember" what backend services this server group is associated with, even if the instances are deregistered.',"gce.serverGroup.customMetadata.load-balancing-policy":'This field is used to "remember" the load balancing policy this server group is configured with, even if the server group is deregistered from the load balancer. This allows us to re-enable the server group with the same load balancing policy specified on creation.',"gce.serverGroup.customMetadata.select-zones":"This regional server group will be deployed only to specific zones within the region.","gce.serverGroup.customMetadata.startup-script":"This script will run automatically on every boot.","gce.serverGroup.labels.spinnaker-region":"This label can be used to group instances when querying for metrics.","gce.serverGroup.labels.spinnaker-server-group":"This label can be used to group instances when querying for metrics.","gce.serverGroup.instanceFlexibilityPolicy":"Defines named sets of acceptable machine types for a regional managed instance group. Lower ranks are preferred; Google Compute Engine selects an available type when creating each VM.","gce.serverGroup.shieldedInstanceConfig":"Shielded VM features include trusted UEFI firmware and come with options for Secure Boot, Virtual Trusted Platform Module (vTPM), and Integrity Monitoring.","gce.serverGroup.shieldedVmSecureBoot":"Secure boot helps protect your VM instances against boot-level and kernel-level malware and rootkits.","gce.serverGroup.shieldedVmVtpm":"Virtual Trusted Platform Module (vTPM) validates your guest VM pre-boot and boot integrity, and offers key generation and protection.","gce.serverGroup.shieldedVmIntegrityMonitoring":"Integrity monitoring lets you monitor and verify the runtime boot integrity of your shielded VM instances using Stackdriver reports. Note: requires vTPM to be enabled.","gce.serverGroup.preemptibility":"A preemptible VM costs much less, but lasts only 24 hours. It can be terminated sooner due to system demands.","gce.serverGroup.automaticRestart":"Compute Engine can automatically restart VM instances if they are terminated for non-user-initiated reasons (maintenance event, hardware failure, software failure, etc.).","gce.serverGroup.onHostMaintenance":"When Compute Engine performs periodic infrastructure maintenance it can migrate your VM instances to other hardware without downtime.","gce.serverGroup.canIpForward":'Forwarding allows the instance to help route packets. See <a target="_blank" href="https://cloud.google.com/compute/docs/networking?hl=en_US#canipforward">here</a> for more information.',"gce.serverGroup.securityGroups.implicit":"Firewall rules with no target tags defined will permit incoming connections that match the ingress rules to all instances in the network.","gce.serverGroup.securityGroups.targetTags":"This {{firewall}} rule will be associated with this server group only if a target tag is selected.","gce.serverGroup.autoscaling.targetCPUUsage":"Autoscaling adds or removes VMs in the group to maintain this level of CPU usage on each VM.","gce.serverGroup.autoscaling.targetHTTPLoadBalancingUsage":"Autoscaling adds or removes VMs in the group to maintain this usage of load-balancing capacity. This value is a percentage of the 'Maximum rate' setting of the load balancer this group is used by.","gce.serverGroup.autoscaling.targetMetric":"Autoscaling adds or removes VMs in the group to maintain these target levels.","gce.serverGroup.autoscaling.minVMs":"The least number of VM instances the group will contain, even if the target is not met.","gce.serverGroup.autoscaling.maxVMs":"The largest number of VM instances allowed, even if the target is exceeded.","gce.serverGroup.autoscaling.cooldown":"How long to wait before collecting information from a new instance. This should be at least the time it takes to initialize the instance. To find the minimum, create an instance from the same image and note how long it takes to start.","gce.serverGroup.autoscaling.mode":"Mode of operation of the autoscaling policy. This guides the autoscaler by defining the types of scaling operations it can perform. Options are ON, ONLY_SCALE_OUT, and OFF.","gce.serverGroup.autoHealing":"VMs in the group are recreated as needed. You can use a health check to recreate a VM if the health check finds the VM unresponsive. If you do not select a health check, VMs are recreated only when stopped.","gce.serverGroup.initialDelaySec":"The time to allow an instance to boot and applications to fully start before the first health check.","gce.serverGroup.subnet":"\n Subnetworks allow you to regionally segment the network IP space into prefixes (subnets) and control which prefix a VM instance's internal IP address is allocated from. There are several types of GCE networks:\n <ul>\n <li><b>Legacy (non-subnet) Network</b>: IP address allocation occurs at the global network level. This means the network address space spans across all regions.</li>\n <li><b>Auto Subnet Network</b>: Server groups will be automatically assigned to the specified region's subnet.</li>\n <li><b>Custom Subnet Network</b>: A subnet must be selected for the server group. If no subnets have been created for the specified region, you will not be able to provision the server group.</li>\n </ul>","gce.serverGroup.loadBalancingPolicy.balancingMode":"Tells the load balancer when the backend is at capacity. If a backend is at capacity, new requests are routed to the nearest region that can handle requests. The balancing mode can be based on CPU utilization or requests per second (RPS).","gce.serverGroup.loadBalancingPolicy.maxRatePerInstance":"The maximum number of requests per second that can be sent to the backend instance group. Input must be a number greater than zero.","gce.serverGroup.loadBalancingPolicy.maxUtilization":"The maximum CPU utilization allowed for the backend. CPU utilization is calculated by averaging CPU use across all instances in the backend instance group. Input must be a number between 0 and 100.","gce.serverGroup.loadBalancingPolicy.maxConnectionsPerInstance":"The target connections per second for individual instances. When this number is exceeded, requests are directed to another backend.","gce.serverGroup.loadBalancingPolicy.capacityScaler":"\n An additional control to manage your maximum CPU utilization or RPS.\n If you want your instances to operate at a max 80% CPU utilization, set your balancing mode to 80% max CPU utilization and your capacity to 100%.\n If you want to cut instance utilization by half, set your balancing mode to 80% max CPU utilization and your capacity to 50%. Input must be a number between 0 and 100.","gce.serverGroup.loadBalancingPolicy.portName":"A load balancer sends traffic to an instance group through a named port. Input must be a port name.","gce.serverGroup.loadBalancingPolicy.listeningPort":"A load balancer sends traffic to an instance group through a named port. Input must be a port number (i.e., between 1 and 65535).","gce.serverGroup.traffic":"Registers the server group with any associated load balancers. These registrations are used by Spinnaker to determine if the server group is enabled.","gce.serverGroup.accelerator":"Attaches GPUs to instances in this server group. The set of available GPUs is dictated by the selected zone. You cannot attach GPUs to instances with shared-core machine types.","gce.tagImage.consideredStages":"Limit which previous stages will be considered when locating images to tag. If left unchecked, images generated by any upstream stage will be tagged.","pipeline.config.gce.bake.accountName":"<p>(Optional) The name of a Google account configured within Rosco. If left blank, the first configured account will be used.</p>","pipeline.config.gce.bake.baseImage":"<p>(Optional) A GCE image name. For example: ubuntu-1204-precise-v20150910.</p>","gce.loadBalancerType.Network":"\n <p>Use Network Load Balancing to balance the load on your systems based on incoming IP protocol data, such as address, port, and protocol type.</p>\n <p>Network Load Balancing is a regional, non-proxied load balancer. You can use it to load balance UDP traffic, and TCP and SSL traffic on ports that are not supported by the SSL proxy and TCP proxy load balancers.</p>","gce.loadBalancerType.HTTP(S)":"<p>Google Cloud Platform (GCP) HTTP(S) Load Balancing provides global load balancing for HTTP(S) requests destined for your instances.</p>","gce.loadBalancerType.Internal":"<p>Internal TCP/UDP Load Balancing is a regional load balancer that enables you to run and scale your services behind a private load balancing IP address that is accessible only to your internal virtual machine instances.</p>","gce.loadBalancerType.SSL":"<p>Google Cloud SSL Proxy Load Balancing terminates user SSL (TLS) connections at the load balancing layer, then balances the connections across your instances using the SSL or TCP protocols. This supports both IPv4 and IPv6 addresses for client traffic.</p>","gce.loadBalancerType.TCP":"<p>Google Cloud Platform (GCP) TCP Proxy Load Balancing allows you to use a single IP address for all users around the world. GCP TCP proxy load balancing automatically routes traffic to the instances that are closest to the user.</p>"};Object.keys(qe).forEach(e=>n.register(e,qe[e]));class _e{static findImages(e){return a("/images/find").query(e).get().catch(()=>[])}static getImage(){return Promise.resolve(null)}}De.Component;var je=Object.defineProperty,Ve=(e,t,a)=>((e,t,a)=>t in e?je(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,"symbol"!=typeof t?t+"":t,a);class Ke{constructor(){Ve(this,"deriveProjectId",e=>{const t=e.selfLink.split("/");return t[t.indexOf("projects")+1]}),Ve(this,"decorateXpnResourceIfNecessary",(e,t)=>{if(!t)return null;const a=t.split("/"),n=a[a.indexOf("projects")+1],r=ve.last(a);return n!==e?n+"/"+r:r})}}function Ze(e,t,a){return(e.health||[]).some(e=>e.type===t&&e.state===a)}function We(e,t){var a;return(null==(a=t.loadBalancers)?void 0:a.length)&&e.loadBalancers?(e.loadBalancers.data||[]).filter(e=>e.account===t.account&&"NETWORK"===e.loadBalancerType&&t.loadBalancers.includes(e.name)).map(e=>e.name):[]}function Ye({app:e,instance:t,stateService:a}){const n=()=>{a.includes("**.instanceDetails",{instanceId:t.instanceId})&&a.go("^")},r=(a,r,i,l,o=!1)=>{u.confirm({account:t.account,askForReason:!0,buttonText:r,header:a,submitMethod:l,taskMonitorConfig:{application:e,onTaskComplete:o?n:void 0,title:i}})},l=We(e,t),o={...t,loadBalancers:l},s=l.join(" and "),c=[];return function(e){var t;return"OutOfService"===(null==(t=(e.health||[]).filter(e=>"Discovery"===e.type)[0])?void 0:t.state)}(t)&&c.push({label:"Enable in Discovery",triggerAction:()=>r(`Really enable ${t.instanceId} in discovery?`,`Enable ${t.instanceId}`,`Enabling ${t.instanceId} in discovery`,(a={})=>m.enableInstanceInDiscovery(t,e,a))}),Ze(t,"Discovery","Up")&&c.push({label:"Disable in Discovery",triggerAction:()=>r(`Really disable ${t.instanceId} in discovery?`,`Disable ${t.instanceId}`,`Disabling ${t.instanceId} in discovery`,(a={})=>m.disableInstanceInDiscovery(t,e,a))}),function(e,t){return!!We(e,t).length&&(Ze(t,"LoadBalancer","OutOfService")||!(t.health||[]).some(e=>"LoadBalancer"===e.type))}(e,t)&&c.push({label:"Register with Load Balancer",triggerAction:()=>r(`Really register ${t.instanceId} with ${s}?`,`Register ${t.instanceId}`,`Registering ${t.instanceId} with ${s}`,(t={})=>m.registerInstanceWithLoadBalancer(o,e,t))}),l.length>0&&(t.health||[]).some(e=>"LoadBalancer"===e.type)&&c.push({label:"Deregister from Load Balancer",triggerAction:()=>r(`Really deregister ${t.instanceId} from ${s}?`,`Deregister ${t.instanceId}`,`Deregistering ${t.instanceId} from ${s}`,(t={})=>m.deregisterInstanceFromLoadBalancer(o,e,t))}),c.push({label:"Reboot",triggerAction:()=>r(`Really reboot ${t.instanceId}?`,`Reboot ${t.instanceId}`,`Rebooting ${t.instanceId}`,(a={})=>m.rebootInstance(t,e,{...a,interestingHealthProviderNames:[]}))}),c.push({label:"Terminate",triggerAction:()=>r(`Really terminate ${t.instanceId}?`,`Terminate ${t.instanceId}`,`Terminating ${t.instanceId}`,(a={})=>m.terminateInstance(t,e,{...a,cloudProvider:"gce",...t.serverGroup?{managedInstanceGroupName:t.serverGroup}:{}}),!0)}),t.serverGroup&&c.push({label:"Terminate and Shrink Server Group",triggerAction:()=>r(`Really terminate ${t.instanceId} and shrink ${t.serverGroup}?`,`Terminate ${t.instanceId} and shrink ${t.serverGroup}`,`Terminating ${t.instanceId} and shrinking server group`,(a={})=>m.terminateInstanceAndShrinkServerGroup(t,e,{...a,instanceIds:[t.instanceId],serverGroupName:t.serverGroup,zone:t.placement.availabilityZone}),!0)}),De.createElement(i,{actions:c})}r(Ye);const Xe=r(function(e){const[t,a]=Ge(e.initialInstance||null),[n,r]=Ge(!0),[i,u]=Ge(!1);return xe(()=>{let t=!1;const n=function(e){const t=e.$stateParams||e.stateParams||{},a=e.instance||e.initialInstance||{};return{account:a.account||t.account||t.accountId,instanceId:a.instanceId||t.instanceId||t.id,region:a.region||t.region}}(e),i=n.instanceId?function(e,t){var a,n;const r=(null==(a=null==e?void 0:e.serverGroups)?void 0:a.data)||[];for(const e of r){const a=(e.instances||[]).find(e=>e.id===t);if(a)return{...a,account:e.account,loadBalancers:e.loadBalancers||[],region:e.region,serverGroup:e.name,vpcId:e.vpcId}}const i=(null==(n=null==e?void 0:e.loadBalancers)?void 0:n.data)||[];for(const e of i){const a=(e.instances||[]).find(e=>e.id===t);if(a)return{...a,account:e.account,loadBalancers:[e.name],region:e.region,vpcId:e.vpcId};for(const a of(e.serverGroups||[]).filter(e=>e.isDisabled)){const n=(a.instances||[]).find(e=>e.id===t);if(n)return{...n,account:e.account,loadBalancers:[e.name],region:e.region,serverGroup:n.serverGroup||a.name,serverGroupDisabled:!0,vpcId:e.vpcId}}}return null}(e.app,n.instanceId):null,s=(null==i?void 0:i.account)||n.account,c=(null==i?void 0:i.region)||n.region;return a(null),r(!0),u(!1),n.instanceId&&s&&c?(l.addExtraDataToLatest("instances",{account:s,region:c,serverGroup:null==i?void 0:i.serverGroup}),o.getInstanceDetails(s,c,n.instanceId).then(e=>{t||(a(function(e){var t,a,n,r;const i=new Ke,l=(null==(t=e.networkInterfaces)?void 0:t[0])||{},o=function(e){const t=/\/projects\/([^/]+)/.exec(e||"");return null==t?void 0:t[1]}(e.selfLink)||e.account,s=e.zone||(null==(a=e.placement)?void 0:a.availabilityZone)||e.region,c=i.decorateXpnResourceIfNecessary(o,l.network),d=i.decorateXpnResourceIfNecessary(o,l.subnetwork),u=null==(r=null==(n=l.accessConfigs)?void 0:n[0])?void 0:r.natIP,m=l.networkIP,p=e.selfLink?e.selfLink.replace("www.googleapis.com/compute/v1","cloudssh.developers.google.com"):null;return{...e,baseIpAddress:u||m,externalIpAddress:u,gcloudSSHCommand:s?`gcloud compute ssh ${e.name||e.instanceId} --zone ${s}`:void 0,health:(e.health||[]).filter(e=>"Google"!==e.type||"Unknown"!==e.state),internalDnsName:e.instanceId,internalIpAddress:m,logsLink:o?`https://console.cloud.google.com/logs/query?project=${encodeURIComponent(o)}&resource=gce_instance`:void 0,network:c,region:e.region||s,sshLink:p,subnet:d}}({...i,...e,account:s,instanceId:n.instanceId,region:c})),r(!1))},()=>{t||(u(!0),r(!1))}),()=>{t=!0}):(u(!0),void r(!1))},[e.app,e.instance,e.initialInstance,e.$stateParams,e.stateParams]),i?De.createElement("div",{className:"alert alert-warning"},"Instance not found."):De.createElement(s,{loading:n},t&&De.createElement(De.Fragment,null,De.createElement(s.Header,{icon:De.createElement("span",{className:"icon-gce"}),name:t.name||t.instanceId,actions:De.createElement(Ye,{app:e.app,instance:t,router:e.router,stateParams:e.stateParams,stateService:e.stateService})}),De.createElement(s.Content,{loading:n},De.createElement(c,{heading:"Instance Information",defaultExpanded:!0},De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Account"),De.createElement("dd",null,De.createElement(d,{account:t.account})),De.createElement("dt",null,"Region"),De.createElement("dd",null,t.region),De.createElement("dt",null,"Type"),De.createElement("dd",null,t.machineType||t.instanceType||t.type),De.createElement("dt",null,"Network"),De.createElement("dd",null,t.network||"-"),De.createElement("dt",null,"Subnet"),De.createElement("dd",null,t.subnet||"-"))),De.createElement(c,{heading:"DNS",defaultExpanded:!0},De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Internal DNS Name"),De.createElement("dd",null,t.internalDnsName||"-"),De.createElement("dt",null,"Internal IP"),De.createElement("dd",null,t.internalIpAddress||"-"),De.createElement("dt",null,"External IP"),De.createElement("dd",null,t.externalIpAddress||"-"))),De.createElement(c,{heading:"SSH",defaultExpanded:!1},t.sshLink&&De.createElement("p",null,De.createElement("a",{href:t.sshLink,target:"_blank",rel:"noopener noreferrer"},"SSH in Google Cloud Console")),t.gcloudSSHCommand&&De.createElement("pre",null,t.gcloudSSHCommand)),De.createElement(c,{heading:"Logs",defaultExpanded:!1},t.logsLink?De.createElement("a",{href:t.logsLink,target:"_blank",rel:"noopener noreferrer"},"View Google Cloud logs"):De.createElement("span",null,"No log link available")))))}),Je=Object.freeze([{instanceType:"n1-standard-1",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-2",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-4",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-8",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-16",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-32",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-64",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-96",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"f1-micro",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"g1-small",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"e2-small",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"e2-micro",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"e2-medium",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"n1-highmem-2",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-4",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-8",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-16",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-32",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-64",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-96",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-2",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-4",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-8",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-16",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-32",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-64",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-96",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"default",disks:[{type:"pd-ssd",sizeGb:10}]}]);class Qe{constructor(e,t=console){const a=[{type:"general",label:"General Purpose",families:[{type:"n1-standard",description:"This family provides a balance of compute, memory, and network resources, and it is a good choice for general purpose applications.",storageType:"SSD",storageHelpFieldKey:"gce.instance.storage",instanceTypes:[{name:"n1-standard-1",label:"Small",cpu:1,memory:3.75,costFactor:1},{name:"n1-standard-2",label:"Medium",cpu:2,memory:7.5,costFactor:2},{name:"n1-standard-4",label:"Large",cpu:4,memory:15,costFactor:2},{name:"n1-standard-8",label:"XLarge",cpu:8,memory:30,costFactor:3},{name:"n1-standard-16",label:"2XLarge",cpu:16,memory:60,costFactor:3},{name:"n1-standard-32",label:"4XLarge",cpu:32,memory:120,costFactor:4},{name:"n1-standard-64",label:"8XLarge",cpu:64,memory:240,costFactor:4},{name:"n1-standard-96",label:"12XLarge",cpu:96,memory:360,costFactor:4}]}],icon:"hdd"},{type:"memory",label:"High Memory",families:[{type:"n1-highmem",description:"High memory machine types are ideal for tasks that require more memory relative to virtual cores. High memory machine types have 6.50GB of RAM per virtual core.",storageType:"SSD",storageHelpFieldKey:"gce.instance.storage",instanceTypes:[{name:"n1-highmem-2",label:"Medium",cpu:2,memory:13,costFactor:2},{name:"n1-highmem-4",label:"Large",cpu:4,memory:26,costFactor:2},{name:"n1-highmem-8",label:"XLarge",cpu:8,memory:52,costFactor:3},{name:"n1-highmem-16",label:"2XLarge",cpu:16,memory:104,costFactor:3},{name:"n1-highmem-32",label:"4XLarge",cpu:32,memory:208,costFactor:4},{name:"n1-highmem-64",label:"8XLarge",cpu:64,memory:416,costFactor:4},{name:"n1-highmem-96",label:"12XLarge",cpu:96,memory:624,costFactor:4}]}],icon:"hdd"},{type:"cpu",label:"High CPU",families:[{type:"n1-highcpu",description:"High CPU machine types are ideal for tasks that require more virtual cores relative to memory. High CPU machine types have one virtual core for every 0.90GB of RAM.",storageType:"SSD",storageHelpFieldKey:"gce.instance.storage",instanceTypes:[{name:"n1-highcpu-2",label:"Medium",cpu:2,memory:1.8,costFactor:1},{name:"n1-highcpu-4",label:"Large",cpu:4,memory:3.6,costFactor:2},{name:"n1-highcpu-8",label:"XLarge",cpu:8,memory:7.2,costFactor:2},{name:"n1-highcpu-16",label:"2XLarge",cpu:16,memory:14.4,costFactor:3},{name:"n1-highcpu-32",label:"4XLarge",cpu:32,memory:28.8,costFactor:4},{name:"n1-highcpu-64",label:"8XLarge",cpu:64,memory:57.6,costFactor:4},{name:"n1-highcpu-96",label:"12XLarge",cpu:96,memory:86.4,costFactor:4}]}],icon:"hdd"},{type:"micro",label:"Micro Utility",families:[{type:"f1-micro bursting",description:"This family of machine types is a good choice for small, non-resource intensive workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",storageType:"Std",storageHelpFieldKey:"gce.instance.storage",instanceTypes:[{name:"f1-micro",label:"Micro",cpu:1,memory:.6,costFactor:1},{name:"g1-small",label:"Small",cpu:1,memory:1.7,costFactor:1},{name:"e2-micro",label:"E2 Micro",cpu:2,memory:1,costFactor:1},{name:"e2-small",label:"E2 Small",cpu:2,memory:2,costFactor:2},{name:"e2-medium",label:"E2 Medium",cpu:2,memory:4,costFactor:2}]}],icon:"hdd"},{type:"custom",label:"Custom Type",families:[],icon:"asterisk"},{type:"buildCustom",label:"Build Custom",families:[{type:"buildCustom",instanceTypes:[{name:"n1buildCustom",nameRegex:/custom-\d{1,2}-\d{4,6}/,storage:{localSSDSupported:!0}},{name:"e2buildCustom",nameRegex:/e2-custom-(\d{1,2})-(\d{3,6})/,storage:{localSSDSupported:!1}},{name:"otherbuildCustom",nameRegex:/(.*)-?custom-(\d{1,2})-(\d{3,6})/,storage:{localSSDSupported:!0}}]}],icon:"wrench"}],n=ve.memoize(()=>{const e=ve.cloneDeep(a);return p.getAllAccountDetailsForProvider("gce").then(a=>{let n=ve.get(a,"[0].instanceTypeDisks");if(ve.isEmpty(n)&&(n=Je),n){ve.flatten(e.map(e=>e.families)).forEach(e=>{e.instanceTypes.forEach(e=>{const a=n.find(t=>t.instanceType===e.name);if(a){const n=a.disks.map(e=>{switch(e.type){case"PD_SSD":return{type:"pd-ssd",sizeGb:e.sizeGb};case"PD_STANDARD":return{type:"pd-standard",sizeGb:e.sizeGb};case"LOCAL_SSD":return{type:"local-ssd",sizeGb:375};default:return t.warn(`Disk type '${e.type}' not supported.`),null}}).filter(e=>!!e);let r=0,i=0;if(a.supportsLocalSSD)i=n.filter(e=>"local-ssd"===e.type).length,r=375;else{const e=n.filter(e=>e.type.startsWith("pd-"));e.length&&(r=e.reduce((e,t)=>Math.max(e,t.sizeGb),0),i=e.filter(e=>e.sizeGb===r).length)}e.storage={localSSDSupported:a.supportsLocalSSD,size:r,count:i,defaultSettings:{disks:n}}}})})}return e})});function r(e,t){if(!e||!t||0===t.length)return console.error("Invalid input parameters"),[];return t.filter(t=>e[t]).flatMap(t=>e[t].instanceTypes||[])}return{getCategories:n,getAvailableTypesForRegions:r,getAllTypesByRegion:function(){return n().then(e=>ve.chain(e).map("families").flatten().map("instanceTypes").flatten().map("name").filter(e=>"n1buildCustom"!==e&&"e2buildCustom"!==e&&"otherbuildCustom"!==e).value())},getAvailableTypesForLocations:r,resolveInstanceTypeDetails:e=>({name:e,storage:Object.assign({isDefault:!0},h.providers.gce.defaults.instanceTypeStorage)})}}}var et=Object.defineProperty,tt=(e,t,a)=>((e,t,a)=>t in e?et(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,t+"",a);const at={rebootInstances:e=>{e.interestingHealthProviderNames=[]}};class nt{constructor(){tt(this,"transform",(e,t)=>{((e,t)=>{t.zone=e.instances[0].availabilityZone})(e,t),at[t.type]&&at[t.type](t)})}}const rt={accounts:[],addresses:[],backendServices:[],certificates:[],healthChecks:[],networks:[],regions:[],subnets:[]};class it{constructor(e=ct){this.readers=e,this.disposed=!1,this.listeners=new Set,this.requestId=0,this.state={data:rt,status:"idle"}}getState(){return this.state}subscribe(e){return this.disposed||this.listeners.add(e),()=>this.listeners.delete(e)}async load(e){const t=++this.requestId;this.publish({data:this.state.data,error:void 0,status:"loading"});try{const[a,n,r,i,l,o,s,c]=await Promise.all([this.readers.accounts(),this.readers.addresses(),this.readers.backendServices(),this.readers.certificates(),this.readers.healthChecks(),this.readers.networks(),this.readers.regions(e),this.readers.subnets()]);this.isCurrent(t)&&this.publish({data:{accounts:a,addresses:n,backendServices:r,certificates:i,healthChecks:l,networks:o,regions:s,subnets:c},error:void 0,status:"ready"})}catch(e){this.isCurrent(t)&&this.publish({data:this.state.data,error:e,status:"error"})}}dispose(){this.disposed=!0,this.requestId+=1,this.listeners.clear()}isCurrent(e){return!this.disposed&&e===this.requestId}publish(e){this.disposed||(this.state=e,this.listeners.forEach(t=>t(e)))}}function lt(e,t){const a=new Set(e.map(({name:e})=>e));return[...e,...t.filter(({name:e})=>e&&!a.has(e))]}const ot=new He,st=new Ue,ct={accounts:()=>p.listAccounts("gce"),regions:e=>p.getRegionsForAccount(e).then(e=>Array.isArray(e)?e:Object.keys(e||{}).map(e=>({name:e}))),networks:()=>v.listNetworksByProvider("gce"),subnets:()=>g.listSubnetsByProvider("gce"),certificates:()=>ot.listCertificates(),healthChecks:()=>st.listHealthChecks(),addresses:()=>e.search({q:"",type:"addresses",allowShortQuery:"true"},t.get("addresses")).then(e=>((null==e?void 0:e.results)||[]).filter(({provider:e})=>"gce"===e).map(e=>({...JSON.parse(e.address),account:e.account,region:e.region}))),backendServices:()=>a("/search").useCache(!0).query({q:"",type:"backendServices",allowShortQuery:"true"}).get().then(dt)};function dt(e){const t=Array.isArray(e)&&1===e.length?e[0]:e,a=t&&"object"==typeof t&&"results"in t?t.results:t;return Array.isArray(a)?a:[]}const ut=["NETWORK","INTERNAL","TCP","SSL","HTTP","INTERNAL_MANAGED"],mt={NETWORK:gt({address:!0,healthChecks:!0}),INTERNAL:gt({address:!0,backendServices:!0,healthChecks:!0,network:!0,subnet:!0}),TCP:gt({address:!0,backendServices:!0,healthChecks:!0}),SSL:gt({address:!0,backendServices:!0,certificates:!0,healthChecks:!0}),HTTP:gt({address:!0,backendServices:!0,certificates:!0,healthChecks:!0,hostRules:!0}),INTERNAL_MANAGED:gt({address:!0,backendServices:!0,certificates:!0,healthChecks:!0,hostRules:!0,network:!0,subnet:!0})};function pt(e,t){const a=function(e){const t=It(e).toUpperCase();return ut.includes(t)?t:"NETWORK"}(e.loadBalancerType),n=It(At(a)?e.urlMapName||e.name||e.loadBalancerName:e.name||e.loadBalancerName),r={address:e.ipAddress||e.address,certificate:e.certificate,name:At(a)&&(e.loadBalancerName||e.name)||n,portRange:e.portRange||e.ports,protocol:e.protocol||(At(a)?e.certificate?"HTTPS":"HTTP":e.ipProtocol),subnet:e.subnet},i=Pt(e.listeners).length?Pt(e.listeners):[r],l=function(e){const t=[...Pt(e.backendServices),...Pt(e.backendService)];e.defaultService&&"object"==typeof e.defaultService&&t.push(e.defaultService);Pt(e.hostRules).forEach(e=>{const a=wt(wt(e).pathMatcher);a.defaultService&&"object"==typeof a.defaultService&&t.push(a.defaultService),Pt(a.pathRules).forEach(e=>{const a=wt(e).backendService;a&&"object"==typeof a&&t.push(a)})});const a=new Map;return t.forEach(e=>{const t=function(e){const t={...e,name:It(e.name)},a=ft(e.healthCheck||e.healthCheckLink);a&&(t.healthCheck=a);return delete t.healthCheckLink,t}("object"==typeof e?wt(e):{name:It(e)});t.name&&!a.has(t.name)&&a.set(t.name,t)}),Array.from(a.values())}(e),o=function(e,t){const a=[...Pt(e.healthChecks),...Pt(e.healthCheck)];t.forEach(e=>{e.healthCheck&&Object.keys(e.healthCheck).some(e=>"name"!==e&&"selfLink"!==e)&&a.push(e.healthCheck)});const n=new Map;return a.forEach((e,t)=>{const a=bt(wt(e)),r=a.name||(Object.keys(a).length?`unnamed-${t}`:"");r&&!n.has(r)&&n.set(r,a)}),Array.from(n.values())}(e,l),s={mode:t,name:n,credentials:It(e.credentials||e.account),region:It(e.region)||(c=a,["TCP","SSL","HTTP"].includes(c)?"global":""),loadBalancerType:a,listeners:i.map(e=>function(e,t,a){const n={name:It(e.name)||a,protocol:vt(e.protocol||(At(t)?e.certificate||e.certificateMap||443===Number(e.port||e.portRange)?"HTTPS":"HTTP":e.ipProtocol),t),portRange:Tt(e.portRange||e.port||e.ports)},r=ft(e.address||e.ipAddress),i=ft(e.certificate),l=It(e.certificateMap),o=ft(e.subnet);r&&(n.address=r);i&&(n.certificate=i);l&&(n.certificateMap=l);o&&(n.subnet=o);return n}(wt(e),a,n)),healthChecks:o,backendServices:l,hostRules:Pt(e.hostRules).map(e=>function(e){const t=wt(e.pathMatcher);return{hostPatterns:Mt(e.hostPatterns),pathMatcher:{defaultService:ft(t.defaultService),pathRules:Pt(t.pathRules).map(e=>{const t=wt(e);return{backendService:ft(t.backendService),paths:Mt(t.paths)}})}}}(wt(e))),defaultService:ft(e.defaultService),network:ft(e.network),subnet:ft(e.subnet)};var c;return"edit"===t&&(s.original=Dt({backendServices:l,healthChecks:o,listeners:s.listeners})),s}function ht(e){const t=mt[e.loadBalancerType],a=e.listeners[0],n={cloudProvider:"gce",credentials:e.credentials,loadBalancerName:e.name,loadBalancerType:e.loadBalancerType,name:e.name,provider:"gce",region:e.region,type:"upsertLoadBalancer"};return At(e.loadBalancerType)?n.listeners=e.listeners.map(e=>function(e,t){const a={name:e.name,portRange:"HTTPS"===e.protocol?"443":e.portRange,protocol:e.protocol};t.address&&e.address&&(a.ipAddress=yt(e.address));t.certificates&&e.certificate&&(a.certificate=kt(e.certificate));t.certificates&&e.certificateMap&&(a.certificateMap=e.certificateMap);t.subnet&&e.subnet&&(a.subnet=Et(e.subnet));return a}(e,t)):a&&(n.ipProtocol=a.protocol,n.portRange=a.portRange),t.address&&(null==a?void 0:a.address)&&(n.ipAddress=yt(a.address)),t.certificates&&(null==a?void 0:a.certificate)&&(n.certificate=kt(a.certificate)),t.healthChecks&&e.healthChecks.length&&(n.healthChecks=e.healthChecks.map(e=>({...e}))),t.backendServices&&e.backendServices.length&&(n.backendServices=e.backendServices.map(St)),t.hostRules&&e.hostRules.length&&(n.hostRules=e.hostRules.map(Nt)),t.backendServices&&e.defaultService&&(n.defaultService=Ct(e.defaultService)),t.network&&e.network&&(n.network=function(e){return e.name}(e.network)),t.subnet&&e.subnet&&(n.subnet=Et(e.subnet)),n}function gt(e){return{address:!1,backendServices:!1,certificates:!1,healthChecks:!1,hostRules:!1,network:!1,subnet:!1,...e}}function vt(e,t){const a=It(e).toUpperCase();return["TCP","UDP","HTTP","HTTPS","HTTP2","GRPC","SSL"].includes(a)?a:"SSL"===t?"SSL":At(t)?"HTTP":"TCP"}function bt(e){const t=wt(e),a={...t},n=It(t.healthCheckType||t.protocol);if(n&&(a.healthCheckType=vt(n,"NETWORK")),["port","checkIntervalSec","timeoutSec","healthyThreshold","unhealthyThreshold"].forEach(e=>{void 0!==t[e]&&null!==t[e]&&""!==t[e]&&(a[e]=Number(t[e]))}),t.requestPath){const e=It(t.requestPath);a.requestPath=e.startsWith("/")?e:`/${e}`}return a}function ft(e){if(!e)return;if("object"==typeof e){const t=wt(e),a=It(t.name||t.id||t.address||t.selfLink);return a?{...t,name:a}:void 0}const t=It(e),a=t.split("/").filter(Boolean).pop()||t;return t.includes("/")?{name:a,selfLink:t}:{name:a}}function yt(e){return It(e.address)||e.name}function kt(e){return e.name}function Et(e){return e.name}function Ct(e){return e.name}function St(e){const t={...e};return e.healthCheck&&(t.healthCheck=function(e){return e.name}(e.healthCheck)),t}function Nt(e){return{hostPatterns:[...e.hostPatterns],pathMatcher:{defaultService:e.pathMatcher.defaultService?Ct(e.pathMatcher.defaultService):void 0,pathRules:e.pathMatcher.pathRules.map(e=>({backendService:e.backendService?Ct(e.backendService):void 0,paths:[...e.paths]}))}}}function Tt(e){return Array.isArray(e)?e.map(String).join(","):It(e)}function At(e){return"HTTP"===e||"INTERNAL_MANAGED"===e}function wt(e){return e&&"object"==typeof e?e:{}}function Pt(e){return null==e?[]:Array.isArray(e)?e:[e]}function It(e){return null==e?"":String(e)}function Mt(e){return Pt(e).map(It).filter(Boolean)}function Dt(e){return Array.isArray(e)?e.map(Dt):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Dt(t)])):e}const Gt={INTERNAL:{frontendProtocols:["TCP","UDP"],backendProtocols:["TCP","UDP"]},TCP:{frontendProtocols:["TCP"],backendProtocols:["TCP"]},SSL:{frontendProtocols:["SSL"],backendProtocols:["TCP"]}},xt=["25","43","110","143","195","443","465","587","700","993","995"],Rt=["HTTP","HTTPS","TCP","SSL"],Bt=["NONE","CLIENT_IP","GENERATED_COOKIE"],Ft=["NONE","CLIENT_IP","CLIENT_IP_PROTO","CLIENT_IP_PORT_PROTO"];function Lt(e){const t=e.loadBalancerType,a=Gt[t];if(!a)return e;const n=e.listeners[0]||{name:e.name,portRange:"",protocol:a.frontendProtocols[0]},r=a.frontendProtocols.includes(n.protocol)?n.protocol:a.frontendProtocols[0],i=e.backendServices[0],l="INTERNAL"===t&&a.backendProtocols.includes(r)?r:a.backendProtocols[0],o={...i||{name:e.name,portName:"INTERNAL"===t?void 0:"http",sessionAffinity:"NONE"},protocol:l};return"UDP"===r&&(o.sessionAffinity="NONE",delete o.affinityCookieTtlSec),{...e,region:"INTERNAL"===t?e.region:"global",listeners:[{...n,name:n.name||e.name,portRange:n.portRange||("INTERNAL"===t?"":"443"),protocol:r}],backendServices:[o]}}function zt(e){var t;const a=[],n=e.loadBalancerType,r=e.listeners[0],i=e.backendServices[0],l=e.healthChecks[0],o=(s=null==r?void 0:r.portRange,String(s||"").split(",").map(e=>e.trim()).filter(Boolean));var s;return e.name.trim()||a.push("Name is required."),e.credentials||a.push("Account is required."),e.region||a.push("Region is required."),"INTERNAL"===n?((o.length<1||o.length>5||o.some(e=>!Vt(e)))&&a.push("INTERNAL load balancers accept between one and five listener ports."),e.network||a.push("Network is required for INTERNAL load balancers."),e.subnet||a.push("Subnet is required for INTERNAL load balancers.")):1===o.length&&xt.includes(o[0])||a.push(`${n} proxy port must be one of 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, or 995.`),"SSL"!==n||(null==r?void 0:r.certificate)||a.push("Certificate is required for SSL proxy load balancers."),(null==i?void 0:i.name)||a.push("Backend service is required."),"INTERNAL"===n||(null==i?void 0:i.portName)||a.push("Port name is required."),"INTERNAL"!==n&&Kt(null==i?void 0:i.connectionDrainingTimeoutSec)&&a.push("Connection draining timeout must be zero or greater."),"GENERATED_COOKIE"!==(null==i?void 0:i.sessionAffinity)||function(e,t,a){const n=Number(e);return Number.isFinite(n)&&n>=t&&n<=a}(i.affinityCookieTtlSec,0,86400)&&void 0!==i.affinityCookieTtlSec||a.push("Generated cookie TTL must be between 0 and 86400 seconds."),(null==l?void 0:l.name)||(null==(t=null==i?void 0:i.healthCheck)?void 0:t.name)||a.push("Health check name is required."),l&&(Vt(l.port)||a.push("Health check port must be between 1 and 65535."),"HTTP"!==l.healthCheckType&&"HTTPS"!==l.healthCheckType||l.requestPath||a.push("HTTP and HTTPS health checks require a request path."),Kt(l.timeoutSec)&&a.push("Health check timeout must be zero or greater."),void 0!==l.checkIntervalSec&&Number(l.checkIntervalSec)<=0&&a.push("Health check interval must be greater than zero."),void 0!==l.healthyThreshold&&Number(l.healthyThreshold)<=0&&a.push("Healthy threshold must be greater than zero."),void 0!==l.unhealthyThreshold&&Number(l.unhealthyThreshold)<=0&&a.push("Unhealthy threshold must be greater than zero.")),a}function Ot({command:e,data:t,disabled:a=!1,onChange:n}){var r,i,l,o,s;const c=Lt(e),d=c.loadBalancerType,u=c.listeners[0],m=c.backendServices[0],p=c.healthChecks[0]||{healthCheckType:"TCP"},h=function(e,t){var a;const n=e.listeners[0],r=e.backendServices[0],i=t=>t.filter(t=>!t.account&&!t.credentials||(t.account||t.credentials)===e.credentials),l=t=>i(t).filter(t=>!t.region||t.region===e.region),o=null==(a=e.network)?void 0:a.name,s=i(t.subnets).filter(t=>{var a;const n="string"==typeof t.network?t.network:null==(a=t.network)?void 0:a.name;return!(t.region&&t.region!==e.region||n&&n!==o)});return{accounts:t.accounts,addresses:lt(l(t.addresses),qt(null==n?void 0:n.address)),backendServices:lt(l(t.backendServices),qt(r)),certificates:lt(i(t.certificates),qt(null==n?void 0:n.certificate)),healthChecks:lt(i(t.healthChecks),qt(null==r?void 0:r.healthCheck)),networks:lt(i(t.networks),qt(e.network)),regions:t.regions,subnets:lt(s,qt(e.subnet))}}(c,t),g="INTERNAL"===d?"UDP"===u.protocol?["NONE"]:Ft:Bt,v=e=>n(Lt({...c,...e})),b=e=>v({listeners:[{...u,...e}]}),f=e=>v({backendServices:[{...m,...e}]}),y=e=>v({healthChecks:[{...p,...e}]});return De.createElement("div",{className:"form-horizontal gce-proxy-load-balancer-editor"},Ht("Name","name",c.name,e=>v({name:e,listeners:[{...u,name:u.name===c.name?e:u.name}],backendServices:[{...m,name:m.name===c.name?e:m.name}]}),a),$t("Account","credentials",c.credentials,h.accounts,e=>v({credentials:e}),a),"INTERNAL"===d?$t("Region","region",c.region,h.regions,e=>v({region:e}),a):Ht("Region","region",c.region,()=>{},!0),"INTERNAL"===d&&$t("Network","network",null==(r=c.network)?void 0:r.name,h.networks,e=>v({network:_t(e),subnet:void 0}),a),"INTERNAL"===d&&$t("Subnet","subnet",null==(i=c.subnet)?void 0:i.name,h.subnets,e=>v({subnet:_t(e)}),a),$t("Address","address",null==(l=u.address)?void 0:l.name,h.addresses,e=>b({address:jt(e,h.addresses)}),a),$t("Protocol","protocol",u.protocol,Gt[d].frontendProtocols.map(e=>({name:e})),e=>b({protocol:e}),a||1===Gt[d].frontendProtocols.length),"INTERNAL"===d?Ht("Listener ports","portRange",u.portRange,e=>b({portRange:e}),a):$t("Listener port","portRange",u.portRange,xt.map(e=>({name:e})),e=>b({portRange:e}),a),"SSL"===d&&$t("Certificate","certificate",null==(o=u.certificate)?void 0:o.name,h.certificates,e=>b({certificate:_t(e)})),De.createElement("h4",null,"Backend Service"),$t("Backend service","backendService",m.name,h.backendServices,e=>f({name:e}),a,!0),"INTERNAL"!==d&&Ht("Port name","portName",String(m.portName||""),e=>f({portName:e})),"INTERNAL"!==d&&Ut("Connection draining timeout","connectionDrainingTimeoutSec",m.connectionDrainingTimeoutSec,e=>f({connectionDrainingTimeoutSec:e})),$t("Session affinity","sessionAffinity",String(m.sessionAffinity||"NONE"),g.map(e=>({name:e})),e=>f({sessionAffinity:e})),"GENERATED_COOKIE"===m.sessionAffinity&&Ut("Affinity cookie TTL","affinityCookieTtlSec",m.affinityCookieTtlSec,e=>f({affinityCookieTtlSec:e})),De.createElement("h4",null,"Health Check"),$t("Existing health check","healthCheck",null==(s=m.healthCheck)?void 0:s.name,h.healthChecks,e=>{if(!e)return f({healthCheck:void 0});const t=bt(h.healthChecks.find(t=>t.name===e)||{name:e}),a="string"==typeof t.selfLink?t.selfLink:void 0,n={name:e,...a?{selfLink:a}:{}};v({backendServices:[{...m,healthCheck:n}],healthChecks:[t]})}),$t("Health check protocol","healthCheckType",p.healthCheckType,Rt.map(e=>({name:e})),e=>y({healthCheckType:e})),Ht("Health check name","healthCheckName",p.name||"",e=>y({name:e})),("HTTP"===p.healthCheckType||"HTTPS"===p.healthCheckType)&&Ht("Request path","requestPath",p.requestPath||"",e=>y({requestPath:e})),Ut("Health check port","healthCheckPort",p.port,e=>y({port:e})),Ut("Timeout","timeoutSec",p.timeoutSec,e=>y({timeoutSec:e})),Ut("Interval","checkIntervalSec",p.checkIntervalSec,e=>y({checkIntervalSec:e})),Ut("Healthy threshold","healthyThreshold",p.healthyThreshold,e=>y({healthyThreshold:e})),Ut("Unhealthy threshold","unhealthyThreshold",p.unhealthyThreshold,e=>y({unhealthyThreshold:e})))}function Ht(e,t,a,n,r=!1){return De.createElement("div",{className:"form-group","data-field":t},De.createElement("label",{className:"col-md-3 sm-label-right"},e),De.createElement("div",{className:"col-md-7"},De.createElement("input",{className:"form-control input-sm",disabled:r,onChange:e=>n(e.target.value),value:a||""})))}function Ut(e,t,a,n){return De.createElement("div",{className:"form-group","data-field":t},De.createElement("label",{className:"col-md-3 sm-label-right"},e),De.createElement("div",{className:"col-md-7"},De.createElement("input",{className:"form-control input-sm",type:"number",value:null==a?"":String(a),onChange:e=>n(""===e.target.value?void 0:Number(e.target.value))})))}function $t(e,t,a,n,r,i=!1,l=!1){const o=n.map(({name:e})=>e);return l&&a&&!o.includes(a)&&o.push(a),De.createElement("div",{className:"form-group","data-field":t},De.createElement("label",{className:"col-md-3 sm-label-right"},e),De.createElement("div",{className:"col-md-7"},De.createElement("select",{className:"form-control input-sm",disabled:i,onChange:e=>r(e.target.value),value:a||""},De.createElement("option",{value:""},"Select..."),o.map(e=>De.createElement("option",{key:e,value:e},e)))))}function qt(e){return(null==e?void 0:e.name)?[e]:[]}function _t(e){return e?{name:e}:void 0}function jt(e,t){return e?t.find(t=>t.name===e)||{name:e}:void 0}function Vt(e){const t=Number(e);return Number.isInteger(t)&&t>=1&&t<=65535}function Kt(e){return null!=e&&Number(e)<0}function Zt(e){var t,a;const n=Lt(e),r=ht(n),i=n.backendServices[0]||{name:n.name},l={...i},o=n.healthChecks[0]||i.healthCheck;var s;return delete l.protocol,l.protocol=void 0,l.healthCheck=o?{...o}:void 0,l.name=l.name||n.name,r.backendService=l,delete r.backendServices,delete r.healthChecks,"INTERNAL"===n.loadBalancerType?(r.ipProtocol=(null==(t=n.listeners[0])?void 0:t.protocol)||"TCP",r.ports=(s=null==(a=n.listeners[0])?void 0:a.portRange,String(s||"").split(",").map(e=>e.trim()).filter(Boolean)),delete r.portRange):r.ipProtocol=String(i.protocol||"TCP"),r}function Wt(e){var a;const n=e.application||e.app,r=e.forPipelineConfig?"pipeline":!1===e.isNew?"edit":"create",i=function(e){const t=String(e||"").toUpperCase();return"INTERNAL"===t||"SSL"===t||"TCP"===t?t:"TCP"}(e.loadBalancerType||(null==(a=e.loadBalancer)?void 0:a.loadBalancerType)),[l,o]=De.useState(()=>function(e,t,a,n=""){var r,i,l;const o=e||{},s=o.backendService||(null==(r=o.backendServices)?void 0:r[0]),c=null==s?void 0:s.healthCheck,d=pt({...o,backendServices:s?[{...s}]:o.backendServices,healthChecks:(null==(i=o.healthChecks)?void 0:i.length)?o.healthChecks:c?[c]:[],loadBalancerType:a,name:o.name||o.loadBalancerName||n},t);if(null==(l=d.backendServices[0])?void 0:l.healthCheck){const{name:e,selfLink:t}=d.backendServices[0].healthCheck;d.backendServices[0].healthCheck=t?{name:e,selfLink:t}:{name:e}}return Lt(d)}(e.loadBalancer,r,i,null==n?void 0:n.name)),s=function(e,t=ct){const a=Re(null);a.current||(a.current=new it(t));const n=a.current,[r,i]=Ge(n.getState());return Be(()=>{const e=n.subscribe(i);return()=>{e(),n.dispose()}},[n]),Be(()=>{n.load(e)},[e,n]),{...r,refresh:()=>n.load(e)}}(l.credentials,e.readers),c=De.useRef(),d=De.useRef(!1),[u]=De.useState(()=>new f({application:n,title:("edit"===r?"Updating":"Creating")+" your load balancer",onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var a,r,i;t.clearCache("healthChecks");const l=(null==n?void 0:n.loadBalancers)||(null==(a=null==n?void 0:n.getDataSource)?void 0:a.call(n,"loadBalancers")),o=()=>{var t,a;null==(t=c.current)||t.call(c),c.current=void 0,d.current||null==(a=e.closeModal)||a.call(e)};(null==l?void 0:l.onNextRefresh)?(null==(r=c.current)||r.call(c),c.current=void 0,c.current=l.onNextRefresh(o),null==(i=l.refresh)||i.call(l)):o()}}));De.useEffect(()=>()=>{var e;d.current=!0,null==(e=c.current)||e.call(c),c.current=void 0},[]);const m=zt(l),p=u.submitting,h="create"===r?`Create ${i} Load Balancer`:"pipeline"===r?`Configure ${i} Load Balancer`:`Edit ${l.name}`;return De.createElement("div",{className:"modal-content"},De.createElement(y,{monitor:u}),De.createElement(k,{dismiss:e.dismissModal}),De.createElement("div",{className:"modal-header"},De.createElement("h3",null,h)),De.createElement("div",{className:"modal-body"},"loading"===s.status&&De.createElement(E,{size:"large"}),"error"===s.status&&De.createElement("div",{className:"alert alert-danger"},"Unable to load GCE load balancer resources."),De.createElement(Ot,{command:l,data:s.data,disabled:"edit"===r,onChange:o}),!!m.length&&De.createElement("div",{className:"alert alert-danger gce-proxy-validation-errors"},m.map(e=>De.createElement("div",{key:e},e)))),De.createElement("div",{className:"modal-footer"},De.createElement("button",{className:"btn btn-default",disabled:p,onClick:e.dismissModal,type:"button"},"Cancel"),De.createElement(C,{isDisabled:!!m.length||"loading"===s.status||p,isFormSubmit:!1,label:"pipeline"===r?"Done":"edit"===r?"Update":"Create",onClick:()=>function(e,{application:t,closeModal:a,taskMonitor:n}){const r=Zt(e);if("pipeline"===e.mode)return void(null==a||a(r));const i="edit"===e.mode?"Update":"Create";n.submit(()=>S.upsertLoadBalancer(r,t,i,{healthCheck:{}}))}(l,{application:n,closeModal:e.closeModal,taskMonitor:u}),submitting:p})))}const Yt=Object.assign(Wt,{show:e=>b.show(Wt,e,{dialogClassName:"modal-lg"}),supportsPipelineConfig:!0});function Xt(e,t){if(e)return t.find(t=>t.name===e)||{name:e}}function Jt({addresses:e,certificates:t,listener:a,loadBalancerType:n,onChange:r,onRemove:i,subnets:l}){var o,s,c;return De.createElement("fieldset",{className:"gce-http-listener"},De.createElement("legend",null,"Listener"),De.createElement("label",null,"Name",De.createElement("input",{"data-testid":"listener-name",required:!0,type:"text",value:a.name,onChange:e=>r({...a,name:e.target.value})})),De.createElement("label",null,"Protocol",De.createElement("select",{"data-testid":"listener-protocol",value:a.protocol,onChange:e=>{const t=e.target.value;r({...a,..."HTTPS"===t?{portRange:"443"}:{},protocol:t})}},["HTTP","HTTPS"].map(e=>De.createElement("option",{key:e,value:e},e)))),De.createElement("label",null,"Port",De.createElement("input",{"data-testid":"listener-port",disabled:"HTTPS"===a.protocol,required:!0,type:"text",value:a.portRange,onChange:e=>r({...a,portRange:e.target.value})})),"INTERNAL_MANAGED"===n&&De.createElement("label",null,"Subnet",De.createElement("select",{"data-testid":"listener-subnet",required:!0,value:(null==(o=a.subnet)?void 0:o.name)||"",onChange:e=>r({...a,subnet:Xt(e.target.value,l)})},De.createElement("option",{value:""},"Select..."),l.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),De.createElement("label",null,"INTERNAL_MANAGED"===n?"Internal IP":"External IP",De.createElement("select",{"data-testid":"listener-address",value:(null==(s=a.address)?void 0:s.name)||"",onChange:t=>r({...a,address:Xt(t.target.value,e)})},De.createElement("option",{value:""},"Ephemeral"),e.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),"HTTPS"===a.protocol&&De.createElement(De.Fragment,null,De.createElement("label",null,"Certificate",De.createElement("select",{"data-testid":"listener-certificate",value:(null==(c=a.certificate)?void 0:c.name)||"",onChange:e=>r({...a,certificate:Xt(e.target.value,t),certificateMap:void 0})},De.createElement("option",{value:""},"Select..."),t.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),De.createElement("label",null,"Certificate map",De.createElement("input",{"data-testid":"listener-certificate-map",type:"text",value:a.certificateMap||"",onChange:e=>r({...a,certificate:void 0,certificateMap:e.target.value||void 0})}))),De.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:i},"Remove listener"))}function Qt(e){return""===e?void 0:Number(e)}function ea(e,t){if(e)return t.find(t=>t.name===e)||{name:e}}function ta({healthCheck:e,healthChecks:t,onChange:a,onRemove:n}){var r;const i=(t,n)=>a({...e,[t]:Qt(n)});return De.createElement("fieldset",{className:"gce-http-health-check"},De.createElement("legend",null,"Health check"),De.createElement("label",null,"Existing health check",De.createElement("select",{"data-testid":"health-check-reference",value:e.name||"",onChange:n=>{const r=t.find(({name:e})=>e===n.target.value);a(r?{...r}:{...e,name:""})}},De.createElement("option",{value:""},"Create new..."),t.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),De.createElement("label",null,"Protocol",De.createElement("select",{"data-testid":"health-check-protocol",value:e.healthCheckType||"HTTP",onChange:t=>a({...e,healthCheckType:t.target.value})},["HTTP","HTTPS","HTTP2","GRPC","TCP","SSL"].map(e=>De.createElement("option",{key:e,value:e},e)))),De.createElement("label",null,"Name",De.createElement("input",{"data-testid":"health-check-name",required:!0,type:"text",value:e.name||"",onChange:t=>a({...e,name:t.target.value})})),("HTTP"===e.healthCheckType||"HTTPS"===e.healthCheckType||"HTTP2"===e.healthCheckType)&&De.createElement("label",null,"Request path",De.createElement("input",{"data-testid":"health-check-path",required:!0,type:"text",value:e.requestPath||"",onChange:t=>a({...e,requestPath:t.target.value})})),"GRPC"===e.healthCheckType&&De.createElement("label",null,"Service name",De.createElement("input",{"data-testid":"health-check-grpc-service-name",type:"text",value:e.grpcServiceName||"",onChange:t=>a({...e,grpcServiceName:t.target.value})})),De.createElement("label",null,"Port",De.createElement("input",{"data-testid":"health-check-port",max:65535,min:1,required:!0,type:"number",value:null!=(r=e.port)?r:"",onChange:e=>i("port",e.target.value)})),[["timeoutSec","Timeout"],["checkIntervalSec","Interval"],["healthyThreshold","Healthy threshold"],["unhealthyThreshold","Unhealthy threshold"]].map(([t,a])=>{var n;return De.createElement("label",{key:t},a,De.createElement("input",{"data-testid":`health-check-${t}`,min:0,type:"number",value:null!=(n=e[t])?n:"",onChange:e=>i(t,e.target.value)}))}),De.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:n},"Remove health check"))}function aa({backendService:e,backendServices:t,healthChecks:a,loadBalancerType:n,onChange:r,onRemove:i}){var l,o,s;return De.createElement("fieldset",{className:"gce-http-backend-service"},De.createElement("legend",null,"Backend service"),De.createElement("label",null,"Existing backend service",De.createElement("select",{"data-testid":"backend-service-reference",value:e.name,onChange:a=>{const n=t.find(({name:e})=>e===a.target.value);r(n?{...n}:{...e,name:""})}},De.createElement("option",{value:""},"Create new..."),t.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),De.createElement("label",null,"Name",De.createElement("input",{"data-testid":"backend-service-name",required:!0,type:"text",value:e.name,onChange:t=>r({...e,name:t.target.value})})),De.createElement("label",null,"Health check",De.createElement("select",{"data-testid":"backend-service-health-check",required:!0,value:(null==(l=e.healthCheck)?void 0:l.name)||"",onChange:t=>r({...e,healthCheck:ea(t.target.value,a)})},De.createElement("option",{value:""},"Select..."),a.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),De.createElement("label",null,"Session affinity",De.createElement("select",{"data-testid":"backend-service-session-affinity",value:String(e.sessionAffinity||"NONE"),onChange:t=>r({...e,sessionAffinity:t.target.value})},["NONE","CLIENT_IP","GENERATED_COOKIE","HEADER_FIELD","HTTP_COOKIE"].map(e=>De.createElement("option",{key:e,value:e},e)))),De.createElement("label",null,"Port name",De.createElement("input",{"data-testid":"backend-service-port-name",required:!0,type:"text",value:String(e.portName||""),onChange:t=>r({...e,portName:t.target.value})})),De.createElement("label",null,"Connection draining timeout",De.createElement("input",{"data-testid":"backend-service-draining",min:0,type:"number",value:null!=(o=e.connectionDrainingTimeoutSec)?o:"",onChange:t=>r({...e,connectionDrainingTimeoutSec:Qt(t.target.value)})})),"HTTP"===n&&De.createElement("label",null,De.createElement("input",{"data-testid":"backend-service-cdn",checked:Boolean(e.enableCDN),type:"checkbox",onChange:t=>r({...e,enableCDN:t.target.checked})}),"Enable CDN"),"GENERATED_COOKIE"===e.sessionAffinity&&De.createElement("label",null,"Affinity cookie TTL seconds",De.createElement("input",{"data-testid":"backend-service-cookie-ttl",max:86400,min:0,required:!0,type:"number",value:null!=(s=e.affinityCookieTtlSec)?s:"",onChange:t=>r({...e,affinityCookieTtlSec:Qt(t.target.value)})})),De.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:i},"Remove backend service"))}function na(e){return e.split(/[\n,]/).map(e=>e.trim()).filter(Boolean)}function ra(e,t){if(e)return t.find(t=>t.name===e)||{name:e}}function ia({backendServices:e,onChange:t,onRemove:a,pathRule:n}){var r;return De.createElement("fieldset",{className:"gce-http-path-rule"},De.createElement("legend",null,"Path rule"),De.createElement("label",null,"Paths",De.createElement("input",{"data-testid":"path-rule-paths",required:!0,type:"text",value:n.paths.join(", "),onChange:e=>t({...n,paths:na(e.target.value)})})),De.createElement("label",null,"Backend service",De.createElement("select",{"data-testid":"path-rule-backend",required:!0,value:(null==(r=n.backendService)?void 0:r.name)||"",onChange:a=>t({...n,backendService:ra(a.target.value,e)})},De.createElement("option",{value:""},"Select..."),e.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),De.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:a},"Remove path rule"))}function la({backendServices:e,hostRule:t,onChange:a,onRemove:n}){var r;return De.createElement("fieldset",{className:"gce-http-host-rule"},De.createElement("legend",null,"Host rule"),De.createElement("label",null,"Host patterns",De.createElement("input",{"data-testid":"host-rule-patterns",type:"text",value:t.hostPatterns.join(", "),onChange:e=>a({...t,hostPatterns:na(e.target.value)})})),De.createElement("label",null,"Default backend service",De.createElement("select",{"data-testid":"host-rule-default-backend",required:!0,value:(null==(r=t.pathMatcher.defaultService)?void 0:r.name)||"",onChange:n=>a({...t,pathMatcher:{...t.pathMatcher,defaultService:ra(n.target.value,e)}})},e.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),t.pathMatcher.pathRules.map((n,r)=>De.createElement(ia,{backendServices:e,key:r,onChange:e=>a({...t,pathMatcher:{...t.pathMatcher,pathRules:t.pathMatcher.pathRules.map((t,a)=>a===r?e:t)}}),onRemove:()=>a({...t,pathMatcher:{...t.pathMatcher,pathRules:t.pathMatcher.pathRules.filter((e,t)=>t!==r)}}),pathRule:n})),De.createElement("button",{type:"button",className:"add-new btn btn-block","data-testid":"add-path-rule",onClick:()=>a({...t,pathMatcher:{...t.pathMatcher,pathRules:[...t.pathMatcher.pathRules,{paths:[]}]}})},"Add path rule"),De.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:n},"Remove host rule"))}function oa(e,t){const a=e.healthCheck?t.find(({name:t})=>{var a;return t===(null==(a=e.healthCheck)?void 0:a.name)})||e.healthCheck:void 0;return{...e,...a?{healthCheck:{...a}}:{}}}function sa(e,t){return e?t.get(e.name)||{...e}:void 0}function ca(e,{application:t,executeTask:a=N.executeTask}){const n=function(e){const t=ht(e);if("HTTP"!==e.loadBalancerType&&"INTERNAL_MANAGED"!==e.loadBalancerType)return[t];const{backendServices:a,healthChecks:n,hostRules:r,listeners:i,...l}=t,o=new Map(e.backendServices.map(t=>[t.name,oa(t,e.healthChecks)])),s=sa(e.defaultService,o),c=e.hostRules.flatMap(e=>e.hostPatterns.map(t=>({hostPatterns:[t],pathMatcher:{...e.pathMatcher.defaultService?{defaultService:sa(e.pathMatcher.defaultService,o)}:{},pathRules:e.pathMatcher.pathRules.map(e=>({...e.backendService?{backendService:sa(e.backendService,o)}:{},paths:[...e.paths]}))}}))),d=(i||[]).map(t=>{const a=String(t.name);return{...l,certificate:t.certificate||null,...s?{defaultService:s}:{},hostRules:c,ipAddress:t.ipAddress,ipProtocol:"TCP",loadBalancerName:a,name:a,portRange:t.portRange,...t.subnet?{subnet:t.subnet}:{},urlMapName:e.name}});if("edit"===e.mode&&e.original&&d.length){const t=new Set(e.listeners.map(({name:e})=>e)),a=new Map(e.backendServices.map(e=>[e.name,e]));d[0].listenersToDelete=e.original.listeners.map(({name:e})=>e).filter(e=>!t.has(e)),d[0].backendServiceDiff=e.original.backendServices.filter(e=>!ye(e,a.get(e.name))).map(t=>oa(t,e.original.healthChecks))}return d}(e);return"pipeline"===e.mode?"HTTP"===e.loadBalancerType||"INTERNAL_MANAGED"===e.loadBalancerType?n:n[0]:Promise.resolve(a({application:t,description:`${"edit"===e.mode?"Update":"Create"} Load Balancer: ${e.name}`,job:n}))}function da(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))}}function ua({children:e,label:t}){return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-2 sm-label-right"},t),De.createElement("div",{className:"col-md-8"},e))}function ma(e){return e.filter((t,a)=>Boolean(t.name)&&e.findIndex(({name:e})=>e===t.name)===a)}function pa(e){const t=({subnet:e,...t},a)=>{if("HTTPS"===t.protocol)return{...t,portRange:"443",protocol:"HTTPS",...a&&e?{subnet:e}:{}};const{certificate:n,...r}=t;return{...r,protocol:"HTTP",...a&&e?{subnet:e}:{}}};return"INTERNAL_MANAGED"===e.loadBalancerType?{...e,listeners:e.listeners.map(e=>t(e,!0)),region:"global"===e.region?"":e.region}:{...e,listeners:e.listeners.map(e=>t(e,!1)),loadBalancerType:"HTTP",network:void 0,region:"global",subnet:void 0}}function ha(e){var t,a,n;const r=new Set,i="INTERNAL_MANAGED"===e.loadBalancerType;return e.name.trim()||r.add("Name is required."),e.credentials||r.add("Account is required."),i?(e.region&&"global"!==e.region||r.add("Region is required for INTERNAL_MANAGED load balancers."),(null==(t=e.network)?void 0:t.name)||r.add("Network is required for INTERNAL_MANAGED load balancers."),(null==(a=e.subnet)?void 0:a.name)||r.add("Subnet is required for INTERNAL_MANAGED load balancers.")):"global"!==e.region&&r.add("HTTP load balancers must use the global location."),e.listeners.length||r.add("At least one listener is required."),e.listeners.forEach(e=>{var t;e.name.trim()||r.add("Listener name is required."),"HTTP"!==e.protocol&&"HTTPS"!==e.protocol&&r.add("Listener protocol must be HTTP or HTTPS."),ga(e.portRange)||r.add("Listener port must be a single port between 1 and 65535."),"HTTPS"!==e.protocol||(null==(t=e.certificate)?void 0:t.name)||r.add("Certificate is required for HTTPS listeners."),"HTTPS"===e.protocol&&"443"!==e.portRange&&r.add("HTTPS listeners must use port 443.")}),e.backendServices.length||r.add("At least one backend service is required."),e.backendServices.forEach(e=>{var t;e.name.trim()||r.add("Backend service name is required."),(null==(t=e.healthCheck)?void 0:t.name)||r.add("Each backend service requires a health check."),e.portName||r.add("Backend service port name is required."),va(e.connectionDrainingTimeoutSec)&&r.add("Connection draining timeout must be zero or greater."),"GENERATED_COOKIE"!==e.sessionAffinity||function(e,t,a){const n=Number(e);return void 0!==e&&Number.isFinite(n)&&n>=t&&n<=a}(e.affinityCookieTtlSec,0,86400)||r.add("Generated cookie TTL must be between 0 and 86400 seconds.")}),e.healthChecks.forEach(e=>{var t;(null==(t=e.name)?void 0:t.trim())||r.add("Health check name is required."),["HTTP","HTTPS","TCP","SSL"].includes(String(e.healthCheckType))||r.add("Health check protocol must be HTTP, HTTPS, TCP, or SSL."),ga(e.port)||r.add("Health check port must be between 1 and 65535."),"HTTP"!==e.healthCheckType&&"HTTPS"!==e.healthCheckType||e.requestPath||r.add("HTTP and HTTPS health checks require a request path."),va(e.timeoutSec)&&r.add("Health check timeout must be zero or greater."),void 0!==e.checkIntervalSec&&Number(e.checkIntervalSec)<=0&&r.add("Health check interval must be greater than zero."),void 0!==e.healthyThreshold&&Number(e.healthyThreshold)<=0&&r.add("Healthy threshold must be greater than zero."),void 0!==e.unhealthyThreshold&&Number(e.unhealthyThreshold)<=0&&r.add("Unhealthy threshold must be greater than zero.")}),(null==(n=e.defaultService)?void 0:n.name)||r.add("Default backend service is required."),e.hostRules.forEach(e=>{var t;e.hostPatterns.length||r.add("Host rules require at least one host pattern."),(null==(t=e.pathMatcher.defaultService)?void 0:t.name)||r.add("Path matcher default backend service is required."),e.pathMatcher.pathRules.forEach(e=>{var t;e.paths.length||r.add("Path rules require at least one path."),(null==(t=e.backendService)?void 0:t.name)||r.add("Path rules require a backend service.")})}),Array.from(r)}function ga(e){const t=String(null!=e?e:"").trim();if(!/^\d+$/.test(t))return!1;const a=Number(t);return Number.isInteger(a)&&a>=1&&a<=65535}function va(e){return void 0!==e&&Number(e)<0}function ba(e,t){if(e)return t.find(t=>t.name===e)||{name:e}}function fa({command:e,data:t,onChange:a}){var n,r,i;const l=function(e,t){var a,n;const r="INTERNAL_MANAGED"===e.loadBalancerType,i=t=>t.account===e.credentials,l=t=>i(t)&&(r?t.region===e.region:void 0===t.region||"global"===t.region),o=t.networks.filter(i),s=o.find(t=>{var a,n;return t.name===(null==(a=e.network)?void 0:a.name)||t.id===(null==(n=e.network)?void 0:n.name)}),c=(null==(a=e.network)?void 0:a.id)||(null==s?void 0:s.id)||(null==(n=e.network)?void 0:n.name),d=e.hostRules.flatMap(e=>[...e.pathMatcher.defaultService?[e.pathMatcher.defaultService]:[],...e.pathMatcher.pathRules.flatMap(e=>e.backendService?[e.backendService]:[])]),u=e.backendServices.flatMap(e=>e.healthCheck?[e.healthCheck]:[]);return{accounts:lt(t.accounts,e.credentials?[{name:e.credentials}]:[]),addresses:lt(t.addresses.filter(l),ma(e.listeners.flatMap(e=>e.address?[e.address]:[]))),backendServices:lt(t.backendServices.filter(l),ma([...e.backendServices,...e.defaultService?[e.defaultService]:[],...d])),certificates:lt(t.certificates.filter(l),ma(e.listeners.flatMap(e=>e.certificate?[e.certificate]:[]))),healthChecks:lt(t.healthChecks.filter(l),ma([...e.healthChecks,...u])),networks:lt(o,e.network?[e.network]:[]),regions:lt(t.regions,e.region?[{name:e.region}]:[]),subnets:lt(r?t.subnets.filter(t=>i(t)&&t.region===e.region&&t.network===c):[],ma([...e.subnet?[e.subnet]:[],...e.listeners.flatMap(e=>e.subnet?[e.subnet]:[])]))}}(e,t),o="edit"===e.mode,s=t=>{a(pa({...e,...t}))},c=(t,a=e.defaultService)=>{const n=[...a?[a]:[],...t.flatMap(e=>[...e.pathMatcher.defaultService?[e.pathMatcher.defaultService]:[],...e.pathMatcher.pathRules.flatMap(e=>e.backendService?[e.backendService]:[])])],r=[...e.backendServices];n.forEach(e=>{if(!r.some(({name:t})=>t===e.name)){const t=l.backendServices.find(({name:t})=>t===e.name)||e;r.push(t)}});const i=[...e.healthChecks];r.forEach(e=>{if(e.healthCheck&&!i.some(({name:t})=>{var a;return t===(null==(a=e.healthCheck)?void 0:a.name)})){const t=l.healthChecks.find(({name:t})=>{var a;return t===(null==(a=e.healthCheck)?void 0:a.name)});i.push(t||e.healthCheck)}}),s({backendServices:r,defaultService:a,healthChecks:i,hostRules:t})};return De.createElement("div",{className:"gce-http-load-balancer-editor"},De.createElement("section",null,De.createElement("h4",null,"Location"),De.createElement(ua,{label:"Name"},De.createElement("input",{className:"form-control input-sm","data-testid":"load-balancer-name",maxLength:63,required:!0,type:"text",disabled:o,value:e.name,onChange:e=>s({name:e.target.value})})),De.createElement(ua,{label:"Type"},De.createElement("select",{className:"form-control input-sm","data-testid":"load-balancer-type",disabled:o,value:e.loadBalancerType,onChange:e=>s({loadBalancerType:e.target.value})},De.createElement("option",{value:"HTTP"},"HTTP(S)"),De.createElement("option",{value:"INTERNAL_MANAGED"},"Internal managed HTTP"))),De.createElement(ua,{label:"Account"},De.createElement("select",{className:"form-control input-sm","data-testid":"credentials",disabled:o,required:!0,value:e.credentials,onChange:e=>s({credentials:e.target.value})},De.createElement("option",{value:""},"Select..."),l.accounts.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),"INTERNAL_MANAGED"===e.loadBalancerType&&De.createElement(De.Fragment,null,De.createElement(ua,{label:"Region"},De.createElement("select",{className:"form-control input-sm","data-testid":"region",disabled:o,required:!0,value:e.region,onChange:e=>s({region:e.target.value})},De.createElement("option",{value:""},"Select..."),l.regions.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),De.createElement(ua,{label:"Network"},De.createElement("select",{className:"form-control input-sm","data-testid":"network",required:!0,value:(null==(n=e.network)?void 0:n.name)||"",onChange:e=>s({network:ba(e.target.value,l.networks)})},De.createElement("option",{value:""},"Select..."),l.networks.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))),De.createElement(ua,{label:"Subnet"},De.createElement("select",{className:"form-control input-sm","data-testid":"subnet",required:!0,value:(null==(r=e.subnet)?void 0:r.name)||"",onChange:t=>{const a=ba(t.target.value,l.subnets);s({subnet:a,listeners:e.listeners.map(e=>({...e,subnet:a}))})}},De.createElement("option",{value:""},"Select..."),l.subnets.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name)))))),De.createElement("section",null,De.createElement("h4",null,"Listeners"),e.listeners.map((t,n)=>De.createElement(Jt,{addresses:l.addresses,certificates:l.certificates,key:n,listener:t,loadBalancerType:e.loadBalancerType,onChange:t=>((t,n)=>{const r=e.listeners.map((e,a)=>a===t?n:e);a(pa({...e,listeners:r}))})(n,t),onRemove:()=>s({listeners:e.listeners.filter((e,t)=>t!==n)}),subnets:l.subnets})),De.createElement("button",{type:"button",className:"add-new btn btn-block",onClick:()=>s({listeners:[...e.listeners,{name:e.name,portRange:"80",protocol:"HTTP",subnet:"INTERNAL_MANAGED"===e.loadBalancerType?e.subnet:void 0}]})},"Add listener")),De.createElement("section",null,De.createElement("h4",null,"Backend services"),e.backendServices.map((t,a)=>De.createElement(aa,{backendService:t,backendServices:l.backendServices,healthChecks:l.healthChecks,key:a,loadBalancerType:e.loadBalancerType,onChange:t=>((t,a)=>{const n=e.backendServices.map((e,n)=>n===t?a:e),r=a.healthCheck?l.healthChecks.find(({name:e})=>{var t;return e===(null==(t=a.healthCheck)?void 0:t.name)}):void 0,i=r&&!e.healthChecks.some(({name:e})=>e===r.name)?[...e.healthChecks,r]:e.healthChecks;s({backendServices:n,healthChecks:i})})(a,t),onRemove:()=>s({backendServices:e.backendServices.filter((e,t)=>t!==a)})})),De.createElement("button",{type:"button",className:"add-new btn btn-block",onClick:()=>s({backendServices:[...e.backendServices,{name:"",portName:"http",sessionAffinity:"NONE"}]})},"Add backend service")),De.createElement("section",null,De.createElement("h4",null,"Default service"),De.createElement(ua,{label:"Default backend service"},De.createElement("select",{className:"form-control input-sm","data-testid":"default-backend-service",required:!0,value:(null==(i=e.defaultService)?void 0:i.name)||"",onChange:t=>c(e.hostRules,ba(t.target.value,l.backendServices))},De.createElement("option",{value:""},"Select..."),l.backendServices.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name))))),De.createElement("section",null,De.createElement("h4",null,"Host and path rules"),e.hostRules.map((t,a)=>De.createElement(la,{backendServices:l.backendServices,hostRule:t,key:a,onChange:t=>c(e.hostRules.map((e,n)=>n===a?t:e)),onRemove:()=>c(e.hostRules.filter((e,t)=>t!==a))})),De.createElement("button",{type:"button",className:"add-new btn btn-block",onClick:()=>c([...e.hostRules,{hostPatterns:[],pathMatcher:{defaultService:e.defaultService,pathRules:[]}}])},"Add host rule")),De.createElement("section",null,De.createElement("h4",null,"Health checks"),e.healthChecks.map((t,a)=>De.createElement(ta,{healthCheck:t,healthChecks:l.healthChecks,key:a,onChange:t=>s({healthChecks:e.healthChecks.map((e,n)=>n===a?t:e)}),onRemove:()=>s({healthChecks:e.healthChecks.filter((e,t)=>t!==a)})})),De.createElement("button",{type:"button",className:"add-new btn btn-block",onClick:()=>s({healthChecks:[...e.healthChecks,{checkIntervalSec:10,healthCheckType:"HTTP",name:"",port:80,requestPath:"/",timeoutSec:5,healthyThreshold:10,unhealthyThreshold:2}]})},"Add health check")))}da(".gce-http-lb input[type='checkbox'] {\n margin: 10px 0 0 5px;\n position: absolute;\n}\n.gce-http-load-balancer-editor section {\n margin-bottom: 20px;\n}\n.gce-http-load-balancer-editor fieldset {\n border: 0;\n margin: 0 0 15px;\n padding: 0;\n}\n.gce-http-load-balancer-editor fieldset > label {\n align-items: center;\n display: flex;\n font-weight: bold;\n margin-bottom: 10px;\n}\n.gce-http-load-balancer-editor fieldset > label > input,\n.gce-http-load-balancer-editor fieldset > label > select {\n font-weight: normal;\n margin-left: 15px;\n width: 66.6667%;\n}\n.gce-http-load-balancer-editor fieldset > label > input:not([type='checkbox']),\n.gce-http-load-balancer-editor fieldset > label > select {\n display: block;\n height: 30px;\n padding: 5px 10px;\n}\n.gce-http-load-balancer-editor fieldset > label > input[type='checkbox'] {\n margin: 0 8px 0 33.3333%;\n}\n");const ya={accounts:[],addresses:[],backendServices:[],certificates:[],healthChecks:[],networks:[],regions:[],subnets:[]};const ka=class e extends De.Component{constructor(e){super(e),this.updateCommand=e=>{const t=e.credentials!==this.state.command.credentials;this.setState({command:e}),t&&this.dataController&&this.dataController.load(e.credentials)},this.submit=()=>{if(ha(this.state.command).length)return;const e=pa(this.state.command),t={application:this.application(),executeTask:this.props.executeTask};"pipeline"!==e.mode?this.state.taskMonitor.submit(()=>ca(e,t)):this.props.closeModal(ca(e,t))};const t=this.application(e),a=this.mode(e),n=function(e,t,a,n={}){const r=pt({...n,...e,credentials:e.credentials||e.account||n.credentials,loadBalancerType:e.loadBalancerType||n.loadBalancerType||"HTTP",name:e.name||e.loadBalancerName||e.urlMapName||(null==a?void 0:a.name)||""},t);return Array.isArray(e.listeners)&&e.listeners.length>0||void 0!==e.port||void 0!==e.portRange||void 0!==e.ports||(r.listeners=[{name:r.name,portRange:"80",protocol:"HTTP"}]),pa(r)}(e.loadBalancer||{},a,t,{credentials:e.credentials,loadBalancerType:e.loadBalancerType});this.state={command:n,data:e.data||ya,status:e.data?"ready":"idle",taskMonitor:new f({application:t,title:("edit"===a?"Updating":"Creating")+" your load balancer",onDismiss:()=>e.dismissModal(),onTaskComplete:()=>{var a,n;null==(n=null==(a=t.loadBalancers)?void 0:a.refresh)||n.call(a),e.closeModal()}})}}static show(t){return b.show(e,t,{dialogClassName:"wizard-modal modal-lg"})}componentDidMount(){this.props.data||(this.dataController=new it(this.props.dataReaders),this.unsubscribe=this.dataController.subscribe(e=>this.setState(e)),this.dataController.load(this.state.command.credentials))}componentWillUnmount(){var e,t;null==(e=this.unsubscribe)||e.call(this),null==(t=this.dataController)||t.dispose()}application(e=this.props){return e.application||e.app}mode(e=this.props){return e.forPipelineConfig?"pipeline":e.mode?e.mode:!1===e.isNew||e.loadBalancer?"edit":"create"}render(){const{command:e,data:t,status:a,taskMonitor:n}=this.state,r=ha(e),i="create"===e.mode?`Create ${"HTTP"===e.loadBalancerType?"HTTP(S)":"Internal managed HTTP(S)"} load balancer`:`Edit ${e.name}`;return De.createElement("form",{className:"form-horizontal gce-http-lb",name:"form"},De.createElement("div",{className:"modal-header"},De.createElement(k,{dismiss:this.props.dismissModal}),De.createElement("h3",null,i)),De.createElement("div",{className:"modal-body"},De.createElement(y,{monitor:n}),"loading"===a&&De.createElement("div",{className:"horizontal center middle"},"Loading..."),"error"===a&&De.createElement("div",{className:"alert alert-danger"},"Unable to load GCE resources."),De.createElement(fa,{command:e,data:t,onChange:this.updateCommand}),!!r.length&&De.createElement("div",{className:"alert alert-danger gce-http-validation-errors"},r.map(e=>De.createElement("div",{key:e},e)))),De.createElement("div",{className:"modal-footer"},De.createElement("button",{type:"button",className:"btn btn-default",disabled:n.submitting,onClick:this.props.dismissModal},"Cancel"),De.createElement("button",{type:"button",className:"btn btn-primary",disabled:n.submitting||"loading"===a||!!r.length,onClick:this.submit},"pipeline"===e.mode?"Done":"edit"===e.mode?"Update":"Create")))}};ka.supportsPipelineConfig=!0;let Ea=ka;const Ca=["NONE","CLIENT_IP","CLIENT_IP_PROTO"],Sa=["TCP","UDP"];function Na(e){const t=[],a=e.listeners[0],n=e.healthChecks[0];var r;return e.name.trim()||t.push("Name is required."),e.credentials||t.push("Account is required."),e.region||t.push("Region is required."),function(e){const t=String(e||"").match(/^(\d+)(?:-(\d+))?$/);if(!t)return!1;const a=Number(t[1]),n=Number(t[2]||t[1]);return Da(a)&&Da(n)&&a<=n}(null==a?void 0:a.portRange)||t.push("Port range must contain ports between 1 and 65535."),n&&(Da(n.port)||t.push("Health check port must be between 1 and 65535."),n.requestPath||t.push("Health check path is required."),null!=(r=n.timeoutSec)&&Number(r)<0&&t.push("Health check timeout must be zero or greater."),void 0!==n.checkIntervalSec&&Number(n.checkIntervalSec)<=0&&t.push("Health check interval must be greater than zero."),void 0!==n.healthyThreshold&&Number(n.healthyThreshold)<=0&&t.push("Healthy threshold must be greater than zero."),void 0!==n.unhealthyThreshold&&Number(n.unhealthyThreshold)<=0&&t.push("Unhealthy threshold must be greater than zero.")),t}function Ta({command:e,data:t,onChange:a}){var n,r,i;const l=function(e,t){const a=t=>!t.account&&!t.credentials||(t.account||t.credentials)===e.credentials,n=e.listeners[0];return{accounts:lt(t.accounts,e.credentials?[{name:e.credentials}]:[]),addresses:lt(t.addresses.filter(t=>a(t)&&(!t.region||t.region===e.region)),Ma(null==n?void 0:n.address)),networks:lt(t.networks.filter(a),Ma(e.network)),regions:lt(t.regions,e.region?[{name:e.region}]:[])}}(e,t),o=e.listeners[0]||{name:e.name,portRange:"",protocol:"TCP"},s=e.healthChecks[0],c="edit"===e.mode,d=t=>a({...e,...t}),u=e=>d({listeners:[{...o,...e}]}),m=e=>d({healthChecks:[{...s,...e}]});return De.createElement("div",{className:"form-horizontal gce-network-load-balancer-editor"},Aa("Name","name",e.name,t=>d({name:t,listeners:[{...o,name:o.name===e.name?t:o.name}]}),c),Pa("Account","credentials",e.credentials,l.accounts,e=>d({credentials:e}),c),Pa("Region","region",e.region,l.regions,e=>d({region:e}),c),Pa("Network","network",null==(n=e.network)?void 0:n.name,l.networks,e=>d({network:Ia(e,l.networks)}),c),De.createElement("h4",null,"Forwarding Rule"),Pa("IP address","address",null==(r=o.address)?void 0:r.name,l.addresses,e=>u({address:Ia(e,l.addresses)})),Pa("Protocol","protocol",o.protocol,Sa.map(e=>({name:e})),e=>u({protocol:e})),Aa("Port range","portRange",o.portRange,e=>u({portRange:e})),Aa("Target pool","targetPool",(null==(i=e.targetPool)?void 0:i.name)||"",()=>{},!0),Pa("Session affinity","sessionAffinity",e.sessionAffinity,Ca.map(e=>({name:e})),e=>d({sessionAffinity:e}),c),De.createElement("h4",null,"Health Check"),De.createElement("div",{className:"form-group","data-field":"healthCheckEnabled"},De.createElement("div",{className:"col-md-7 col-md-offset-3"},De.createElement("label",null,De.createElement("input",{checked:Boolean(s),onChange:e=>d({healthChecks:e.target.checked?[{checkIntervalSec:10,healthCheckType:"HTTP",healthyThreshold:10,port:80,requestPath:"/",timeoutSec:5,unhealthyThreshold:2}]:[]}),type:"checkbox"})," ","Enable health check"))),s&&De.createElement(De.Fragment,null,wa("Port","healthCheckPort",s.port,e=>m({port:e})),Aa("Request path","requestPath",s.requestPath||"",e=>m({requestPath:e&&!e.startsWith("/")?`/${e}`:e})),wa("Timeout","timeoutSec",s.timeoutSec,e=>m({timeoutSec:e})),wa("Interval","checkIntervalSec",s.checkIntervalSec,e=>m({checkIntervalSec:e})),wa("Healthy threshold","healthyThreshold",s.healthyThreshold,e=>m({healthyThreshold:e})),wa("Unhealthy threshold","unhealthyThreshold",s.unhealthyThreshold,e=>m({unhealthyThreshold:e}))))}function Aa(e,t,a,n,r=!1){return De.createElement("div",{className:"form-group","data-field":t},De.createElement("label",{className:"col-md-3 sm-label-right"},e),De.createElement("div",{className:"col-md-7"},De.createElement("input",{className:"form-control input-sm",disabled:r,onChange:e=>n(e.target.value),value:a||""})))}function wa(e,t,a,n){return De.createElement("div",{className:"form-group","data-field":t},De.createElement("label",{className:"col-md-3 sm-label-right"},e),De.createElement("div",{className:"col-md-7"},De.createElement("input",{className:"form-control input-sm",onChange:e=>n(""===e.target.value?void 0:Number(e.target.value)),type:"number",value:null==a?"":String(a)})))}function Pa(e,t,a,n,r,i=!1){return De.createElement("div",{className:"form-group","data-field":t},De.createElement("label",{className:"col-md-3 sm-label-right"},e),De.createElement("div",{className:"col-md-7"},De.createElement("select",{className:"form-control input-sm",disabled:i,onChange:e=>r(e.target.value),value:a||""},De.createElement("option",{value:""},"Select..."),n.map(({name:e})=>De.createElement("option",{key:e,value:e},e)))))}function Ia(e,t){return e?t.find(t=>t.name===e)||{name:e}:void 0}function Ma(e){return(null==e?void 0:e.name)?[e]:[]}function Da(e){const t=Number(e);return Number.isInteger(t)&&t>=1&&t<=65535}const Ga=ke(h.providers.gce||{},{defaults:{},feature:{},resetToOriginal:h.resetProvider("gce")}),xa={accounts:[],addresses:[],backendServices:[],certificates:[],healthChecks:[],networks:[],regions:[],subnets:[]},Ra=["NONE","CLIENT_IP","CLIENT_IP_PROTO"];function Ba(e,{application:t,executeTask:a=N.executeTask}){const n=function(e){const t=ht(e);return delete t.healthChecks,delete t.listeners,delete t.network,delete t.targetPool,delete t.mode,{...t,healthCheck:Ua(e.healthChecks[0]),sessionAffinity:e.sessionAffinity}}(e);return"pipeline"===e.mode?n:Promise.resolve(a({application:t,description:`${"edit"===e.mode?"Update":"Create"} Load Balancer: ${e.name}`,job:[n]}))}class Fa extends De.Component{constructor(e){super(e),this.updateCommand=e=>{var t;const a=e.credentials!==this.state.command.credentials;this.setState({command:e}),a&&(null==(t=this.dataController)||t.load(e.credentials))},this.submit=()=>{var e,t;"pipeline"!==this.state.command.mode?this.state.taskMonitor.submit(()=>Ba(this.state.command,{application:this.application(),executeTask:this.props.executeTask})):null==(t=(e=this.props).closeModal)||t.call(e,Ba(this.state.command,{application:this.application(),executeTask:this.props.executeTask}))};const a=this.application(e),n=this.mode(e),r=function(e={},t,a="",n={}){var r,i,l;const o=e||{},s=o.elb&&"object"==typeof o.elb?o.elb:{},c=(null==(i=null==(r=s.listenerDescriptions)?void 0:r[0])?void 0:i.listener)||{},d={...s,...o,healthCheck:void 0!==o.healthCheck?o.healthCheck:s.healthCheck,ipAddress:void 0!==o.ipAddress?o.ipAddress:s.ipAddress,ipProtocol:void 0!==o.ipProtocol?o.ipProtocol:s.ipProtocol||c.protocol,portRange:void 0!==o.portRange?o.portRange:s.portRange||c.loadBalancerPort,sessionAffinity:void 0!==o.sessionAffinity?o.sessionAffinity:s.sessionAffinity,targetPool:void 0!==o.targetPool?o.targetPool:s.targetPool},u=Object.prototype.hasOwnProperty.call(o,"healthCheck")||Object.prototype.hasOwnProperty.call(s,"healthCheck")||d.healthChecks,m=(null==(l=d.healthChecks)?void 0:l.length)?d.healthChecks:d.healthCheck?[za(d.healthCheck)]:[],p=pt({...n,...d,credentials:d.credentials||d.account||n.credentials,healthChecks:m,ipAddress:Oa(d.ipAddress),loadBalancerType:"NETWORK",name:d.name||d.loadBalancerName||a,network:Oa(d.network),region:d.region||n.region},t);return Array.isArray(d.listeners)&&d.listeners.length>0||void 0!==d.ipAddress||void 0!==d.ipProtocol||void 0!==d.portRange||void 0!==d.ports||(p.listeners=[{name:p.name,portRange:"8080",protocol:"TCP"}]),"create"!==t||u||(p.healthChecks=[{checkIntervalSec:10,healthCheckType:"HTTP",healthyThreshold:10,port:80,requestPath:"/",timeoutSec:5,unhealthyThreshold:2}]),{...p,loadBalancerType:"NETWORK",sessionAffinity:Ha(d.sessionAffinity),targetPool:Oa(d.targetPool)}}(e.loadBalancer,n,null==a?void 0:a.name,{credentials:e.credentials||Ga.defaults.account,region:Ga.defaults.region});this.state={command:r,data:e.data||xa,status:e.data?"ready":"idle",taskMonitor:new f({application:a,title:("edit"===n?"Updating":"Creating")+" your load balancer",onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var n,r,i;t.clearCache("healthChecks"),null==(r=null==(n=null==a?void 0:a.loadBalancers)?void 0:n.refresh)||r.call(n),null==(i=e.closeModal)||i.call(e)}})}}componentDidMount(){this.props.data||(this.dataController=new it(this.props.dataReaders),this.unsubscribe=this.dataController.subscribe(e=>this.setState(e)),this.dataController.load(this.state.command.credentials))}componentWillUnmount(){var e,t;null==(e=this.unsubscribe)||e.call(this),null==(t=this.dataController)||t.dispose()}render(){const{command:e,data:t,status:a,taskMonitor:n}=this.state,r=Na(e),i="create"===e.mode?"Create Network Load Balancer":"pipeline"===e.mode?"Configure Network Load Balancer":`Edit ${e.name}`;return De.createElement("div",{className:"modal-content"},De.createElement(y,{monitor:n}),De.createElement(k,{dismiss:this.props.dismissModal}),De.createElement("div",{className:"modal-header"},De.createElement("h3",null,i)),De.createElement("div",{className:"modal-body"},"loading"===a&&De.createElement("div",{className:"horizontal center middle"},"Loading..."),"error"===a&&De.createElement("div",{className:"alert alert-danger"},"Unable to load GCE resources."),De.createElement(Ta,{command:e,data:t,onChange:this.updateCommand}),!!r.length&&De.createElement("div",{className:"alert alert-danger gce-network-validation-errors"},r.map(e=>De.createElement("div",{key:e},e)))),De.createElement("div",{className:"modal-footer"},De.createElement("button",{className:"btn btn-default",disabled:n.submitting,onClick:this.props.dismissModal,type:"button"},"Cancel"),De.createElement(C,{isDisabled:!!r.length||"loading"===a||n.submitting,isFormSubmit:!1,label:"pipeline"===e.mode?"Done":"edit"===e.mode?"Update":"Create",onClick:this.submit,submitting:n.submitting})))}application(e=this.props){return e.application||e.app}mode(e=this.props){return e.forPipelineConfig?"pipeline":e.mode?e.mode:!1===e.isNew||e.loadBalancer?"edit":"create"}}const La=Object.assign(Fa,{show:e=>b.show(Fa,e,{dialogClassName:"modal-lg"}),supportsPipelineConfig:!0});function za(e){if(e&&"object"==typeof e)return e;return Oa(e)||{}}function Oa(e){if(!e)return;if("object"==typeof e){const t=e,a=String(t.selfLink||""),n=String(t.name||t.id||a.split("/").filter(Boolean).pop()||"");return n?{...t,name:n}:void 0}const t=String(e),a=t.split("/").filter(Boolean).pop()||t;return t.includes("/")?{name:a,selfLink:t}:{name:a}}function Ha(e){const t=String(e||"NONE").toUpperCase();return Ra.includes(t)?t:"NONE"}function Ua(e){return e?{checkIntervalSec:$a(e.checkIntervalSec),healthyThreshold:$a(e.healthyThreshold),port:$a(e.port),requestPath:e.requestPath,timeoutSec:$a(e.timeoutSec),unhealthyThreshold:$a(e.unhealthyThreshold)}:null}function $a(e){return null==e||""===e?void 0:Number(e)}da(".gce-load-balancer-choice-modal .card-choices .gce-load-balancer-choice-card {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background: none;\n color: inherit;\n font: inherit;\n text-align: initial;\n}\n.gce-load-balancer-choice-modal .card-choices .gce-load-balancer-choice-card:focus {\n outline: 2px solid var(--color-accent);\n outline-offset: 2px;\n}\n.gce-load-balancer-choice-modal .card-choices .gce-load-balancer-choice-card:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n");const qa=[{type:"NETWORK",label:"Network",description:"Regional pass-through network load balancer."},{type:"INTERNAL",label:"Internal",description:"Regional internal pass-through load balancer."},{type:"TCP",label:"TCP",description:"Global external TCP proxy load balancer."},{type:"SSL",label:"SSL",description:"Global external SSL proxy load balancer."},{type:"HTTP",label:"HTTP(S)",description:"Global external HTTP(S) load balancer."},{type:"INTERNAL_MANAGED",label:"Internal HTTP(S)",description:"Regional internal managed HTTP(S) load balancer."}];function _a(e){return"NETWORK"===e?La:"HTTP"===e||"INTERNAL_MANAGED"===e?Ea:Yt}const ja=class e extends De.Component{constructor(){super(...arguments),this.state={selectedChoice:Za(this.props)?null:qa[0]},this.choiceSelected=e=>{Za(this.props)||this.setState({selectedChoice:e})},this.choose=()=>{var e,t;const{selectedChoice:a}=this.state;if(!a||Za(this.props))return;const{type:n}=a,r=this.props.forPipelineConfig?"pipeline":"create",i=_a(n).show(Wa(this.props,n,r));null==(t=(e=this.props).closeModal)||t.call(e,i)}}static show(t){if(!1===t.isNew&&t.loadBalancer){const e=Ka(t.loadBalancer.loadBalancerType);if(e){const a=t.forPipelineConfig?"pipeline":"edit";return _a(e).show(Wa(t,e,a))}}return b.show(e,t,{dialogClassName:"create-pipeline-modal-overflow-visible modal-lg"})}render(){var e;const{selectedChoice:t}=this.state,a=Za(this.props),n=null==(e=this.props.loadBalancer)?void 0:e.loadBalancerType,r="string"==typeof n&&n?`"${n}"`:"missing";return De.createElement("div",{className:"gce-load-balancer-choice-modal"},De.createElement(k,{dismiss:this.props.dismissModal}),De.createElement("div",{className:"modal-header"},De.createElement("h4",{className:"modal-title"},"Select Type of Load Balancer")),De.createElement("div",{className:"modal-body"},a&&De.createElement("div",{className:"alert alert-danger",role:"alert"},"This load balancer cannot be edited because its persisted load balancer type is ",r," and unsupported. No changes can be submitted."),De.createElement("div",{className:"card-choices"},qa.map(e=>De.createElement("button",{"aria-pressed":t===e,className:"card gce-load-balancer-choice-card "+(t===e?"active":""),disabled:a,key:e.type,onClick:()=>this.choiceSelected(e),type:"button"},De.createElement("h3",{className:"load-balancer-label"},e.label),De.createElement("div",null,e.description))))),De.createElement("div",{className:"modal-footer"},De.createElement("button",{className:"btn btn-primary",disabled:a,onClick:this.choose,type:"button"},"Configure Load Balancer ",De.createElement("span",{className:"glyphicon glyphicon-chevron-right"}))))}};ja.defaultProps={closeModal:T,dismissModal:T},ja.supportsPipelineConfig=!0;let Va=ja;function Ka(e){var t;return null==(t=qa.find(t=>t.type===e))?void 0:t.type}function Za(e){var t;return!1===e.isNew&&!Ka(null==(t=e.loadBalancer)?void 0:t.loadBalancerType)}function Wa(e,t,a){const n=e.application||e.app;return{...e,app:n,application:n,forPipelineConfig:"pipeline"===a,isNew:"create"===a,loadBalancer:e.loadBalancer||null,loadBalancerType:t,mode:a}}class Ya{isHttpLoadBalancer(e){const t=e;return!("gce"!==t.provider&&"gce"!==t.type||"HTTP"!==t.loadBalancerType&&"INTERNAL_MANAGED"!==t.loadBalancerType)}normalizeLoadBalancerNamesForAccount(e,t,a){const n=[];return e.forEach(e=>{const r=a.find(a=>t===a.account&&this.isHttpLoadBalancer(a)&&a.listeners.map(e=>e.name).includes(e));r?n.push(r.name):n.push(e)}),Ee(n)}}Ya.REGION="global";const Xa=new Ya;function Ja(e,t){const a=new Set;return e.filter(e=>{const n=t(e);return!a.has(n)&&(a.add(n),!0)})}function Qa(e){var t,a,n;return"443"===(null==(n=null==(a=null==(t=null==e?void 0:e.listenerDescriptions)?void 0:t[0])?void 0:a.listener)?void 0:n.loadBalancerPort)?"https:":"http:"}async function en({accountService:e=p,app:t,autoClose:a,loadBalancers:n,loadBalancerParams:r,loadBalancerReader:i}){var l;const o=function(e,t){return(e||[]).find(e=>e.name===t.name&&e.account===t.accountId&&(e.region===t.region||"global"===e.region)&&function(e,t){return(e.vpcId||e.vpcid||null)===(t.vpcId||null)}(e,t))}(n||(null==(l=null==t?void 0:t.loadBalancers)?void 0:l.data)||[],r);if(!o)return void a();const s=await async function(e,t,a){const n=e.provider||e.cloudProvider||e.type||t.provider,r=e.region||t.region;if(Xa.isHttpLoadBalancer(e)){const i=await Promise.all((e.listeners||[]).map(e=>a.getLoadBalancerDetails(n,t.accountId,r,e.name||e))),l=[].concat(...i),o=l[0];return o?(o.dns=Ja(l.map(e=>({dnsname:e.dnsname,protocol:Qa(e)})).filter(e=>e.dnsname),e=>e.dnsname),o.listenerDescriptions=[].concat(...l.map(e=>e.listenerDescriptions||[])),[o]):[]}const i=await a.getLoadBalancerDetails(n,t.accountId,r,e.name);return i[0]&&(i[0].dns={dnsname:i[0].dnsname,protocol:Qa(i[0])}),i}(o,r,i),c=s.filter(e=>(e.vpcid||null)===(r.vpcId||null));c.length&&(o.elb=c[0],o.account=r.accountId,Xa.isHttpLoadBalancer(o)&&(o.elb.backendServices=function(e){let t=[e.defaultService].filter(Boolean);return(e.hostRules||[]).length&&(e.hostRules||[]).forEach(e=>{var a,n;(null==(a=e.pathMatcher)?void 0:a.defaultService)&&t.push(e.pathMatcher.defaultService),t=t.concat(((null==(n=e.pathMatcher)?void 0:n.pathRules)||[]).map(e=>e.backendService).filter(Boolean))}),Ja(t,e=>e.name||e.selfLink||"")}(o),o.elb.healthChecks=Ja(o.elb.backendServices.map(e=>e.healthCheck).filter(Boolean),e=>e.name||e.selfLink||"")));const d=await e.getAccountDetails(r.accountId);return(null==d?void 0:d.project)&&(o.project=d.project,o.logsLink=function(e,t){return`https://console.developers.google.com/project/${e}/logs?advancedFilter=resource.type=(${function(e){switch(e){case"INTERNAL":case"SSL":case"TCP":return["gce_forwarding_rule","gce_backend_service"];case"NETWORK":return["gce_forwarding_rule","gce_target_pool","gce_health_check"];default:return["http_load_balancer","gce_target_http_proxy","gce_url_map","gce_backend_service"]}}(t.loadBalancerType).join(" OR ")})%0A"${t.name}"`}(d.project,o)),o}function tn({app:e,autoClose:t,loadBalancerParams:a}){const{loadBalancerReader:n}=A(),r=e.getDataSource("loadBalancers"),{data:i,loaded:l,refresh:o,error:s}=w(r),[c,d]=Ge(),[u,m]=Ge(!1),[p,h]=Ge(null),g=Fe(async()=>{if(l&&!s){m(!0),h(null);try{d(await en({app:e,autoClose:t,loadBalancers:i,loadBalancerParams:a,loadBalancerReader:n}))}catch(e){h((null==e?void 0:e.message)||String(e))}finally{m(!1)}}},[e,t,s,n,i,a,l]);return Be(()=>{g()},[g]),{data:c,error:s||p,loading:!l||u,refetch:async()=>{o()}}}function an(e,a,n={}){if(Xa.isHttpLoadBalancer(e))return function(e,a,n={}){var r,i;const l=e.region||"global",o={cloudProvider:e.provider||"gce",credentials:e.account,loadBalancerName:(null==(i=null==(r=e.listeners)?void 0:r[0])?void 0:i.name)||e.name,loadBalancerType:e.loadBalancerType,region:l,regions:[l],type:"deleteLoadBalancer",...n};return t.clearCache("backendServices"),t.clearCache("healthChecks"),N.executeTask({application:a,description:`Delete load balancer: ${e.urlMapName||e.name} in ${e.account}:global`,job:[o]})}(e,a,n);const r=e.region||"global";return S.deleteLoadBalancer({accountName:e.account,cloudProvider:"gce",credentials:e.account,deleteHealthChecks:!1,loadBalancerName:e.name,loadBalancerType:e.loadBalancerType||"NETWORK",region:r,regions:[r],vpcId:e.vpcId,...n},a)}function nn({deleteParams:e,loadBalancer:t}){return Xa.isHttpLoadBalancer(t)||!!t.healthCheck?De.createElement("label",{className:"checkbox-inline"},De.createElement("input",{type:"checkbox",onChange:t=>{e.deleteHealthChecks=t.currentTarget.checked}}),"Delete associated health checks"):null}function rn({app:e,loadBalancer:t}){if(P.isDisabled("gce"))return null;const a=(t.instances||[]).length>0;return De.createElement("div",{className:"dropdown",id:"gce-load-balancer-actions-dropdown"},De.createElement("button",{className:"btn btn-sm btn-primary dropdown-toggle","data-toggle":"dropdown",type:"button"},"Load Balancer Actions"),De.createElement("ul",{className:"dropdown-menu"},De.createElement(I,{application:e,resource:t,onClick:()=>{Va.show({app:e,application:e,forPipelineConfig:!1,isNew:!1,loadBalancer:t,mode:"edit"})}},"Edit Load Balancer"),!a&&De.createElement(I,{application:e,resource:t,onClick:()=>{const a={deleteHealthChecks:!1};u.confirm({account:t.account,bodyContent:De.createElement(nn,{deleteParams:a,loadBalancer:t}),buttonText:`Delete ${t.name}`,header:`Really delete ${t.name}?`,submitMethod:(n={})=>an(t,e,{deleteHealthChecks:a.deleteHealthChecks,...n}),taskMonitorConfig:{application:e,title:`Deleting ${t.name}`}})}},"Delete Load Balancer"),a&&De.createElement("li",{className:"disabled",title:"You must detach all instances before deleting this load balancer."},De.createElement("a",null,"Delete Load Balancer"))))}const ln=[function({loadBalancer:e}){var t;return De.createElement(c,{heading:"Load Balancer Information",defaultExpanded:!0},De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Account"),De.createElement("dd",null,De.createElement(d,{account:e.account})),De.createElement("dt",null,"Region"),De.createElement("dd",null,e.region||"global"),De.createElement("dt",null,"Type"),De.createElement("dd",null,e.loadBalancerType||e.providerType||"-"),e.project&&De.createElement(De.Fragment,null,De.createElement("dt",null,"Project"),De.createElement("dd",null,e.project)),(null==(t=e.elb)?void 0:t.dns)&&De.createElement(De.Fragment,null,De.createElement("dt",null,"DNS"),De.createElement("dd",null,Array.isArray(e.elb.dns)?e.elb.dns.map(e=>`${e.protocol}//${e.dnsname}`).join(", "):`${e.elb.dns.protocol}//${e.elb.dns.dnsname}`))))},function({loadBalancer:e}){return De.createElement(c,{heading:"Listeners",defaultExpanded:!0},(e.listeners||[]).length?De.createElement("ul",null,e.listeners.map((e,t)=>De.createElement("li",{key:t},[e.protocol,e.port||e.portRange].filter(Boolean).join(":")))):De.createElement("span",null,"No listeners configured"))},function({loadBalancer:e}){var t,a;const n=(null==(t=e.elb)?void 0:t.backendServices)||[],r=(null==(a=e.elb)?void 0:a.healthChecks)||[];return n.length||r.length?De.createElement(c,{heading:"Backend Services",defaultExpanded:!0},n.length>0&&De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Services"),De.createElement("dd",null,n.map(e=>e.name).join(", "))),r.length>0&&De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Health Checks"),De.createElement("dd",null,r.map(e=>e.name).join(", ")))):null},function({loadBalancer:e}){return De.createElement(c,{heading:"Logs",defaultExpanded:!1},e.logsLink?De.createElement("a",{href:e.logsLink,target:"_blank",rel:"noopener noreferrer"},"View Google Cloud logs"):De.createElement("span",null,"No log link available"))}];class on{constructor(){this.gceHttpLoadBalancerUtils=new Ya,this.normalizeLoadBalancerSet=e=>{const[t,a]=Ce(e,e=>this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(e)),n=Se(t,"urlMapName");return Ne(n,on.normalizeHttpLoadBalancerGroup).concat(a)}}static normalizeHttpLoadBalancerGroup(e){const t=Te(e[0]);return t.listeners=e.map(e=>({port:e.portRange?on.parsePortRange(e.portRange):null,name:e.name,certificate:e.certificate,certificateMap:e.certificateMap,ipAddress:e.ipAddress,subnet:e.subnet})),t.name=t.urlMapName,delete t.subnet,t}static parsePortRange(e){return e.split("-")[0]}}class sn{constructor(e){function t(e){const t=e.instances,a=e.serverGroups||[e];e.instanceCounts={up:t.filter(e=>"InService"===e.health[0].state).length,down:t.filter(e=>"OutOfService"===e.health[0].state).length,outOfService:a.reduce((e,t)=>t.instances.filter(e=>"OutOfService"===e.healthState).length+e,0)}}return{normalizeLoadBalancer:function(a){a.serverGroups.forEach(function(e){e.account=a.account,e.detachedInstances?(e.detachedInstances=e.detachedInstances.map(function(e){return{id:e}}),e.instances=e.instances.concat(e.detachedInstances)):e.detachedInstances=[],e.instances.forEach(function(e){!function(e,t){e.health=e.health||{},e.provider=t.type,e.account=t.account,e.region=t.region,e.health.type="LoadBalancer",e.healthState=e.health.state?"InService"===e.health.state?"Up":"Down":"OutOfService",e.health=[e.health],e.loadBalancers=[t.name]}(e,a)}),t(e)});const n=ve.filter(a.serverGroups,{isDisabled:!1});return a.provider=a.type,a.instances=ve.chain(n).map("instances").flatten().value(),a.detachedInstances=ve.chain(n).map("detachedInstances").flatten().value(),ve.get(a,"backendService.healthCheck")&&(a.backendService.healthCheck.timeout=a.backendService.healthCheck.timeoutSec,a.backendService.healthCheck.interval=a.backendService.healthCheck.checkIntervalSec),t(a),e.resolve(a)},convertLoadBalancerForEditing:function(e){const t={provider:"gce",region:e.region,credentials:e.account,listeners:[],name:e.name,regionZones:e.availabilityZones};if(e.elb){const a=e.elb;if(t.vpcId=a.vpcid,a.listenerDescriptions&&(t.listeners=a.listenerDescriptions.map(function(e){const t=e.listener;return{protocol:t.protocol,portRange:t.loadBalancerPort,healthCheck:void 0!==a.healthCheck}})),a.healthCheck&&a.healthCheck.target){t.healthTimeout=a.healthCheck.timeout,t.healthInterval=a.healthCheck.interval,t.healthyThreshold=a.healthCheck.healthyThreshold,t.unhealthyThreshold=a.healthCheck.unhealthyThreshold;const n=e.elb.healthCheck.target,r=n.indexOf(":"),i=n.indexOf("/");-1!==r&&-1!==i&&(t.healthCheckProtocol=n.substring(0,r),t.healthCheckPort=n.substring(r+1,i),t.healthCheckPath=n.substring(i),isNaN(t.healthCheckPort)||(t.healthCheckPort=Number(t.healthCheckPort)))}else t.healthCheckProtocol="HTTP",t.healthCheckPort=80,t.healthCheckPath="/",t.healthTimeout=5,t.healthInterval=10,t.healthyThreshold=10,t.unhealthyThreshold=2;t.sessionAffinity=e.sessionAffinity||"None"}return t},constructNewLoadBalancerTemplate:function(){return{provider:"gce",stack:"",detail:"",credentials:Ga.defaults.account,region:Ga.defaults.region,healthCheckProtocol:"HTTP",healthCheckPort:80,healthCheckPath:"/",healthTimeout:5,healthInterval:10,healthyThreshold:10,unhealthyThreshold:2,sessionAffinity:"NONE",regionZones:[],listeners:[{protocol:"TCP",portRange:"8080",healthCheck:!0}]}}}}}var cn=Object.defineProperty,dn=(e,t,a)=>((e,t,a)=>t in e?cn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,t+"",a);const un=De.createElement;function mn(e,t,a){t({...e,...a})}function pn(e){return!!(e.templateFileName||e.extendedAttributes&&Object.keys(e.extendedAttributes).length||e.varFileName||e.baseAmi||e.accountName)}class hn extends De.Component{constructor(){super(...arguments),dn(this,"state",{baseLabelOptions:[],baseOsOptions:[],roscoMode:!1,showAdvancedOptions:pn(this.props.stage)})}componentDidMount(){const{stage:e,updateStage:t}=this.props;e.extendedAttributes=e.extendedAttributes||{},e.region="global",e.cloudProvider=e.cloudProvider||"gce",e.user=e.user||M.getAuthenticatedUser().name,Promise.all([D.getBaseOsOptions("gce"),D.getBaseLabelOptions()]).then(([a,n])=>{const r=(null==a?void 0:a.baseImages)||[],i={};!e.baseOs&&r.length&&(i.baseOs=r[0].id),!e.baseLabel&&(null==n?void 0:n.length)&&(i.baseLabel=n[0]),Object.keys(i).length&&t({...e,...i}),this.setState({baseLabelOptions:n||[],baseOsOptions:r,roscoMode:h.feature.roscoMode||"function"==typeof h.feature.roscoSelector&&h.feature.roscoSelector(e),showAdvancedOptions:pn({...e,...i})})})}renderArtifactSelector(){const{pipeline:e,stage:t,updateStage:a}=this.props,n=G.getExpectedArtifactsAvailableToStage(t,e),r=t.packageArtifactIds||[];return un(x,{label:"Package Artifacts"},un("select",{className:"form-control input-sm",multiple:!0,value:r,onChange:e=>{const n=Array.from(e.target.selectedOptions).map(e=>e.value);mn(t,a,{packageArtifactIds:n})}},n.map(e=>un("option",{key:e.id,value:e.id},e.displayName||e.id))))}renderAdvancedOptions(){const{stage:e,updateStage:t}=this.props;return this.state.showAdvancedOptions?un(De.Fragment,null,un(x,{label:"Template File Name"},un("input",{className:"form-control input-sm",value:e.templateFileName||"",onChange:a=>mn(e,t,{templateFileName:a.target.value})})),un(x,{label:"Account Name"},un("input",{className:"form-control input-sm",value:e.accountName||"",onChange:a=>mn(e,t,{accountName:a.target.value})})),un(x,{label:"Extended Attributes"},un(R,{allowEmpty:!0,model:e.extendedAttributes||{},onChange:a=>mn(e,t,{extendedAttributes:a})})),un(x,{label:"Var File Name"},un("input",{className:"form-control input-sm",value:e.varFileName||"",onChange:a=>mn(e,t,{varFileName:a.target.value})})),un(x,{label:"Base Image"},un("input",{className:"form-control input-sm",value:e.baseAmi||"",onChange:a=>mn(e,t,{baseAmi:a.target.value})}))):null}render(){const{stage:e,updateStage:t}=this.props;return e.extendedAttributes=e.extendedAttributes||{},e.region="global",e.cloudProvider=e.cloudProvider||"gce",e.user=e.user||M.getAuthenticatedUser().name,un("div",null,un(x,{label:"Package"},un("input",{className:"form-control input-sm",value:e.package||"",onChange:a=>mn(e,t,{package:a.target.value})})),this.renderArtifactSelector(),un("hr"),un(x,{label:"Base OS"},un("select",{className:"form-control input-sm",value:e.baseOs||"",onChange:a=>mn(e,t,{baseOs:a.target.value})},this.state.baseOsOptions.map(e=>un("option",{key:e.id,value:e.id},e.displayName||e.shortDescription||e.id)))),un(x,{label:"Base Label"},this.state.baseLabelOptions.map(a=>un("label",{className:"radio-inline",key:a},un("input",{checked:e.baseLabel===a,type:"radio",onChange:()=>mn(e,t,{baseLabel:a})}),` ${a}`))),un("hr"),(this.state.roscoMode||e.rebake)&&un(x,{label:"Rebake"},un("div",{className:"checkbox",style:{marginBottom:0}},un("label",null,un("input",{checked:!!e.rebake,type:"checkbox",onChange:a=>mn(e,t,{rebake:a.target.checked})})," Rebake image without regard to the status of any existing bake"))),un("div",{className:"form-group"},un("div",{className:"col-md-9 col-md-offset-1"},un("div",{className:"checkbox"},un("label",null,un("input",{checked:this.state.showAdvancedOptions,type:"checkbox",onChange:e=>this.setState({showAdvancedOptions:e.target.checked})}),un("strong",null," Show Advanced Options"))))),this.renderAdvancedOptions())}}function gn(e){const t=e.context||{},a=((h.feature.roscoMode||"function"==typeof h.feature.roscoSelector&&h.feature.roscoSelector(t))&&h.roscoDetailUrl?h.roscoDetailUrl:h.bakeryDetailUrl)||"",n={context:t};return a.replace(/\{\{\s*([^}]+?)\s*\}\}/g,(e,t)=>function(e,t){const a=t.split(".").reduce((e,t)=>null==e?void 0:e[t],e);return null==a?"":String(a)}(n,t))}function vn(e){var t,a,n,r;const{current:i,execution:l,stage:o}=e,s=o.context||{},c=h.feature.roscoMode||"function"==typeof h.feature.roscoSelector&&h.feature.roscoSelector(s),d=gn(o);return un(H,{name:e.name,current:i},un("div",{className:"row"},un("div",{className:"col-md-6"},un("dl",{className:"dl-narrow dl-horizontal"},un("dt",null,"Image"),un("dd",null,s.ami),un("dt",null,"Region"),un("dd",null,s.region),un("dt",null,"Package"),un("dd",null,s.package))),un("div",{className:"col-md-6"},un("dl",{className:"dl-narrow dl-horizontal"},un("dt",null,"Base OS"),un("dd",null,s.baseOs),un("dt",null,"Label"),un("dd",null,s.baseLabel),(c||(null==(t=l.trigger)?void 0:t.rebake)||s.rebake)&&un("dt",null,"Rebake"),(c||(null==(a=l.trigger)?void 0:a.rebake)||s.rebake)&&un("dd",null,String((null==(n=l.trigger)?void 0:n.rebake)||s.rebake||!1)),s.templateFileName&&un("dt",null,"Template"),s.templateFileName&&un("dd",null,s.templateFileName),s.accountName&&un("dt",null,"Account Name"),s.accountName&&un("dd",null,s.accountName),s.varFileName&&un("dt",null,"Var File"),s.varFileName&&un("dd",null,s.varFileName)))),un(U,{stage:o,message:o.failureMessage}),s.region&&(null==(r=s.status)?void 0:r.resourceId)&&un("div",{className:"row"},un("div",{className:"col-md-12"},un("div",{className:"alert alert-"+(o.isFailed?"danger":"info")},s.previouslyBaked&&un("div",null,"No changes detected; reused existing bake"),d&&un("a",{target:"_blank",rel:"noopener noreferrer",href:d},"View Bakery Details"),s.imageName&&un("div",null,un("strong",null,"Image:"),un("div",{className:"break-word"},s.imageName))))))}function bn(){B.pipeline.registerStage({provides:"bake",cloudProvider:"gce",label:"Bake",description:"Bakes an image",component:hn,executionDetailsSections:[vn,L,z],executionLabelComponent:F,extraLabelLines:e=>e.masterStage.context.allPreviouslyBaked||e.masterStage.context.somePreviouslyBaked?1:0,producesArtifacts:!0,supportsCustomTimeout:!0,validators:[{type:"anyFieldRequired",fields:[{fieldName:"package",fieldLabel:"Package"},{fieldName:"packageArtifactIds",fieldLabel:"Package Artifacts"}]}],restartable:!0,artifactExtractor:G.accumulateArtifacts(["packageArtifactIds"]),artifactRemover:O.removeArtifactFromFields(["packageArtifactIds"])})}vn.title="bakeConfig";var fn=Object.defineProperty,yn=(e,t,a)=>((e,t,a)=>t in e?fn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,t+"",a);const kn=De.createElement,En=[{label:"Largest",val:"LARGEST",description:"When multiple server groups exist, prefer the server group with the most instances"},{label:"Newest",val:"NEWEST",description:"When multiple server groups exist, prefer the newest"},{label:"Oldest",val:"OLDEST",description:"When multiple server groups exist, prefer the oldest"},{label:"Fail",val:"FAIL",description:"When multiple server groups exist, fail"}],Cn=[{label:"Scale Up",val:"scale_up"},{label:"Scale Down",val:"scale_down"},{label:"Scale to Cluster Size",val:"scale_to_cluster"},{label:"Scale to Exact Size",val:"scale_exact"}],Sn=[{label:"Percentage",val:"pct"},{label:"Incremental",val:"incr"}];function Nn(e,t,a){void 0!==e[t]&&null!==e[t]||(e[t]=a)}function Tn(e,t,a={}){var n,r,i;Nn(e,"cloudProvider","gce"),Nn(e,"cloudProviderType","gce"),Nn(e,"credentials",null==(n=null==t?void 0:t.defaultCredentials)?void 0:n.gce),e.regions=e.regions||[],!e.regions.length&&(null==(r=null==t?void 0:t.defaultRegions)?void 0:r.gce)&&e.regions.push(t.defaultRegions.gce),Object.keys(a).forEach(t=>Nn(e,t,a[t])),e.isNew&&(null==(i=null==t?void 0:t.attributes)?void 0:i.platformHealthOnlyShowOverride)&&t.attributes.platformHealthOnly&&(e.interestingHealthProviderNames=["Google"])}function An(e,t){e.updateStage({...t})}function wn(e,t){An(e,{...e.stage,...t})}function Pn({value:e,onChange:t,disabled:a=!1,style:n}){return kn("input",{className:"form-control input-sm",disabled:a,min:0,style:n,type:"number",value:null!=e?e:"",onChange:e=>t(function(e){return""===e?void 0:Number(e)}(e.target.value))})}function In({value:e,onChange:t,options:a}){return kn("select",{className:"form-control input-sm",value:null!=e?e:"",onChange:e=>t(e.target.value)},kn("option",{value:""},"Select..."),a.map(e=>kn("option",{key:e.val||e.name,value:e.val||e.name},e.label||e.name)))}function Mn({value:e,onChange:t,options:a,style:n}){return kn("select",{className:"form-control input-sm",style:n,value:null!=e?e:"",onChange:e=>t(e.target.value)},a.map(e=>kn("option",{key:e.val,value:e.val},e.label)))}function Dn({capacity:e={},disabled:t=!1,onChange:a}){const n=(t,n)=>a({...e,[t]:n});return kn(De.Fragment,null,kn("div",{className:"form-group"},kn("div",{className:"col-md-2 col-md-offset-3"},"Min"),kn("div",{className:"col-md-2"},"Max"),kn("div",{className:"col-md-2"},"Desired")),kn("div",{className:"form-group"},kn("div",{className:"col-md-2 col-md-offset-3"},kn(Pn,{disabled:t,value:e.min,onChange:e=>n("min",e)})),kn("div",{className:"col-md-2"},kn(Pn,{disabled:t,value:e.max,onChange:e=>n("max",e)})),kn("div",{className:"col-md-2"},kn(Pn,{disabled:t,value:e.desired,onChange:e=>n("desired",e)}))))}function Gn({application:e,stage:t,updateStage:a}){var n;if(!(null==(n=null==e?void 0:e.attributes)?void 0:n.platformHealthOnlyShowOverride))return null;const r=Array.isArray(t.interestingHealthProviderNames)&&"Google"===t.interestingHealthProviderNames[0];return kn(x,{label:"Task Completion"},kn("div",{className:"checkbox"},kn("label",null,kn("input",{checked:r,type:"checkbox",onChange:e=>a({...t,interestingHealthProviderNames:e.target.checked?["Google"]:void 0})})," Consider only Google health")))}class xn extends De.Component{constructor(){super(...arguments),yn(this,"state",{accounts:[]})}componentDidMount(){p.listAccounts("gce").then(e=>this.setState({accounts:e}))}renderAccountRegionClusterSelector(e={}){const{application:t,pipeline:a,stage:n}=this.props;return(null==a?void 0:a.strategy)?null:kn($,{accounts:this.state.accounts,application:t,clusterField:e.clusterField,component:n,singleRegion:e.singleRegion})}renderTargetSelect(e=q.TARGET_LIST){return kn(x,{label:"Target"},kn(_,{model:this.props.stage,options:e,onChange:e=>wn(this.props,{target:e})}))}renderDeploymentStrategySelector(){return kn(j,{command:this.props.stage,fieldColumns:"6",onFieldChange:(e,t)=>wn(this.props,{[e]:t}),onStrategyChange:e=>An(this.props,e)})}}class Rn extends xn{render(){const{application:e,stage:t,showHealthOverride:a=!1}=this.props;return Tn(t,e,{target:q.TARGET_LIST[0].val}),kn("div",null,this.renderAccountRegionClusterSelector(),this.renderTargetSelect(),a&&kn(Gn,{application:e,stage:t,updateStage:e=>An(this.props,e)}))}}function Bn(e){return kn(Rn,{...e,showHealthOverride:!0})}function Fn(e){return kn(Rn,{...e,showHealthOverride:!0})}class Ln extends xn{render(){const{application:e,stage:t}=this.props;Tn(t,e,{target:q.TARGET_LIST[0].val}),Nn(t,"application",null==e?void 0:e.name),Nn(t,"useSourceCapacity",!0),function(e){if(e.targetCluster){const t=V.parseServerGroupName(e.targetCluster);e.stack=t.stack,e.freeFormDetails=t.freeFormDetails}else e.stack="",e.freeFormDetails=""}(t);return kn("div",null,this.renderAccountRegionClusterSelector({clusterField:"targetCluster",singleRegion:!0}),this.renderTargetSelect(),kn("div",null,kn("div",{className:"form-group"},kn("div",{className:"col-md-3 sm-label-right"},"Capacity"),kn("div",{className:"col-md-9 radio"},kn("label",null,kn("input",{checked:!0===t.useSourceCapacity,type:"radio",onChange:()=>{const e={...t,useSourceCapacity:!0};delete e.capacity,An(this.props,e)}})," Copy the capacity from the current server group")),kn("div",{className:"col-md-9 col-md-offset-3 radio"},kn("label",null,kn("input",{checked:!1===t.useSourceCapacity,type:"radio",onChange:()=>wn(this.props,{capacity:t.capacity||{},useSourceCapacity:!1})})," Let me specify the capacity"))),kn(Dn,{capacity:t.capacity,disabled:t.useSourceCapacity,onChange:e=>wn(this.props,{capacity:e,useSourceCapacity:!1})})),kn(x,{label:"Traffic"},kn("div",{className:"checkbox"},kn("label",null,kn("input",{checked:!t.disableTraffic,type:"checkbox",onChange:e=>wn(this.props,{disableTraffic:!e.target.checked})})," Send client requests to new instances"))),kn(Gn,{application:e,stage:t,updateStage:e=>An(this.props,e)}),this.renderDeploymentStrategySelector())}}class zn extends xn{render(){const{application:e,stage:t}=this.props;return Tn(t,e,{selectionStrategy:En[0].val,onlyEnabled:!0}),kn("div",null,this.renderAccountRegionClusterSelector(),kn(x,{label:"Server Group Selection"},kn(In,{value:t.selectionStrategy,options:En,onChange:e=>wn(this.props,{selectionStrategy:e})})),kn(x,{label:"Server Group Filters"},kn("div",{className:"checkbox"},kn("label",null,kn("input",{checked:t.onlyEnabled,type:"checkbox",onChange:e=>wn(this.props,{onlyEnabled:e.target.checked})})," Only consider enabled Server Groups"))))}}class On extends xn{render(){const{application:e,stage:t}=this.props;Tn(t,e,{target:q.TARGET_LIST[0].val,action:Cn[0].val,resizeType:Sn[0].val}),t.capacity=t.capacity||{},t.action||"exact"!==t.resizeType||(t.action="scale_exact");const a=e=>{const a={...t,...e};!function(e){"scale_exact"===e.action?(e.resizeType="exact",delete e.scalePct,delete e.scaleNum,e.capacity=e.capacity||{}):(e.capacity={},"pct"===e.resizeType?delete e.scaleNum:(e.resizeType="incr",delete e.scalePct,e.scaleNum=e.scaleNum||0))}(a),An(this.props,a)};return kn("div",null,this.renderAccountRegionClusterSelector(),this.renderTargetSelect(),kn(x,{label:"Action"},kn(In,{value:t.action,options:Cn,onChange:e=>a({action:e})})),"scale_exact"!==t.action&&kn(De.Fragment,null,kn(x,{label:"scale_to_cluster"===t.action?"Additional Capacity":"Type"},kn(In,{value:t.resizeType,options:Sn,onChange:e=>a({resizeType:e})})),"pct"===t.resizeType&&kn(x,{label:"Resize Percentage"},kn(Pn,{value:t.scalePct,onChange:e=>wn(this.props,{scalePct:e})})),"incr"===t.resizeType&&kn(x,{label:"Resize-by Amount"},kn(Pn,{value:t.scaleNum,onChange:e=>wn(this.props,{scaleNum:e})}))),"scale_exact"===t.action&&kn(Dn,{capacity:t.capacity,onChange:e=>wn(this.props,{capacity:e})}),kn(Gn,{application:e,stage:t,updateStage:e=>An(this.props,e)}))}}class Hn extends xn{render(){const{application:e,stage:t,activeToggleField:a,activeToggleLabel:n,defaultValue:r=1,fieldName:i,label:l,preferenceField:o="preferLargerOverNewer",preferenceLabel:s="Keep",showHealthOverride:c=!1}=this.props;return Tn(t,e,{[i]:r}),Nn(t,o,"false"),t[o]=t[o].toString(),a&&Nn(t,a,!1),kn("div",null,this.renderAccountRegionClusterSelector(),kn(x,{label:l},kn("div",{className:"form-inline"},`${s} `,kn(Pn,{style:{display:"inline-block",width:"50px"},value:t[i],onChange:e=>wn(this.props,{[i]:e})})," ",kn(Mn,{style:{display:"inline-block",width:"100px"},value:t[o],options:[{label:"largest",val:"true"},{label:"newest",val:"false"}],onChange:e=>wn(this.props,{[o]:e})}),` ${function(e,t){return 1===Number(t)?e:`${e}s`}("server group",t[i])}.`)),a&&kn("div",{className:"form-group"},kn("div",{className:"col-md-offset-3 col-md-6 checkbox"},kn("label",null,kn("input",{checked:!!t[a],type:"checkbox",onChange:e=>wn(this.props,{[a]:e.target.checked})}),` ${n}`))),c&&kn(Gn,{application:e,stage:t,updateStage:e=>An(this.props,e)}))}}function Un(e){return kn(Hn,{...e,fieldName:"remainingEnabledServerGroups",label:"Disable Options",preferenceLabel:"Keep the",showHealthOverride:!0})}function $n(e){return kn(Hn,{...e,activeToggleField:"allowScaleDownActive",activeToggleLabel:"Allow scale down of active server groups",fieldName:"remainingFullSizeServerGroups",label:"Scale Down Options",preferenceLabel:"Keep the"})}function qn(e){return kn(Hn,{...e,activeToggleField:"allowDeleteActive",activeToggleLabel:"Allow deletion of active server groups",fieldName:"shrinkToSize",label:"Shrink Options",preferenceField:"retainLargerOverNewer",preferenceLabel:"Shrink to",showHealthOverride:!0})}function _n(){B.pipeline.registerStage({provides:"cloneServerGroup",cloudProvider:"gce",component:Ln,validators:[{type:"requiredField",fieldName:"targetCluster",fieldLabel:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}function jn(){B.pipeline.registerStage({provides:"destroyServerGroup",cloudProvider:"gce",component:Rn,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"targetImpedance",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"}]})}function Vn(){B.pipeline.registerStage({provides:"disableServerGroup",cloudProvider:"gce",component:Bn,validators:[{type:"targetImpedance",message:"This pipeline will attempt to disable 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"}]})}function Kn(){B.pipeline.registerStage({provides:"disableCluster",cloudProvider:"gce",component:Un,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"remainingEnabledServerGroups",fieldLabel:"Keep [X] enabled Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}function Zn(){B.pipeline.registerStage({provides:"enableServerGroup",cloudProvider:"gce",component:Fn,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}function Wn(){B.pipeline.registerStage({provides:"findImage",cloudProvider:"gce",component:zn,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"selectionStrategy",fieldLabel:"Server Group Selection"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials"}]})}const Yn=De.createElement;function Xn({stage:e,updateStage:t}){return e.tags=e.tags||{},e.regions=e.regions||[],e.cloudProvider=e.cloudProvider||"gce",Yn("div",{className:"form-horizontal"},Yn(x,{label:"Package"},Yn("input",{className:"form-control input-sm",value:e.packageName||"",onChange:a=>t({...e,packageName:a.target.value})})),Yn(x,{label:"Tags"},Yn(R,{allowEmpty:!0,model:e.tags,onChange:a=>t({...e,tags:a})})))}function Jn({tags:e,separator:t=":"}){const a=Object.entries(e||{});return a.length?Yn(De.Fragment,null,a.map(([e,n],r)=>Yn("span",{key:e},`${e}${t}${n}${r===a.length-1?"":", "}`))):null}function Qn(e){const{current:t,stage:a}=e,n=a.context||{},r=n.amiDetails||[];return Yn(H,{name:e.name,current:t},Yn("div",{className:"row"},Yn("div",{className:"col-md-12"},Yn("dl",{className:"dl-narrow dl-horizontal"},Yn("dt",null,"Package"),Yn("dd",null,n.packageName),Yn("dt",null,"Tags"),Yn("dd",null,Yn(Jn,{tags:n.tags}))))),Yn(U,{stage:a,message:a.failureMessage}),!!r.length&&Yn("div",{className:"row"},Yn("div",{className:"col-md-12"},Yn("div",{className:"well alert alert-info"},Yn("h4",null,"Results"),r.map(e=>Yn("dl",{className:"dl-narrow dl-horizontal",key:`${e.region}:${e.imageName}`},Yn("dt",null,"Region"),Yn("dd",null,e.region),Yn("dt",null,"Image"),Yn("dd",null,e.imageName)))))))}function er(){B.pipeline.registerStage({provides:"findImageFromTags",cloudProvider:"gce",component:Xn,executionDetailsSections:[Qn,L],validators:[{type:"requiredField",fieldName:"packageName"},{type:"requiredField",fieldName:"tags"}]})}function tr(){B.pipeline.registerStage({provides:"resizeServerGroup",cloudProvider:"gce",component:On,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],supportsCustomTimeout:!0,validators:[{type:"targetImpedance",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:"action"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}function ar(){B.pipeline.registerStage({provides:"scaleDownCluster",cloudProvider:"gce",component:$n,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"remainingFullSizeServerGroups",fieldLabel:"Keep [X] full size Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}],strategy:!0})}function nr(){B.pipeline.registerStage({provides:"shrinkCluster",cloudProvider:"gce",component:qn,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"shrinkToSize",fieldLabel:"shrink to [X] Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}Qn.title="findImageConfig";var rr=Object.defineProperty,ir=(e,t,a)=>((e,t,a)=>t in e?rr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,t+"",a);const lr=De.createElement;function or(e,t,a){const n=e.consideredStages||[];return a&&!n.includes(t)?n.concat(t):a?n:n.filter(e=>e!==t)}class sr extends De.Component{constructor(){super(...arguments),ir(this,"state",{accounts:[]})}componentDidMount(){p.listAccounts("gce").then(e=>this.setState({accounts:e}))}render(){const{pipeline:e,stage:t,updateStage:a}=this.props;t.tags=t.tags||{},t.cloudProvider=t.cloudProvider||"gce";const n=e?K.getAllUpstreamDependencies(e,t).filter(e=>q.IMAGE_PRODUCING_STAGES.includes(e.type)):[];return lr("div",{className:"form-horizontal"},lr(x,{label:"Account"},lr("select",{className:"form-control input-sm",required:!0,value:t.credentials||"",onChange:e=>a({...t,credentials:e.target.value})},lr("option",{value:""},"Select..."),this.state.accounts.map(e=>lr("option",{key:e.name,value:e.name},e.name)))),lr(x,{label:"Tags"},lr(R,{allowEmpty:!0,model:t.tags,onChange:e=>a({...t,tags:e})})),lr(x,{label:"Stages (optional)"},lr("div",{className:"checkbox"},n.map(e=>lr("label",{key:e.refId,style:{display:"block"}},lr("input",{checked:(t.consideredStages||[]).includes(e.refId),type:"checkbox",onChange:n=>a({...t,consideredStages:or(t,e.refId,n.target.checked)})}),` ${e.name||e.refId}`)))))}}function cr(e){const{current:t,execution:a,stage:n}=e,r=n.context||{},i=r.targets||[],l=Object.entries(r.tags||{}).filter(([,e])=>null!==e),o=r.consideredStages||[];return lr(H,{name:e.name,current:t},!!i.length&&lr("div",{className:"row"},lr("div",{className:"col-md-12"},lr("dl",{className:"dl-narrow dl-horizontal"},lr("dt",null,"Account"),lr("dd",null,r.credentials),lr("dt",null,"Images"),i.map(e=>lr("dd",{key:e.imageName},e.imageName))))),lr("div",{className:"row"},lr("div",{className:"col-md-12"},lr("dl",{className:"dl-narrow dl-horizontal"},lr("dt",null,"Tags"),l.map(([e,t])=>lr("dd",{key:e},`${e} = ${t}`)),!!o.length&&lr("dt",null,"Stages"),o.map(e=>lr("dd",{key:e},function(e,t){var a;const n=null==(a=null==e?void 0:e.stages)?void 0:a.find(e=>e.refId===t);return(null==n?void 0:n.name)||t}(a,e)))))),lr(U,{stage:n,message:n.failureMessage}))}function dr(){B.pipeline.registerStage({provides:"upsertImageTags",cloudProvider:"gce",component:sr,executionDetailsSections:[cr,L]})}cr.title="tagImageConfig";const ur=["tcp","udp","icmp","esp","ah","sctp"],mr=["tcp","udp","sctp"];function pr(e){if(Array.isArray(e))return e.map(e=>"object"==typeof e?e.value:e).filter(e=>null!=e&&`${e}`.trim()).map(e=>`${e}`.trim());if("string"==typeof e){return(e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e).split(",").map(e=>e.trim()).filter(Boolean)}return e?[`${e}`]:[]}function hr(e){const t=(e.ipRangeRules||[]).map(e=>{var t,a;const n=null==(t=e.range)?void 0:t.ip;return n?`${n}${(null==(a=e.range)?void 0:a.cidr)||""}`:""}).filter(Boolean);return Array.from(new Set([...pr(e.sourceRanges),...t]))}function gr(e){if("string"==typeof e||"number"==typeof e){const[t,a=t]=`${e}`.split("-");return{startPort:Number(t),endPort:Number(a)}}return{startPort:void 0===(null==e?void 0:e.startPort)?void 0:Number(e.startPort),endPort:void 0===(null==e?void 0:e.endPort)?void 0:Number(e.endPort)}}function vr(e){if((e.ipIngress||[]).length)return e.ipIngress.map(e=>({type:e.type||e.protocol||e.ipProtocol,...gr(e)}));const t=(e.ipIngressRules||e.inboundRules||e.allowed||e.ipRangeRules||[]).reduce((e,t)=>{const a=t.type||t.protocol||t.ipProtocol||t.IPProtocol,n=t.portRanges||t.ports||[];return n.length?n.forEach(t=>e.push({type:a,...gr(t)})):a&&e.push({type:a}),e},[]),a=new Set;return t.filter(e=>{var t,n;const r=`${e.type}:${null!=(t=e.startPort)?t:""}:${null!=(n=e.endPort)?n:""}`;return!a.has(r)&&(a.add(r),!0)})}function br(e,t){return e.credentials||e.accountName||e.accountId||e.account||t||""}function fr(e){return String(e||"").trim().toLowerCase()}function yr(e,t){const a=e.securityGroup||{},n=e.mode||"create",r=br(a,e.credentials),i={...a,accountId:a.accountId||r,accountName:a.accountName||r,credentials:r,description:a.description||"",ipIngress:vr(a),name:a.name||t||"",network:a.network||a.vpcId||"default",region:"global",sourceRanges:hr(a),sourceTags:pr(a.sourceTags),targetTags:pr(a.targetTags)};return"create"!==n||i.ipIngress.length||(i.ipIngress=[{type:"tcp"}]),"clone"===n&&(i.id=void 0,i.name="",delete i.selfLink),i}class kr extends De.Component{constructor(e){super(e),this.mounted=!1,this.onTaskComplete=()=>{var e,t,a,n,r,i;const l=null==(e=this.getApplication())?void 0:e.securityGroups;if("edit"===this.getMode())return null==(t=null==l?void 0:l.refresh)||t.call(l),void(null==(n=(a=this.props).closeModal)||n.call(a));const o=()=>{var e,t;if(this.clearApplicationRefreshSubscription(),!this.mounted)return;const{securityGroup:a}=this.state;null==(t=(e=this.props).closeModal)||t.call(e),this.props.stateService.go(this.props.stateService.includes("**.firewallDetails")?"^.firewallDetails":".firewallDetails",{accountId:br(a),name:a.name.trim(),provider:"gce",region:"global",vpcId:(a.network||a.vpcId).trim()})};if(null==l?void 0:l.onNextRefresh)return this.clearApplicationRefreshSubscription(),this.applicationRefreshUnsubscribe=l.onNextRefresh(o),void(null==(r=l.refresh)||r.call(l));const s=null==(i=null==l?void 0:l.refresh)?void 0:i.call(l);(null==s?void 0:s.then)?s.then(o):o()},this.clearApplicationRefreshSubscription=()=>{var e;null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0},this.updateSecurityGroup=e=>{this.setState(({securityGroup:t})=>({securityGroup:{...t,...e}}))},this.updateRule=(e,t)=>{const a=this.state.securityGroup.ipIngress.slice();a[e]={...a[e],...t},this.updateSecurityGroup({ipIngress:a})},this.addRule=()=>{this.updateSecurityGroup({ipIngress:[...this.state.securityGroup.ipIngress,{type:"tcp",startPort:7001,endPort:7001}]})},this.removeRule=e=>{this.updateSecurityGroup({ipIngress:this.state.securityGroup.ipIngress.filter((t,a)=>a!==e)})},this.submit=()=>{const e=this.getApplication(),{securityGroup:t}=this.state,a=br(t),n=t.ipIngress.map(e=>{const t={ipProtocol:e.type};return void 0!==e.startPort&&void 0!==e.endPort&&(t.portRanges=[`${e.startPort}-${e.endPort}`]),t}),r={...t,accountId:t.accountId||a,accountName:t.accountName||a,allowed:n,application:e.name,cloudProvider:"gce",credentials:a,name:t.name.trim(),network:t.network.trim(),region:"global",sourceRanges:Array.from(new Set(t.sourceRanges)),sourceTags:Array.from(new Set(t.sourceTags)),targetTags:Array.from(new Set(t.targetTags))},i=this.getMode(),l="edit"===i?"Update":"clone"===i?"Clone":"Create";this.state.taskMonitor.submit(()=>Z.upsertSecurityGroup(r,e,l))};const t=this.getApplication(e),a=e.mode||"create";this.state={securityGroup:yr(e,null==t?void 0:t.name),securityGroupInventoryLoaded:"edit"===a,taskMonitor:new f({application:t,title:`${"edit"===a?"Updating":"Creating"} your ${W.get("firewall")}`,onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:this.onTaskComplete})}}static show(e,t){return b.show(Er,e,{dialogClassName:"modal-lg"},t)}componentDidMount(){this.mounted=!0,"edit"!==this.getMode()&&this.context.services.securityGroupReader.getAllSecurityGroups().then(e=>{this.mounted&&this.setState({securityGroupInventory:e,securityGroupInventoryLoaded:!0})},()=>{this.mounted&&this.setState({securityGroupValidationError:"Unable to validate firewall name."})})}componentWillUnmount(){this.mounted=!1,this.clearApplicationRefreshSubscription()}getApplication(e=this.props){return e.application||e.app}getMode(){return this.props.mode||"create"}isValid(){const{securityGroup:e,securityGroupInventory:t,securityGroupInventoryLoaded:a}=this.state,n="edit"===this.getMode()||a&&!function(e,t){var a,n;const r=fr(e.name),i=fr(br(e)),l=Object.keys(t||{}).find(e=>fr(e)===i);return(l&&(null==(n=null==(a=null==t?void 0:t[l])?void 0:a.gce)?void 0:n.global)||[]).some(e=>fr(e.name)===r)}(e,t);return!!(e.name.trim()&&n&&br(e)&&e.network.trim()&&e.ipIngress.length&&(e.sourceRanges.length||e.sourceTags.length)&&e.ipIngress.every(e=>e.type&&(!mr.includes(e.type)||void 0!==e.startPort&&void 0!==e.endPort)))}renderTextField(e,t,a,n=!1){return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 control-label"},e),De.createElement("div",{className:"col-md-7"},De.createElement("input",{className:"form-control input-sm",onChange:e=>a(e.target.value),readOnly:n,value:t||""})))}renderRules(){return De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-10 col-md-offset-1"},De.createElement("table",{className:"table table-condensed packed"},De.createElement("thead",null,De.createElement("tr",null,De.createElement("th",null,"Protocol"),De.createElement("th",null,"Start Port"),De.createElement("th",null,"End Port"),De.createElement("th",null))),De.createElement("tbody",null,this.state.securityGroup.ipIngress.map((e,t)=>De.createElement("tr",{key:t},De.createElement("td",null,De.createElement("select",{className:"form-control input-sm",onChange:e=>this.updateRule(t,{type:e.target.value}),value:e.type},ur.map(e=>De.createElement("option",{key:e,value:e},e.toUpperCase())))),De.createElement("td",null,De.createElement("input",{className:"form-control input-sm",min:"0",onChange:e=>this.updateRule(t,{startPort:""===e.target.value?void 0:Number(e.target.value)}),type:"number",value:void 0===e.startPort?"":e.startPort})),De.createElement("td",null,De.createElement("input",{className:"form-control input-sm",min:"0",onChange:e=>this.updateRule(t,{endPort:""===e.target.value?void 0:Number(e.target.value)}),type:"number",value:void 0===e.endPort?"":e.endPort})),De.createElement("td",null,De.createElement("button",{className:"btn btn-link",onClick:()=>this.removeRule(t),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-trash"}))))))),De.createElement("button",{className:"btn btn-block add-new",onClick:this.addRule,type:"button"},De.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Protocol and Port Range")))}render(){const{securityGroup:e,securityGroupInventoryLoaded:t,securityGroupValidationError:a,taskMonitor:n}=this.state,r=this.getMode(),i="edit"===r,l=`${"edit"===r?"Edit":"clone"===r?"Clone":"Create"} ${W.get("Firewall")}`;return De.createElement("div",{className:"modal-content"},De.createElement(y,{monitor:n}),De.createElement(k,{dismiss:this.props.dismissModal}),De.createElement("div",{className:"modal-header"},De.createElement("h3",null,l)),De.createElement("div",{className:"modal-body"},De.createElement("div",{className:"form-horizontal"},this.renderTextField("Name",e.name,e=>this.updateSecurityGroup({name:e}),i),!i&&!t&&De.createElement("div",{className:a?"security-group-validation-error text-danger":"help-block"},a||"Checking firewall name availability..."),this.renderTextField("Description",e.description,e=>this.updateSecurityGroup({description:e})),this.renderTextField("Account",br(e),e=>this.updateSecurityGroup({accountId:e,accountName:e,credentials:e}),i),this.renderTextField("Network",e.network,e=>this.updateSecurityGroup({network:e}),i),this.renderTextField("Target tags",e.targetTags.join(", "),e=>this.updateSecurityGroup({targetTags:pr(e)})),this.renderTextField("Source tags",e.sourceTags.join(", "),e=>this.updateSecurityGroup({sourceTags:pr(e)})),this.renderTextField("Source CIDRs",e.sourceRanges.join(", "),e=>this.updateSecurityGroup({sourceRanges:pr(e)})),this.renderRules())),De.createElement("div",{className:"modal-footer"},De.createElement("button",{className:"btn btn-default",onClick:this.props.dismissModal,type:"button"},"Cancel"),De.createElement(C,{isDisabled:!this.isValid(),isFormSubmit:!1,label:"edit"===r?"Update":"clone"===r?"Clone":"Create",onClick:this.submit,submitting:n.submitting})))}}kr.contextType=Y;const Er=Object.assign(r(kr),{show:kr.show});function Cr(e){return Array.isArray(e)?e:"string"==typeof e&&e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).split(",").map(e=>e.trim()).filter(Boolean):e?[e]:[]}function Sr({app:e,resolvedSecurityGroup:t,securityGroup:a}){const n=A(),[r,i]=Ge(!1),l=function(e,t){if(!t)return e;const a=e.accountId||e.accountName||e.account||e.credentials||t.accountId;return{...e,accountId:a,accountName:e.accountName||a,name:e.name||t.name,provider:e.provider||t.provider||"gce",region:e.region||t.region||"global",vpcId:e.vpcId||t.vpcId}}(a,t),o="string"==typeof l.id&&l.id.includes("/"),s="You cannot modify shared VPC host project firewall rules.";return De.createElement("div",{className:"actions"},De.createElement("div",{className:"dropdown "+(r?"open":""),id:"gce-security-group-actions-dropdown"},De.createElement("button",{"aria-expanded":r,className:"btn btn-sm btn-primary dropdown-toggle",onClick:()=>i(!r),type:"button"},"Firewall Actions ",De.createElement("span",{className:"caret"})),De.createElement("ul",{className:"dropdown-menu",role:"menu"},De.createElement("li",{className:o?"disabled":void 0},De.createElement("button",{className:"btn btn-link","data-action":"edit",disabled:o,onClick:()=>{Er.show({application:e,mode:"edit",securityGroup:l},n)},title:o?s:void 0,type:"button"},"Edit Inbound Rules")),De.createElement("li",{className:o?"disabled":void 0},De.createElement("button",{className:"btn btn-link","data-action":"clone",disabled:o,onClick:()=>{Er.show({application:e,mode:"clone",securityGroup:l},n)},title:o?s:void 0,type:"button"},"Clone Firewall")),De.createElement("li",{className:o?"disabled":void 0},De.createElement("button",{className:"btn btn-link","data-action":"delete",disabled:o,onClick:()=>{u.confirm({account:l.accountId,buttonText:`Delete ${l.name}`,header:`Really delete ${l.name}?`,submitMethod:()=>Z.deleteSecurityGroup(l,e,{cloudProvider:"gce",securityGroupName:l.name}),taskMonitorConfig:{application:e,title:`Deleting ${l.name}`}})},title:o?s:void 0,type:"button"},"Delete Firewall")))),o&&De.createElement("div",{className:"shared-vpc-warning help-block"},s))}function Nr({app:e,resolvedSecurityGroup:t}){const{securityGroupReader:a}=A(),n=function(e){return[e.accountId,e.provider,e.region,e.vpcId||"",e.name].join(":")}(t),[r,i]=Ge();Be(()=>{var r,l;let o=!1;const s=()=>a.getSecurityGroupDetails(e,t.accountId,t.provider,t.region,t.vpcId,t.name).then(e=>{o||i({key:n,value:{...t,...e}})},()=>{o||i({key:n,value:t})});s();const c=null==(l=null==(r=e.securityGroups)?void 0:r.onRefresh)?void 0:l.call(r,s);return()=>{o=!0,null==c||c()}},[e,n,a]);const l=(null==r?void 0:r.key)!==n,o=l?t:r.value,s=Cr(o.targetTags),u=Cr(o.sourceTags),m=Cr(o.sourceRanges).concat((o.ipRangeRules||[]).map(e=>{var t,a;return`${(null==(t=e.range)?void 0:t.ip)||""}${(null==(a=e.range)?void 0:a.cidr)||""}`}));return De.createElement("div",{className:"details-panel"},De.createElement("div",{className:"header"},De.createElement("div",{className:"header-text horizontal middle"},De.createElement("span",{className:"icon-gce"}),De.createElement("h3",null,o.name)),!l&&De.createElement(Sr,{app:e,resolvedSecurityGroup:t,securityGroup:o})),De.createElement("div",{className:"content"},l&&De.createElement("div",{className:"text-center"},"Loading..."),De.createElement(c,{heading:`${W.get("Firewall")} Information`,defaultExpanded:!0},De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Account"),De.createElement("dd",null,De.createElement(d,{account:o.accountId||o.accountName})),De.createElement("dt",null,"Region"),De.createElement("dd",null,o.region||"global"),De.createElement("dt",null,"Network"),De.createElement("dd",null,o.vpcId||o.network||"-"),De.createElement("dt",null,"Description"),De.createElement("dd",null,o.description||"-"))),De.createElement(c,{heading:"Targets",defaultExpanded:!0},De.createElement("p",null,s.join(", ")||"All traffic")),De.createElement(c,{heading:"Sources",defaultExpanded:!0},De.createElement("p",null,u.concat(m).join(", ")||"-")),De.createElement(c,{heading:"Allowed Ingress",defaultExpanded:!0},(o.inboundRules||o.ipIngressRules||[]).length?De.createElement("ul",null,(o.inboundRules||o.ipIngressRules||[]).map((e,t)=>{var a;return De.createElement("li",{key:t},[e.protocol,null==(a=e.portRanges)?void 0:a.map(e=>e.startPort).join(", ")].filter(Boolean).join(" "))})):De.createElement("span",null,"-"))))}class Tr{resolveIndexedSecurityGroup(e,t,a){return e[t.account].global[a]}}class Ar{constructor(e){this.promiseService=e}normalizeSecurityGroup(e){return this.promiseService.resolve(e)}}function wr(e){const t=e.split("/");if(t.length<2)throw new Error(`Health check url ${e} missing expected segments.`);return{healthCheckName:t[t.length-1],healthCheckKind:t[t.length-2].slice(0,-1)}}function Pr(e){const t=function(e){const t=new Set,a=new Set;return e.forEach(e=>{t.has(e.name)?a.add(e.name):t.add(e.name)}),a}(e);return e.map(e=>({displayName:t.has(e.name)?`${e.name} (${e.kind})`:e.name,kind:e.kind,name:e.name,selfLink:e.selfLink}))}class Ir{vCpuCountForLocationIsValid(e,t,a,n){let r=0;if("E2"===e)r=32;else r=n[a].vCpuMax;return t<=r}numberOfVCpusIsValid(e,t){if(1===t)return!0;switch(e){case"N2":case"N2D":return t%4==0;default:return t%2==0}}generateValidVCpuListForLocation(e,t){const a=t[e].vCpuMax;return[1,...ve.range(2,a,2),a]}generateValidInstanceFamilyList(){return["n1","e2","n2","n2d"].map(e=>e.toUpperCase())}minMemoryForVCpuCount(e,t){switch(e){case"E2":case"N2":case"N2D":return Math.ceil(.5*t*4)/4;default:return Math.ceil(.9*t*4)/4}}maxMemoryForVCpuCount(e,t){switch(e){case"E2":return 8*t>128?128:8*t;case"N2":case"N2D":return 8*t;default:return 6.5*t}}generateValidMemoryListForVCpuCount(e,t){const a=this.minMemoryForVCpuCount(e,t),n=this.maxMemoryForVCpuCount(e,t);return[...ve.range(a,n,.25),n]}memoryIsValid(e,t,a,n){const r=this.minMemoryForVCpuCount(e,a),i=n?800:this.maxMemoryForVCpuCount(e,a);return ve.inRange(t,r,i)||t===i}generateInstanceTypeString(e,t,a,n){const r=n?"-ext":"",i=1024*Number(a);return"n1"===(e=e.toLowerCase())?`custom-${t}-${i}${r}`:`${e}-custom-${t}-${i}${r}`}parseInstanceTypeString(e){const[t,a]=ve.chain(e.split("-")).takeRight(2).map(e=>Number(e)).value();let n=e.split("-")[0].toUpperCase();"CUSTOM"===n&&(n="N1");return{instanceFamily:n,vCpuCount:t,memory:a/1024}}customInstanceChoicesAreValid(e,t,a,n,r,i){return ve.every([this.numberOfVCpusIsValid(e,t),this.memoryIsValid(e,a,t,i),this.vCpuCountForLocationIsValid(e,t,n,r)])}}const Mr=["load-balancer-names","global-load-balancer-names","backend-service-names","load-balancing-policy","select-zones","customUserData"];class Dr{constructor(e,t=new Qe(e),a=new Ir,n=new Ke,r=Mr){function i(e){const t=n.deriveProjectId(e.launchConfig.instanceTemplate),a=ve.get(e,"launchConfig.instanceTemplate.properties.networkInterfaces[0].network");return n.decorateXpnResourceIfNecessary(t,a)}function l(e){const t=n.deriveProjectId(e.launchConfig.instanceTemplate),a=ve.get(e,"launchConfig.instanceTemplate.properties.networkInterfaces[0].subnetwork");return n.decorateXpnResourceIfNecessary(t,a)}function o(e){return ve.has(e,"launchConfig.instanceTemplate.properties.networkInterfaces[0].accessConfigs")}function s(e){return Array.isArray(e)?e:"string"==typeof e?e.split(",").filter(Boolean):[]}function c(e){return["load-balancer-names","global-load-balancer-names"].reduce((t,a)=>{const n=s(e[a]);return n.length&&(t[a]=n),t},{})}function d(e){return(e.disks||[]).filter(e=>"local-ssd"===e.type)}function u(e){return(e.disks||[]).filter(e=>e.type.startsWith("pd-")||e.type.startsWith("hyperdisk-"))}function m(e,t){if(e.storage.localSSDSupported)d(t).length!==e.storage.count&&(t.viewState.overriddenStorageDescription=d(t).length+"×375");else{const a=u(t);(a.some(t=>t.sizeGb!==e.storage.size)||a.length!==e.storage.count)&&(t.viewState.overriddenStorageDescription=function(e){const t=u(e),a=new Map;return t.forEach(e=>{a.has(e.sizeGb)?a.set(e.sizeGb,a.get(e.sizeGb)+1):a.set(e.sizeGb,1)}),Array.from(a).sort(([e],[t])=>t-e).map(([e,t])=>t+"×"+e).join(", ")}(t))}}function h(e,t){delete t.autoHealingPolicy;const a=e.autoHealingPolicy;if(!a)return;const n=a.healthCheckUrl?a.healthCheckUrl:a.healthCheck;if(!n)return;const{healthCheckName:r,healthCheckKind:i}=wr(n);t.autoHealingPolicy={healthCheck:r,healthCheckKind:i,healthCheckUrl:n,initialDelaySec:a.initialDelaySec}}function g(e,t){const a=ve.get(e,"launchConfig.instanceTemplate.properties.shieldedInstanceConfig"),n=ve.get(e,"launchConfig.instanceTemplate.properties.shieldedVmConfig");["enableSecureBoot","enableVtpm","enableIntegrityMonitoring"].forEach(r=>{t[r]=ve.has(a,r)?a[r]:ve.has(n,r)?n[r]:ve.get(e,r,!1)})}function v(e,t){if(e){let a="",n=[];if(Array.isArray(e)){const i=e.find(e=>"customUserData"===e.key);i&&(a=i.value,n=b(a),t.userData=a),e.forEach(function(e){ve.includes(n,e.key)||ve.includes(r,e.key)||(t.instanceMetadata[e.key]=e.value)})}else e.customUserData&&(a=e.customUserData,n=b(a),t.userData=a,e=ve.omit(e,n)),Object.assign(t.instanceMetadata,ve.omit(e,r))}t.labels["spinnaker-moniker-sequence"]&&delete t.labels["spinnaker-moniker-sequence"]}function b(e){const t=[];return e.split(/\n|,/).forEach(function(e){const a=e.split("=")[0];t.push(a)}),t}function f(e,t){e&&e.items&&ve.map(e.items,function(e){t.tags.push({value:e})})}function y(e,t){e&&Object.assign(t.resourceManagerTags,e)}function k(e,t){const a=(t=t||{}).account||Ga.defaults.account,n=t.region||Ga.defaults.region,r=t.zone||Ga.defaults.zone,i=!ve.has(e,"attributes.providerSettings.gce.associatePublicIpAddress")||e.attributes.providerSettings.gce.associatePublicIpAddress,l={application:e.name,credentials:a,region:n,zone:r,regional:!1,selectZones:!1,distributionPolicy:{zones:[]},network:"default",associatePublicIpAddress:i,canIpForward:!1,strategy:"",capacity:{min:0,max:0,desired:1},backendServiceMetadata:[],minCpuPlatform:"(Automatic)",disks:[{type:"pd-ssd",sizeGb:10},{type:"local-ssd",sizeGb:375}],imageSource:"priorStage",instanceMetadata:{},tags:[],labels:{},resourceManagerTags:{},enableSecureBoot:!1,enableVtpm:!1,enableIntegrityMonitoring:!1,preemptible:!1,automaticRestart:!0,onHostMaintenance:"MIGRATE",serviceAccountEmail:"default",authScopes:["cloud.useraccounts.readonly","devstorage.read_only","logging.write","monitoring.write"],enableTraffic:!0,cloudProvider:"gce",selectedProvider:"gce",availabilityZones:[],viewState:{instanceProfile:"custom",allImageSelection:null,useSimpleCapacity:!0,usePreferredZones:!0,listImplicitSecurityGroups:!1,mode:t.mode||"create",disableStrategySelection:!0,expectedArtifacts:[]}};return e.attributes&&e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(l.interestingHealthProviderNames=["Google"]),function(e,t,a){return p.listAccounts("gce").then(function(e){const n=ve.map(e,"name"),r=n[0],i=t&&n.includes(t);a.credentials=i?t:r||"my-account-name"})}(0,a,l).then(()=>l)}return{buildNewServerGroupCommand:k,buildNewServerGroupCommandForPipeline:function(t,a){const n=G.getExpectedArtifactsAvailableToStage(t,a);return e.resolve({viewState:{pipeline:a,expectedArtifacts:n,requiresTemplateSelection:!0,stage:t}})},buildServerGroupCommandFromExisting:function(n,r,d){d=d||"clone";const u=r.moniker,p={application:n.name,autoscalingPolicy:ve.cloneDeep(r.autoscalingPolicy),strategy:"",stack:u.stack,freeFormDetails:u.detail,credentials:r.account,loadBalancers:(b=r.asg,["load-balancer-names","global-load-balancer-names"].reduce((e,t)=>(b[t]&&(e=e.concat(s(b[t]))),e),[])),loadBalancerMetadata:c(r.asg),loadBalancingPolicy:ve.cloneDeep(r.loadBalancingPolicy),backendServiceMetadata:r.asg["backend-service-names"],securityGroups:r.securityGroups,region:r.region,capacity:{min:r.asg.minSize,max:r.asg.maxSize,desired:r.asg.desiredCapacity},regional:r.regional,network:i(r),subnet:l(r),associatePublicIpAddress:o(r),canIpForward:r.canIpForward,minCpuPlatform:r.launchConfig.minCpuPlatform||"(Automatic)",instanceMetadata:{},tags:[],labels:{},resourceManagerTags:{},availabilityZones:[],enableSecureBoot:!1,enableVtpm:!1,enableIntegrityMonitoring:!1,enableTraffic:!0,cloudProvider:"gce",selectedProvider:"gce",distributionPolicy:{zones:r.distributionPolicy?r.distributionPolicy.zones:[],targetShape:r.distributionPolicy?r.distributionPolicy.targetShape:null},instanceFlexibilityPolicy:void 0===r.instanceFlexibilityPolicy?void 0:ve.cloneDeep(r.instanceFlexibilityPolicy),selectZones:r.selectZones,source:{account:r.account,region:r.region,serverGroupName:r.name,asgName:r.name},viewState:{allImageSelection:null,useSimpleCapacity:!r.autoscalingPolicy,usePreferredZones:!1,listImplicitSecurityGroups:!1,mode:d}};var b;if(g(r,p),p.regional||(p.zone=r.zones[0],p.source.zone=r.zones[0]),n.attributes&&n.attributes.platformHealthOnlyShowOverride&&n.attributes.platformHealthOnly&&(p.interestingHealthProviderNames=["Google"]),h(r,p),r.launchConfig){const n=r.launchConfig.instanceType;return Object.assign(p,{instanceType:n}),ve.includes(n,"custom-")&&(p.viewState.customInstance=a.parseInstanceTypeString(n),p.viewState.instanceProfile="buildCustom"),p.viewState.imageId=r.launchConfig.imageId,function(e){return t.getCategories("gce").then(function(t){t.forEach(function(t){t.families.forEach(function(a){a.instanceTypes.forEach(function(a){a.name===e.instanceType&&(e.viewState.instanceProfile=t.type)})})})})}(p).then(function(){return function(e,t){e?(t.preemptible=e.preemptible,t.automaticRestart=e.automaticRestart,t.onHostMaintenance=e.onHostMaintenance):(t.preemptible=!1,t.automaticRestart=!0,t.onHostMaintenance="MIGRATE")}(r.launchConfig.instanceTemplate.properties.scheduling,p),v(r.launchConfig.instanceTemplate.properties.metadata.items,p),f(r.launchConfig.instanceTemplate.properties.tags,p),function(e,t){e&&(Object.assign(t.labels,e),t.labels["spinnaker-region"]&&delete t.labels["spinnaker-region"],t.labels["spinnaker-server-group"]&&delete t.labels["spinnaker-server-group"],t.labels["spinnaker-moniker-sequence"]&&delete t.labels["spinnaker-moniker-sequence"])}(r.instanceTemplateLabels,p),function(e,t){e&&e.length?(t.serviceAccountEmail=e[0].email,t.authScopes=ve.map(e[0].scopes,e=>e.replace("https://www.googleapis.com/auth/",""))):t.authScopes=[]}(r.launchConfig.instanceTemplate.properties.serviceAccounts,p),y(r.launchConfig.instanceTemplate.properties.resourceManagerTags,p),function(a,n){const r=(a=a.map((e,t)=>0===t?{type:e.initializeParams.diskType,sizeGb:e.initializeParams.diskSizeGb}:{type:e.initializeParams.diskType,sizeGb:e.initializeParams.diskSizeGb,sourceImage:ve.last(ve.get(e,"initializeParams.sourceImage","").split("/"))||null})).filter(e=>"local-ssd"===e.type),i=a.filter(e=>e.type.startsWith("pd-")||e.type.startsWith("hyperdisk-"));return i.length?(n.disks=i.concat(r),t.getInstanceTypeDetails(n.selectedProvider,ve.includes(n.instanceType,"custom-")?"buildCustom":n.instanceType).then(e=>{n.viewState.instanceTypeDetails=e,m(e,n)})):(n.disks=[{type:"pd-ssd",sizeGb:10}].concat(r),e.resolve(null))}(r.launchConfig.instanceTemplate.properties.disks,p).then(function(){return p})})}return e.resolve(p)},buildServerGroupCommandFromPipeline:function(n,r,i,l){const o=ve.cloneDeep(r),p=Object.keys(o.availabilityZones)[0],b=o.zone,E=t.getCategoryForInstanceType("gce",o.instanceType),C={account:o.account,region:p,zone:b};return e.all([k(n,C),E]).then(function([n,r]){const b=G.getExpectedArtifactsAvailableToStage(i,l),k={pipeline:l,stage:i,instanceProfile:r,disableImageSelection:!0,expectedArtifacts:b,showImageSourceSelector:!0,useSimpleCapacity:!o.autoscalingPolicy,mode:"editPipeline",submitButtonLabel:"Done",customInstance:"buildCustom"===r?a.parseInstanceTypeString(o.instanceType):null,templatingEnabled:!0},E={region:p,credentials:o.account,enableTraffic:!o.disableTraffic,viewState:k};o.strategy=o.strategy||"";const C=Object.assign({},n,o,E);return delete C.partnerMetadata,function(a){const n=u(a),r=d(a);return n.length?(a.disks=n.concat(r),t.getInstanceTypeDetails(a.selectedProvider,ve.includes(a.instanceType,"custom-")?"buildCustom":a.instanceType).then(e=>{a.viewState.instanceTypeDetails=e,m(e,a)})):(a.disks=[{type:"pd-ssd",sizeGb:10}].concat(r),e.resolve(null))}(C).then(function(){const e=C.instanceMetadata;var t;C.loadBalancers=(t=e,["load-balancer-names","global-load-balancer-names"].reduce((e,a)=>(t[a]&&(e=e.concat(s(t[a]))),e),[])),C.loadBalancerMetadata=c(e),C.backendServiceMetadata=e["backend-service-names"]?e["backend-service-names"].split(","):[],C.minCpuPlatform=o.minCpuPlatform||"(Automatic)",C.instanceMetadata={},v(e,C),h(o,C),g(o,C);const a={items:C.tags};C.tags=[],f(a,C);return y(C.resourceManagerTags,C),C})})}}}}class Gr{static getAvailableAccelerators({backingData:e,credentials:t,distributionPolicy:a,regional:n,selectZones:r,zone:i}){const l=this.getZoneToAcceleratorTypesMap(e,t);if(i&&!n)return this.getAcceleratorTypesForZone(l,i);if(n&&r){const e=Ae(a,"zones",[]).map(e=>this.getAcceleratorTypesForZone(l,e));return we.apply(null,[...e,"name"])}return[]}static getZoneToAcceleratorTypesMap(e,t){return Ae(e,["credentialsKeyedByAccount",t,"zoneToAcceleratorTypesMap"],{})}static getAcceleratorTypesForZone(e,t){return Ae(e,[t,"acceleratorTypes","acceleratorTypes"],[]).map(e=>({...e,availableCardCounts:this.getAvailableCardCounts(e)}))}static getAvailableCardCounts(e){const t=Pe(e.maximumCardsPerInstance)?e.maximumCardsPerInstance:4,a=[];for(let e=1;e<=t;e*=2)a.push(e);return a}}class xr{constructor(){const e=["command","securityGroups","securityGroupObjectsKeyedByTag","securityGroupObjectsKeyedById"];this.reset=()=>{e.forEach(e=>delete this[e])},this.register=e=>{this.command=e;const{credentials:n,backingData:r}=e;if(void 0!==r.securityGroups[n]){this.securityGroupObjects=ve.cloneDeep(r.securityGroups[n].gce.global),t(this.securityGroupObjects,e.tags);const{byTag:i,bySecurityGroupId:l}=a(this.securityGroupObjects);this.securityGroupObjectsKeyedByTag=i,this.securityGroupObjectsKeyedById=l}e.securityGroups||(e.securityGroups=this.inferSecurityGroupIdsFromTags(e.tags))},this.inferSecurityGroupIdsFromTags=(e=[])=>ve.chain(e).map(e=>this.securityGroupObjectsKeyedByTag[e.value]).flatten().compact().filter(e=>e.network===this.command.network).map("id").uniq().value();const t=(e,t=[])=>{e.forEach(e=>{const a=e.targetTags;e.tagsArray=a?a.substring(1,a.length-1).split(", "):[],e.selectedTags=t?ve.intersection(t.map(e=>e.value),e.tagsArray):[]})},a=e=>e.reduce((e,t)=>{const{bySecurityGroupId:a}=e;return a[t.id]=t,t.tagsArray.reduce((e,a)=>{const{byTag:n}=e;return n[a]||(n[a]=[]),n[a].push(t),e},e)},{byTag:{},bySecurityGroupId:{}});this.inferSelectedSecurityGroupFromTag=ve.debounce(e=>{let t=this.securityGroupObjectsKeyedByTag[e];const a=this.command;t&&(t=ve.filter(t,e=>e.network===this.command.network)),t&&(r(t,e),a.securityGroups=ve.map(i(n(a.securityGroups),t),"id")),this.updateSelectedTags()},100),this.updateSelectedTags=()=>{const e=this.command,t=e.tags.map(e=>e.value);n(e.securityGroups).forEach(a=>{a.selectedTags&&(a.selectedTags=ve.intersection(a.selectedTags,t)),ve.get(a,"selectedTags.length")||(e.securityGroups=ve.without(e.securityGroups,a.id))})},this.addTag=e=>{const t=this.command,a=t.tags;let l=this.securityGroupObjectsKeyedByTag[e];l&&(l=ve.filter(l,e=>e.network===this.command.network)),ve.includes(a.map(e=>e.value),e)||a.push({value:e}),l&&(r(l,e),t.securityGroups=ve.map(i(n(t.securityGroups),l),"id"))};const n=e=>e.map(e=>this.securityGroupObjectsKeyedById[e]),r=(e,t)=>{e.forEach(e=>{e.selectedTags=ve.chain(e.selectedTags||[]).concat([t]).uniq().value()})},i=(e,t)=>ve.chain(e).concat(t).uniq().value();return this.removeTag=e=>{const t=this.command,a=t.securityGroups||[];n(a).forEach(t=>{t.selectedTags&&(t.selectedTags=t.selectedTags.filter(t=>t!==e))}),t.tags=t.tags.filter(t=>t.value!==e)},this.removeSecurityGroup=e=>{const t=this.securityGroupObjectsKeyedById[e],a=t.selectedTags,r=this.command;n(r.securityGroups).forEach(e=>{e.selectedTags&&(e.selectedTags=ve.difference(e.selectedTags,a))}),t.selectedTags=[],r.tags=ve.chain(r.tags).map(e=>e.value).difference(a).map(e=>({value:e})).value()},this.getToolTipContent=e=>{const t=ve.get(this,["securityGroupObjectsKeyedByTag",e]),a=t?t.filter(e=>e.network===this.command.network).map(e=>e.id):[];return`This tag associates this server group with ${a.length>1?W.get("firewalls"):W.get("firewall")}\n <em>${a.join(", ")}</em>.`},this.showToolTip=e=>!!ve.get(this,["securityGroupObjectsKeyedByTag",e]),this}}var Rr=Object.defineProperty;const Br=["ANY","EVEN","BALANCED","ANY_SINGLE_ZONE"];class Fr{constructor(e={all:e=>Promise.all(e),resolve:e=>Promise.resolve(e)},a){const n=a.securityGroupReader,r=a.loadBalancerReader,i=new Qe(e),l=new Ir,o=new Ya,s=new Ue,c=new xr,d=new on,u=["pd-standard","pd-ssd","hyperdisk-balanced"],m=["cloud-platform","userinfo.email","compute.readonly","compute","cloud.useraccounts.readonly","cloud.useraccounts","devstorage.read_only","devstorage.write_only","devstorage.full_control","taskqueue","bigquery","sqlservice.admin","datastore","logging.write","logging.read","logging.admin","monitoring.write","monitoring.read","monitoring","bigtable.data.readonly","bigtable.data","bigtable.admin","bigtable.admin.table"];function h(e){e.backingData.credentialsKeyedByAccount[e.credentials],e.distributionPolicy.targetShape||(e.distributionPolicy.targetShape="EVEN")}function b(e){const t={dirty:{}};if(e.region){const a=[t.dirty];a.push(y(e).dirty),a.push(function(e){const t=e,a={dirty:{}},n=t.regional?t.distributionPolicy.zones:[t.zone],{credentialsKeyedByAccount:r}=t.backingData,{locationToInstanceTypesMap:l}=r[t.credentials];if(n.every(e=>!e))return a;let o=i.getAvailableTypesForLocations(l,n);o=function(e){const t=ve.map(e,e=>{const t=e.split("-");return{class:t[0],group:t[1],index:Number(t[2])||0}}),a=ve.sortBy(t,["class","group","index"]);return ve.map(a,e=>e.class+"-"+e.group+(e.index?"-"+e.index:""))}(o);const s=t.instanceType;ve.every([s,!ve.includes(s,"custom-"),!ve.includes(o,s)])&&(a.dirty.instanceType=t.instanceType,t.instanceType=null);return t.backingData.filtered.instanceTypes=o,a}(e).dirty),Object.assign(...a)}else e.backingData.filtered.instanceTypes=[];return t}function f(e){const t={dirty:{}},a=e.backingData.filtered,n=e.backingData.credentialsKeyedByAccount[e.credentials].locationToCpuPlatformsMap;a.cpuPlatforms=["(Automatic)"];const r=e.regional?e.region:e.zone;return ve.has(n,r)&&(a.cpuPlatforms=ve.concat(a.cpuPlatforms,n[r])),ve.includes(a.cpuPlatforms,e.minCpuPlatform)||(delete e.minCpuPlatform,t.dirty.minCpuPlatform=!0),t}function y(e){const t=e,a={dirty:{}};let n=ve.get(t,"viewState.customInstance.vCpuCount");const r=ve.get(t,"viewState.customInstance.instanceFamily"),i=ve.get(t,"viewState.customInstance.memory"),o=ve.get(t,"viewState.customInstance.extendedMemory"),{zone:s,regional:c,region:d}=t,{locationToInstanceTypesMap:u}=t.backingData.credentialsKeyedByAccount[t.credentials],m=c?d:s;return m?((s||c)&&ve.set(t,"backingData.customInstanceTypes.vCpuList",l.generateValidVCpuListForLocation(m,u)),n&&l.vCpuCountForLocationIsValid(r,n,m,u)||(n=ve.get(t,"backingData.customInstanceTypes.vCpuList[0]"),ve.set(t,"viewState.customInstance.vCpuCount",n)),ve.set(t,"backingData.customInstanceTypes.memoryList",l.generateValidMemoryListForVCpuCount(r,n)),ve.every([i,n,!l.memoryIsValid(r,i,n,o)])&&(ve.set(t,"viewState.customInstance.memory",void 0),a.dirty.instanceType=t.instanceType,t.instanceType=null),ve.set(t,"backingData.customInstanceTypes.instanceFamilyList",l.generateValidInstanceFamilyList()),a):a}function k(e){const t={dirty:{}},a=Gr.getAvailableAccelerators(e);ve.set(e,["viewState","acceleratorTypes"],a),t.dirty.acceleratorTypes=!0;const n=ve.get(e,"acceleratorConfigs",[]);return n.length>0&&(e.acceleratorConfigs=n.filter(e=>!!a.find(t=>t.name===e.acceleratorType)),0===e.acceleratorConfigs.length&&delete e.acceleratorConfigs),t}function E(e){e.image=e.viewState.imageId;const t={dirty:{}};return e.credentials!==e.viewState.lastImageAccount&&(e.viewState.lastImageAccount=e.credentials,ve.chain(e.backingData.allImages).find({imageName:e.image}).value()||(e.image=null,t.dirty.imageName=!0)),t}function C(e){const t={dirty:{}},a=e.backingData.filtered;if(null===e.region)return t;const n=e.backingData.credentialsKeyedByAccount[e.credentials].regions;return ve.isArray(n)?(a.zones=ve.find(n,{name:e.region}).zones,a.truncatedZones=ve.takeRight(a.zones.sort(),3)):a.zones=n[e.region],ve.chain(a.zones).includes(e.zone).value()||(delete e.zone,e.regional||(t.dirty.zone=!0)),t}function S(e){return Pr(ve.filter(e.backingData.healthChecks,{account:e.credentials}))}function N(e){const t={dirty:{}},a=e.backingData.filtered;return null===e.credentials||(a.healthChecks=S(e),ve.has(e,"autoHealingPolicy.healthCheck")&&!ve.chain(a.healthChecks).map("selfLink").includes(e.autoHealingPolicy.healthCheckUrl).value()?(delete e.autoHealingPolicy.healthCheck,t.dirty.autoHealingPolicy=!0):t.dirty.autoHealingPolicy=null),t}function T(e,t){return t.region===e.region||"global"===t.region}function A(e){const t={dirty:{}},a=e.loadBalancers,n=d.normalizeLoadBalancerSet(function(e){return ve.chain(e.backingData.loadBalancers).map("accounts").flattenDeep().filter({name:e.credentials}).map("regions").flattenDeep().map("loadBalancers").flattenDeep().filter(ve.curry(T)(e)).uniq().value()}(e));if(e.backingData.filtered.loadBalancerIndex=ve.keyBy(n,"name"),e.backingData.filtered.loadBalancers=ve.map(n,"name"),a&&e.loadBalancers){e.loadBalancers=o.normalizeLoadBalancerNamesForAccount(e.loadBalancers,e.credentials,n);const a=ve.intersection(e.backingData.filtered.loadBalancers,e.loadBalancers),r=ve.xor(a,e.loadBalancers);e.loadBalancers=a,function(e){const t=e.backendServiceMetadata,a=e.backingData.filtered.loadBalancerIndex,n=e.loadBalancers.reduce((e,n)=>(o.isHttpLoadBalancer(a[n])&&(e[n]=ve.intersection(a[n].backendServices,t)),e),{});Object.keys(n).length>0&&(e.backendServices=n)}(e),r.length&&(t.dirty.loadBalancers=r)}return t}function w(e,a){return t.clearCache("healthChecks"),s.listHealthChecks().then(function(t){e.backingData.healthChecks=t,a||N(e)})}function P(e){const t={dirty:{}},a=e.backingData.filtered;return null===e.region||(a.subnets=ve.chain(e.backingData.subnets).filter({account:e.credentials,network:e.network,region:e.region}).map("id").value(),ve.chain(a.subnets).includes(e.subnet).value()||(e.subnet="",t.dirty.subnet=!0)),t}function I(e){let t=e.backingData.securityGroups[e.credentials]||{gce:{}};return t=ve.filter(t.gce.global,function(t){return t.network===e.network}),ve.chain(t).sortBy("name").value()}function M(e){const t={dirty:{}},a=e.backingData.filtered.securityGroups,n=I(e);if(a&&e.securityGroups){const r=e.securityGroups.map(function(e){const t=ve.chain(a).find({id:e}).value();return t?t.id:e}),i=e.securityGroups.map(function(e){const t=ve.chain(a).find({id:e}).value();return t?t.id:null}).map(function(e){return ve.chain(n).find({id:e}).value()}).filter(function(e){return e});e.securityGroups=ve.map(i,"id");const l=ve.xor(r,e.securityGroups);l.length&&(t.dirty.securityGroups=l)}e.backingData.filtered.securityGroups=ve.filter(n,function(e){return!ve.isEmpty(e.targetTags)}),e.implicitSecurityGroups=ve.filter(n,function(e){return ve.isEmpty(e.targetTags)});const r=(i=e.network)&&i.includes("/")?i.split("/")[0]+"/":"";var i;const l=ve.map(e.securityGroups,e=>e.startsWith(r)?e:r+e);return e.securityGroups=ve.difference(l,ve.map(e.implicitSecurityGroups,"id")),t}function D(e,a){return t.clearCache("securityGroups"),n.getAllSecurityGroups().then(function(t){e.backingData.securityGroups=t,a||M(e)})}function G(e){return ve.map(ve.filter(e.backingData.networks,{account:e.credentials}),"id")}return{configureCommand:function(t,a){return e.all([p.getCredentialsKeyedByAccount("gce"),n.getAllSecurityGroups(),v.listNetworksByProvider("gce"),g.listSubnetsByProvider("gce"),r.listLoadBalancers("gce"),(l=a.credentials,_e.findImages({account:l,provider:"gce",q:"*"})),i.getAllTypesByRegion(),e.resolve(ve.cloneDeep(u)),e.resolve(ve.cloneDeep(m)),s.listHealthChecks(),p.listAccounts("gce")]).then(function([t,n,r,i,l,o,s,d,u,m,p]){const g={credentialsKeyedByAccount:t,securityGroups:n,networks:r,subnets:i,loadBalancers:l,allImages:o,instanceTypes:s,persistentDiskTypes:d,authScopes:u,healthChecks:m,accounts:p};let T=e.resolve(null),x=e.resolve(null),R=e.resolve(null);if(g.filtered={},g.distributionPolicyTargetShapes=Br.slice(),a.backingData=g,E(a),a.securityGroups&&a.securityGroups.length){const e=ve.map(I(a),"id");ve.intersection(a.securityGroups,e).length<a.securityGroups.length&&(T=D(a,!0))}if(a.network){G(a).includes(a.network)||(x=function(e){v.listNetworksByProvider("gce").then(function(t){e.backingData.networks=t})}(a))}if(a.autoScalingPolicy&&(a.enableAutoScaling=!0),a.autoHealingPolicy&&(a.enableAutoHealing=!0),ve.has(a,"autoHealingPolicy.healthCheck")){const e=S(a);ve.chain(e).map("selfLink").includes(a.autoHealingPolicy.healthCheckUrl).value()||(R=w(a,!0))}return e.all([T,x,R]).then(()=>{var e;c.register(a),(e=a).regionalChanged=function(e){const t={dirty:{}},a=e.backingData.filtered,n=Ga.defaults;return e.regional?(e.zone=null,h(e)):e.zone||(e.region===n.region?e.zone=n.zone:e.zone=a.zones[0],Object.assign(t.dirty,C(e).dirty)),e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),t},e.regionChanged=function(e){const t={dirty:{}},a=e.backingData.filtered;return Object.assign(t.dirty,P(e).dirty),e.region?(Object.assign(t.dirty,b(e).dirty),Object.assign(t.dirty,C(e).dirty),Object.assign(t.dirty,f(e).dirty),Object.assign(t.dirty,A(e).dirty),Object.assign(t.dirty,E(e).dirty)):a.zones=null,e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),t},e.credentialsChanged=function(e){const t={dirty:{}},a=e.backingData;if(e.credentials){const n=a.credentialsKeyedByAccount[e.credentials].regions;ve.isArray(n)?a.filtered.regions=ve.map(n,"name"):a.filtered.regions=ve.keys(n),a.filtered.regions.includes(e.region)?Object.assign(t.dirty,e.regionChanged(e).dirty):(e.region=null,t.dirty.region=!0),a.filtered.networks=G(e),a.filtered.networks.includes(e.network)?Object.assign(t.dirty,e.networkChanged(e).dirty):(e.network=null,t.dirty.network=!0),Object.assign(t.dirty,N(e).dirty),Object.assign(t.dirty,b(e).dirty),h(e)}else e.region=null;return e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),t},e.networkChanged=function(e){const t={dirty:{}};return e.viewState.autoCreateSubnets=ve.chain(e.backingData.networks).filter({account:e.credentials,id:e.network}).map("autoCreateSubnets").head().value(),e.viewState.subnets=ve.chain(e.backingData.networks).filter({account:e.credentials,id:e.network}).map("subnets").head().value(),Object.assign(t.dirty,P(e).dirty),Object.assign(t.dirty,M(e).dirty),e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),t},e.zoneChanged=function(e){const t={dirty:{}};return void 0!==e.zone||e.regional||(t.dirty.zone=!0),e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),Object.assign(e.viewState.dirty,b(e).dirty),Object.assign(e.viewState.dirty,f(e).dirty),Object.assign(e.viewState.dirty,k(e).dirty),t},e.selectZonesChanged=function(e){const t={dirty:{}};return e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),Object.assign(e.viewState.dirty,k(e).dirty),t},e.customInstanceChanged=function(e){const t={dirty:{}};return e.viewState.dirty=e.viewState.dirty||{},Object.assign(t,e.viewState.dirty,y(e).dirty),t}})});var l},configureInstanceTypes:b,configureImages:E,configureZones:C,configureSubnets:P,configureLoadBalancerOptions:A,refreshLoadBalancers:function(e,t){return r.listLoadBalancers("gce").then(function(a){e.backingData.loadBalancers=a,t||A(e)})},refreshSecurityGroups:D,refreshInstanceTypes:function(e){return t.clearCache("instanceTypes"),i.getAllTypesByRegion().then(function(t){e.backingData.instanceTypes=t,b(e)})},refreshHealthChecks:w}}}function Lr(e,t,a,n){const r=e.map(e=>({value:e,unresolved:!1}));return t&&!e.some(e=>a(e)===t)&&r.push({value:n(t),unresolved:!0}),r}function zr(e){var t,a,n,r,i,l,o,s,c;const d={};return(null==(t=e.application)?void 0:t.trim())||(d.application="Application required."),(null==(a=e.credentials)?void 0:a.trim())||(d.credentials="Account required."),(null==(n=e.region)?void 0:n.trim())||(d.region="Region required."),e.regional||(null==(r=e.zone)?void 0:r.trim())||(d.zone="Zone required."),e.regional&&e.selectZones&&!(null==(l=null==(i=e.distributionPolicy)?void 0:i.zones)?void 0:l.length)&&(d.distributionPolicy={zones:"At least one zone required."}),e.viewState.disableImageSelection||(null==(o=e.image)?void 0:o.trim())||(d.image="Image required."),null!==(null==(s=e.capacity)?void 0:s.desired)&&void 0!==(null==(c=e.capacity)?void 0:c.desired)||(d.capacity={desired:"Desired capacity required."}),d}((e,t,a)=>{t in e?Rr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a})(Fr,"requiresDeckRuntimeServices"+"",!0);const Or={dirty:{}};class Hr{constructor(e,t){this.commandBuilder=e,this.configurationService=t}buildNewServerGroupCommand(e,t){return this.commandBuilder.buildNewServerGroupCommand(e,t)}buildNewServerGroupCommandForPipeline(e,t){return this.commandBuilder.buildNewServerGroupCommandForPipeline(e,t)}buildServerGroupCommandFromExisting(e,t,a){return this.commandBuilder.buildServerGroupCommandFromExisting(e,t,a)}buildServerGroupCommandFromPipeline(e,t,a,n){return this.commandBuilder.buildServerGroupCommandFromPipeline(e,t,a,n)}async configureCommand(e,t){const a=Te(t);return await this.configurationService.configureCommand(e,a),a}applyCommandHandler(e,t){return this.applyUpdate(e,e=>{var a;return null==(a=e[t])?void 0:a.call(e,e)})}applyConfigurationUpdate(e,t){return this.applyUpdate(e,e=>this.configurationService[t](e))}applyConfigurationRefresh(e,t,a){return this.applyUpdate(e,async e=>("refreshInstanceTypes"===t?await this.configurationService.refreshInstanceTypes(e):await this.configurationService[t](e,a),Or))}async applyUpdate(e,t){var a;const n=Te(e),r=await t(n)||Or;return n.viewState={...n.viewState,dirty:{...n.viewState.dirty,...r.dirty}},null==(a=n.processCommandUpdateResult)||a.call(n,r),{command:n,result:r}}}function Ur(e){return{command:e,fieldOrigins:{},formikValues:e,requestGeneration:0}}class $r extends De.Component{constructor(){super(...arguments),this.commandState=this.props.commandState||Ur(this.props.formik.values),this.requestGeneration=0,this.isUnmounted=!1}get adapter(){if(!this.props.adapter)throw new Error("GCE server group wizard pages require an adapter owned by the wizard modal");return this.props.adapter}validate(e){return{}}componentWillUnmount(){this.isUnmounted=!0,this.requestGeneration++}configureCommand(){return this.runLatestCommandRequest(this.props.formik.values,e=>this.adapter.configureCommand(this.props.app,e))}applyCommandHandler(e){return this.runLatestCommandRequest(this.props.formik.values,async t=>(await this.adapter.applyCommandHandler(t,e)).command)}applyConfigurationUpdate(e){return this.runLatestCommandRequest(this.props.formik.values,async t=>(await this.adapter.applyConfigurationUpdate(t,e)).command)}applyConfigurationRefresh(e,t){return this.runLatestCommandRequest(this.props.formik.values,async a=>(await this.adapter.applyConfigurationRefresh(a,e,t)).command)}async runLatestCommandRequest(e,t){var a,n,r,i;const l=++this.requestGeneration;this.syncFormikValues();const o=++this.commandState.requestGeneration,s=qr(this.props.formik.values,e,this.commandState.command,this.commandState.fieldOrigins,{generation:o,source:"user"},!0);this.commandState.command=s,null==(n=(a=this.props).onLoadingChanged)||n.call(a,!0);try{const e=await t(s);if(this.isUnmounted)return;this.syncFormikValues();const a=this.commandState.command,n=qr(s,e,a,this.commandState.fieldOrigins,{generation:o,source:"result"});return ye(n,a)&&o!==this.commandState.requestGeneration||(this.commandState.command=n,this.props.formik.setValues(n)),n}finally{this.isUnmounted||l!==this.requestGeneration||null==(i=(r=this.props).onLoadingChanged)||i.call(r,!1)}}syncFormikValues(){const{formikValues:e}=this.commandState;e!==this.props.formik.values&&(this.commandState.command=qr(e,this.props.formik.values,this.commandState.command,this.commandState.fieldOrigins,{generation:this.commandState.requestGeneration,source:"user"}),this.commandState.formikValues=this.props.formik.values)}}function qr(e,t,a,n,r,i=!1){return _r(e,t,a,n,r,[],i)}function _r(e,t,a,n,r,i,l){if(ye(t,e))return a;if(ye(t,a))return l&&Vr(e,t,n,r,i),a;if(Ie(t)&&(Ie(e)||void 0===e)&&(Ie(a)||void 0===a)){const o=e||{},s=a||{},c={...s};return new Set([...Object.keys(o),...Object.keys(t)]).forEach(e=>{const a=[...i,e];Object.prototype.hasOwnProperty.call(t,e)?c[e]=_r(o[e],t[e],s[e],n,r,a,l):(ye(s[e],o[e])||jr(n,r,a))&&(delete c[e],Kr(n,r,a))}),c}return ye(a,e)||jr(n,r,i)?(Kr(n,r,i),t):a}function jr(e,t,a){if("user"===t.source)return!0;const n=function(e,t){for(let a=t.length;a>=0;a--){const n=e[Zr(t.slice(0,a))];if(n)return n}return}(e,a);return"result"===(null==n?void 0:n.source)&&t.generation>n.generation}function Vr(e,t,a,n,r){if(!ye(e,t)){if(Ie(t)&&(Ie(e)||void 0===e)){const i=e||{};return void new Set([...Object.keys(i),...Object.keys(t)]).forEach(e=>{const l=[...r,e];Object.prototype.hasOwnProperty.call(t,e)?Vr(i[e],t[e],a,n,l):Kr(a,n,l)})}Kr(a,n,r)}}function Kr(e,t,a){const n=Zr(a),r=`${n}\0`;Object.keys(e).forEach(t=>{t.startsWith(r)&&delete e[t]}),e[n]=t}function Zr(e){return e.join("\0")}function Wr(e,t){return Array.from(new Set([...e,t].filter(Boolean)))}function Yr(e={}){return Object.keys(e).some(e=>!e.trim())}function Xr(e={}){return Object.values(e).some(e=>"string"!=typeof e||!e.trim())}function Jr(e){return"createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode}function Qr(e){return"string"==typeof e&&/^\s*\$\{.+\}\s*$/.test(e)}function ei(e){return Qr(e)?e:Number(e)}function ti(e,t,a,n=Number.MAX_SAFE_INTEGER){if(Jr(a)&&Qr(e))return!0;const r=Number(e);return Number.isFinite(r)&&Number.isInteger(r)&&r>=t&&r<=n}function ai(e){return(e.disks||[]).filter(e=>"local-ssd"===e.type)}function ni(e){return(e.disks||[]).filter(e=>"local-ssd"!==e.type)}function ri(e,t){return e&&De.createElement("span",{className:"help-block",id:t,role:"alert"},e)}class ii extends $r{constructor(){super(...arguments),this.setField=(e,t)=>{this.props.formik.setFieldValue(e,t)},this.updateDisk=(e,t)=>{const a=this.props.formik.values,n=ni(a);this.setField("disks",n.map((a,n)=>n===e?{...a,...t}:a).concat(ai(a)))},this.removeDisk=e=>{const t=this.props.formik.values;this.setField("disks",ni(t).filter((t,a)=>a!==e).concat(ai(t)))},this.updateLocalSsdCount=e=>{const t=this.props.formik.values,a=ai(t).slice(0,e);for(;a.length<e;)a.push({type:"local-ssd",sizeGb:375});this.setField("disks",ni(t).concat(a))},this.updateAccelerator=(e,t)=>{const a=this.props.formik.values.acceleratorConfigs||[];this.setField("acceleratorConfigs",a.map((a,n)=>n===e?{...a,...t}:a))},this.removeAccelerator=e=>{this.setField("acceleratorConfigs",(this.props.formik.values.acceleratorConfigs||[]).filter((t,a)=>a!==e))},this.updateTag=(e,t)=>{const a=this.props.formik.values.tags||[];this.setField("tags",a.map((a,n)=>n===e?"string"==typeof a?t:{...a,value:t}:a))},this.removeTag=e=>{this.setField("tags",(this.props.formik.values.tags||[]).filter((t,a)=>a!==e))},this.removeAuthScope=e=>{this.setField("authScopes",(this.props.formik.values.authScopes||[]).filter((t,a)=>a!==e))},this.setPreemptible=e=>{this.setField("preemptible",e),this.setField("automaticRestart",!e),this.setField("onHostMaintenance",e?"TERMINATE":"MIGRATE")}}validate(e){const t={};return ni(e).some(t=>!t.type||!ti(t.sizeGb,10,e,65536))&&(t.disks="Every persistent disk requires a type and an integer size between 10 and 65536 GB."),(e.acceleratorConfigs||[]).some(t=>!function(e,t){var a;if(!e.acceleratorType||!ti(e.acceleratorCount,1,t))return!1;if(Jr(t)&&Qr(e.acceleratorCount))return!0;const n=((null==(a=t.viewState)?void 0:a.acceleratorTypes)||[]).find(t=>t.name===e.acceleratorType);return!n||n.availableCardCounts.includes(Number(e.acceleratorCount))}(t,e))&&(t.acceleratorConfigs="Every accelerator requires a type and a supported positive integer count."),Yr(e.instanceMetadata)&&(t.instanceMetadata="Metadata keys cannot be empty."),(Yr(e.labels)||Xr(e.labels))&&(t.labels=Yr(e.labels)?"Label keys cannot be empty.":"Label values cannot be empty."),(Yr(e.resourceManagerTags)||Xr(e.resourceManagerTags))&&(t.resourceManagerTags=Yr(e.resourceManagerTags)?"Resource Manager tag keys cannot be empty.":"Resource Manager tag values cannot be empty."),(e.tags||[]).some(e=>{var t;return!(null==(t="string"==typeof e?e:e.value)?void 0:t.trim())})&&(t.tags="Network tags cannot be empty."),(e.authScopes||[]).some(e=>!e.trim())&&(t.authScopes="Auth scopes cannot be empty."),e.enableConfidentialCompute&&"confidentialInstanceType"in e&&!e.confidentialInstanceType&&(t.confidentialInstanceType="Confidential instance type required."),t}booleanRadios(e,t,a){const n=t.replace(/([A-Z])/g,"-$1").toLowerCase();return De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-5 sm-label-right"},De.createElement("b",null,e)),De.createElement("div",{className:"col-md-2 radio"},De.createElement("label",null,De.createElement("input",{checked:!0===a,"data-testid":`${n}-yes`,name:t,onChange:()=>this.setField(t,!0),type:"radio"})," ","Yes")),De.createElement("div",{className:"col-md-2 radio"},De.createElement("label",null,De.createElement("input",{checked:!1===a,"data-testid":`${n}-no`,name:t,onChange:()=>this.setField(t,!1),type:"radio"})," ","No")))}render(){var e,t,a,n,r,i,l,o;const{values:s}=this.props.formik,c=this.validate(s),d=ni(s),u=ai(s),m=s.acceleratorConfigs||[],p=(null==(e=s.viewState)?void 0:e.acceleratorTypes)||[],h=s.tags||[],g=s.authScopes||[],v=Wr((null==(a=null==(t=s.backingData)?void 0:t.filtered)?void 0:a.cpuPlatforms)||[],s.minCpuPlatform),b="enableConfidentialCompute"in s||"confidentialInstanceType"in s,f=Jr(s);return De.createElement("div",{className:"container-fluid form-horizontal","data-testid":"gce-advanced-settings-page"},De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-5 control-label"},"Minimum CPU Platform ",De.createElement(X,{id:"gce.serverGroup.minCpuPlatform"})),De.createElement("div",{className:"col-md-6"},De.createElement("select",{className:"form-control input-sm","data-testid":"minimum-cpu-platform",onChange:e=>this.setField("minCpuPlatform",e.target.value),value:s.minCpuPlatform||""},v.map(e=>De.createElement("option",{key:e,value:e},e))))),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"sm-label-left"},De.createElement("b",null,"Storage")),De.createElement("label",{className:"col-md-5 control-label",htmlFor:"gce-local-ssd-count"},"Number of Local SSD Disks"),De.createElement("div",{className:"col-md-2"},De.createElement("input",{"aria-describedby":c.disks?"gce-advanced-disks-error":void 0,"aria-invalid":Boolean(c.disks),className:"form-control input-sm","data-testid":"local-ssd-count",disabled:!1===(null==(i=null==(r=null==(n=s.viewState)?void 0:n.instanceTypeDetails)?void 0:r.storage)?void 0:i.localSSDSupported),id:"gce-local-ssd-count",max:8,min:0,onChange:e=>this.updateLocalSsdCount(Number(e.target.value)),type:"number",value:u.length}))),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"sm-label-left"},De.createElement("b",null,"Persistent Disks")),De.createElement("table",{className:"table table-condensed packed tags"},De.createElement("thead",null,De.createElement("tr",null,De.createElement("th",null,"Type"),De.createElement("th",null,"Size (GB)"),De.createElement("th",null,"Source image"),De.createElement("th",null))),De.createElement("tbody",null,d.map((e,t)=>{var a,n;const r=Wr((null==(a=s.backingData)?void 0:a.persistentDiskTypes)||[],e.type);return De.createElement("tr",{key:t},De.createElement("td",null,De.createElement("select",{"aria-describedby":c.disks?"gce-advanced-disks-error":void 0,"aria-invalid":Boolean(c.disks),"aria-label":`Disk type ${t+1}`,className:"form-control input-sm","data-testid":`disk-type-${t}`,onChange:e=>this.updateDisk(t,{type:e.target.value}),required:!0,value:e.type||""},r.map(e=>De.createElement("option",{key:e,value:e},e)))),De.createElement("td",null,De.createElement("input",{"aria-describedby":c.disks?"gce-advanced-disks-error":void 0,"aria-invalid":Boolean(c.disks),"aria-label":`Disk size ${t+1}`,className:"form-control input-sm","data-testid":`disk-size-${t}`,max:f?void 0:65536,min:f?void 0:10,onChange:e=>this.updateDisk(t,{sizeGb:ei(e.target.value)}),required:!0,type:f?"text":"number",value:null!=(n=e.sizeGb)?n:""})),De.createElement("td",null,De.createElement("input",{"aria-label":`Disk source image ${t+1}`,className:"form-control input-sm",onChange:e=>this.updateDisk(t,{sourceImage:e.target.value||void 0}),type:"text",value:e.sourceImage||""})),De.createElement("td",null,De.createElement("button",{"aria-label":`Remove disk ${t+1}`,className:"btn btn-link","data-testid":`remove-disk-${t}`,onClick:()=>this.removeDisk(t),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-trash"}))))})),De.createElement("tfoot",null,De.createElement("tr",null,De.createElement("td",{colSpan:4},De.createElement("button",{className:"btn btn-block btn-sm add-new","data-testid":"add-disk",onClick:()=>this.setField("disks",[...d,{type:"pd-ssd",sizeGb:10},...u]),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add disk"))))),ri(c.disks,"gce-advanced-disks-error")),(m.length>0||p.length>0)&&De.createElement("div",{className:"form-group"},De.createElement("div",{className:"sm-label-left"},De.createElement("b",null,"Accelerators")," ",De.createElement(X,{id:"gce.serverGroup.accelerator"})),De.createElement("table",{className:"table table-condensed packed tags"},De.createElement("thead",null,De.createElement("tr",null,De.createElement("th",null,"Type"),De.createElement("th",null,"Count"),De.createElement("th",null))),De.createElement("tbody",null,m.map((e,t)=>{var a,n,r;const i=p.find(t=>t.name===e.acceleratorType),l=Wr(p.map(e=>e.name),e.acceleratorType),o=Array.from(new Set([...(null==i?void 0:i.availableCardCounts)||[],e.acceleratorCount].filter(Boolean)));return De.createElement("tr",{key:t},De.createElement("td",null,De.createElement("select",{"aria-describedby":c.acceleratorConfigs?"gce-advanced-accelerators-error":void 0,"aria-invalid":Boolean(c.acceleratorConfigs),"aria-label":`Accelerator type ${t+1}`,className:"form-control input-sm","data-testid":`accelerator-type-${t}`,onChange:e=>this.updateAccelerator(t,{acceleratorType:e.target.value}),required:!0,value:e.acceleratorType||""},l.map(e=>{var t;return De.createElement("option",{key:e,value:e},(null==(t=p.find(t=>t.name===e))?void 0:t.description)||e)}))),De.createElement("td",null,f?De.createElement("input",{"aria-describedby":c.acceleratorConfigs?"gce-advanced-accelerators-error":void 0,"aria-invalid":Boolean(c.acceleratorConfigs),"aria-label":`Accelerator count ${t+1}`,className:"form-control input-sm","data-testid":`accelerator-count-${t}`,onChange:e=>this.updateAccelerator(t,{acceleratorCount:ei(e.target.value)}),required:!0,type:"text",value:null!=(a=e.acceleratorCount)?a:""}):o.length?De.createElement("select",{"aria-describedby":c.acceleratorConfigs?"gce-advanced-accelerators-error":void 0,"aria-invalid":Boolean(c.acceleratorConfigs),"aria-label":`Accelerator count ${t+1}`,className:"form-control input-sm","data-testid":`accelerator-count-${t}`,onChange:e=>this.updateAccelerator(t,{acceleratorCount:ei(e.target.value)}),required:!0,value:null!=(n=e.acceleratorCount)?n:""},o.map(e=>De.createElement("option",{key:e,value:e},e))):De.createElement("input",{"aria-describedby":c.acceleratorConfigs?"gce-advanced-accelerators-error":void 0,"aria-invalid":Boolean(c.acceleratorConfigs),"aria-label":`Accelerator count ${t+1}`,className:"form-control input-sm","data-testid":`accelerator-count-${t}`,min:1,onChange:e=>this.updateAccelerator(t,{acceleratorCount:ei(e.target.value)}),required:!0,type:"number",value:null!=(r=e.acceleratorCount)?r:""})),De.createElement("td",null,De.createElement("button",{"aria-label":`Remove accelerator ${t+1}`,className:"btn btn-link","data-testid":`remove-accelerator-${t}`,onClick:()=>this.removeAccelerator(t),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-trash"}))))})),De.createElement("tfoot",null,De.createElement("tr",null,De.createElement("td",{colSpan:3},De.createElement("button",{className:"btn btn-block btn-sm add-new","data-testid":"add-accelerator",disabled:!p.length,onClick:()=>{var e;const t=p[0];this.setField("acceleratorConfigs",[...m,{acceleratorType:t.name,acceleratorCount:(null==(e=t.availableCardCounts)?void 0:e[0])||1}])},type:"button"},De.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add accelerator"))))),ri(c.acceleratorConfigs,"gce-advanced-accelerators-error")),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"sm-label-left",htmlFor:"gce-user-data"},"User Data ",De.createElement(X,{id:"gce.serverGroup.userData"})),De.createElement("textarea",{className:"form-control",id:"gce-user-data",onChange:e=>this.setField("userData",e.target.value),rows:3,value:s.userData||""})),De.createElement("div",{"aria-describedby":c.instanceMetadata?"gce-advanced-instance-metadata-error":void 0,"aria-invalid":Boolean(c.instanceMetadata),"aria-label":"Custom Metadata",className:"form-group",role:"group"},De.createElement(R,{addButtonLabel:"Add New Metadata",allowEmpty:!0,keyLabel:"Metadata key",label:"Custom Metadata",model:s.instanceMetadata||{},onChange:e=>this.setField("instanceMetadata",e),valueLabel:"Metadata value"}),ri(c.instanceMetadata,"gce-advanced-instance-metadata-error")),De.createElement("div",{"aria-describedby":c.labels?"gce-advanced-labels-error":void 0,"aria-invalid":Boolean(c.labels),"aria-label":"Labels",className:"form-group",role:"group"},De.createElement(R,{addButtonLabel:"Add New Label",allowEmpty:!0,keyLabel:"Label key",label:"Labels",model:s.labels||{},onChange:e=>this.setField("labels",e),valueLabel:"Label value"}),ri(c.labels,"gce-advanced-labels-error")),De.createElement("div",{"aria-describedby":c.resourceManagerTags?"gce-advanced-resource-manager-tags-error":void 0,"aria-invalid":Boolean(c.resourceManagerTags),"aria-label":"Resource Manager Tags",className:"form-group",role:"group"},De.createElement(R,{addButtonLabel:"Add New Resource Manager Tag",allowEmpty:!1,keyLabel:"Tag key",label:"Resource Manager Tags",model:s.resourceManagerTags||{},onChange:e=>this.setField("resourceManagerTags",e),valueLabel:"Tag value"}),ri(c.resourceManagerTags,"gce-advanced-resource-manager-tags-error")),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"sm-label-left"},De.createElement("b",null,"Network Tags")),De.createElement("table",{className:"table table-condensed packed tags"},De.createElement("tbody",null,h.map((e,t)=>De.createElement("tr",{key:t},De.createElement("td",null,De.createElement("input",{"aria-describedby":c.tags?"gce-advanced-network-tags-error":void 0,"aria-invalid":Boolean(c.tags),"aria-label":`Network tag ${t+1}`,className:"form-control input-sm",onChange:e=>this.updateTag(t,e.target.value),required:!0,value:"string"==typeof e?e:e.value||""})),De.createElement("td",null,De.createElement("button",{"aria-label":`Remove network tag ${t+1}`,className:"btn btn-link","data-testid":`remove-network-tag-${t}`,onClick:()=>this.removeTag(t),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-trash"})))))),De.createElement("tfoot",null,De.createElement("tr",null,De.createElement("td",{colSpan:2},De.createElement("button",{className:"btn btn-block btn-sm add-new","data-testid":"add-network-tag",onClick:()=>this.setField("tags",[...h,{value:""}]),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add network tag"))))),ri(c.tags,"gce-advanced-network-tags-error")),De.createElement("fieldset",{className:"form-group"},De.createElement("legend",{className:"sm-label-left"},"Shielded VM ",De.createElement(X,{id:"gce.serverGroup.shieldedInstanceConfig"})),De.createElement("div",{className:"col-md-9 checkbox"},De.createElement("label",null,De.createElement("input",{checked:Boolean(s.enableSecureBoot),onChange:e=>this.setField("enableSecureBoot",e.target.checked),type:"checkbox"})," ","Turn on Secure Boot")),De.createElement("div",{className:"col-md-9 checkbox"},De.createElement("label",null,De.createElement("input",{checked:Boolean(s.enableVtpm),"data-testid":"enable-vtpm",onChange:e=>{this.setField("enableVtpm",e.target.checked),e.target.checked||this.setField("enableIntegrityMonitoring",!1)},type:"checkbox"})," ","Turn on vTPM")),De.createElement("div",{className:"col-md-9 checkbox"},De.createElement("label",null,De.createElement("input",{checked:Boolean(s.enableIntegrityMonitoring),disabled:!s.enableVtpm,onChange:e=>this.setField("enableIntegrityMonitoring",e.target.checked),type:"checkbox"})," ","Turn on Integrity Monitoring"))),b&&De.createElement("fieldset",{className:"form-group"},De.createElement("legend",{className:"sm-label-left"},"Confidential VM"),"enableConfidentialCompute"in s&&De.createElement("div",{className:"col-md-9 checkbox","data-testid":"enable-confidential-compute"},De.createElement("label",null,De.createElement("input",{checked:Boolean(s.enableConfidentialCompute),onChange:e=>this.setField("enableConfidentialCompute",e.target.checked),type:"checkbox"})," ","Enable Confidential Compute")),"confidentialInstanceType"in s&&De.createElement("div",{className:"col-md-9"},De.createElement("label",{htmlFor:"gce-confidential-instance-type"},"Confidential instance type"),De.createElement("select",{"aria-describedby":c.confidentialInstanceType?"gce-advanced-confidential-instance-type-error":void 0,"aria-invalid":Boolean(c.confidentialInstanceType),className:"form-control input-sm",id:"gce-confidential-instance-type",onChange:e=>this.setField("confidentialInstanceType",e.target.value),required:Boolean(s.enableConfidentialCompute),value:s.confidentialInstanceType||""},De.createElement("option",{value:""},"Select..."),Wr((null==(l=s.backingData)?void 0:l.confidentialInstanceTypes)||[],s.confidentialInstanceType).map(e=>De.createElement("option",{key:e,value:e},e))),ri(c.confidentialInstanceType,"gce-advanced-confidential-instance-type-error"))),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-5 sm-label-right"},De.createElement("b",null,"Preemptibility")),De.createElement("div",{className:"col-md-2 radio"},De.createElement("label",null,De.createElement("input",{checked:!s.preemptible,"data-testid":"preemptible-off",name:"preemptible",onChange:()=>this.setPreemptible(!1),type:"radio"})," ","Off")),De.createElement("div",{className:"col-md-2 radio"},De.createElement("label",null,De.createElement("input",{checked:Boolean(s.preemptible),"data-testid":"preemptible-on",name:"preemptible",onChange:()=>this.setPreemptible(!0),type:"radio"})," ","On"))),this.booleanRadios("Automatic Restart","automaticRestart",Boolean(s.automaticRestart)),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-5 control-label"},"On Host Maintenance"),De.createElement("div",{className:"col-md-4"},De.createElement("select",{className:"form-control input-sm",onChange:e=>this.setField("onHostMaintenance",e.target.value),value:s.onHostMaintenance||""},De.createElement("option",{value:"MIGRATE"},"Migrate"),De.createElement("option",{value:"TERMINATE"},"Terminate")))),this.booleanRadios("Associate Public IP Address","associatePublicIpAddress",!1!==s.associatePublicIpAddress),this.booleanRadios("Can IP Forward","canIpForward",Boolean(s.canIpForward)),De.createElement("div",{className:"form-group","data-testid":"service-account"},De.createElement("label",{className:"col-md-5 control-label",htmlFor:"gce-service-account"},"Service Account"),De.createElement("div",{className:"col-md-6"},De.createElement("input",{className:"form-control input-sm",id:"gce-service-account",onChange:e=>this.setField("serviceAccountEmail",e.target.value),type:"text",value:s.serviceAccountEmail||""}))),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"sm-label-left"},De.createElement("b",null,"Auth Scopes")),De.createElement("table",{className:"table table-condensed packed tags"},De.createElement("tbody",null,g.map((e,t)=>De.createElement("tr",{key:t,"data-testid":`auth-scope-${t}`},De.createElement("td",null,De.createElement("input",{"aria-describedby":c.authScopes?"gce-advanced-auth-scopes-error":void 0,"aria-invalid":Boolean(c.authScopes),"aria-label":`Auth scope ${t+1}`,className:"form-control input-sm",list:"gce-auth-scopes",onChange:e=>this.setField("authScopes",g.map((a,n)=>n===t?e.target.value:a)),required:!0,value:e})),De.createElement("td",null,De.createElement("button",{"aria-label":`Remove auth scope ${t+1}`,className:"btn btn-link","data-testid":`remove-auth-scope-${t}`,onClick:()=>this.removeAuthScope(t),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-trash"})))))),De.createElement("tfoot",null,De.createElement("tr",null,De.createElement("td",{colSpan:2},De.createElement("button",{className:"btn btn-block btn-sm add-new","data-testid":"add-auth-scope",onClick:()=>this.setField("authScopes",[...g,""]),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add auth scope"))))),De.createElement("datalist",{id:"gce-auth-scopes"},((null==(o=s.backingData)?void 0:o.authScopes)||[]).map(e=>De.createElement("option",{key:e,value:e}))),ri(c.authScopes,"gce-advanced-auth-scopes-error")))}}class li extends $r{constructor(){super(...arguments),this.firewallsChanged=e=>{const t=this.props.formik.values,a=hi(Array.from(e.target.selectedOptions).map(e=>e.value)),n=si(t).filter(e=>di(t).includes(e.id)&&!a.includes(e.id)).flatMap(e=>e.targetTags),r=ui(t).filter(e=>!n.includes(e.value));this.reconcile({...t,securityGroups:a,tags:r},a,r)},this.targetTagChanged=(e,t)=>{const a=this.props.formik.values,n=oi(a),r=t?mi([...ui(a),{value:e}]):ui(a).filter(t=>t.value!==e),i=r.map(e=>e.value),l=di(a),o=l.filter(e=>!n.some(t=>t.id===e)),s=hi(t?[...l,...n.filter(t=>t.targetTags.includes(e)).map(e=>e.id)]:[...o,...n.filter(e=>l.includes(e.id)&&e.targetTags.some(e=>i.includes(e))).map(e=>e.id)]);this.reconcile({...a,securityGroups:s,tags:r},s,r)},this.reconcile=(e,t,a)=>{this.runLatestCommandRequest(e,async e=>pi((await this.adapter.applyCommandHandler(e,"networkChanged")).command,t,a))},this.showImplicitChanged=e=>{const t=this.props.formik.values;this.props.formik.setFieldValue("viewState",{...t.viewState,listImplicitSecurityGroups:e})},this.refreshFirewalls=()=>{const e=this.props.formik.values,t=di(e),a=ui(e);this.runLatestCommandRequest(e,async e=>pi((await this.adapter.applyConfigurationRefresh(e,"refreshSecurityGroups")).command,t,a))}}render(){const e=this.props.formik.values,t=di(e),a=ui(e).map(e=>e.value),n=oi(e),r=si(e).filter(e=>0===e.targetTags.length);const i=function(e,t){const a=e.map(e=>e.id);return[...e.map(e=>({firewall:e,unavailable:!1})),...t.filter(e=>!a.includes(e)).map(e=>({firewall:{id:e,name:e,targetTags:[]},unavailable:!0}))]}(n,t),l=n.filter(e=>t.includes(e.id));return De.createElement("div",{className:"container-fluid form-horizontal"},De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-server-group-firewalls"},"Firewalls"),De.createElement("div",{className:"col-md-9"},De.createElement("select",{"aria-label":"Firewalls",className:"form-control input-sm",id:"gce-server-group-firewalls",multiple:!0,onChange:this.firewallsChanged,value:t},i.map(({firewall:e,unavailable:t})=>De.createElement("option",{key:e.id,value:e.id},t?`${e.id} (unavailable)`:`${e.name} (${e.id})`))),!i.length&&De.createElement("p",{className:"form-control-static"},"No explicit firewalls found."))),l.map(e=>De.createElement("fieldset",{className:"form-group",key:e.id},De.createElement("legend",{className:"col-md-3 sm-label-right"},"Target Tags for ",e.name),De.createElement("div",{className:"col-md-9"},e.targetTags.map(t=>{const n=function(...e){return e.join("-").replace(/[^a-zA-Z0-9_-]/g,"-")}("gce-firewall-target-tag",e.id,t);return De.createElement("div",{className:"checkbox",key:t},De.createElement("label",{htmlFor:n},De.createElement("input",{"aria-label":`Target tag ${t} for firewall ${e.id}`,checked:a.includes(t),id:n,onChange:e=>this.targetTagChanged(t,e.target.checked),type:"checkbox"}),t))})))),De.createElement("div",{className:"form-group small"},De.createElement("div",{className:"col-md-9 col-md-offset-3 checkbox"},De.createElement("label",{htmlFor:"gce-show-implicit-firewalls"},De.createElement("input",{"aria-label":"Show implicit firewalls",checked:Boolean(e.viewState.listImplicitSecurityGroups),id:"gce-show-implicit-firewalls",onChange:e=>this.showImplicitChanged(e.target.checked),type:"checkbox"})," ","Show implicit firewalls"))),e.viewState.listImplicitSecurityGroups&&De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-3 sm-label-right"},De.createElement("b",null,"Implicit Firewalls")),De.createElement("div",{className:"col-md-9"},De.createElement("ul",{"aria-label":"Implicit firewalls"},r.length?r.map(e=>De.createElement("li",{key:e.id},e.name)):De.createElement("li",null,"None")))),De.createElement("div",{className:"form-group small"},De.createElement("div",{className:"col-md-9 col-md-offset-3"},De.createElement("button",{"aria-label":"Refresh firewalls",className:"btn btn-link",onClick:this.refreshFirewalls,type:"button"},"Refresh firewalls"))))}}function oi(e){return si(e).filter(e=>e.targetTags.length>0)}function si(e){var t,a,n,r;const i=(null==(r=null==(n=null==(a=null==(t=e.backingData)?void 0:t.securityGroups)?void 0:a[e.credentials||""])?void 0:n.gce)?void 0:r.global)||[],l=new Map;return i.filter(t=>t.network===e.network).forEach(e=>{const t=l.get(e.id),a=hi([...(null==t?void 0:t.targetTags)||[],...ci(e.targetTags)]);l.set(e.id,{id:e.id,name:e.name||(null==t?void 0:t.name)||e.id,network:e.network,targetTags:a})}),Array.from(l.values()).sort((e,t)=>e.name.localeCompare(t.name))}function ci(e){if(Array.isArray(e))return hi(e.map(String));if("string"!=typeof e)return[];return hi(e.trim().replace(/^\[/,"").replace(/\]$/,"").split(",").map(e=>e.trim()))}function di(e){return hi(e.securityGroups||[])}function ui(e){return mi((e.tags||[]).map(e=>"string"==typeof e?{value:e}:e))}function mi(e){const t=new Map;return e.forEach(e=>e.value&&!t.has(e.value)&&t.set(e.value,e)),Array.from(t.values())}function pi(e,t,a){return{...e,securityGroups:t,tags:a,viewState:{...e.viewState,dirty:{...e.viewState.dirty,securityGroups:null}}}}function hi(e){return Array.from(new Set(e.filter(Boolean)))}const gi=["RATE","UTILIZATION"],vi=["CONNECTION","UTILIZATION"],bi=["maxConnectionsPerInstance","maxRatePerInstance","maxUtilization"],fi={balancingMode:"UTILIZATION",capacityScaler:1,maxUtilization:.8,namedPorts:[{name:"http",port:80}]};function yi(e){return`gce-load-balancing-policy-${e.replace(/([A-Z])/g,"-$1").toLowerCase()}-error`}function ki(e,t){return e&&De.createElement("span",{className:"help-block",id:t,role:"alert"},e)}class Ei extends $r{constructor(){super(...arguments),this.handleLoadBalancersChanged=e=>{const t=this.props.formik.values,a=Li(Array.from(e.target.selectedOptions).map(({value:e})=>e)),n=new Set(Li(t.loadBalancers)),r=Object.entries(t.backendServices||{}).reduce((e,[t,r])=>(!a.includes(t)&&n.has(t)||(e[t]=Li(r)),e),{}),i={...t,loadBalancers:a,loadBalancerMetadata:Ti(t,a),backendServices:r,backendServiceMetadata:Li(Object.values(r).flat())};i.loadBalancingPolicy=function(e){var t,a;const n=Ni(e);if(!n.length)return;const r=e.loadBalancingPolicy,i=(null==r?void 0:r.balancingMode)&&n.includes(r.balancingMode)?r.balancingMode:fi.balancingMode,l={...r,balancingMode:i,capacityScaler:null!=(t=null==r?void 0:r.capacityScaler)?t:fi.capacityScaler,namedPorts:null!=(a=null==r?void 0:r.namedPorts)?a:fi.namedPorts.map(e=>({...e}))};(null==r?void 0:r.balancingMode)!==i&&bi.forEach(e=>delete l[e]);"UTILIZATION"===i&&void 0===l.maxUtilization&&(l.maxUtilization=fi.maxUtilization);return l}(i),this.applyPageUpdate(i,["loadBalancers","loadBalancerMetadata","loadBalancingPolicy"],!0)},this.handleBackendServicesChanged=(e,t)=>{const a=this.props.formik.values,n={...a.backendServices||{},[e]:Li(Array.from(t.target.selectedOptions).map(({value:e})=>e))},r={...a,backendServices:n,backendServiceMetadata:Li(Object.values(n).flat())};this.applyPageUpdate(r,["backendServices","backendServiceMetadata"])},this.handleBalancingModeChanged=e=>{const t={...this.props.formik.values.loadBalancingPolicy||{}};bi.forEach(e=>delete t[e]),t.balancingMode=e.target.value,this.updatePolicy(t)},this.handleNamedPortChanged=(e,t,a)=>{const n={...this.props.formik.values.loadBalancingPolicy||{}};n.namedPorts=(n.namedPorts||[]).map((n,r)=>r===e?{...n,[t]:a}:n),this.updatePolicy(n)},this.handleAddNamedPort=()=>{const e={...this.props.formik.values.loadBalancingPolicy||{}};e.namedPorts=[...e.namedPorts||[],{name:"",port:80}],this.updatePolicy(e)},this.handleRemoveNamedPort=e=>{const t={...this.props.formik.values.loadBalancingPolicy||{}};t.namedPorts=(t.namedPorts||[]).filter((t,a)=>a!==e),this.updatePolicy(t)},this.handlePolicyFieldChanged=(e,t)=>{const a={...this.props.formik.values.loadBalancingPolicy||{},[e]:t};this.updatePolicy(a)},this.handleRefresh=()=>{const e=Li(this.props.formik.values.loadBalancers);this.runLatestCommandRequest(this.props.formik.values,async t=>{const a=await this.adapter.applyConfigurationRefresh(t,"refreshLoadBalancers");return{...a.command,loadBalancers:e,viewState:{...a.command.viewState,dirty:a.result.dirty}}})}}validate(e){const t=super.validate(e),a=e.loadBalancingPolicy;if(!a||!Li(e.loadBalancers).length)return t;const n={},r=Ni(e);a.balancingMode&&r.includes(a.balancingMode)||(n.balancingMode="Select a balancing mode supported by the selected load balancers."),Mi(a.capacityScaler,e,0,1)||(n.capacityScaler="Capacity must be between 0 and 100%.");const i=(a.namedPorts||[]).map(({name:t,port:a})=>{const n={};return(null==t?void 0:t.trim())||(n.name="Port name required."),function(e,t,a,n){if(Pi(t)&&Ii(e))return!0;if(!Gi(e))return!1;const r=Number(e);return Number.isFinite(r)&&Number.isInteger(r)&&r>=a&&r<=n}(a,e,1,65535)||(n.port="Port must be an integer between 1 and 65535."),n});return i.some(e=>Object.keys(e).length)&&(n.namedPorts=i),"RATE"!==a.balancingMode||Di(a.maxRatePerInstance,e,0)||(n.maxRatePerInstance="Max rate must be a finite number greater than or equal to zero."),"CONNECTION"!==a.balancingMode||Di(a.maxConnectionsPerInstance,e,0)||(n.maxConnectionsPerInstance="Max connections must be a finite number greater than or equal to zero."),"UTILIZATION"!==a.balancingMode||Mi(a.maxUtilization,e,0,1)||(n.maxUtilization="Max utilization must be between 0 and 100%."),Object.keys(n).length&&(t.loadBalancingPolicy=n),t}render(){const e=this.props.formik.values,t=Li(e.loadBalancers),a=function(e,t){const a=new Set(e.map(({name:e})=>e));return[...e.map(e=>({...e,unavailable:!1})).sort((e,t)=>e.name.localeCompare(t.name)),...t.filter(e=>!a.has(e)).map(e=>({name:e,unavailable:!0}))]}(function(e){var t,a,n;const r=null==(t=e.backingData)?void 0:t.loadBalancers;if(Array.isArray(r))return Fi(r.flatMap(e=>Array.isArray(null==e?void 0:e.accounts)?e.accounts:[]).filter(t=>(null==t?void 0:t.name)===e.credentials).flatMap(e=>Array.isArray(null==e?void 0:e.regions)?e.regions:[]).flatMap(e=>Array.isArray(null==e?void 0:e.loadBalancers)?e.loadBalancers:[]).filter(t=>function(e,t){return(null==e?void 0:e.region)===t.region||"global"===(null==e?void 0:e.region)}(t,e)).map(Bi).filter(e=>Boolean(e)));const i=null==(n=null==(a=e.backingData)?void 0:a.filtered)?void 0:n.loadBalancers;if(!Array.isArray(i))return[];return Fi(i.map(Bi).filter(e=>Boolean(e)))}(e),t),n=e.loadBalancingPolicy||{},r=this.validate(e).loadBalancingPolicy||{namedPorts:[]},i=Ni(e);return De.createElement("div",{className:"container-fluid form-horizontal"},De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-server-group-load-balancers"},"Load Balancers"),De.createElement("div",{className:"col-md-7"},De.createElement("select",{"aria-label":"Load balancers",className:"form-control input-sm",id:"gce-server-group-load-balancers",multiple:!0,onChange:this.handleLoadBalancersChanged,value:t},a.map(({name:e,unavailable:t})=>De.createElement("option",{key:e,value:e},e,t?" (unavailable)":"")))),De.createElement("div",{className:"col-md-1"},De.createElement("button",{"aria-label":"Refresh load balancers",className:"btn btn-default btn-sm",onClick:this.handleRefresh,type:"button"},De.createElement("span",{className:"glyphicon glyphicon-refresh"})))),t.map(t=>this.renderBackendServiceSelector(e,t)),t.length>0&&i.length>0&&De.createElement(De.Fragment,null,De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-balancing-mode"},"Balancing mode"),De.createElement("div",{className:"col-md-4"},De.createElement("select",{"aria-describedby":r.balancingMode?yi("balancingMode"):void 0,"aria-invalid":Boolean(r.balancingMode),"aria-label":"Balancing mode",className:"form-control input-sm",id:"gce-balancing-mode",onChange:this.handleBalancingModeChanged,required:!0,value:n.balancingMode||""},!n.balancingMode&&De.createElement("option",{value:""},"Select..."),i.map(e=>De.createElement("option",{key:e,value:e},e))),ki(r.balancingMode,yi("balancingMode")))),this.renderNamedPorts(e,n,r.namedPorts||[]),this.renderPercentageInput("Capacity scaler","capacityScaler",n.capacityScaler,e,r.capacityScaler),"UTILIZATION"===n.balancingMode&&this.renderPercentageInput("Max utilization","maxUtilization",n.maxUtilization,e,r.maxUtilization),"RATE"===n.balancingMode&&this.renderNumberInput("Max rate per instance","maxRatePerInstance",n.maxRatePerInstance,e,r.maxRatePerInstance),"CONNECTION"===n.balancingMode&&this.renderNumberInput("Max connections per instance","maxConnectionsPerInstance",n.maxConnectionsPerInstance,e,r.maxConnectionsPerInstance)))}renderBackendServiceSelector(e,t){var a;const n=Si(e,t).map(({name:e})=>e),r=Li(null==(a=e.backendServices)?void 0:a[t]);if(!n.length&&!r.length)return null;const i=wi(n,r);return De.createElement("div",{className:"form-group",key:t},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-backend-services-${t}`},"Backend services for ",t),De.createElement("div",{className:"col-md-7"},De.createElement("select",{"aria-label":`Backend services for ${t}`,className:"form-control input-sm",id:`gce-backend-services-${t}`,multiple:!0,onChange:e=>this.handleBackendServicesChanged(t,e),value:r},i.map(({unavailable:e,value:t})=>De.createElement("option",{key:t,value:t},t,e?" (unavailable)":"")))))}renderNamedPorts(e,t,a){const n=Li(Li((r=e).loadBalancers).flatMap(e=>Si(r,e).map(({portName:e})=>e||""))).filter(Boolean);var r;const i=t.namedPorts||[];return De.createElement(De.Fragment,null,i.map((t,r)=>{var i,l,o,s,c,d;const u=wi(n,t.name?[t.name]:[]),m=yi(`namedPortName-${r}`),p=yi(`namedPortPort-${r}`);return De.createElement("div",{className:"form-group",key:r},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-named-port-name-${r}`},"Named port ",r+1),De.createElement("div",{className:"col-md-3"},De.createElement("select",{"aria-describedby":(null==(i=a[r])?void 0:i.name)?m:void 0,"aria-invalid":Boolean(null==(l=a[r])?void 0:l.name),"aria-label":`Named port name ${r+1}`,className:"form-control input-sm",id:`gce-named-port-name-${r}`,onChange:e=>this.handleNamedPortChanged(r,"name",e.target.value),required:!0,value:t.name},!t.name&&De.createElement("option",{value:""},"Select..."),u.map(({unavailable:e,value:t})=>De.createElement("option",{key:t,value:t},t,e?" (unavailable)":""))),ki(null==(o=a[r])?void 0:o.name,m)),De.createElement("div",{className:"col-md-2"},De.createElement("input",{"aria-describedby":(null==(s=a[r])?void 0:s.port)?p:void 0,"aria-invalid":Boolean(null==(c=a[r])?void 0:c.port),"aria-label":`Named port number ${r+1}`,className:"form-control input-sm",onChange:e=>this.handleNamedPortChanged(r,"port",xi(e.target.value)),required:!0,type:Pi(e)?"text":"number",value:t.port}),ki(null==(d=a[r])?void 0:d.port,p)),De.createElement("div",{className:"col-md-1"},De.createElement("button",{"aria-label":`Remove named port ${r+1}`,className:"btn btn-default btn-sm",onClick:()=>this.handleRemoveNamedPort(r),type:"button"},De.createElement("span",{className:"glyphicon glyphicon-trash"}))))}),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-offset-3 col-md-4"},De.createElement("button",{"aria-label":"Add named port",className:"btn btn-default btn-sm",onClick:this.handleAddNamedPort,type:"button"},"Add named port"))))}renderPercentageInput(e,t,a,n,r){const i=yi(t);return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-${t}`},e,De.createElement(X,{id:`gce.serverGroup.loadBalancingPolicy.${t}`})),De.createElement("div",{className:"col-md-3"},De.createElement("div",{className:"input-group"},De.createElement("input",{"aria-describedby":r?i:void 0,"aria-invalid":Boolean(r),"aria-label":e,className:"form-control input-sm",id:`gce-${t}`,onChange:e=>this.handlePolicyFieldChanged(t,function(e){if(Ii(e))return e;return e.trim()?Number(e)/100:""}(e.target.value)),required:!0,type:Pi(n)?"text":"number",value:Ri(a)}),De.createElement("span",{className:"input-group-addon"},"%")),ki(r,i)))}renderNumberInput(e,t,a,n,r){const i=yi(t);return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-${t}`},e,De.createElement(X,{id:`gce.serverGroup.loadBalancingPolicy.${t}`})),De.createElement("div",{className:"col-md-3"},De.createElement("input",{"aria-describedby":r?i:void 0,"aria-invalid":Boolean(r),"aria-label":e,className:"form-control input-sm",id:`gce-${t}`,onChange:e=>this.handlePolicyFieldChanged(t,xi(e.target.value)),required:!0,type:Pi(n)?"text":"number",value:void 0===a?"":a}),ki(r,i)))}updatePolicy(e){const t=this.props.formik.values;return this.applyPageUpdate({...t,loadBalancingPolicy:e},["backendServices","backendServiceMetadata","loadBalancers","loadBalancerMetadata","loadBalancingPolicy"])}applyPageUpdate(e,t,a=!1){return this.runLatestCommandRequest(e,async e=>{const n=Ci(e),r={...e,loadBalancers:Li(e.loadBalancers).filter(e=>Boolean(n[e]))},i=await this.adapter.applyConfigurationUpdate(r,"configureLoadBalancerOptions"),l={...i.command,loadBalancers:e.loadBalancers,viewState:{...i.command.viewState,dirty:i.result.dirty}};return a&&(l.backendServices={...e.backendServices||{},...i.command.backendServices||{}},l.backendServiceMetadata=Li(Object.values(l.backendServices).flat())),t.forEach(t=>{l[t]=e[t]}),l})}}function Ci(e){var t,a;return(null==(a=null==(t=e.backingData)?void 0:t.filtered)?void 0:a.loadBalancerIndex)||{}}function Si(e,t){const a=Ci(e)[t];if(!Array.isArray(null==a?void 0:a.backendServices))return[];const n=new Map;return a.backendServices.forEach(e=>{const t="string"==typeof e?{name:e}:{name:e.name||"",portName:e.portName};t.name&&!n.has(t.name)&&n.set(t.name,t)}),Array.from(n.values())}function Ni(e){var t;const a=Ci(e),n=Li(e.loadBalancers).map(e=>{var t;return null==(t=a[e])?void 0:t.loadBalancerType}).filter(e=>Boolean(e)).map(e=>"HTTP"===e||"INTERNAL_MANAGED"===e?gi:vi);if(!n.length){const a=null==(t=e.loadBalancingPolicy)?void 0:t.balancingMode;return a?[a]:[]}return n.slice(1).reduce((e,t)=>e.filter(e=>t.includes(e)),n[0])}function Ti(e,t){const a=Object.entries(e.loadBalancerMetadata||{}).reduce((e,[t,a])=>({...e,[t]:Li(a)}),{});return Li(e.loadBalancers).forEach(t=>{const n=Ai(e,t);n&&(a[n.key]=(a[n.key]||[]).filter(e=>!n.names.includes(e)))}),t.forEach(t=>{const n=Ai(e,t);n&&(a[n.key]=Li([...a[n.key]||[],...n.names]))}),a}function Ai(e,t){const a=Ci(e)[t];if(a){if("HTTP"===a.loadBalancerType||"INTERNAL_MANAGED"===a.loadBalancerType){const e=Li((a.listeners||[]).map(({name:e})=>e||""));if(!e.length)return;return{key:"HTTP"===a.loadBalancerType?"global-load-balancer-names":"load-balancer-names",names:e}}return{key:"SSL"===a.loadBalancerType||"TCP"===a.loadBalancerType?"global-load-balancer-names":"load-balancer-names",names:[t]}}}function wi(e,t){const a=Li(e);return[...a.map(e=>({unavailable:!1,value:e})),...Li(t).filter(e=>!a.includes(e)).map(e=>({unavailable:!0,value:e}))]}function Pi(e){return"createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode}function Ii(e){return"string"==typeof e&&/^\s*\$\{.+\}\s*$/.test(e)}function Mi(e,t,a,n){if(Pi(t)&&Ii(e))return!0;if(!Gi(e))return!1;const r=Number(e);return Number.isFinite(r)&&r>=a&&r<=n}function Di(e,t,a){if(Pi(t)&&Ii(e))return!0;if(!Gi(e))return!1;const n=Number(e);return Number.isFinite(n)&&n>=a}function Gi(e){return null!=e&&("string"!=typeof e||Boolean(e.trim()))}function xi(e){return Ii(e)?e:e.trim()?Number(e):""}function Ri(e){return"number"==typeof e?100*e:void 0===e?"":e}function Bi(e){if("string"==typeof e)return{name:e};if(e&&"string"==typeof e.name){const{name:t,region:a}=e;return{name:t,region:a}}return null}function Fi(e){return Array.from(new Map(e.map(e=>[e.name,e])).values())}function Li(e){return Array.isArray(e)?Array.from(new Set(e.filter(e=>"string"==typeof e&&Boolean(e)))):[]}function zi(e){return""===e?void 0:Number(e)}class Oi extends De.Component{constructor(){super(...arguments),this.state={healthChecks:[],loading:!0},this.loadHealthChecks=()=>{this.setState({loading:!0}),(this.props.reader||new Ue).listHealthChecks().then(e=>{const t=Pr(e.filter(e=>e.account===this.props.account));this.setState({healthChecks:t,loading:!1}),this.normalizeHealthCheck(t)})},this.update=e=>{this.props.onChange({...this.props.policy,...e})},this.getHealthCheckUrl=(e=this.state.healthChecks)=>{const{healthCheck:t,healthCheckKind:a,healthCheckUrl:n}=this.props.policy;if(n)return n;if(null==t?void 0:t.includes("/"))return t;const r=e.filter(e=>e.name===t&&(!a||e.kind===a));return 1===r.length?r[0].selfLink:""}}componentDidMount(){this.loadHealthChecks()}normalizeHealthCheck(e){const t=this.getHealthCheckUrl(e);if(!t)return;const{healthCheckName:a,healthCheckKind:n}=wr(t);this.props.policy.healthCheckUrl===t&&this.props.policy.healthCheck===a&&this.props.policy.healthCheckKind===n||this.update({healthCheckUrl:t,healthCheck:a,healthCheckKind:n})}render(){var e;const{policy:t}=this.props;return De.createElement("div",{className:"form-horizontal gce-auto-healing-policy-editor"},De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"Health check"),De.createElement("div",{className:"col-md-6"},De.createElement("select",{className:"form-control input-sm","data-testid":"health-check",disabled:this.state.loading,value:this.getHealthCheckUrl(),onChange:e=>{const t=e.target.value;if(!t)return void this.update({healthCheckUrl:void 0,healthCheck:void 0,healthCheckKind:void 0});const{healthCheckName:a,healthCheckKind:n}=wr(t);this.update({healthCheckUrl:t,healthCheck:a,healthCheckKind:n})}},De.createElement("option",{value:""},"Select..."),this.state.healthChecks.map(e=>De.createElement("option",{key:e.selfLink,value:e.selfLink},e.displayName))))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"Initial delay"),De.createElement("div",{className:"col-md-6 input-group"},De.createElement("input",{className:"form-control input-sm","data-testid":"initial-delay",max:2147483647,min:0,type:"number",value:null!=(e=t.initialDelaySec)?e:"",onChange:e=>this.update({initialDelaySec:zi(e.target.value)})}),De.createElement("span",{className:"input-group-addon"},"seconds"))),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-offset-4 col-md-6"},De.createElement("button",{className:"btn btn-link",disabled:this.state.loading,type:"button",onClick:this.loadHealthChecks},"Refresh health checks"))))}}var Hi=(e=>(e.NONE="NONE",e.STANDARD="OPTIMIZE_AVAILABILITY",e))(Hi||{});function Ui(e,t){var a;return{type:t,cloudProvider:"gce",credentials:e.account,region:null!=(a=e.region)?a:e.zone,serverGroupName:e.name}}function $i(e){const t={};return["healthCheck","healthCheckKind","healthCheckUrl","initialDelaySec"].forEach(a=>{void 0!==e[a]&&(t[a]=e[a])}),t}da(".gce-autoscaling-layout .checkbox {\n margin-left: 5px;\n margin-top: 7px;\n}\n");class qi{static upsertAutoscalingPolicy(e,t,a,n={}){return N.executeTask({application:e,description:`Upsert scaling policy ${t.name}`,job:[{...Ui(t,"upsertScalingPolicy"),autoscalingPolicy:a,...n}]})}static deleteAutoscalingPolicy(e,t){return N.executeTask({application:e,description:`Delete scaling policy ${t.name}`,job:[Ui(t,"deleteScalingPolicy")]})}static upsertAutoHealingPolicy(e,t,a){return N.executeTask({application:e,description:`Upsert autohealing policy ${t.name}`,job:[{...Ui(t,"upsertScalingPolicy"),autoHealingPolicy:$i(a)}]})}static deleteAutoHealingPolicy(e,t){return N.executeTask({application:e,description:`Delete autohealing policy ${t.name}`,job:[{...Ui(t,"deleteScalingPolicy"),deleteAutoHealingPolicy:!0}]})}}const _i=["Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Asmera","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Timbuktu","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/ComodRivadavia","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Atka","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Catamarca","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Coral_Harbour","America/Cordoba","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Ensenada","America/Fort_Nelson","America/Fort_Wayne","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Inuvik","America/Iqaluit","America/Jamaica","America/Jujuy","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Knox_IN","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Louisville","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Mendoza","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Nuuk","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port_of_Spain","America/Port-au-Prince","America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Rosario","America/Santa_Isabel","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Shiprock","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Virgin","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan","Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar","Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/ACT","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/LHI","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/North","Australia/NSW","Australia/Perth","Australia/Queensland","Australia/South","Australia/Sydney","Australia/Tasmania","Australia/Victoria","Australia/West","Australia/Yancowinna","Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West","Canada/Atlantic","Canada/Central","Canada/Eastern","Canada/Mountain","Canada/Newfoundland","Canada/Pacific","Canada/Saskatchewan","Canada/Yukon","CET","Chile/Continental","Chile/EasterIsland","CST6CDT","Cuba","EET","Egypt","Eire","EST","EST5EDT","Etc/GMT","Etc/GMT-0","Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12","Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3","Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8","Etc/GMT-9","Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11","Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5","Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/Universal","Etc/UTC","Etc/Zulu","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belfast","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","GB","GB-Eire","GMT","GMT-0","GMT+0","GMT0","Greenwich","Hongkong","HST","Iceland","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Iran","Israel","Jamaica","Japan","Kwajalein","Libya","MET","Mexico/BajaNorte","Mexico/BajaSur","Mexico/General","MST","MST7MDT","Navajo","NZ","NZ-CHAT","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kanton","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap","Poland","Portugal","PRC","PST8PDT","ROC","ROK","Singapore","Turkey","UCT","Universal","US/Alaska","US/Aleutian","US/Arizona","US/Central","US/East-Indiana","US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan","US/Mountain","US/Pacific","US/Samoa","UTC","W-SU","WET","Zulu"];function ji(e){return""===e?void 0:Number(e)}function Vi(e){return void 0===e?"":100*e}function Ki({policy:e,onChange:t,predictiveAutoscalingEnabled:a=Boolean(Ga.feature.predictiveAutoscaling)}){var n,r,i,l,o,s,c,d,u;const m=(a,n)=>{t({...e,[a]:n})},p=e.customMetricUtilizations||[],h=e.scalingSchedules||[],g=Boolean(e.cpuUtilization&&Object.keys(e.cpuUtilization).length),v=Boolean(e.loadBalancingUtilization&&Object.keys(e.loadBalancingUtilization).length),b="number"==typeof(null==(r=null==(n=e.scaleInControl)?void 0:n.maxScaledInReplicas)?void 0:r.percent)?"percent":"fixed",f=null==(l=null==(i=e.scaleInControl)?void 0:i.maxScaledInReplicas)?void 0:l[b],y=(e,t)=>{m("customMetricUtilizations",p.map((a,n)=>n===e?{...a,...t}:a))},k=(e,t)=>{m("scalingSchedules",h.map((a,n)=>n===e?{...a,...t}:a))};return De.createElement("div",{className:"form-horizontal gce-autoscaling-policy-editor"},De.createElement("h4",null,"Capacity"),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"Minimum number of instances"),De.createElement("div",{className:"col-md-4"},De.createElement("input",{className:"form-control input-sm","data-testid":"minimum-replicas",min:0,type:"number",value:null!=(o=e.minNumReplicas)?o:"",onChange:e=>m("minNumReplicas",ji(e.target.value))}))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"Maximum number of instances"),De.createElement("div",{className:"col-md-4"},De.createElement("input",{className:"form-control input-sm","data-testid":"maximum-replicas",min:null!=(s=e.minNumReplicas)?s:0,type:"number",value:null!=(c=e.maxNumReplicas)?c:"",onChange:e=>m("maxNumReplicas",ji(e.target.value))}))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"Cool-down period (seconds)"),De.createElement("div",{className:"col-md-4"},De.createElement("input",{className:"form-control input-sm","data-testid":"cooldown",min:15,type:"number",value:null!=(d=e.coolDownPeriodSec)?d:"",onChange:e=>m("coolDownPeriodSec",ji(e.target.value))}))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"Mode"),De.createElement("div",{className:"col-md-4"},De.createElement("select",{className:"form-control input-sm","data-testid":"mode",value:e.mode||"ON",onChange:e=>m("mode",e.target.value)},De.createElement("option",{value:"ON"},"ON"),De.createElement("option",{value:"OFF"},"OFF"),De.createElement("option",{value:"ONLY_SCALE_OUT"},"ONLY_SCALE_OUT")))),De.createElement("h4",null,"Metrics"),g?De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"CPU utilization target (%)"),De.createElement("div",{className:"col-md-4"},De.createElement("input",{className:"form-control input-sm","data-testid":"cpu-target",max:99,min:0,type:"number",value:Vi(e.cpuUtilization.utilizationTarget),onChange:t=>m("cpuUtilization",{...e.cpuUtilization,utilizationTarget:""===t.target.value?void 0:ji(t.target.value)/100})}),De.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("cpuUtilization",{})},"Delete CPU metric")),a&&De.createElement("div",{className:"col-md-4 checkbox"},De.createElement("label",null,De.createElement("input",{"data-testid":"predictive-autoscaling",type:"checkbox",checked:e.cpuUtilization.predictiveMethod===Hi.STANDARD,onChange:t=>m("cpuUtilization",{...e.cpuUtilization,predictiveMethod:t.target.checked?Hi.STANDARD:Hi.NONE})})," ","Enable predictive autoscaling"))):De.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("cpuUtilization",{utilizationTarget:void 0})},"Add CPU utilization metric"),v?De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"HTTP load-balancing target (%)"),De.createElement("div",{className:"col-md-4"},De.createElement("input",{className:"form-control input-sm","data-testid":"http-lb-target",max:99,min:0,type:"number",value:Vi(e.loadBalancingUtilization.utilizationTarget),onChange:e=>m("loadBalancingUtilization",{utilizationTarget:""===e.target.value?void 0:ji(e.target.value)/100})}),De.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("loadBalancingUtilization",{})},"Delete HTTP load-balancing metric"))):De.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("loadBalancingUtilization",{utilizationTarget:void 0})},"Add HTTP load-balancing metric"),p.map((e,t)=>{var a,n;return De.createElement("fieldset",{key:t,className:"well well-sm"},De.createElement("legend",null,"Custom metric ",t+1),De.createElement("input",{"aria-label":"Metric identifier",className:"form-control input-sm","data-testid":`custom-metric-name-${t}`,placeholder:"Metric identifier",value:e.metric||"",onChange:e=>y(t,{metric:e.target.value})}),De.createElement("input",{"aria-label":"Additional filter expression",className:"form-control input-sm",placeholder:"Additional filter expression",value:e.filter||"",onChange:e=>y(t,{filter:e.target.value})}),De.createElement("select",{"aria-label":"Metric export scope",className:"form-control input-sm",value:e.metricExportScope||"",onChange:a=>{const n=a.target.value,{scalingpolicy:r,singleInstanceAssignment:i,...l}=e;m("customMetricUtilizations",p.map((e,a)=>a===t?"TIME_SERIES_PER_INSTANCE"===n?{...l,metricExportScope:n}:{...e,metricExportScope:n,scalingpolicy:"UTILIZATION_TARGET"}:e))}},De.createElement("option",{value:""},"Select export scope"),De.createElement("option",{value:"TIME_SERIES_PER_INSTANCE"},"Time series per instance"),De.createElement("option",{value:"SINGLE_TIME_SERIES_PER_GROUP"},"Single time series per group")),"SINGLE_TIME_SERIES_PER_GROUP"===e.metricExportScope&&De.createElement("select",{"aria-label":"Scaling policy",className:"form-control input-sm",value:e.scalingpolicy||"",onChange:e=>((e,t)=>{const a=p[e];let n;if("SINGLE_INSTANCE_ASSIGNMENT"===t){const{utilizationTarget:e,utilizationTargetType:t,...r}=a;n=r}else{const{singleInstanceAssignment:e,...t}=a;n=t}m("customMetricUtilizations",p.map((a,r)=>r===e?{...n,scalingpolicy:t}:a))})(t,e.target.value)},De.createElement("option",{value:"UTILIZATION_TARGET"},"Utilization target"),De.createElement("option",{value:"SINGLE_INSTANCE_ASSIGNMENT"},"Single instance assignment")),"SINGLE_INSTANCE_ASSIGNMENT"===e.scalingpolicy?De.createElement("input",{"aria-label":"Single instance assignment",className:"form-control input-sm",min:0,type:"number",value:null!=(a=e.singleInstanceAssignment)?a:"",onChange:e=>y(t,{singleInstanceAssignment:ji(e.target.value)})}):De.createElement(De.Fragment,null,De.createElement("input",{"aria-label":"Utilization target",className:"form-control input-sm","data-testid":`custom-metric-target-${t}`,type:"number",value:null!=(n=e.utilizationTarget)?n:"",onChange:e=>y(t,{utilizationTarget:ji(e.target.value)})}),De.createElement("select",{"aria-label":"Utilization target type",className:"form-control input-sm",value:e.utilizationTargetType||"",onChange:e=>y(t,{utilizationTargetType:e.target.value})},De.createElement("option",{value:""},"Select target type"),De.createElement("option",{value:"GAUGE"},"Gauge"),De.createElement("option",{value:"DELTA_PER_SECOND"},"Delta / second"),De.createElement("option",{value:"DELTA_PER_MINUTE"},"Delta / minute"))),De.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("customMetricUtilizations",p.filter((e,a)=>a!==t))},"Delete custom metric"))}),De.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("customMetricUtilizations",[...p,{}])},"Add custom metric"),De.createElement("h4",null,"Scale-in controls"),De.createElement("label",{className:"checkbox-inline"},De.createElement("input",{"data-testid":"scale-in-enabled",type:"checkbox",checked:Boolean(e.scaleInControl),onChange:e=>m("scaleInControl",e.target.checked?{maxScaledInReplicas:{percent:0},timeWindowSec:60}:void 0)})," ","Enable scale-in controls"),e.scaleInControl&&De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-4 control-label"},"Max scaled-in replicas"),De.createElement("div",{className:"col-md-4"},De.createElement("input",{className:"form-control input-sm","data-testid":"scale-in-maximum",min:0,type:"number",value:null!=f?f:"",onChange:t=>m("scaleInControl",{...e.scaleInControl,maxScaledInReplicas:{[b]:ji(t.target.value)}})}),De.createElement("select",{className:"form-control input-sm","data-testid":"scale-in-unit",value:b,onChange:t=>m("scaleInControl",{...e.scaleInControl,maxScaledInReplicas:{[t.target.value]:f}})},De.createElement("option",{value:"percent"},"percent"),De.createElement("option",{value:"fixed"},"fixed")),De.createElement("input",{"aria-label":"Scale-in time window in seconds",className:"form-control input-sm",max:3600,min:60,type:"number",value:null!=(u=e.scaleInControl.timeWindowSec)?u:"",onChange:t=>m("scaleInControl",{...e.scaleInControl,timeWindowSec:ji(t.target.value)})}))),De.createElement("h4",null,"Scaling schedules"),h.map((e,t)=>{var a,n,r;return De.createElement("fieldset",{key:t,className:"well well-sm"},De.createElement("legend",null,"Schedule ",t+1),De.createElement("input",{"aria-label":"Schedule name",className:"form-control input-sm",value:e.scheduleName||"",onChange:e=>k(t,{scheduleName:e.target.value})}),De.createElement("input",{"aria-label":"Schedule description",className:"form-control input-sm",value:e.scheduleDescription||"",onChange:e=>k(t,{scheduleDescription:e.target.value})}),De.createElement("label",{className:"checkbox-inline"},De.createElement("input",{"data-testid":`schedule-enabled-${t}`,type:"checkbox",checked:null!=(a=e.enabled)&&a,onChange:e=>k(t,{enabled:e.target.checked})})," ","Enabled"),De.createElement("input",{"aria-label":"Minimum required instances",className:"form-control input-sm","data-testid":`schedule-minimum-${t}`,min:0,type:"number",value:null!=(n=e.minimumRequiredInstances)?n:"",onChange:e=>k(t,{minimumRequiredInstances:ji(e.target.value)})}),De.createElement("input",{"aria-label":"CRON expression",className:"form-control input-sm",value:e.scheduleCron||"",onChange:e=>k(t,{scheduleCron:e.target.value})}),De.createElement("select",{"aria-label":"Time zone",className:"form-control input-sm","data-testid":`schedule-timezone-${t}`,value:e.timezone||"",onChange:e=>k(t,{timezone:e.target.value})},De.createElement("option",{value:""},"Select time zone"),_i.map(e=>De.createElement("option",{key:e,value:e},e))),De.createElement("input",{"aria-label":"Duration in seconds",className:"form-control input-sm",min:301,type:"number",value:null!=(r=e.duration)?r:"",onChange:e=>k(t,{duration:ji(e.target.value)})}),De.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("scalingSchedules",h.filter((e,a)=>a!==t))},"Delete schedule"))}),De.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("scalingSchedules",[...h,{}])},"Add scaling schedule"))}function Zi(e,t,a=2147483647){return"number"==typeof e&&Number.isFinite(e)&&Number.isInteger(e)&&e>=t&&e<=a}function Wi(e,t){return"number"==typeof e&&Number.isFinite(e)&&e>0&&(void 0===t||e<t)}function Yi(e){var t;return!(!(null==(t=e.metric)?void 0:t.trim())||!e.metricExportScope)&&("SINGLE_TIME_SERIES_PER_GROUP"===e.metricExportScope&&"SINGLE_INSTANCE_ASSIGNMENT"===e.scalingpolicy?"number"==typeof e.singleInstanceAssignment&&Number.isFinite(e.singleInstanceAssignment)&&e.singleInstanceAssignment>=0:("SINGLE_TIME_SERIES_PER_GROUP"!==e.metricExportScope||"UTILIZATION_TARGET"===e.scalingpolicy)&&(Wi(e.utilizationTarget)&&Boolean(e.utilizationTargetType)))}class Xi extends $r{constructor(){super(...arguments),this.setField=(e,t)=>{this.props.formik.setFieldValue(e,t)},this.toggleAutoscaling=e=>{var t,a,n,r,i;const{values:l}=this.props.formik,o=l.autoscalingPolicy;if(this.setField("overwriteAncestorAutoscalingPolicy",!e&&"clone"===(null==(t=l.viewState)?void 0:t.mode)&&Boolean(o)),e){const e=null!=(n=null==(a=l.capacity)?void 0:a.desired)?n:1;return void this.setAutoscalingPolicy(o||{minNumReplicas:e,maxNumReplicas:e,coolDownPeriodSec:60,cpuUtilization:{utilizationTarget:.5}})}this.setField("enableAutoScaling",!1),this.setField("autoscalingPolicy",null),this.setField("source",{...l.source,useSourceCapacity:!1}),this.setField("viewState",{...l.viewState,useSimpleCapacity:!0});const s=null!=(i=null==(r=l.capacity)?void 0:r.desired)?i:1;this.setField("capacity",{min:s,max:s,desired:s})},this.setAutoscalingPolicy=e=>{var t;const{values:a}=this.props.formik,n=e.minNumReplicas,r=e.maxNumReplicas,i=function(e,t,a){var n,r;if("number"==typeof e&&"number"==typeof t&&"number"==typeof a)return Math.min(a,Math.max(t,e));return null!=(r=null!=(n=null!=e?e:t)?n:a)?r:1}(null==(t=a.capacity)?void 0:t.desired,n,r);this.setField("enableAutoScaling",!0),this.setField("autoscalingPolicy",e),this.setField("source",{...a.source,useSourceCapacity:!1}),this.setField("viewState",{...a.viewState,useSimpleCapacity:!1}),this.setField("capacity",{...a.capacity,min:n,max:r,desired:i})},this.toggleAutohealing=e=>{var t;const{values:a}=this.props.formik,n=a.autoHealingPolicy;this.setField("enableAutoHealing",e),this.setField("overwriteAncestorAutoHealingPolicy",!e&&"clone"===(null==(t=a.viewState)?void 0:t.mode)&&Boolean(n)),e&&!n&&this.setField("autoHealingPolicy",{initialDelaySec:300})}}validate(e){var t,a;const n={};if(e.autoscalingPolicy){const a=e.autoscalingPolicy,r={},i=Zi(a.minNumReplicas,0),l=Zi(a.maxNumReplicas,0);i||(r.minNumReplicas="Minimum capacity must be a nonnegative integer."),l?i&&a.maxNumReplicas<a.minNumReplicas&&(r.maxNumReplicas="Maximum capacity must be at least the minimum capacity."):r.maxNumReplicas="Maximum capacity must be a nonnegative integer.",Zi(a.coolDownPeriodSec,15)||(r.coolDownPeriodSec="Cool-down period must be an integer of at least 15 seconds."),function(e){var t,a;const n=Boolean(e.cpuUtilization&&Object.keys(e.cpuUtilization).length),r=Boolean(e.loadBalancingUtilization&&Object.keys(e.loadBalancingUtilization).length),i=e.customMetricUtilizations||[],l=!n||Wi(null==(t=e.cpuUtilization)?void 0:t.utilizationTarget,1),o=!r||Wi(null==(a=e.loadBalancingUtilization)?void 0:a.utilizationTarget,1);return l&&o&&i.every(Yi)&&(n&&l||r&&o||i.length>0&&i.every(Yi))}(a)||(r.metric="At least one complete autoscaling metric required."),function(e){return(e.scalingSchedules||[]).every(t=>{var a,n,r;return Boolean(null==(a=t.scheduleName)?void 0:a.trim())&&Zi(t.minimumRequiredInstances,0,e.maxNumReplicas)&&Boolean(null==(n=t.scheduleCron)?void 0:n.trim())&&Boolean(null==(r=t.timezone)?void 0:r.trim())&&Zi(t.duration,301,1209600)})}(a)||(r.scalingSchedules="Every scaling schedule must be complete and within supported bounds."),function(e){if(!e.scaleInControl)return!0;const{maxScaledInReplicas:t,timeWindowSec:a}=e.scaleInControl,n=void 0!==(null==t?void 0:t.fixed),r=void 0!==(null==t?void 0:t.percent);return!(n===r||!Zi(a,60,3600))&&(r?Zi(null==t?void 0:t.percent,0,100):Zi(null==t?void 0:t.fixed,0))}(a)||(r.scaleInControl="Scale-in control values are outside supported bounds.");(null==(t=a.cpuUtilization)?void 0:t.predictiveMethod)===Hi.STANDARD&&!Ga.feature.predictiveAutoscaling&&(r.predictiveAutoscaling="Predictive autoscaling is not enabled."),Object.keys(r).length&&(n.autoscalingPolicy=r)}if(e.enableAutoHealing){const t=e.autoHealingPolicy||{},r={};(null==(a=t.healthCheck)?void 0:a.trim())||(r.healthCheck="Health check required."),t.healthCheckKind||(r.healthCheckKind="Health check kind required."),Zi(t.initialDelaySec,0)||(r.initialDelaySec="Initial delay must be an integer between 0 and 2147483647 seconds."),Object.keys(r).length&&(n.autoHealingPolicy=r)}return n}filteredHealthCheckReader(){var e,t;const{values:a}=this.props.formik,n=(null==(t=null==(e=a.backingData)?void 0:e.filtered)?void 0:t.healthChecks)||[];return{listHealthChecks:()=>Promise.resolve(n.map(e=>({...e,account:a.credentials})))}}render(){var e;const{values:t}=this.props.formik,a=Boolean(t.autoscalingPolicy),n=null!=(e=t.enableAutoHealing)?e:Boolean(t.autoHealingPolicy);return De.createElement("div",{className:"container-fluid form-horizontal","data-testid":"gce-policies-page"},De.createElement("section",null,De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-4 sm-label-right"},De.createElement("b",null,"Enable Autoscaling")),De.createElement("div",{className:"col-md-6 checkbox"},De.createElement("label",null,De.createElement("input",{checked:a,"data-testid":"enable-autoscaling",onChange:e=>this.toggleAutoscaling(e.target.checked),type:"checkbox"}),De.createElement("span",{className:"sr-only"},"Enable Autoscaling")))),a&&De.createElement(Ki,{policy:t.autoscalingPolicy||{},onChange:this.setAutoscalingPolicy})),De.createElement("section",null,De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-4 sm-label-right"},De.createElement("b",null,"Enable Autohealing")),De.createElement("div",{className:"col-md-6 checkbox"},De.createElement("label",null,De.createElement("input",{checked:n,"data-testid":"enable-autohealing",onChange:e=>this.toggleAutohealing(e.target.checked),type:"checkbox"}),De.createElement("span",{className:"sr-only"},"Enable Autohealing")))),n&&De.createElement(Oi,{key:t.credentials||"",account:t.credentials||"",policy:t.autoHealingPolicy||{},reader:this.filteredHealthCheckReader(),onChange:e=>this.setField("autoHealingPolicy",e)})))}}class Ji extends $r{constructor(){super(...arguments),this.parentChanged=(e,t,a)=>{const n={...this.props.formik.values,[e]:t};return this.runLatestCommandRequest(n,async e=>(await this.adapter.applyCommandHandler(e,a)).command)},this.accountChanged=e=>{const t={...this.props.formik.values,credentials:e};return this.runLatestCommandRequest(t,async t=>{const a=await _e.findImages({account:e,provider:t.selectedProvider,q:"*"}),n={...t,backingData:{...t.backingData,allImages:a}};return(await this.adapter.applyCommandHandler(n,"credentialsChanged")).command})},this.strategyChanged=(e,t)=>{var a;null==(a=e.onStrategyChange)||a.call(e,e,t),this.props.formik.setValues({...e,strategy:t.key})},this.strategyFieldChanged=(e,t)=>{this.props.formik.setFieldValue(e,t)}}validate(e){const t=zr(e),a={};t.credentials&&(a.credentials=t.credentials),t.region&&(a.region=t.region),t.zone&&(a.zone=t.zone),t.stack&&(a.stack=t.stack),t.freeFormDetails&&(a.freeFormDetails=t.freeFormDetails);const n=e.viewState.templatingEnabled?/^([a-zA-Z0-9]*(\${.+})*)*$/:/^[a-zA-Z0-9]*$/,r=e.viewState.templatingEnabled?/^([a-zA-Z0-9-]*(\${.+})*)*$/:/^[a-zA-Z0-9-]*$/;return e.stack&&!n.test(e.stack)&&(a.stack="Stack can only contain letters and numbers."),e.freeFormDetails&&!r.test(e.freeFormDetails)&&(a.freeFormDetails="Detail can only contain letters, numbers, and dashes."),a}renderSelect(e,t,a,n,r){const i=`gce-server-group-${t}`,l=`${i}-error`,o=this.props.formik.values[t],s="regional"===t?o?"regional":"zonal":o||"";return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:i},e),De.createElement("div",{className:"col-md-7"},De.createElement("select",{"aria-describedby":r?l:void 0,"aria-invalid":Boolean(r),"aria-label":e,className:"form-control input-sm",id:i,onChange:e=>n?n(e.target.value):this.props.formik.setFieldValue(t,e.target.value),value:s},De.createElement("option",{value:""},"Select..."),a.map(e=>De.createElement("option",{disabled:e.unavailable,key:e.value,value:e.value},e.label))),r&&De.createElement("span",{className:"help-block",id:l,role:"alert"},r)))}renderTextField(e,t,a){const n=`gce-server-group-${t}`,r=`${n}-error`;return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:n},e),De.createElement("div",{className:"col-md-7"},De.createElement("input",{"aria-describedby":a?r:void 0,"aria-invalid":Boolean(a),"aria-label":e,className:"form-control input-sm",id:n,onChange:e=>this.props.formik.setFieldValue(t,e.target.value),type:"text",value:this.props.formik.values[t]||""}),a&&De.createElement("span",{className:"help-block",id:r,role:"alert"},a)))}render(){var e,t;const{values:a}=this.props.formik,n=(null==(e=a.backingData)?void 0:e.filtered)||{},r=Qi(null==(t=a.backingData)?void 0:t.accounts,a.credentials,["name"]),i=Qi(n.regions,a.region,["name"]),l=Qi(n.zones,a.zone,["name"]),o=Qi(n.networks,a.network,["id","name"]),s=Qi(n.subnets,a.subnet,["id","name"]),c=this.validate(a);return De.createElement("div",{className:"container-fluid form-horizontal"},this.renderSelect("Account","credentials",r,this.accountChanged,c.credentials),this.renderSelect("Region","region",i,e=>this.parentChanged("region",e,"regionChanged"),c.region),this.renderSelect("Location mode","regional",[{label:"Zonal",value:"zonal"},{label:"Regional",value:"regional"}],e=>this.parentChanged("regional","regional"===e,"regionalChanged")),!a.regional&&this.renderSelect("Zone","zone",l,e=>this.parentChanged("zone",e,"zoneChanged"),c.zone),this.renderSelect("Network","network",o,e=>this.parentChanged("network",e,"networkChanged")),this.renderSelect("Subnet","subnet",s),this.renderTextField("Stack","stack",c.stack),this.renderTextField("Detail","freeFormDetails",c.freeFormDetails),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-3 sm-label-right"},"Traffic"),De.createElement("div",{className:"col-md-7 checkbox"},De.createElement("label",null,De.createElement("input",{"aria-label":"Send client requests to new instances",checked:!1!==a.enableTraffic,onChange:e=>this.props.formik.setFieldValue("enableTraffic",e.target.checked),type:"checkbox"})," ","Send client requests to new instances"))),!a.viewState.disableStrategySelection&&a.selectedProvider&&De.createElement("div",{"aria-label":"Deployment strategy",role:"group"},De.createElement(j,{command:a,onFieldChange:this.strategyFieldChanged,onStrategyChange:this.strategyChanged})),De.createElement(J,{reason:a.reason||"",onChange:e=>this.props.formik.setFieldValue("reason",e)}))}}function Qi(e,t,a){const n=(e||[]).map(e=>function(e,t){if("string"==typeof e)return e;return t.map(t=>null==e?void 0:e[t]).find(Boolean)||""}(e,a)).filter(Boolean);return Lr(n,t,e=>e,e=>e).map(({unresolved:e,value:t})=>({label:e?`${t} (unavailable)`:t,unavailable:e,value:t}))}const el=new Set(["BALANCED","ANY","ANY_SINGLE_ZONE"]),tl="gce-instance-flexibility-error";function al(e){const t=null==e?void 0:e.trim();if(t)return t.substring(t.lastIndexOf("/")+1).toLowerCase()}function nl(e){const t=new Set;for(const a of Object.values((null==e?void 0:e.instanceSelections)||{}))for(const e of(null==a?void 0:a.machineTypes)||[]){const a=al(e);if(a&&t.has(a))return!1;a&&t.add(a)}return!0}function rl(e){return null==(null==e?void 0:e.rank)||Number.isFinite(e.rank)&&Number.isInteger(e.rank)&&e.rank>=0}function il({instanceFlexibilityPolicy:e,regional:t,targetShape:a,validationError:n,setInstanceFlexibilityPolicy:r}){const i=e||{instanceSelections:{}},l=Object.entries(i.instanceSelections||{}),o=l.length>0,s=(a||"").trim().toUpperCase(),c=o&&!t,d=o&&(!s||"EVEN"===s||!el.has(s)),u=o&&!nl(i),m=e=>{r({instanceSelections:e})},p=()=>{const e=function(e){const t=new Set(e);let a=1;for(;t.has(`selection-${a}`);)a+=1;return`selection-${a}`}(Object.keys(i.instanceSelections||{}));m({...i.instanceSelections,[e]:{machineTypes:[""]}})},h=(e,t)=>{m({...i.instanceSelections,[e]:t})};return De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-3 sm-label-right"},De.createElement("b",null,"Instance Flexibility")," ",De.createElement(X,{id:"gce.serverGroup.instanceFlexibilityPolicy"})),De.createElement("div",{className:"col-md-9"},n&&De.createElement("div",{className:"alert alert-danger",id:tl,role:"alert"},n),!o&&De.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:p},"Add flexibility policy"),o&&De.createElement("div",null,c&&De.createElement("div",{className:"alert alert-warning"},"Flexibility requires a regional server group."),d&&De.createElement("div",{className:"alert alert-warning"},"Flexibility requires target shape BALANCED, ANY, or ANY_SINGLE_ZONE (not EVEN)."),u&&De.createElement("div",{className:"alert alert-warning",role:"alert"},"Machine types must be unique across instance selections."),l.map(([e,t])=>De.createElement("div",{key:e,className:"well well-sm",style:{marginBottom:"10px"},"data-selection-name":e},(()=>{const a=`instance-flexibility-selection-${encodeURIComponent(e)}`,r=!rl(t);return De.createElement(De.Fragment,null,De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`${a}-name`},"Selection name"),De.createElement("div",{className:"col-md-6"},De.createElement("input",{id:`${a}-name`,className:"form-control input-sm",defaultValue:e,onBlur:t=>{((e,t)=>{const a=t.trim();if(!a||a===e||i.instanceSelections[a])return!1;const n={};return Object.entries(i.instanceSelections).forEach(([t,r])=>{n[t===e?a:t]=r}),m(n),!0})(e,t.currentTarget.value)||(t.currentTarget.value=e)}})),De.createElement("div",{className:"col-md-3"},De.createElement("button",{type:"button",className:"btn btn-sm btn-default","aria-label":`Remove selection ${e}`,onClick:()=>(e=>{const t={...i.instanceSelections};delete t[e],m(t)})(e)},"Remove"))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`${a}-rank`},"Rank (optional)"),De.createElement("div",{className:"col-md-3"},De.createElement("input",{id:`${a}-rank`,type:"number",min:0,step:1,className:"form-control input-sm","aria-describedby":r&&n?tl:void 0,"aria-invalid":r,value:null==t.rank?"":t.rank,onChange:t=>((e,t)=>{const a=i.instanceSelections[e];if(""===t){const{rank:t,...n}=a;return void h(e,n)}const n=Number(t);Number.isFinite(n)&&Number.isInteger(n)&&n>=0&&h(e,{...a,rank:n})})(e,t.target.value)}))),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-3 sm-label-right"},"Machine types"),De.createElement("div",{className:"col-md-9"},(t.machineTypes||[]).map((t,r)=>De.createElement("div",{key:r,style:{display:"flex",marginBottom:"4px"}},De.createElement("input",{id:`${a}-machine-type-${r}`,className:"form-control input-sm","aria-describedby":!(null==t?void 0:t.trim())&&n?tl:void 0,"aria-invalid":!(null==t?void 0:t.trim()),value:t,onChange:t=>((e,t,a)=>{const n=i.instanceSelections[e],r=[...n.machineTypes||[]];r[t]=a,h(e,{...n,machineTypes:r})})(e,r,t.target.value),placeholder:"e.g. n2-standard-8","aria-label":`Machine type ${r+1} for selection ${e}`}),De.createElement("button",{type:"button",className:"btn btn-sm btn-default",style:{marginLeft:"4px"},"aria-label":`Remove machine type ${r+1} from selection ${e}`,onClick:()=>((e,t)=>{const a=i.instanceSelections[e],n=(a.machineTypes||[]).filter((e,a)=>a!==t);h(e,{...a,machineTypes:n.length?n:[""]})})(e,r)},"×"))),De.createElement("button",{type:"button",className:"btn btn-sm btn-link",onClick:()=>(e=>{const t=i.instanceSelections[e];h(e,{...t,machineTypes:[...t.machineTypes||[],""]})})(e)},"Add machine type"))))})())),De.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:p},"Add selection"))))}function ll(e){var t,a;if(a=e.instanceFlexibilityPolicy,Me(null==a?void 0:a.instanceSelections))return!0;if(!e.regional)return!1;const n=((null==(t=e.distributionPolicy)?void 0:t.targetShape)||"").trim().toUpperCase();return!!el.has(n)&&(Object.values(e.instanceFlexibilityPolicy.instanceSelections||{}).every(e=>function(e){const t=(null==e?void 0:e.machineTypes)||[];return t.length>0&&t.every(e=>!!e&&e.trim().length>0)}(e)&&rl(e))&&nl(e.instanceFlexibilityPolicy))}const ol="must be a finite non-negative integer.";class sl extends $r{constructor(){super(...arguments),this.commandChanged=(e,t)=>this.runLatestCommandRequest(e,async e=>{let a=e;for(const e of t)a=(await this.adapter.applyCommandHandler(a,e)).command;return a}),this.capacityChanged=(e,t)=>{const a=function(e,t){if(!e.trim())return;if(ul(t)&&ml(e))return e;const a=Number(e);return cl(a)?a:void 0}(t,this.props.formik.values);if(void 0===a)return;const{values:n}=this.props.formik;if(!n.autoscalingPolicy)return void this.props.formik.setFieldValue("capacity",{min:a,max:a,desired:a});if("desired"===e)return void this.props.formik.setFieldValue("capacity",{...n.capacity,desired:a});const r="min"===e?"minNumReplicas":"maxNumReplicas";this.props.formik.setFieldValue("autoscalingPolicy",{...n.autoscalingPolicy,[r]:a}),this.props.formik.setFieldValue("capacity",{...n.capacity,[e]:a})},this.capacityModeChanged=e=>{var t,a,n,r;const{values:i}=this.props.formik;if(this.props.formik.setFieldValue("overwriteAncestorAutoscalingPolicy",e&&"clone"===(null==(t=i.viewState)?void 0:t.mode)&&Boolean(i.autoscalingPolicy)),this.props.formik.setFieldValue("viewState",{...i.viewState,useSimpleCapacity:e}),this.props.formik.setFieldValue("source",{...i.source,useSourceCapacity:!1}),e){if(this.props.formik.setFieldValue("enableAutoScaling",!1),this.props.formik.setFieldValue("autoscalingPolicy",null),dl(null==(a=i.capacity)?void 0:a.desired,i)){const e=i.capacity.desired;this.props.formik.setFieldValue("capacity",{min:e,max:e,desired:e})}return}const l=null!=(r=null==(n=i.capacity)?void 0:n.desired)?r:1,o=i.autoscalingPolicy||{minNumReplicas:l,maxNumReplicas:l,coolDownPeriodSec:60,cpuUtilization:{utilizationTarget:.5}};this.props.formik.setFieldValue("enableAutoScaling",!0),this.props.formik.setFieldValue("autoscalingPolicy",o),this.props.formik.setFieldValue("capacity",{...i.capacity,min:o.minNumReplicas,max:o.maxNumReplicas,desired:pl(l,o.minNumReplicas,o.maxNumReplicas)})},this.regionalChanged=e=>{this.commandChanged({...this.props.formik.values,regional:e},["regionalChanged","regionChanged","zoneChanged","selectZonesChanged"])},this.zoneChanged=e=>{this.commandChanged({...this.props.formik.values,zone:e},["zoneChanged","selectZonesChanged"])},this.selectZonesChanged=e=>{this.commandChanged({...this.props.formik.values,selectZones:e},["selectZonesChanged","zoneChanged"])},this.selectedZoneChanged=(e,t)=>{var a;const n=this.props.formik.values,r=(null==(a=n.distributionPolicy)?void 0:a.zones)||[],i=t?Array.from(new Set([...r,e])):r.filter(t=>t!==e),l={...n,distributionPolicy:{...n.distributionPolicy,zones:i}};this.commandChanged(l,["selectZonesChanged","zoneChanged"])},this.targetShapeChanged=e=>{const{values:t}=this.props.formik;this.props.formik.setFieldValue("distributionPolicy",{...t.distributionPolicy,targetShape:e})},this.instanceFlexibilityPolicyChanged=e=>{this.props.formik.setFieldValue("instanceFlexibilityPolicy",e)}}validate(e){var t,a,n,r,i,l;const o={},s=null==(t=e.capacity)?void 0:t.desired;if(dl(s,e)||(o.capacity={desired:`Desired capacity ${ol}`}),e.autoscalingPolicy){const t=null==(a=e.autoscalingPolicy)?void 0:a.minNumReplicas,r=null==(n=e.autoscalingPolicy)?void 0:n.maxNumReplicas;dl(t,e)||(o.autoscalingPolicy={...o.autoscalingPolicy,minNumReplicas:`Minimum capacity ${ol}`}),dl(r,e)||(o.autoscalingPolicy={...o.autoscalingPolicy,maxNumReplicas:`Maximum capacity ${ol}`}),cl(s)&&cl(t)&&s<t?o.capacity={desired:"Desired capacity must be at least minimum capacity."}:cl(s)&&cl(r)&&s>r&&(o.capacity={desired:"Desired capacity must not exceed maximum capacity."})}return e.regional||(null==(r=e.zone)?void 0:r.trim())||(o.zone="Zone required."),e.regional&&e.selectZones&&!(null==(l=null==(i=e.distributionPolicy)?void 0:i.zones)?void 0:l.length)&&(o.distributionPolicy={zones:"At least one zone required."}),ll(e)||(o.instanceFlexibilityPolicy="Instance flexibility policy is invalid."),o}renderCapacityInput(e,t,a){const n=`gce-capacity-${t}`,r=function(e,t){var a,n;if("desired"===t)return null==(a=null==e?void 0:e.capacity)?void 0:a.desired;return null==(n=null==e?void 0:e.autoscalingPolicy)?void 0:n["min"===t?"minNumReplicas":"maxNumReplicas"]}(this.props.formik.errors,t);return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:n},e),De.createElement("div",{className:"col-md-3"},De.createElement("input",{"aria-describedby":r?`${n}-error`:void 0,"aria-invalid":Boolean(r),"aria-label":`${e} capacity`,className:"form-control input-sm",id:n,min:0,onChange:e=>this.capacityChanged(t,e.target.value),required:!0,step:1,type:ul(this.props.formik.values)?"text":"number",value:null!=a?a:""}),r&&De.createElement("span",{className:"help-block",id:`${n}-error`,role:"alert"},r)))}renderZonalLocation(){var e,t,a;const n=this.props.formik.values,r=hl(null==(t=null==(e=n.backingData)?void 0:e.filtered)?void 0:t.zones,n.zone?[n.zone]:[]),i=null==(a=this.props.formik.errors)?void 0:a.zone;return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-capacity-zone"},"Zone"),De.createElement("div",{className:"col-md-7"},De.createElement("select",{"aria-describedby":i?"gce-capacity-zone-error":void 0,"aria-invalid":Boolean(i),"aria-label":"Zone",className:"form-control input-sm",id:"gce-capacity-zone",onChange:e=>this.zoneChanged(e.target.value),required:!0,value:n.zone||""},De.createElement("option",{value:""},"Select..."),r.map(({unavailable:e,value:t})=>De.createElement("option",{key:t,value:t},t,e?" (unavailable)":""))),i&&De.createElement("span",{className:"help-block",id:"gce-capacity-zone-error",role:"alert"},i)))}renderRegionalDistribution(){var e,t,a,n,r,i;const l=this.props.formik.values,o=(null==(e=l.distributionPolicy)?void 0:e.zones)||[],s=hl(null==(a=null==(t=l.backingData)?void 0:t.filtered)?void 0:a.zones,o),c=this.props.formik.errors,d=null==(n=null==c?void 0:c.distributionPolicy)?void 0:n.zones,u=(null==(r=l.backingData)?void 0:r.distributionPolicyTargetShapes)||["ANY","EVEN","BALANCED","ANY_SINGLE_ZONE"];return De.createElement("div",null,De.createElement("fieldset",{className:"form-group"},De.createElement("legend",{className:"col-md-3 sm-label-right"},"Distribution"),De.createElement("div",{className:"col-md-7"},De.createElement("label",{className:"radio-inline",htmlFor:"gce-capacity-preferred-zones"},De.createElement("input",{"aria-label":"Preferred zone distribution",checked:!l.selectZones,id:"gce-capacity-preferred-zones",name:"gce-capacity-zone-distribution",onChange:e=>e.target.checked&&this.selectZonesChanged(!1),type:"radio"}),"Preferred zones"),De.createElement("label",{className:"radio-inline",htmlFor:"gce-capacity-explicit-zones"},De.createElement("input",{"aria-label":"Explicit zone distribution",checked:Boolean(l.selectZones),id:"gce-capacity-explicit-zones",name:"gce-capacity-zone-distribution",onChange:e=>e.target.checked&&this.selectZonesChanged(!0),type:"radio"}),"Select zones explicitly"))),l.selectZones&&De.createElement("fieldset",{"aria-describedby":d?"gce-capacity-zones-error":void 0,className:"form-group"},De.createElement("legend",{className:"col-md-3 sm-label-right"},"Zones"),De.createElement("div",{"aria-invalid":Boolean(d),className:"col-md-7"},s.map(({unavailable:e,value:t})=>{const a=`gce-capacity-zone-${t}`;return De.createElement("div",{className:"checkbox",key:t},De.createElement("label",{htmlFor:a},De.createElement("input",{"aria-label":`Zone ${t}`,checked:o.includes(t),id:a,onChange:e=>this.selectedZoneChanged(t,e.target.checked),type:"checkbox"}),t,e?" (unavailable)":""))}),d&&De.createElement("span",{className:"help-block",id:"gce-capacity-zones-error",role:"alert"},d))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-capacity-target-shape"},"Target shape"),De.createElement("div",{className:"col-md-3"},De.createElement("select",{"aria-label":"Target shape",className:"form-control input-sm",id:"gce-capacity-target-shape",onChange:e=>this.targetShapeChanged(e.target.value),value:(null==(i=l.distributionPolicy)?void 0:i.targetShape)||""},De.createElement("option",{value:""},"Select..."),u.map(e=>De.createElement("option",{key:e,value:e},e))))))}render(){var e,t,a,n,r;const{values:i}=this.props.formik,l=!i.autoscalingPolicy;return De.createElement("div",{className:"container-fluid form-horizontal"},De.createElement("fieldset",{className:"form-group"},De.createElement("legend",{className:"col-md-3 sm-label-right"},"Capacity mode"),De.createElement("div",{className:"col-md-7"},De.createElement("label",{className:"radio-inline",htmlFor:"gce-capacity-simple"},De.createElement("input",{"aria-label":"Simple capacity",checked:l,id:"gce-capacity-simple",name:"gce-capacity-mode",onChange:e=>e.target.checked&&this.capacityModeChanged(!0),type:"radio"}),"Simple"),De.createElement("label",{className:"radio-inline",htmlFor:"gce-capacity-autoscaling"},De.createElement("input",{"aria-label":"Autoscaling capacity",checked:!l,id:"gce-capacity-autoscaling",name:"gce-capacity-mode",onChange:e=>e.target.checked&&this.capacityModeChanged(!1),type:"radio"}),"Autoscaling"))),!l&&this.renderCapacityInput("Minimum","min",null==(e=i.autoscalingPolicy)?void 0:e.minNumReplicas),!l&&this.renderCapacityInput("Maximum","max",null==(t=i.autoscalingPolicy)?void 0:t.maxNumReplicas),this.renderCapacityInput("Desired","desired",null==(a=i.capacity)?void 0:a.desired),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-3 sm-label-right"},De.createElement("b",null,"Regional")),De.createElement("div",{className:"col-md-7 checkbox"},De.createElement("label",{htmlFor:"gce-capacity-regional"},De.createElement("input",{"aria-label":"Regional server group",checked:i.regional,id:"gce-capacity-regional",onChange:e=>this.regionalChanged(e.target.checked),type:"checkbox"}),"Distribute instances across multiple zones"))),i.regional?this.renderRegionalDistribution():this.renderZonalLocation(),De.createElement(il,{instanceFlexibilityPolicy:i.instanceFlexibilityPolicy,regional:i.regional,setInstanceFlexibilityPolicy:this.instanceFlexibilityPolicyChanged,targetShape:(null==(n=i.distributionPolicy)?void 0:n.targetShape)||void 0,validationError:null==(r=this.props.formik.errors)?void 0:r.instanceFlexibilityPolicy}))}}function cl(e){return"number"==typeof e&&Number.isFinite(e)&&Number.isInteger(e)&&e>=0}function dl(e,t){return cl(e)||ul(t)&&ml(e)}function ul(e){return"createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode}function ml(e){return"string"==typeof e&&/^\s*\$\{.+\}\s*$/.test(e)}function pl(e,t,a){var n,r;return"number"==typeof e&&"number"==typeof t&&"number"==typeof a?Math.min(a,Math.max(t,e)):null!=(r=null!=(n=null!=e?e:t)?n:a)?r:1}function hl(e,t){const a=e||[];return Array.from(new Set([...a,...t])).map(e=>({unavailable:!a.includes(e),value:e}))}const gl=[{label:"Artifact",value:"artifact"},{label:"Prior Stage",value:"priorStage"}];class vl extends $r{constructor(){super(...arguments),this.imageArtifactEdited=e=>{this.props.formik.setFieldValue("imageArtifactId",null),this.props.formik.setFieldValue("imageArtifact",e)},this.expectedImageArtifactSelected=e=>{this.props.formik.setFieldValue("imageArtifactId",e.id),this.props.formik.setFieldValue("imageArtifact",null)}}validate(e){const t=zr(e).image;return t?{image:t}:{}}renderImageSource(){const{values:e}=this.props.formik;if(!e.viewState.showImageSourceSelector)return null;const t=e.viewState.imageSourceText?De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-3 sm-label-right"},"Image Source"),De.createElement("div",{className:"col-md-7"},De.createElement(Q,{tag:"span",message:e.viewState.imageSourceText}))):De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-server-group-image-source"},"Image Source"),De.createElement("div",{className:"col-md-7"},De.createElement("select",{"aria-label":"Image source",className:"form-control input-sm",id:"gce-server-group-image-source",onChange:e=>this.props.formik.setFieldValue("imageSource",e.target.value),value:e.imageSource||""},Lr(gl,e.imageSource,e=>e.value,e=>({label:e,value:e})).map(({unresolved:e,value:t})=>De.createElement("option",{disabled:e,key:t.value,value:t.value},e?`${t.label} (unavailable)`:t.label)))));return De.createElement(De.Fragment,null,t,"artifact"===e.imageSource&&De.createElement(ee,{artifact:e.imageArtifact,excludedArtifactTypePatterns:te(ae.CUSTOM_OBJECT),expectedArtifactId:e.imageArtifactId,fieldColumns:7,helpKey:"gce.image.artifact",label:"Expected Artifact",onArtifactEdited:this.imageArtifactEdited,onExpectedArtifactSelected:this.expectedImageArtifactSelected,pipeline:e.viewState.pipeline,stage:e.viewState.stage}))}renderImageSelect(){var e,t,a;const{values:n}=this.props.formik;if(n.viewState.disableImageSelection)return De.createElement("div",null,"Image selection is disabled for this command.");const r=function(e,t){const a=Array.from(new Set(e.map(e=>"string"==typeof e?e:e.imageName).filter(Boolean)));return Lr(a,t,e=>e,e=>e).map(({unresolved:e,value:t})=>({label:e?`${t} (unavailable)`:t,unavailable:e,value:t}))}((null==(t=null==(e=n.backingData)?void 0:e.filtered)?void 0:t.images)||(null==(a=n.backingData)?void 0:a.allImages)||[],n.image),i=this.validate(n).image;return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-server-group-image"},"Image"),De.createElement("div",{className:"col-md-7"},De.createElement("select",{"aria-describedby":i?"gce-server-group-image-error":void 0,"aria-invalid":Boolean(i),"aria-label":"Image",className:"form-control input-sm",id:"gce-server-group-image",onChange:e=>this.props.formik.setFieldValue("image",e.target.value),required:!0,value:n.image||""},De.createElement("option",{value:""},"Select..."),r.map(e=>De.createElement("option",{disabled:e.unavailable,key:e.value,value:e.value},e.label))),i&&De.createElement("span",{className:"help-block",id:"gce-server-group-image-error",role:"alert"},i)))}render(){return De.createElement("div",{className:"container-fluid form-horizontal"},this.renderImageSource(),this.renderImageSelect())}}const bl=65536;class fl extends $r{constructor(){super(...arguments),this.instanceTypeRequestGeneration=0,this.publish=e=>{this.props.formik.setValues(e)},this.updateValues=e=>{this.publish({...this.props.formik.values,...e})},this.updateMachineType=e=>{const t=this.props.formik.values,a={...t,instanceType:e,viewState:{...t.viewState,instanceProfile:"custom"}},n=++this.instanceTypeRequestGeneration;this.publish(a),kl(t)&&ne.includesSpel(e)||this.runLatestCommandRequest(a,async t=>{const a=await this.context.services.instanceTypeService.getInstanceTypeDetails(t.selectedProvider||"gce",e);if(n!==this.instanceTypeRequestGeneration)return t;const r=function(e,t){var a,n;const r=null==(n=null==(a=null==t?void 0:t.storage)?void 0:a.defaultSettings)?void 0:n.disks,i={...e.viewState};r&&delete i.overriddenStorageDescription;return{...e,...r?{disks:r.map(e=>({...e}))}:{},viewState:{...i,instanceTypeDetails:t}}}(t,a),i=await this.adapter.applyCommandHandler(r,"zoneChanged");return n===this.instanceTypeRequestGeneration?i.command:t})},this.updateMachineTypeMode=e=>{const t=this.props.formik.values;e?this.updateCustomInstance(Il(t)):this.publish({...t,viewState:{...t.viewState,instanceProfile:"custom"}})},this.updateCustomInstance=e=>{this.instanceTypeRequestGeneration++;const t=this.props.formik.values,a={...t,instanceType:Ml(e),viewState:{...t.viewState,customInstance:e,instanceProfile:"buildCustom"}};this.runLatestCommandRequest(a,async e=>(await this.adapter.applyCommandHandler(e,"customInstanceChanged")).command)},this.updatePreemptible=e=>{this.updateValues({preemptible:e,automaticRestart:!e,onHostMaintenance:e?"TERMINATE":"MIGRATE"})},this.updateAcceleratorType=(e,t)=>{const a=this.props.formik.values,n=Al(a),r=Tl(a).find(e=>e.name===t),i=Number(n[e].acceleratorCount),l=r?function(e,t){if(!e.length)return 1;if(e.includes(t))return t;return e.reduce((e,a)=>a<=t&&a>e?a:e,e[0])}(r.availableCardCounts,i):i;this.updateValues({acceleratorConfigs:n.map((a,n)=>n===e?{acceleratorType:t,acceleratorCount:l}:a)})},this.updateAcceleratorCount=(e,t)=>{const a=Al(this.props.formik.values);this.updateValues({acceleratorConfigs:a.map((a,n)=>n===e?{...a,acceleratorCount:Cl(t)}:a)})},this.addAccelerator=()=>{const e=this.props.formik.values,t=Tl(e)[0];t&&this.updateValues({acceleratorConfigs:Al(e).concat({acceleratorType:t.name,acceleratorCount:t.availableCardCounts[0]||1})})},this.removeAccelerator=e=>{this.updateValues({acceleratorConfigs:Al(this.props.formik.values).filter((t,a)=>a!==e)})},this.updateBootDisk=e=>{const t=[...this.props.formik.values.disks||[]],a=wl(t);-1===a?t.unshift({type:"pd-ssd",sizeGb:10,...e}):t[a]={...t[a],...e},this.updateValues({disks:t})}}validate(e){const t={};e.instanceType||(t.instanceType="Machine type required.");const a=Pl(e);(null==a?void 0:a.type)&&function(e,t,a,n){if(kl(t)&&El(e))return!0;const r=Number(e);return Number.isFinite(r)&&Number.isInteger(r)&&r>=a&&r<=n}(a.sizeGb,e,10,bl)||(t.disks="Boot disk size must be between 10 and 65536 GB.");const n=Al(e),r=Tl(e);return n.some(t=>{if(!t.acceleratorType||!function(e,t){if(kl(t)&&El(e))return!0;const a=Number(e);return Number.isFinite(a)&&Number.isInteger(a)&&a>0}(t.acceleratorCount,e))return!0;const a=r.find(e=>e.name===t.acceleratorType);return!!a&&!a.availableCardCounts.includes(Number(t.acceleratorCount))})&&(t.acceleratorConfigs="Accelerator count is unavailable for the selected type."),t}render(){var e,t,a,n,r,i;const l=this.props.formik.values,o=this.props.formik.errors||{},s="buildCustom"===l.viewState.instanceProfile,c=kl(l),d=Sl((null==(t=null==(e=l.backingData)?void 0:e.filtered)?void 0:t.instanceTypes)||[],l.instanceType),u=Sl((null==(n=null==(a=l.backingData)?void 0:a.filtered)?void 0:n.cpuPlatforms)||["(Automatic)"],l.minCpuPlatform),m=Il(l),p=(null==(r=l.backingData)?void 0:r.customInstanceTypes)||{},h=Pl(l)||{type:"pd-ssd",sizeGb:10},g=Sl((null==(i=l.backingData)?void 0:i.persistentDiskTypes)||[],h.type),v=Tl(l),b=Al(l);return De.createElement("div",{className:"container-fluid form-horizontal"},De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-5 sm-label-right"},De.createElement("b",null,"Machine type")),De.createElement("div",{className:"col-md-6"},De.createElement("label",{className:"radio-inline",htmlFor:"gce-machine-type-standard"},De.createElement("input",{checked:!s,id:"gce-machine-type-standard",name:"gce-machine-type-mode",onChange:()=>this.updateMachineTypeMode(!1),type:"radio"}),"Standard"),De.createElement("label",{className:"radio-inline",htmlFor:"gce-machine-type-custom"},De.createElement("input",{checked:s,id:"gce-machine-type-custom",name:"gce-machine-type-mode",onChange:()=>this.updateMachineTypeMode(!0),type:"radio"}),"Custom CPU and memory"))),!s&&De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:"gce-machine-type"},"Machine type"),De.createElement("div",{className:"col-md-6"},c?De.createElement("input",{"aria-describedby":o.instanceType?"gce-machine-type-error":void 0,"aria-invalid":Boolean(o.instanceType),"aria-label":"Machine type",className:"form-control input-sm",id:"gce-machine-type",onChange:e=>this.updateMachineType(e.target.value),type:"text",value:l.instanceType||""}):De.createElement("select",{"aria-describedby":o.instanceType?"gce-machine-type-error":void 0,"aria-invalid":Boolean(o.instanceType),"aria-label":"Machine type",className:"form-control input-sm",id:"gce-machine-type",onChange:e=>this.updateMachineType(e.target.value),required:!0,value:l.instanceType||""},De.createElement("option",{value:""},"Select..."),d.map(({unavailable:e,value:t})=>De.createElement("option",{key:t,value:t},t,e?" (Unavailable)":""))),yl(o.instanceType,"gce-machine-type-error"))),s&&De.createElement(De.Fragment,null,this.renderSelect("gce-custom-family","Machine family",m.instanceFamily,Nl(p.instanceFamilyList||["N1","E2","N2","N2D"],m.instanceFamily),e=>this.updateCustomInstance({...m,extendedMemory:"E2"!==e&&m.extendedMemory,instanceFamily:e})),this.renderSelect("gce-custom-cpu","vCPU count",m.vCpuCount,Nl(p.vCpuList||[],m.vCpuCount),e=>this.updateCustomInstance({...m,vCpuCount:Number(e)}),o.instanceType,"gce-machine-type-error"),this.renderSelect("gce-custom-memory","Memory (GB)",m.memory,Nl(p.memoryList||[],m.memory),e=>this.updateCustomInstance({...m,memory:Number(e)}),o.instanceType,"gce-machine-type-error"),"E2"!==m.instanceFamily&&De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-offset-5 col-md-6 checkbox"},De.createElement("label",{htmlFor:"gce-custom-extended-memory"},De.createElement("input",{checked:m.extendedMemory,id:"gce-custom-extended-memory",onChange:e=>this.updateCustomInstance({...m,extendedMemory:e.target.checked}),type:"checkbox"})," ","Extended memory"))),yl(o.instanceType,"gce-machine-type-error")),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:"gce-min-cpu-platform"},"Minimum CPU platform ",De.createElement(X,{id:"gce.serverGroup.minCpuPlatform"})),De.createElement("div",{className:"col-md-6"},c?De.createElement("input",{"aria-label":"Minimum CPU platform",className:"form-control input-sm",id:"gce-min-cpu-platform",onChange:e=>this.updateValues({minCpuPlatform:e.target.value}),type:"text",value:l.minCpuPlatform||""}):De.createElement("select",{"aria-label":"Minimum CPU platform",className:"form-control input-sm",id:"gce-min-cpu-platform",onChange:e=>this.updateValues({minCpuPlatform:e.target.value}),value:l.minCpuPlatform||""},u.map(({unavailable:e,value:t})=>De.createElement("option",{key:t,value:t},t,e?" (Unavailable)":""))))),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-offset-5 col-md-6 checkbox"},De.createElement("label",{htmlFor:"gce-preemptible"},De.createElement("input",{checked:Boolean(l.preemptible),id:"gce-preemptible",onChange:e=>this.updatePreemptible(e.target.checked),type:"checkbox"})," ","Spot (preemptible) instances ",De.createElement(X,{id:"gce.serverGroup.preemptibility"})))),De.createElement("fieldset",null,De.createElement("legend",{className:"sm-label-left"},"Accelerators (GPUs)"),b.map((e,t)=>{const a=v.find(t=>t.name===e.acceleratorType),n=function(e,t){const a=e.map(e=>({...e,unavailable:!1}));t&&!e.some(e=>e.name===t)&&a.push({availableCardCounts:[],name:t,unavailable:!0});return a}(v,e.acceleratorType),r=Nl((null==a?void 0:a.availableCardCounts)||[],e.acceleratorCount);return De.createElement("div",{className:"form-group",key:`${e.acceleratorType}-${t}`},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-accelerator-type-${t}`},"GPU type"),De.createElement("div",{className:"col-md-4"},De.createElement("select",{"aria-describedby":o.acceleratorConfigs?"gce-accelerators-error":void 0,"aria-invalid":Boolean(o.acceleratorConfigs),"aria-label":`GPU type ${t+1}`,className:"form-control input-sm",id:`gce-accelerator-type-${t}`,onChange:e=>this.updateAcceleratorType(t,e.target.value),value:e.acceleratorType},n.map(({description:e,name:t,unavailable:a})=>De.createElement("option",{key:t,value:t},a?t:e||t,a?" (Unavailable)":"")))),De.createElement("label",{className:"col-md-1 sm-label-right",htmlFor:`gce-accelerator-count-${t}`},"Count"),De.createElement("div",{className:"col-md-2"},c?De.createElement("input",{"aria-describedby":o.acceleratorConfigs?"gce-accelerators-error":void 0,"aria-invalid":Boolean(o.acceleratorConfigs),"aria-label":`GPU count ${t+1}`,className:"form-control input-sm",id:`gce-accelerator-count-${t}`,onChange:e=>this.updateAcceleratorCount(t,e.target.value),type:"text",value:e.acceleratorCount}):De.createElement("select",{"aria-describedby":o.acceleratorConfigs?"gce-accelerators-error":void 0,"aria-invalid":Boolean(o.acceleratorConfigs),"aria-label":`GPU count ${t+1}`,className:"form-control input-sm",id:`gce-accelerator-count-${t}`,onChange:e=>this.updateAcceleratorCount(t,e.target.value),value:e.acceleratorCount},r.map(({unavailable:e,value:t})=>De.createElement("option",{key:String(t),value:t},t,e?" (Unavailable)":"")))),De.createElement("div",{className:"col-md-1"},De.createElement("button",{"aria-label":`Remove GPU ${t+1}`,className:"btn btn-link",onClick:()=>this.removeAccelerator(t),type:"button"},De.createElement("span",{"aria-hidden":"true",className:"glyphicon glyphicon-trash"}))))}),De.createElement("button",{className:"btn btn-block btn-sm add-new",disabled:!v.length,onClick:this.addAccelerator,type:"button"},De.createElement("span",{"aria-hidden":"true",className:"glyphicon glyphicon-plus-sign"})," Add accelerator"),yl(o.acceleratorConfigs,"gce-accelerators-error")),De.createElement("fieldset",null,De.createElement("legend",{className:"sm-label-left"},"Boot disk"),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:"gce-boot-disk-type"},"Type"),De.createElement("div",{className:"col-md-6"},De.createElement("select",{"aria-describedby":o.disks?"gce-boot-disk-error":void 0,"aria-invalid":Boolean(o.disks),"aria-label":"Boot disk type",className:"form-control input-sm",id:"gce-boot-disk-type",onChange:e=>this.updateBootDisk({type:e.target.value}),value:h.type},g.map(({unavailable:e,value:t})=>De.createElement("option",{key:t,value:t},t,e?" (Unavailable)":""))))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:"gce-boot-disk-size"},"Size (GB)"),De.createElement("div",{className:"col-md-3"},De.createElement("input",{"aria-describedby":o.disks?"gce-boot-disk-error":void 0,"aria-invalid":Boolean(o.disks),"aria-label":"Boot disk size",className:"form-control input-sm",id:"gce-boot-disk-size",max:c?void 0:bl,min:c?void 0:10,onChange:e=>this.updateBootDisk({sizeGb:Cl(e.target.value)}),required:!0,type:c?"text":"number",value:h.sizeGb}),yl(o.disks,"gce-boot-disk-error")))))}renderSelect(e,t,a,n,r,i,l){return De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:e},t),De.createElement("div",{className:"col-md-3"},De.createElement("select",{"aria-describedby":i?l:void 0,"aria-invalid":Boolean(i),"aria-label":t,className:"form-control input-sm",id:e,onChange:e=>r(e.target.value),value:a},n.map(({unavailable:e,value:t})=>De.createElement("option",{key:String(t),value:t},t,e?" (Unavailable)":"")))))}}function yl(e,t){return e&&De.createElement("span",{className:"help-block",id:t,role:"alert"},e)}function kl(e){return"createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode}function El(e){return"string"==typeof e&&/^\s*\$\{.+\}\s*$/.test(e)}function Cl(e){return El(e)?e:Number(e)}function Sl(e,t){const a=e.map(e=>({unavailable:!1,value:e}));return t&&!e.includes(t)&&a.push({unavailable:!0,value:t}),a}function Nl(e,t){const a=e.map(e=>({unavailable:!1,value:e}));return e.some(e=>String(e)===String(t))||a.push({unavailable:!0,value:t}),a}function Tl(e){return e.viewState.acceleratorTypes||[]}function Al(e){return e.acceleratorConfigs||[]}function wl(e){return e.findIndex(e=>e.type.startsWith("pd-")||e.type.startsWith("hyperdisk-"))}function Pl(e){const t=e.disks||[];return t[wl(t)]}function Il(e){var t,a,n,r,i;const l=e.viewState.customInstance||{},o=function(e){if(!e||!e.includes("custom-"))return{extendedMemory:!1};const t=/^(?:(n1|e2|n2|n2d)-)?custom-(\d+)-(\d+)(-ext)?$/i.exec(e);if(!t)return{extendedMemory:!1};return{extendedMemory:Boolean(t[4]),instanceFamily:(t[1]||"N1").toUpperCase(),memory:Number(t[3])/1024,vCpuCount:Number(t[2])}}(e.instanceType),s=(null==(t=e.backingData)?void 0:t.customInstanceTypes)||{};return{extendedMemory:null!=(a=l.extendedMemory)?a:o.extendedMemory,instanceFamily:l.instanceFamily||o.instanceFamily||(null==(n=s.instanceFamilyList)?void 0:n[0])||"N1",memory:l.memory||o.memory||(null==(r=s.memoryList)?void 0:r[0])||1,vCpuCount:l.vCpuCount||o.vCpuCount||(null==(i=s.vCpuList)?void 0:i[0])||1}}function Ml(e){const t=e.instanceFamily.toLowerCase();return`${"n1"===t?"":`${t}-`}custom-${e.vCpuCount}-${1024*Number(e.memory)}${e.extendedMemory?"-ext":""}`}fl.contextType=Y;const Dl="global-load-balancer-names",Gl="load-balancer-names",xl="backend-service-names";function Rl(e){return e.name||e}function Bl(e){return Array.isArray(e)?e:"string"==typeof e?e.split(",").map(e=>e.trim()):[]}function Fl(e){const t=e.loadBalancerMetadata||{},a=e.instanceMetadata||{};return{[Dl]:Bl(t[Dl]||a[Dl]),[Gl]:Bl(t[Gl]||a[Gl])}}function Ll(e,t){if(t){if("HTTP"===t.loadBalancerType||"INTERNAL_MANAGED"===t.loadBalancerType){const e=(t.listeners||[]).map(e=>e.name).filter(Boolean);return e.length?{key:"HTTP"===t.loadBalancerType?Dl:Gl,names:e}:void 0}return{key:"SSL"===t.loadBalancerType||"TCP"===t.loadBalancerType?Dl:Gl,names:[e]}}}function zl(e){var t,a,n;const r=(null==(a=null==(t=e.backingData)?void 0:t.filtered)?void 0:a.loadBalancerIndex)||{},i=(e.loadBalancers||[]).filter(e=>!e.loadBalancerType&&!r[Rl(e)]),l=Fl(e),o={[Dl]:i.length?[...l[Dl]]:[],[Gl]:i.length?[...l[Gl]]:[]};(e.loadBalancers||[]).forEach(e=>{const t=Rl(e),a=Ll(t,e.loadBalancerType?e:r[t]);a&&o[a.key].push(...a.names)});const s=new Set((e.loadBalancers||[]).map(Rl));return e.backendServices&&Object.keys(e.backendServices).length?o[xl]=Object.keys(e.backendServices).filter(e=>s.has(e)).flatMap(t=>e.backendServices[t]):i.length&&(o[xl]=Bl(e.backendServiceMetadata||(null==(n=e.instanceMetadata)?void 0:n[xl]))),function(e){return Object.keys(e).reduce((t,a)=>{const n=Array.from(new Set(e[a].filter(Boolean)));return n.length&&(t[a]=n.join(",")),t},{})}(o)}class Ol extends De.Component{constructor(e,t){var a;super(e,t),this.configureRequest=0,this.formik=null,this.unmounted=!1,this.configureCommand=async()=>{var e,t,a,n;const r=++this.configureRequest,i=this.getAdapter();try{let l=(null==(e=this.formik)?void 0:e.values)||this.command;if(null==(t=l.viewState)?void 0:t.requiresTemplateSelection){l=function(e,t){const a=t.viewState||{};return{...e,...a.overrides||{},viewState:{...e.viewState,disableImageSelection:!0,disableStrategySelection:a.disableStrategySelection||!1,expectedArtifacts:a.expectedArtifacts||[],hideClusterNamePreview:a.hideClusterNamePreview||!1,imageId:null,imageSourceText:a.imageSourceText,mode:"createPipeline",pipeline:a.pipeline,readOnlyFields:a.readOnlyFields||{},showImageSourceSelector:!0,stage:a.stage,submitButtonLabel:"Add",templatingEnabled:!0}}}(await i.buildNewServerGroupCommand(this.props.application,{mode:"createPipeline"}),l)}if(this.unmounted||r!==this.configureRequest)return;const o=await i.configureCommand(this.props.application,l);if(this.unmounted||r!==this.configureRequest)return;const s=(null==(a=this.formik)?void 0:a.values)||l,c=function(e){var t,a,n,r;const i=Te(e.loadBalancers||[]),l=(null==(a=null==(t=e.backingData)?void 0:t.filtered)?void 0:a.loadBalancerIndex)||{};return{autoHealingHealthCheck:e.autoHealingPolicy?Te({healthCheck:e.autoHealingPolicy.healthCheck,healthCheckKind:e.autoHealingPolicy.healthCheckKind,healthCheckUrl:e.autoHealingPolicy.healthCheckUrl}):void 0,backendServiceMetadata:Bl(e.backendServiceMetadata),backendServices:e.backendServices?Te(e.backendServices):void 0,credentials:e.credentials,distributionZones:Te((null==(n=e.distributionPolicy)?void 0:n.zones)||[]),image:(null==(r=e.viewState)?void 0:r.imageId)||e.image,implicitSecurityGroups:Te(e.implicitSecurityGroups||[]),instanceType:e.instanceType,loadBalancerMetadata:Te(Fl(e)),loadBalancerReferences:i.reduce((e,t)=>{const a=Rl(t),n=Ll(a,t.loadBalancerType?t:Ul(l,a));return n&&(e[a]=n),e},{}),loadBalancers:i,minCpuPlatform:e.minCpuPlatform,network:e.network,region:e.region,regional:e.regional,securityGroups:Te(e.securityGroups||[]),subnet:e.subnet,zone:e.zone}}(s),d=function(e,t){var a,n;const r=Object.keys(t).reduce((e,a)=>("function"==typeof t[a]&&(e[a]=t[a]),e),{});return{...t,...e,...r,backingData:t.backingData,viewState:{...t.viewState,...e.viewState,dirty:{...null==(a=t.viewState)?void 0:a.dirty,...null==(n=e.viewState)?void 0:n.dirty}}}}(s,o);!function(e,t){var a,n,r,i;const l=!t.credentials||_l(null==(a=e.backingData)?void 0:a.accounts,["name"]).includes(t.credentials);if(!l)return;null==(n=e.credentialsChanged)||n.call(e,e);const o=!t.region||_l(null==(i=null==(r=e.backingData)?void 0:r.filtered)?void 0:i.regions,["name"]).includes(t.region);if(!o)return;["regionalChanged","regionChanged","networkChanged","zoneChanged","customInstanceChanged"].forEach(t=>{var a;return null==(a=e[t])?void 0:a.call(e,e)})}(d,c),function(e,t){var a,n,r,i;const l=(null==(a=e.backingData)?void 0:a.filtered)||{};_l(null==(n=e.backingData)?void 0:n.accounts,["name"]).includes(t.credentials)||(e.credentials=t.credentials);_l(l.regions,["name"]).includes(t.region)||(e.region=t.region);t.instanceType&&!Bl(l.instanceTypes).includes(t.instanceType)&&(e.instanceType=t.instanceType);t.minCpuPlatform&&!Bl(l.cpuPlatforms).includes(t.minCpuPlatform)&&(e.minCpuPlatform=t.minCpuPlatform);t.image&&!_l(null==(r=e.backingData)?void 0:r.allImages,["imageName","name","id"]).includes(t.image)&&(e.image=t.image,e.viewState.imageId=t.image);t.network&&!_l(l.networks,["id","name"]).includes(t.network)&&(e.network=t.network);t.subnet&&!_l(l.subnets,["id","name"]).includes(t.subnet)&&(e.subnet=t.subnet);t.regional||!t.zone||Bl(l.zones).includes(t.zone)||(e.zone=t.zone);if(t.regional){const a=t.distributionZones.filter(e=>!Bl(l.zones).includes(e));e.distributionPolicy={...e.distributionPolicy,zones:$l([...(null==(i=e.distributionPolicy)?void 0:i.zones)||[],...a])}}const o=["id","name"],s=new Set([..._l(l.securityGroups,o),..._l(e.implicitSecurityGroups,o)]);e.securityGroups=$l([...e.securityGroups||[],...t.securityGroups.filter(e=>!s.has(e))]),e.implicitSecurityGroups=function(e,t){const a=new Set;return e.filter(e=>{const n=ql(e,t);return!(!n||a.has(n))&&(a.add(n),!0)})}([...e.implicitSecurityGroups||[],...t.implicitSecurityGroups.filter(e=>!s.has(ql(e,o)))],o);const c=t.autoHealingHealthCheck,d=(l.healthChecks||[]).some(e=>e.name===(null==c?void 0:c.healthCheck)&&e.kind===(null==c?void 0:c.healthCheckKind));(null==c?void 0:c.healthCheck)&&!d&&(e.autoHealingPolicy={...e.autoHealingPolicy||{},...c});const u=l.loadBalancerIndex||{},m=t.loadBalancers.filter(e=>!Ul(u,Rl(e))),p=new Set(m.map(Rl));e.loadBalancers=function(e){const t=new Set;return e.filter(e=>{const a=Rl(e);return!(!a||t.has(a))&&(t.add(a),!0)})}([...e.loadBalancers||[],...m]);const h=Te(e.backendServices||{});p.forEach(e=>{var a;(null==(a=t.backendServices)?void 0:a[e])&&(h[e]=t.backendServices[e])}),Object.keys(h).length?e.backendServices=h:delete e.backendServices;const g=Object.keys(t.backendServices||{}).filter(e=>!p.has(e)).flatMap(e=>{var a;return(null==(a=t.backendServices)?void 0:a[e])||[]}),v=p.size?t.backendServiceMetadata.filter(e=>!g.includes(e)):[];e.backendServiceMetadata=$l([...Bl(e.backendServiceMetadata),...Object.keys(h).filter(e=>p.has(e)).flatMap(e=>h[e]),...v]);const b=Fl(e);Object.keys(u).forEach(e=>{const a=t.loadBalancerReferences[e];a&&(b[a.key]=b[a.key].filter(e=>!a.names.includes(e)))}),(e.loadBalancers||[]).forEach(e=>{const t=Rl(e),a=Ll(t,u[t]);a&&b[a.key].push(...a.names)}),p.forEach(e=>{const a=t.loadBalancerReferences[e];a&&b[a.key].push(...a.names)});const f=Object.values(t.loadBalancerReferences).reduce((e,t)=>({...e,[t.key]:$l([...e[t.key]||[],...t.names])}),{});p.size&&[Dl,Gl].forEach(e=>{b[e].push(...t.loadBalancerMetadata[e].filter(t=>!(f[e]||[]).includes(t)))});e.loadBalancerMetadata={[Dl]:$l(b[Dl]),[Gl]:$l(b[Gl])},Object.keys(e.loadBalancerMetadata).forEach(t=>{e.loadBalancerMetadata[t].length||delete e.loadBalancerMetadata[t]})}(d,c),this.command=d,this.commandState.command=d,this.commandState.formikValues=d,null==(n=this.formik)||n.setValues(d),this.setState({command:d,initializationError:!1,loaded:!0})}catch(e){this.unmounted||r!==this.configureRequest||this.setState({initializationError:!0,loaded:!1})}},this.retryConfiguration=()=>(this.setState({initializationError:!1,loaded:!1}),this.configureCommand()),this.submit=(e=(e=>null==(e=this.formik)?void 0:e.values)()||this.command)=>{var t;const a=function(e){var t;const a=Te(e),n={...e.instanceMetadata||{}};return delete n[Dl],delete n[Gl],delete n[xl],a.instanceMetadata={...n,...zl(e)},a.tags=(e.tags||[]).map(e=>e.value||e),a.targetSize=null==(t=e.capacity)?void 0:t.desired,e.autoscalingPolicy?a.capacity={...e.capacity,max:e.autoscalingPolicy.maxNumReplicas,min:e.autoscalingPolicy.minNumReplicas}:e.capacity&&(a.capacity={...e.capacity,max:e.capacity.desired,min:e.capacity.desired}),"(Automatic)"===a.minCpuPlatform&&(a.minCpuPlatform=""),delete a.loadBalancerMetadata,delete a.securityGroups,a}(e),n=null==(t=a.viewState)?void 0:t.mode;return this.props.forPipelineConfig||"createPipeline"===n||"editPipeline"===n?this.props.closeModal(a):this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.cloneServerGroup(a,this.props.application))},this.onTaskComplete=()=>{this.clearApplicationRefreshSubscription(),this.applicationRefreshUnsubscribe=this.props.application.serverGroups.onNextRefresh(this.onApplicationRefresh),this.props.application.serverGroups.refresh()},this.onApplicationRefresh=()=>{var e,t,a,n,r,i;if(this.clearApplicationRefreshSubscription(),this.unmounted)return;const l=(null==(e=this.formik)?void 0:e.values)||this.command,o=null==(n=null==(a=null==(t=this.state.taskMonitor.task)?void 0:t.execution)?void 0:a.stages)?void 0:n.find(e=>"cloneServerGroup"===e.type),s=null==(i=null==(r=null==o?void 0:o.context)?void 0:r["deploy.server.groups"])?void 0:i[l.region];if(!s)return;let c="^.^.^.clusters.serverGroup";this.props.stateService.includes("**.clusters.serverGroup")&&(c="^.serverGroup"),this.props.stateService.includes("**.clusters.cluster.serverGroup")&&(c="^.^.serverGroup"),this.props.stateService.includes("**.clusters")&&(c=".serverGroup"),this.props.stateService.go(c,{accountId:l.credentials,provider:"gce",region:l.region,serverGroup:s})},this.clearApplicationRefreshSubscription=()=>{var e;null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0},this.adapter=e.adapter,this.command=Te(e.command),this.commandState=Ur(this.command),this.state={command:this.command,initializationError:!1,loaded:Boolean(null==(a=this.command.backingData)?void 0:a.filtered),taskMonitor:new f({application:e.application,title:e.title||"Creating your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:this.onTaskComplete})}}static show(e,t){return b.show(Hl,e,{dialogClassName:"wizard-modal modal-lg"},t)}componentDidMount(){this.configureCommand()}componentWillUnmount(){this.unmounted=!0,this.configureRequest++,this.clearApplicationRefreshSubscription()}getAdapter(){var e;if(!this.adapter){if(!(null==(e=this.context)?void 0:e.services))throw new Error("GCE server group wizard requires Deck runtime services");const t=this.context.services.providerServiceDelegate;this.adapter=new Hr(t.getDelegate("gce","serverGroup.commandBuilder"),t.getDelegate("gce","serverGroup.configurationService"))}return this.adapter}render(){var e;const{application:t,dismissModal:a,title:n}=this.props,{command:r,initializationError:i,loaded:l,taskMonitor:o}=this.state;if(i)return De.createElement("div",{className:"modal-content gce-server-group-initialization-error"},De.createElement("div",{className:"modal-header"},De.createElement("button",{"aria-label":"Close",className:"close",onClick:a,type:"button"},De.createElement("span",{"aria-hidden":"true"},"×")),De.createElement("h3",null,n||"Create Server Group")),De.createElement("div",{className:"modal-body"},De.createElement("div",{className:"alert alert-danger",role:"alert"},"Unable to load the resources required to configure this server group. Check your connection and try again.")),De.createElement("div",{className:"modal-footer"},De.createElement("button",{className:"btn btn-default gce-server-group-initialization-close",onClick:a,type:"button"},"Close"),De.createElement("button",{className:"btn btn-primary",onClick:this.retryConfiguration,type:"button"},"Retry")));const s=this.getAdapter();return De.createElement(re,{key:l?"loaded":"loading",closeModal:this.submit,dismissModal:a,heading:n||"Create Server Group",initialValues:r,loading:!l,submitButtonLabel:(null==(e=r.viewState)?void 0:e.submitButtonLabel)||"Done",taskMonitor:o,validate:zr,render:({formik:e,nextIdx:a,wizard:n})=>{this.formik=e,this.command=e.values;const r={adapter:s,app:t,commandState:this.commandState,formik:e};return De.createElement(De.Fragment,null,De.createElement(ie,{label:"Basic Settings",order:a(),render:({innerRef:e,onLoadingChanged:t})=>De.createElement(Ji,{ref:e,...r,onLoadingChanged:t}),wizard:n}),De.createElement(ie,{label:"Image",order:a(),render:({innerRef:e,onLoadingChanged:t})=>De.createElement(vl,{ref:e,...r,onLoadingChanged:t}),wizard:n}),De.createElement(ie,{label:"Instance Type",order:a(),render:({innerRef:e,onLoadingChanged:t})=>De.createElement(fl,{ref:e,...r,onLoadingChanged:t}),wizard:n}),De.createElement(ie,{label:"Capacity/Distribution",order:a(),render:({innerRef:e,onLoadingChanged:t})=>De.createElement(sl,{ref:e,...r,onLoadingChanged:t}),wizard:n}),De.createElement(ie,{label:"Load Balancers",order:a(),render:({innerRef:e,onLoadingChanged:t})=>De.createElement(Ei,{ref:e,...r,onLoadingChanged:t}),wizard:n}),De.createElement(ie,{label:"Firewalls",order:a(),render:({innerRef:e,onLoadingChanged:t})=>De.createElement(li,{ref:e,...r,onLoadingChanged:t}),wizard:n}),De.createElement(ie,{label:"Policies",order:a(),render:({innerRef:e,onLoadingChanged:t})=>De.createElement(Xi,{ref:e,...r,onLoadingChanged:t}),wizard:n}),De.createElement(ie,{label:"Advanced Settings",order:a(),render:({innerRef:e,onLoadingChanged:t})=>De.createElement(ii,{ref:e,...r,onLoadingChanged:t}),wizard:n}))}})}}Ol.contextType=Y,Ol.defaultProps={closeModal:T,dismissModal:T};const Hl=Object.assign(r(Ol),{show:Ol.show});function Ul(e,t){return e[t]||Object.values(e).find(e=>(e.listeners||[]).some(e=>e.name===t))}function $l(e){return Array.from(new Set(e.filter(Boolean)))}function ql(e,t){return"string"==typeof e?e:t.map(t=>null==e?void 0:e[t]).find(e=>"string"==typeof e)}function _l(e,t){return(e||[]).map(e=>ql(e,t)).filter(Boolean)}da(".gce-instance-build-custom-select {\n margin-top: 5px;\n}\n.gce-instance-build-custom-select .gce-instance-build-custom-extended-memory-checkbox {\n display: flex;\n}\n.gce-instance-build-custom-select .gce-instance-build-custom-extended-memory-checkbox-helptext {\n margin: 8px 0px 0px 3px;\n}\n");class jl extends De.Component{constructor(){super(...arguments),this.handleVCpuChange=e=>{const t=e?e.value:null;this.props.onChange({instanceFamily:this.props.selectedInstanceFamily,vCpuCount:t,memory:this.props.selectedMemory,extendedMemory:this.props.selectedExtendedMemory})},this.handleMemoryChange=e=>{const t=e?e.value:null;this.props.onChange({instanceFamily:this.props.selectedInstanceFamily,vCpuCount:this.props.selectedVCpuCount,memory:t,extendedMemory:this.props.selectedExtendedMemory})},this.handleInstanceFamilyChange=e=>{const t=e?e.value:null;this.props.onChange({instanceFamily:t,vCpuCount:this.props.selectedVCpuCount,memory:this.props.selectedMemory,extendedMemory:"E2"!==t&&this.props.selectedExtendedMemory})},this.handleMemoryChangeCustom=e=>{const t=+e;this.props.onChange({instanceFamily:this.props.selectedInstanceFamily,vCpuCount:this.props.selectedVCpuCount,memory:t,extendedMemory:this.props.selectedExtendedMemory})},this.handleExtendedMemory=e=>{this.props.onChange({instanceFamily:this.props.selectedInstanceFamily,vCpuCount:this.props.selectedVCpuCount,memory:this.props.selectedMemory,extendedMemory:e})}}render(){const e=(this.props.instanceFamilyList||[]).map(e=>({label:e,value:e})),t=(this.props.vCpuList||[]).map(e=>({label:e+"",value:e})),a=(this.props.memoryList||[]).map(e=>({label:e+"",value:e})),n=this.props.selectedVCpuCount?this.props.selectedVCpuCount+"":null,r=this.props.selectedMemory?this.props.selectedMemory+"":null,i=this.props.selectedInstanceFamily?this.props.selectedInstanceFamily:null;return De.createElement("div",null,De.createElement("div",{className:"row"},De.createElement("div",{className:"col-md-5 sm-label-right"},De.createElement("b",null,"Family ")),De.createElement("div",{className:"col-md-3"},De.createElement(Le,{options:e,clearable:!1,value:{label:i,value:this.props.selectedInstanceFamily},onChange:this.handleInstanceFamilyChange}))),De.createElement("div",{className:"row gce-instance-build-custom-select"},De.createElement("div",{className:"col-md-5 sm-label-right"},De.createElement("b",null,"Cores "),De.createElement(X,{id:"gce.instance.customInstance.cores"})),De.createElement("div",{className:"col-md-3"},De.createElement(Le,{options:t,clearable:!1,value:{label:n,value:this.props.selectedVCpuCount},onChange:this.handleVCpuChange}))),De.createElement("div",{className:"row gce-instance-build-custom-select"},De.createElement("div",{className:"col-md-5 sm-label-right"},De.createElement("b",null,"Memory (Gb) "),De.createElement(X,{id:"gce.instance.customInstance.memory"})),De.createElement("div",{className:"col-md-3"},this.props.selectedExtendedMemory?De.createElement("input",{type:"number",name:"memory",className:"form-control",value:this.props.selectedMemory,onChange:e=>this.handleMemoryChangeCustom(e.target.value)}):De.createElement(Le,{options:a,clearable:!1,value:{label:r,value:this.props.selectedMemory},onChange:this.handleMemoryChange}))),"E2"!==this.props.selectedInstanceFamily?De.createElement("div",{className:"row gce-instance-build-custom-select"},De.createElement("div",{className:"col-md-5 sm-label-right"}),De.createElement("div",{className:"col-md-3"},De.createElement("span",{className:"gce-instance-build-custom-extended-memory-checkbox"},De.createElement(le,{name:"extendedMemory",text:"Extended Memory",checked:this.props.selectedExtendedMemory,onChange:e=>{this.handleExtendedMemory(e.target.checked)}}),De.createElement("div",{className:"gce-instance-build-custom-extended-memory-checkbox-helptext"},De.createElement(X,{id:"gce.instance.customInstance.extendedmemory"}))))):null)}}const Vl=new Ir;function Kl({command:e,onTypeChanged:t}){const{instanceTypeService:a}=A(),n=e,[r,i]=De.useState(()=>function(e){if(e.viewState.customInstance)return{extendedMemory:Yl(e.instanceType),...e.viewState.customInstance};const t=e.instanceType?Vl.parseInstanceTypeString((n=e.instanceType,Yl(n)?n.replace(/-ext$/,""):n)):{instanceFamily:"N1",vCpuCount:null,memory:null},a=Zl({...t,extendedMemory:Yl(e.instanceType)},Wl(e,t));var n;return e.viewState.customInstance=a,a}(n)),l=Wl(n,r),o=Zl(r,l);return De.createElement(jl,{instanceFamilyList:l.instanceFamilyList,memoryList:l.memoryList,onChange:e=>{const r=Zl(e,Wl(n,e)),l=Vl.generateInstanceTypeString(r.instanceFamily,r.vCpuCount,r.memory,r.extendedMemory);n.viewState.customInstance=r,n.instanceType=l,n.customInstanceChanged&&n.customInstanceChanged(n),i(r),a.getInstanceTypeDetails(n.selectedProvider,l).then(e=>{n.viewState.instanceTypeDetails=e}),t&&t(l)},selectedExtendedMemory:o.extendedMemory,selectedInstanceFamily:o.instanceFamily,selectedMemory:o.memory,selectedVCpuCount:o.vCpuCount,vCpuList:l.vCpuList})}function Zl(e,t){const a=e.instanceFamily||t.instanceFamilyList[0]||"N1",n=e.vCpuCount||t.vCpuList[0],r=t.memoryList.length?t.memoryList:n?Vl.generateValidMemoryListForVCpuCount(a,n):[];return{extendedMemory:Boolean(e.extendedMemory),instanceFamily:a,memory:e.memory||r[0],vCpuCount:n}}function Wl(e,t){var a,n;const r=e.backingData.customInstanceTypes||{},i=e.regional?e.region:e.zone,l=null==(n=null==(a=e.backingData.credentialsKeyedByAccount)?void 0:a[e.credentials])?void 0:n.locationToInstanceTypesMap,o=r.vCpuList||(i&&l?Vl.generateValidVCpuListForLocation(i,l):[]),s=t.vCpuCount||o[0];return{instanceFamilyList:r.instanceFamilyList||Vl.generateValidInstanceFamilyList(),memoryList:r.memoryList||(s?Vl.generateValidMemoryListForVCpuCount(t.instanceFamily||"N1",s):[]),vCpuList:o}}function Yl(e){return Boolean(e&&e.endsWith("-ext"))}function Xl({instanceFlexibilityPolicy:e}){const t=null==e?void 0:e.instanceSelections;return Me(t)?null:De.createElement("dl",{className:"dl-horizontal dl-narrow"},Object.entries(t).map(([e,t])=>De.createElement(De.Fragment,{key:e},De.createElement("dt",null,"Selection"),De.createElement("dd",null,e),null!=t.rank&&De.createElement(De.Fragment,null,De.createElement("dt",null,"Rank"),De.createElement("dd",null,t.rank)),De.createElement("dt",null,"Machine types"),De.createElement("dd",null,(t.machineTypes||[]).join(", ")))))}function Jl(e){var t;return Boolean((null==(t=e.healthCheck)?void 0:t.trim())&&e.healthCheckKind&&function(e,t=2147483647){return"number"==typeof e&&Number.isFinite(e)&&Number.isInteger(e)&&e>=0&&e<=t}(e.initialDelaySec))}class Ql extends De.Component{constructor(e){super(e),this.submit=()=>{this.state.taskMonitor.submit(()=>qi.upsertAutoHealingPolicy(this.props.application,this.props.serverGroup,this.state.policy))};const t=e.policy?"Edit":"New",a=Te(e.policy||{initialDelaySec:300});Reflect.deleteProperty(a,"maxUnavailable"),this.state={policy:a,taskMonitor:new f({application:e.application,title:`${t} autohealing policy for ${e.serverGroup.name}`,onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var t,a,n;null==(a=null==(t=e.application.serverGroups)?void 0:t.refresh)||a.call(t),null==(n=e.closeModal)||n.call(e)}})}}static show(e){return b.show(Ql,e,{dialogClassName:"modal-md"})}render(){const e=!this.props.policy;return De.createElement(De.Fragment,null,De.createElement(y,{monitor:this.state.taskMonitor}),De.createElement(k,{dismiss:this.props.dismissModal}),De.createElement("div",{className:"modal-header"},De.createElement("h4",{className:"modal-title"},e?"New":"Edit"," autohealing policy")),De.createElement("div",{className:"modal-body"},De.createElement(Oi,{account:this.props.serverGroup.account,policy:this.state.policy,onChange:e=>this.setState({policy:e})})),De.createElement("div",{className:"modal-footer"},De.createElement("button",{className:"btn btn-default",type:"button",onClick:()=>{var e,t;return null==(t=(e=this.props).dismissModal)?void 0:t.call(e)}},"Cancel"),De.createElement(C,{isDisabled:!Jl(this.state.policy),label:e?"Create":"Update",onClick:this.submit,submitting:this.state.taskMonitor.submitting})))}}function eo({application:e,mutationsEnabled:t,serverGroup:a,policy:n}){var r;const i=t=>{oe(a,e).then(e=>e&&t())};if(!n)return t?De.createElement("button",{className:"btn btn-link","data-testid":"add-auto-healing-policy",type:"button",onClick:()=>i(()=>Ql.show({application:e,serverGroup:a}))},"Add auto-healing policy"):null;const l=()=>{u.confirm({header:`Really delete autohealer for ${a.name}?`,buttonText:"Delete autohealer",account:a.account,taskMonitorConfig:{application:e,title:`Deleting autohealing policy for ${a.name}`},submitMethod:()=>qi.deleteAutoHealingPolicy(e,a)})};return De.createElement("div",{className:"gce-auto-healing-policy-details"},De.createElement("dl",{className:"horizontal-when-filters-collapsed"},De.createElement("dt",null,"Health Check"),De.createElement("dd",null,n.healthCheck||n.healthCheckUrl||"-"),De.createElement("dt",null,"Initial Delay"),De.createElement("dd",null,null!=(r=n.initialDelaySec)?r:"-"," seconds")),t&&De.createElement("div",{className:"text-right"},De.createElement("button",{className:"btn btn-link","data-testid":"edit-auto-healing-policy",type:"button",onClick:()=>i(()=>Ql.show({application:e,serverGroup:a,policy:n}))},"Edit"),De.createElement("button",{className:"btn btn-link","data-testid":"delete-auto-healing-policy",type:"button",onClick:()=>i(l)},"Delete")))}function to(e,t,a=2147483647){return"number"==typeof e&&Number.isFinite(e)&&Number.isInteger(e)&&e>=t&&e<=a}function ao(e,t){return"number"==typeof e&&Number.isFinite(e)&&e>0&&(void 0===t||e<t)}function no(e){var t;return!(!(null==(t=e.metric)?void 0:t.trim())||!e.metricExportScope)&&("SINGLE_TIME_SERIES_PER_GROUP"===e.metricExportScope&&"SINGLE_INSTANCE_ASSIGNMENT"===e.scalingpolicy?function(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0}(e.singleInstanceAssignment):("SINGLE_TIME_SERIES_PER_GROUP"!==e.metricExportScope||"UTILIZATION_TARGET"===e.scalingpolicy)&&(ao(e.utilizationTarget)&&Boolean(e.utilizationTargetType)))}function ro(e){var t,a,n,r;return Te(e.policy||{minNumReplicas:null!=(a=null==(t=e.serverGroup.capacity)?void 0:t.min)?a:0,maxNumReplicas:null!=(r=null==(n=e.serverGroup.capacity)?void 0:n.max)?r:1,coolDownPeriodSec:60,mode:"ON",cpuUtilization:{utilizationTarget:.6}})}class io extends De.Component{constructor(e){super(e),this.submit=()=>{this.state.taskMonitor.submit(()=>qi.upsertAutoscalingPolicy(this.props.application,this.props.serverGroup,this.state.policy))};const t=e.policy?"Edit":"New";this.state={policy:ro(e),taskMonitor:new f({application:e.application,title:`${t} scaling policy for ${e.serverGroup.name}`,onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var t,a,n;null==(a=null==(t=e.application.serverGroups)?void 0:t.refresh)||a.call(t),null==(n=e.closeModal)||n.call(e)}})}}static show(e){return b.show(io,e,{dialogClassName:"modal-lg"})}render(){const e=!this.props.policy;return De.createElement(De.Fragment,null,De.createElement(y,{monitor:this.state.taskMonitor}),De.createElement(k,{dismiss:this.props.dismissModal}),De.createElement("div",{className:"modal-header"},De.createElement("h4",{className:"modal-title"},e?"New":"Edit"," autoscaling policy")),De.createElement("div",{className:"modal-body"},De.createElement(Ki,{policy:this.state.policy,onChange:e=>this.setState({policy:e})})),De.createElement("div",{className:"modal-footer"},De.createElement("button",{className:"btn btn-default",type:"button",onClick:()=>{var e,t;return null==(t=(e=this.props).dismissModal)?void 0:t.call(e)}},"Cancel"),De.createElement(C,{isDisabled:!this.isValid(),label:e?"Create":"Update",onClick:this.submit,submitting:this.state.taskMonitor.submitting})))}isValid(){var e,t;const{policy:a}=this.state,n=(null==(e=a.cpuUtilization)?void 0:e.predictiveMethod)===Hi.STANDARD;return to(a.minNumReplicas,0)&&to(a.maxNumReplicas,0)&&a.minNumReplicas<=a.maxNumReplicas&&to(a.coolDownPeriodSec,15)&&function(e){var t,a;const n=Boolean(e.cpuUtilization&&Object.keys(e.cpuUtilization).length),r=Boolean(e.loadBalancingUtilization&&Object.keys(e.loadBalancingUtilization).length),i=e.customMetricUtilizations||[],l=!n||ao(null==(t=e.cpuUtilization)?void 0:t.utilizationTarget,1),o=!r||ao(null==(a=e.loadBalancingUtilization)?void 0:a.utilizationTarget,1),s=i.every(no);return l&&o&&s&&(n&&l||r&&o||i.length>0)}(a)&&function(e){return(e.scalingSchedules||[]).every(t=>{var a,n,r;return Boolean(null==(a=t.scheduleName)?void 0:a.trim())&&to(t.minimumRequiredInstances,0,e.maxNumReplicas)&&Boolean(null==(n=t.scheduleCron)?void 0:n.trim())&&Boolean(null==(r=t.timezone)?void 0:r.trim())&&to(t.duration,301,1209600)})}(a)&&function(e){if(!e.scaleInControl)return!0;const{maxScaledInReplicas:t,timeWindowSec:a}=e.scaleInControl,n=void 0!==(null==t?void 0:t.fixed),r=void 0!==(null==t?void 0:t.percent);return!(n===r||!to(a,60,3600))&&(r?to(null==t?void 0:t.percent,0,100):to(null==t?void 0:t.fixed,0))}(a)&&(!n||Boolean(Ga.feature.predictiveAutoscaling))&&(!n||ao(null==(t=a.cpuUtilization)?void 0:t.utilizationTarget,1))}}function lo(e){return void 0===e?"-":`${Math.round(100*e)}%`}function oo({application:e,mutationsEnabled:t,serverGroup:a,policy:n}){var r,i,l,o,s,c;const d=t=>{oe(a,e).then(e=>e&&t())};if(!n)return t?De.createElement("button",{className:"btn btn-link","data-testid":"add-autoscaling-policy",type:"button",onClick:()=>d(()=>io.show({application:e,serverGroup:a}))},"Add autoscaling policy"):null;const m=null==(r=n.scaleInControl)?void 0:r.maxScaledInReplicas,p="number"==typeof(null==m?void 0:m.percent)?`${m.percent}%`:"number"==typeof(null==m?void 0:m.fixed)?`${m.fixed}`:void 0,h=()=>{u.confirm({header:`Really delete autoscaler for ${a.name}?`,buttonText:"Delete autoscaler",account:a.account,taskMonitorConfig:{application:e,title:`Deleting autoscaler for ${a.name}`},submitMethod:()=>qi.deleteAutoscalingPolicy(e,a)})};return De.createElement("div",{className:"gce-autoscaling-policy-details"},De.createElement("dl",{className:"horizontal-when-filters-collapsed"},n.cpuUtilization&&De.createElement(De.Fragment,null,De.createElement("dt",null,"Target CPU Usage"),De.createElement("dd",null,"CPU Usage: ",lo(n.cpuUtilization.utilizationTarget))),Ga.feature.predictiveAutoscaling&&void 0!==(null==(i=n.cpuUtilization)?void 0:i.predictiveMethod)&&De.createElement(De.Fragment,null,De.createElement("dt",null,"Predictive Autoscaling"),De.createElement("dd",null,n.cpuUtilization.predictiveMethod)),n.loadBalancingUtilization&&De.createElement(De.Fragment,null,De.createElement("dt",null,"Target HTTP Load Balancing Usage"),De.createElement("dd",null,lo(n.loadBalancingUtilization.utilizationTarget))),(n.customMetricUtilizations||[]).map((e,t)=>{var a,n;return De.createElement(De.Fragment,{key:`${e.metric}-${t}`},De.createElement("dt",null,"Monitoring Metric"),De.createElement("dd",null,e.metric||"-",": ",null!=(n=null!=(a=e.utilizationTarget)?a:e.singleInstanceAssignment)?n:"-","DELTA_PER_SECOND"===e.utilizationTargetType?"/sec":"DELTA_PER_MINUTE"===e.utilizationTargetType?"/min":""))}),De.createElement("dt",null,"Min # VMs"),De.createElement("dd",null,null!=(l=n.minNumReplicas)?l:"-"),De.createElement("dt",null,"Max # VMs"),De.createElement("dd",null,null!=(o=n.maxNumReplicas)?o:"-"),De.createElement("dt",null,"Cool-down Period"),De.createElement("dd",null,null!=(s=n.coolDownPeriodSec)?s:"-"," sec"),De.createElement("dt",null,"Mode"),De.createElement("dd",null,n.mode||"-"),n.scaleInControl&&De.createElement(De.Fragment,null,De.createElement("dt",null,"Max Scaled-in Replicas"),De.createElement("dd",null,null!=p?p:"-"),De.createElement("dt",null,"Scale-in Time Window"),De.createElement("dd",null,null!=(c=n.scaleInControl.timeWindowSec)?c:"-"," seconds")),(n.scalingSchedules||[]).map((e,t)=>De.createElement(De.Fragment,{key:`${e.scheduleName}-${t}`},De.createElement("dt",null,"Scaling Schedule"),De.createElement("dd",null,e.scheduleName||"-"," (",e.enabled?"enabled":"disabled",")",e.timezone?`, ${e.timezone}`:""))),(a.autoscalingMessages||[]).map((e,t)=>De.createElement(De.Fragment,{key:t},De.createElement("dt",null,"Message"),De.createElement("dd",null,e)))),t&&De.createElement("div",{className:"text-right"},De.createElement("button",{className:"btn btn-link","data-testid":"edit-autoscaling-policy",type:"button",onClick:()=>d(()=>io.show({application:e,serverGroup:a,policy:n}))},"Edit"),De.createElement("button",{className:"btn btn-link","data-testid":"delete-autoscaling-policy",type:"button",onClick:()=>d(h)},"Delete")))}function so(e,t){if(!e.autoscalingPolicy&&void 0===t.newSize)return{newSize:"Size is required"};if(!e.autoscalingPolicy&&void 0!==t.newSize&&(!Number.isInteger(t.newSize)||t.newSize<0))return{newSize:"Size must be a finite non-negative integer"};if(e.autoscalingPolicy){const e={};if(void 0===t.newMinNumReplicas&&(e.newMinNumReplicas="Min is required"),void 0===t.newMaxNumReplicas&&(e.newMaxNumReplicas="Max is required"),Object.keys(e).length)return e;if((!Number.isInteger(t.newMinNumReplicas)||t.newMinNumReplicas<0)&&(e.newMinNumReplicas="Min must be a finite non-negative integer"),(!Number.isInteger(t.newMaxNumReplicas)||t.newMaxNumReplicas<0)&&(e.newMaxNumReplicas="Max must be a finite non-negative integer"),Object.keys(e).length)return e}return e.autoscalingPolicy&&void 0!==t.newMinNumReplicas&&void 0!==t.newMaxNumReplicas&&t.newMinNumReplicas>t.newMaxNumReplicas?{newMaxNumReplicas:"Min cannot be larger than Max",newMinNumReplicas:"Min cannot be larger than Max"}:{}}class co extends De.Component{constructor(e){var t,a;super(e),this.isValid=()=>this.state.verified&&0===Object.keys(so(this.props.serverGroup,this.state.values)).length,this.submit=()=>{if(!this.isValid())return;const{application:e,autoscalingPolicyWriter:t,serverGroup:a,serverGroupWriter:n}=this.props;if(a.autoscalingPolicy){const{params:n,policy:i}={params:{interestingHealthProviderNames:(r=this.state.values).interestingHealthProviderNames,reason:r.reason},policy:{maxNumReplicas:r.newMaxNumReplicas,minNumReplicas:r.newMinNumReplicas}};return void this.state.taskMonitor.submit(()=>t.upsertAutoscalingPolicy(e,a,i,n))}var r;const i=function(e,t){return{capacity:{desired:t.newSize,max:t.newSize,min:t.newSize},interestingHealthProviderNames:t.interestingHealthProviderNames,reason:t.reason,region:e.region,serverGroupName:e.name,targetSize:t.newSize}}(a,this.state.values);this.state.taskMonitor.submit(()=>n.resizeServerGroup(a,e,i))};const{application:n}=e;this.state={taskMonitor:new f({application:n,title:`Resizing ${e.serverGroup.name}`,onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>n.serverGroups.refresh()}),values:{interestingHealthProviderNames:(null==(t=n.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(a=n.attributes)?void 0:a.platformHealthOnly)?["Google"]:void 0},verified:!1}}static show(e){return b.show(co,e)}render(){var e,t,a,n,r,i,l;const{application:o,serverGroup:s}=this.props,{values:c}=this.state,d=null!=(a=null==(e=s.asg)?void 0:e.desiredCapacity)?a:null==(t=s.capacity)?void 0:t.desired,u=Object.values(so(s,c))[0];return De.createElement(De.Fragment,null,De.createElement(y,{monitor:this.state.taskMonitor}),De.createElement(k,{dismiss:this.props.dismissModal}),De.createElement("div",{className:"modal-header"},De.createElement("h4",{className:"modal-title"},"Resize ",s.name)),De.createElement("div",{className:"modal-body"},De.createElement("form",{className:"form-horizontal"},s.autoscalingPolicy?De.createElement(De.Fragment,null,De.createElement("p",null,"Sets min and max instance counts for this server group's autoscaling policy."),De.createElement("div",{className:"form-group"},De.createElement("div",{className:"col-md-2 col-md-offset-3"},De.createElement("b",null,"Min")),De.createElement("div",{className:"col-md-2"},De.createElement("b",null,"Max"))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right"},"Current"),De.createElement("div",{className:"col-md-2"},De.createElement("input",{className:"form-control input-sm",disabled:!0,type:"number",value:s.autoscalingPolicy.minNumReplicas})),De.createElement("div",{className:"col-md-2"},De.createElement("input",{className:"form-control input-sm",disabled:!0,type:"number",value:s.autoscalingPolicy.maxNumReplicas}))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right"},"Resize to"),De.createElement("div",{className:"col-md-2"},De.createElement("input",{className:"form-control input-sm",min:0,name:"newMinNumReplicas",onChange:e=>this.setState({values:{...c,newMinNumReplicas:""===e.target.value?void 0:Number(e.target.value)}}),type:"number",value:null!=(n=c.newMinNumReplicas)?n:""})),De.createElement("div",{className:"col-md-2"},De.createElement("input",{className:"form-control input-sm",min:0,name:"newMaxNumReplicas",onChange:e=>this.setState({values:{...c,newMaxNumReplicas:""===e.target.value?void 0:Number(e.target.value)}}),type:"number",value:null!=(r=c.newMaxNumReplicas)?r:""})))):De.createElement(De.Fragment,null,De.createElement("p",null,"Sets desired instance count for this server group."),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right"},"Current size"),De.createElement("div",{className:"col-md-4"},De.createElement("input",{className:"form-control input-sm",disabled:!0,type:"number",value:d}))),De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-resize-new-size"},"Resize to"),De.createElement("div",{className:"col-md-4"},De.createElement("input",{className:"form-control input-sm",id:"gce-resize-new-size",min:0,name:"newSize",onChange:e=>this.setState({values:{...c,newSize:""===e.target.value?void 0:Number(e.target.value)}}),type:"number",value:null!=(i=c.newSize)?i:""})))),u&&De.createElement(se,{message:u,type:"error"}),(null==(l=o.attributes)?void 0:l.platformHealthOnlyShowOverride)&&De.createElement(ce,{interestingHealthProviderNames:c.interestingHealthProviderNames,onChange:e=>this.setState({values:{...c,interestingHealthProviderNames:e}}),platformHealthType:"Google",showHelpDetails:!0}),De.createElement(J,{reason:c.reason,onChange:e=>this.setState({values:{...c,reason:e}})}))),De.createElement("div",{className:"modal-footer"},De.createElement(de,{account:s.account,onValidChange:e=>this.setState({verified:e})}),De.createElement("button",{className:"btn btn-default",onClick:this.props.dismissModal,type:"button"},"Cancel"),De.createElement("button",{className:"btn btn-primary",disabled:!this.isValid(),onClick:this.submit,type:"button"},"Submit")))}}function uo(e,t,a){return a.filter(a=>{var n;const r=a.app||(null==(n=a.moniker)?void 0:n.app);return!0===a.isDisabled&&r===e.name&&a.cluster===t.cluster&&a.account===t.account&&a.region===t.region}).sort((e,t)=>t.name.localeCompare(e.name))}const mo=class e extends De.Component{constructor(e){var t,a;super(e),this.close=()=>this.props.dismissModal(),this.isValid=()=>this.state.verified&&!!this.state.values.restoreServerGroupName,this.submit=()=>{if(!this.isValid())return;const{application:e,serverGroup:t,serverGroupWriter:a}=this.props,n=function(e,t,a){var n;return{interestingHealthProviderNames:a.interestingHealthProviderNames,platformHealthOnlyShowOverride:null==(n=e.attributes)?void 0:n.platformHealthOnlyShowOverride,reason:a.reason,rollbackContext:{restoreServerGroupName:a.restoreServerGroupName,rollbackServerGroupName:t.name},rollbackType:"EXPLICIT"}}(e,t,this.state.values);this.state.taskMonitor.submit(()=>a.rollbackServerGroup(t,e,n))};const{application:n,serverGroup:r}=e;this.state={taskMonitor:new f({application:n,title:`Rollback ${r.name}`,onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>n.serverGroups.refresh()}),values:{interestingHealthProviderNames:(null==(t=n.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(a=n.attributes)?void 0:a.platformHealthOnly)?["Google"]:void 0},verified:!1}}static show(t){return b.show(e,t)}render(){var e;const{application:t,serverGroup:a,serverGroups:n}=this.props,{taskMonitor:r,values:i}=this.state,l=uo(t,a,n);return De.createElement(De.Fragment,null,De.createElement(y,{monitor:r}),De.createElement(k,{dismiss:this.close}),De.createElement("div",{className:"modal-header"},De.createElement("h4",{className:"modal-title"},"Rollback ",a.name)),De.createElement("div",{className:"modal-body"},De.createElement("form",{className:"form-horizontal"},De.createElement("div",{className:"form-group"},De.createElement("label",{className:"col-sm-3 sm-label-right",htmlFor:"gce-rollback-server-group"},"Restore to"),De.createElement("div",{className:"col-sm-6"},De.createElement("select",{className:"form-control input-sm",id:"gce-rollback-server-group",onChange:e=>this.setState({values:{...i,restoreServerGroupName:e.target.value||void 0}}),value:i.restoreServerGroupName||""},De.createElement("option",{value:""},"Select..."),l.map(e=>De.createElement("option",{key:e.name,value:e.name},e.name))))),(null==(e=t.attributes)?void 0:e.platformHealthOnlyShowOverride)&&De.createElement(ce,{interestingHealthProviderNames:i.interestingHealthProviderNames,onChange:e=>this.setState({values:{...i,interestingHealthProviderNames:e}}),platformHealthType:"Google",showHelpDetails:!0}),De.createElement(J,{reason:i.reason,onChange:e=>this.setState({values:{...i,reason:e}})}))),De.createElement("div",{className:"modal-footer"},De.createElement(de,{account:a.account,onValidChange:e=>this.setState({verified:e})}),De.createElement("button",{className:"btn btn-default",onClick:this.close,type:"button"},"Cancel"),De.createElement("button",{className:"btn btn-primary",disabled:!this.isValid(),onClick:this.submit,type:"button"},"Submit")))}};mo.defaultProps={closeModal:T,dismissModal:T};let po=mo;function ho(e){var t,a,n;const r=function(e){var t;const a=null==(t=e.launchConfig)?void 0:t.instanceTemplate;return a?(new Ke).deriveProjectId(a):void 0}(e),i=null==(t=e.launchConfig)?void 0:t.instanceTemplate,l=(null==(n=null==(a=null==i?void 0:i.properties)?void 0:a.networkInterfaces)?void 0:n[0])||{},o=new Ke;return{...e,account:e.account||e.accountId,logsLink:r?`https://console.cloud.google.com/logs/query?project=${encodeURIComponent(r)}&resource=gce_instance_group`:void 0,network:o.decorateXpnResourceIfNecessary(r,l.network),subnet:o.decorateXpnResourceIfNecessary(r,l.subnetwork),zones:[...e.zones||[]].sort()}}function go(e,t){return new Oe(a=>{const n=function(e,t){var a,n;const r=((null==(a=null==e?void 0:e.serverGroups)?void 0:a.data)||[]).find(e=>e.name===t.name&&e.account===t.accountId&&e.region===t.region);if(r)return r;const i=(null==(n=null==e?void 0:e.loadBalancers)?void 0:n.data)||[];for(const e of i){const a=(e.serverGroups||[]).find(e=>e.name===t.name&&e.account===t.accountId&&e.region===t.region);if(a)return a}return null}(e.app,e.serverGroup);ue.getServerGroup(e.app.name,e.serverGroup.accountId,e.serverGroup.region,e.serverGroup.name).then(r=>{if(!r||0===Object.keys(r).length)return t(),void a.complete();a.next(ho({...n||{},...r,account:e.serverGroup.accountId})),a.complete()},()=>{t(),a.complete()})})}function vo(e,t={}){var a,n;return(null==(a=e.attributes)?void 0:a.platformHealthOnlyShowOverride)&&(null==(n=e.attributes)?void 0:n.platformHealthOnly)?{...t,interestingHealthProviderNames:t.interestingHealthProviderNames||["Google"]}:t}function bo({app:e,serverGroup:t}){var a;const n=A(),{serverGroupCommandBuilder:r,serverGroupWriter:i}=n;if(P.isDisabled("gce"))return null;const l={account:t.account,askForReason:!0,platformHealthOnlyShowOverride:null==(a=e.attributes)?void 0:a.platformHealthOnlyShowOverride,platformHealthType:"Google"};return De.createElement("div",{className:"dropdown",id:"gce-server-group-actions-dropdown"},De.createElement("button",{className:"btn btn-sm btn-primary dropdown-toggle","data-toggle":"dropdown",type:"button"},"Server Group Actions"),De.createElement("ul",{className:"dropdown-menu"},!t.isDisabled&&De.createElement(I,{resource:t,application:e,onClick:()=>{var a;const n=uo(e,t,(null==(a=e.serverGroups)?void 0:a.data)||[]);po.show({application:e,serverGroup:t,serverGroups:n,serverGroupWriter:i})}},"Rollback"),De.createElement(I,{resource:t,application:e,onClick:()=>{co.show({application:e,autoscalingPolicyWriter:qi,serverGroup:t,serverGroupWriter:i})}},"Resize"),De.createElement("li",null,De.createElement("a",{onClick:()=>{!function(e,t,a,n){Promise.resolve(a.buildServerGroupCommandFromExisting(e,t)).then(a=>{Hl.show({application:e,command:a,title:`Clone ${t.name}`},n)}).catch(e=>{var a;pe.error({header:`Error cloning ${t.name}`,body:(null==(a=null==e?void 0:e.data)?void 0:a.message)||(null==e?void 0:e.message)||"Unable to build the clone server group command."})})}(e,t,r,n)}},"Clone")),!t.isDisabled&&De.createElement("li",null,De.createElement("a",{onClick:()=>{const a={...l,buttonText:`Disable ${t.name}`,header:`Really disable ${t.name}?`,submitMethod:a=>i.disableServerGroup(t,e.name,vo(e,a)),taskMonitorConfig:{application:e,title:`Disabling ${t.name}`}};me.addDisableWarningMessage(e,t,a),u.confirm(a)}},"Disable")),t.isDisabled&&De.createElement("li",null,De.createElement("a",{onClick:()=>{u.confirm({...l,buttonText:`Enable ${t.name}`,header:`Really enable ${t.name}?`,submitMethod:a=>i.enableServerGroup(t,e,vo(e,a)),taskMonitorConfig:{application:e,title:`Enabling ${t.name}`}})}},"Enable")),De.createElement("li",null,De.createElement("a",{onClick:()=>{const a={...l,buttonText:`Destroy ${t.name}`,header:`Really destroy ${t.name}?`,submitMethod:a=>i.destroyServerGroup(t,e,vo(e,a)),taskMonitorConfig:{application:e,title:`Destroying ${t.name}`}};me.addDestroyWarningMessage(e,t,a),u.confirm(a)}},"Destroy"))))}function fo(e,t){var a,n;const r=null==(n=null==(a=e.launchConfig)?void 0:a.instanceTemplate)?void 0:n.properties,i=e.shieldedInstanceConfig||(null==r?void 0:r.shieldedInstanceConfig),l=e.shieldedVmConfig||(null==r?void 0:r.shieldedVmConfig);return Object.prototype.hasOwnProperty.call(i||{},t)?i[t]:Object.prototype.hasOwnProperty.call(l||{},t)?l[t]:e[t]}const yo=[function({serverGroup:e}){return De.createElement(c,{heading:"Server Group Information",defaultExpanded:!0},De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Account"),De.createElement("dd",null,De.createElement(d,{account:e.account})),De.createElement("dt",null,"Region"),De.createElement("dd",null,e.region),De.createElement("dt",null,"Network"),De.createElement("dd",null,e.network||"-"),De.createElement("dt",null,"Subnet"),De.createElement("dd",null,e.subnet||"-")))},function({serverGroup:e}){var t,a,n,r,i,l,o,s;return De.createElement(c,{heading:"Capacity",defaultExpanded:!0},De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Desired"),De.createElement("dd",null,null!=(r=null!=(n=null==(t=e.capacity)?void 0:t.desired)?n:null==(a=e.instances)?void 0:a.length)?r:"-"),De.createElement("dt",null,"Min"),De.createElement("dd",null,null!=(l=null==(i=e.capacity)?void 0:i.min)?l:"-"),De.createElement("dt",null,"Max"),De.createElement("dd",null,null!=(s=null==(o=e.capacity)?void 0:o.max)?s:"-")))},function({serverGroup:e}){var t,a;const n=null==(t=e.launchConfig)?void 0:t.instanceTemplate,r=[["Secure Boot",fo(e,"enableSecureBoot")],["vTPM",fo(e,"enableVtpm")],["Integrity Monitoring",fo(e,"enableIntegrityMonitoring")]];return De.createElement(c,{heading:"Launch Configuration",defaultExpanded:!0},De.createElement("dl",{className:"dl-horizontal dl-narrow"},De.createElement("dt",null,"Instance Template"),De.createElement("dd",null,(null==n?void 0:n.name)||"-"),De.createElement("dt",null,"Zones"),De.createElement("dd",null,(e.zones||[]).join(", ")||"-"),De.createElement("dt",null,"Target shape"),De.createElement("dd",null,(null==(a=e.distributionPolicy)?void 0:a.targetShape)||"-"),r.map(([e,t])=>De.createElement(De.Fragment,{key:e},De.createElement("dt",null,e),De.createElement("dd",null,void 0===t?"-":String(t)))),De.createElement("dt",null,"Logs"),De.createElement("dd",null,e.logsLink?De.createElement("a",{href:e.logsLink,target:"_blank",rel:"noopener noreferrer"},"View Google Cloud logs"):"-")),De.createElement(Xl,{instanceFlexibilityPolicy:e.instanceFlexibilityPolicy}))},function({app:e,serverGroup:t}){return De.createElement(c,{heading:"Autoscaling"},De.createElement(oo,{application:e,mutationsEnabled:!P.isDisabled("gce"),policy:t.autoscalingPolicy,serverGroup:t}))},function({app:e,serverGroup:t}){return De.createElement(c,{heading:"Auto-healing"},De.createElement(eo,{application:e,mutationsEnabled:!P.isDisabled("gce"),policy:t.autoHealingPolicy,serverGroup:t}))}];class ko{constructor(){const e=new Ya;return{convertServerGroupCommandToDeployConfiguration:function(e){const t=ke({backingData:[],viewState:[]},e);return"clone"!==e.viewState.mode&&delete t.source,t.disableTraffic=!t.enableTraffic,t.cloudProvider="gce",t.availabilityZones={},t.availabilityZones[t.region]=function(e){return e.zone?[e.zone]:[Ae(e,"backingData.filtered.truncatedZones"),Ae(e,["availabilityZones",e.region]),Ae(e,"distributionPolicy.zones")].find(e=>Array.isArray(e)&&e.length)||[]}(e),t.account=t.credentials,delete t.viewState,delete t.backingData,delete t.selectedProvider,delete t.implicitSecurityGroups,delete t.enableTraffic,delete t.providerType,delete t.enableAutoHealing,delete t.partnerMetadata,t.autoHealingPolicy&&(t.autoHealingPolicy=["healthCheck","healthCheckKind","healthCheckUrl","initialDelaySec"].reduce((e,a)=>(void 0!==t.autoHealingPolicy[a]&&(e[a]=t.autoHealingPolicy[a]),e),{})),t},normalizeServerGroup:function(t,a){return a.getDataSource("loadBalancers").ready().then(()=>(t.loadBalancers&&(t.loadBalancers=e.normalizeLoadBalancerNamesForAccount(t.loadBalancers,t.account,a.getDataSource("loadBalancers").data)),t))}}}}class Eo{constructor(){this.gceNetworks=void 0,v.listNetworksByProvider("gce").then(e=>{this.gceNetworks=e})}render(e){if(e.subnet)return e.subnet;return ve.chain(this.gceNetworks).filter({account:e.account,name:e.network}).map("autoCreateSubnets").head().value()?"(Auto-select)":"[none]"}}he.registerValidator("gce",new class{validateSpecialCharacters(e,t){/^([a-zA-Z][a-zA-Z0-9]*)?$/.test(e)||t.push("The application name must begin with a letter and must contain only letters or digits. No special characters are allowed.")}validateLength(e,t,a){const n=63;if(e.length>n)a.push("The maximum length for an application in Google is 63 characters.");else{if(e.length>34)if(e.length>46)t.push(`You will not be able to create a Google load balancer for this application if the\n application's name is longer than 46 characters (currently: ${e.length}\n characters).`);else if(e.length>=44)t.push('With separators ("-"), you will not be able to include a stack and detail field for Google load balancers.');else{const a=44-e.length;t.push(`If you plan to include a stack or detail field for Google load balancers, you will only\n have ~${a} characters to do so.`)}if(e.length>41)if(e.length>53)t.push(`You will not be able to create a Google server group for this application if the\n application's name is longer than 53 characters (currently: ${e.length}\n characters).`);else if(e.length>=51)t.push('With separators ("-"), you will not be able to include a stack and detail field for Google server groups.');else{const a=51-e.length;t.push(`If you plan to include a stack or detail field for Google server groups, you will only\n have ~${a} characters to do so.`)}if(e.length>51)if(e.length>=61)t.push(`With separators ("-"), you will not be able to include a stack and detail field for Google ${W.get("firewalls")}.`);else{const a=61-e.length;t.push(`If you plan to include a stack or detail field for Google ${W.get("firewalls")}, you will only\n have ~${a} characters to do so.`)}}}validate(e=""){const t=[],a=[];return e.length&&(this.validateSpecialCharacters(e,a),this.validateLength(e,t,a)),{warnings:t,errors:a}}});function Co(){P.registerProvider("gce",{name:"Google",logo:{path:"gce.logo2ae85d8704b1d6b8.png"},applicationProviderFields:[{field:"associatePublicIpAddress",helpKey:"gce.serverGroup.associatePublicIpAddress.providerField",label:"Associate Public IP Address",type:"boolean"}],cache:{configurer:$e},image:{reader:_e},serverGroup:{transformer:ko,commandBuilder:Dr,configurationService:Fr,CloneServerGroupModal:Hl,detailsActions:bo,detailsGetter:go,detailsSections:yo},instance:{CustomInstanceBuilder:Kl,details:Xe,instanceTypeService:Qe,multiInstanceTaskTransformer:nt},loadBalancer:{CreateLoadBalancerModal:Va,pipelineCreateLoadBalancerModal:e=>Va.show({...e,app:e.application,forPipelineConfig:!0}),detailsActions:rn,detailsSections:ln,transformer:sn,setTransformer:on,useDetailsHook:tn},securityGroup:{CreateSecurityGroupModal:Er,details:Nr,transformer:Ar,reader:Tr},subnet:{renderer:Eo},snapshotsEnabled:!0})}function So(e,t){B.pipeline.getStageTypes().some(t=>(t.provides||t.key)===e&&"gce"===t.cloudProvider)||t()}function No(){So("bake",bn),So("cloneServerGroup",_n),So("destroyServerGroup",jn),So("disableServerGroup",Vn),So("disableCluster",Kn),So("enableServerGroup",Zn),So("findImage",Wn),So("findImageFromTags",er),So("resizeServerGroup",tr),So("scaleDownCluster",ar),So("shrinkCluster",nr),So("upsertImageTags",dr)}da('.cloud-provider-logo .icon-gce {\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%2232px%22 height%3D%2232px%22 viewBox%3D%220 0 32 32%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 xmlns%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%3E %3C!-- Generator%3A Sketch 3.4.1 (15681) - http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch --%3E %3Ctitle%3Eshaded-32%2Fcompute-engine%3C%2Ftitle%3E %3Cdesc%3ECreated with Sketch.%3C%2Fdesc%3E %3Cdefs%3E%3C%2Fdefs%3E %3Cg id%3D%22Page-1%22 stroke%3D%22none%22 stroke-width%3D%221%22 fill%3D%22none%22 fill-rule%3D%22evenodd%22 sketch%3Atype%3D%22MSPage%22%3E %3Cg id%3D%22shaded-32%2Fcompute-engine%22 sketch%3Atype%3D%22MSArtboardGroup%22%3E %3Crect id%3D%22Container%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%220%22 width%3D%2232%22 height%3D%2232%22%3E%3C%2Frect%3E %3Cg id%3D%22shape%22 sketch%3Atype%3D%22MSLayerGroup%22 transform%3D%22translate(1.000000%2C 1.000000)%22%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%228%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%2213%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%2218%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%228%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%2213%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%2218%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2218%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2213%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%228%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2218%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2213%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%228%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Cpath d%3D%22M4%2C4 L4%2C25 L25%2C25 L25%2C4 L4%2C4 L4%2C4 Z M22%2C22 L7%2C22 L7%2C7 L22%2C7 L22%2C22 L22%2C22 Z%22 id%3D%22Shape%22 fill%3D%22%23757575%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23757575%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2210%22 y%3D%2210%22 width%3D%229%22 height%3D%229%22%3E%3C%2Frect%3E %3Cpath d%3D%22M19%2C19 L14.5%2C19 L14.5%2C14.4998 L19%2C9.9997 L19%2C19 Z%22 id%3D%22Shape%22 fill%3D%22%23424242%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M19%2C19 L10%2C19 L14.5%2C14.4998 L19%2C19 Z%22 id%3D%22Shape%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3C%2Fg%3E %3C%2Fg%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%2232px%22 height%3D%2232px%22 viewBox%3D%220 0 32 32%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 xmlns%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%3E %3C!-- Generator%3A Sketch 3.4.1 (15681) - http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch --%3E %3Ctitle%3Eshaded-32%2Fcompute-engine%3C%2Ftitle%3E %3Cdesc%3ECreated with Sketch.%3C%2Fdesc%3E %3Cdefs%3E%3C%2Fdefs%3E %3Cg id%3D%22Page-1%22 stroke%3D%22none%22 stroke-width%3D%221%22 fill%3D%22none%22 fill-rule%3D%22evenodd%22 sketch%3Atype%3D%22MSPage%22%3E %3Cg id%3D%22shaded-32%2Fcompute-engine%22 sketch%3Atype%3D%22MSArtboardGroup%22%3E %3Crect id%3D%22Container%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%220%22 width%3D%2232%22 height%3D%2232%22%3E%3C%2Frect%3E %3Cg id%3D%22shape%22 sketch%3Atype%3D%22MSLayerGroup%22 transform%3D%22translate(1.000000%2C 1.000000)%22%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%228%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%2213%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%2218%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%228%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%2213%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%2218%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2218%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2213%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%228%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2218%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2213%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%228%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Cpath d%3D%22M4%2C4 L4%2C25 L25%2C25 L25%2C4 L4%2C4 L4%2C4 Z M22%2C22 L7%2C22 L7%2C7 L22%2C7 L22%2C22 L22%2C22 Z%22 id%3D%22Shape%22 fill%3D%22%23757575%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23757575%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2210%22 y%3D%2210%22 width%3D%229%22 height%3D%229%22%3E%3C%2Frect%3E %3Cpath d%3D%22M19%2C19 L14.5%2C19 L14.5%2C14.4998 L19%2C9.9997 L19%2C19 Z%22 id%3D%22Shape%22 fill%3D%22%23424242%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M19%2C19 L10%2C19 L14.5%2C14.4998 L19%2C19 Z%22 id%3D%22Shape%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3C%2Fg%3E %3C%2Fg%3E %3C%2Fg%3E%3C%2Fsvg%3E");\n background-color: #4285f4;\n}\n'),Co(),No(),ge.registerProvider("gce",["custom","redblack"]);export{No as registerGooglePipelineStages,Co as registerGoogleProvider};
|
|
1
|
+
(()=>{try{if(typeof document!="undefined"){var elementStyle=document.createElement("style");elementStyle.appendChild(document.createTextNode(".gce-http-lb input[type=checkbox]{margin:10px 0 0 5px;position:absolute}.gce-http-load-balancer-editor section{margin-bottom:20px}.gce-http-load-balancer-editor fieldset{border:0;margin:0 0 15px;padding:0}.gce-http-load-balancer-editor fieldset>label{align-items:center;display:flex;font-weight:700;margin-bottom:10px}.gce-http-load-balancer-editor fieldset>label>input,.gce-http-load-balancer-editor fieldset>label>select{font-weight:400;margin-left:15px;width:66.6667%}.gce-http-load-balancer-editor fieldset>label>input:not([type=checkbox]),.gce-http-load-balancer-editor fieldset>label>select{display:block;height:30px;padding:5px 10px}.gce-http-load-balancer-editor fieldset>label>input[type=checkbox]{margin:0 8px 0 33.3333%}.gce-load-balancer-choice-modal .card-choices .gce-load-balancer-choice-card{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;color:inherit;font:inherit;text-align:initial}.gce-load-balancer-choice-modal .card-choices .gce-load-balancer-choice-card:focus{outline:2px solid var(--color-accent);outline-offset:2px}.gce-load-balancer-choice-modal .card-choices .gce-load-balancer-choice-card:disabled{cursor:not-allowed;opacity:.55}.gce-autoscaling-layout .checkbox{margin-left:5px;margin-top:7px}.gce-instance-build-custom-select{margin-top:5px}.gce-instance-build-custom-select .gce-instance-build-custom-extended-memory-checkbox{display:flex}.gce-instance-build-custom-select .gce-instance-build-custom-extended-memory-checkbox-helptext{margin:8px 0 0 3px}.cloud-provider-logo .icon-gce{-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%2232px%22 height%3D%2232px%22 viewBox%3D%220 0 32 32%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 xmlns%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%3E %3C!-- Generator%3A Sketch 3.4.1 (15681) - http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch --%3E %3Ctitle%3Eshaded-32%2Fcompute-engine%3C%2Ftitle%3E %3Cdesc%3ECreated with Sketch.%3C%2Fdesc%3E %3Cdefs%3E%3C%2Fdefs%3E %3Cg id%3D%22Page-1%22 stroke%3D%22none%22 stroke-width%3D%221%22 fill%3D%22none%22 fill-rule%3D%22evenodd%22 sketch%3Atype%3D%22MSPage%22%3E %3Cg id%3D%22shaded-32%2Fcompute-engine%22 sketch%3Atype%3D%22MSArtboardGroup%22%3E %3Crect id%3D%22Container%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%220%22 width%3D%2232%22 height%3D%2232%22%3E%3C%2Frect%3E %3Cg id%3D%22shape%22 sketch%3Atype%3D%22MSLayerGroup%22 transform%3D%22translate(1.000000%2C 1.000000)%22%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%228%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%2213%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%2218%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%228%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%2213%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%2218%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2218%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2213%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%228%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2218%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2213%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%228%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Cpath d%3D%22M4%2C4 L4%2C25 L25%2C25 L25%2C4 L4%2C4 L4%2C4 Z M22%2C22 L7%2C22 L7%2C7 L22%2C7 L22%2C22 L22%2C22 Z%22 id%3D%22Shape%22 fill%3D%22%23757575%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23757575%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2210%22 y%3D%2210%22 width%3D%229%22 height%3D%229%22%3E%3C%2Frect%3E %3Cpath d%3D%22M19%2C19 L14.5%2C19 L14.5%2C14.4998 L19%2C9.9997 L19%2C19 Z%22 id%3D%22Shape%22 fill%3D%22%23424242%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M19%2C19 L10%2C19 L14.5%2C14.4998 L19%2C19 Z%22 id%3D%22Shape%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3C%2Fg%3E %3C%2Fg%3E %3C%2Fg%3E%3C%2Fsvg%3E\");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%2232px%22 height%3D%2232px%22 viewBox%3D%220 0 32 32%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 xmlns%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%3E %3C!-- Generator%3A Sketch 3.4.1 (15681) - http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch --%3E %3Ctitle%3Eshaded-32%2Fcompute-engine%3C%2Ftitle%3E %3Cdesc%3ECreated with Sketch.%3C%2Fdesc%3E %3Cdefs%3E%3C%2Fdefs%3E %3Cg id%3D%22Page-1%22 stroke%3D%22none%22 stroke-width%3D%221%22 fill%3D%22none%22 fill-rule%3D%22evenodd%22 sketch%3Atype%3D%22MSPage%22%3E %3Cg id%3D%22shaded-32%2Fcompute-engine%22 sketch%3Atype%3D%22MSArtboardGroup%22%3E %3Crect id%3D%22Container%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%220%22 width%3D%2232%22 height%3D%2232%22%3E%3C%2Frect%3E %3Cg id%3D%22shape%22 sketch%3Atype%3D%22MSLayerGroup%22 transform%3D%22translate(1.000000%2C 1.000000)%22%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%228%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%2213%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%220%22 y%3D%2218%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%228%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%2213%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2225%22 y%3D%2218%22 width%3D%224%22 height%3D%223%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2218%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2213%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%228%22 y%3D%220%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2218%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2213%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%228%22 y%3D%2225%22 width%3D%223%22 height%3D%224%22%3E%3C%2Frect%3E %3Cpath d%3D%22M4%2C4 L4%2C25 L25%2C25 L25%2C4 L4%2C4 L4%2C4 Z M22%2C22 L7%2C22 L7%2C7 L22%2C7 L22%2C22 L22%2C22 Z%22 id%3D%22Shape%22 fill%3D%22%23757575%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3Crect id%3D%22Rectangle-path%22 fill%3D%22%23757575%22 sketch%3Atype%3D%22MSShapeGroup%22 x%3D%2210%22 y%3D%2210%22 width%3D%229%22 height%3D%229%22%3E%3C%2Frect%3E %3Cpath d%3D%22M19%2C19 L14.5%2C19 L14.5%2C14.4998 L19%2C9.9997 L19%2C19 Z%22 id%3D%22Shape%22 fill%3D%22%23424242%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3Cpath d%3D%22M19%2C19 L10%2C19 L14.5%2C14.4998 L19%2C19 Z%22 id%3D%22Shape%22 fill%3D%22%23616161%22 sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E %3C%2Fg%3E %3C%2Fg%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-color:#4285f4}\n"));document.head.appendChild(elementStyle)}}catch(error){console.error("spinnaker-css-injected-by-js",error)}})();
|
|
2
|
+
var e=Object.defineProperty,t=(t,a,n)=>((t,a,n)=>a in t?e(t,a,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[a]=n)(t,"symbol"!=typeof a?a+"":a,n);import{SearchService as a,InfrastructureCaches as n,REST as r,HelpContentsRegistry as i,withRouter as l,InstanceActions as o,RecentHistoryService as s,InstanceReader as c,Details as d,CollapsibleSection as u,AccountTag as m,ConfirmationModalService as p,InstanceWriter as h,AccountService as g,SETTINGS as v,SubnetReader as f,NetworkReader as b,ReactModal as y,TaskMonitor as E,TaskMonitorWrapper as k,ModalClose as C,Spinner as N,SubmitButton as T,LoadBalancerWriter as S,TaskExecutor as A,noop as P,useDeckRuntimeServices as w,useDataSource as I,HelpField as M,CloudProviderRegistry as R,ManagedMenuItem as G,AuthenticationService as B,BakeryReader as L,ExpectedArtifactService as x,StageConfigField as D,MapEditor as z,Registry as F,BakeExecutionLabel as O,ExecutionDetailsTasks as H,ExecutionArtifactTab as _,ArtifactReferenceService as U,ExecutionDetailsSection as $,StageFailureMessage as q,AccountRegionClusterSelector as j,StageConstants as V,TargetSelect as K,DeploymentStrategySelector as W,NameUtils as X,PipelineConfigService as Z,SecurityGroupWriter as Y,FirewallLabels as J,DeckRuntimeContext as Q,TaskReason as ee,Markdown as te,StageArtifactSelectorDelegate as ae,excludeAllTypesExcept as ne,ArtifactTypePatterns as re,SpelService as ie,WizardModal as le,WizardPage as oe,CheckboxInput as se,confirmNotManaged as ce,ValidationMessage as de,PlatformHealthOverride as ue,UserVerification as me,ServerGroupReader as pe,ServerGroupWarningMessageService as he,ErrorModalService as ge,ApplicationNameValidator as ve,DeploymentStrategyRegistry as fe}from"@spinnaker/core";import be,{uniqWith as ye,chain as Ee,isEqual as ke,defaults as Ce,uniq as Ne,partition as Te,groupBy as Se,map as Ae,cloneDeep as Pe,get as we,intersectionBy as Ie,isFinite as Me,isPlainObject as Re,isEmpty as Ge}from"lodash";import Be,{useState as Le,useLayoutEffect as xe,useRef as De,useEffect as ze,useCallback as Fe}from"react";import Oe,{Async as He}from"react-select";import{Observable as _e}from"rxjs";class Ue{listCertificates(){return a.search({q:"",type:"sslCertificates",allowShortQuery:"true"},n.get("certificates")).then(e=>e&&e.results?e.results.filter(e=>"gce"===e.provider):[]).catch(()=>[])}}class $e{listHealthChecks(e){return e?this.listHealthChecks().then(t=>t.filter(t=>t.healthCheckType===e)):a.search({q:"",type:"healthChecks",allowShortQuery:"true"},n.get("healthChecks")).then(e=>{if(e&&e.results){const t=e.results.filter(e=>"gce"===e.provider).map(e=>{const t=JSON.parse(e.healthCheck);return t.account=e.account,t});return ye(t,(e,t)=>e.name===t.name&&e.healthCheckType===t.healthCheckType&&e.account===t.account)}return[]}).catch(()=>[])}}class qe{constructor(){const e=new Ue,t=new $e,i=/* @__PURE__ */Object.create(null);return i.addresses={initializers:[()=>a.search({q:"",type:"addresses",allowShortQuery:"true"},n.get("addresses")).then(e=>e&&e.results?e.results.filter(e=>"gce"===e.provider).map(e=>({...JSON.parse(e.address),account:e.account,region:e.region})):[]).catch(()=>[])]},i.backendServices={initializers:[()=>r("/search").useCache(n.get("backendServices")).query({q:"",type:"backendServices",allowShortQuery:"true"}).get()]},i.certificates={initializers:[()=>e.listCertificates()]},i.healthChecks={initializers:[()=>t.listHealthChecks()]},i}}const je={"gce.httpLoadBalancer.certificate":"The name of an SSL certificate. If specified, Spinnaker will create an HTTPS load balancer.","gce.httpLoadBalancer.certificateMap":"A Certificate Manager certificate map name. Certificate maps let GCP manage and auto-rotate TLS certificates, replacing individual certificate selection.","gce.httpLoadBalancer.defaultService":"A default service handles any requests that do not match a specified host rule or path matching rule.","gce.httpLoadBalancer.externalIP":"The IP address for this listener. If you do not specify an IP, your listener will be assigned an ephemeral IP.","gce.httpLoadBalancer.hostRule.hostPattern":"For example, <b>example.com</b>.","gce.httpLoadBalancer.namedPort":"\n For HTTP(S) and SSL/TCP load balancers,\n incoming traffic is directed through a named port (for Spinnaker, the named port is <b>http</b>).\n The mapping from named port to port number is specified per server group\n and can be configured within the server group creation dialogue under <b>Port Name Mapping</b>.","gce.httpLoadBalancer.pathRule.paths":"For example, <b>/path</b> in <b>example.com/path</b>","gce.httpLoadBalancer.port":"HTTP requests can be load balanced based on port 80 or port 8080. HTTPS requests can be load balanced on port 443.","gce.image.artifact":"The artifact that is to be deployed to this cluster. The artifact should represent a deployable image.","gce.image.source":"\n <p>Where the image to deploy is read from.</p>\n <p>\n <b>Artifact:</b> Deploy an artifact that was supplied/created upstream. The expected artifact must be referenced here, and will be bound at runtime.\n </p>\n <p>\n <b>Prior Stage:</b> Deploy the result of the most recent Bake or Find Image stage.\n </p>\n ","gce.instance.customInstance.cores":"<ul><li>Above 1, vCPU count must be even.</li><li>Zones that support Haswell and Ivy Bridge processors can support custom machine types up to 32 vCPUs.</li><li>Zones that support Sandy Bridge processors can support up to 16 vCPUs.</li></ul>","gce.instance.customInstance.memory":"<ul><li>Memory per vCPU must be between .9 GB and 6.5 GB.</li><li>Total memory must be a multiple of 256 MB.</li><li>Memory per vCPU must be between .9 GB and 800 GB if selected extended memory feature.</li></ul>","gce.instance.customInstance.extendedmemory":'Add more memory per vCPU to your VM instance. <a href="https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#extendedmemory">Click here </a>for more information regarding extended memory',"gce.instance.customMetadata.instance-template":"The instance template used to configure this instance.","gce.instance.customMetadata.load-balancer-names":'This field is used to "remember" what load balancers this instance is associated with, even if it is deregistered.',"gce.instance.customMetadata.global-load-balancer-names":'This field is used to "remember" what global load balancers this instance is associated with, even if it is deregistered.',"gce.instance.customMetadata.backend-service-names":'This field is used to "remember" what backend services this instance is associated with, even if it is deregistered.',"gce.instance.customMetadata.load-balancing-policy":'This field is used to "remember" the load balancing policy this instance is associated with, even if it is deregistered.',"gce.instance.customMetadata.startup-script":"This script will run automatically on every boot.","gce.instance.labels.spinnaker-region":"This label can be used to group instances when querying for metrics.","gce.instance.labels.spinnaker-server-group":"This label can be used to group instances when querying for metrics.","gce.instance.storage":"<p>Storage options can be fully-configured on the <b>Advanced Settings</b> tab. These are just default settings. Please be aware of your Local SSD quotas as you provision VMs.</p>","gce.instance.storage.localSSD":"<p>Local SSD disks are always 375GB. All non shared-core instance types support attaching up to 8 Local SSD disks. Please be aware of your Local SSD quotas as you provision VMs.</p>","gce.instance.serviceAccount":'<p>Service accounts authenticate applications running on your virtual machine instances to other Google Cloud Platform services. Valid values are either "default" or the full email address of a custom service account.</p>',"gce.instance.authScopes":"<p>Service account scopes specify which Google Cloud Platform APIs your instances can authenticate with, and define the level of access that your instances have with those services. You can enter custom auth scopes by typing into the blank field.</p>","gce.instance.authScopes.cloud-platform":"<p>The instances in this server group have full API access to all Google Cloud services.</p>","gce.instanceType.32core":"<p>32-core machine types are in Beta and are available only in Ivy Bridge and Haswell zones.</p>","gce.internalLoadBalancer.ports":"Use a comma to separate up to five TCP ports.","gce.internalHttpLoadBalancer.network":"Network must have a subnet whose 'purpose' is 'INTERNAL_HTTPS_LOAD_BALANCER'","gce.loadBalancer.connectionDraining":"(Optional) If set, enables connection draining for this backend service. This field defines the number of seconds to wait before instances that belong to this backend service are terminated in order to drain in-flight connections.","gce.loadBalancer.detail":"<p>(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.</p>","gce.loadBalancer.advancedSettings.healthInterval":"<p>Configures the interval, in seconds, between load balancer health checks.</p><p>Default: <b>10</b></p>","gce.loadBalancer.advancedSettings.healthyThreshold":"<p>Configures the number of healthy observations before reinstituting an instance into the load balancer’s traffic rotation.</p><p>Default: <b>10</b></p>","gce.loadBalancer.advancedSettings.unhealthyThreshold":"<p>Configures the number of unhealthy observations before deservicing an instance from the load balancer.</p><p>Default: <b>2</b></p>","gce.loadBalancer.healthCheck":"(Optional) <b>Health Checks</b> use HTTP requests to determine if a VM instance is healthy.","gce.loadBalancer.portName":"(Required) The <b>Port Name</b> this backend service will forward traffic to. Load balancers in GCP specify a <b>Port Name</b>, and each server group added to a load balancer needs to specify a mapping from that <b>Port Name</b> to a port to actually receive traffic.","gce.loadBalancer.portRange":"(Optional) Only packets addressed to ports in the specified <b>Port Range</b> will be forwarded. If left empty, all ports are forwarded. Must be a single port number or two port numbers separated by a dash. Each port number must be between 1 and 65535, inclusive. For example: 5000-5999.","gce.securityGroup.sourceCIDRs":"Traffic is only allowed from sources that match one of these CIDR ranges, or one of the source tags above.","gce.securityGroup.sourceTags":"Traffic is only allowed from sources that match one of these tags, or one of the source CIDR ranges below.","gce.securityGroup.targetTags":"Traffic is only allowed if the target instance has one of these tags.","gce.securityGroup.targetServiceAccounts":"Traffic is allowed if the target instance has one of these service accounts.","gce.securityGroup.sourceServiceAccounts":"Traffic is allowed if the source instance has one of these service accounts.","gce.serverGroup.associatePublicIpAddress.providerField":"Check if new GCE server groups in this application should be assigned a public IP address by default.","gce.serverGroup.resizeWithAutoscalingPolicy":"\n Setting the desired instance count for a server group with an autoscaler is not supported by Spinnaker;\n if the desired instance count differs from the instance count that the autoscaler wants to maintain for its configured metrics,\n it will quickly override the desired instance count.","gce.serverGroup.scalingPolicy.coolDownPeriodSec":"How long to wait before collecting information from a new instance. This should be at least the time it takes to initialize the instance.","gce.serverGroup.scalingPolicy.cpuUtilization":"Autoscaler adds or removes instances to maintain this CPU usage on each instance.","gce.serverGroup.scalingPolicy.predictiveAutoscaling":"Autoscaler adds or removes instances based on forecasted load. You must set a CPU utilization target to enable predictive autoscaling.","gce.serverGroup.scalingPolicy.loadBalancingUtilization":"Autoscaler adds or removes instances to maintain this usage of load-balancing capacity.","gce.serverGroup.scalingPolicy.customMetricUtilizations":"Autoscaler adds or removes instances to maintain this usage for custom metric.","gce.serverGroup.scalingPolicy.cronExpression":"\n Start time and recurrence using a cron expression. Examples: <br/>\n Every day at 3 PM:<br/>\n 0 15 * * *<br/>\n Every week Monday to Friday at 8:30 AM: <br/>\n 30 8 * * Mon-Fri<br/>\n Once on 30 January 2030 at midnight: <br/>\n 0 0 30 1 * 2030","gce.serverGroup.imageName":"(Required) <b>Image</b> is the Google Compute Engine image. Images are restricted to the account selected.","gce.serverGroup.capacity":"The number of instances that the instance group manager will attempt to maintain. Deleting or abandoning instances will affect this number, as will resizing the group.","gce.serverGroup.minCpuPlatform":'The baseline minimum CPU platform to use for your instances, whenever available. Select "Automatic" unless you have a specific need.',"gce.serverGroup.customMetadata":"<b>Custom Metadata</b> will be propagated to the instances in this server group. This is useful for passing in arbitrary values that can be queried by your code on the instance.","gce.serverGroup.userData":"<p>Custom user data will be propagated to the instances in this server group. Key/value pairs can either be newline or comma delimited.</p><strong>Example:</strong><br/> <pre>key=value<br>key2=value2</pre>","gce.serverGroup.customMetadata.load-balancer-names":'This field is used to "remember" what load balancers this server group is associated with, even if the instances are deregistered.',"gce.serverGroup.customMetadata.global-load-balancer-names":'This field is used to "remember" what global load balancers this server group is associated with, even if the instances are deregistered.',"gce.serverGroup.customMetadata.backend-service-names":'This field is used to "remember" what backend services this server group is associated with, even if the instances are deregistered.',"gce.serverGroup.customMetadata.load-balancing-policy":'This field is used to "remember" the load balancing policy this server group is configured with, even if the server group is deregistered from the load balancer. This allows us to re-enable the server group with the same load balancing policy specified on creation.',"gce.serverGroup.customMetadata.select-zones":"This regional server group will be deployed only to specific zones within the region.","gce.serverGroup.customMetadata.startup-script":"This script will run automatically on every boot.","gce.serverGroup.labels.spinnaker-region":"This label can be used to group instances when querying for metrics.","gce.serverGroup.labels.spinnaker-server-group":"This label can be used to group instances when querying for metrics.","gce.serverGroup.instanceFlexibilityPolicy":"Defines named sets of acceptable machine types for a regional managed instance group. Lower ranks are preferred; Google Compute Engine selects an available type when creating each VM.","gce.serverGroup.shieldedInstanceConfig":"Shielded VM features include trusted UEFI firmware and come with options for Secure Boot, Virtual Trusted Platform Module (vTPM), and Integrity Monitoring.","gce.serverGroup.shieldedVmSecureBoot":"Secure boot helps protect your VM instances against boot-level and kernel-level malware and rootkits.","gce.serverGroup.shieldedVmVtpm":"Virtual Trusted Platform Module (vTPM) validates your guest VM pre-boot and boot integrity, and offers key generation and protection.","gce.serverGroup.shieldedVmIntegrityMonitoring":"Integrity monitoring lets you monitor and verify the runtime boot integrity of your shielded VM instances using Stackdriver reports. Note: requires vTPM to be enabled.","gce.serverGroup.preemptibility":"A preemptible VM costs much less, but lasts only 24 hours. It can be terminated sooner due to system demands.","gce.serverGroup.automaticRestart":"Compute Engine can automatically restart VM instances if they are terminated for non-user-initiated reasons (maintenance event, hardware failure, software failure, etc.).","gce.serverGroup.onHostMaintenance":"When Compute Engine performs periodic infrastructure maintenance it can migrate your VM instances to other hardware without downtime.","gce.serverGroup.canIpForward":'Forwarding allows the instance to help route packets. See <a target="_blank" href="https://cloud.google.com/compute/docs/networking?hl=en_US#canipforward">here</a> for more information.',"gce.serverGroup.securityGroups.implicit":"Firewall rules with no target tags defined will permit incoming connections that match the ingress rules to all instances in the network.","gce.serverGroup.securityGroups.targetTags":"This {{firewall}} rule will be associated with this server group only if a target tag is selected.","gce.serverGroup.autoscaling.targetCPUUsage":"Autoscaling adds or removes VMs in the group to maintain this level of CPU usage on each VM.","gce.serverGroup.autoscaling.targetHTTPLoadBalancingUsage":"Autoscaling adds or removes VMs in the group to maintain this usage of load-balancing capacity. This value is a percentage of the 'Maximum rate' setting of the load balancer this group is used by.","gce.serverGroup.autoscaling.targetMetric":"Autoscaling adds or removes VMs in the group to maintain these target levels.","gce.serverGroup.autoscaling.minVMs":"The least number of VM instances the group will contain, even if the target is not met.","gce.serverGroup.autoscaling.maxVMs":"The largest number of VM instances allowed, even if the target is exceeded.","gce.serverGroup.autoscaling.cooldown":"How long to wait before collecting information from a new instance. This should be at least the time it takes to initialize the instance. To find the minimum, create an instance from the same image and note how long it takes to start.","gce.serverGroup.autoscaling.mode":"Mode of operation of the autoscaling policy. This guides the autoscaler by defining the types of scaling operations it can perform. Options are ON, ONLY_SCALE_OUT, and OFF.","gce.serverGroup.autoHealing":"VMs in the group are recreated as needed. You can use a health check to recreate a VM if the health check finds the VM unresponsive. If you do not select a health check, VMs are recreated only when stopped.","gce.serverGroup.initialDelaySec":"The time to allow an instance to boot and applications to fully start before the first health check.","gce.serverGroup.subnet":"\n Subnetworks allow you to regionally segment the network IP space into prefixes (subnets) and control which prefix a VM instance's internal IP address is allocated from. There are several types of GCE networks:\n <ul>\n <li><b>Legacy (non-subnet) Network</b>: IP address allocation occurs at the global network level. This means the network address space spans across all regions.</li>\n <li><b>Auto Subnet Network</b>: Server groups will be automatically assigned to the specified region's subnet.</li>\n <li><b>Custom Subnet Network</b>: A subnet must be selected for the server group. If no subnets have been created for the specified region, you will not be able to provision the server group.</li>\n </ul>","gce.serverGroup.loadBalancingPolicy.balancingMode":"Tells the load balancer when the backend is at capacity. If a backend is at capacity, new requests are routed to the nearest region that can handle requests. The balancing mode can be based on CPU utilization or requests per second (RPS).","gce.serverGroup.loadBalancingPolicy.maxRatePerInstance":"The maximum number of requests per second that can be sent to the backend instance group. Input must be a number greater than zero.","gce.serverGroup.loadBalancingPolicy.maxUtilization":"The maximum CPU utilization allowed for the backend. CPU utilization is calculated by averaging CPU use across all instances in the backend instance group. Input must be a number between 0 and 100.","gce.serverGroup.loadBalancingPolicy.maxConnectionsPerInstance":"The target connections per second for individual instances. When this number is exceeded, requests are directed to another backend.","gce.serverGroup.loadBalancingPolicy.capacityScaler":"\n An additional control to manage your maximum CPU utilization or RPS.\n If you want your instances to operate at a max 80% CPU utilization, set your balancing mode to 80% max CPU utilization and your capacity to 100%.\n If you want to cut instance utilization by half, set your balancing mode to 80% max CPU utilization and your capacity to 50%. Input must be a number between 0 and 100.","gce.serverGroup.loadBalancingPolicy.portName":"A load balancer sends traffic to an instance group through a named port. Input must be a port name.","gce.serverGroup.loadBalancingPolicy.listeningPort":"A load balancer sends traffic to an instance group through a named port. Input must be a port number (i.e., between 1 and 65535).","gce.serverGroup.traffic":"Registers the server group with any associated load balancers. These registrations are used by Spinnaker to determine if the server group is enabled.","gce.serverGroup.accelerator":"Attaches GPUs to instances in this server group. The set of available GPUs is dictated by the selected zone. You cannot attach GPUs to instances with shared-core machine types.","gce.tagImage.consideredStages":"Limit which previous stages will be considered when locating images to tag. If left unchecked, images generated by any upstream stage will be tagged.","pipeline.config.gce.bake.accountName":"<p>(Optional) The name of a Google account configured within Rosco. If left blank, the first configured account will be used.</p>","pipeline.config.gce.bake.baseImage":"<p>(Optional) A GCE image name. For example: ubuntu-1204-precise-v20150910.</p>","gce.loadBalancerType.Network":"\n <p>Use Network Load Balancing to balance the load on your systems based on incoming IP protocol data, such as address, port, and protocol type.</p>\n <p>Network Load Balancing is a regional, non-proxied load balancer. You can use it to load balance UDP traffic, and TCP and SSL traffic on ports that are not supported by the SSL proxy and TCP proxy load balancers.</p>","gce.loadBalancerType.HTTP(S)":"<p>Google Cloud Platform (GCP) HTTP(S) Load Balancing provides global load balancing for HTTP(S) requests destined for your instances.</p>","gce.loadBalancerType.Internal":"<p>Internal TCP/UDP Load Balancing is a regional load balancer that enables you to run and scale your services behind a private load balancing IP address that is accessible only to your internal virtual machine instances.</p>","gce.loadBalancerType.SSL":"<p>Google Cloud SSL Proxy Load Balancing terminates user SSL (TLS) connections at the load balancing layer, then balances the connections across your instances using the SSL or TCP protocols. This supports both IPv4 and IPv6 addresses for client traffic.</p>","gce.loadBalancerType.TCP":"<p>Google Cloud Platform (GCP) TCP Proxy Load Balancing allows you to use a single IP address for all users around the world. GCP TCP proxy load balancing automatically routes traffic to the instances that are closest to the user.</p>"};Object.keys(je).forEach(e=>i.register(e,je[e]));class Ve{static findImages(e){return r("/images/find").query(e).get().catch(()=>[])}static getImage(){return Promise.resolve(null)}}Be.Component;class Ke{constructor(){t(this,"deriveProjectId",e=>{const t=e.selfLink.split("/");return t[t.indexOf("projects")+1]}),t(this,"decorateXpnResourceIfNecessary",(e,t)=>{if(!t)return null;const a=t.split("/"),n=a[a.indexOf("projects")+1],r=be.last(a);return n!==e?n+"/"+r:r})}}function We(e,t,a){return(e.health||[]).some(e=>e.type===t&&e.state===a)}function Xe(e,t){var a;return(null==(a=t.loadBalancers)?void 0:a.length)&&e.loadBalancers?(e.loadBalancers.data||[]).filter(e=>e.account===t.account&&"NETWORK"===e.loadBalancerType&&t.loadBalancers.includes(e.name)).map(e=>e.name):[]}function Ze({app:e,instance:t,stateService:a}){const n=()=>{a.includes("**.instanceDetails",{instanceId:t.instanceId})&&a.go("^")},r=(a,r,i,l,o=!1)=>{p.confirm({account:t.account,askForReason:!0,buttonText:r,header:a,submitMethod:l,taskMonitorConfig:{application:e,onTaskComplete:o?n:void 0,title:i}})},i=Xe(e,t),l={...t,loadBalancers:i},s=i.join(" and "),c=[];return function(e){var t;return"OutOfService"===(null==(t=(e.health||[]).filter(e=>"Discovery"===e.type)[0])?void 0:t.state)}(t)&&c.push({label:"Enable in Discovery",triggerAction:()=>r(`Really enable ${t.instanceId} in discovery?`,`Enable ${t.instanceId}`,`Enabling ${t.instanceId} in discovery`,(a={})=>h.enableInstanceInDiscovery(t,e,a))}),We(t,"Discovery","Up")&&c.push({label:"Disable in Discovery",triggerAction:()=>r(`Really disable ${t.instanceId} in discovery?`,`Disable ${t.instanceId}`,`Disabling ${t.instanceId} in discovery`,(a={})=>h.disableInstanceInDiscovery(t,e,a))}),function(e,t){return!!Xe(e,t).length&&(We(t,"LoadBalancer","OutOfService")||!(t.health||[]).some(e=>"LoadBalancer"===e.type))}(e,t)&&c.push({label:"Register with Load Balancer",triggerAction:()=>r(`Really register ${t.instanceId} with ${s}?`,`Register ${t.instanceId}`,`Registering ${t.instanceId} with ${s}`,(t={})=>h.registerInstanceWithLoadBalancer(l,e,t))}),i.length>0&&(t.health||[]).some(e=>"LoadBalancer"===e.type)&&c.push({label:"Deregister from Load Balancer",triggerAction:()=>r(`Really deregister ${t.instanceId} from ${s}?`,`Deregister ${t.instanceId}`,`Deregistering ${t.instanceId} from ${s}`,(t={})=>h.deregisterInstanceFromLoadBalancer(l,e,t))}),c.push({label:"Reboot",triggerAction:()=>r(`Really reboot ${t.instanceId}?`,`Reboot ${t.instanceId}`,`Rebooting ${t.instanceId}`,(a={})=>h.rebootInstance(t,e,{...a,interestingHealthProviderNames:[]}))}),c.push({label:"Terminate",triggerAction:()=>r(`Really terminate ${t.instanceId}?`,`Terminate ${t.instanceId}`,`Terminating ${t.instanceId}`,(a={})=>h.terminateInstance(t,e,{...a,cloudProvider:"gce",...t.serverGroup?{managedInstanceGroupName:t.serverGroup}:{}}),!0)}),t.serverGroup&&c.push({label:"Terminate and Shrink Server Group",triggerAction:()=>r(`Really terminate ${t.instanceId} and shrink ${t.serverGroup}?`,`Terminate ${t.instanceId} and shrink ${t.serverGroup}`,`Terminating ${t.instanceId} and shrinking server group`,(a={})=>h.terminateInstanceAndShrinkServerGroup(t,e,{...a,instanceIds:[t.instanceId],serverGroupName:t.serverGroup,zone:t.placement.availabilityZone}),!0)}),/* @__PURE__ */Be.createElement(o,{actions:c})}l(Ze);const Ye=l(function(e){const[t,a]=Le(e.initialInstance||null),[n,r]=Le(!0),[i,l]=Le(!1);return xe(()=>{let t=!1;const n=function(e){const t=e.$stateParams||e.stateParams||{},a=e.instance||e.initialInstance||{};return{account:a.account||t.account||t.accountId,instanceId:a.instanceId||t.instanceId||t.id,region:a.region||t.region}}(e),i=n.instanceId?function(e,t){var a,n;const r=(null==(a=null==e?void 0:e.serverGroups)?void 0:a.data)||[];for(const l of r){const e=(l.instances||[]).find(e=>e.id===t);if(e)return{...e,account:l.account,loadBalancers:l.loadBalancers||[],region:l.region,serverGroup:l.name,vpcId:l.vpcId}}const i=(null==(n=null==e?void 0:e.loadBalancers)?void 0:n.data)||[];for(const l of i){const e=(l.instances||[]).find(e=>e.id===t);if(e)return{...e,account:l.account,loadBalancers:[l.name],region:l.region,vpcId:l.vpcId};for(const a of(l.serverGroups||[]).filter(e=>e.isDisabled)){const e=(a.instances||[]).find(e=>e.id===t);if(e)return{...e,account:l.account,loadBalancers:[l.name],region:l.region,serverGroup:e.serverGroup||a.name,serverGroupDisabled:!0,vpcId:l.vpcId}}}return null}(e.app,n.instanceId):null,o=(null==i?void 0:i.account)||n.account,d=(null==i?void 0:i.region)||n.region;return a(null),r(!0),l(!1),n.instanceId&&o&&d?(s.addExtraDataToLatest("instances",{account:o,region:d,serverGroup:null==i?void 0:i.serverGroup}),c.getInstanceDetails(o,d,n.instanceId).then(e=>{t||(a(function(e){var t,a,n,r;const i=new Ke,l=(null==(t=e.networkInterfaces)?void 0:t[0])||{},o=function(e){const t=/\/projects\/([^/]+)/.exec(e||"");return null==t?void 0:t[1]}(e.selfLink)||e.account,s=e.zone||(null==(a=e.placement)?void 0:a.availabilityZone)||e.region,c=i.decorateXpnResourceIfNecessary(o,l.network),d=i.decorateXpnResourceIfNecessary(o,l.subnetwork),u=null==(r=null==(n=l.accessConfigs)?void 0:n[0])?void 0:r.natIP,m=l.networkIP,p=e.selfLink?e.selfLink.replace("www.googleapis.com/compute/v1","cloudssh.developers.google.com"):null;return{...e,baseIpAddress:u||m,externalIpAddress:u,gcloudSSHCommand:s?`gcloud compute ssh ${e.name||e.instanceId} --zone ${s}`:void 0,health:(e.health||[]).filter(e=>"Google"!==e.type||"Unknown"!==e.state),internalDnsName:e.instanceId,internalIpAddress:m,logsLink:o?`https://console.cloud.google.com/logs/query?project=${encodeURIComponent(o)}&resource=gce_instance`:void 0,network:c,region:e.region||s,sshLink:p,subnet:d}}({...i,...e,account:o,instanceId:n.instanceId,region:d})),r(!1))},()=>{t||(l(!0),r(!1))}),()=>{t=!0}):(l(!0),void r(!1))},[e.app,e.instance,e.initialInstance,e.$stateParams,e.stateParams]),i?/* @__PURE__ */Be.createElement("div",{className:"alert alert-warning"},"Instance not found."):/* @__PURE__ */Be.createElement(d,{loading:n},t&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement(d.Header,{icon:/* @__PURE__ */Be.createElement("span",{className:"icon-gce"}),name:t.name||t.instanceId,actions:/* @__PURE__ */Be.createElement(Ze,{app:e.app,instance:t,router:e.router,stateParams:e.stateParams,stateService:e.stateService})}),/* @__PURE__ */Be.createElement(d.Content,{loading:n},/* @__PURE__ */Be.createElement(u,{heading:"Instance Information",defaultExpanded:!0},/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Account"),/* @__PURE__ */Be.createElement("dd",null,/* @__PURE__ */Be.createElement(m,{account:t.account})),/* @__PURE__ */Be.createElement("dt",null,"Region"),/* @__PURE__ */Be.createElement("dd",null,t.region),/* @__PURE__ */Be.createElement("dt",null,"Type"),/* @__PURE__ */Be.createElement("dd",null,t.machineType||t.instanceType||t.type),/* @__PURE__ */Be.createElement("dt",null,"Network"),/* @__PURE__ */Be.createElement("dd",null,t.network||"-"),/* @__PURE__ */Be.createElement("dt",null,"Subnet"),/* @__PURE__ */Be.createElement("dd",null,t.subnet||"-"))),/* @__PURE__ */Be.createElement(u,{heading:"DNS",defaultExpanded:!0},/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Internal DNS Name"),/* @__PURE__ */Be.createElement("dd",null,t.internalDnsName||"-"),/* @__PURE__ */Be.createElement("dt",null,"Internal IP"),/* @__PURE__ */Be.createElement("dd",null,t.internalIpAddress||"-"),/* @__PURE__ */Be.createElement("dt",null,"External IP"),/* @__PURE__ */Be.createElement("dd",null,t.externalIpAddress||"-"))),/* @__PURE__ */Be.createElement(u,{heading:"SSH",defaultExpanded:!1},t.sshLink&&/* @__PURE__ */Be.createElement("p",null,/* @__PURE__ */Be.createElement("a",{href:t.sshLink,target:"_blank",rel:"noopener noreferrer"},"SSH in Google Cloud Console")),t.gcloudSSHCommand&&/* @__PURE__ */Be.createElement("pre",null,t.gcloudSSHCommand)),/* @__PURE__ */Be.createElement(u,{heading:"Logs",defaultExpanded:!1},t.logsLink?/* @__PURE__ */Be.createElement("a",{href:t.logsLink,target:"_blank",rel:"noopener noreferrer"},"View Google Cloud logs"):/* @__PURE__ */Be.createElement("span",null,"No log link available")))))}),Je=Object.freeze([{instanceType:"n1-standard-1",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-2",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-4",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-8",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-16",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-32",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-64",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-standard-96",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"f1-micro",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"g1-small",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"e2-small",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"e2-micro",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"e2-medium",supportsLocalSSD:!1,disks:[{type:"pd-standard",sizeGb:10}]},{instanceType:"n1-highmem-2",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-4",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-8",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-16",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-32",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-64",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highmem-96",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-2",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-4",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-8",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-16",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-32",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-64",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"n1-highcpu-96",disks:[{type:"pd-ssd",sizeGb:10}]},{instanceType:"default",disks:[{type:"pd-ssd",sizeGb:10}]}]);class Qe{constructor(e,t=console){const a=[{type:"general",label:"General Purpose",families:[{type:"n1-standard",description:"This family provides a balance of compute, memory, and network resources, and it is a good choice for general purpose applications.",storageType:"SSD",storageHelpFieldKey:"gce.instance.storage",instanceTypes:[{name:"n1-standard-1",label:"Small",cpu:1,memory:3.75,costFactor:1},{name:"n1-standard-2",label:"Medium",cpu:2,memory:7.5,costFactor:2},{name:"n1-standard-4",label:"Large",cpu:4,memory:15,costFactor:2},{name:"n1-standard-8",label:"XLarge",cpu:8,memory:30,costFactor:3},{name:"n1-standard-16",label:"2XLarge",cpu:16,memory:60,costFactor:3},{name:"n1-standard-32",label:"4XLarge",cpu:32,memory:120,costFactor:4},{name:"n1-standard-64",label:"8XLarge",cpu:64,memory:240,costFactor:4},{name:"n1-standard-96",label:"12XLarge",cpu:96,memory:360,costFactor:4}]}],icon:"hdd"},{type:"memory",label:"High Memory",families:[{type:"n1-highmem",description:"High memory machine types are ideal for tasks that require more memory relative to virtual cores. High memory machine types have 6.50GB of RAM per virtual core.",storageType:"SSD",storageHelpFieldKey:"gce.instance.storage",instanceTypes:[{name:"n1-highmem-2",label:"Medium",cpu:2,memory:13,costFactor:2},{name:"n1-highmem-4",label:"Large",cpu:4,memory:26,costFactor:2},{name:"n1-highmem-8",label:"XLarge",cpu:8,memory:52,costFactor:3},{name:"n1-highmem-16",label:"2XLarge",cpu:16,memory:104,costFactor:3},{name:"n1-highmem-32",label:"4XLarge",cpu:32,memory:208,costFactor:4},{name:"n1-highmem-64",label:"8XLarge",cpu:64,memory:416,costFactor:4},{name:"n1-highmem-96",label:"12XLarge",cpu:96,memory:624,costFactor:4}]}],icon:"hdd"},{type:"cpu",label:"High CPU",families:[{type:"n1-highcpu",description:"High CPU machine types are ideal for tasks that require more virtual cores relative to memory. High CPU machine types have one virtual core for every 0.90GB of RAM.",storageType:"SSD",storageHelpFieldKey:"gce.instance.storage",instanceTypes:[{name:"n1-highcpu-2",label:"Medium",cpu:2,memory:1.8,costFactor:1},{name:"n1-highcpu-4",label:"Large",cpu:4,memory:3.6,costFactor:2},{name:"n1-highcpu-8",label:"XLarge",cpu:8,memory:7.2,costFactor:2},{name:"n1-highcpu-16",label:"2XLarge",cpu:16,memory:14.4,costFactor:3},{name:"n1-highcpu-32",label:"4XLarge",cpu:32,memory:28.8,costFactor:4},{name:"n1-highcpu-64",label:"8XLarge",cpu:64,memory:57.6,costFactor:4},{name:"n1-highcpu-96",label:"12XLarge",cpu:96,memory:86.4,costFactor:4}]}],icon:"hdd"},{type:"micro",label:"Micro Utility",families:[{type:"f1-micro bursting",description:"This family of machine types is a good choice for small, non-resource intensive workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",storageType:"Std",storageHelpFieldKey:"gce.instance.storage",instanceTypes:[{name:"f1-micro",label:"Micro",cpu:1,memory:.6,costFactor:1},{name:"g1-small",label:"Small",cpu:1,memory:1.7,costFactor:1},{name:"e2-micro",label:"E2 Micro",cpu:2,memory:1,costFactor:1},{name:"e2-small",label:"E2 Small",cpu:2,memory:2,costFactor:2},{name:"e2-medium",label:"E2 Medium",cpu:2,memory:4,costFactor:2}]}],icon:"hdd"},{type:"custom",label:"Custom Type",families:[],icon:"asterisk"},{type:"buildCustom",label:"Build Custom",families:[{type:"buildCustom",instanceTypes:[{name:"n1buildCustom",nameRegex:/custom-\d{1,2}-\d{4,6}/,storage:{localSSDSupported:!0}},{name:"e2buildCustom",nameRegex:/e2-custom-(\d{1,2})-(\d{3,6})/,storage:{localSSDSupported:!1}},{name:"otherbuildCustom",nameRegex:/(.*)-?custom-(\d{1,2})-(\d{3,6})/,storage:{localSSDSupported:!0}}]}],icon:"wrench"}],n=be.memoize(()=>{const e=be.cloneDeep(a);return g.getAllAccountDetailsForProvider("gce").then(a=>{let n=be.get(a,"[0].instanceTypeDisks");if(be.isEmpty(n)&&(n=Je),n){be.flatten(e.map(e=>e.families)).forEach(e=>{e.instanceTypes.forEach(e=>{const a=n.find(t=>t.instanceType===e.name);if(a){const n=a.disks.map(e=>{switch(e.type){case"PD_SSD":return{type:"pd-ssd",sizeGb:e.sizeGb};case"PD_STANDARD":return{type:"pd-standard",sizeGb:e.sizeGb};case"LOCAL_SSD":return{type:"local-ssd",sizeGb:375};default:return t.warn(`Disk type '${e.type}' not supported.`),null}}).filter(e=>!!e);let r=0,i=0;if(a.supportsLocalSSD)i=n.filter(e=>"local-ssd"===e.type).length,r=375;else{const e=n.filter(e=>e.type.startsWith("pd-"));e.length&&(r=e.reduce((e,t)=>Math.max(e,t.sizeGb),0),i=e.filter(e=>e.sizeGb===r).length)}e.storage={localSSDSupported:a.supportsLocalSSD,size:r,count:i,defaultSettings:{disks:n}}}})})}return e})});function r(e,t){if(!e||!t||0===t.length)return console.error("Invalid input parameters"),[];return t.filter(t=>e[t]).flatMap(t=>e[t].instanceTypes||[])}return{getCategories:n,getAvailableTypesForRegions:r,getAllTypesByRegion:function(){return n().then(e=>be.chain(e).map("families").flatten().map("instanceTypes").flatten().map("name").filter(e=>"n1buildCustom"!==e&&"e2buildCustom"!==e&&"otherbuildCustom"!==e).value())},getAvailableTypesForLocations:r,resolveInstanceTypeDetails:e=>({name:e,storage:Object.assign({isDefault:!0},v.providers.gce.defaults.instanceTypeStorage)})}}}const et={rebootInstances:e=>{e.interestingHealthProviderNames=[]}};class tt{constructor(){t(this,"transform",(e,t)=>{((e,t)=>{t.zone=e.instances[0].availabilityZone})(e,t),et[t.type]&&et[t.type](t)})}}const at={accounts:[],addresses:[],backendServices:[],certificates:[],healthChecks:[],networks:[],regions:[],subnets:[]};class nt{constructor(e=ot){this.readers=e,this.disposed=!1,this.listeners=/* @__PURE__ */new Set,this.requestId=0,this.state={data:at,status:"idle"}}getState(){return this.state}subscribe(e){return this.disposed||this.listeners.add(e),()=>this.listeners.delete(e)}async load(e){const t=++this.requestId;this.publish({data:this.state.data,error:void 0,status:"loading"});try{const[a,n,r,i,l,o,s,c]=await Promise.all([this.readers.accounts(),this.readers.addresses(),this.readers.backendServices(),this.readers.certificates(),this.readers.healthChecks(),this.readers.networks(),this.readers.regions(e),this.readers.subnets()]);this.isCurrent(t)&&this.publish({data:{accounts:a,addresses:n,backendServices:r,certificates:i,healthChecks:l,networks:o,regions:s,subnets:c},error:void 0,status:"ready"})}catch(a){this.isCurrent(t)&&this.publish({data:this.state.data,error:a,status:"error"})}}dispose(){this.disposed=!0,this.requestId+=1,this.listeners.clear()}isCurrent(e){return!this.disposed&&e===this.requestId}publish(e){this.disposed||(this.state=e,this.listeners.forEach(t=>t(e)))}}function rt(e,t){const a=new Set(e.map(({name:e})=>e));return[...e,...t.filter(({name:e})=>e&&!a.has(e))]}const it=new Ue,lt=new $e,ot={accounts:()=>g.listAccounts("gce"),regions:e=>g.getRegionsForAccount(e).then(e=>Array.isArray(e)?e:Object.keys(e||{}).map(e=>({name:e}))),networks:()=>b.listNetworksByProvider("gce"),subnets:()=>f.listSubnetsByProvider("gce"),certificates:()=>it.listCertificates(),healthChecks:()=>lt.listHealthChecks(),addresses:()=>a.search({q:"",type:"addresses",allowShortQuery:"true"},n.get("addresses")).then(e=>((null==e?void 0:e.results)||[]).filter(({provider:e})=>"gce"===e).map(e=>({...JSON.parse(e.address),account:e.account,region:e.region}))),backendServices:()=>r("/search").useCache(!0).query({q:"",type:"backendServices",allowShortQuery:"true"}).get().then(st)};function st(e){const t=Array.isArray(e)&&1===e.length?e[0]:e,a=t&&"object"==typeof t&&"results"in t?t.results:t;return Array.isArray(a)?a:[]}const ct=["NETWORK","INTERNAL","TCP","SSL","HTTP","INTERNAL_MANAGED","EXTERNAL_MANAGED","REGIONAL_EXTERNAL_NETWORK"],dt={NETWORK:pt({address:!0,healthChecks:!0}),INTERNAL:pt({address:!0,backendServices:!0,healthChecks:!0,network:!0,subnet:!0}),TCP:pt({address:!0,backendServices:!0,healthChecks:!0}),SSL:pt({address:!0,backendServices:!0,certificates:!0,healthChecks:!0}),HTTP:pt({address:!0,backendServices:!0,certificates:!0,healthChecks:!0,hostRules:!0}),INTERNAL_MANAGED:pt({address:!0,backendServices:!0,certificates:!0,healthChecks:!0,hostRules:!0,network:!0,subnet:!0}),EXTERNAL_MANAGED:pt({address:!0,backendServices:!0,certificates:!0,healthChecks:!0,hostRules:!0,network:!0}),REGIONAL_EXTERNAL_NETWORK:pt({address:!0,backendServices:!0,healthChecks:!0})};function ut(e,t){const a=function(e){const t=Gt(e).toUpperCase();if(ct.includes(t))return t;return"NETWORK"}(e.loadBalancerType),n=Gt(It(a)?e.urlMapName||e.name||e.loadBalancerName:e.name||e.loadBalancerName),r={address:e.ipAddress||e.address,certificate:e.certificate,name:It(a)&&(e.loadBalancerName||e.name)||n,networkTier:"EXTERNAL_MANAGED"===a?e.networkTier:void 0,portRange:e.portRange||e.ports,protocol:e.protocol||(It(a)?e.certificate?"HTTPS":"HTTP":e.ipProtocol),subnet:e.subnet},i=Rt(e.listeners).length?Rt(e.listeners):[r],l=function(e,t){const a=[...Rt(e.backendServices),...Rt(e.backendService)];e.defaultService&&"object"==typeof e.defaultService&&a.push(e.defaultService);Rt(e.hostRules).forEach(e=>{const t=Mt(Mt(e).pathMatcher);t.defaultService&&"object"==typeof t.defaultService&&a.push(t.defaultService),Rt(t.pathRules).forEach(e=>{const t=Mt(e).backendService;t&&"object"==typeof t&&a.push(t)})});const n=/* @__PURE__ */new Map;return a.forEach(e=>{const a=function(e,t){const a={...e,name:Gt(e.name)},n=vt(e.healthCheck||e.healthCheckLink);n&&(a.healthCheck=n);"EXTERNAL_MANAGED"===t&&(a.protocol=Gt(e.protocol).toUpperCase()||"HTTP");return delete a.healthCheckLink,a}("object"==typeof e?Mt(e):{name:Gt(e)},t);a.name&&!n.has(a.name)&&n.set(a.name,a)}),Array.from(n.values())}(e,a),o=function(e,t){const a=[...Rt(e.healthChecks),...Rt(e.healthCheck)];t.forEach(e=>{e.healthCheck&&Object.keys(e.healthCheck).some(e=>"name"!==e&&"selfLink"!==e)&&a.push(e.healthCheck)});const n=/* @__PURE__ */new Map;return a.forEach((e,t)=>{const a=gt(Mt(e)),r=a.name||(Object.keys(a).length?`unnamed-${t}`:"");r&&!n.has(r)&&n.set(r,a)}),Array.from(n.values())}(e,l),s={mode:t,name:n,credentials:Gt(e.credentials||e.account),region:Gt(e.region)||wt(a),loadBalancerType:a,listeners:i.map(e=>function(e,t,a){const n={name:Gt(e.name)||a,protocol:ht(e.protocol||(It(t)?e.certificate||e.certificateMap||443===Number(e.port||e.portRange)?"HTTPS":"HTTP":e.ipProtocol),t),portRange:St(e.portRange||e.port||e.ports)},r=vt(e.address||e.ipAddress),i=vt(e.certificate),l=Gt(e.certificateMap),o=vt(e.subnet),s=Gt(e.networkTier);r&&(n.address=r);i&&(n.certificate=i);l&&(n.certificateMap=l);s&&"EXTERNAL_MANAGED"===t&&(n.networkTier=s);o&&(n.subnet=o);return n}(Mt(e),a,n)),healthChecks:o,backendServices:l,hostRules:Rt(e.hostRules).map(e=>function(e){const t=Mt(e.pathMatcher);return{hostPatterns:Bt(e.hostPatterns),pathMatcher:{defaultService:vt(t.defaultService),pathRules:Rt(t.pathRules).map(e=>{const t=Mt(e);return{backendService:vt(t.backendService),paths:Bt(t.paths)}})}}}(Mt(e))),defaultService:vt(e.defaultService),network:vt(e.network),networkTier:"REGIONAL_EXTERNAL_NETWORK"===a&&Gt(e.networkTier)||void 0,subnet:vt(e.subnet)};return"edit"===t&&(s.original=Lt({backendServices:l,healthChecks:o,listeners:s.listeners})),s}function mt(e){if("REGIONAL_EXTERNAL_NETWORK"===e.loadBalancerType)return function(e){const t=e.listeners[0],a=e.backendServices[0],n=null==t?void 0:t.address,r=e.networkTier||void 0;return{cloudProvider:"gce",credentials:e.credentials,loadBalancerName:(null==t?void 0:t.name)||e.name,loadBalancerType:"REGIONAL_EXTERNAL_NETWORK",name:(null==t?void 0:t.name)||e.name,provider:"gce",region:e.region,type:"upsertLoadBalancer",...n?{ipAddress:ft(n)}:{},ipProtocol:(null==t?void 0:t.protocol)||"TCP",...r?{networkTier:r}:{},ports:At((null==t?void 0:t.portRange)||""),...a?{backendService:Pt(a)}:{}}}(e);const t=dt[e.loadBalancerType],a=e.listeners[0],n={cloudProvider:"gce",credentials:e.credentials,loadBalancerName:e.name,loadBalancerType:e.loadBalancerType,name:e.name,provider:"gce",region:e.region,type:"upsertLoadBalancer"};return It(e.loadBalancerType)?n.listeners=e.listeners.map(a=>function(e,t,a){const n={name:e.name,portRange:"HTTPS"===e.protocol?"443":e.portRange,protocol:e.protocol};t.address&&e.address&&(n.ipAddress=ft(e.address));t.certificates&&e.certificate&&(n.certificate=function(e,t){if("EXTERNAL_MANAGED"===t&&e.selfLink)return e.selfLink;return bt(e)}(e.certificate,a));t.certificates&&e.certificateMap&&"EXTERNAL_MANAGED"!==a&&(n.certificateMap=e.certificateMap);"EXTERNAL_MANAGED"===a&&e.networkTier&&(n.networkTier=e.networkTier);t.subnet&&e.subnet&&(n.subnet=yt(e.subnet));return n}(a,t,e.loadBalancerType)):a&&(n.ipProtocol=a.protocol,n.portRange=a.portRange),t.address&&(null==a?void 0:a.address)&&(n.ipAddress=ft(a.address)),t.certificates&&(null==a?void 0:a.certificate)&&!It(e.loadBalancerType)&&(n.certificate=bt(a.certificate)),t.healthChecks&&e.healthChecks.length&&(n.healthChecks=e.healthChecks.map(e=>({...e}))),t.backendServices&&e.backendServices.length&&(n.backendServices=e.backendServices.map(kt)),t.hostRules&&e.hostRules.length&&(n.hostRules=e.hostRules.map(Tt)),t.backendServices&&e.defaultService&&(n.defaultService=Et(e.defaultService)),t.network&&e.network&&(n.network=e.network.name),t.subnet&&e.subnet&&(n.subnet=yt(e.subnet)),n}function pt(e){return{address:!1,backendServices:!1,certificates:!1,healthChecks:!1,hostRules:!1,network:!1,subnet:!1,...e}}function ht(e,t){const a=Gt(e).toUpperCase();return["TCP","UDP","HTTP","HTTPS","HTTP2","GRPC","SSL"].includes(a)?a:"SSL"===t?"SSL":It(t)?"HTTP":"TCP"}function gt(e){const t=Mt(e),a={...t},n=Gt(t.healthCheckType||t.protocol);if(n&&(a.healthCheckType=ht(n,"NETWORK")),void 0!==t.port&&null!==t.port&&""!==t.port&&(a.port="string"!=typeof t.port||/^\d+$/.test(t.port)?Number(t.port):t.port),["checkIntervalSec","timeoutSec","healthyThreshold","unhealthyThreshold"].forEach(e=>{void 0!==t[e]&&null!==t[e]&&""!==t[e]&&(a[e]=Number(t[e]))}),t.requestPath){const e=Gt(t.requestPath);a.requestPath=e.startsWith("/")?e:`/${e}`}return a}function vt(e){if(!e)return;if("object"==typeof e){const t=Mt(e),a=Gt(t.name||t.id||t.address||t.selfLink);return a?{...t,name:a}:void 0}const t=Gt(e),a=t.split("/").filter(Boolean).pop()||t;return t.includes("/")?{name:a,selfLink:t}:{name:a}}function ft(e){return Gt(e.address)||e.name}function bt(e){return e.name}function yt(e){return e.name}function Et(e){return e.name}function kt(e){const t={...e};return e.healthCheck&&(t.healthCheck=e.healthCheck.name),t}function Ct(e){var t;return xt({affinityCookieTtlSec:e.affinityCookieTtlSec,backends:e.backends?Lt(e.backends):void 0,connectionDrainingTimeoutSec:e.connectionDrainingTimeoutSec,enableCDN:e.enableCDN,healthCheck:e.healthCheck&&Object.keys(e.healthCheck).some(e=>"name"!==e&&"selfLink"!==e)?Nt(e.healthCheck):null==(t=e.healthCheck)?void 0:t.name,name:e.name,portName:e.portName,protocol:e.protocol,sessionAffinity:e.sessionAffinity})}function Nt(e){const t=e.healthCheckType;return xt({checkIntervalSec:e.checkIntervalSec,healthCheckType:t,healthyThreshold:e.healthyThreshold,name:e.name,port:e.port,requestPath:"HTTP"===t||"HTTPS"===t?e.requestPath:void 0,timeoutSec:e.timeoutSec,unhealthyThreshold:e.unhealthyThreshold})}function Tt(e){return{hostPatterns:[...e.hostPatterns],pathMatcher:{defaultService:e.pathMatcher.defaultService?Et(e.pathMatcher.defaultService):void 0,pathRules:e.pathMatcher.pathRules.map(e=>({backendService:e.backendService?Et(e.backendService):void 0,paths:[...e.paths]}))}}}function St(e){return Array.isArray(e)?e.map(Gt).join(","):Gt(e)}function At(e){return e.split(",")}function Pt(e){const t=Ct(e);if(e.healthCheck&&"object"==typeof e.healthCheck){const a=Nt(e.healthCheck);a.healthCheckType||Object.keys(a).some(e=>"name"!==e&&"selfLink"!==e)?t.healthCheck=a:t.healthCheck=e.healthCheck.name}return t}function wt(e){return"INTERNAL_MANAGED"===e||"EXTERNAL_MANAGED"===e||"REGIONAL_EXTERNAL_NETWORK"===e?"":["TCP","SSL","HTTP"].includes(e)?"global":""}function It(e){return"HTTP"===e||"INTERNAL_MANAGED"===e||"EXTERNAL_MANAGED"===e}function Mt(e){return e&&"object"==typeof e?e:{}}function Rt(e){return null==e?[]:Array.isArray(e)?e:[e]}function Gt(e){return null==e?"":String(e)}function Bt(e){return Rt(e).map(Gt).filter(Boolean)}function Lt(e){return Array.isArray(e)?e.map(Lt):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Lt(t)])):e}function xt(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}const Dt={INTERNAL:{frontendProtocols:["TCP","UDP"],backendProtocols:["TCP","UDP"]},TCP:{frontendProtocols:["TCP"],backendProtocols:["TCP"]},SSL:{frontendProtocols:["SSL"],backendProtocols:["TCP"]}},zt=["25","43","110","143","195","443","465","587","700","993","995"],Ft=["HTTP","HTTPS","TCP","SSL"],Ot=["NONE","CLIENT_IP","GENERATED_COOKIE"],Ht=["NONE","CLIENT_IP","CLIENT_IP_PROTO","CLIENT_IP_PORT_PROTO"];function _t(e){const t=e.loadBalancerType,a=Dt[t];if(!a)return e;const n=e.listeners[0]||{name:e.name,portRange:"",protocol:a.frontendProtocols[0]},r=a.frontendProtocols.includes(n.protocol)?n.protocol:a.frontendProtocols[0],i=e.backendServices[0],l="INTERNAL"===t&&a.backendProtocols.includes(r)?r:a.backendProtocols[0],o={...i||{name:e.name,portName:"INTERNAL"===t?void 0:"http",sessionAffinity:"NONE"},protocol:l};return"UDP"===r&&(o.sessionAffinity="NONE",delete o.affinityCookieTtlSec),{...e,region:"INTERNAL"===t?e.region:"global",listeners:[{...n,name:n.name||e.name,portRange:n.portRange||("INTERNAL"===t?"":"443"),protocol:r}],backendServices:[o]}}function Ut(e){var t;const a=[],n=e.loadBalancerType,r=e.listeners[0],i=e.backendServices[0],l=e.healthChecks[0],o=(s=null==r?void 0:r.portRange,String(s||"").split(",").map(e=>e.trim()).filter(Boolean));var s;return e.name.trim()||a.push("Name is required."),e.credentials||a.push("Account is required."),e.region||a.push("Region is required."),"INTERNAL"===n?((o.length<1||o.length>5||o.some(e=>!Zt(e)))&&a.push("INTERNAL load balancers accept between one and five listener ports."),e.network||a.push("Network is required for INTERNAL load balancers."),e.subnet||a.push("Subnet is required for INTERNAL load balancers.")):1===o.length&&zt.includes(o[0])||a.push(`${n} proxy port must be one of 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, or 995.`),"SSL"!==n||(null==r?void 0:r.certificate)||a.push("Certificate is required for SSL proxy load balancers."),(null==i?void 0:i.name)||a.push("Backend service is required."),"INTERNAL"===n||(null==i?void 0:i.portName)||a.push("Port name is required."),"INTERNAL"!==n&&Yt(null==i?void 0:i.connectionDrainingTimeoutSec)&&a.push("Connection draining timeout must be zero or greater."),"GENERATED_COOKIE"!==(null==i?void 0:i.sessionAffinity)||function(e,t,a){const n=Number(e);return Number.isFinite(n)&&n>=t&&n<=a}(i.affinityCookieTtlSec,0,86400)&&void 0!==i.affinityCookieTtlSec||a.push("Generated cookie TTL must be between 0 and 86400 seconds."),(null==l?void 0:l.name)||(null==(t=null==i?void 0:i.healthCheck)?void 0:t.name)||a.push("Health check name is required."),l&&(Zt(l.port)||a.push("Health check port must be between 1 and 65535."),"HTTP"!==l.healthCheckType&&"HTTPS"!==l.healthCheckType||l.requestPath||a.push("HTTP and HTTPS health checks require a request path."),Yt(l.timeoutSec)&&a.push("Health check timeout must be zero or greater."),void 0!==l.checkIntervalSec&&Number(l.checkIntervalSec)<=0&&a.push("Health check interval must be greater than zero."),void 0!==l.healthyThreshold&&Number(l.healthyThreshold)<=0&&a.push("Healthy threshold must be greater than zero."),void 0!==l.unhealthyThreshold&&Number(l.unhealthyThreshold)<=0&&a.push("Unhealthy threshold must be greater than zero.")),a}function $t({command:e,data:t,disabled:a=!1,onChange:n}){var r,i,l,o,s;const c=_t(e),d=c.loadBalancerType,u=c.listeners[0],m=c.backendServices[0],p=c.healthChecks[0]||{healthCheckType:"TCP"},h=function(e,t){var a;const n=e.listeners[0],r=e.backendServices[0],i=t=>t.filter(t=>!t.account&&!t.credentials||(t.account||t.credentials)===e.credentials),l=t=>i(t).filter(t=>!t.region||t.region===e.region),o=null==(a=e.network)?void 0:a.name,s=i(t.subnets).filter(t=>{var a;const n="string"==typeof t.network?t.network:null==(a=t.network)?void 0:a.name;return!(t.region&&t.region!==e.region||n&&n!==o)});return{accounts:t.accounts,addresses:rt(l(t.addresses),Kt(null==n?void 0:n.address)),backendServices:rt(l(t.backendServices),Kt(r)),certificates:rt(i(t.certificates).filter(e=>!e.region),Kt(null==n?void 0:n.certificate)),healthChecks:rt(i(t.healthChecks),Kt(null==r?void 0:r.healthCheck)),networks:rt(i(t.networks),Kt(e.network)),regions:t.regions,subnets:rt(s,Kt(e.subnet))}}(c,t),g="INTERNAL"===d?"UDP"===u.protocol?["NONE"]:Ht:Ot,v=e=>n(_t({...c,...e})),f=e=>v({listeners:[{...u,...e}]}),b=e=>v({backendServices:[{...m,...e}]}),y=e=>v({healthChecks:[{...p,...e}]});/* @__PURE__ */
|
|
3
|
+
return Be.createElement("div",{className:"form-horizontal gce-proxy-load-balancer-editor"},qt("Name","name",c.name,e=>v({name:e,listeners:[{...u,name:u.name===c.name?e:u.name}],backendServices:[{...m,name:m.name===c.name?e:m.name}]}),a),Vt("Account","credentials",c.credentials,h.accounts,e=>v({credentials:e}),a),"INTERNAL"===d?Vt("Region","region",c.region,h.regions,e=>v({region:e}),a):qt("Region","region",c.region,()=>{},!0),"INTERNAL"===d&&Vt("Network","network",null==(r=c.network)?void 0:r.name,h.networks,e=>v({network:Wt(e),subnet:void 0}),a),"INTERNAL"===d&&Vt("Subnet","subnet",null==(i=c.subnet)?void 0:i.name,h.subnets,e=>v({subnet:Wt(e)}),a),Vt("Address","address",null==(l=u.address)?void 0:l.name,h.addresses,e=>f({address:Xt(e,h.addresses)}),a),Vt("Protocol","protocol",u.protocol,Dt[d].frontendProtocols.map(e=>({name:e})),e=>f({protocol:e}),a||1===Dt[d].frontendProtocols.length),"INTERNAL"===d?qt("Listener ports","portRange",u.portRange,e=>f({portRange:e}),a):Vt("Listener port","portRange",u.portRange,zt.map(e=>({name:e})),e=>f({portRange:e}),a),"SSL"===d&&Vt("Certificate","certificate",null==(o=u.certificate)?void 0:o.name,h.certificates,e=>f({certificate:Wt(e)})),/* @__PURE__ */Be.createElement("h4",null,"Backend Service"),Vt("Backend service","backendService",m.name,h.backendServices,e=>b({name:e}),a,!0),"INTERNAL"!==d&&qt("Port name","portName",String(m.portName||""),e=>b({portName:e})),"INTERNAL"!==d&&jt("Connection draining timeout","connectionDrainingTimeoutSec",m.connectionDrainingTimeoutSec,e=>b({connectionDrainingTimeoutSec:e})),Vt("Session affinity","sessionAffinity",String(m.sessionAffinity||"NONE"),g.map(e=>({name:e})),e=>b({sessionAffinity:e})),"GENERATED_COOKIE"===m.sessionAffinity&&jt("Affinity cookie TTL","affinityCookieTtlSec",m.affinityCookieTtlSec,e=>b({affinityCookieTtlSec:e})),/* @__PURE__ */Be.createElement("h4",null,"Health Check"),Vt("Existing health check","healthCheck",null==(s=m.healthCheck)?void 0:s.name,h.healthChecks,e=>{if(!e)return b({healthCheck:void 0});const t=gt(h.healthChecks.find(t=>t.name===e)||{name:e}),a="string"==typeof t.selfLink?t.selfLink:void 0,n={name:e,...a?{selfLink:a}:{}};v({backendServices:[{...m,healthCheck:n}],healthChecks:[t]})}),Vt("Health check protocol","healthCheckType",p.healthCheckType,Ft.map(e=>({name:e})),e=>y({healthCheckType:e})),qt("Health check name","healthCheckName",p.name||"",e=>y({name:e})),("HTTP"===p.healthCheckType||"HTTPS"===p.healthCheckType)&&qt("Request path","requestPath",p.requestPath||"",e=>y({requestPath:e})),jt("Health check port","healthCheckPort",p.port,e=>y({port:e})),jt("Timeout","timeoutSec",p.timeoutSec,e=>y({timeoutSec:e})),jt("Interval","checkIntervalSec",p.checkIntervalSec,e=>y({checkIntervalSec:e})),jt("Healthy threshold","healthyThreshold",p.healthyThreshold,e=>y({healthyThreshold:e})),jt("Unhealthy threshold","unhealthyThreshold",p.unhealthyThreshold,e=>y({unhealthyThreshold:e})))}function qt(e,t,a,n,r=!1){/* @__PURE__ */
|
|
4
|
+
return Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",disabled:r,onChange:e=>n(e.target.value),value:a||""})))}function jt(e,t,a,n){/* @__PURE__ */
|
|
5
|
+
return Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",type:"number",value:null==a?"":String(a),onChange:e=>n(""===e.target.value?void 0:Number(e.target.value))})))}function Vt(e,t,a,n,r,i=!1,l=!1){const o=n.map(({name:e})=>e);return l&&a&&!o.includes(a)&&o.push(a),/* @__PURE__ */Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm",disabled:i,onChange:e=>r(e.target.value),value:a||""},
|
|
6
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),o.map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e)))))}function Kt(e){return(null==e?void 0:e.name)?[e]:[]}function Wt(e){return e?{name:e}:void 0}function Xt(e,t){return e?t.find(t=>t.name===e)||{name:e}:void 0}function Zt(e){const t=Number(e);return Number.isInteger(t)&&t>=1&&t<=65535}function Yt(e){return null!=e&&Number(e)<0}function Jt(e){var t,a;const n=_t(e),r=mt(n),i=n.backendServices[0]||{name:n.name},l={...i},o=n.healthChecks[0]||i.healthCheck;var s;return delete l.protocol,l.protocol=void 0,l.healthCheck=o?{...o}:void 0,l.name=l.name||n.name,r.backendService=l,delete r.backendServices,delete r.healthChecks,"INTERNAL"===n.loadBalancerType?(r.ipProtocol=(null==(t=n.listeners[0])?void 0:t.protocol)||"TCP",r.ports=(s=null==(a=n.listeners[0])?void 0:a.portRange,String(s||"").split(",").map(e=>e.trim()).filter(Boolean)),delete r.portRange):r.ipProtocol=String(i.protocol||"TCP"),r}function Qt(e){var t;const a=e.application||e.app,r=e.forPipelineConfig?"pipeline":!1===e.isNew?"edit":"create",i=function(e){const t=String(e||"").toUpperCase();return"INTERNAL"===t||"SSL"===t||"TCP"===t?t:"TCP"}(e.loadBalancerType||(null==(t=e.loadBalancer)?void 0:t.loadBalancerType)),[l,o]=Be.useState(()=>function(e,t,a,n=""){var r,i,l;const o=e||{},s=o.backendService||(null==(r=o.backendServices)?void 0:r[0]),c=null==s?void 0:s.healthCheck,d=ut({...o,backendServices:s?[{...s}]:o.backendServices,healthChecks:(null==(i=o.healthChecks)?void 0:i.length)?o.healthChecks:c?[c]:[],loadBalancerType:a,name:o.name||o.loadBalancerName||n},t);if(null==(l=d.backendServices[0])?void 0:l.healthCheck){const{name:e,selfLink:t}=d.backendServices[0].healthCheck;d.backendServices[0].healthCheck=t?{name:e,selfLink:t}:{name:e}}return _t(d)}(e.loadBalancer,r,i,null==a?void 0:a.name)),s=function(e,t=ot){const a=De(null);a.current||(a.current=new nt(t));const n=a.current,[r,i]=Le(n.getState());return ze(()=>{const e=n.subscribe(i);return()=>{e(),n.dispose()}},[n]),ze(()=>{n.load(e)},[e,n]),{...r,refresh:()=>n.load(e)}}(l.credentials,e.readers),c=Be.useRef(),d=Be.useRef(!1),[u]=Be.useState(()=>new E({application:a,title:("edit"===r?"Updating":"Creating")+" your load balancer",onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var t,r,i;n.clearCache("healthChecks");const l=(null==a?void 0:a.loadBalancers)||(null==(t=null==a?void 0:a.getDataSource)?void 0:t.call(a,"loadBalancers")),o=()=>{var t,a;null==(t=c.current)||t.call(c),c.current=void 0,d.current||null==(a=e.closeModal)||a.call(e)};(null==l?void 0:l.onNextRefresh)?(null==(r=c.current)||r.call(c),c.current=void 0,c.current=l.onNextRefresh(o),null==(i=l.refresh)||i.call(l)):o()}}));Be.useEffect(()=>()=>{var e;d.current=!0,null==(e=c.current)||e.call(c),c.current=void 0},[]);const m=Ut(l),p=u.submitting,h="create"===r?`Create ${i} Load Balancer`:"pipeline"===r?`Configure ${i} Load Balancer`:`Edit ${l.name}`;/* @__PURE__ */
|
|
7
|
+
return Be.createElement("div",{className:"modal-content"},/* @__PURE__ */Be.createElement(k,{monitor:u}),/* @__PURE__ */Be.createElement(C,{dismiss:e.dismissModal}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h3",null,h)),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},"loading"===s.status&&/* @__PURE__ */Be.createElement(N,{size:"large"}),"error"===s.status&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger"},"Unable to load GCE load balancer resources."),/* @__PURE__ */Be.createElement($t,{command:l,data:s.data,disabled:"edit"===r,onChange:o}),!!m.length&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger gce-proxy-validation-errors"},m.map(e=>/* @__PURE__ */Be.createElement("div",{key:e},e)))),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-default",disabled:p,onClick:e.dismissModal,type:"button"},"Cancel"),/* @__PURE__ */Be.createElement(T,{isDisabled:!!m.length||"loading"===s.status||p,isFormSubmit:!1,label:"pipeline"===r?"Done":"edit"===r?"Update":"Create",onClick:()=>function(e,{application:t,closeModal:a,taskMonitor:n}){const r=Jt(e);if("pipeline"===e.mode)return void(null==a||a(r));const i="edit"===e.mode?"Update":"Create";n.submit(()=>S.upsertLoadBalancer(r,t,i,{healthCheck:{}}))}(l,{application:a,closeModal:e.closeModal,taskMonitor:u}),submitting:p})))}const ea=Object.assign(Qt,{show:e=>y.show(Qt,e,{dialogClassName:"modal-lg"}),supportsPipelineConfig:!0});function ta(e,t){if(e)return t.find(t=>t.name===e)||{name:e}}function aa(e){const t=e.trim();if(t)return{name:t.split("/").filter(Boolean).pop()||t,selfLink:t}}function na(e){const t=(null==e?void 0:e.selfLink)||"";return t.includes("/sslCertificates/")?"":t}function ra({addresses:e,certificates:t,listener:a,loadBalancerType:n,onChange:r,onRemove:i,subnets:l}){var o,s,c,d;const u="EXTERNAL_MANAGED"===n,m=null==(o=a.address)?void 0:o.networkTier;/* @__PURE__ */
|
|
8
|
+
return Be.createElement("fieldset",{className:"gce-http-listener"},/* @__PURE__ */Be.createElement("legend",null,"Listener"),/* @__PURE__ */Be.createElement("label",null,"Name",/* @__PURE__ */Be.createElement("input",{"data-testid":"listener-name",required:!0,type:"text",value:a.name,onChange:e=>r({...a,name:e.target.value})})),/* @__PURE__ */Be.createElement("label",null,"Protocol",/* @__PURE__ */Be.createElement("select",{"data-testid":"listener-protocol",value:a.protocol,onChange:e=>{const t=e.target.value;r({...a,..."HTTPS"===t?{portRange:"443"}:{},protocol:t})}},["HTTP","HTTPS"].map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e)))),/* @__PURE__ */Be.createElement("label",null,"Port",/* @__PURE__ */Be.createElement("input",{"data-testid":"listener-port",disabled:"HTTPS"===a.protocol,required:!0,type:"text",value:a.portRange,onChange:e=>r({...a,portRange:e.target.value})})),"INTERNAL_MANAGED"===n&&/* @__PURE__ */Be.createElement("label",null,"Subnet",/* @__PURE__ */Be.createElement("select",{"data-testid":"listener-subnet",required:!0,value:(null==(s=a.subnet)?void 0:s.name)||"",onChange:e=>r({...a,subnet:ta(e.target.value,l)})},
|
|
9
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),l.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),/* @__PURE__ */Be.createElement("label",null,"INTERNAL_MANAGED"===n?"Internal IP":"External IP",/* @__PURE__ */Be.createElement("select",{"data-testid":"listener-address",value:(null==(c=a.address)?void 0:c.name)||"",onChange:t=>(t=>{const n=ta(t,e);if(u){const i=e.find(e=>e.name===t),l=null==i?void 0:i.networkTier;return void r({...a,address:n,...l?{networkTier:l}:{}})}const{networkTier:i,...l}=a;r({...l,address:n})})(t.target.value)},
|
|
10
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Ephemeral"),e.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),"HTTPS"===a.protocol&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("label",null,"Certificate",/* @__PURE__ */Be.createElement("select",{"data-testid":"listener-certificate",value:(null==(d=a.certificate)?void 0:d.name)||"",onChange:e=>r({...a,certificate:ta(e.target.value,t),certificateMap:void 0})},
|
|
11
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),t.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),u&&/* @__PURE__ */Be.createElement("label",null,"Certificate Manager resource URL",/* @__PURE__ */Be.createElement("input",{"data-testid":"listener-certificate-manager-url",placeholder:"//certificatemanager.googleapis.com/projects/.../locations/.../certificates/...",type:"text",value:na(a.certificate),onChange:e=>r({...a,certificate:aa(e.target.value),certificateMap:void 0})})),!u&&/* @__PURE__ */Be.createElement("label",null,"Certificate map",/* @__PURE__ */Be.createElement("input",{"data-testid":"listener-certificate-map",type:"text",value:a.certificateMap||"",onChange:e=>r({...a,certificate:void 0,certificateMap:e.target.value||void 0})}))),u&&/* @__PURE__ */Be.createElement("label",null,"Network tier",/* @__PURE__ */Be.createElement("select",{"data-testid":"listener-network-tier",disabled:Boolean(m),value:m||a.networkTier||"PREMIUM",onChange:e=>r({...a,networkTier:e.target.value})},
|
|
12
|
+
/* @__PURE__ */Be.createElement("option",{value:"PREMIUM"},"Premium"),
|
|
13
|
+
/* @__PURE__ */Be.createElement("option",{value:"STANDARD"},"Standard"))),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:i},"Remove listener"))}function ia(e){return""===e?void 0:Number(e)}function la(e,t){if(e)return t.find(t=>t.name===e)||{name:e}}function oa({healthCheck:e,healthChecks:t,onChange:a,onRemove:n}){var r;const i=(t,n)=>a({...e,[t]:ia(n)});/* @__PURE__ */
|
|
14
|
+
return Be.createElement("fieldset",{className:"gce-http-health-check"},/* @__PURE__ */Be.createElement("legend",null,"Health check"),/* @__PURE__ */Be.createElement("label",null,"Existing health check",/* @__PURE__ */Be.createElement("select",{"data-testid":"health-check-reference",value:e.name||"",onChange:n=>{const r=t.find(({name:e})=>e===n.target.value);a(r?{...r}:{...e,name:""})}},
|
|
15
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Create new..."),t.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),/* @__PURE__ */Be.createElement("label",null,"Protocol",/* @__PURE__ */Be.createElement("select",{"data-testid":"health-check-protocol",value:e.healthCheckType||"HTTP",onChange:t=>a({...e,healthCheckType:t.target.value})},["HTTP","HTTPS","HTTP2","GRPC","TCP","SSL"].map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e)))),/* @__PURE__ */Be.createElement("label",null,"Name",/* @__PURE__ */Be.createElement("input",{"data-testid":"health-check-name",required:!0,type:"text",value:e.name||"",onChange:t=>a({...e,name:t.target.value})})),("HTTP"===e.healthCheckType||"HTTPS"===e.healthCheckType||"HTTP2"===e.healthCheckType)&&/* @__PURE__ */Be.createElement("label",null,"Request path",/* @__PURE__ */Be.createElement("input",{"data-testid":"health-check-path",required:!0,type:"text",value:e.requestPath||"",onChange:t=>a({...e,requestPath:t.target.value})})),"GRPC"===e.healthCheckType&&/* @__PURE__ */Be.createElement("label",null,"Service name",/* @__PURE__ */Be.createElement("input",{"data-testid":"health-check-grpc-service-name",type:"text",value:e.grpcServiceName||"",onChange:t=>a({...e,grpcServiceName:t.target.value})})),/* @__PURE__ */Be.createElement("label",null,"Port",/* @__PURE__ */Be.createElement("input",{"data-testid":"health-check-port",max:65535,min:1,required:!0,type:"number",value:null!=(r=e.port)?r:"",onChange:e=>i("port",e.target.value)})),[["timeoutSec","Timeout"],["checkIntervalSec","Interval"],["healthyThreshold","Healthy threshold"],["unhealthyThreshold","Unhealthy threshold"]].map(([t,a])=>{var n;/* @__PURE__ */
|
|
16
|
+
return Be.createElement("label",{key:t},a,/* @__PURE__ */Be.createElement("input",{"data-testid":`health-check-${t}`,min:0,type:"number",value:null!=(n=e[t])?n:"",onChange:e=>i(t,e.target.value)}))}),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:n},"Remove health check"))}function sa({backendService:e,backendServices:t,healthChecks:a,loadBalancerType:n,onChange:r,onRemove:i}){var l,o,s;/* @__PURE__ */
|
|
17
|
+
return Be.createElement("fieldset",{className:"gce-http-backend-service"},/* @__PURE__ */Be.createElement("legend",null,"Backend service"),/* @__PURE__ */Be.createElement("label",null,"Existing backend service",/* @__PURE__ */Be.createElement("select",{"data-testid":"backend-service-reference",value:e.name,onChange:a=>{const n=t.find(({name:e})=>e===a.target.value);r(n?{...n}:{...e,name:""})}},
|
|
18
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Create new..."),t.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),/* @__PURE__ */Be.createElement("label",null,"Name",/* @__PURE__ */Be.createElement("input",{"data-testid":"backend-service-name",required:!0,type:"text",value:e.name,onChange:t=>r({...e,name:t.target.value})})),/* @__PURE__ */Be.createElement("label",null,"Health check",/* @__PURE__ */Be.createElement("select",{"data-testid":"backend-service-health-check",required:!0,value:(null==(l=e.healthCheck)?void 0:l.name)||"",onChange:t=>r({...e,healthCheck:la(t.target.value,a)})},
|
|
19
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),a.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),/* @__PURE__ */Be.createElement("label",null,"Session affinity",/* @__PURE__ */Be.createElement("select",{"data-testid":"backend-service-session-affinity",value:String(e.sessionAffinity||"NONE"),onChange:t=>r({...e,sessionAffinity:t.target.value})},["NONE","CLIENT_IP","GENERATED_COOKIE","HEADER_FIELD","HTTP_COOKIE"].map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e)))),/* @__PURE__ */Be.createElement("label",null,"Port name",/* @__PURE__ */Be.createElement("input",{"data-testid":"backend-service-port-name",required:!0,type:"text",value:String(e.portName||""),onChange:t=>r({...e,portName:t.target.value})})),"EXTERNAL_MANAGED"===n&&/* @__PURE__ */Be.createElement("label",null,"Protocol",/* @__PURE__ */Be.createElement("select",{"data-testid":"backend-service-protocol",value:e.protocol||"HTTP",onChange:t=>r({...e,protocol:t.target.value})},["HTTP","HTTPS"].map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e)))),/* @__PURE__ */Be.createElement("label",null,"Connection draining timeout",/* @__PURE__ */Be.createElement("input",{"data-testid":"backend-service-draining",min:0,type:"number",value:null!=(o=e.connectionDrainingTimeoutSec)?o:"",onChange:t=>r({...e,connectionDrainingTimeoutSec:ia(t.target.value)})})),"HTTP"===n&&/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{"data-testid":"backend-service-cdn",checked:Boolean(e.enableCDN),type:"checkbox",onChange:t=>r({...e,enableCDN:t.target.checked})}),"Enable CDN"),"GENERATED_COOKIE"===e.sessionAffinity&&/* @__PURE__ */Be.createElement("label",null,"Affinity cookie TTL seconds",/* @__PURE__ */Be.createElement("input",{"data-testid":"backend-service-cookie-ttl",max:86400,min:0,required:!0,type:"number",value:null!=(s=e.affinityCookieTtlSec)?s:"",onChange:t=>r({...e,affinityCookieTtlSec:ia(t.target.value)})})),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:i},"Remove backend service"))}function ca(e){return e.split(/[\n,]/).map(e=>e.trim()).filter(Boolean)}function da(e,t){if(e)return t.find(t=>t.name===e)||{name:e}}function ua({backendServices:e,onChange:t,onRemove:a,pathRule:n}){var r;/* @__PURE__ */
|
|
20
|
+
return Be.createElement("fieldset",{className:"gce-http-path-rule"},/* @__PURE__ */Be.createElement("legend",null,"Path rule"),/* @__PURE__ */Be.createElement("label",null,"Paths",/* @__PURE__ */Be.createElement("input",{"data-testid":"path-rule-paths",required:!0,type:"text",value:n.paths.join(", "),onChange:e=>t({...n,paths:ca(e.target.value)})})),/* @__PURE__ */Be.createElement("label",null,"Backend service",/* @__PURE__ */Be.createElement("select",{"data-testid":"path-rule-backend",required:!0,value:(null==(r=n.backendService)?void 0:r.name)||"",onChange:a=>t({...n,backendService:da(a.target.value,e)})},
|
|
21
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),e.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:a},"Remove path rule"))}function ma({backendServices:e,hostRule:t,onChange:a,onRemove:n}){var r;/* @__PURE__ */
|
|
22
|
+
return Be.createElement("fieldset",{className:"gce-http-host-rule"},/* @__PURE__ */Be.createElement("legend",null,"Host rule"),/* @__PURE__ */Be.createElement("label",null,"Host patterns",/* @__PURE__ */Be.createElement("input",{"data-testid":"host-rule-patterns",type:"text",value:t.hostPatterns.join(", "),onChange:e=>a({...t,hostPatterns:ca(e.target.value)})})),/* @__PURE__ */Be.createElement("label",null,"Default backend service",/* @__PURE__ */Be.createElement("select",{"data-testid":"host-rule-default-backend",required:!0,value:(null==(r=t.pathMatcher.defaultService)?void 0:r.name)||"",onChange:n=>a({...t,pathMatcher:{...t.pathMatcher,defaultService:da(n.target.value,e)}})},e.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),t.pathMatcher.pathRules.map((n,r)=>/* @__PURE__ */Be.createElement(ua,{backendServices:e,key:r,onChange:e=>a({...t,pathMatcher:{...t.pathMatcher,pathRules:t.pathMatcher.pathRules.map((t,a)=>a===r?e:t)}}),onRemove:()=>a({...t,pathMatcher:{...t.pathMatcher,pathRules:t.pathMatcher.pathRules.filter((e,t)=>t!==r)}}),pathRule:n})),/* @__PURE__ */Be.createElement("button",{type:"button",className:"add-new btn btn-block","data-testid":"add-path-rule",onClick:()=>a({...t,pathMatcher:{...t.pathMatcher,pathRules:[...t.pathMatcher.pathRules,{paths:[]}]}})},"Add path rule"),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:n},"Remove host rule"))}function pa(e){return"HTTP"===e||"INTERNAL_MANAGED"===e||"EXTERNAL_MANAGED"===e}function ha(e,t,a=!1){const n=e.healthCheck?t.find(({name:t})=>{var a;return t===(null==(a=e.healthCheck)?void 0:a.name)})||e.healthCheck:void 0;return a?{...Ct(e),...n?{healthCheck:Nt(n)}:{}}:{...e,...n?{healthCheck:{...n}}:{}}}function ga(e,t){return e?t.get(e.name)||{...e}:void 0}function va(e,{application:t,executeTask:a=A.executeTask}){const n=function(e){const t=mt(e);if(!pa(e.loadBalancerType))return[t];const{backendServices:a,healthChecks:n,hostRules:r,listeners:i,...l}=t,o=new Map(e.backendServices.map(t=>[t.name,ha(t,e.healthChecks,"EXTERNAL_MANAGED"===e.loadBalancerType)])),s=ga(e.defaultService,o),c=e.hostRules.flatMap(e=>e.hostPatterns.map(t=>({hostPatterns:[t],pathMatcher:{...e.pathMatcher.defaultService?{defaultService:ga(e.pathMatcher.defaultService,o)}:{},pathRules:e.pathMatcher.pathRules.map(e=>({...e.backendService?{backendService:ga(e.backendService,o)}:{},paths:[...e.paths]}))}}))),d=(i||[]).map(t=>{const a=String(t.name),n=t.networkTier;return{...l,certificate:t.certificate||null,...s?{defaultService:s}:{},hostRules:c,ipAddress:t.ipAddress,ipProtocol:"TCP",loadBalancerName:a,name:a,portRange:t.portRange,...t.subnet?{subnet:t.subnet}:{},..."EXTERNAL_MANAGED"===e.loadBalancerType?{networkTier:n}:{},urlMapName:e.name}});if("edit"===e.mode&&e.original&&d.length){const t=new Set(e.listeners.map(({name:e})=>e)),a=new Map(e.backendServices.map(e=>[e.name,e]));d[0].listenersToDelete=e.original.listeners.map(({name:e})=>e).filter(e=>!t.has(e)),d[0].backendServiceDiff=e.original.backendServices.filter(e=>!ke(e,a.get(e.name))).map(t=>ha(t,e.original.healthChecks,"EXTERNAL_MANAGED"===e.loadBalancerType))}return d}(e);return"pipeline"===e.mode?pa(e.loadBalancerType)?n:n[0]:Promise.resolve(a({application:t,description:`${"edit"===e.mode?"Update":"Create"} Load Balancer: ${e.name}`,job:n}))}function fa({children:e,label:t}){/* @__PURE__ */
|
|
23
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-2 sm-label-right"},t),/* @__PURE__ */Be.createElement("div",{className:"col-md-8"},e))}function ba(e){return e.filter((t,a)=>Boolean(t.name)&&e.findIndex(({name:e})=>e===t.name)===a)}function ya(e){const t=({subnet:e,networkTier:t,...a},n,r)=>{var i;const l=r&&(t||(null==(i=a.address)?void 0:i.networkTier)||"PREMIUM");if("HTTPS"===a.protocol)return{...a,portRange:"443",protocol:"HTTPS",...n&&e?{subnet:e}:{},...l?{networkTier:l}:{}};const{certificate:o,certificateMap:s,...c}=a;return{...c,protocol:"HTTP",...n&&e?{subnet:e}:{},...l?{networkTier:l}:{}}};return"INTERNAL_MANAGED"===e.loadBalancerType?{...e,listeners:e.listeners.map(e=>t(e,!0,!1)),region:"global"===e.region?"":e.region}:"EXTERNAL_MANAGED"===e.loadBalancerType?{...e,listeners:e.listeners.map(e=>t(e,!1,!0)),region:"global"===e.region?"":e.region,subnet:void 0}:{...e,listeners:e.listeners.map(e=>t(e,!1,!1)),loadBalancerType:"HTTP",network:void 0,region:"global",subnet:void 0}}function Ea(e){var t,a,n;const r=/* @__PURE__ */new Set,i="INTERNAL_MANAGED"===e.loadBalancerType,l="EXTERNAL_MANAGED"===e.loadBalancerType;return e.name.trim()||r.add("Name is required."),e.credentials||r.add("Account is required."),i||l?(e.region&&"global"!==e.region||r.add(`Region is required for ${i?"INTERNAL_MANAGED":"EXTERNAL_MANAGED"} load balancers.`),(null==(t=e.network)?void 0:t.name)||r.add(`Network is required for ${i?"INTERNAL_MANAGED":"EXTERNAL_MANAGED"} load balancers.`),l&&e.network&&!Ca(e.network)&&r.add("Shared VPC networks are not supported for EXTERNAL_MANAGED load balancers."),i&&!(null==(a=e.subnet)?void 0:a.name)&&r.add("Subnet is required for INTERNAL_MANAGED load balancers.")):"global"!==e.region&&r.add("HTTP load balancers must use the global location."),e.listeners.length||r.add("At least one listener is required."),e.listeners.forEach(t=>{var a,n,i;if(t.name.trim()||r.add("Listener name is required."),"HTTP"!==t.protocol&&"HTTPS"!==t.protocol&&r.add("Listener protocol must be HTTP or HTTPS."),ka(t.portRange)||r.add("Listener port must be a single port between 1 and 65535."),"HTTPS"!==t.protocol||(null==(a=t.certificate)?void 0:a.name)||r.add("Certificate is required for HTTPS listeners."),"HTTPS"===t.protocol&&"443"!==t.portRange&&r.add("HTTPS listeners must use port 443."),l&&t.certificateMap&&r.add("Certificate maps are not supported for EXTERNAL_MANAGED load balancers."),l&&(null==(n=t.address)?void 0:n.networkTier)&&t.networkTier!==t.address.networkTier&&r.add("Reserved IP address network tier must match the listener network tier."),l&&"edit"===e.mode){const a=null==(i=e.original)?void 0:i.listeners.find(({name:e})=>e===t.name);!a||t.portRange===a.portRange&&Na(t.address)===Na(a.address)&&t.networkTier===a.networkTier&&t.protocol===a.protocol||r.add("Rename the listener to change its port, address, network tier, or HTTP/HTTPS protocol.")}}),e.backendServices.length||r.add("At least one backend service is required."),e.backendServices.forEach(e=>{var t;e.name.trim()||r.add("Backend service name is required."),(null==(t=e.healthCheck)?void 0:t.name)||r.add("Each backend service requires a health check."),e.portName||r.add("Backend service port name is required."),l&&!["HTTP","HTTPS"].includes(String(e.protocol||"HTTP"))&&r.add("Backend service protocol must be HTTP or HTTPS."),Ta(e.connectionDrainingTimeoutSec)&&r.add("Connection draining timeout must be zero or greater."),"GENERATED_COOKIE"!==e.sessionAffinity||function(e,t,a){const n=Number(e);return void 0!==e&&Number.isFinite(n)&&n>=t&&n<=a}(e.affinityCookieTtlSec,0,86400)||r.add("Generated cookie TTL must be between 0 and 86400 seconds.")}),e.healthChecks.forEach(e=>{var t;(null==(t=e.name)?void 0:t.trim())||r.add("Health check name is required."),["HTTP","HTTPS","TCP","SSL"].includes(String(e.healthCheckType))||r.add("Health check protocol must be HTTP, HTTPS, TCP, or SSL."),ka(e.port)||r.add("Health check port must be between 1 and 65535."),"HTTP"!==e.healthCheckType&&"HTTPS"!==e.healthCheckType||e.requestPath||r.add("HTTP and HTTPS health checks require a request path."),Ta(e.timeoutSec)&&r.add("Health check timeout must be zero or greater."),void 0!==e.checkIntervalSec&&Number(e.checkIntervalSec)<=0&&r.add("Health check interval must be greater than zero."),void 0!==e.healthyThreshold&&Number(e.healthyThreshold)<=0&&r.add("Healthy threshold must be greater than zero."),void 0!==e.unhealthyThreshold&&Number(e.unhealthyThreshold)<=0&&r.add("Unhealthy threshold must be greater than zero.")}),(null==(n=e.defaultService)?void 0:n.name)||r.add("Default backend service is required."),e.hostRules.forEach(e=>{var t;e.hostPatterns.length||r.add("Host rules require at least one host pattern."),(null==(t=e.pathMatcher.defaultService)?void 0:t.name)||r.add("Path matcher default backend service is required."),e.pathMatcher.pathRules.forEach(e=>{var t;e.paths.length||r.add("Path rules require at least one path."),(null==(t=e.backendService)?void 0:t.name)||r.add("Path rules require a backend service.")})}),Array.from(r)}function ka(e){const t=String(null!=e?e:"").trim();if(!/^\d+$/.test(t))return!1;const a=Number(t);return Number.isInteger(a)&&a>=1&&a<=65535}function Ca(e){return!/^[^/]+\/[^/]+$/.test(String(e.id||e.selfLink||e.name||""))}function Na(e){return String((null==e?void 0:e.selfLink)||(null==e?void 0:e.name)||"")}function Ta(e){return void 0!==e&&Number(e)<0}function Sa(e,t){if(e)return t.find(t=>t.name===e)||{name:e}}function Aa({command:e,data:t,onChange:a}){var n,r,i;const l=function(e,t){var a,n;const r="INTERNAL_MANAGED"===e.loadBalancerType,i="EXTERNAL_MANAGED"===e.loadBalancerType,l=t=>t.account===e.credentials,o=t=>!!l(t)&&(r||i?t.region===e.region:void 0===t.region||"global"===t.region),s=t.networks.filter(l),c=new Set(t.subnets.filter(t=>l(t)&&t.region===e.region&&"REGIONAL_MANAGED_PROXY"===t.purpose).map(e=>e.network).filter(Boolean)),d=i?s.filter(e=>Ca(e)&&(c.has(e.id)||c.has(e.name))):s,u=s.find(t=>{var a,n;return t.name===(null==(a=e.network)?void 0:a.name)||t.id===(null==(n=e.network)?void 0:n.name)}),m=(null==(a=e.network)?void 0:a.id)||(null==u?void 0:u.id)||(null==(n=e.network)?void 0:n.name),p=e.hostRules.flatMap(e=>[...e.pathMatcher.defaultService?[e.pathMatcher.defaultService]:[],...e.pathMatcher.pathRules.flatMap(e=>e.backendService?[e.backendService]:[])]),h=e.backendServices.flatMap(e=>e.healthCheck?[e.healthCheck]:[]);return{accounts:rt(t.accounts,e.credentials?[{name:e.credentials}]:[]),addresses:rt(t.addresses.filter(e=>o(e)&&(!i||"EXTERNAL"===e.addressType)),ba(e.listeners.flatMap(e=>e.address?[e.address]:[]))),backendServices:rt(t.backendServices.filter(o),ba([...e.backendServices,...e.defaultService?[e.defaultService]:[],...p])),certificates:rt(t.certificates.filter(o),ba(e.listeners.flatMap(e=>e.certificate?[e.certificate]:[]))),healthChecks:rt(t.healthChecks.filter(o),ba([...e.healthChecks,...h])),networks:rt(d,e.network?[e.network]:[]),regions:rt(t.regions,e.region?[{name:e.region}]:[]),subnets:rt(r?t.subnets.filter(t=>l(t)&&t.region===e.region&&t.network===m):[],ba([...e.subnet?[e.subnet]:[],...e.listeners.flatMap(e=>e.subnet?[e.subnet]:[])]))}}(e,t),o="edit"===e.mode,s=t=>{a(ya({...e,...t}))},c=t=>s("EXTERNAL_MANAGED"===e.loadBalancerType?{...t,listeners:e.listeners.map(e=>({...e,address:void 0}))}:t),d=(t,a=e.defaultService)=>{const n=[...a?[a]:[],...t.flatMap(e=>[...e.pathMatcher.defaultService?[e.pathMatcher.defaultService]:[],...e.pathMatcher.pathRules.flatMap(e=>e.backendService?[e.backendService]:[])])],r=[...e.backendServices];n.forEach(e=>{if(!r.some(({name:t})=>t===e.name)){const t=l.backendServices.find(({name:t})=>t===e.name)||e;r.push(t)}});const i=[...e.healthChecks];r.forEach(e=>{if(e.healthCheck&&!i.some(({name:t})=>{var a;return t===(null==(a=e.healthCheck)?void 0:a.name)})){const t=l.healthChecks.find(({name:t})=>{var a;return t===(null==(a=e.healthCheck)?void 0:a.name)});i.push(t||e.healthCheck)}}),s({backendServices:r,defaultService:a,healthChecks:i,hostRules:t})};/* @__PURE__ */
|
|
24
|
+
return Be.createElement("div",{className:"gce-http-load-balancer-editor"},/* @__PURE__ */Be.createElement("section",null,/* @__PURE__ */Be.createElement("h4",null,"Location"),/* @__PURE__ */Be.createElement(fa,{label:"Name"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm","data-testid":"load-balancer-name",maxLength:63,required:!0,type:"text",disabled:o,value:e.name,onChange:e=>s({name:e.target.value})})),/* @__PURE__ */Be.createElement(fa,{label:"Type"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"load-balancer-type",disabled:o,value:e.loadBalancerType,onChange:e=>s({loadBalancerType:e.target.value})},
|
|
25
|
+
/* @__PURE__ */Be.createElement("option",{value:"HTTP"},"HTTP(S)"),
|
|
26
|
+
/* @__PURE__ */Be.createElement("option",{value:"INTERNAL_MANAGED"},"Internal managed HTTP"),
|
|
27
|
+
/* @__PURE__ */Be.createElement("option",{value:"EXTERNAL_MANAGED"},"External managed HTTP(S)"))),/* @__PURE__ */Be.createElement(fa,{label:"Account"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"credentials",disabled:o,required:!0,value:e.credentials,onChange:e=>c({credentials:e.target.value})},
|
|
28
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),l.accounts.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),("INTERNAL_MANAGED"===e.loadBalancerType||"EXTERNAL_MANAGED"===e.loadBalancerType)&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement(fa,{label:"Region"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"region",disabled:o,required:!0,value:e.region,onChange:e=>c({region:e.target.value})},
|
|
29
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),l.regions.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),/* @__PURE__ */Be.createElement(fa,{label:"Network"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"network",disabled:o&&"EXTERNAL_MANAGED"===e.loadBalancerType,required:!0,value:(null==(n=e.network)?void 0:n.name)||"",onChange:e=>s({network:Sa(e.target.value,l.networks)})},
|
|
30
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),l.networks.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))),"INTERNAL_MANAGED"===e.loadBalancerType&&/* @__PURE__ */Be.createElement(fa,{label:"Subnet"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"subnet",required:!0,value:(null==(r=e.subnet)?void 0:r.name)||"",onChange:t=>{const a=Sa(t.target.value,l.subnets);s({subnet:a,listeners:e.listeners.map(e=>({...e,subnet:a}))})}},
|
|
31
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),l.subnets.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name)))))),/* @__PURE__ */Be.createElement("section",null,/* @__PURE__ */Be.createElement("h4",null,"Listeners"),e.listeners.map((t,n)=>/* @__PURE__ */Be.createElement(ra,{addresses:l.addresses,certificates:l.certificates,key:n,listener:t,loadBalancerType:e.loadBalancerType,onChange:t=>((t,n)=>{const r=e.listeners.map((e,a)=>a===t?n:e);a(ya({...e,listeners:r}))})(n,t),onRemove:()=>s({listeners:e.listeners.filter((e,t)=>t!==n)}),subnets:l.subnets})),/* @__PURE__ */Be.createElement("button",{type:"button",className:"add-new btn btn-block",onClick:()=>s({listeners:[...e.listeners,{name:e.name,portRange:"80",protocol:"HTTP",subnet:"INTERNAL_MANAGED"===e.loadBalancerType?e.subnet:void 0}]})},"Add listener")),/* @__PURE__ */Be.createElement("section",null,/* @__PURE__ */Be.createElement("h4",null,"Backend services"),e.backendServices.map((t,a)=>/* @__PURE__ */Be.createElement(sa,{backendService:t,backendServices:l.backendServices,healthChecks:l.healthChecks,key:a,loadBalancerType:e.loadBalancerType,onChange:t=>((t,a)=>{const n=e.backendServices.map((e,n)=>n===t?a:e),r=a.healthCheck?l.healthChecks.find(({name:e})=>{var t;return e===(null==(t=a.healthCheck)?void 0:t.name)}):void 0,i=r&&!e.healthChecks.some(({name:e})=>e===r.name)?[...e.healthChecks,r]:e.healthChecks;s({backendServices:n,healthChecks:i})})(a,t),onRemove:()=>s({backendServices:e.backendServices.filter((e,t)=>t!==a)})})),/* @__PURE__ */Be.createElement("button",{type:"button",className:"add-new btn btn-block",onClick:()=>s({backendServices:[...e.backendServices,{name:"",portName:"http",..."EXTERNAL_MANAGED"===e.loadBalancerType?{protocol:"HTTP"}:{},sessionAffinity:"NONE"}]})},"Add backend service")),/* @__PURE__ */Be.createElement("section",null,/* @__PURE__ */Be.createElement("h4",null,"Default service"),/* @__PURE__ */Be.createElement(fa,{label:"Default backend service"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"default-backend-service",required:!0,value:(null==(i=e.defaultService)?void 0:i.name)||"",onChange:t=>d(e.hostRules,Sa(t.target.value,l.backendServices))},
|
|
32
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),l.backendServices.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name))))),/* @__PURE__ */Be.createElement("section",null,/* @__PURE__ */Be.createElement("h4",null,"Host and path rules"),e.hostRules.map((t,a)=>/* @__PURE__ */Be.createElement(ma,{backendServices:l.backendServices,hostRule:t,key:a,onChange:t=>d(e.hostRules.map((e,n)=>n===a?t:e)),onRemove:()=>d(e.hostRules.filter((e,t)=>t!==a))})),/* @__PURE__ */Be.createElement("button",{type:"button",className:"add-new btn btn-block",onClick:()=>d([...e.hostRules,{hostPatterns:[],pathMatcher:{defaultService:e.defaultService,pathRules:[]}}])},"Add host rule")),/* @__PURE__ */Be.createElement("section",null,/* @__PURE__ */Be.createElement("h4",null,"Health checks"),e.healthChecks.map((t,a)=>/* @__PURE__ */Be.createElement(oa,{healthCheck:t,healthChecks:l.healthChecks,key:a,onChange:t=>s({healthChecks:e.healthChecks.map((e,n)=>n===a?t:e)}),onRemove:()=>s({healthChecks:e.healthChecks.filter((e,t)=>t!==a)})})),/* @__PURE__ */Be.createElement("button",{type:"button",className:"add-new btn btn-block",onClick:()=>s({healthChecks:[...e.healthChecks,{checkIntervalSec:10,healthCheckType:"HTTP",name:"",port:80,requestPath:"/",timeoutSec:5,healthyThreshold:10,unhealthyThreshold:2}]})},"Add health check")))}const Pa={accounts:[],addresses:[],backendServices:[],certificates:[],healthChecks:[],networks:[],regions:[],subnets:[]};const wa=class e extends Be.Component{constructor(e){super(e),this.updateCommand=e=>{const t=e.credentials!==this.state.command.credentials;this.setState({command:e}),t&&this.dataController&&this.dataController.load(e.credentials)},this.submit=()=>{if(Ea(this.state.command).length)return;const e=ya(this.state.command),t={application:this.application(),executeTask:this.props.executeTask};"pipeline"!==e.mode?this.state.taskMonitor.submit(()=>va(e,t)):this.props.closeModal(va(e,t))};const t=this.application(e),a=this.mode(e),n=function(e,t,a,n={}){const r=ut({...n,...e,credentials:e.credentials||e.account||n.credentials,loadBalancerType:e.loadBalancerType||n.loadBalancerType||"HTTP",name:e.name||e.loadBalancerName||e.urlMapName||(null==a?void 0:a.name)||""},t);return Array.isArray(e.listeners)&&e.listeners.length>0||void 0!==e.port||void 0!==e.portRange||void 0!==e.ports||(r.listeners=[{name:r.name,portRange:"80",protocol:"HTTP"}]),ya(r)}(e.loadBalancer||{},a,t,{credentials:e.credentials,loadBalancerType:e.loadBalancerType});this.state={command:n,data:e.data||Pa,status:e.data?"ready":"idle",taskMonitor:new E({application:t,title:("edit"===a?"Updating":"Creating")+" your load balancer",onDismiss:()=>e.dismissModal(),onTaskComplete:()=>{var a,n;null==(n=null==(a=t.loadBalancers)?void 0:a.refresh)||n.call(a),e.closeModal()}})}}static show(t){return y.show(e,t,{dialogClassName:"wizard-modal modal-lg"})}componentDidMount(){this.props.data||(this.dataController=new nt(this.props.dataReaders),this.unsubscribe=this.dataController.subscribe(e=>this.setState(e)),this.dataController.load(this.state.command.credentials))}componentWillUnmount(){var e,t;null==(e=this.unsubscribe)||e.call(this),null==(t=this.dataController)||t.dispose()}application(e=this.props){return e.application||e.app}mode(e=this.props){return e.forPipelineConfig?"pipeline":e.mode?e.mode:!1===e.isNew||e.loadBalancer?"edit":"create"}render(){const{command:e,data:t,status:a,taskMonitor:n}=this.state,r=Ea(e),i="create"===e.mode?`Create ${"INTERNAL_MANAGED"===e.loadBalancerType?"Internal managed HTTP(S)":"EXTERNAL_MANAGED"===e.loadBalancerType?"External managed HTTP(S)":"HTTP(S)"} load balancer`:`Edit ${e.name}`;/* @__PURE__ */
|
|
33
|
+
return Be.createElement("form",{className:"form-horizontal gce-http-lb",name:"form"},/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement(C,{dismiss:this.props.dismissModal}),/* @__PURE__ */Be.createElement("h3",null,i)),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},/* @__PURE__ */Be.createElement(k,{monitor:n}),"loading"===a&&/* @__PURE__ */Be.createElement("div",{className:"horizontal center middle"},"Loading..."),"error"===a&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger"},"Unable to load GCE resources."),/* @__PURE__ */Be.createElement(Aa,{command:e,data:t,onChange:this.updateCommand}),!!r.length&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger gce-http-validation-errors"},r.map(e=>/* @__PURE__ */Be.createElement("div",{key:e},e)))),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-default",disabled:n.submitting,onClick:this.props.dismissModal},"Cancel"),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-primary",disabled:n.submitting||"loading"===a||!!r.length,onClick:this.submit},"pipeline"===e.mode?"Done":"edit"===e.mode?"Update":"Create")))}};wa.supportsPipelineConfig=!0;let Ia=wa;const Ma=["NONE","CLIENT_IP","CLIENT_IP_PROTO"],Ra=["TCP","UDP"];function Ga(e){const t=[],a=e.listeners[0],n=e.healthChecks[0];var r;return e.name.trim()||t.push("Name is required."),e.credentials||t.push("Account is required."),e.region||t.push("Region is required."),function(e){const t=String(e||"").match(/^(\d+)(?:-(\d+))?$/);if(!t)return!1;const a=Number(t[1]),n=Number(t[2]||t[1]);return Oa(a)&&Oa(n)&&a<=n}(null==a?void 0:a.portRange)||t.push("Port range must contain ports between 1 and 65535."),n&&(Oa(n.port)||t.push("Health check port must be between 1 and 65535."),n.requestPath||t.push("Health check path is required."),null!=(r=n.timeoutSec)&&Number(r)<0&&t.push("Health check timeout must be zero or greater."),void 0!==n.checkIntervalSec&&Number(n.checkIntervalSec)<=0&&t.push("Health check interval must be greater than zero."),void 0!==n.healthyThreshold&&Number(n.healthyThreshold)<=0&&t.push("Healthy threshold must be greater than zero."),void 0!==n.unhealthyThreshold&&Number(n.unhealthyThreshold)<=0&&t.push("Unhealthy threshold must be greater than zero.")),t}function Ba({command:e,data:t,onChange:a}){var n,r,i;const l=function(e,t){const a=t=>!t.account&&!t.credentials||(t.account||t.credentials)===e.credentials,n=e.listeners[0];return{accounts:rt(t.accounts,e.credentials?[{name:e.credentials}]:[]),addresses:rt(t.addresses.filter(t=>a(t)&&(!t.region||t.region===e.region)),Fa(null==n?void 0:n.address)),networks:rt(t.networks.filter(a),Fa(e.network)),regions:rt(t.regions,e.region?[{name:e.region}]:[])}}(e,t),o=e.listeners[0]||{name:e.name,portRange:"",protocol:"TCP"},s=e.healthChecks[0],c="edit"===e.mode,d=t=>a({...e,...t}),u=e=>d({listeners:[{...o,...e}]}),m=e=>d({healthChecks:[{...s,...e}]});/* @__PURE__ */
|
|
34
|
+
return Be.createElement("div",{className:"form-horizontal gce-network-load-balancer-editor"},La("Name","name",e.name,t=>d({name:t,listeners:[{...o,name:o.name===e.name?t:o.name}]}),c),Da("Account","credentials",e.credentials,l.accounts,e=>d({credentials:e}),c),Da("Region","region",e.region,l.regions,e=>d({region:e}),c),Da("Network","network",null==(n=e.network)?void 0:n.name,l.networks,e=>d({network:za(e,l.networks)}),c),/* @__PURE__ */Be.createElement("h4",null,"Forwarding Rule"),Da("IP address","address",null==(r=o.address)?void 0:r.name,l.addresses,e=>u({address:za(e,l.addresses)})),Da("Protocol","protocol",o.protocol,Ra.map(e=>({name:e})),e=>u({protocol:e})),La("Port range","portRange",o.portRange,e=>u({portRange:e})),La("Target pool","targetPool",(null==(i=e.targetPool)?void 0:i.name)||"",()=>{},!0),Da("Session affinity","sessionAffinity",e.sessionAffinity,Ma.map(e=>({name:e})),e=>d({sessionAffinity:e}),c),/* @__PURE__ */Be.createElement("h4",null,"Health Check"),/* @__PURE__ */Be.createElement("div",{className:"form-group","data-field":"healthCheckEnabled"},/* @__PURE__ */Be.createElement("div",{className:"col-md-7 col-md-offset-3"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:Boolean(s),onChange:e=>d({healthChecks:e.target.checked?[{checkIntervalSec:10,healthCheckType:"HTTP",healthyThreshold:10,port:80,requestPath:"/",timeoutSec:5,unhealthyThreshold:2}]:[]}),type:"checkbox"})," ","Enable health check"))),s&&/* @__PURE__ */Be.createElement(Be.Fragment,null,xa("Port","healthCheckPort",s.port,e=>m({port:e})),La("Request path","requestPath",s.requestPath||"",e=>m({requestPath:e&&!e.startsWith("/")?`/${e}`:e})),xa("Timeout","timeoutSec",s.timeoutSec,e=>m({timeoutSec:e})),xa("Interval","checkIntervalSec",s.checkIntervalSec,e=>m({checkIntervalSec:e})),xa("Healthy threshold","healthyThreshold",s.healthyThreshold,e=>m({healthyThreshold:e})),xa("Unhealthy threshold","unhealthyThreshold",s.unhealthyThreshold,e=>m({unhealthyThreshold:e}))))}function La(e,t,a,n,r=!1){/* @__PURE__ */
|
|
35
|
+
return Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",disabled:r,onChange:e=>n(e.target.value),value:a||""})))}function xa(e,t,a,n){/* @__PURE__ */
|
|
36
|
+
return Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",onChange:e=>n(""===e.target.value?void 0:Number(e.target.value)),type:"number",value:null==a?"":String(a)})))}function Da(e,t,a,n,r,i=!1){/* @__PURE__ */
|
|
37
|
+
return Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm",disabled:i,onChange:e=>r(e.target.value),value:a||""},
|
|
38
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),n.map(({name:e})=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e)))))}function za(e,t){return e?t.find(t=>t.name===e)||{name:e}:void 0}function Fa(e){return(null==e?void 0:e.name)?[e]:[]}function Oa(e){const t=Number(e);return Number.isInteger(t)&&t>=1&&t<=65535}const Ha=Ce(v.providers.gce||{},{defaults:{},feature:{},resetToOriginal:v.resetProvider("gce")}),_a={accounts:[],addresses:[],backendServices:[],certificates:[],healthChecks:[],networks:[],regions:[],subnets:[]},Ua=["NONE","CLIENT_IP","CLIENT_IP_PROTO"];function $a(e,{application:t,executeTask:a=A.executeTask}){const n=function(e){const t=mt(e);return delete t.healthChecks,delete t.listeners,delete t.network,delete t.targetPool,delete t.mode,{...t,healthCheck:Xa(e.healthChecks[0]),sessionAffinity:e.sessionAffinity}}(e);return"pipeline"===e.mode?n:Promise.resolve(a({application:t,description:`${"edit"===e.mode?"Update":"Create"} Load Balancer: ${e.name}`,job:[n]}))}class qa extends Be.Component{constructor(e){super(e),this.updateCommand=e=>{var t;const a=e.credentials!==this.state.command.credentials;this.setState({command:e}),a&&(null==(t=this.dataController)||t.load(e.credentials))},this.submit=()=>{var e,t;"pipeline"!==this.state.command.mode?this.state.taskMonitor.submit(()=>$a(this.state.command,{application:this.application(),executeTask:this.props.executeTask})):null==(t=(e=this.props).closeModal)||t.call(e,$a(this.state.command,{application:this.application(),executeTask:this.props.executeTask}))};const t=this.application(e),a=this.mode(e),r=function(e={},t,a="",n={}){var r,i,l;const o=e||{},s=o.elb&&"object"==typeof o.elb?o.elb:{},c=(null==(i=null==(r=s.listenerDescriptions)?void 0:r[0])?void 0:i.listener)||{},d={...s,...o,healthCheck:void 0!==o.healthCheck?o.healthCheck:s.healthCheck,ipAddress:void 0!==o.ipAddress?o.ipAddress:s.ipAddress,ipProtocol:void 0!==o.ipProtocol?o.ipProtocol:s.ipProtocol||c.protocol,portRange:void 0!==o.portRange?o.portRange:s.portRange||c.loadBalancerPort,sessionAffinity:void 0!==o.sessionAffinity?o.sessionAffinity:s.sessionAffinity,targetPool:void 0!==o.targetPool?o.targetPool:s.targetPool},u=Object.prototype.hasOwnProperty.call(o,"healthCheck")||Object.prototype.hasOwnProperty.call(s,"healthCheck")||d.healthChecks,m=(null==(l=d.healthChecks)?void 0:l.length)?d.healthChecks:d.healthCheck?[Va(d.healthCheck)]:[],p=ut({...n,...d,credentials:d.credentials||d.account||n.credentials,healthChecks:m,ipAddress:Ka(d.ipAddress),loadBalancerType:"NETWORK",name:d.name||d.loadBalancerName||a,network:Ka(d.network),region:d.region||n.region},t);return Array.isArray(d.listeners)&&d.listeners.length>0||void 0!==d.ipAddress||void 0!==d.ipProtocol||void 0!==d.portRange||void 0!==d.ports||(p.listeners=[{name:p.name,portRange:"8080",protocol:"TCP"}]),"create"!==t||u||(p.healthChecks=[{checkIntervalSec:10,healthCheckType:"HTTP",healthyThreshold:10,port:80,requestPath:"/",timeoutSec:5,unhealthyThreshold:2}]),{...p,loadBalancerType:"NETWORK",sessionAffinity:Wa(d.sessionAffinity),targetPool:Ka(d.targetPool)}}(e.loadBalancer,a,null==t?void 0:t.name,{credentials:e.credentials||Ha.defaults.account,region:Ha.defaults.region});this.state={command:r,data:e.data||_a,status:e.data?"ready":"idle",taskMonitor:new E({application:t,title:("edit"===a?"Updating":"Creating")+" your load balancer",onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var a,r,i;n.clearCache("healthChecks"),null==(r=null==(a=null==t?void 0:t.loadBalancers)?void 0:a.refresh)||r.call(a),null==(i=e.closeModal)||i.call(e)}})}}componentDidMount(){this.props.data||(this.dataController=new nt(this.props.dataReaders),this.unsubscribe=this.dataController.subscribe(e=>this.setState(e)),this.dataController.load(this.state.command.credentials))}componentWillUnmount(){var e,t;null==(e=this.unsubscribe)||e.call(this),null==(t=this.dataController)||t.dispose()}render(){const{command:e,data:t,status:a,taskMonitor:n}=this.state,r=Ga(e),i="create"===e.mode?"Create Network Load Balancer":"pipeline"===e.mode?"Configure Network Load Balancer":`Edit ${e.name}`;/* @__PURE__ */
|
|
39
|
+
return Be.createElement("div",{className:"modal-content"},/* @__PURE__ */Be.createElement(k,{monitor:n}),/* @__PURE__ */Be.createElement(C,{dismiss:this.props.dismissModal}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h3",null,i)),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},"loading"===a&&/* @__PURE__ */Be.createElement("div",{className:"horizontal center middle"},"Loading..."),"error"===a&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger"},"Unable to load GCE resources."),/* @__PURE__ */Be.createElement(Ba,{command:e,data:t,onChange:this.updateCommand}),!!r.length&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger gce-network-validation-errors"},r.map(e=>/* @__PURE__ */Be.createElement("div",{key:e},e)))),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-default",disabled:n.submitting,onClick:this.props.dismissModal,type:"button"},"Cancel"),/* @__PURE__ */Be.createElement(T,{isDisabled:!!r.length||"loading"===a||n.submitting,isFormSubmit:!1,label:"pipeline"===e.mode?"Done":"edit"===e.mode?"Update":"Create",onClick:this.submit,submitting:n.submitting})))}application(e=this.props){return e.application||e.app}mode(e=this.props){return e.forPipelineConfig?"pipeline":e.mode?e.mode:!1===e.isNew||e.loadBalancer?"edit":"create"}}const ja=Object.assign(qa,{show:e=>y.show(qa,e,{dialogClassName:"modal-lg"}),supportsPipelineConfig:!0});function Va(e){if(e&&"object"==typeof e)return e;return Ka(e)||{}}function Ka(e){if(!e)return;if("object"==typeof e){const t=e,a=String(t.selfLink||""),n=String(t.name||t.id||a.split("/").filter(Boolean).pop()||"");return n?{...t,name:n}:void 0}const t=String(e),a=t.split("/").filter(Boolean).pop()||t;return t.includes("/")?{name:a,selfLink:t}:{name:a}}function Wa(e){const t=String(e||"NONE").toUpperCase();return Ua.includes(t)?t:"NONE"}function Xa(e){return e?{checkIntervalSec:Za(e.checkIntervalSec),healthyThreshold:Za(e.healthyThreshold),port:Za(e.port),requestPath:e.requestPath,timeoutSec:Za(e.timeoutSec),unhealthyThreshold:Za(e.unhealthyThreshold)}:null}function Za(e){return null==e||""===e?void 0:Number(e)}const Ya=["NONE","CLIENT_IP","CLIENT_IP_PROTO","CLIENT_IP_PORT_PROTO"],Ja=["TCP","UDP"],Qa=["PREMIUM","STANDARD"];function en(e){return{healthCheckType:"TCP",name:e,port:80}}function tn(e,t){const a=e.listeners[0];return{accounts:rt(t.accounts,e.credentials?[{name:e.credentials}]:[]),addresses:rt(t.addresses.filter(t=>(t=>!t.account&&!t.credentials||(t.account||t.credentials)===e.credentials)(t)&&(!t.region||t.region===e.region)).filter(e=>"EXTERNAL"===e.addressType),(n=null==a?void 0:a.address,(null==n?void 0:n.name)||(null==n?void 0:n.address)?[n]:[])),regions:rt(t.regions,e.region?[{name:e.region}]:[])};var n}function an(e){var t,a,n,r,i,l,o;const s=[],c=e.backendServices[0],d=(null==(t=e.ports)?void 0:t.length)?e.ports:sn(null==(a=e.listeners[0])?void 0:a.portRange);e.name.trim()||s.push("Name is required."),e.credentials||s.push("Account is required."),e.region||s.push("Region is required."),"TCP"!==(null==(n=e.listeners[0])?void 0:n.protocol)&&"UDP"!==(null==(r=e.listeners[0])?void 0:r.protocol)&&s.push("Protocol must be TCP or UDP."),d.length?(d.length>5&&s.push("REGIONAL_EXTERNAL_NETWORK load balancers accept between one and five ports."),d.some(e=>!cn(e))&&s.push("Ports must be between 1 and 65535.")):s.push("Ports must be between 1 and 65535."),(null==(i=null==c?void 0:c.name)?void 0:i.trim())||s.push("Backend service name is required."),function(e){const t=null==e?void 0:e.healthCheck;if(!t)return!1;if("string"==typeof t)return Boolean(t);if("object"==typeof t){const e=t;return Boolean(e.healthCheckType||e.port||e.name)}return!1}(c)||s.push("Each backend service requires a health check."),function(e,t){const a=null==e?void 0:e.healthCheck,n="string"==typeof a?a:null!==a&&"object"==typeof a?a.name:null==t?void 0:t.name;return String(n||"").trim()}(c,e.healthChecks[0])||s.push("Health check name is required.");const u=(null==c?void 0:c.healthCheck)&&"object"==typeof c.healthCheck?c.healthCheck:e.healthChecks[0];cn(null==u?void 0:u.port)||s.push("Health check port must be between 1 and 65535.");const m=null==(l=e.original)?void 0:l.listeners[0];"edit"!==e.mode||!m||(null==(o=e.listeners[0])?void 0:o.protocol)===m.protocol&&d.join(",")===sn(m.portRange).join(",")||s.push("Protocol and ports cannot be changed while editing a REGIONAL_EXTERNAL_NETWORK load balancer.");const p=String((null==c?void 0:c.sessionAffinity)||"NONE").toUpperCase();return Ya.includes(p)||s.push("Session affinity must be NONE, CLIENT_IP, CLIENT_IP_PROTO, or CLIENT_IP_PORT_PROTO."),s}function nn({command:e,data:t,onChange:a}){var n,r,i;const l=tn(e,t),o=e.listeners[0]||{name:e.name,portRange:"",protocol:"TCP"},s=e.backendServices[0]||{name:e.name,sessionAffinity:"NONE"},c=("object"==typeof s.healthCheck?s.healthCheck:void 0)||e.healthChecks[0]||en(e.name),d="edit"===e.mode,u=((null==(n=e.ports)?void 0:n.length)?e.ports:sn(o.portRange)).join(","),m=t=>a({...e,...t}),p=e=>m({...e,listeners:[{...o,address:void 0}]}),h=e=>{const t={...c,...e};m({backendServices:[{...s,healthCheck:t}],healthChecks:[t]})};/* @__PURE__ */
|
|
40
|
+
return Be.createElement("div",{className:"form-horizontal gce-regional-external-network-load-balancer-editor"},rn("Name","name",e.name,t=>m({name:t,listeners:[{...o,name:o.name===e.name?t:o.name}],backendServices:[{...s,name:s.name===e.name?t:s.name}]}),d),ln("Account","credentials",e.credentials,l.accounts,e=>p({credentials:e}),d),ln("Region","region",e.region,l.regions,e=>p({region:e}),d),ln("IP address","address",String((null==(r=o.address)?void 0:r.address)||(null==(i=o.address)?void 0:i.name)||""),l.addresses,a=>{const n=t.addresses.find(e=>e.address===a||e.name===a),r=a?{...n||{},address:(null==n?void 0:n.address)||a,name:(null==n?void 0:n.address)||(null==n?void 0:n.name)||a}:void 0;m({listeners:[{...o,address:r}],networkTier:(null==n?void 0:n.networkTier)||(a?"PREMIUM":e.networkTier)})},d,e=>e.address||e.name),ln("Network tier","networkTier",e.networkTier||"PREMIUM",Qa.map(e=>({name:e})),e=>m({networkTier:e}),d||Boolean(o.address),({name:e})=>e,!1),ln("Protocol","protocol",o.protocol,Ja.map(e=>({name:e})),e=>{return t={protocol:e},m({listeners:[{...o,...t}]});var t},d,({name:e})=>e,!1),rn("Ports","ports",u,e=>{const t=e.split(",");m({ports:t,listeners:[{...o,portRange:t.join(",")}]})},d),ln("Session affinity","sessionAffinity",String(s.sessionAffinity||"NONE"),Ya.map(e=>({name:e})),e=>{return t={sessionAffinity:e},m({backendServices:[{...s,...t}]});var t},!1,({name:e})=>e,!1),/* @__PURE__ */Be.createElement("h4",null,"Health Check"),/* @__PURE__ */Be.createElement("div",{className:"form-group","data-field":"healthCheck"},rn("Name","healthCheckName",c.name||"",e=>h({name:e})),function(e,t,a,n){/* @__PURE__ */
|
|
41
|
+
return Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:on(t)},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",id:on(t),inputMode:"numeric",onChange:e=>n(""===e.target.value?void 0:/^\d+$/.test(e.target.value)?Number(e.target.value):e.target.value),type:"text",value:null==a?"":String(a)})))}("Port","healthCheckPort",c.port,e=>h({port:e}))))}function rn(e,t,a,n,r=!1){/* @__PURE__ */
|
|
42
|
+
return Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:on(t)},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",disabled:r,id:on(t),onChange:e=>n(e.target.value),value:a||""})))}function ln(e,t,a,n,r,i=!1,l=({name:e})=>e,o=!0){/* @__PURE__ */
|
|
43
|
+
return Be.createElement("div",{className:"form-group","data-field":t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:on(t)},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm",disabled:i,id:on(t),onChange:e=>r(e.target.value),value:a||""},o&&/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),n.map(e=>{const t=l(e);/* @__PURE__ */
|
|
44
|
+
return Be.createElement("option",{key:t,value:t},t)}))))}function on(e){return`gce-regional-external-network-${e}`}function sn(e){return String(e||"").split(",")}function cn(e){const t=String(null!=e?e:"");if(!/^\d+$/.test(t))return!1;const a=Number(t);return Number.isInteger(a)&&a>=1&&a<=65535}const dn={accounts:[],addresses:[],backendServices:[],certificates:[],healthChecks:[],networks:[],regions:[],subnets:[]};function un(e,{application:t,executeTask:a=A.executeTask}){const n=function(e){var t,a;return mt({...e,listeners:[{...e.listeners[0]||{name:e.name,portRange:"",protocol:"TCP"},portRange:((null==(t=e.ports)?void 0:t.length)?e.ports:hn(null==(a=e.listeners[0])?void 0:a.portRange)).join(",")}]})}(e);return"pipeline"===e.mode?n:Promise.resolve(a({application:t,description:`${"edit"===e.mode?"Update":"Create"} Load Balancer: ${e.name}`,job:[n]}))}class mn extends Be.Component{constructor(e){super(e),this.updateCommand=e=>{var t;const a=e.credentials!==this.state.command.credentials;this.setState({command:e}),a&&(null==(t=this.dataController)||t.load(e.credentials))},this.submit=()=>{var e,t;an(this.state.command).length||("pipeline"!==this.state.command.mode?this.state.taskMonitor.submit(()=>un(this.state.command,{application:this.application(),executeTask:this.props.executeTask})):null==(t=(e=this.props).closeModal)||t.call(e,un(this.state.command,{application:this.application(),executeTask:this.props.executeTask})))};const t=this.application(e),a=this.mode(e),r=function(e={},t,a="",n={}){var r,i,l,o;const s=e||{},c=s.backendService||(null==(r=s.backendServices)?void 0:r[0]),d="edit"!==t,u=ut({...n,...s,backendServices:c?[{...c}]:s.backendServices,credentials:s.credentials||s.account||n.credentials,ipProtocol:s.ipProtocol||(d?"TCP":void 0),loadBalancerType:"REGIONAL_EXTERNAL_NETWORK",name:s.name||s.loadBalancerName||a,networkTier:s.networkTier||(d?"PREMIUM":void 0),ports:null!=(l=null!=(i=s.ports)?i:s.portRange)?l:d?["80"]:void 0},t),m=u.listeners[0],p=hn(null==m?void 0:m.portRange);let h=u.backendServices,g=u.healthChecks;if(d)if(c&&!h.length)h=[{name:String(c.name||""),sessionAffinity:c.sessionAffinity||"NONE",...c.healthCheck?{healthCheck:c.healthCheck}:{}}];else if(!h.length){const e=en(u.name);h=[{healthCheck:e,name:u.name,sessionAffinity:"NONE"}],g=[e]}const v=h[0],f="object"==typeof(null==v?void 0:v.healthCheck)?v.healthCheck:void 0,b=(null==f?void 0:f.name)?g.find(({name:e})=>e===f.name):void 0,y=(f&&Object.keys(f).some(e=>"name"!==e&&"selfLink"!==e)?f:b||f||g[0])||void 0;if(v&&y){const e={...y,name:(null==(o=y.name)?void 0:o.trim())||u.name};h=[{...v,healthCheck:e}],g=[e]}return{...u,backendServices:h,healthChecks:g,loadBalancerType:"REGIONAL_EXTERNAL_NETWORK",ports:p}}(e.loadBalancer,a,null==t?void 0:t.name,{credentials:e.credentials||Ha.defaults.account,region:Ha.defaults.region});this.state={command:r,data:e.data||dn,status:e.data?"ready":"idle",taskMonitor:new E({application:t,title:("edit"===a?"Updating":"Creating")+" your load balancer",onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var a,r,i;n.clearCache("healthChecks"),null==(r=null==(a=null==t?void 0:t.loadBalancers)?void 0:a.refresh)||r.call(a),null==(i=e.closeModal)||i.call(e)}})}}componentDidMount(){this.props.data||(this.dataController=new nt(this.props.dataReaders),this.unsubscribe=this.dataController.subscribe(e=>this.setState(e)),this.dataController.load(this.state.command.credentials))}componentWillUnmount(){var e,t;null==(e=this.unsubscribe)||e.call(this),null==(t=this.dataController)||t.dispose()}render(){const{command:e,data:t,status:a,taskMonitor:n}=this.state,r=an(e),i="create"===e.mode?"Create Regional External Network Load Balancer":"pipeline"===e.mode?"Configure Regional External Network Load Balancer":`Edit ${e.name}`;/* @__PURE__ */
|
|
45
|
+
return Be.createElement("div",{className:"modal-content"},/* @__PURE__ */Be.createElement(k,{monitor:n}),/* @__PURE__ */Be.createElement(C,{dismiss:this.props.dismissModal}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h3",null,i)),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},"loading"===a&&/* @__PURE__ */Be.createElement("div",{className:"horizontal center middle"},"Loading..."),"error"===a&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger"},"Unable to load GCE resources."),/* @__PURE__ */Be.createElement(nn,{command:e,data:t,onChange:this.updateCommand}),!!r.length&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger gce-regional-external-network-validation-errors"},r.map(e=>/* @__PURE__ */Be.createElement("div",{key:e},e)))),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-default",disabled:n.submitting,onClick:this.props.dismissModal,type:"button"},"Cancel"),/* @__PURE__ */Be.createElement(T,{isDisabled:!!r.length||"loading"===a||n.submitting,isFormSubmit:!1,label:"pipeline"===e.mode?"Done":"edit"===e.mode?"Update":"Create",onClick:this.submit,submitting:n.submitting})))}application(e=this.props){return e.application||e.app}mode(e=this.props){return e.forPipelineConfig?"pipeline":e.mode?e.mode:!1===e.isNew||e.loadBalancer?"edit":"create"}}const pn=Object.assign(mn,{show:e=>y.show(mn,e,{dialogClassName:"modal-lg"}),supportsPipelineConfig:!0});function hn(e){return String(e||"").split(",")}const gn=[{type:"NETWORK",label:"Network",description:"Regional pass-through network load balancer."},{type:"INTERNAL",label:"Internal",description:"Regional internal pass-through load balancer."},{type:"TCP",label:"TCP",description:"Global external TCP proxy load balancer."},{type:"SSL",label:"SSL",description:"Global external SSL proxy load balancer."},{type:"HTTP",label:"HTTP(S)",description:"Global external HTTP(S) load balancer."},{type:"INTERNAL_MANAGED",label:"Internal HTTP(S)",description:"Regional internal managed HTTP(S) load balancer."},{type:"EXTERNAL_MANAGED",label:"External managed HTTP(S)",description:"Regional external managed HTTP(S) load balancer."},{type:"REGIONAL_EXTERNAL_NETWORK",label:"Regional external network",description:"Regional external pass-through network load balancer."}];function vn(e){return"NETWORK"===e?ja:"HTTP"===e||"INTERNAL_MANAGED"===e||"EXTERNAL_MANAGED"===e?Ia:"REGIONAL_EXTERNAL_NETWORK"===e?pn:ea}const fn=class e extends Be.Component{constructor(){super(...arguments),this.state={selectedChoice:En(this.props)?null:gn[0]},this.choiceSelected=e=>{En(this.props)||this.setState({selectedChoice:e})},this.choose=()=>{var e,t;const{selectedChoice:a}=this.state;if(!a||En(this.props))return;const{type:n}=a,r=this.props.forPipelineConfig?"pipeline":"create",i=vn(n).show(kn(this.props,n,r));null==(t=(e=this.props).closeModal)||t.call(e,i)}}static show(t){if(!1===t.isNew&&t.loadBalancer){const e=yn(t.loadBalancer.loadBalancerType);if(e){const a=t.forPipelineConfig?"pipeline":"edit";return vn(e).show(kn(t,e,a))}}return y.show(e,t,{dialogClassName:"create-pipeline-modal-overflow-visible modal-lg"})}render(){var e;const{selectedChoice:t}=this.state,a=En(this.props),n=null==(e=this.props.loadBalancer)?void 0:e.loadBalancerType,r="string"==typeof n&&n?`"${n}"`:"missing";/* @__PURE__ */
|
|
46
|
+
return Be.createElement("div",{className:"gce-load-balancer-choice-modal"},/* @__PURE__ */Be.createElement(C,{dismiss:this.props.dismissModal}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h4",{className:"modal-title"},"Select Type of Load Balancer")),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},a&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger",role:"alert"},"This load balancer cannot be edited because its persisted load balancer type is ",r," and unsupported. No changes can be submitted."),/* @__PURE__ */Be.createElement("div",{className:"card-choices"},gn.map(e=>/* @__PURE__ */Be.createElement("button",{"aria-pressed":t===e,className:"card gce-load-balancer-choice-card "+(t===e?"active":""),disabled:a,key:e.type,onClick:()=>this.choiceSelected(e),type:"button"},
|
|
47
|
+
/* @__PURE__ */Be.createElement("h3",{className:"load-balancer-label"},e.label),
|
|
48
|
+
/* @__PURE__ */Be.createElement("div",null,e.description))))),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-primary",disabled:a,onClick:this.choose,type:"button"},"Configure Load Balancer ",/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-chevron-right"}))))}};fn.defaultProps={closeModal:P,dismissModal:P},fn.supportsPipelineConfig=!0;let bn=fn;function yn(e){var t;return null==(t=gn.find(t=>t.type===e))?void 0:t.type}function En(e){var t;return!1===e.isNew&&!yn(null==(t=e.loadBalancer)?void 0:t.loadBalancerType)}function kn(e,t,a){const n=e.application||e.app;return{...e,app:n,application:n,forPipelineConfig:"pipeline"===a,isNew:"create"===a,loadBalancer:e.loadBalancer||null,loadBalancerType:t,mode:a}}const Cn=class e{isHttpLoadBalancer(t){const a=t;return("gce"===a.provider||"gce"===a.type)&&e.HTTP_LOAD_BALANCER_TYPES.includes(a.loadBalancerType)}isRegionalHttpLoadBalancer(e){return this.isHttpLoadBalancer(e)&&"HTTP"!==e.loadBalancerType}normalizeLoadBalancerNamesForAccount(e,t,a,n){const r=[],i=(e,a)=>t===e.account&&this.isHttpLoadBalancer(e)&&e.listeners.map(e=>e.name).includes(a);return e.forEach(e=>{const t=a.find(t=>"EXTERNAL_MANAGED"!==t.loadBalancerType&&i(t,e)),l=t?[]:a.filter(t=>"EXTERNAL_MANAGED"===t.loadBalancerType&&(!n||t.region===n)&&i(t,e)),o=t||(1===l.length?l[0]:void 0);o?r.push(o.name):r.push(e)}),Ne(r)}};Cn.REGION="global",Cn.HTTP_LOAD_BALANCER_TYPES=["HTTP","INTERNAL_MANAGED","EXTERNAL_MANAGED"];let Nn=Cn;const Tn=new Nn;function Sn(e,t){const a=/* @__PURE__ */new Set;return e.filter(e=>{const n=t(e);return!a.has(n)&&(a.add(n),!0)})}function An(e,t=!1){var a,n,r;if(!t)return;return"443"===(null==(r=null==(n=null==(a=null==e?void 0:e.listenerDescriptions)?void 0:a[0])?void 0:n.listener)?void 0:r.loadBalancerPort)?"https:":"http:"}function Pn(e){return e.protocol?`${e.protocol}//${e.dnsname}`:e.dnsname}function wn(e,t){return`https://console.developers.google.com/project/${e}/logs?advancedFilter=resource.type=(${function(e){switch(e){case"INTERNAL":case"REGIONAL_EXTERNAL_NETWORK":case"SSL":case"TCP":return["gce_forwarding_rule","gce_backend_service"];case"NETWORK":return["gce_forwarding_rule","gce_target_pool","gce_health_check"];default:return["http_load_balancer","gce_target_http_proxy","gce_url_map","gce_backend_service"]}}(t.loadBalancerType).join(" OR ")})%0A"${function(e){return Tn.isRegionalHttpLoadBalancer(e)&&e.urlMapName||e.name}(t)}"`}async function In({accountService:e=g,app:t,autoClose:a,loadBalancers:n,loadBalancerParams:r,loadBalancerReader:i}){var l;const o=function(e,t){const a=(e||[]).filter(e=>e.account===t.accountId&&(e.region===t.region||"global"===e.region)&&function(e,t){return(e.vpcId||e.vpcid||null)===(t.vpcId||null)}(e,t));return a.find(e=>e.name===t.name)||a.find(e=>Tn.isRegionalHttpLoadBalancer(e)&&e.urlMapName===t.name)}(n||(null==(l=null==t?void 0:t.loadBalancers)?void 0:l.data)||[],r);if(!o)return void a();const s=await async function(e,t,a){const n=e.provider||e.cloudProvider||e.type||t.provider,r=e.region||t.region;if(Tn.isHttpLoadBalancer(e)){const i=await Promise.all((e.listeners||[]).map(e=>a.getLoadBalancerDetails(n,t.accountId,r,e.name||e))),l=[].concat(...i),o=l[0];return o?(o.dns=Sn(l.map(e=>({dnsname:e.dnsname,protocol:An(e,!0)})).filter(e=>e.dnsname),e=>e.dnsname),o.listenerDescriptions=[].concat(...l.map(e=>e.listenerDescriptions||[])),[o]):[]}const i=await a.getLoadBalancerDetails(n,t.accountId,r,e.name);return i[0]&&(i[0].dns={dnsname:i[0].dnsname,protocol:An(i[0],"REGIONAL_EXTERNAL_NETWORK"!==e.loadBalancerType)}),i}(o,r,i),c=s.filter(e=>(e.vpcid||null)===(r.vpcId||null));c.length&&(o.elb=c[0],o.account=r.accountId,Tn.isHttpLoadBalancer(o)?(o.elb.backendServices=function(e){let t=[e.defaultService].filter(Boolean);return(e.hostRules||[]).length&&(e.hostRules||[]).forEach(e=>{var a,n;(null==(a=e.pathMatcher)?void 0:a.defaultService)&&t.push(e.pathMatcher.defaultService),t=t.concat(((null==(n=e.pathMatcher)?void 0:n.pathRules)||[]).map(e=>e.backendService).filter(Boolean))}),Sn(t,e=>e.name||e.selfLink||"")}(o),o.elb.healthChecks=Sn(o.elb.backendServices.map(e=>e.healthCheck).filter(Boolean),e=>e.name||e.selfLink||"")):"REGIONAL_EXTERNAL_NETWORK"===o.loadBalancerType&&o.backendService&&(o.elb.backendServices=[o.backendService],o.elb.healthChecks=o.backendService.healthCheck?[o.backendService.healthCheck]:[]));const d=await e.getAccountDetails(r.accountId);return(null==d?void 0:d.project)&&(o.project=d.project,o.logsLink=wn(d.project,o)),o}function Mn({app:e,autoClose:t,loadBalancerParams:a}){const{loadBalancerReader:n}=w(),r=e.getDataSource("loadBalancers"),{data:i,loaded:l,refresh:o,error:s}=I(r),[c,d]=Le(),[u,m]=Le(!1),[p,h]=Le(null),g=Fe(async()=>{if(l&&!s){m(!0),h(null);try{d(await In({app:e,autoClose:t,loadBalancers:i,loadBalancerParams:a,loadBalancerReader:n}))}catch(r){h((null==r?void 0:r.message)||String(r))}finally{m(!1)}}},[e,t,s,n,i,a,l]);return ze(()=>{g()},[g]),{data:c,error:s||p,loading:!l||u,refetch:async()=>{o()}}}function Rn(e,t,a={}){if(Tn.isHttpLoadBalancer(e))return function(e,t,a={}){var r,i;const l=e.region||"global",o={cloudProvider:e.provider||"gce",credentials:e.account,loadBalancerName:(null==(i=null==(r=e.listeners)?void 0:r[0])?void 0:i.name)||e.name,loadBalancerType:e.loadBalancerType,region:l,regions:[l],type:"deleteLoadBalancer",...a};return n.clearCache("backendServices"),n.clearCache("healthChecks"),A.executeTask({application:t,description:`Delete load balancer: ${e.urlMapName||e.name} in ${e.account}:${"EXTERNAL_MANAGED"===e.loadBalancerType?l:"global"}`,job:[o]})}(e,t,a);const r=e.region||"global";return S.deleteLoadBalancer({accountName:e.account,cloudProvider:"gce",credentials:e.account,deleteHealthChecks:!1,loadBalancerName:e.name,loadBalancerType:e.loadBalancerType||"NETWORK",region:r,regions:[r],vpcId:e.vpcId,...a},t)}function Gn({deleteParams:e,loadBalancer:t}){var a;return Tn.isHttpLoadBalancer(t)||!!t.healthCheck||"REGIONAL_EXTERNAL_NETWORK"===t.loadBalancerType&&!!(null==(a=t.backendService)?void 0:a.healthCheck)?/* @__PURE__ */Be.createElement("label",{className:"checkbox-inline"},/* @__PURE__ */Be.createElement("input",{type:"checkbox",onChange:t=>{e.deleteHealthChecks=t.currentTarget.checked}}),"Delete associated health checks"):null}function Bn({app:e,loadBalancer:t}){if(R.isDisabled("gce"))return null;const a=(t.instances||[]).length>0;/* @__PURE__ */
|
|
49
|
+
return Be.createElement("div",{className:"dropdown",id:"gce-load-balancer-actions-dropdown"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-sm btn-primary dropdown-toggle","data-toggle":"dropdown",type:"button"},"Load Balancer Actions"),/* @__PURE__ */Be.createElement("ul",{className:"dropdown-menu"},/* @__PURE__ */Be.createElement(G,{application:e,resource:t,onClick:()=>{bn.show({app:e,application:e,forPipelineConfig:!1,isNew:!1,loadBalancer:t,mode:"edit"})}},"Edit Load Balancer"),!a&&/* @__PURE__ */Be.createElement(G,{application:e,resource:t,onClick:()=>{const a={deleteHealthChecks:!1};p.confirm({account:t.account,bodyContent:/* @__PURE__ */Be.createElement(Gn,{deleteParams:a,loadBalancer:t}),buttonText:`Delete ${t.name}`,header:`Really delete ${t.name}?`,submitMethod:(n={})=>Rn(t,e,{deleteHealthChecks:a.deleteHealthChecks,...n}),taskMonitorConfig:{application:e,title:`Deleting ${t.name}`}})}},"Delete Load Balancer"),a&&/* @__PURE__ */Be.createElement("li",{className:"disabled",title:"You must detach all instances before deleting this load balancer."},/* @__PURE__ */Be.createElement("a",null,"Delete Load Balancer"))))}function Ln(e){const t=e.listener||e;return`${t.protocol}:${t.loadBalancerPort} → ${t.instanceProtocol}:${t.instancePort}`}function xn(e){var t;const a=e.port||(null==(t=e.portRange)?void 0:t.split("-")[0]);return`${e.protocol||("443"===a||e.certificate?"HTTPS":"HTTP")}:${a}`}const Dn=[function({loadBalancer:e}){var t;/* @__PURE__ */
|
|
50
|
+
return Be.createElement(u,{heading:"Load Balancer Information",defaultExpanded:!0},/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Account"),/* @__PURE__ */Be.createElement("dd",null,/* @__PURE__ */Be.createElement(m,{account:e.account})),/* @__PURE__ */Be.createElement("dt",null,"Region"),/* @__PURE__ */Be.createElement("dd",null,e.region||"global"),/* @__PURE__ */Be.createElement("dt",null,"Type"),/* @__PURE__ */Be.createElement("dd",null,e.loadBalancerType||e.providerType||"-"),e.project&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("dt",null,"Project"),/* @__PURE__ */Be.createElement("dd",null,e.project)),(null==(t=e.elb)?void 0:t.dns)&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("dt",null,"DNS"),/* @__PURE__ */Be.createElement("dd",null,Array.isArray(e.elb.dns)?e.elb.dns.map(Pn).join(", "):Pn(e.elb.dns)))))},function({loadBalancer:e}){if("EXTERNAL_MANAGED"!==e.loadBalancerType&&"REGIONAL_EXTERNAL_NETWORK"!==e.loadBalancerType)/* @__PURE__ */
|
|
51
|
+
return Be.createElement(u,{heading:"Listeners",defaultExpanded:!0},(e.listeners||[]).length?/* @__PURE__ */Be.createElement("ul",null,e.listeners.map((e,t)=>/* @__PURE__ */Be.createElement("li",{key:t},[e.protocol,e.port||e.portRange].filter(Boolean).join(":")))):/* @__PURE__ */Be.createElement("span",null,"No listeners configured"));const t=function(e){var t,a;const n=null==(t=e.elb)?void 0:t.listenerDescriptions;return(null==n?void 0:n.length)?n.map(Ln):Tn.isHttpLoadBalancer(e)&&(null==(a=e.listeners)?void 0:a.length)?e.listeners.map(xn):[]}(e);/* @__PURE__ */
|
|
52
|
+
return Be.createElement(u,{heading:"Listeners",defaultExpanded:!0},t.length?/* @__PURE__ */Be.createElement("dl",null,/* @__PURE__ */Be.createElement("dt",null,"Load Balancer → Instance","EXTERNAL_MANAGED"===e.loadBalancerType&&/* @__PURE__ */Be.createElement(M,{id:"gce.httpLoadBalancer.namedPort"})),t.map((e,t)=>/* @__PURE__ */Be.createElement("dd",{key:t},e))):/* @__PURE__ */Be.createElement("span",null,"No listeners configured"))},function({loadBalancer:e}){var t,a;const n=(null==(t=e.elb)?void 0:t.backendServices)||[],r=(null==(a=e.elb)?void 0:a.healthChecks)||[];return n.length||r.length?/* @__PURE__ */Be.createElement(u,{heading:"Backend Services",defaultExpanded:!0},n.length>0&&/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Services"),/* @__PURE__ */Be.createElement("dd",null,n.map(e=>e.name).join(", "))),r.length>0&&/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Health Checks"),/* @__PURE__ */Be.createElement("dd",null,r.map(e=>e.name).join(", ")))):null},function({loadBalancer:e}){/* @__PURE__ */
|
|
53
|
+
return Be.createElement(u,{heading:"Logs",defaultExpanded:!1},e.logsLink?/* @__PURE__ */Be.createElement("a",{href:e.logsLink,target:"_blank",rel:"noopener noreferrer"},"View Google Cloud logs"):/* @__PURE__ */Be.createElement("span",null,"No log link available"))}];class zn{constructor(){this.gceHttpLoadBalancerUtils=new Nn,this.normalizeLoadBalancerSet=e=>{const[t,a]=Te(e,e=>this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(e)),n=Se(t,e=>"EXTERNAL_MANAGED"===e.loadBalancerType?[e.account,e.region,e.loadBalancerType,e.urlMapName].join(":"):e.urlMapName);return Ae(n,zn.normalizeHttpLoadBalancerGroup).concat(a)}}static normalizeHttpLoadBalancerGroup(e){const t=Pe(e[0]);return t.listeners=e.map(e=>({port:e.portRange?zn.parsePortRange(e.portRange):null,name:e.name,certificate:e.certificate,certificateMap:e.certificateMap,ipAddress:e.ipAddress,networkTier:e.networkTier,subnet:e.subnet})),t.name="EXTERNAL_MANAGED"===t.loadBalancerType?`${t.urlMapName} (${t.account}/${t.region}/${t.loadBalancerType})`:t.urlMapName,delete t.subnet,t}static parsePortRange(e){return e.split("-")[0]}}class Fn{constructor(e){function t(e){const t=e.instances,a=e.serverGroups||[e];e.instanceCounts={up:t.filter(e=>"InService"===e.health[0].state).length,down:t.filter(e=>"OutOfService"===e.health[0].state).length,outOfService:a.reduce((e,t)=>t.instances.filter(e=>"OutOfService"===e.healthState).length+e,0)}}return{normalizeLoadBalancer:function(a){a.serverGroups.forEach(function(e){e.account=a.account,e.detachedInstances?(e.detachedInstances=e.detachedInstances.map(function(e){return{id:e}}),e.instances=e.instances.concat(e.detachedInstances)):e.detachedInstances=[],e.instances.forEach(function(e){!function(e,t){e.health=e.health||{},e.provider=t.type,e.account=t.account,e.region=t.region,e.health.type="LoadBalancer",e.healthState=e.health.state?"InService"===e.health.state?"Up":"Down":"OutOfService",e.health=[e.health],e.loadBalancers=[t.name]}(e,a)}),t(e)});const n=be.filter(a.serverGroups,{isDisabled:!1});return a.provider=a.type,a.instances=be.chain(n).map("instances").flatten().value(),a.detachedInstances=be.chain(n).map("detachedInstances").flatten().value(),be.get(a,"backendService.healthCheck")&&(a.backendService.healthCheck.timeout=a.backendService.healthCheck.timeoutSec,a.backendService.healthCheck.interval=a.backendService.healthCheck.checkIntervalSec),t(a),e.resolve(a)},convertLoadBalancerForEditing:function(e){const t={provider:"gce",region:e.region,credentials:e.account,listeners:[],name:e.name,regionZones:e.availabilityZones};if(e.elb){const a=e.elb;if(t.vpcId=a.vpcid,a.listenerDescriptions&&(t.listeners=a.listenerDescriptions.map(function(e){const t=e.listener;return{protocol:t.protocol,portRange:t.loadBalancerPort,healthCheck:void 0!==a.healthCheck}})),a.healthCheck&&a.healthCheck.target){t.healthTimeout=a.healthCheck.timeout,t.healthInterval=a.healthCheck.interval,t.healthyThreshold=a.healthCheck.healthyThreshold,t.unhealthyThreshold=a.healthCheck.unhealthyThreshold;const n=e.elb.healthCheck.target,r=n.indexOf(":"),i=n.indexOf("/");-1!==r&&-1!==i&&(t.healthCheckProtocol=n.substring(0,r),t.healthCheckPort=n.substring(r+1,i),t.healthCheckPath=n.substring(i),isNaN(t.healthCheckPort)||(t.healthCheckPort=Number(t.healthCheckPort)))}else t.healthCheckProtocol="HTTP",t.healthCheckPort=80,t.healthCheckPath="/",t.healthTimeout=5,t.healthInterval=10,t.healthyThreshold=10,t.unhealthyThreshold=2;t.sessionAffinity=e.sessionAffinity||"None"}return t},constructNewLoadBalancerTemplate:function(){return{provider:"gce",stack:"",detail:"",credentials:Ha.defaults.account,region:Ha.defaults.region,healthCheckProtocol:"HTTP",healthCheckPort:80,healthCheckPath:"/",healthTimeout:5,healthInterval:10,healthyThreshold:10,unhealthyThreshold:2,sessionAffinity:"NONE",regionZones:[],listeners:[{protocol:"TCP",portRange:"8080",healthCheck:!0}]}}}}}const On=new URL("gce.logoChI3w_A5.png",import.meta.url).href,Hn=Be.createElement;function _n(e,t,a){t({...e,...a})}function Un(e){return!!(e.templateFileName||e.extendedAttributes&&Object.keys(e.extendedAttributes).length||e.varFileName||e.baseAmi||e.accountName)}class $n extends Be.Component{constructor(){super(...arguments),t(this,"state",{baseLabelOptions:[],baseOsOptions:[],roscoMode:!1,showAdvancedOptions:Un(this.props.stage)})}componentDidMount(){const{stage:e,updateStage:t}=this.props;e.extendedAttributes=e.extendedAttributes||{},e.region="global",e.cloudProvider=e.cloudProvider||"gce",e.user=e.user||B.getAuthenticatedUser().name,Promise.all([L.getBaseOsOptions("gce"),L.getBaseLabelOptions()]).then(([a,n])=>{const r=(null==a?void 0:a.baseImages)||[],i={};!e.baseOs&&r.length&&(i.baseOs=r[0].id),!e.baseLabel&&(null==n?void 0:n.length)&&(i.baseLabel=n[0]),Object.keys(i).length&&t({...e,...i}),this.setState({baseLabelOptions:n||[],baseOsOptions:r,roscoMode:v.feature.roscoMode||"function"==typeof v.feature.roscoSelector&&v.feature.roscoSelector(e),showAdvancedOptions:Un({...e,...i})})})}renderArtifactSelector(){const{pipeline:e,stage:t,updateStage:a}=this.props,n=x.getExpectedArtifactsAvailableToStage(t,e),r=t.packageArtifactIds||[];return Hn(D,{label:"Package Artifacts"},Hn("select",{className:"form-control input-sm",multiple:!0,value:r,onChange:e=>{const n=Array.from(e.target.selectedOptions).map(e=>e.value);_n(t,a,{packageArtifactIds:n})}},n.map(e=>Hn("option",{key:e.id,value:e.id},e.displayName||e.id))))}renderAdvancedOptions(){const{stage:e,updateStage:t}=this.props;return this.state.showAdvancedOptions?Hn(Be.Fragment,null,Hn(D,{label:"Template File Name"},Hn("input",{className:"form-control input-sm",value:e.templateFileName||"",onChange:a=>_n(e,t,{templateFileName:a.target.value})})),Hn(D,{label:"Account Name"},Hn("input",{className:"form-control input-sm",value:e.accountName||"",onChange:a=>_n(e,t,{accountName:a.target.value})})),Hn(D,{label:"Extended Attributes"},Hn(z,{allowEmpty:!0,model:e.extendedAttributes||{},onChange:a=>_n(e,t,{extendedAttributes:a})})),Hn(D,{label:"Var File Name"},Hn("input",{className:"form-control input-sm",value:e.varFileName||"",onChange:a=>_n(e,t,{varFileName:a.target.value})})),Hn(D,{label:"Base Image"},Hn("input",{className:"form-control input-sm",value:e.baseAmi||"",onChange:a=>_n(e,t,{baseAmi:a.target.value})}))):null}render(){const{stage:e,updateStage:t}=this.props;return e.extendedAttributes=e.extendedAttributes||{},e.region="global",e.cloudProvider=e.cloudProvider||"gce",e.user=e.user||B.getAuthenticatedUser().name,Hn("div",null,Hn(D,{label:"Package"},Hn("input",{className:"form-control input-sm",value:e.package||"",onChange:a=>_n(e,t,{package:a.target.value})})),this.renderArtifactSelector(),Hn("hr"),Hn(D,{label:"Base OS"},Hn("select",{className:"form-control input-sm",value:e.baseOs||"",onChange:a=>_n(e,t,{baseOs:a.target.value})},this.state.baseOsOptions.map(e=>Hn("option",{key:e.id,value:e.id},e.displayName||e.shortDescription||e.id)))),Hn(D,{label:"Base Label"},this.state.baseLabelOptions.map(a=>Hn("label",{className:"radio-inline",key:a},Hn("input",{checked:e.baseLabel===a,type:"radio",onChange:()=>_n(e,t,{baseLabel:a})}),` ${a}`))),Hn("hr"),(this.state.roscoMode||e.rebake)&&Hn(D,{label:"Rebake"},Hn("div",{className:"checkbox",style:{marginBottom:0}},Hn("label",null,Hn("input",{checked:!!e.rebake,type:"checkbox",onChange:a=>_n(e,t,{rebake:a.target.checked})})," Rebake image without regard to the status of any existing bake"))),Hn("div",{className:"form-group"},Hn("div",{className:"col-md-9 col-md-offset-1"},Hn("div",{className:"checkbox"},Hn("label",null,Hn("input",{checked:this.state.showAdvancedOptions,type:"checkbox",onChange:e=>this.setState({showAdvancedOptions:e.target.checked})}),Hn("strong",null," Show Advanced Options"))))),this.renderAdvancedOptions())}}function qn(e){const t=e.context||{},a=((v.feature.roscoMode||"function"==typeof v.feature.roscoSelector&&v.feature.roscoSelector(t))&&v.roscoDetailUrl?v.roscoDetailUrl:v.bakeryDetailUrl)||"",n={context:t};return a.replace(/\{\{\s*([^}]+?)\s*\}\}/g,(e,t)=>function(e,t){const a=t.split(".").reduce((e,t)=>null==e?void 0:e[t],e);return null==a?"":String(a)}(n,t))}function jn(e){var t,a,n,r;const{current:i,execution:l,stage:o}=e,s=o.context||{},c=v.feature.roscoMode||"function"==typeof v.feature.roscoSelector&&v.feature.roscoSelector(s),d=qn(o);return Hn($,{name:e.name,current:i},Hn("div",{className:"row"},Hn("div",{className:"col-md-6"},Hn("dl",{className:"dl-narrow dl-horizontal"},Hn("dt",null,"Image"),Hn("dd",null,s.ami),Hn("dt",null,"Region"),Hn("dd",null,s.region),Hn("dt",null,"Package"),Hn("dd",null,s.package))),Hn("div",{className:"col-md-6"},Hn("dl",{className:"dl-narrow dl-horizontal"},Hn("dt",null,"Base OS"),Hn("dd",null,s.baseOs),Hn("dt",null,"Label"),Hn("dd",null,s.baseLabel),(c||(null==(t=l.trigger)?void 0:t.rebake)||s.rebake)&&Hn("dt",null,"Rebake"),(c||(null==(a=l.trigger)?void 0:a.rebake)||s.rebake)&&Hn("dd",null,String((null==(n=l.trigger)?void 0:n.rebake)||s.rebake||!1)),s.templateFileName&&Hn("dt",null,"Template"),s.templateFileName&&Hn("dd",null,s.templateFileName),s.accountName&&Hn("dt",null,"Account Name"),s.accountName&&Hn("dd",null,s.accountName),s.varFileName&&Hn("dt",null,"Var File"),s.varFileName&&Hn("dd",null,s.varFileName)))),Hn(q,{stage:o,message:o.failureMessage}),s.region&&(null==(r=s.status)?void 0:r.resourceId)&&Hn("div",{className:"row"},Hn("div",{className:"col-md-12"},Hn("div",{className:"alert alert-"+(o.isFailed?"danger":"info")},s.previouslyBaked&&Hn("div",null,"No changes detected; reused existing bake"),d&&Hn("a",{target:"_blank",rel:"noopener noreferrer",href:d},"View Bakery Details"),s.imageName&&Hn("div",null,Hn("strong",null,"Image:"),Hn("div",{className:"break-word"},s.imageName))))))}function Vn(){F.pipeline.registerStage({provides:"bake",cloudProvider:"gce",label:"Bake",description:"Bakes an image",component:$n,executionDetailsSections:[jn,H,_],executionLabelComponent:O,extraLabelLines:e=>e.masterStage.context.allPreviouslyBaked||e.masterStage.context.somePreviouslyBaked?1:0,producesArtifacts:!0,supportsCustomTimeout:!0,validators:[{type:"anyFieldRequired",fields:[{fieldName:"package",fieldLabel:"Package"},{fieldName:"packageArtifactIds",fieldLabel:"Package Artifacts"}]}],restartable:!0,artifactExtractor:x.accumulateArtifacts(["packageArtifactIds"]),artifactRemover:U.removeArtifactFromFields(["packageArtifactIds"])})}jn.title="bakeConfig";const Kn=Be.createElement,Wn=[{label:"Largest",val:"LARGEST",description:"When multiple server groups exist, prefer the server group with the most instances"},{label:"Newest",val:"NEWEST",description:"When multiple server groups exist, prefer the newest"},{label:"Oldest",val:"OLDEST",description:"When multiple server groups exist, prefer the oldest"},{label:"Fail",val:"FAIL",description:"When multiple server groups exist, fail"}],Xn=[{label:"Scale Up",val:"scale_up"},{label:"Scale Down",val:"scale_down"},{label:"Scale to Cluster Size",val:"scale_to_cluster"},{label:"Scale to Exact Size",val:"scale_exact"}],Zn=[{label:"Percentage",val:"pct"},{label:"Incremental",val:"incr"}];function Yn(e,t,a){void 0!==e[t]&&null!==e[t]||(e[t]=a)}function Jn(e,t,a={}){var n,r,i;Yn(e,"cloudProvider","gce"),Yn(e,"cloudProviderType","gce"),Yn(e,"credentials",null==(n=null==t?void 0:t.defaultCredentials)?void 0:n.gce),e.regions=e.regions||[],!e.regions.length&&(null==(r=null==t?void 0:t.defaultRegions)?void 0:r.gce)&&e.regions.push(t.defaultRegions.gce),Object.keys(a).forEach(t=>Yn(e,t,a[t])),e.isNew&&(null==(i=null==t?void 0:t.attributes)?void 0:i.platformHealthOnlyShowOverride)&&t.attributes.platformHealthOnly&&(e.interestingHealthProviderNames=["Google"])}function Qn(e,t){e.updateStage({...t})}function er(e,t){Qn(e,{...e.stage,...t})}function tr({value:e,onChange:t,disabled:a=!1,style:n}){return Kn("input",{className:"form-control input-sm",disabled:a,min:0,style:n,type:"number",value:null!=e?e:"",onChange:e=>t(function(e){return""===e?void 0:Number(e)}(e.target.value))})}function ar({value:e,onChange:t,options:a}){return Kn("select",{className:"form-control input-sm",value:null!=e?e:"",onChange:e=>t(e.target.value)},Kn("option",{value:""},"Select..."),a.map(e=>Kn("option",{key:e.val||e.name,value:e.val||e.name},e.label||e.name)))}function nr({value:e,onChange:t,options:a,style:n}){return Kn("select",{className:"form-control input-sm",style:n,value:null!=e?e:"",onChange:e=>t(e.target.value)},a.map(e=>Kn("option",{key:e.val,value:e.val},e.label)))}function rr({capacity:e={},disabled:t=!1,onChange:a}){const n=(t,n)=>a({...e,[t]:n});return Kn(Be.Fragment,null,Kn("div",{className:"form-group"},Kn("div",{className:"col-md-2 col-md-offset-3"},"Min"),Kn("div",{className:"col-md-2"},"Max"),Kn("div",{className:"col-md-2"},"Desired")),Kn("div",{className:"form-group"},Kn("div",{className:"col-md-2 col-md-offset-3"},Kn(tr,{disabled:t,value:e.min,onChange:e=>n("min",e)})),Kn("div",{className:"col-md-2"},Kn(tr,{disabled:t,value:e.max,onChange:e=>n("max",e)})),Kn("div",{className:"col-md-2"},Kn(tr,{disabled:t,value:e.desired,onChange:e=>n("desired",e)}))))}function ir({application:e,stage:t,updateStage:a}){var n;if(!(null==(n=null==e?void 0:e.attributes)?void 0:n.platformHealthOnlyShowOverride))return null;const r=Array.isArray(t.interestingHealthProviderNames)&&"Google"===t.interestingHealthProviderNames[0];return Kn(D,{label:"Task Completion"},Kn("div",{className:"checkbox"},Kn("label",null,Kn("input",{checked:r,type:"checkbox",onChange:e=>a({...t,interestingHealthProviderNames:e.target.checked?["Google"]:void 0})})," Consider only Google health")))}class lr extends Be.Component{constructor(){super(...arguments),t(this,"state",{accounts:[]})}componentDidMount(){g.listAccounts("gce").then(e=>this.setState({accounts:e}))}renderAccountRegionClusterSelector(e={}){const{application:t,pipeline:a,stage:n}=this.props;return(null==a?void 0:a.strategy)?null:Kn(j,{accounts:this.state.accounts,application:t,clusterField:e.clusterField,component:n,singleRegion:e.singleRegion})}renderTargetSelect(e=V.TARGET_LIST){return Kn(D,{label:"Target"},Kn(K,{model:this.props.stage,options:e,onChange:e=>er(this.props,{target:e})}))}renderDeploymentStrategySelector(){return Kn(W,{command:this.props.stage,fieldColumns:"6",onFieldChange:(e,t)=>er(this.props,{[e]:t}),onStrategyChange:e=>Qn(this.props,e)})}}class or extends lr{render(){const{application:e,stage:t,showHealthOverride:a=!1}=this.props;return Jn(t,e,{target:V.TARGET_LIST[0].val}),Kn("div",null,this.renderAccountRegionClusterSelector(),this.renderTargetSelect(),a&&Kn(ir,{application:e,stage:t,updateStage:e=>Qn(this.props,e)}))}}function sr(e){return Kn(or,{...e,showHealthOverride:!0})}function cr(e){return Kn(or,{...e,showHealthOverride:!0})}class dr extends lr{render(){const{application:e,stage:t}=this.props;Jn(t,e,{target:V.TARGET_LIST[0].val}),Yn(t,"application",null==e?void 0:e.name),Yn(t,"useSourceCapacity",!0),function(e){if(e.targetCluster){const t=X.parseServerGroupName(e.targetCluster);e.stack=t.stack,e.freeFormDetails=t.freeFormDetails}else e.stack="",e.freeFormDetails=""}(t);return Kn("div",null,this.renderAccountRegionClusterSelector({clusterField:"targetCluster",singleRegion:!0}),this.renderTargetSelect(),Kn("div",null,Kn("div",{className:"form-group"},Kn("div",{className:"col-md-3 sm-label-right"},"Capacity"),Kn("div",{className:"col-md-9 radio"},Kn("label",null,Kn("input",{checked:!0===t.useSourceCapacity,type:"radio",onChange:()=>{const e={...t,useSourceCapacity:!0};delete e.capacity,Qn(this.props,e)}})," Copy the capacity from the current server group")),Kn("div",{className:"col-md-9 col-md-offset-3 radio"},Kn("label",null,Kn("input",{checked:!1===t.useSourceCapacity,type:"radio",onChange:()=>er(this.props,{capacity:t.capacity||{},useSourceCapacity:!1})})," Let me specify the capacity"))),Kn(rr,{capacity:t.capacity,disabled:t.useSourceCapacity,onChange:e=>er(this.props,{capacity:e,useSourceCapacity:!1})})),Kn(D,{label:"Traffic"},Kn("div",{className:"checkbox"},Kn("label",null,Kn("input",{checked:!t.disableTraffic,type:"checkbox",onChange:e=>er(this.props,{disableTraffic:!e.target.checked})})," Send client requests to new instances"))),Kn(ir,{application:e,stage:t,updateStage:e=>Qn(this.props,e)}),this.renderDeploymentStrategySelector())}}class ur extends lr{render(){const{application:e,stage:t}=this.props;return Jn(t,e,{selectionStrategy:Wn[0].val,onlyEnabled:!0}),Kn("div",null,this.renderAccountRegionClusterSelector(),Kn(D,{label:"Server Group Selection"},Kn(ar,{value:t.selectionStrategy,options:Wn,onChange:e=>er(this.props,{selectionStrategy:e})})),Kn(D,{label:"Server Group Filters"},Kn("div",{className:"checkbox"},Kn("label",null,Kn("input",{checked:t.onlyEnabled,type:"checkbox",onChange:e=>er(this.props,{onlyEnabled:e.target.checked})})," Only consider enabled Server Groups"))))}}class mr extends lr{render(){const{application:e,stage:t}=this.props;Jn(t,e,{target:V.TARGET_LIST[0].val,action:Xn[0].val,resizeType:Zn[0].val}),t.capacity=t.capacity||{},t.action||"exact"!==t.resizeType||(t.action="scale_exact");const a=e=>{const a={...t,...e};!function(e){"scale_exact"===e.action?(e.resizeType="exact",delete e.scalePct,delete e.scaleNum,e.capacity=e.capacity||{}):(e.capacity={},"pct"===e.resizeType?delete e.scaleNum:(e.resizeType="incr",delete e.scalePct,e.scaleNum=e.scaleNum||0))}(a),Qn(this.props,a)};return Kn("div",null,this.renderAccountRegionClusterSelector(),this.renderTargetSelect(),Kn(D,{label:"Action"},Kn(ar,{value:t.action,options:Xn,onChange:e=>a({action:e})})),"scale_exact"!==t.action&&Kn(Be.Fragment,null,Kn(D,{label:"scale_to_cluster"===t.action?"Additional Capacity":"Type"},Kn(ar,{value:t.resizeType,options:Zn,onChange:e=>a({resizeType:e})})),"pct"===t.resizeType&&Kn(D,{label:"Resize Percentage"},Kn(tr,{value:t.scalePct,onChange:e=>er(this.props,{scalePct:e})})),"incr"===t.resizeType&&Kn(D,{label:"Resize-by Amount"},Kn(tr,{value:t.scaleNum,onChange:e=>er(this.props,{scaleNum:e})}))),"scale_exact"===t.action&&Kn(rr,{capacity:t.capacity,onChange:e=>er(this.props,{capacity:e})}),Kn(ir,{application:e,stage:t,updateStage:e=>Qn(this.props,e)}))}}class pr extends lr{render(){const{application:e,stage:t,activeToggleField:a,activeToggleLabel:n,defaultValue:r=1,fieldName:i,label:l,preferenceField:o="preferLargerOverNewer",preferenceLabel:s="Keep",showHealthOverride:c=!1}=this.props;return Jn(t,e,{[i]:r}),Yn(t,o,"false"),t[o]=t[o].toString(),a&&Yn(t,a,!1),Kn("div",null,this.renderAccountRegionClusterSelector(),Kn(D,{label:l},Kn("div",{className:"form-inline"},`${s} `,Kn(tr,{style:{display:"inline-block",width:"50px"},value:t[i],onChange:e=>er(this.props,{[i]:e})})," ",Kn(nr,{style:{display:"inline-block",width:"100px"},value:t[o],options:[{label:"largest",val:"true"},{label:"newest",val:"false"}],onChange:e=>er(this.props,{[o]:e})}),` ${function(e,t){return 1===Number(t)?e:`${e}s`}("server group",t[i])}.`)),a&&Kn("div",{className:"form-group"},Kn("div",{className:"col-md-offset-3 col-md-6 checkbox"},Kn("label",null,Kn("input",{checked:!!t[a],type:"checkbox",onChange:e=>er(this.props,{[a]:e.target.checked})}),` ${n}`))),c&&Kn(ir,{application:e,stage:t,updateStage:e=>Qn(this.props,e)}))}}function hr(e){return Kn(pr,{...e,fieldName:"remainingEnabledServerGroups",label:"Disable Options",preferenceLabel:"Keep the",showHealthOverride:!0})}function gr(e){return Kn(pr,{...e,activeToggleField:"allowScaleDownActive",activeToggleLabel:"Allow scale down of active server groups",fieldName:"remainingFullSizeServerGroups",label:"Scale Down Options",preferenceLabel:"Keep the"})}function vr(e){return Kn(pr,{...e,activeToggleField:"allowDeleteActive",activeToggleLabel:"Allow deletion of active server groups",fieldName:"shrinkToSize",label:"Shrink Options",preferenceField:"retainLargerOverNewer",preferenceLabel:"Shrink to",showHealthOverride:!0})}function fr(){F.pipeline.registerStage({provides:"cloneServerGroup",cloudProvider:"gce",component:dr,validators:[{type:"requiredField",fieldName:"targetCluster",fieldLabel:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}function br(){F.pipeline.registerStage({provides:"destroyServerGroup",cloudProvider:"gce",component:or,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"targetImpedance",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"}]})}function yr(){F.pipeline.registerStage({provides:"disableServerGroup",cloudProvider:"gce",component:sr,validators:[{type:"targetImpedance",message:"This pipeline will attempt to disable 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"}]})}function Er(){F.pipeline.registerStage({provides:"disableCluster",cloudProvider:"gce",component:hr,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"remainingEnabledServerGroups",fieldLabel:"Keep [X] enabled Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}function kr(){F.pipeline.registerStage({provides:"enableServerGroup",cloudProvider:"gce",component:cr,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}function Cr(){F.pipeline.registerStage({provides:"findImage",cloudProvider:"gce",component:ur,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"selectionStrategy",fieldLabel:"Server Group Selection"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials"}]})}const Nr=Be.createElement;function Tr({stage:e,updateStage:t}){return e.tags=e.tags||{},e.regions=e.regions||[],e.cloudProvider=e.cloudProvider||"gce",Nr("div",{className:"form-horizontal"},Nr(D,{label:"Package"},Nr("input",{className:"form-control input-sm",value:e.packageName||"",onChange:a=>t({...e,packageName:a.target.value})})),Nr(D,{label:"Tags"},Nr(z,{allowEmpty:!0,model:e.tags,onChange:a=>t({...e,tags:a})})))}function Sr({tags:e,separator:t=":"}){const a=Object.entries(e||{});return a.length?Nr(Be.Fragment,null,a.map(([e,n],r)=>Nr("span",{key:e},`${e}${t}${n}${r===a.length-1?"":", "}`))):null}function Ar(e){const{current:t,stage:a}=e,n=a.context||{},r=n.amiDetails||[];return Nr($,{name:e.name,current:t},Nr("div",{className:"row"},Nr("div",{className:"col-md-12"},Nr("dl",{className:"dl-narrow dl-horizontal"},Nr("dt",null,"Package"),Nr("dd",null,n.packageName),Nr("dt",null,"Tags"),Nr("dd",null,Nr(Sr,{tags:n.tags}))))),Nr(q,{stage:a,message:a.failureMessage}),!!r.length&&Nr("div",{className:"row"},Nr("div",{className:"col-md-12"},Nr("div",{className:"well alert alert-info"},Nr("h4",null,"Results"),r.map(e=>Nr("dl",{className:"dl-narrow dl-horizontal",key:`${e.region}:${e.imageName}`},Nr("dt",null,"Region"),Nr("dd",null,e.region),Nr("dt",null,"Image"),Nr("dd",null,e.imageName)))))))}function Pr(){F.pipeline.registerStage({provides:"findImageFromTags",cloudProvider:"gce",component:Tr,executionDetailsSections:[Ar,H],validators:[{type:"requiredField",fieldName:"packageName"},{type:"requiredField",fieldName:"tags"}]})}function wr(){F.pipeline.registerStage({provides:"resizeServerGroup",cloudProvider:"gce",component:mr,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],supportsCustomTimeout:!0,validators:[{type:"targetImpedance",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:"action"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}function Ir(){F.pipeline.registerStage({provides:"scaleDownCluster",cloudProvider:"gce",component:gr,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"remainingFullSizeServerGroups",fieldLabel:"Keep [X] full size Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}],strategy:!0})}function Mr(){F.pipeline.registerStage({provides:"shrinkCluster",cloudProvider:"gce",component:vr,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"shrinkToSize",fieldLabel:"shrink to [X] Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}Ar.title="findImageConfig";const Rr=Be.createElement;function Gr(e,t,a){const n=e.consideredStages||[];return a&&!n.includes(t)?n.concat(t):a?n:n.filter(e=>e!==t)}class Br extends Be.Component{constructor(){super(...arguments),t(this,"state",{accounts:[]})}componentDidMount(){g.listAccounts("gce").then(e=>this.setState({accounts:e}))}render(){const{pipeline:e,stage:t,updateStage:a}=this.props;t.tags=t.tags||{},t.cloudProvider=t.cloudProvider||"gce";const n=e?Z.getAllUpstreamDependencies(e,t).filter(e=>V.IMAGE_PRODUCING_STAGES.includes(e.type)):[];return Rr("div",{className:"form-horizontal"},Rr(D,{label:"Account"},Rr("select",{className:"form-control input-sm",required:!0,value:t.credentials||"",onChange:e=>a({...t,credentials:e.target.value})},Rr("option",{value:""},"Select..."),this.state.accounts.map(e=>Rr("option",{key:e.name,value:e.name},e.name)))),Rr(D,{label:"Tags"},Rr(z,{allowEmpty:!0,model:t.tags,onChange:e=>a({...t,tags:e})})),Rr(D,{label:"Stages (optional)"},Rr("div",{className:"checkbox"},n.map(e=>Rr("label",{key:e.refId,style:{display:"block"}},Rr("input",{checked:(t.consideredStages||[]).includes(e.refId),type:"checkbox",onChange:n=>a({...t,consideredStages:Gr(t,e.refId,n.target.checked)})}),` ${e.name||e.refId}`)))))}}function Lr(e){const{current:t,execution:a,stage:n}=e,r=n.context||{},i=r.targets||[],l=Object.entries(r.tags||{}).filter(([,e])=>null!==e),o=r.consideredStages||[];return Rr($,{name:e.name,current:t},!!i.length&&Rr("div",{className:"row"},Rr("div",{className:"col-md-12"},Rr("dl",{className:"dl-narrow dl-horizontal"},Rr("dt",null,"Account"),Rr("dd",null,r.credentials),Rr("dt",null,"Images"),i.map(e=>Rr("dd",{key:e.imageName},e.imageName))))),Rr("div",{className:"row"},Rr("div",{className:"col-md-12"},Rr("dl",{className:"dl-narrow dl-horizontal"},Rr("dt",null,"Tags"),l.map(([e,t])=>Rr("dd",{key:e},`${e} = ${t}`)),!!o.length&&Rr("dt",null,"Stages"),o.map(e=>Rr("dd",{key:e},function(e,t){var a;const n=null==(a=null==e?void 0:e.stages)?void 0:a.find(e=>e.refId===t);return(null==n?void 0:n.name)||t}(a,e)))))),Rr(q,{stage:n,message:n.failureMessage}))}function xr(){F.pipeline.registerStage({provides:"upsertImageTags",cloudProvider:"gce",component:Br,executionDetailsSections:[Lr,H]})}Lr.title="tagImageConfig";const Dr=["tcp","udp","icmp","esp","ah","sctp"],zr=["tcp","udp","sctp"];function Fr(e){if(Array.isArray(e))return e.map(e=>"object"==typeof e?e.value:e).filter(e=>null!=e&&`${e}`.trim()).map(e=>`${e}`.trim());if("string"==typeof e){return(e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e).split(",").map(e=>e.trim()).filter(Boolean)}return e?[`${e}`]:[]}function Or(e){const t=(e.ipRangeRules||[]).map(e=>{var t,a;const n=null==(t=e.range)?void 0:t.ip;return n?`${n}${(null==(a=e.range)?void 0:a.cidr)||""}`:""}).filter(Boolean);return Array.from(/* @__PURE__ */new Set([...Fr(e.sourceRanges),...t]))}function Hr(e){if("string"==typeof e||"number"==typeof e){const[t,a=t]=`${e}`.split("-");return{startPort:Number(t),endPort:Number(a)}}return{startPort:void 0===(null==e?void 0:e.startPort)?void 0:Number(e.startPort),endPort:void 0===(null==e?void 0:e.endPort)?void 0:Number(e.endPort)}}function _r(e){if((e.ipIngress||[]).length)return e.ipIngress.map(e=>({type:e.type||e.protocol||e.ipProtocol,...Hr(e)}));const t=(e.ipIngressRules||e.inboundRules||e.allowed||e.ipRangeRules||[]).reduce((e,t)=>{const a=t.type||t.protocol||t.ipProtocol||t.IPProtocol,n=t.portRanges||t.ports||[];return n.length?n.forEach(t=>e.push({type:a,...Hr(t)})):a&&e.push({type:a}),e},[]),a=/* @__PURE__ */new Set;return t.filter(e=>{var t,n;const r=`${e.type}:${null!=(t=e.startPort)?t:""}:${null!=(n=e.endPort)?n:""}`;return!a.has(r)&&(a.add(r),!0)})}function Ur(e,t){return e.credentials||e.accountName||e.accountId||e.account||t||""}function $r(e){return String(e||"").trim().toLowerCase()}function qr(e,t){const a=e.securityGroup||{},n=e.mode||"create",r=Ur(a,e.credentials),i={...a,accountId:a.accountId||r,accountName:a.accountName||r,credentials:r,description:a.description||"",ipIngress:_r(a),name:a.name||t||"",network:a.network||a.vpcId||"default",region:"global",sourceRanges:Or(a),sourceTags:Fr(a.sourceTags),targetTags:Fr(a.targetTags)};return"create"!==n||i.ipIngress.length||(i.ipIngress=[{type:"tcp"}]),"clone"===n&&(i.id=void 0,i.name="",delete i.selfLink),i}const jr=class extends Be.Component{constructor(e){super(e),this.mounted=!1,this.onTaskComplete=()=>{var e,t,a,n,r,i;const l=null==(e=this.getApplication())?void 0:e.securityGroups;if("edit"===this.getMode())return null==(t=null==l?void 0:l.refresh)||t.call(l),void(null==(n=(a=this.props).closeModal)||n.call(a));const o=()=>{var e,t;if(this.clearApplicationRefreshSubscription(),!this.mounted)return;const{securityGroup:a}=this.state;null==(t=(e=this.props).closeModal)||t.call(e),this.props.stateService.go(this.props.stateService.includes("**.firewallDetails")?"^.firewallDetails":".firewallDetails",{accountId:Ur(a),name:a.name.trim(),provider:"gce",region:"global",vpcId:(a.network||a.vpcId).trim()})};if(null==l?void 0:l.onNextRefresh)return this.clearApplicationRefreshSubscription(),this.applicationRefreshUnsubscribe=l.onNextRefresh(o),void(null==(r=l.refresh)||r.call(l));const s=null==(i=null==l?void 0:l.refresh)?void 0:i.call(l);(null==s?void 0:s.then)?s.then(o):o()},this.clearApplicationRefreshSubscription=()=>{var e;null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0},this.updateSecurityGroup=e=>{this.setState(({securityGroup:t})=>({securityGroup:{...t,...e}}))},this.updateRule=(e,t)=>{const a=this.state.securityGroup.ipIngress.slice();a[e]={...a[e],...t},this.updateSecurityGroup({ipIngress:a})},this.addRule=()=>{this.updateSecurityGroup({ipIngress:[...this.state.securityGroup.ipIngress,{type:"tcp",startPort:7001,endPort:7001}]})},this.removeRule=e=>{this.updateSecurityGroup({ipIngress:this.state.securityGroup.ipIngress.filter((t,a)=>a!==e)})},this.submit=()=>{const e=this.getApplication(),{securityGroup:t}=this.state,a=Ur(t),n=t.ipIngress.map(e=>{const t={ipProtocol:e.type};return void 0!==e.startPort&&void 0!==e.endPort&&(t.portRanges=[`${e.startPort}-${e.endPort}`]),t}),r={...t,accountId:t.accountId||a,accountName:t.accountName||a,allowed:n,application:e.name,cloudProvider:"gce",credentials:a,name:t.name.trim(),network:t.network.trim(),region:"global",sourceRanges:Array.from(new Set(t.sourceRanges)),sourceTags:Array.from(new Set(t.sourceTags)),targetTags:Array.from(new Set(t.targetTags))},i=this.getMode(),l="edit"===i?"Update":"clone"===i?"Clone":"Create";this.state.taskMonitor.submit(()=>Y.upsertSecurityGroup(r,e,l))};const t=this.getApplication(e),a=e.mode||"create";this.state={securityGroup:qr(e,null==t?void 0:t.name),securityGroupInventoryLoaded:"edit"===a,taskMonitor:new E({application:t,title:`${"edit"===a?"Updating":"Creating"} your ${J.get("firewall")}`,onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:this.onTaskComplete})}}static show(e,t){return y.show(Kr,e,{dialogClassName:"modal-lg"},t)}componentDidMount(){this.mounted=!0,"edit"!==this.getMode()&&this.context.services.securityGroupReader.getAllSecurityGroups().then(e=>{this.mounted&&this.setState({securityGroupInventory:e,securityGroupInventoryLoaded:!0})},()=>{this.mounted&&this.setState({securityGroupValidationError:"Unable to validate firewall name."})})}componentWillUnmount(){this.mounted=!1,this.clearApplicationRefreshSubscription()}getApplication(e=this.props){return e.application||e.app}getMode(){return this.props.mode||"create"}isValid(){const{securityGroup:e,securityGroupInventory:t,securityGroupInventoryLoaded:a}=this.state,n="edit"===this.getMode()||a&&!function(e,t){var a,n;const r=$r(e.name),i=$r(Ur(e)),l=Object.keys(t||{}).find(e=>$r(e)===i);return(l&&(null==(n=null==(a=null==t?void 0:t[l])?void 0:a.gce)?void 0:n.global)||[]).some(e=>$r(e.name)===r)}(e,t);return!!(e.name.trim()&&n&&Ur(e)&&e.network.trim()&&e.ipIngress.length&&(e.sourceRanges.length||e.sourceTags.length)&&e.ipIngress.every(e=>e.type&&(!zr.includes(e.type)||void 0!==e.startPort&&void 0!==e.endPort)))}renderTextField(e,t,a,n=!1){const r=`gce-firewall-${e.toLowerCase().replace(/\s+/g,"-")}`;/* @__PURE__ */
|
|
54
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 control-label",htmlFor:r},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",id:r,onChange:e=>a(e.target.value),readOnly:n,value:t||""})))}renderRules(){/* @__PURE__ */
|
|
55
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-10 col-md-offset-1"},/* @__PURE__ */Be.createElement("table",{className:"table table-condensed packed"},/* @__PURE__ */Be.createElement("thead",null,/* @__PURE__ */Be.createElement("tr",null,/* @__PURE__ */Be.createElement("th",null,"Protocol"),/* @__PURE__ */Be.createElement("th",null,"Start Port"),/* @__PURE__ */Be.createElement("th",null,"End Port"),/* @__PURE__ */Be.createElement("th",null))),/* @__PURE__ */Be.createElement("tbody",null,this.state.securityGroup.ipIngress.map((e,t)=>/* @__PURE__ */Be.createElement("tr",{key:t},/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("select",{"aria-label":`Protocol ${t+1}`,className:"form-control input-sm",onChange:e=>this.updateRule(t,{type:e.target.value}),value:e.type},Dr.map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e.toUpperCase())))),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("input",{"aria-label":`Start port ${t+1}`,className:"form-control input-sm",min:"0",onChange:e=>this.updateRule(t,{startPort:""===e.target.value?void 0:Number(e.target.value)}),type:"number",value:void 0===e.startPort?"":e.startPort})),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("input",{"aria-label":`End port ${t+1}`,className:"form-control input-sm",min:"0",onChange:e=>this.updateRule(t,{endPort:""===e.target.value?void 0:Number(e.target.value)}),type:"number",value:void 0===e.endPort?"":e.endPort})),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("button",{"aria-label":`Remove rule ${t+1}`,className:"btn btn-link",onClick:()=>this.removeRule(t),type:"button"},
|
|
56
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-trash"}))))))),/* @__PURE__ */Be.createElement("button",{className:"btn btn-block add-new",onClick:this.addRule,type:"button"},/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Protocol and Port Range")))}render(){const{securityGroup:e,securityGroupInventoryLoaded:t,securityGroupValidationError:a,taskMonitor:n}=this.state,r=this.getMode(),i="edit"===r,l=`${"edit"===r?"Edit":"clone"===r?"Clone":"Create"} ${J.get("Firewall")}`;/* @__PURE__ */
|
|
57
|
+
return Be.createElement("div",{className:"modal-content"},/* @__PURE__ */Be.createElement(k,{monitor:n}),/* @__PURE__ */Be.createElement(C,{dismiss:this.props.dismissModal}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h3",null,l)),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},/* @__PURE__ */Be.createElement("div",{className:"form-horizontal"},this.renderTextField("Name",e.name,e=>this.updateSecurityGroup({name:e}),i),!i&&!t&&/* @__PURE__ */Be.createElement("div",{className:a?"security-group-validation-error text-danger":"help-block"},a||"Checking firewall name availability..."),this.renderTextField("Description",e.description,e=>this.updateSecurityGroup({description:e})),this.renderTextField("Account",Ur(e),e=>this.updateSecurityGroup({accountId:e,accountName:e,credentials:e}),i),this.renderTextField("Network",e.network,e=>this.updateSecurityGroup({network:e}),i),this.renderTextField("Target tags",e.targetTags.join(", "),e=>this.updateSecurityGroup({targetTags:Fr(e)})),this.renderTextField("Source tags",e.sourceTags.join(", "),e=>this.updateSecurityGroup({sourceTags:Fr(e)})),this.renderTextField("Source CIDRs",e.sourceRanges.join(", "),e=>this.updateSecurityGroup({sourceRanges:Fr(e)})),this.renderRules())),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-default",onClick:this.props.dismissModal,type:"button"},"Cancel"),/* @__PURE__ */Be.createElement(T,{isDisabled:!this.isValid(),isFormSubmit:!1,label:"edit"===r?"Update":"clone"===r?"Clone":"Create",onClick:this.submit,submitting:n.submitting})))}};jr.contextType=Q;let Vr=jr;const Kr=Object.assign(l(Vr),{show:Vr.show});function Wr(e){return Array.isArray(e)?e:"string"==typeof e&&e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).split(",").map(e=>e.trim()).filter(Boolean):e?[e]:[]}function Xr({app:e,resolvedSecurityGroup:t,securityGroup:a}){const n=w(),[r,i]=Le(!1),l=function(e,t){if(!t)return e;const a=e.accountId||e.accountName||e.account||e.credentials||t.accountId;return{...e,accountId:a,accountName:e.accountName||a,name:e.name||t.name,provider:e.provider||t.provider||"gce",region:e.region||t.region||"global",vpcId:e.vpcId||t.vpcId}}(a,t),o="string"==typeof l.id&&l.id.includes("/"),s="You cannot modify shared VPC host project firewall rules.";/* @__PURE__ */
|
|
58
|
+
return Be.createElement("div",{className:"actions"},/* @__PURE__ */Be.createElement("div",{className:"dropdown "+(r?"open":""),id:"gce-security-group-actions-dropdown"},/* @__PURE__ */Be.createElement("button",{"aria-expanded":r,className:"btn btn-sm btn-primary dropdown-toggle",onClick:()=>i(!r),type:"button"},"Firewall Actions ",
|
|
59
|
+
/* @__PURE__ */Be.createElement("span",{className:"caret"})),/* @__PURE__ */Be.createElement("ul",{className:"dropdown-menu",role:"menu"},/* @__PURE__ */Be.createElement("li",{className:o?"disabled":void 0},/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-action":"edit",disabled:o,onClick:()=>{Kr.show({application:e,mode:"edit",securityGroup:l},n)},title:o?s:void 0,type:"button"},"Edit Inbound Rules")),/* @__PURE__ */Be.createElement("li",{className:o?"disabled":void 0},/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-action":"clone",disabled:o,onClick:()=>{Kr.show({application:e,mode:"clone",securityGroup:l},n)},title:o?s:void 0,type:"button"},"Clone Firewall")),/* @__PURE__ */Be.createElement("li",{className:o?"disabled":void 0},/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-action":"delete",disabled:o,onClick:()=>{p.confirm({account:l.accountId,buttonText:`Delete ${l.name}`,header:`Really delete ${l.name}?`,submitMethod:()=>Y.deleteSecurityGroup(l,e,{cloudProvider:"gce",securityGroupName:l.name}),taskMonitorConfig:{application:e,title:`Deleting ${l.name}`}})},title:o?s:void 0,type:"button"},"Delete Firewall")))),o&&/* @__PURE__ */Be.createElement("div",{className:"shared-vpc-warning help-block"},s))}function Zr({app:e,resolvedSecurityGroup:t}){const{securityGroupReader:a}=w(),n=function(e){return[e.accountId,e.provider,e.region,e.vpcId||"",e.name].join(":")}(t),[r,i]=Le();ze(()=>{var r,l;let o=!1;const s=()=>a.getSecurityGroupDetails(e,t.accountId,t.provider,t.region,t.vpcId,t.name).then(e=>{o||i({key:n,value:{...t,...e}})},()=>{o||i({key:n,value:t})});s();const c=null==(l=null==(r=e.securityGroups)?void 0:r.onRefresh)?void 0:l.call(r,s);return()=>{o=!0,null==c||c()}},[e,n,a]);const l=(null==r?void 0:r.key)!==n,o=l?t:r.value,s=Wr(o.targetTags),c=Wr(o.sourceTags),d=Wr(o.sourceRanges).concat((o.ipRangeRules||[]).map(e=>{var t,a;return`${(null==(t=e.range)?void 0:t.ip)||""}${(null==(a=e.range)?void 0:a.cidr)||""}`}));/* @__PURE__ */
|
|
60
|
+
return Be.createElement("div",{className:"details-panel"},/* @__PURE__ */Be.createElement("div",{className:"header"},/* @__PURE__ */Be.createElement("div",{className:"header-text horizontal middle"},/* @__PURE__ */Be.createElement("span",{className:"icon-gce"}),/* @__PURE__ */Be.createElement("h3",null,o.name)),!l&&/* @__PURE__ */Be.createElement(Xr,{app:e,resolvedSecurityGroup:t,securityGroup:o})),/* @__PURE__ */Be.createElement("div",{className:"content"},l&&/* @__PURE__ */Be.createElement("div",{className:"text-center"},"Loading..."),/* @__PURE__ */Be.createElement(u,{heading:`${J.get("Firewall")} Information`,defaultExpanded:!0},/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Account"),/* @__PURE__ */Be.createElement("dd",null,/* @__PURE__ */Be.createElement(m,{account:o.accountId||o.accountName})),/* @__PURE__ */Be.createElement("dt",null,"Region"),/* @__PURE__ */Be.createElement("dd",null,o.region||"global"),/* @__PURE__ */Be.createElement("dt",null,"Network"),/* @__PURE__ */Be.createElement("dd",null,o.vpcId||o.network||"-"),/* @__PURE__ */Be.createElement("dt",null,"Description"),/* @__PURE__ */Be.createElement("dd",null,o.description||"-"))),/* @__PURE__ */Be.createElement(u,{heading:"Targets",defaultExpanded:!0},/* @__PURE__ */Be.createElement("p",null,s.join(", ")||"All traffic")),/* @__PURE__ */Be.createElement(u,{heading:"Sources",defaultExpanded:!0},/* @__PURE__ */Be.createElement("p",null,c.concat(d).join(", ")||"-")),/* @__PURE__ */Be.createElement(u,{heading:"Allowed Ingress",defaultExpanded:!0},(o.inboundRules||o.ipIngressRules||[]).length?/* @__PURE__ */Be.createElement("ul",null,(o.inboundRules||o.ipIngressRules||[]).map((e,t)=>{var a;/* @__PURE__ */
|
|
61
|
+
return Be.createElement("li",{key:t},[e.protocol,null==(a=e.portRanges)?void 0:a.map(e=>e.startPort).join(", ")].filter(Boolean).join(" "))})):/* @__PURE__ */Be.createElement("span",null,"-"))))}class Yr{resolveIndexedSecurityGroup(e,t,a){return e[t.account].global[a]}}class Jr{constructor(e){this.promiseService=e}normalizeSecurityGroup(e){return this.promiseService.resolve(e)}}function Qr(e){const t=e.split("/");if(t.length<2)throw new Error(`Health check url ${e} missing expected segments.`);return{healthCheckName:t[t.length-1],healthCheckKind:t[t.length-2].slice(0,-1)}}function ei(e){const t=function(e){const t=/* @__PURE__ */new Set,a=/* @__PURE__ */new Set;return e.forEach(e=>{t.has(e.name)?a.add(e.name):t.add(e.name)}),a}(e);return e.map(e=>({displayName:t.has(e.name)?`${e.name} (${e.kind})`:e.name,kind:e.kind,name:e.name,selfLink:e.selfLink}))}class ti{vCpuCountForLocationIsValid(e,t,a,n){let r=0;if("E2"===e)r=32;else r=n[a].vCpuMax;return t<=r}numberOfVCpusIsValid(e,t){if(1===t)return!0;switch(e){case"N2":case"N2D":return t%4==0;default:return t%2==0}}generateValidVCpuListForLocation(e,t){const a=t[e].vCpuMax;return[1,...be.range(2,a,2),a]}generateValidInstanceFamilyList(){return["n1","e2","n2","n2d"].map(e=>e.toUpperCase())}minMemoryForVCpuCount(e,t){switch(e){case"E2":case"N2":case"N2D":return Math.ceil(.5*t*4)/4;default:return Math.ceil(.9*t*4)/4}}maxMemoryForVCpuCount(e,t){switch(e){case"E2":return 8*t>128?128:8*t;case"N2":case"N2D":return 8*t;default:return 6.5*t}}generateValidMemoryListForVCpuCount(e,t){const a=this.minMemoryForVCpuCount(e,t),n=this.maxMemoryForVCpuCount(e,t);return[...be.range(a,n,.25),n]}memoryIsValid(e,t,a,n){const r=this.minMemoryForVCpuCount(e,a),i=n?800:this.maxMemoryForVCpuCount(e,a);return be.inRange(t,r,i)||t===i}generateInstanceTypeString(e,t,a,n){const r=n?"-ext":"",i=1024*Number(a);return"n1"===(e=e.toLowerCase())?`custom-${t}-${i}${r}`:`${e}-custom-${t}-${i}${r}`}parseInstanceTypeString(e){const[t,a]=be.chain(e.split("-")).takeRight(2).map(e=>Number(e)).value();let n=e.split("-")[0].toUpperCase();"CUSTOM"===n&&(n="N1");return{instanceFamily:n,vCpuCount:t,memory:a/1024}}customInstanceChoicesAreValid(e,t,a,n,r,i){return be.every([this.numberOfVCpusIsValid(e,t),this.memoryIsValid(e,a,t,i),this.vCpuCountForLocationIsValid(e,t,n,r)])}}const ai=["load-balancer-names","regional-external-load-balancer-names","global-load-balancer-names","backend-service-names","load-balancing-policy","select-zones","customUserData"];class ni{constructor(e,t=new Qe(e),a=new ti,n=new Ke,r=ai){function i(e){const t=n.deriveProjectId(e.launchConfig.instanceTemplate),a=be.get(e,"launchConfig.instanceTemplate.properties.networkInterfaces[0].network");return n.decorateXpnResourceIfNecessary(t,a)}function l(e){const t=n.deriveProjectId(e.launchConfig.instanceTemplate),a=be.get(e,"launchConfig.instanceTemplate.properties.networkInterfaces[0].subnetwork");return n.decorateXpnResourceIfNecessary(t,a)}function o(e){return be.has(e,"launchConfig.instanceTemplate.properties.networkInterfaces[0].accessConfigs")}function s(e){return Array.isArray(e)?e:"string"==typeof e?e.split(",").filter(Boolean):[]}function c(e){return["load-balancer-names","global-load-balancer-names"].reduce((t,a)=>{const n=s(e[a]);return n.length&&(t[a]=n),t},{})}function d(e){return(e.disks||[]).filter(e=>"local-ssd"===e.type)}function u(e){return(e.disks||[]).filter(e=>e.type.startsWith("pd-")||e.type.startsWith("hyperdisk-"))}function m(e,t){if(e.storage.localSSDSupported)d(t).length!==e.storage.count&&(t.viewState.overriddenStorageDescription=d(t).length+"×375");else{const a=u(t);(a.some(t=>t.sizeGb!==e.storage.size)||a.length!==e.storage.count)&&(t.viewState.overriddenStorageDescription=function(e){const t=u(e),a=/* @__PURE__ */new Map;return t.forEach(e=>{a.has(e.sizeGb)?a.set(e.sizeGb,a.get(e.sizeGb)+1):a.set(e.sizeGb,1)}),Array.from(a).sort(([e],[t])=>t-e).map(([e,t])=>t+"×"+e).join(", ")}(t))}}function p(e,t){delete t.autoHealingPolicy;const a=e.autoHealingPolicy;if(!a)return;const n=a.healthCheckUrl?a.healthCheckUrl:a.healthCheck;if(!n)return;const{healthCheckName:r,healthCheckKind:i}=Qr(n);t.autoHealingPolicy={healthCheck:r,healthCheckKind:i,healthCheckUrl:n,initialDelaySec:a.initialDelaySec}}function h(e,t){const a=be.get(e,"launchConfig.instanceTemplate.properties.shieldedInstanceConfig"),n=be.get(e,"launchConfig.instanceTemplate.properties.shieldedVmConfig");["enableSecureBoot","enableVtpm","enableIntegrityMonitoring"].forEach(r=>{t[r]=be.has(a,r)?a[r]:be.has(n,r)?n[r]:be.get(e,r,!1)})}function v(e,t){if(e){let a="",n=[];if(Array.isArray(e)){const i=e.find(e=>"customUserData"===e.key);i&&(a=i.value,n=f(a),t.userData=a),e.forEach(function(e){be.includes(n,e.key)||be.includes(r,e.key)||(t.instanceMetadata[e.key]=e.value)})}else e.customUserData&&(a=e.customUserData,n=f(a),t.userData=a,e=be.omit(e,n)),Object.assign(t.instanceMetadata,be.omit(e,r))}t.labels["spinnaker-moniker-sequence"]&&delete t.labels["spinnaker-moniker-sequence"]}function f(e){const t=[];return e.split(/\n|,/).forEach(function(e){const a=e.split("=")[0];t.push(a)}),t}function b(e,t){e&&e.items&&be.map(e.items,function(e){t.tags.push({value:e})})}function y(e,t){e&&Object.assign(t.resourceManagerTags,e)}function E(e,t){const a=(t=t||{}).account||Ha.defaults.account,n=t.region||Ha.defaults.region,r=t.zone||Ha.defaults.zone,i=!be.has(e,"attributes.providerSettings.gce.associatePublicIpAddress")||e.attributes.providerSettings.gce.associatePublicIpAddress,l={application:e.name,credentials:a,region:n,zone:r,regional:!1,selectZones:!1,distributionPolicy:{zones:[]},network:"default",associatePublicIpAddress:i,canIpForward:!1,strategy:"",capacity:{min:0,max:0,desired:1},backendServiceMetadata:[],minCpuPlatform:"(Automatic)",disks:[{type:"pd-ssd",sizeGb:10},{type:"local-ssd",sizeGb:375}],imageSource:"priorStage",instanceMetadata:{},tags:[],labels:{},resourceManagerTags:{},enableSecureBoot:!1,enableVtpm:!1,enableIntegrityMonitoring:!1,preemptible:!1,automaticRestart:!0,onHostMaintenance:"MIGRATE",serviceAccountEmail:"default",authScopes:["cloud.useraccounts.readonly","devstorage.read_only","logging.write","monitoring.write"],enableTraffic:!0,cloudProvider:"gce",selectedProvider:"gce",availabilityZones:[],viewState:{instanceProfile:"custom",allImageSelection:null,useSimpleCapacity:!0,usePreferredZones:!0,listImplicitSecurityGroups:!1,mode:t.mode||"create",disableStrategySelection:!0,expectedArtifacts:[]}};return e.attributes&&e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(l.interestingHealthProviderNames=["Google"]),function(e,t,a){return g.listAccounts("gce").then(function(e){const n=be.map(e,"name"),r=n[0],i=t&&n.includes(t);a.credentials=i?t:r||"my-account-name"})}(0,a,l).then(()=>l)}return{buildNewServerGroupCommand:E,buildNewServerGroupCommandForPipeline:function(t,a){const n=x.getExpectedArtifactsAvailableToStage(t,a);return e.resolve({viewState:{pipeline:a,expectedArtifacts:n,requiresTemplateSelection:!0,stage:t}})},buildServerGroupCommandFromExisting:function(n,r,d){d=d||"clone";const u=r.moniker,g={application:n.name,autoscalingPolicy:be.cloneDeep(r.autoscalingPolicy),strategy:"",stack:u.stack,freeFormDetails:u.detail,credentials:r.account,loadBalancers:(f=r.asg,["load-balancer-names","global-load-balancer-names"].reduce((e,t)=>(f[t]&&(e=e.concat(s(f[t]))),e),[])),loadBalancerMetadata:c(r.asg),loadBalancingPolicy:be.cloneDeep(r.loadBalancingPolicy),backendServiceMetadata:r.asg["backend-service-names"],securityGroups:r.securityGroups,region:r.region,capacity:{min:r.asg.minSize,max:r.asg.maxSize,desired:r.asg.desiredCapacity},regional:r.regional,network:i(r),subnet:l(r),associatePublicIpAddress:o(r),canIpForward:r.canIpForward,minCpuPlatform:r.launchConfig.minCpuPlatform||"(Automatic)",instanceMetadata:{},tags:[],labels:{},resourceManagerTags:{},availabilityZones:[],enableSecureBoot:!1,enableVtpm:!1,enableIntegrityMonitoring:!1,enableTraffic:!0,cloudProvider:"gce",selectedProvider:"gce",distributionPolicy:{zones:r.distributionPolicy?r.distributionPolicy.zones:[],targetShape:r.distributionPolicy?r.distributionPolicy.targetShape:null},instanceFlexibilityPolicy:void 0===r.instanceFlexibilityPolicy?void 0:be.cloneDeep(r.instanceFlexibilityPolicy),selectZones:r.selectZones,source:{account:r.account,region:r.region,serverGroupName:r.name,asgName:r.name},viewState:{allImageSelection:null,useSimpleCapacity:!r.autoscalingPolicy,usePreferredZones:!1,listImplicitSecurityGroups:!1,mode:d}};var f;if(h(r,g),g.regional||(g.zone=r.zones[0],g.source.zone=r.zones[0]),n.attributes&&n.attributes.platformHealthOnlyShowOverride&&n.attributes.platformHealthOnly&&(g.interestingHealthProviderNames=["Google"]),p(r,g),r.launchConfig){const n=r.launchConfig.instanceType;return Object.assign(g,{instanceType:n}),be.includes(n,"custom-")&&(g.viewState.customInstance=a.parseInstanceTypeString(n),g.viewState.instanceProfile="buildCustom"),g.viewState.imageId=r.launchConfig.imageId,function(e){return t.getCategories("gce").then(function(t){t.forEach(function(t){t.families.forEach(function(a){a.instanceTypes.forEach(function(a){a.name===e.instanceType&&(e.viewState.instanceProfile=t.type)})})})})}(g).then(function(){return function(e,t){e?(t.preemptible=e.preemptible,t.automaticRestart=e.automaticRestart,t.onHostMaintenance=e.onHostMaintenance):(t.preemptible=!1,t.automaticRestart=!0,t.onHostMaintenance="MIGRATE")}(r.launchConfig.instanceTemplate.properties.scheduling,g),v(r.launchConfig.instanceTemplate.properties.metadata.items,g),b(r.launchConfig.instanceTemplate.properties.tags,g),function(e,t){e&&(Object.assign(t.labels,e),t.labels["spinnaker-region"]&&delete t.labels["spinnaker-region"],t.labels["spinnaker-server-group"]&&delete t.labels["spinnaker-server-group"],t.labels["spinnaker-moniker-sequence"]&&delete t.labels["spinnaker-moniker-sequence"])}(r.instanceTemplateLabels,g),function(e,t){e&&e.length?(t.serviceAccountEmail=e[0].email,t.authScopes=be.map(e[0].scopes,e=>e.replace("https://www.googleapis.com/auth/",""))):t.authScopes=[]}(r.launchConfig.instanceTemplate.properties.serviceAccounts,g),y(r.launchConfig.instanceTemplate.properties.resourceManagerTags,g),function(a,n){const r=(a=a.map((e,t)=>0===t?{type:e.initializeParams.diskType,sizeGb:e.initializeParams.diskSizeGb}:{type:e.initializeParams.diskType,sizeGb:e.initializeParams.diskSizeGb,sourceImage:be.last(be.get(e,"initializeParams.sourceImage","").split("/"))||null})).filter(e=>"local-ssd"===e.type),i=a.filter(e=>e.type.startsWith("pd-")||e.type.startsWith("hyperdisk-"));return i.length?(n.disks=i.concat(r),t.getInstanceTypeDetails(n.selectedProvider,be.includes(n.instanceType,"custom-")?"buildCustom":n.instanceType).then(e=>{n.viewState.instanceTypeDetails=e,m(e,n)})):(n.disks=[{type:"pd-ssd",sizeGb:10}].concat(r),e.resolve(null))}(r.launchConfig.instanceTemplate.properties.disks,g).then(function(){return g})})}return e.resolve(g)},buildServerGroupCommandFromPipeline:function(n,r,i,l){const o=be.cloneDeep(r),g=Object.keys(o.availabilityZones)[0],f=o.zone,k=t.getCategoryForInstanceType("gce",o.instanceType),C={account:o.account,region:g,zone:f};return e.all([E(n,C),k]).then(function([n,r]){const f=x.getExpectedArtifactsAvailableToStage(i,l),E={pipeline:l,stage:i,instanceProfile:r,disableImageSelection:!0,expectedArtifacts:f,showImageSourceSelector:!0,useSimpleCapacity:!o.autoscalingPolicy,mode:"editPipeline",submitButtonLabel:"Done",customInstance:"buildCustom"===r?a.parseInstanceTypeString(o.instanceType):null,templatingEnabled:!0},k={region:g,credentials:o.account,enableTraffic:!o.disableTraffic,viewState:E};o.strategy=o.strategy||"";const C=Object.assign({},n,o,k);return delete C.partnerMetadata,function(a){const n=u(a),r=d(a);return n.length?(a.disks=n.concat(r),t.getInstanceTypeDetails(a.selectedProvider,be.includes(a.instanceType,"custom-")?"buildCustom":a.instanceType).then(e=>{a.viewState.instanceTypeDetails=e,m(e,a)})):(a.disks=[{type:"pd-ssd",sizeGb:10}].concat(r),e.resolve(null))}(C).then(function(){const e=C.instanceMetadata;var t;C.loadBalancers=(t=e,["load-balancer-names","global-load-balancer-names"].reduce((e,a)=>(t[a]&&(e=e.concat(s(t[a]))),e),[])),C.loadBalancerMetadata=c(e),C.backendServiceMetadata=e["backend-service-names"]?e["backend-service-names"].split(","):[],C.minCpuPlatform=o.minCpuPlatform||"(Automatic)",C.instanceMetadata={},v(e,C),p(o,C),h(o,C);const a={items:C.tags};C.tags=[],b(a,C);return y(C.resourceManagerTags,C),C})})}}}}class ri{static getAvailableAccelerators({backingData:e,credentials:t,distributionPolicy:a,regional:n,selectZones:r,zone:i}){const l=this.getZoneToAcceleratorTypesMap(e,t);if(i&&!n)return this.getAcceleratorTypesForZone(l,i);if(n&&r){const e=we(a,"zones",[]).map(e=>this.getAcceleratorTypesForZone(l,e));return Ie.apply(null,[...e,"name"])}return[]}static getZoneToAcceleratorTypesMap(e,t){return we(e,["credentialsKeyedByAccount",t,"zoneToAcceleratorTypesMap"],{})}static getAcceleratorTypesForZone(e,t){return we(e,[t,"acceleratorTypes","acceleratorTypes"],[]).map(e=>({...e,availableCardCounts:this.getAvailableCardCounts(e)}))}static getAvailableCardCounts(e){const t=Me(e.maximumCardsPerInstance)?e.maximumCardsPerInstance:4,a=[];for(let n=1;n<=t;n*=2)a.push(n);return a}}class ii{constructor(){const e=["command","securityGroups","securityGroupObjectsKeyedByTag","securityGroupObjectsKeyedById"];this.reset=()=>{e.forEach(e=>delete this[e])},this.register=e=>{this.command=e;const{credentials:n,backingData:r}=e;if(void 0!==r.securityGroups[n]){this.securityGroupObjects=be.cloneDeep(r.securityGroups[n].gce.global),t(this.securityGroupObjects,e.tags);const{byTag:i,bySecurityGroupId:l}=a(this.securityGroupObjects);this.securityGroupObjectsKeyedByTag=i,this.securityGroupObjectsKeyedById=l}e.securityGroups||(e.securityGroups=this.inferSecurityGroupIdsFromTags(e.tags))},this.inferSecurityGroupIdsFromTags=(e=[])=>be.chain(e).map(e=>this.securityGroupObjectsKeyedByTag[e.value]).flatten().compact().filter(e=>e.network===this.command.network).map("id").uniq().value();const t=(e,t=[])=>{e.forEach(e=>{const a=e.targetTags;e.tagsArray=a?a.substring(1,a.length-1).split(", "):[],e.selectedTags=t?be.intersection(t.map(e=>e.value),e.tagsArray):[]})},a=e=>e.reduce((e,t)=>{const{bySecurityGroupId:a}=e;return a[t.id]=t,t.tagsArray.reduce((e,a)=>{const{byTag:n}=e;return n[a]||(n[a]=[]),n[a].push(t),e},e)},{byTag:{},bySecurityGroupId:{}});this.inferSelectedSecurityGroupFromTag=be.debounce(e=>{let t=this.securityGroupObjectsKeyedByTag[e];const a=this.command;t&&(t=be.filter(t,e=>e.network===this.command.network)),t&&(r(t,e),a.securityGroups=be.map(i(n(a.securityGroups),t),"id")),this.updateSelectedTags()},100),this.updateSelectedTags=()=>{const e=this.command,t=e.tags.map(e=>e.value);n(e.securityGroups).forEach(a=>{a.selectedTags&&(a.selectedTags=be.intersection(a.selectedTags,t)),be.get(a,"selectedTags.length")||(e.securityGroups=be.without(e.securityGroups,a.id))})},this.addTag=e=>{const t=this.command,a=t.tags;let l=this.securityGroupObjectsKeyedByTag[e];l&&(l=be.filter(l,e=>e.network===this.command.network)),be.includes(a.map(e=>e.value),e)||a.push({value:e}),l&&(r(l,e),t.securityGroups=be.map(i(n(t.securityGroups),l),"id"))};const n=e=>e.map(e=>this.securityGroupObjectsKeyedById[e]),r=(e,t)=>{e.forEach(e=>{e.selectedTags=be.chain(e.selectedTags||[]).concat([t]).uniq().value()})},i=(e,t)=>be.chain(e).concat(t).uniq().value();return this.removeTag=e=>{const t=this.command,a=t.securityGroups||[];n(a).forEach(t=>{t.selectedTags&&(t.selectedTags=t.selectedTags.filter(t=>t!==e))}),t.tags=t.tags.filter(t=>t.value!==e)},this.removeSecurityGroup=e=>{const t=this.securityGroupObjectsKeyedById[e],a=t.selectedTags,r=this.command;n(r.securityGroups).forEach(e=>{e.selectedTags&&(e.selectedTags=be.difference(e.selectedTags,a))}),t.selectedTags=[],r.tags=be.chain(r.tags).map(e=>e.value).difference(a).map(e=>({value:e})).value()},this.getToolTipContent=e=>{const t=be.get(this,["securityGroupObjectsKeyedByTag",e]),a=t?t.filter(e=>e.network===this.command.network).map(e=>e.id):[];return`This tag associates this server group with ${a.length>1?J.get("firewalls"):J.get("firewall")}\n <em>${a.join(", ")}</em>.`},this.showToolTip=e=>!!be.get(this,["securityGroupObjectsKeyedByTag",e]),this}}const li=["ANY","EVEN","BALANCED","ANY_SINGLE_ZONE"];class oi{constructor(e={all:e=>Promise.all(e),resolve:e=>Promise.resolve(e)},t){const a=t.securityGroupReader,r=t.loadBalancerReader,i=new Qe(e),l=new ti,o=new Nn,s=new $e,c=new ii,d=new zn,u=["pd-standard","pd-ssd","hyperdisk-balanced"],m=["cloud-platform","userinfo.email","compute.readonly","compute","cloud.useraccounts.readonly","cloud.useraccounts","devstorage.read_only","devstorage.write_only","devstorage.full_control","taskqueue","bigquery","sqlservice.admin","datastore","logging.write","logging.read","logging.admin","monitoring.write","monitoring.read","monitoring","bigtable.data.readonly","bigtable.data","bigtable.admin","bigtable.admin.table"];function p(e){e.backingData.credentialsKeyedByAccount[e.credentials],e.distributionPolicy.targetShape||(e.distributionPolicy.targetShape="EVEN")}function h(e){const t={dirty:{}};if(e.region){const a=[t.dirty];a.push(y(e).dirty),a.push(function(e){const t=e,a={dirty:{}},n=t.regional?t.distributionPolicy.zones:[t.zone],{credentialsKeyedByAccount:r}=t.backingData,{locationToInstanceTypesMap:l}=r[t.credentials];if(n.every(e=>!e))return a;let o=i.getAvailableTypesForLocations(l,n);o=function(e){const t=be.map(e,e=>{const t=e.split("-");return{class:t[0],group:t[1],index:Number(t[2])||0}}),a=be.sortBy(t,["class","group","index"]);return be.map(a,e=>e.class+"-"+e.group+(e.index?"-"+e.index:""))}(o);const s=t.instanceType;be.every([s,!be.includes(s,"custom-"),!be.includes(o,s)])&&(a.dirty.instanceType=t.instanceType,t.instanceType=null);return t.backingData.filtered.instanceTypes=o,a}(e).dirty),Object.assign(...a)}else e.backingData.filtered.instanceTypes=[];return t}function v(e){const t={dirty:{}},a=e.backingData.filtered,n=e.backingData.credentialsKeyedByAccount[e.credentials].locationToCpuPlatformsMap;a.cpuPlatforms=["(Automatic)"];const r=e.regional?e.region:e.zone;return be.has(n,r)&&(a.cpuPlatforms=be.concat(a.cpuPlatforms,n[r])),be.includes(a.cpuPlatforms,e.minCpuPlatform)||(delete e.minCpuPlatform,t.dirty.minCpuPlatform=!0),t}function y(e){const t=e,a={dirty:{}};let n=be.get(t,"viewState.customInstance.vCpuCount");const r=be.get(t,"viewState.customInstance.instanceFamily"),i=be.get(t,"viewState.customInstance.memory"),o=be.get(t,"viewState.customInstance.extendedMemory"),{zone:s,regional:c,region:d}=t,{locationToInstanceTypesMap:u}=t.backingData.credentialsKeyedByAccount[t.credentials],m=c?d:s;return m?((s||c)&&be.set(t,"backingData.customInstanceTypes.vCpuList",l.generateValidVCpuListForLocation(m,u)),n&&l.vCpuCountForLocationIsValid(r,n,m,u)||(n=be.get(t,"backingData.customInstanceTypes.vCpuList[0]"),be.set(t,"viewState.customInstance.vCpuCount",n)),be.set(t,"backingData.customInstanceTypes.memoryList",l.generateValidMemoryListForVCpuCount(r,n)),be.every([i,n,!l.memoryIsValid(r,i,n,o)])&&(be.set(t,"viewState.customInstance.memory",void 0),a.dirty.instanceType=t.instanceType,t.instanceType=null),be.set(t,"backingData.customInstanceTypes.instanceFamilyList",l.generateValidInstanceFamilyList()),a):a}function E(e){const t={dirty:{}},a=ri.getAvailableAccelerators(e);be.set(e,["viewState","acceleratorTypes"],a),t.dirty.acceleratorTypes=!0;const n=be.get(e,"acceleratorConfigs",[]);return n.length>0&&(e.acceleratorConfigs=n.filter(e=>!!a.find(t=>t.name===e.acceleratorType)),0===e.acceleratorConfigs.length&&delete e.acceleratorConfigs),t}function k(e){e.image=e.viewState.imageId;const t={dirty:{}};return e.credentials!==e.viewState.lastImageAccount&&(e.viewState.lastImageAccount=e.credentials,be.chain(e.backingData.allImages).find({imageName:e.image}).value()||(e.image=null,t.dirty.imageName=!0)),t}function C(e){const t={dirty:{}},a=e.backingData.filtered;if(null===e.region)return t;const n=e.backingData.credentialsKeyedByAccount[e.credentials].regions;return be.isArray(n)?(a.zones=be.find(n,{name:e.region}).zones,a.truncatedZones=be.takeRight(a.zones.sort(),3)):a.zones=n[e.region],be.chain(a.zones).includes(e.zone).value()||(delete e.zone,e.regional||(t.dirty.zone=!0)),t}function N(e){return ei(be.filter(e.backingData.healthChecks,{account:e.credentials}))}function T(e){const t={dirty:{}},a=e.backingData.filtered;return null===e.credentials||(a.healthChecks=N(e),be.has(e,"autoHealingPolicy.healthCheck")&&!be.chain(a.healthChecks).map("selfLink").includes(e.autoHealingPolicy.healthCheckUrl).value()?(delete e.autoHealingPolicy.healthCheck,t.dirty.autoHealingPolicy=!0):t.dirty.autoHealingPolicy=null),t}function S(e,t){return t.region===e.region||"global"===t.region}function A(e){const t={dirty:{}},a=e.loadBalancers,n=d.normalizeLoadBalancerSet(function(e){return be.chain(e.backingData.loadBalancers).map("accounts").flattenDeep().filter({name:e.credentials}).map("regions").flattenDeep().map("loadBalancers").flattenDeep().filter(be.curry(S)(e)).uniq().value()}(e));if(e.backingData.filtered.loadBalancerIndex=be.keyBy(n,"name"),e.backingData.filtered.loadBalancers=be.map(n,"name"),a&&e.loadBalancers){e.loadBalancers=o.normalizeLoadBalancerNamesForAccount(e.loadBalancers,e.credentials,n,e.region);const a=be.intersection(e.backingData.filtered.loadBalancers,e.loadBalancers),r=be.xor(a,e.loadBalancers);e.loadBalancers=a,function(e){const t=e.backendServiceMetadata,a=e.backingData.filtered.loadBalancerIndex,n=e.loadBalancers.reduce((e,n)=>(o.isHttpLoadBalancer(a[n])&&"EXTERNAL_MANAGED"!==a[n].loadBalancerType&&(e[n]=be.intersection(a[n].backendServices,t)),e),{});Object.keys(n).length>0&&(e.backendServices=n)}(e),r.length&&(t.dirty.loadBalancers=r)}return t}function P(e,t){return n.clearCache("healthChecks"),s.listHealthChecks().then(function(a){e.backingData.healthChecks=a,t||T(e)})}function w(e){const t={dirty:{}},a=e.backingData.filtered;return null===e.region||(a.subnets=be.chain(e.backingData.subnets).filter({account:e.credentials,network:e.network,region:e.region}).map("id").value(),be.chain(a.subnets).includes(e.subnet).value()||(e.subnet="",t.dirty.subnet=!0)),t}function I(e){let t=e.backingData.securityGroups[e.credentials]||{gce:{}};return t=be.filter(t.gce.global,function(t){return t.network===e.network}),be.chain(t).sortBy("name").value()}function M(e){const t={dirty:{}},a=e.backingData.filtered.securityGroups,n=I(e);if(a&&e.securityGroups){const r=e.securityGroups.map(function(e){const t=be.chain(a).find({id:e}).value();return t?t.id:e}),i=e.securityGroups.map(function(e){const t=be.chain(a).find({id:e}).value();return t?t.id:null}).map(function(e){return be.chain(n).find({id:e}).value()}).filter(function(e){return e});e.securityGroups=be.map(i,"id");const l=be.xor(r,e.securityGroups);l.length&&(t.dirty.securityGroups=l)}e.backingData.filtered.securityGroups=be.filter(n,function(e){return!be.isEmpty(e.targetTags)}),e.implicitSecurityGroups=be.filter(n,function(e){return be.isEmpty(e.targetTags)});const r=(i=e.network)&&i.includes("/")?i.split("/")[0]+"/":"";var i;const l=be.map(e.securityGroups,e=>e.startsWith(r)?e:r+e);return e.securityGroups=be.difference(l,be.map(e.implicitSecurityGroups,"id")),t}function R(e,t){return n.clearCache("securityGroups"),a.getAllSecurityGroups().then(function(a){e.backingData.securityGroups=a,t||M(e)})}function G(e){return be.map(be.filter(e.backingData.networks,{account:e.credentials}),"id")}return{configureCommand:function(t,n){return e.all([g.getCredentialsKeyedByAccount("gce"),a.getAllSecurityGroups(),b.listNetworksByProvider("gce"),f.listSubnetsByProvider("gce"),r.listLoadBalancers("gce"),(l=n.credentials,Ve.findImages({account:l,provider:"gce",q:"*"})),i.getAllTypesByRegion(),e.resolve(be.cloneDeep(u)),e.resolve(be.cloneDeep(m)),s.listHealthChecks(),g.listAccounts("gce")]).then(function([t,a,r,i,l,o,s,d,u,m,g]){const f={credentialsKeyedByAccount:t,securityGroups:a,networks:r,subnets:i,loadBalancers:l,allImages:o,instanceTypes:s,persistentDiskTypes:d,authScopes:u,healthChecks:m,accounts:g};let S=e.resolve(null),B=e.resolve(null),L=e.resolve(null);if(f.filtered={},f.distributionPolicyTargetShapes=li.slice(),n.backingData=f,k(n),n.securityGroups&&n.securityGroups.length){const e=be.map(I(n),"id");be.intersection(n.securityGroups,e).length<n.securityGroups.length&&(S=R(n,!0))}if(n.network){G(n).includes(n.network)||(B=function(e){b.listNetworksByProvider("gce").then(function(t){e.backingData.networks=t})}(n))}if(n.autoScalingPolicy&&(n.enableAutoScaling=!0),n.autoHealingPolicy&&(n.enableAutoHealing=!0),be.has(n,"autoHealingPolicy.healthCheck")){const e=N(n);be.chain(e).map("selfLink").includes(n.autoHealingPolicy.healthCheckUrl).value()||(L=P(n,!0))}return e.all([S,B,L]).then(()=>{var e;c.register(n),(e=n).regionalChanged=function(e){const t={dirty:{}},a=e.backingData.filtered,n=Ha.defaults;return e.regional?(e.zone=null,p(e)):e.zone||(e.region===n.region?e.zone=n.zone:e.zone=a.zones[0],Object.assign(t.dirty,C(e).dirty)),e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),t},e.regionChanged=function(e){const t={dirty:{}},a=e.backingData.filtered;return Object.assign(t.dirty,w(e).dirty),e.region?(Object.assign(t.dirty,h(e).dirty),Object.assign(t.dirty,C(e).dirty),Object.assign(t.dirty,v(e).dirty),Object.assign(t.dirty,A(e).dirty),Object.assign(t.dirty,k(e).dirty)):a.zones=null,e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),t},e.credentialsChanged=function(e){const t={dirty:{}},a=e.backingData;if(e.credentials){const n=a.credentialsKeyedByAccount[e.credentials].regions;be.isArray(n)?a.filtered.regions=be.map(n,"name"):a.filtered.regions=be.keys(n),a.filtered.regions.includes(e.region)?Object.assign(t.dirty,e.regionChanged(e).dirty):(e.region=null,t.dirty.region=!0),a.filtered.networks=G(e),a.filtered.networks.includes(e.network)?Object.assign(t.dirty,e.networkChanged(e).dirty):(e.network=null,t.dirty.network=!0),Object.assign(t.dirty,T(e).dirty),Object.assign(t.dirty,h(e).dirty),p(e)}else e.region=null;return e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),t},e.networkChanged=function(e){const t={dirty:{}};return e.viewState.autoCreateSubnets=be.chain(e.backingData.networks).filter({account:e.credentials,id:e.network}).map("autoCreateSubnets").head().value(),e.viewState.subnets=be.chain(e.backingData.networks).filter({account:e.credentials,id:e.network}).map("subnets").head().value(),Object.assign(t.dirty,w(e).dirty),Object.assign(t.dirty,M(e).dirty),e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),t},e.zoneChanged=function(e){const t={dirty:{}};return void 0!==e.zone||e.regional||(t.dirty.zone=!0),e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),Object.assign(e.viewState.dirty,h(e).dirty),Object.assign(e.viewState.dirty,v(e).dirty),Object.assign(e.viewState.dirty,E(e).dirty),t},e.selectZonesChanged=function(e){const t={dirty:{}};return e.viewState.dirty=e.viewState.dirty||{},Object.assign(e.viewState.dirty,t.dirty),Object.assign(e.viewState.dirty,E(e).dirty),t},e.customInstanceChanged=function(e){const t={dirty:{}};return e.viewState.dirty=e.viewState.dirty||{},Object.assign(t,e.viewState.dirty,y(e).dirty),t}})});var l},configureInstanceTypes:h,configureImages:k,configureZones:C,configureSubnets:w,configureLoadBalancerOptions:A,refreshLoadBalancers:function(e,t){return r.listLoadBalancers("gce").then(function(a){e.backingData.loadBalancers=a,t||A(e)})},refreshSecurityGroups:R,refreshInstanceTypes:function(e){return n.clearCache("instanceTypes"),i.getAllTypesByRegion().then(function(t){e.backingData.instanceTypes=t,h(e)})},refreshHealthChecks:P}}}function si(e,t,a,n){const r=e.map(e=>({value:e,unresolved:!1}));return t&&!e.some(e=>a(e)===t)&&r.push({value:n(t),unresolved:!0}),r}function ci(e){var t,a,n,r,i,l,o,s,c;const d={};return(null==(t=e.application)?void 0:t.trim())||(d.application="Application required."),(null==(a=e.credentials)?void 0:a.trim())||(d.credentials="Account required."),(null==(n=e.region)?void 0:n.trim())||(d.region="Region required."),e.regional||(null==(r=e.zone)?void 0:r.trim())||(d.zone="Zone required."),e.regional&&e.selectZones&&!(null==(l=null==(i=e.distributionPolicy)?void 0:i.zones)?void 0:l.length)&&(d.distributionPolicy={zones:"At least one zone required."}),e.viewState.disableImageSelection||(null==(o=e.image)?void 0:o.trim())||(d.image="Image required."),null!==(null==(s=e.capacity)?void 0:s.desired)&&void 0!==(null==(c=e.capacity)?void 0:c.desired)||(d.capacity={desired:"Desired capacity required."}),d}t(oi,"requiresDeckRuntimeServices",!0);const di={dirty:{}};class ui{constructor(e,t){this.commandBuilder=e,this.configurationService=t}buildNewServerGroupCommand(e,t){return this.commandBuilder.buildNewServerGroupCommand(e,t)}buildNewServerGroupCommandForPipeline(e,t){return this.commandBuilder.buildNewServerGroupCommandForPipeline(e,t)}buildServerGroupCommandFromExisting(e,t,a){return this.commandBuilder.buildServerGroupCommandFromExisting(e,t,a)}buildServerGroupCommandFromPipeline(e,t,a,n){return this.commandBuilder.buildServerGroupCommandFromPipeline(e,t,a,n)}async configureCommand(e,t){const a=Pe(t);return await this.configurationService.configureCommand(e,a),a}applyCommandHandler(e,t){return this.applyUpdate(e,e=>{var a;return null==(a=e[t])?void 0:a.call(e,e)})}applyConfigurationUpdate(e,t){return this.applyUpdate(e,e=>this.configurationService[t](e))}applyConfigurationRefresh(e,t,a){return this.applyUpdate(e,async e=>("refreshInstanceTypes"===t?await this.configurationService.refreshInstanceTypes(e):await this.configurationService[t](e,a),di))}async applyUpdate(e,t){var a;const n=Pe(e),r=await t(n)||di;return n.viewState={...n.viewState,dirty:{...n.viewState.dirty,...r.dirty}},null==(a=n.processCommandUpdateResult)||a.call(n,r),{command:n,result:r}}}function mi(e){return{command:e,fieldOrigins:{},formikValues:e,requestGeneration:0}}class pi extends Be.Component{constructor(){super(...arguments),this.commandState=this.props.commandState||mi(this.props.formik.values),this.requestGeneration=0,this.isUnmounted=!1}get adapter(){if(!this.props.adapter)throw new Error("GCE server group wizard pages require an adapter owned by the wizard modal");return this.props.adapter}validate(e){return{}}componentWillUnmount(){this.isUnmounted=!0,this.requestGeneration++}configureCommand(){return this.runLatestCommandRequest(this.props.formik.values,e=>this.adapter.configureCommand(this.props.app,e))}applyCommandHandler(e){return this.runLatestCommandRequest(this.props.formik.values,async t=>(await this.adapter.applyCommandHandler(t,e)).command)}applyConfigurationUpdate(e){return this.runLatestCommandRequest(this.props.formik.values,async t=>(await this.adapter.applyConfigurationUpdate(t,e)).command)}applyConfigurationRefresh(e,t){return this.runLatestCommandRequest(this.props.formik.values,async a=>(await this.adapter.applyConfigurationRefresh(a,e,t)).command)}async runLatestCommandRequest(e,t){var a,n,r,i;const l=++this.requestGeneration;this.syncFormikValues();const o=++this.commandState.requestGeneration,s=hi(this.props.formik.values,e,this.commandState.command,this.commandState.fieldOrigins,{generation:o,source:"user"},!0);this.commandState.command=s,null==(n=(a=this.props).onLoadingChanged)||n.call(a,!0);try{const e=await t(s);if(this.isUnmounted)return;this.syncFormikValues();const a=this.commandState.command,n=hi(s,e,a,this.commandState.fieldOrigins,{generation:o,source:"result"});return ke(n,a)&&o!==this.commandState.requestGeneration||(this.commandState.command=n,this.props.formik.setValues(n)),n}finally{this.isUnmounted||l!==this.requestGeneration||null==(i=(r=this.props).onLoadingChanged)||i.call(r,!1)}}syncFormikValues(){const{formikValues:e}=this.commandState;e!==this.props.formik.values&&(this.commandState.command=hi(e,this.props.formik.values,this.commandState.command,this.commandState.fieldOrigins,{generation:this.commandState.requestGeneration,source:"user"}),this.commandState.formikValues=this.props.formik.values)}}function hi(e,t,a,n,r,i=!1){return gi(e,t,a,n,r,[],i)}function gi(e,t,a,n,r,i,l){if(ke(t,e))return a;if(ke(t,a))return l&&fi(e,t,n,r,i),a;if(Re(t)&&(Re(e)||void 0===e)&&(Re(a)||void 0===a)){const o=e||{},s=a||{},c={...s};
|
|
62
|
+
/* @__PURE__ */
|
|
63
|
+
return new Set([...Object.keys(o),...Object.keys(t)]).forEach(e=>{const a=[...i,e];Object.prototype.hasOwnProperty.call(t,e)?c[e]=gi(o[e],t[e],s[e],n,r,a,l):(ke(s[e],o[e])||vi(n,r,a))&&(delete c[e],bi(n,r,a))}),c}return ke(a,e)||vi(n,r,i)?(bi(n,r,i),t):a}function vi(e,t,a){if("user"===t.source)return!0;const n=function(e,t){for(let a=t.length;a>=0;a--){const n=e[yi(t.slice(0,a))];if(n)return n}return}(e,a);return"result"===(null==n?void 0:n.source)&&t.generation>n.generation}function fi(e,t,a,n,r){if(!ke(e,t)){if(Re(t)&&(Re(e)||void 0===e)){const i=e||{};
|
|
64
|
+
/* @__PURE__ */
|
|
65
|
+
return void new Set([...Object.keys(i),...Object.keys(t)]).forEach(e=>{const l=[...r,e];Object.prototype.hasOwnProperty.call(t,e)?fi(i[e],t[e],a,n,l):bi(a,n,l)})}bi(a,n,r)}}function bi(e,t,a){const n=yi(a),r=`${n}\0`;Object.keys(e).forEach(t=>{t.startsWith(r)&&delete e[t]}),e[n]=t}function yi(e){return e.join("\0")}function Ei(e,t){return Array.from(new Set([...e,t].filter(Boolean)))}function ki(e={}){return Object.keys(e).some(e=>!e.trim())}function Ci(e={}){return Object.values(e).some(e=>"string"!=typeof e||!e.trim())}function Ni(e){return"createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode}function Ti(e){return"string"==typeof e&&/^\s*\$\{.+\}\s*$/.test(e)}function Si(e){return Ti(e)?e:Number(e)}function Ai(e,t,a,n=Number.MAX_SAFE_INTEGER){if(Ni(a)&&Ti(e))return!0;const r=Number(e);return Number.isFinite(r)&&Number.isInteger(r)&&r>=t&&r<=n}function Pi(e){return(e.disks||[]).filter(e=>"local-ssd"===e.type)}function wi(e){return(e.disks||[]).filter(e=>"local-ssd"!==e.type)}function Ii(e,t){return e&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:t,role:"alert"},e)}class Mi extends pi{constructor(){super(...arguments),this.setField=(e,t)=>{this.props.formik.setFieldValue(e,t)},this.updateDisk=(e,t)=>{const a=this.props.formik.values,n=wi(a);this.setField("disks",n.map((a,n)=>n===e?{...a,...t}:a).concat(Pi(a)))},this.removeDisk=e=>{const t=this.props.formik.values;this.setField("disks",wi(t).filter((t,a)=>a!==e).concat(Pi(t)))},this.updateLocalSsdCount=e=>{const t=this.props.formik.values,a=Pi(t).slice(0,e);for(;a.length<e;)a.push({type:"local-ssd",sizeGb:375});this.setField("disks",wi(t).concat(a))},this.updateAccelerator=(e,t)=>{const a=this.props.formik.values.acceleratorConfigs||[];this.setField("acceleratorConfigs",a.map((a,n)=>n===e?{...a,...t}:a))},this.removeAccelerator=e=>{this.setField("acceleratorConfigs",(this.props.formik.values.acceleratorConfigs||[]).filter((t,a)=>a!==e))},this.updateTag=(e,t)=>{const a=this.props.formik.values.tags||[];this.setField("tags",a.map((a,n)=>n===e?"string"==typeof a?t:{...a,value:t}:a))},this.removeTag=e=>{this.setField("tags",(this.props.formik.values.tags||[]).filter((t,a)=>a!==e))},this.removeAuthScope=e=>{this.setField("authScopes",(this.props.formik.values.authScopes||[]).filter((t,a)=>a!==e))},this.setPreemptible=e=>{this.setField("preemptible",e),this.setField("automaticRestart",!e),this.setField("onHostMaintenance",e?"TERMINATE":"MIGRATE")}}validate(e){return function(e){const t={};wi(e).some(t=>!t.type||!Ai(t.sizeGb,10,e,65536))&&(t.disks="Every persistent disk requires a type and an integer size between 10 and 65536 GB.");(e.acceleratorConfigs||[]).some(t=>!function(e,t){var a;if(!e.acceleratorType||!Ai(e.acceleratorCount,1,t))return!1;if(Ni(t)&&Ti(e.acceleratorCount))return!0;const n=((null==(a=t.viewState)?void 0:a.acceleratorTypes)||[]).find(t=>t.name===e.acceleratorType);return!n||n.availableCardCounts.includes(Number(e.acceleratorCount))}(t,e))&&(t.acceleratorConfigs="Every accelerator requires a type and a supported positive integer count.");ki(e.instanceMetadata)&&(t.instanceMetadata="Metadata keys cannot be empty.");(ki(e.labels)||Ci(e.labels))&&(t.labels=ki(e.labels)?"Label keys cannot be empty.":"Label values cannot be empty.");(ki(e.resourceManagerTags)||Ci(e.resourceManagerTags))&&(t.resourceManagerTags=ki(e.resourceManagerTags)?"Resource Manager tag keys cannot be empty.":"Resource Manager tag values cannot be empty.");(e.tags||[]).some(e=>{var t;return!(null==(t="string"==typeof e?e:e.value)?void 0:t.trim())})&&(t.tags="Network tags cannot be empty.");(e.authScopes||[]).some(e=>!e.trim())&&(t.authScopes="Auth scopes cannot be empty.");e.enableConfidentialCompute&&"confidentialInstanceType"in e&&!e.confidentialInstanceType&&(t.confidentialInstanceType="Confidential instance type required.");return t}(e)}booleanRadios(e,t,a){const n=t.replace(/([A-Z])/g,"-$1").toLowerCase();/* @__PURE__ */
|
|
66
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-5 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,e)),/* @__PURE__ */Be.createElement("div",{className:"col-md-2 radio"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:!0===a,"data-testid":`${n}-yes`,name:t,onChange:()=>this.setField(t,!0),type:"radio"})," ","Yes")),/* @__PURE__ */Be.createElement("div",{className:"col-md-2 radio"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:!1===a,"data-testid":`${n}-no`,name:t,onChange:()=>this.setField(t,!1),type:"radio"})," ","No")))}render(){var e,t,a,n,r,i,l,o;const{values:s}=this.props.formik,c=this.validate(s),d=wi(s),u=Pi(s),m=s.acceleratorConfigs||[],p=(null==(e=s.viewState)?void 0:e.acceleratorTypes)||[],h=s.tags||[],g=s.authScopes||[],v=Ei((null==(a=null==(t=s.backingData)?void 0:t.filtered)?void 0:a.cpuPlatforms)||[],s.minCpuPlatform),f="enableConfidentialCompute"in s||"confidentialInstanceType"in s,b=Ni(s);/* @__PURE__ */
|
|
67
|
+
return Be.createElement("div",{className:"container-fluid form-horizontal","data-testid":"gce-advanced-settings-page"},/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-5 control-label"},"Minimum CPU Platform ",/* @__PURE__ */Be.createElement(M,{id:"gce.serverGroup.minCpuPlatform"})),/* @__PURE__ */Be.createElement("div",{className:"col-md-6"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"minimum-cpu-platform",onChange:e=>this.setField("minCpuPlatform",e.target.value),value:s.minCpuPlatform||""},v.map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e))))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"sm-label-left"},/* @__PURE__ */Be.createElement("b",null,"Storage")),/* @__PURE__ */Be.createElement("label",{className:"col-md-5 control-label",htmlFor:"gce-local-ssd-count"},"Number of Local SSD Disks"),/* @__PURE__ */Be.createElement("div",{className:"col-md-2"},/* @__PURE__ */Be.createElement("input",{"aria-describedby":c.disks?"gce-advanced-disks-error":void 0,"aria-invalid":Boolean(c.disks),className:"form-control input-sm","data-testid":"local-ssd-count",disabled:!1===(null==(i=null==(r=null==(n=s.viewState)?void 0:n.instanceTypeDetails)?void 0:r.storage)?void 0:i.localSSDSupported),id:"gce-local-ssd-count",max:8,min:0,onChange:e=>this.updateLocalSsdCount(Number(e.target.value)),type:"number",value:u.length}))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"sm-label-left"},/* @__PURE__ */Be.createElement("b",null,"Persistent Disks")),/* @__PURE__ */Be.createElement("table",{className:"table table-condensed packed tags"},/* @__PURE__ */Be.createElement("thead",null,/* @__PURE__ */Be.createElement("tr",null,/* @__PURE__ */Be.createElement("th",null,"Type"),/* @__PURE__ */Be.createElement("th",null,"Size (GB)"),/* @__PURE__ */Be.createElement("th",null,"Source image"),/* @__PURE__ */Be.createElement("th",null))),/* @__PURE__ */Be.createElement("tbody",null,d.map((e,t)=>{var a,n;const r=Ei((null==(a=s.backingData)?void 0:a.persistentDiskTypes)||[],e.type);/* @__PURE__ */
|
|
68
|
+
return Be.createElement("tr",{key:t},/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("select",{"aria-describedby":c.disks?"gce-advanced-disks-error":void 0,"aria-invalid":Boolean(c.disks),"aria-label":`Disk type ${t+1}`,className:"form-control input-sm","data-testid":`disk-type-${t}`,onChange:e=>this.updateDisk(t,{type:e.target.value}),required:!0,value:e.type||""},r.map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e)))),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("input",{"aria-describedby":c.disks?"gce-advanced-disks-error":void 0,"aria-invalid":Boolean(c.disks),"aria-label":`Disk size ${t+1}`,className:"form-control input-sm","data-testid":`disk-size-${t}`,max:b?void 0:65536,min:b?void 0:10,onChange:e=>this.updateDisk(t,{sizeGb:Si(e.target.value)}),required:!0,type:b?"text":"number",value:null!=(n=e.sizeGb)?n:""})),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("input",{"aria-label":`Disk source image ${t+1}`,className:"form-control input-sm",onChange:e=>this.updateDisk(t,{sourceImage:e.target.value||void 0}),type:"text",value:e.sourceImage||""})),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("button",{"aria-label":`Remove disk ${t+1}`,className:"btn btn-link","data-testid":`remove-disk-${t}`,onClick:()=>this.removeDisk(t),type:"button"},
|
|
69
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-trash"}))))})),/* @__PURE__ */Be.createElement("tfoot",null,/* @__PURE__ */Be.createElement("tr",null,/* @__PURE__ */Be.createElement("td",{colSpan:4},/* @__PURE__ */Be.createElement("button",{className:"btn btn-block btn-sm add-new","data-testid":"add-disk",onClick:()=>this.setField("disks",[...d,{type:"pd-ssd",sizeGb:10},...u]),type:"button"},
|
|
70
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add disk"))))),Ii(c.disks,"gce-advanced-disks-error")),(m.length>0||p.length>0)&&/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"sm-label-left"},/* @__PURE__ */Be.createElement("b",null,"Accelerators")," ",/* @__PURE__ */Be.createElement(M,{id:"gce.serverGroup.accelerator"})),/* @__PURE__ */Be.createElement("table",{className:"table table-condensed packed tags"},/* @__PURE__ */Be.createElement("thead",null,/* @__PURE__ */Be.createElement("tr",null,/* @__PURE__ */Be.createElement("th",null,"Type"),/* @__PURE__ */Be.createElement("th",null,"Count"),/* @__PURE__ */Be.createElement("th",null))),/* @__PURE__ */Be.createElement("tbody",null,m.map((e,t)=>{var a,n,r;const i=p.find(t=>t.name===e.acceleratorType),l=Ei(p.map(e=>e.name),e.acceleratorType),o=Array.from(new Set([...(null==i?void 0:i.availableCardCounts)||[],e.acceleratorCount].filter(Boolean)));/* @__PURE__ */
|
|
71
|
+
return Be.createElement("tr",{key:t},/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("select",{"aria-describedby":c.acceleratorConfigs?"gce-advanced-accelerators-error":void 0,"aria-invalid":Boolean(c.acceleratorConfigs),"aria-label":`Accelerator type ${t+1}`,className:"form-control input-sm","data-testid":`accelerator-type-${t}`,onChange:e=>this.updateAccelerator(t,{acceleratorType:e.target.value}),required:!0,value:e.acceleratorType||""},l.map(e=>{var t;/* @__PURE__ */
|
|
72
|
+
return Be.createElement("option",{key:e,value:e},(null==(t=p.find(t=>t.name===e))?void 0:t.description)||e)}))),/* @__PURE__ */Be.createElement("td",null,b?/* @__PURE__ */Be.createElement("input",{"aria-describedby":c.acceleratorConfigs?"gce-advanced-accelerators-error":void 0,"aria-invalid":Boolean(c.acceleratorConfigs),"aria-label":`Accelerator count ${t+1}`,className:"form-control input-sm","data-testid":`accelerator-count-${t}`,onChange:e=>this.updateAccelerator(t,{acceleratorCount:Si(e.target.value)}),required:!0,type:"text",value:null!=(a=e.acceleratorCount)?a:""}):o.length?/* @__PURE__ */Be.createElement("select",{"aria-describedby":c.acceleratorConfigs?"gce-advanced-accelerators-error":void 0,"aria-invalid":Boolean(c.acceleratorConfigs),"aria-label":`Accelerator count ${t+1}`,className:"form-control input-sm","data-testid":`accelerator-count-${t}`,onChange:e=>this.updateAccelerator(t,{acceleratorCount:Si(e.target.value)}),required:!0,value:null!=(n=e.acceleratorCount)?n:""},o.map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e))):/* @__PURE__ */Be.createElement("input",{"aria-describedby":c.acceleratorConfigs?"gce-advanced-accelerators-error":void 0,"aria-invalid":Boolean(c.acceleratorConfigs),"aria-label":`Accelerator count ${t+1}`,className:"form-control input-sm","data-testid":`accelerator-count-${t}`,min:1,onChange:e=>this.updateAccelerator(t,{acceleratorCount:Si(e.target.value)}),required:!0,type:"number",value:null!=(r=e.acceleratorCount)?r:""})),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("button",{"aria-label":`Remove accelerator ${t+1}`,className:"btn btn-link","data-testid":`remove-accelerator-${t}`,onClick:()=>this.removeAccelerator(t),type:"button"},
|
|
73
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-trash"}))))})),/* @__PURE__ */Be.createElement("tfoot",null,/* @__PURE__ */Be.createElement("tr",null,/* @__PURE__ */Be.createElement("td",{colSpan:3},/* @__PURE__ */Be.createElement("button",{className:"btn btn-block btn-sm add-new","data-testid":"add-accelerator",disabled:!p.length,onClick:()=>{var e;const t=p[0];this.setField("acceleratorConfigs",[...m,{acceleratorType:t.name,acceleratorCount:(null==(e=t.availableCardCounts)?void 0:e[0])||1}])},type:"button"},
|
|
74
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add accelerator"))))),Ii(c.acceleratorConfigs,"gce-advanced-accelerators-error")),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"sm-label-left",htmlFor:"gce-user-data"},"User Data ",/* @__PURE__ */Be.createElement(M,{id:"gce.serverGroup.userData"})),/* @__PURE__ */Be.createElement("textarea",{className:"form-control",id:"gce-user-data",onChange:e=>this.setField("userData",e.target.value),rows:3,value:s.userData||""})),/* @__PURE__ */Be.createElement("div",{"aria-describedby":c.instanceMetadata?"gce-advanced-instance-metadata-error":void 0,"aria-invalid":Boolean(c.instanceMetadata),"aria-label":"Custom Metadata",className:"form-group",role:"group"},
|
|
75
|
+
/* @__PURE__ */Be.createElement(z,{addButtonLabel:"Add New Metadata",allowEmpty:!0,keyLabel:"Metadata key",label:"Custom Metadata",model:s.instanceMetadata||{},onChange:e=>this.setField("instanceMetadata",e),valueLabel:"Metadata value"}),Ii(c.instanceMetadata,"gce-advanced-instance-metadata-error")),/* @__PURE__ */Be.createElement("div",{"aria-describedby":c.labels?"gce-advanced-labels-error":void 0,"aria-invalid":Boolean(c.labels),"aria-label":"Labels",className:"form-group",role:"group"},
|
|
76
|
+
/* @__PURE__ */Be.createElement(z,{addButtonLabel:"Add New Label",allowEmpty:!0,keyLabel:"Label key",label:"Labels",model:s.labels||{},onChange:e=>this.setField("labels",e),valueLabel:"Label value"}),Ii(c.labels,"gce-advanced-labels-error")),/* @__PURE__ */Be.createElement("div",{"aria-describedby":c.resourceManagerTags?"gce-advanced-resource-manager-tags-error":void 0,"aria-invalid":Boolean(c.resourceManagerTags),"aria-label":"Resource Manager Tags",className:"form-group",role:"group"},
|
|
77
|
+
/* @__PURE__ */Be.createElement(z,{addButtonLabel:"Add New Resource Manager Tag",allowEmpty:!1,keyLabel:"Tag key",label:"Resource Manager Tags",model:s.resourceManagerTags||{},onChange:e=>this.setField("resourceManagerTags",e),valueLabel:"Tag value"}),Ii(c.resourceManagerTags,"gce-advanced-resource-manager-tags-error")),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"sm-label-left"},/* @__PURE__ */Be.createElement("b",null,"Network Tags")),/* @__PURE__ */Be.createElement("table",{className:"table table-condensed packed tags"},/* @__PURE__ */Be.createElement("tbody",null,h.map((e,t)=>/* @__PURE__ */Be.createElement("tr",{key:t},/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("input",{"aria-describedby":c.tags?"gce-advanced-network-tags-error":void 0,"aria-invalid":Boolean(c.tags),"aria-label":`Network tag ${t+1}`,className:"form-control input-sm",onChange:e=>this.updateTag(t,e.target.value),required:!0,value:"string"==typeof e?e:e.value||""})),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("button",{"aria-label":`Remove network tag ${t+1}`,className:"btn btn-link","data-testid":`remove-network-tag-${t}`,onClick:()=>this.removeTag(t),type:"button"},
|
|
78
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-trash"})))))),/* @__PURE__ */Be.createElement("tfoot",null,/* @__PURE__ */Be.createElement("tr",null,/* @__PURE__ */Be.createElement("td",{colSpan:2},/* @__PURE__ */Be.createElement("button",{className:"btn btn-block btn-sm add-new","data-testid":"add-network-tag",onClick:()=>this.setField("tags",[...h,{value:""}]),type:"button"},
|
|
79
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add network tag"))))),Ii(c.tags,"gce-advanced-network-tags-error")),/* @__PURE__ */Be.createElement("fieldset",{className:"form-group"},/* @__PURE__ */Be.createElement("legend",{className:"sm-label-left"},"Shielded VM ",/* @__PURE__ */Be.createElement(M,{id:"gce.serverGroup.shieldedInstanceConfig"})),/* @__PURE__ */Be.createElement("div",{className:"col-md-9 checkbox"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:Boolean(s.enableSecureBoot),onChange:e=>this.setField("enableSecureBoot",e.target.checked),type:"checkbox"})," ","Turn on Secure Boot")),/* @__PURE__ */Be.createElement("div",{className:"col-md-9 checkbox"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:Boolean(s.enableVtpm),"data-testid":"enable-vtpm",onChange:e=>{this.setField("enableVtpm",e.target.checked),e.target.checked||this.setField("enableIntegrityMonitoring",!1)},type:"checkbox"})," ","Turn on vTPM")),/* @__PURE__ */Be.createElement("div",{className:"col-md-9 checkbox"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:Boolean(s.enableIntegrityMonitoring),disabled:!s.enableVtpm,onChange:e=>this.setField("enableIntegrityMonitoring",e.target.checked),type:"checkbox"})," ","Turn on Integrity Monitoring"))),f&&/* @__PURE__ */Be.createElement("fieldset",{className:"form-group"},/* @__PURE__ */Be.createElement("legend",{className:"sm-label-left"},"Confidential VM"),"enableConfidentialCompute"in s&&/* @__PURE__ */Be.createElement("div",{className:"col-md-9 checkbox","data-testid":"enable-confidential-compute"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:Boolean(s.enableConfidentialCompute),onChange:e=>this.setField("enableConfidentialCompute",e.target.checked),type:"checkbox"})," ","Enable Confidential Compute")),"confidentialInstanceType"in s&&/* @__PURE__ */Be.createElement("div",{className:"col-md-9"},/* @__PURE__ */Be.createElement("label",{htmlFor:"gce-confidential-instance-type"},"Confidential instance type"),/* @__PURE__ */Be.createElement("select",{"aria-describedby":c.confidentialInstanceType?"gce-advanced-confidential-instance-type-error":void 0,"aria-invalid":Boolean(c.confidentialInstanceType),className:"form-control input-sm",id:"gce-confidential-instance-type",onChange:e=>this.setField("confidentialInstanceType",e.target.value),required:Boolean(s.enableConfidentialCompute),value:s.confidentialInstanceType||""},
|
|
80
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),Ei((null==(l=s.backingData)?void 0:l.confidentialInstanceTypes)||[],s.confidentialInstanceType).map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e))),Ii(c.confidentialInstanceType,"gce-advanced-confidential-instance-type-error"))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-5 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Preemptibility")),/* @__PURE__ */Be.createElement("div",{className:"col-md-2 radio"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:!s.preemptible,"data-testid":"preemptible-off",name:"preemptible",onChange:()=>this.setPreemptible(!1),type:"radio"})," ","Off")),/* @__PURE__ */Be.createElement("div",{className:"col-md-2 radio"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:Boolean(s.preemptible),"data-testid":"preemptible-on",name:"preemptible",onChange:()=>this.setPreemptible(!0),type:"radio"})," ","On"))),this.booleanRadios("Automatic Restart","automaticRestart",Boolean(s.automaticRestart)),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-5 control-label"},"On Host Maintenance"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm",onChange:e=>this.setField("onHostMaintenance",e.target.value),value:s.onHostMaintenance||""},
|
|
81
|
+
/* @__PURE__ */Be.createElement("option",{value:"MIGRATE"},"Migrate"),
|
|
82
|
+
/* @__PURE__ */Be.createElement("option",{value:"TERMINATE"},"Terminate")))),this.booleanRadios("Associate Public IP Address","associatePublicIpAddress",!1!==s.associatePublicIpAddress),this.booleanRadios("Can IP Forward","canIpForward",Boolean(s.canIpForward)),/* @__PURE__ */Be.createElement("div",{className:"form-group","data-testid":"service-account"},/* @__PURE__ */Be.createElement("label",{className:"col-md-5 control-label",htmlFor:"gce-service-account"},"Service Account"),/* @__PURE__ */Be.createElement("div",{className:"col-md-6"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",id:"gce-service-account",onChange:e=>this.setField("serviceAccountEmail",e.target.value),type:"text",value:s.serviceAccountEmail||""}))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"sm-label-left"},/* @__PURE__ */Be.createElement("b",null,"Auth Scopes")),/* @__PURE__ */Be.createElement("table",{className:"table table-condensed packed tags"},/* @__PURE__ */Be.createElement("tbody",null,g.map((e,t)=>/* @__PURE__ */Be.createElement("tr",{key:t,"data-testid":`auth-scope-${t}`},/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("input",{"aria-describedby":c.authScopes?"gce-advanced-auth-scopes-error":void 0,"aria-invalid":Boolean(c.authScopes),"aria-label":`Auth scope ${t+1}`,className:"form-control input-sm",list:"gce-auth-scopes",onChange:e=>this.setField("authScopes",g.map((a,n)=>n===t?e.target.value:a)),required:!0,value:e})),/* @__PURE__ */Be.createElement("td",null,/* @__PURE__ */Be.createElement("button",{"aria-label":`Remove auth scope ${t+1}`,className:"btn btn-link","data-testid":`remove-auth-scope-${t}`,onClick:()=>this.removeAuthScope(t),type:"button"},
|
|
83
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-trash"})))))),/* @__PURE__ */Be.createElement("tfoot",null,/* @__PURE__ */Be.createElement("tr",null,/* @__PURE__ */Be.createElement("td",{colSpan:2},/* @__PURE__ */Be.createElement("button",{className:"btn btn-block btn-sm add-new","data-testid":"add-auth-scope",onClick:()=>this.setField("authScopes",[...g,""]),type:"button"},
|
|
84
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add auth scope"))))),/* @__PURE__ */Be.createElement("datalist",{id:"gce-auth-scopes"},((null==(o=s.backingData)?void 0:o.authScopes)||[]).map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e}))),Ii(c.authScopes,"gce-advanced-auth-scopes-error")))}}class Ri extends pi{constructor(){super(...arguments),this.firewallsChanged=e=>{const t=this.props.formik.values,a=Oi(Array.from(e.target.selectedOptions).map(e=>e.value)),n=Bi(t).filter(e=>xi(t).includes(e.id)&&!a.includes(e.id)).flatMap(e=>e.targetTags),r=Di(t).filter(e=>!n.includes(e.value));this.reconcile({...t,securityGroups:a,tags:r},a,r)},this.targetTagChanged=(e,t)=>{const a=this.props.formik.values,n=Gi(a),r=t?zi([...Di(a),{value:e}]):Di(a).filter(t=>t.value!==e),i=r.map(e=>e.value),l=xi(a),o=l.filter(e=>!n.some(t=>t.id===e)),s=Oi(t?[...l,...n.filter(t=>t.targetTags.includes(e)).map(e=>e.id)]:[...o,...n.filter(e=>l.includes(e.id)&&e.targetTags.some(e=>i.includes(e))).map(e=>e.id)]);this.reconcile({...a,securityGroups:s,tags:r},s,r)},this.reconcile=(e,t,a)=>{this.runLatestCommandRequest(e,async e=>Fi((await this.adapter.applyCommandHandler(e,"networkChanged")).command,t,a))},this.showImplicitChanged=e=>{const t=this.props.formik.values;this.props.formik.setFieldValue("viewState",{...t.viewState,listImplicitSecurityGroups:e})},this.refreshFirewalls=()=>{const e=this.props.formik.values,t=xi(e),a=Di(e);this.runLatestCommandRequest(e,async e=>Fi((await this.adapter.applyConfigurationRefresh(e,"refreshSecurityGroups")).command,t,a))}}render(){const e=this.props.formik.values,t=xi(e),a=Di(e).map(e=>e.value),n=Gi(e),r=Bi(e).filter(e=>0===e.targetTags.length);const i=function(e,t){const a=e.map(e=>e.id);return[...e.map(e=>({firewall:e,unavailable:!1})),...t.filter(e=>!a.includes(e)).map(e=>({firewall:{id:e,name:e,targetTags:[]},unavailable:!0}))]}(n,t),l=n.filter(e=>t.includes(e.id));/* @__PURE__ */
|
|
85
|
+
return Be.createElement("div",{className:"container-fluid form-horizontal"},/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-server-group-firewalls"},"Firewalls"),/* @__PURE__ */Be.createElement("div",{className:"col-md-9"},/* @__PURE__ */Be.createElement("select",{"aria-label":"Firewalls",className:"form-control input-sm",id:"gce-server-group-firewalls",multiple:!0,onChange:this.firewallsChanged,value:t},i.map(({firewall:e,unavailable:t})=>/* @__PURE__ */Be.createElement("option",{key:e.id,value:e.id},t?`${e.id} (unavailable)`:`${e.name} (${e.id})`))),!i.length&&/* @__PURE__ */Be.createElement("p",{className:"form-control-static"},"No explicit firewalls found."))),l.map(e=>/* @__PURE__ */Be.createElement("fieldset",{className:"form-group",key:e.id},/* @__PURE__ */Be.createElement("legend",{className:"col-md-3 sm-label-right"},"Target Tags for ",e.name),/* @__PURE__ */Be.createElement("div",{className:"col-md-9"},e.targetTags.map(t=>{const n=function(...e){return e.join("-").replace(/[^a-zA-Z0-9_-]/g,"-")}("gce-firewall-target-tag",e.id,t);/* @__PURE__ */
|
|
86
|
+
return Be.createElement("div",{className:"checkbox",key:t},/* @__PURE__ */Be.createElement("label",{htmlFor:n},/* @__PURE__ */Be.createElement("input",{"aria-label":`Target tag ${t} for firewall ${e.id}`,checked:a.includes(t),id:n,onChange:e=>this.targetTagChanged(t,e.target.checked),type:"checkbox"}),t))})))),/* @__PURE__ */Be.createElement("div",{className:"form-group small"},/* @__PURE__ */Be.createElement("div",{className:"col-md-9 col-md-offset-3 checkbox"},/* @__PURE__ */Be.createElement("label",{htmlFor:"gce-show-implicit-firewalls"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Show implicit firewalls",checked:Boolean(e.viewState.listImplicitSecurityGroups),id:"gce-show-implicit-firewalls",onChange:e=>this.showImplicitChanged(e.target.checked),type:"checkbox"})," ","Show implicit firewalls"))),e.viewState.listImplicitSecurityGroups&&/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-3 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Implicit Firewalls")),/* @__PURE__ */Be.createElement("div",{className:"col-md-9"},/* @__PURE__ */Be.createElement("ul",{"aria-label":"Implicit firewalls"},r.length?r.map(e=>/* @__PURE__ */Be.createElement("li",{key:e.id},e.name)):/* @__PURE__ */Be.createElement("li",null,"None")))),/* @__PURE__ */Be.createElement("div",{className:"form-group small"},/* @__PURE__ */Be.createElement("div",{className:"col-md-9 col-md-offset-3"},/* @__PURE__ */Be.createElement("button",{"aria-label":"Refresh firewalls",className:"btn btn-link",onClick:this.refreshFirewalls,type:"button"},"Refresh firewalls"))))}}function Gi(e){return Bi(e).filter(e=>e.targetTags.length>0)}function Bi(e){var t,a,n,r;const i=(null==(r=null==(n=null==(a=null==(t=e.backingData)?void 0:t.securityGroups)?void 0:a[e.credentials||""])?void 0:n.gce)?void 0:r.global)||[],l=/* @__PURE__ */new Map;return i.filter(t=>t.network===e.network).forEach(e=>{const t=l.get(e.id),a=Oi([...(null==t?void 0:t.targetTags)||[],...Li(e.targetTags)]);l.set(e.id,{id:e.id,name:e.name||(null==t?void 0:t.name)||e.id,network:e.network,targetTags:a})}),Array.from(l.values()).sort((e,t)=>e.name.localeCompare(t.name))}function Li(e){if(Array.isArray(e))return Oi(e.map(String));if("string"!=typeof e)return[];return Oi(e.trim().replace(/^\[/,"").replace(/\]$/,"").split(",").map(e=>e.trim()))}function xi(e){return Oi(e.securityGroups||[])}function Di(e){return zi((e.tags||[]).map(e=>"string"==typeof e?{value:e}:e))}function zi(e){const t=/* @__PURE__ */new Map;return e.forEach(e=>e.value&&!t.has(e.value)&&t.set(e.value,e)),Array.from(t.values())}function Fi(e,t,a){return{...e,securityGroups:t,tags:a,viewState:{...e.viewState,dirty:{...e.viewState.dirty,securityGroups:null}}}}function Oi(e){return Array.from(new Set(e.filter(Boolean)))}const Hi=["RATE","UTILIZATION"],_i=["CONNECTION","UTILIZATION"],Ui=["maxConnectionsPerInstance","maxRatePerInstance","maxUtilization"],$i={balancingMode:"UTILIZATION",capacityScaler:1,maxUtilization:.8,namedPorts:[{name:"http",port:80}]};function qi(e){return`gce-load-balancing-policy-${e.replace(/([A-Z])/g,"-$1").toLowerCase()}-error`}function ji(e,t){return e&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:t,role:"alert"},e)}function Vi(e){const t={};!function(e){const t=new Set(dl(e.loadBalancers)),a=(ol(e)||[]).reduce((e,t)=>{const a=`${t.region||""}:${t.loadBalancerType||""}`;return[t.name,...(t.listeners||[]).map(({name:e})=>e)].filter(e=>Boolean(e)).forEach(t=>{const n=e.get(t)||/* @__PURE__ */new Set;n.add(a),e.set(t,n)}),e},
|
|
87
|
+
/* @__PURE__ */new Map);return Array.from(t).some(e=>{var t;return((null==(t=a.get(e))?void 0:t.size)||0)>1})}(e)?function(e){const t=dl(e.loadBalancers).map(t=>{var a;return null==(a=Wi(e)[t])?void 0:a.loadBalancerType}).filter(Boolean);return t.includes("REGIONAL_EXTERNAL_NETWORK")&&t.length>1}(e)&&(t.loadBalancers="REGIONAL_EXTERNAL_NETWORK load balancers cannot be combined with other load balancer families in this editor."):t.loadBalancers="The selected load balancer name is ambiguous across regions or load balancer types. Rename it or select an unambiguous load balancer.";const a=e.loadBalancingPolicy;if(!a||!Zi(e).length)return t;const n={},r=Zi(e);a.balancingMode&&r.includes(a.balancingMode)||(n.balancingMode="Select a balancing mode supported by the selected load balancers."),al(a.capacityScaler,e,0,1)||(n.capacityScaler="Capacity must be between 0 and 100%.");const i=(a.namedPorts||[]).map(({name:t,port:a})=>{const n={};return(null==t?void 0:t.trim())||(n.name="Port name required."),function(e,t,a,n){if(el(t)&&tl(e))return!0;if(!rl(e))return!1;const r=Number(e);return Number.isFinite(r)&&Number.isInteger(r)&&r>=a&&r<=n}(a,e,1,65535)||(n.port="Port must be an integer between 1 and 65535."),n});return i.some(e=>Object.keys(e).length)&&(n.namedPorts=i),"RATE"!==a.balancingMode||nl(a.maxRatePerInstance,e,0)||(n.maxRatePerInstance="Max rate must be a finite number greater than or equal to zero."),"CONNECTION"!==a.balancingMode||nl(a.maxConnectionsPerInstance,e,0)||(n.maxConnectionsPerInstance="Max connections must be a finite number greater than or equal to zero."),"UTILIZATION"!==a.balancingMode||al(a.maxUtilization,e,0,1)||(n.maxUtilization="Max utilization must be between 0 and 100%."),Object.keys(n).length&&(t.loadBalancingPolicy=n),t}class Ki extends pi{constructor(){super(...arguments),this.handleLoadBalancersChanged=e=>{const t=this.props.formik.values,a=dl(Array.from(e.target.selectedOptions).map(({value:e})=>e)),n=new Set(dl(t.loadBalancers)),r=Object.entries(t.backendServices||{}).reduce((e,[t,r])=>(!a.includes(t)&&n.has(t)||(e[t]=dl(r)),e),{}),i={...t,loadBalancers:a,loadBalancerMetadata:Yi(t,a),backendServices:r,backendServiceMetadata:dl(Object.values(r).flat())};i.loadBalancingPolicy=function(e){var t,a;const n=Zi(e);if(!n.length)return;const r=e.loadBalancingPolicy,i=(null==r?void 0:r.balancingMode)&&n.includes(r.balancingMode)?r.balancingMode:$i.balancingMode,l={...r,balancingMode:i,capacityScaler:null!=(t=null==r?void 0:r.capacityScaler)?t:$i.capacityScaler,namedPorts:null!=(a=null==r?void 0:r.namedPorts)?a:$i.namedPorts.map(e=>({...e}))};(null==r?void 0:r.balancingMode)!==i&&Ui.forEach(e=>delete l[e]);"UTILIZATION"===i&&void 0===l.maxUtilization&&(l.maxUtilization=$i.maxUtilization);return l}(i),this.applyPageUpdate(i,["loadBalancers","loadBalancerMetadata","loadBalancingPolicy"],!0)},this.handleBackendServicesChanged=(e,t)=>{const a=this.props.formik.values,n={...a.backendServices||{},[e]:dl(Array.from(t.target.selectedOptions).map(({value:e})=>e))},r={...a,backendServices:n,backendServiceMetadata:dl(Object.values(n).flat())};this.applyPageUpdate(r,["backendServices","backendServiceMetadata"])},this.handleBalancingModeChanged=e=>{const t={...this.props.formik.values.loadBalancingPolicy||{}};Ui.forEach(e=>delete t[e]),t.balancingMode=e.target.value,this.updatePolicy(t)},this.handleNamedPortChanged=(e,t,a)=>{const n={...this.props.formik.values.loadBalancingPolicy||{}};n.namedPorts=(n.namedPorts||[]).map((n,r)=>r===e?{...n,[t]:a}:n),this.updatePolicy(n)},this.handleAddNamedPort=()=>{const e={...this.props.formik.values.loadBalancingPolicy||{}};e.namedPorts=[...e.namedPorts||[],{name:"",port:80}],this.updatePolicy(e)},this.handleRemoveNamedPort=e=>{const t={...this.props.formik.values.loadBalancingPolicy||{}};t.namedPorts=(t.namedPorts||[]).filter((t,a)=>a!==e),this.updatePolicy(t)},this.handlePolicyFieldChanged=(e,t)=>{const a={...this.props.formik.values.loadBalancingPolicy||{},[e]:t};this.updatePolicy(a)},this.handleRefresh=()=>{const e=dl(this.props.formik.values.loadBalancers);this.runLatestCommandRequest(this.props.formik.values,async t=>{const a=await this.adapter.applyConfigurationRefresh(t,"refreshLoadBalancers");return{...a.command,loadBalancers:e,viewState:{...a.command.viewState,dirty:a.result.dirty}}})}}validate(e){return{...super.validate(e),...Vi(e)}}render(){const e=this.props.formik.values,t=dl(e.loadBalancers),a=function(e,t){const a=new Set(e.map(({name:e})=>e));return[...e.map(e=>({...e,unavailable:!1})).sort((e,t)=>e.name.localeCompare(t.name)),...t.filter(e=>!a.has(e)).map(e=>({name:e,unavailable:!0}))]}(function(e){var t,a;const n=ol(e);if(n)return cl(n.map(t=>function(e,t){if("EXTERNAL_MANAGED"!==t.loadBalancerType)return t;const a=Object.values(Wi(e)).find(e=>"EXTERNAL_MANAGED"===e.loadBalancerType&&(e.listeners||[]).some(({name:e})=>e===t.name));return(null==a?void 0:a.name)?{...t,name:a.name}:t}(e,t)));const r=null==(a=null==(t=e.backingData)?void 0:t.filtered)?void 0:a.loadBalancers;if(!Array.isArray(r))return[];return cl(r.map(sl).filter(e=>Boolean(e)))}(e),t),n=e.loadBalancingPolicy||{},r=this.validate(e),i=r.loadBalancingPolicy||{namedPorts:[]},l=Zi(e);/* @__PURE__ */
|
|
88
|
+
return Be.createElement("div",{className:"container-fluid form-horizontal"},/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-server-group-load-balancers"},"Load Balancers"),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{"aria-label":"Load balancers",className:"form-control input-sm",id:"gce-server-group-load-balancers",multiple:!0,onChange:this.handleLoadBalancersChanged,value:t},a.map(({name:e,unavailable:t})=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e,t?" (unavailable)":""))),r.loadBalancers&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:"gce-server-group-load-balancers-error",role:"alert"},r.loadBalancers)),/* @__PURE__ */Be.createElement("div",{className:"col-md-1"},/* @__PURE__ */Be.createElement("button",{"aria-label":"Refresh load balancers",className:"btn btn-default btn-sm",onClick:this.handleRefresh,type:"button"},
|
|
89
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-refresh"})))),t.map(t=>this.renderBackendServiceSelector(e,t)),t.length>0&&l.length>0&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-balancing-mode"},"Balancing mode"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("select",{"aria-describedby":i.balancingMode?qi("balancingMode"):void 0,"aria-invalid":Boolean(i.balancingMode),"aria-label":"Balancing mode",className:"form-control input-sm",id:"gce-balancing-mode",onChange:this.handleBalancingModeChanged,required:!0,value:n.balancingMode||""},!n.balancingMode&&/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),l.map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e))),ji(i.balancingMode,qi("balancingMode")))),this.renderNamedPorts(e,n,i.namedPorts||[]),this.renderPercentageInput("Capacity scaler","capacityScaler",n.capacityScaler,e,i.capacityScaler),"UTILIZATION"===n.balancingMode&&this.renderPercentageInput("Max utilization","maxUtilization",n.maxUtilization,e,i.maxUtilization),"RATE"===n.balancingMode&&this.renderNumberInput("Max rate per instance","maxRatePerInstance",n.maxRatePerInstance,e,i.maxRatePerInstance),"CONNECTION"===n.balancingMode&&this.renderNumberInput("Max connections per instance","maxConnectionsPerInstance",n.maxConnectionsPerInstance,e,i.maxConnectionsPerInstance)))}renderBackendServiceSelector(e,t){var a,n;const r=null==(a=Wi(e)[t])?void 0:a.loadBalancerType;if("REGIONAL_EXTERNAL_NETWORK"===r||"EXTERNAL_MANAGED"===r)return null;const i=Xi(e,t).map(({name:e})=>e),l=dl(null==(n=e.backendServices)?void 0:n[t]);if(!i.length&&!l.length)return null;const o=Qi(i,l);/* @__PURE__ */
|
|
90
|
+
return Be.createElement("div",{className:"form-group",key:t},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-backend-services-${t}`},"Backend services for ",t),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{"aria-label":`Backend services for ${t}`,className:"form-control input-sm",id:`gce-backend-services-${t}`,multiple:!0,onChange:e=>this.handleBackendServicesChanged(t,e),value:l},o.map(({unavailable:e,value:t})=>/* @__PURE__ */Be.createElement("option",{key:t,value:t},t,e?" (unavailable)":"")))))}renderNamedPorts(e,t,a){const n=dl(dl((r=e).loadBalancers).flatMap(e=>Xi(r,e).map(({portName:e})=>e||""))).filter(Boolean);var r;const i=t.namedPorts||[];/* @__PURE__ */
|
|
91
|
+
return Be.createElement(Be.Fragment,null,i.map((t,r)=>{var i,l,o,s,c,d;const u=Qi(n,t.name?[t.name]:[]),m=qi(`namedPortName-${r}`),p=qi(`namedPortPort-${r}`);/* @__PURE__ */
|
|
92
|
+
return Be.createElement("div",{className:"form-group",key:r},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-named-port-name-${r}`},"Named port ",r+1),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("select",{"aria-describedby":(null==(i=a[r])?void 0:i.name)?m:void 0,"aria-invalid":Boolean(null==(l=a[r])?void 0:l.name),"aria-label":`Named port name ${r+1}`,className:"form-control input-sm",id:`gce-named-port-name-${r}`,onChange:e=>this.handleNamedPortChanged(r,"name",e.target.value),required:!0,value:t.name},!t.name&&/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),u.map(({unavailable:e,value:t})=>/* @__PURE__ */Be.createElement("option",{key:t,value:t},t,e?" (unavailable)":""))),ji(null==(o=a[r])?void 0:o.name,m)),/* @__PURE__ */Be.createElement("div",{className:"col-md-2"},/* @__PURE__ */Be.createElement("input",{"aria-describedby":(null==(s=a[r])?void 0:s.port)?p:void 0,"aria-invalid":Boolean(null==(c=a[r])?void 0:c.port),"aria-label":`Named port number ${r+1}`,className:"form-control input-sm",onChange:e=>this.handleNamedPortChanged(r,"port",il(e.target.value)),required:!0,type:el(e)?"text":"number",value:t.port}),ji(null==(d=a[r])?void 0:d.port,p)),/* @__PURE__ */Be.createElement("div",{className:"col-md-1"},/* @__PURE__ */Be.createElement("button",{"aria-label":`Remove named port ${r+1}`,className:"btn btn-default btn-sm",onClick:()=>this.handleRemoveNamedPort(r),type:"button"},
|
|
93
|
+
/* @__PURE__ */Be.createElement("span",{className:"glyphicon glyphicon-trash"}))))}),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-offset-3 col-md-4"},/* @__PURE__ */Be.createElement("button",{"aria-label":"Add named port",className:"btn btn-default btn-sm",onClick:this.handleAddNamedPort,type:"button"},"Add named port"))))}renderPercentageInput(e,t,a,n,r){const i=qi(t);/* @__PURE__ */
|
|
94
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-${t}`},e,/* @__PURE__ */Be.createElement(M,{id:`gce.serverGroup.loadBalancingPolicy.${t}`})),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("div",{className:"input-group"},/* @__PURE__ */Be.createElement("input",{"aria-describedby":r?i:void 0,"aria-invalid":Boolean(r),"aria-label":e,className:"form-control input-sm",id:`gce-${t}`,onChange:e=>this.handlePolicyFieldChanged(t,function(e){if(tl(e))return e;return e.trim()?Number(e)/100:""}(e.target.value)),required:!0,type:el(n)?"text":"number",value:ll(a)}),/* @__PURE__ */Be.createElement("span",{className:"input-group-addon"},"%")),ji(r,i)))}renderNumberInput(e,t,a,n,r){const i=qi(t);/* @__PURE__ */
|
|
95
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-${t}`},e,/* @__PURE__ */Be.createElement(M,{id:`gce.serverGroup.loadBalancingPolicy.${t}`})),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("input",{"aria-describedby":r?i:void 0,"aria-invalid":Boolean(r),"aria-label":e,className:"form-control input-sm",id:`gce-${t}`,onChange:e=>this.handlePolicyFieldChanged(t,il(e.target.value)),required:!0,type:el(n)?"text":"number",value:void 0===a?"":a}),ji(r,i)))}updatePolicy(e){const t=this.props.formik.values;return this.applyPageUpdate({...t,loadBalancingPolicy:e},["backendServices","backendServiceMetadata","loadBalancers","loadBalancerMetadata","loadBalancingPolicy"])}applyPageUpdate(e,t,a=!1){return this.runLatestCommandRequest(e,async e=>{const n=Wi(e),r={...e,loadBalancers:dl(e.loadBalancers).filter(e=>Boolean(n[e]))},i=await this.adapter.applyConfigurationUpdate(r,"configureLoadBalancerOptions"),l={...i.command,loadBalancers:e.loadBalancers,viewState:{...i.command.viewState,dirty:i.result.dirty}};return a&&(l.backendServices={...e.backendServices||{},...i.command.backendServices||{}},l.backendServiceMetadata=dl(Object.values(l.backendServices).flat())),t.forEach(t=>{l[t]=e[t]}),l})}}function Wi(e){var t,a;return(null==(a=null==(t=e.backingData)?void 0:t.filtered)?void 0:a.loadBalancerIndex)||{}}function Xi(e,t){const a=Wi(e)[t];if(!Array.isArray(null==a?void 0:a.backendServices))return[];const n=/* @__PURE__ */new Map;return a.backendServices.forEach(e=>{const t="string"==typeof e?{name:e}:{name:e.name||"",portName:e.portName};t.name&&!n.has(t.name)&&n.set(t.name,t)}),Array.from(n.values())}function Zi(e){var t;const a=Wi(e),n=dl(e.loadBalancers).map(e=>{var t;return null==(t=a[e])?void 0:t.loadBalancerType}).filter(e=>Boolean(e));if(n.includes("REGIONAL_EXTERNAL_NETWORK"))return[];const r=n.map(e=>"HTTP"===e||"INTERNAL_MANAGED"===e||"EXTERNAL_MANAGED"===e?Hi:_i);if(!r.length){const a=null==(t=e.loadBalancingPolicy)?void 0:t.balancingMode;return a?[a]:[]}return r.slice(1).reduce((e,t)=>e.filter(e=>t.includes(e)),r[0])}function Yi(e,t){const a=Object.entries(e.loadBalancerMetadata||{}).reduce((e,[t,a])=>({...e,[t]:dl(a)}),{});return dl(e.loadBalancers).forEach(t=>{const n=Ji(e,t);n&&(a[n.key]=(a[n.key]||[]).filter(e=>!n.names.includes(e)))}),t.forEach(t=>{const n=Ji(e,t);n&&(a[n.key]=dl([...a[n.key]||[],...n.names]))}),a}function Ji(e,t){const a=Wi(e)[t];if(a){if("HTTP"===a.loadBalancerType||"INTERNAL_MANAGED"===a.loadBalancerType||"EXTERNAL_MANAGED"===a.loadBalancerType){const e=dl((a.listeners||[]).map(({name:e})=>e||""));if(!e.length)return;return{key:"HTTP"===a.loadBalancerType?"global-load-balancer-names":"load-balancer-names",names:e}}return{key:"SSL"===a.loadBalancerType||"TCP"===a.loadBalancerType?"global-load-balancer-names":"load-balancer-names",names:[t]}}}function Qi(e,t){const a=dl(e);return[...a.map(e=>({unavailable:!1,value:e})),...dl(t).filter(e=>!a.includes(e)).map(e=>({unavailable:!0,value:e}))]}function el(e){return"createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode}function tl(e){return"string"==typeof e&&/^\s*\$\{.+\}\s*$/.test(e)}function al(e,t,a,n){if(el(t)&&tl(e))return!0;if(!rl(e))return!1;const r=Number(e);return Number.isFinite(r)&&r>=a&&r<=n}function nl(e,t,a){if(el(t)&&tl(e))return!0;if(!rl(e))return!1;const n=Number(e);return Number.isFinite(n)&&n>=a}function rl(e){return null!=e&&("string"!=typeof e||Boolean(e.trim()))}function il(e){return tl(e)?e:e.trim()?Number(e):""}function ll(e){return"number"==typeof e?100*e:void 0===e?"":e}function ol(e){var t;const a=null==(t=e.backingData)?void 0:t.loadBalancers;if(Array.isArray(a))return a.flatMap(e=>Array.isArray(null==e?void 0:e.accounts)?e.accounts:[]).filter(t=>(null==t?void 0:t.name)===e.credentials).flatMap(e=>Array.isArray(null==e?void 0:e.regions)?e.regions:[]).flatMap(e=>Array.isArray(null==e?void 0:e.loadBalancers)?e.loadBalancers:[]).filter(t=>function(e,t){return(null==e?void 0:e.region)===t.region||"global"===(null==e?void 0:e.region)}(t,e)).map(sl).filter(e=>Boolean(e))}function sl(e){if("string"==typeof e)return{name:e};if(e&&"string"==typeof e.name){const{listeners:t,loadBalancerType:a,name:n,region:r}=e;return{listeners:t,loadBalancerType:a,name:n,region:r}}return null}function cl(e){return Array.from(new Map(e.map(e=>[e.name,e])).values())}function dl(e){return Array.isArray(e)?Array.from(new Set(e.filter(e=>"string"==typeof e&&Boolean(e)))):[]}class ul extends Be.Component{constructor(){super(...arguments),this.state={healthChecks:[],loading:!0},this.loadHealthChecks=()=>{this.setState({loading:!0}),(this.props.reader||new $e).listHealthChecks().then(e=>{const t=ei(e.filter(e=>e.account===this.props.account));this.setState({healthChecks:t,loading:!1}),this.normalizeHealthCheck(t)})},this.update=e=>{this.props.onChange({...this.props.policy,...e})},this.getHealthCheckUrl=(e=this.state.healthChecks)=>{const{healthCheck:t,healthCheckKind:a,healthCheckUrl:n}=this.props.policy;if(n)return n;if(null==t?void 0:t.includes("/"))return t;const r=e.filter(e=>e.name===t&&(!a||e.kind===a));return 1===r.length?r[0].selfLink:""}}componentDidMount(){this.loadHealthChecks()}normalizeHealthCheck(e){const t=this.getHealthCheckUrl(e);if(!t)return;const{healthCheckName:a,healthCheckKind:n}=Qr(t);this.props.policy.healthCheckUrl===t&&this.props.policy.healthCheck===a&&this.props.policy.healthCheckKind===n||this.update({healthCheckUrl:t,healthCheck:a,healthCheckKind:n})}render(){var e;const{policy:t}=this.props;/* @__PURE__ */
|
|
96
|
+
return Be.createElement("div",{className:"form-horizontal gce-auto-healing-policy-editor"},/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"Health check"),/* @__PURE__ */Be.createElement("div",{className:"col-md-6"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"health-check",disabled:this.state.loading,value:this.getHealthCheckUrl(),onChange:e=>{const t=e.target.value;if(!t)return void this.update({healthCheckUrl:void 0,healthCheck:void 0,healthCheckKind:void 0});const{healthCheckName:a,healthCheckKind:n}=Qr(t);this.update({healthCheckUrl:t,healthCheck:a,healthCheckKind:n})}},
|
|
97
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),this.state.healthChecks.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.selfLink,value:e.selfLink},e.displayName))))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"Initial delay"),/* @__PURE__ */Be.createElement("div",{className:"col-md-6 input-group"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm","data-testid":"initial-delay",max:2147483647,min:0,type:"number",value:null!=(e=t.initialDelaySec)?e:"",onChange:e=>{return this.update({initialDelaySec:(t=e.target.value,""===t?void 0:Number(t))});var t}}),/* @__PURE__ */Be.createElement("span",{className:"input-group-addon"},"seconds"))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-offset-4 col-md-6"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",disabled:this.state.loading,type:"button",onClick:this.loadHealthChecks},"Refresh health checks"))))}}var ml=/* @__PURE__ */(e=>(e.NONE="NONE",e.STANDARD="OPTIMIZE_AVAILABILITY",e))(ml||{});function pl(e,t){var a;return{type:t,cloudProvider:"gce",credentials:e.account,region:null!=(a=e.region)?a:e.zone,serverGroupName:e.name}}function hl(e){const t={};return["healthCheck","healthCheckKind","healthCheckUrl","initialDelaySec"].forEach(a=>{void 0!==e[a]&&(t[a]=e[a])}),t}class gl{static upsertAutoscalingPolicy(e,t,a,n={}){return A.executeTask({application:e,description:`Upsert scaling policy ${t.name}`,job:[{...pl(t,"upsertScalingPolicy"),autoscalingPolicy:a,...n}]})}static deleteAutoscalingPolicy(e,t){return A.executeTask({application:e,description:`Delete scaling policy ${t.name}`,job:[pl(t,"deleteScalingPolicy")]})}static upsertAutoHealingPolicy(e,t,a){return A.executeTask({application:e,description:`Upsert autohealing policy ${t.name}`,job:[{...pl(t,"upsertScalingPolicy"),autoHealingPolicy:hl(a)}]})}static deleteAutoHealingPolicy(e,t){return A.executeTask({application:e,description:`Delete autohealing policy ${t.name}`,job:[{...pl(t,"deleteScalingPolicy"),deleteAutoHealingPolicy:!0}]})}}const vl=/* @__PURE__ */JSON.parse('["Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Asmera","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Timbuktu","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/ComodRivadavia","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Atka","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Catamarca","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Coral_Harbour","America/Cordoba","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Ensenada","America/Fort_Nelson","America/Fort_Wayne","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Inuvik","America/Iqaluit","America/Jamaica","America/Jujuy","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Knox_IN","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Louisville","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Mendoza","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Nuuk","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port_of_Spain","America/Port-au-Prince","America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Rosario","America/Santa_Isabel","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Shiprock","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Virgin","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan","Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar","Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/ACT","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/LHI","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/North","Australia/NSW","Australia/Perth","Australia/Queensland","Australia/South","Australia/Sydney","Australia/Tasmania","Australia/Victoria","Australia/West","Australia/Yancowinna","Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West","Canada/Atlantic","Canada/Central","Canada/Eastern","Canada/Mountain","Canada/Newfoundland","Canada/Pacific","Canada/Saskatchewan","Canada/Yukon","CET","Chile/Continental","Chile/EasterIsland","CST6CDT","Cuba","EET","Egypt","Eire","EST","EST5EDT","Etc/GMT","Etc/GMT-0","Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12","Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3","Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8","Etc/GMT-9","Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11","Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5","Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/Universal","Etc/UTC","Etc/Zulu","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belfast","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","GB","GB-Eire","GMT","GMT-0","GMT+0","GMT0","Greenwich","Hongkong","HST","Iceland","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Iran","Israel","Jamaica","Japan","Kwajalein","Libya","MET","Mexico/BajaNorte","Mexico/BajaSur","Mexico/General","MST","MST7MDT","Navajo","NZ","NZ-CHAT","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kanton","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap","Poland","Portugal","PRC","PST8PDT","ROC","ROK","Singapore","Turkey","UCT","Universal","US/Alaska","US/Aleutian","US/Arizona","US/Central","US/East-Indiana","US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan","US/Mountain","US/Pacific","US/Samoa","UTC","W-SU","WET","Zulu"]');function fl(e){return""===e?void 0:Number(e)}function bl(e){return void 0===e?"":100*e}function yl({policy:e,onChange:t,predictiveAutoscalingEnabled:a=Boolean(Ha.feature.predictiveAutoscaling)}){var n,r,i,l,o,s,c,d,u;const m=(a,n)=>{t({...e,[a]:n})},p=e.customMetricUtilizations||[],h=e.scalingSchedules||[],g=Boolean(e.cpuUtilization&&Object.keys(e.cpuUtilization).length),v=Boolean(e.loadBalancingUtilization&&Object.keys(e.loadBalancingUtilization).length),f="number"==typeof(null==(r=null==(n=e.scaleInControl)?void 0:n.maxScaledInReplicas)?void 0:r.percent)?"percent":"fixed",b=null==(l=null==(i=e.scaleInControl)?void 0:i.maxScaledInReplicas)?void 0:l[f],y=(e,t)=>{m("customMetricUtilizations",p.map((a,n)=>n===e?{...a,...t}:a))},E=(e,t)=>{m("scalingSchedules",h.map((a,n)=>n===e?{...a,...t}:a))};/* @__PURE__ */
|
|
98
|
+
return Be.createElement("div",{className:"form-horizontal gce-autoscaling-policy-editor"},/* @__PURE__ */Be.createElement("h4",null,"Capacity"),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"Minimum number of instances"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm","data-testid":"minimum-replicas",min:0,type:"number",value:null!=(o=e.minNumReplicas)?o:"",onChange:e=>m("minNumReplicas",fl(e.target.value))}))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"Maximum number of instances"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm","data-testid":"maximum-replicas",min:null!=(s=e.minNumReplicas)?s:0,type:"number",value:null!=(c=e.maxNumReplicas)?c:"",onChange:e=>m("maxNumReplicas",fl(e.target.value))}))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"Cool-down period (seconds)"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm","data-testid":"cooldown",min:15,type:"number",value:null!=(d=e.coolDownPeriodSec)?d:"",onChange:e=>m("coolDownPeriodSec",fl(e.target.value))}))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"Mode"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"mode",value:e.mode||"ON",onChange:e=>m("mode",e.target.value)},
|
|
99
|
+
/* @__PURE__ */Be.createElement("option",{value:"ON"},"ON"),
|
|
100
|
+
/* @__PURE__ */Be.createElement("option",{value:"OFF"},"OFF"),
|
|
101
|
+
/* @__PURE__ */Be.createElement("option",{value:"ONLY_SCALE_OUT"},"ONLY_SCALE_OUT")))),/* @__PURE__ */Be.createElement("h4",null,"Metrics"),g?/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"CPU utilization target (%)"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm","data-testid":"cpu-target",max:99,min:0,type:"number",value:bl(e.cpuUtilization.utilizationTarget),onChange:t=>m("cpuUtilization",{...e.cpuUtilization,utilizationTarget:""===t.target.value?void 0:fl(t.target.value)/100})}),/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("cpuUtilization",{})},"Delete CPU metric")),a&&/* @__PURE__ */Be.createElement("div",{className:"col-md-4 checkbox"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{"data-testid":"predictive-autoscaling",type:"checkbox",checked:e.cpuUtilization.predictiveMethod===ml.STANDARD,onChange:t=>m("cpuUtilization",{...e.cpuUtilization,predictiveMethod:t.target.checked?ml.STANDARD:ml.NONE})})," ","Enable predictive autoscaling"))):/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("cpuUtilization",{utilizationTarget:void 0})},"Add CPU utilization metric"),v?/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"HTTP load-balancing target (%)"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm","data-testid":"http-lb-target",max:99,min:0,type:"number",value:bl(e.loadBalancingUtilization.utilizationTarget),onChange:e=>m("loadBalancingUtilization",{utilizationTarget:""===e.target.value?void 0:fl(e.target.value)/100})}),/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("loadBalancingUtilization",{})},"Delete HTTP load-balancing metric"))):/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("loadBalancingUtilization",{utilizationTarget:void 0})},"Add HTTP load-balancing metric"),p.map((e,t)=>{var a,n;/* @__PURE__ */
|
|
102
|
+
return Be.createElement("fieldset",{key:t,className:"well well-sm"},/* @__PURE__ */Be.createElement("legend",null,"Custom metric ",t+1),/* @__PURE__ */Be.createElement("input",{"aria-label":"Metric identifier",className:"form-control input-sm","data-testid":`custom-metric-name-${t}`,placeholder:"Metric identifier",value:e.metric||"",onChange:e=>y(t,{metric:e.target.value})}),/* @__PURE__ */Be.createElement("input",{"aria-label":"Additional filter expression",className:"form-control input-sm",placeholder:"Additional filter expression",value:e.filter||"",onChange:e=>y(t,{filter:e.target.value})}),/* @__PURE__ */Be.createElement("select",{"aria-label":"Metric export scope",className:"form-control input-sm",value:e.metricExportScope||"",onChange:a=>{const n=a.target.value,{scalingpolicy:r,singleInstanceAssignment:i,...l}=e;m("customMetricUtilizations",p.map((e,a)=>a===t?"TIME_SERIES_PER_INSTANCE"===n?{...l,metricExportScope:n}:{...e,metricExportScope:n,scalingpolicy:"UTILIZATION_TARGET"}:e))}},
|
|
103
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select export scope"),
|
|
104
|
+
/* @__PURE__ */Be.createElement("option",{value:"TIME_SERIES_PER_INSTANCE"},"Time series per instance"),
|
|
105
|
+
/* @__PURE__ */Be.createElement("option",{value:"SINGLE_TIME_SERIES_PER_GROUP"},"Single time series per group")),"SINGLE_TIME_SERIES_PER_GROUP"===e.metricExportScope&&/* @__PURE__ */Be.createElement("select",{"aria-label":"Scaling policy",className:"form-control input-sm",value:e.scalingpolicy||"",onChange:e=>((e,t)=>{const a=p[e];let n;if("SINGLE_INSTANCE_ASSIGNMENT"===t){const{utilizationTarget:e,utilizationTargetType:t,...r}=a;n=r}else{const{singleInstanceAssignment:e,...t}=a;n=t}m("customMetricUtilizations",p.map((a,r)=>r===e?{...n,scalingpolicy:t}:a))})(t,e.target.value)},
|
|
106
|
+
/* @__PURE__ */Be.createElement("option",{value:"UTILIZATION_TARGET"},"Utilization target"),
|
|
107
|
+
/* @__PURE__ */Be.createElement("option",{value:"SINGLE_INSTANCE_ASSIGNMENT"},"Single instance assignment")),"SINGLE_INSTANCE_ASSIGNMENT"===e.scalingpolicy?/* @__PURE__ */Be.createElement("input",{"aria-label":"Single instance assignment",className:"form-control input-sm",min:0,type:"number",value:null!=(a=e.singleInstanceAssignment)?a:"",onChange:e=>y(t,{singleInstanceAssignment:fl(e.target.value)})}):/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("input",{"aria-label":"Utilization target",className:"form-control input-sm","data-testid":`custom-metric-target-${t}`,type:"number",value:null!=(n=e.utilizationTarget)?n:"",onChange:e=>y(t,{utilizationTarget:fl(e.target.value)})}),/* @__PURE__ */Be.createElement("select",{"aria-label":"Utilization target type",className:"form-control input-sm",value:e.utilizationTargetType||"",onChange:e=>y(t,{utilizationTargetType:e.target.value})},
|
|
108
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select target type"),
|
|
109
|
+
/* @__PURE__ */Be.createElement("option",{value:"GAUGE"},"Gauge"),
|
|
110
|
+
/* @__PURE__ */Be.createElement("option",{value:"DELTA_PER_SECOND"},"Delta / second"),
|
|
111
|
+
/* @__PURE__ */Be.createElement("option",{value:"DELTA_PER_MINUTE"},"Delta / minute"))),/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("customMetricUtilizations",p.filter((e,a)=>a!==t))},"Delete custom metric"))}),/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("customMetricUtilizations",[...p,{}])},"Add custom metric"),/* @__PURE__ */Be.createElement("h4",null,"Scale-in controls"),/* @__PURE__ */Be.createElement("label",{className:"checkbox-inline"},/* @__PURE__ */Be.createElement("input",{"data-testid":"scale-in-enabled",type:"checkbox",checked:Boolean(e.scaleInControl),onChange:e=>m("scaleInControl",e.target.checked?{maxScaledInReplicas:{percent:0},timeWindowSec:60}:void 0)})," ","Enable scale-in controls"),e.scaleInControl&&/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-4 control-label"},"Max scaled-in replicas"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm","data-testid":"scale-in-maximum",min:0,type:"number",value:null!=b?b:"",onChange:t=>m("scaleInControl",{...e.scaleInControl,maxScaledInReplicas:{[f]:fl(t.target.value)}})}),/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm","data-testid":"scale-in-unit",value:f,onChange:t=>m("scaleInControl",{...e.scaleInControl,maxScaledInReplicas:{[t.target.value]:b}})},
|
|
112
|
+
/* @__PURE__ */Be.createElement("option",{value:"percent"},"percent"),
|
|
113
|
+
/* @__PURE__ */Be.createElement("option",{value:"fixed"},"fixed")),/* @__PURE__ */Be.createElement("input",{"aria-label":"Scale-in time window in seconds",className:"form-control input-sm",max:3600,min:60,type:"number",value:null!=(u=e.scaleInControl.timeWindowSec)?u:"",onChange:t=>m("scaleInControl",{...e.scaleInControl,timeWindowSec:fl(t.target.value)})}))),/* @__PURE__ */Be.createElement("h4",null,"Scaling schedules"),h.map((e,t)=>{var a,n,r;/* @__PURE__ */
|
|
114
|
+
return Be.createElement("fieldset",{key:t,className:"well well-sm"},/* @__PURE__ */Be.createElement("legend",null,"Schedule ",t+1),/* @__PURE__ */Be.createElement("input",{"aria-label":"Schedule name",className:"form-control input-sm",value:e.scheduleName||"",onChange:e=>E(t,{scheduleName:e.target.value})}),/* @__PURE__ */Be.createElement("input",{"aria-label":"Schedule description",className:"form-control input-sm",value:e.scheduleDescription||"",onChange:e=>E(t,{scheduleDescription:e.target.value})}),/* @__PURE__ */Be.createElement("label",{className:"checkbox-inline"},/* @__PURE__ */Be.createElement("input",{"data-testid":`schedule-enabled-${t}`,type:"checkbox",checked:null!=(a=e.enabled)&&a,onChange:e=>E(t,{enabled:e.target.checked})})," ","Enabled"),/* @__PURE__ */Be.createElement("input",{"aria-label":"Minimum required instances",className:"form-control input-sm","data-testid":`schedule-minimum-${t}`,min:0,type:"number",value:null!=(n=e.minimumRequiredInstances)?n:"",onChange:e=>E(t,{minimumRequiredInstances:fl(e.target.value)})}),/* @__PURE__ */Be.createElement("input",{"aria-label":"CRON expression",className:"form-control input-sm",value:e.scheduleCron||"",onChange:e=>E(t,{scheduleCron:e.target.value})}),/* @__PURE__ */Be.createElement("select",{"aria-label":"Time zone",className:"form-control input-sm","data-testid":`schedule-timezone-${t}`,value:e.timezone||"",onChange:e=>E(t,{timezone:e.target.value})},
|
|
115
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select time zone"),vl.map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e))),/* @__PURE__ */Be.createElement("input",{"aria-label":"Duration in seconds",className:"form-control input-sm",min:301,type:"number",value:null!=(r=e.duration)?r:"",onChange:e=>E(t,{duration:fl(e.target.value)})}),/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("scalingSchedules",h.filter((e,a)=>a!==t))},"Delete schedule"))}),/* @__PURE__ */Be.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>m("scalingSchedules",[...h,{}])},"Add scaling schedule"))}function El(e,t,a=2147483647){return"number"==typeof e&&Number.isFinite(e)&&Number.isInteger(e)&&e>=t&&e<=a}function kl(e,t){return"number"==typeof e&&Number.isFinite(e)&&e>0&&(void 0===t||e<t)}function Cl(e){var t;return!(!(null==(t=e.metric)?void 0:t.trim())||!e.metricExportScope)&&("SINGLE_TIME_SERIES_PER_GROUP"===e.metricExportScope&&"SINGLE_INSTANCE_ASSIGNMENT"===e.scalingpolicy?"number"==typeof e.singleInstanceAssignment&&Number.isFinite(e.singleInstanceAssignment)&&e.singleInstanceAssignment>=0:("SINGLE_TIME_SERIES_PER_GROUP"!==e.metricExportScope||"UTILIZATION_TARGET"===e.scalingpolicy)&&(kl(e.utilizationTarget)&&Boolean(e.utilizationTargetType)))}class Nl extends pi{constructor(){super(...arguments),this.setField=(e,t)=>{this.props.formik.setFieldValue(e,t)},this.toggleAutoscaling=e=>{var t,a,n,r,i;const{values:l}=this.props.formik,o=l.autoscalingPolicy;if(this.setField("overwriteAncestorAutoscalingPolicy",!e&&"clone"===(null==(t=l.viewState)?void 0:t.mode)&&Boolean(o)),e){const e=null!=(n=null==(a=l.capacity)?void 0:a.desired)?n:1;return void this.setAutoscalingPolicy(o||{minNumReplicas:e,maxNumReplicas:e,coolDownPeriodSec:60,cpuUtilization:{utilizationTarget:.5}})}this.setField("enableAutoScaling",!1),this.setField("autoscalingPolicy",null),this.setField("source",{...l.source,useSourceCapacity:!1}),this.setField("viewState",{...l.viewState,useSimpleCapacity:!0});const s=null!=(i=null==(r=l.capacity)?void 0:r.desired)?i:1;this.setField("capacity",{min:s,max:s,desired:s})},this.setAutoscalingPolicy=e=>{var t;const{values:a}=this.props.formik,n=e.minNumReplicas,r=e.maxNumReplicas,i=function(e,t,a){var n,r;if("number"==typeof e&&"number"==typeof t&&"number"==typeof a)return Math.min(a,Math.max(t,e));return null!=(r=null!=(n=null!=e?e:t)?n:a)?r:1}(null==(t=a.capacity)?void 0:t.desired,n,r);this.setField("enableAutoScaling",!0),this.setField("autoscalingPolicy",e),this.setField("source",{...a.source,useSourceCapacity:!1}),this.setField("viewState",{...a.viewState,useSimpleCapacity:!1}),this.setField("capacity",{...a.capacity,min:n,max:r,desired:i})},this.toggleAutohealing=e=>{var t;const{values:a}=this.props.formik,n=a.autoHealingPolicy;this.setField("enableAutoHealing",e),this.setField("overwriteAncestorAutoHealingPolicy",!e&&"clone"===(null==(t=a.viewState)?void 0:t.mode)&&Boolean(n)),e&&!n&&this.setField("autoHealingPolicy",{initialDelaySec:300})}}validate(e){return function(e){var t,a;const n={};if(e.autoscalingPolicy){const a=e.autoscalingPolicy,r={},i=El(a.minNumReplicas,0),l=El(a.maxNumReplicas,0);i||(r.minNumReplicas="Minimum capacity must be a nonnegative integer."),l?i&&a.maxNumReplicas<a.minNumReplicas&&(r.maxNumReplicas="Maximum capacity must be at least the minimum capacity."):r.maxNumReplicas="Maximum capacity must be a nonnegative integer.",El(a.coolDownPeriodSec,15)||(r.coolDownPeriodSec="Cool-down period must be an integer of at least 15 seconds."),function(e){var t,a;const n=Boolean(e.cpuUtilization&&Object.keys(e.cpuUtilization).length),r=Boolean(e.loadBalancingUtilization&&Object.keys(e.loadBalancingUtilization).length),i=e.customMetricUtilizations||[],l=!n||kl(null==(t=e.cpuUtilization)?void 0:t.utilizationTarget,1),o=!r||kl(null==(a=e.loadBalancingUtilization)?void 0:a.utilizationTarget,1);return l&&o&&i.every(Cl)&&(n&&l||r&&o||i.length>0&&i.every(Cl))}(a)||(r.metric="At least one complete autoscaling metric required."),function(e){return(e.scalingSchedules||[]).every(t=>{var a,n,r;return Boolean(null==(a=t.scheduleName)?void 0:a.trim())&&El(t.minimumRequiredInstances,0,e.maxNumReplicas)&&Boolean(null==(n=t.scheduleCron)?void 0:n.trim())&&Boolean(null==(r=t.timezone)?void 0:r.trim())&&El(t.duration,301,1209600)})}(a)||(r.scalingSchedules="Every scaling schedule must be complete and within supported bounds."),function(e){if(!e.scaleInControl)return!0;const{maxScaledInReplicas:t,timeWindowSec:a}=e.scaleInControl,n=void 0!==(null==t?void 0:t.fixed),r=void 0!==(null==t?void 0:t.percent);return!(n===r||!El(a,60,3600))&&(r?El(null==t?void 0:t.percent,0,100):El(null==t?void 0:t.fixed,0))}(a)||(r.scaleInControl="Scale-in control values are outside supported bounds.");(null==(t=a.cpuUtilization)?void 0:t.predictiveMethod)===ml.STANDARD&&!Ha.feature.predictiveAutoscaling&&(r.predictiveAutoscaling="Predictive autoscaling is not enabled."),Object.keys(r).length&&(n.autoscalingPolicy=r)}if(e.enableAutoHealing){const t=e.autoHealingPolicy||{},r={};(null==(a=t.healthCheck)?void 0:a.trim())||(r.healthCheck="Health check required."),t.healthCheckKind||(r.healthCheckKind="Health check kind required."),El(t.initialDelaySec,0)||(r.initialDelaySec="Initial delay must be an integer between 0 and 2147483647 seconds."),Object.keys(r).length&&(n.autoHealingPolicy=r)}return n}(e)}filteredHealthCheckReader(){var e,t;const{values:a}=this.props.formik,n=(null==(t=null==(e=a.backingData)?void 0:e.filtered)?void 0:t.healthChecks)||[];return{listHealthChecks:()=>Promise.resolve(n.map(e=>({...e,account:a.credentials})))}}render(){var e;const{values:t}=this.props.formik,a=Boolean(t.autoscalingPolicy),n=null!=(e=t.enableAutoHealing)?e:Boolean(t.autoHealingPolicy);/* @__PURE__ */
|
|
116
|
+
return Be.createElement("div",{className:"container-fluid form-horizontal","data-testid":"gce-policies-page"},/* @__PURE__ */Be.createElement("section",null,/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-4 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Enable Autoscaling")),/* @__PURE__ */Be.createElement("div",{className:"col-md-6 checkbox"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:a,"data-testid":"enable-autoscaling",onChange:e=>this.toggleAutoscaling(e.target.checked),type:"checkbox"}),/* @__PURE__ */Be.createElement("span",{className:"sr-only"},"Enable Autoscaling")))),a&&/* @__PURE__ */Be.createElement(yl,{policy:t.autoscalingPolicy||{},onChange:this.setAutoscalingPolicy})),/* @__PURE__ */Be.createElement("section",null,/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-4 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Enable Autohealing")),/* @__PURE__ */Be.createElement("div",{className:"col-md-6 checkbox"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{checked:n,"data-testid":"enable-autohealing",onChange:e=>this.toggleAutohealing(e.target.checked),type:"checkbox"}),/* @__PURE__ */Be.createElement("span",{className:"sr-only"},"Enable Autohealing")))),n&&/* @__PURE__ */Be.createElement(ul,{key:t.credentials||"",account:t.credentials||"",policy:t.autoHealingPolicy||{},reader:this.filteredHealthCheckReader(),onChange:e=>this.setField("autoHealingPolicy",e)})))}}class Tl extends pi{constructor(){super(...arguments),this.parentChanged=(e,t,a)=>{const n={...this.props.formik.values,[e]:t};return this.runLatestCommandRequest(n,async e=>(await this.adapter.applyCommandHandler(e,a)).command)},this.accountChanged=e=>{const t={...this.props.formik.values,credentials:e};return this.runLatestCommandRequest(t,async t=>{const a=await Ve.findImages({account:e,provider:t.selectedProvider,q:"*"}),n={...t,backingData:{...t.backingData,allImages:a}};return(await this.adapter.applyCommandHandler(n,"credentialsChanged")).command})},this.strategyChanged=(e,t)=>{var a;null==(a=e.onStrategyChange)||a.call(e,e,t),this.props.formik.setValues({...e,strategy:t.key})},this.strategyFieldChanged=(e,t)=>{this.props.formik.setFieldValue(e,t)}}validate(e){return function(e){const t=ci(e),a={};t.credentials&&(a.credentials=t.credentials),t.region&&(a.region=t.region),t.zone&&(a.zone=t.zone),t.stack&&(a.stack=t.stack),t.freeFormDetails&&(a.freeFormDetails=t.freeFormDetails);const n=e.viewState.templatingEnabled?/^([a-zA-Z0-9]*(\${.+})*)*$/:/^[a-zA-Z0-9]*$/,r=e.viewState.templatingEnabled?/^([a-zA-Z0-9-]*(\${.+})*)*$/:/^[a-zA-Z0-9-]*$/;return e.stack&&!n.test(e.stack)&&(a.stack="Stack can only contain letters and numbers."),e.freeFormDetails&&!r.test(e.freeFormDetails)&&(a.freeFormDetails="Detail can only contain letters, numbers, and dashes."),a}(e)}renderSelect(e,t,a,n,r){const i=`gce-server-group-${t}`,l=`${i}-error`,o=this.props.formik.values[t],s="regional"===t?o?"regional":"zonal":o||"";/* @__PURE__ */
|
|
117
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:i},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{"aria-describedby":r?l:void 0,"aria-invalid":Boolean(r),"aria-label":e,className:"form-control input-sm",id:i,onChange:e=>n?n(e.target.value):this.props.formik.setFieldValue(t,e.target.value),value:s},
|
|
118
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),a.map(e=>/* @__PURE__ */Be.createElement("option",{disabled:e.unavailable,key:e.value,value:e.value},e.label))),r&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:l,role:"alert"},r)))}renderTextField(e,t,a){const n=`gce-server-group-${t}`,r=`${n}-error`;/* @__PURE__ */
|
|
119
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:n},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("input",{"aria-describedby":a?r:void 0,"aria-invalid":Boolean(a),"aria-label":e,className:"form-control input-sm",id:n,onChange:e=>this.props.formik.setFieldValue(t,e.target.value),type:"text",value:this.props.formik.values[t]||""}),a&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:r,role:"alert"},a)))}render(){var e,t;const{values:a}=this.props.formik,n=(null==(e=a.backingData)?void 0:e.filtered)||{},r=Sl(null==(t=a.backingData)?void 0:t.accounts,a.credentials,["name"]),i=Sl(n.regions,a.region,["name"]),l=Sl(n.zones,a.zone,["name"]),o=Sl(n.networks,a.network,["id","name"]),s=Sl(n.subnets,a.subnet,["id","name"]),c=this.validate(a);/* @__PURE__ */
|
|
120
|
+
return Be.createElement("div",{className:"container-fluid form-horizontal"},this.renderSelect("Account","credentials",r,this.accountChanged,c.credentials),this.renderSelect("Region","region",i,e=>this.parentChanged("region",e,"regionChanged"),c.region),this.renderSelect("Location mode","regional",[{label:"Zonal",value:"zonal"},{label:"Regional",value:"regional"}],e=>this.parentChanged("regional","regional"===e,"regionalChanged")),!a.regional&&this.renderSelect("Zone","zone",l,e=>this.parentChanged("zone",e,"zoneChanged"),c.zone),this.renderSelect("Network","network",o,e=>this.parentChanged("network",e,"networkChanged")),this.renderSelect("Subnet","subnet",s),this.renderTextField("Stack","stack",c.stack),this.renderTextField("Detail","freeFormDetails",c.freeFormDetails),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-3 sm-label-right"},"Traffic"),/* @__PURE__ */Be.createElement("div",{className:"col-md-7 checkbox"},/* @__PURE__ */Be.createElement("label",null,/* @__PURE__ */Be.createElement("input",{"aria-label":"Send client requests to new instances",checked:!1!==a.enableTraffic,onChange:e=>this.props.formik.setFieldValue("enableTraffic",e.target.checked),type:"checkbox"})," ","Send client requests to new instances"))),!a.viewState.disableStrategySelection&&a.selectedProvider&&/* @__PURE__ */Be.createElement("div",{"aria-label":"Deployment strategy",role:"group"},/* @__PURE__ */Be.createElement(W,{command:a,onFieldChange:this.strategyFieldChanged,onStrategyChange:this.strategyChanged})),/* @__PURE__ */Be.createElement(ee,{reason:a.reason||"",onChange:e=>this.props.formik.setFieldValue("reason",e)}))}}function Sl(e,t,a){const n=(e||[]).map(e=>function(e,t){if("string"==typeof e)return e;return t.map(t=>null==e?void 0:e[t]).find(Boolean)||""}(e,a)).filter(Boolean);return si(n,t,e=>e,e=>e).map(({unresolved:e,value:t})=>({label:e?`${t} (unavailable)`:t,unavailable:e,value:t}))}const Al=/* @__PURE__ */new Set(["BALANCED","ANY","ANY_SINGLE_ZONE"]),Pl="gce-instance-flexibility-error";function wl(e){const t=null==e?void 0:e.trim();if(t)return t.substring(t.lastIndexOf("/")+1).toLowerCase()}function Il(e){const t=/* @__PURE__ */new Set;for(const a of Object.values((null==e?void 0:e.instanceSelections)||{}))for(const e of(null==a?void 0:a.machineTypes)||[]){const a=wl(e);if(a&&t.has(a))return!1;a&&t.add(a)}return!0}function Ml(e){return null==(null==e?void 0:e.rank)||Number.isFinite(e.rank)&&Number.isInteger(e.rank)&&e.rank>=0}function Rl({instanceFlexibilityPolicy:e,regional:t,targetShape:a,validationError:n,setInstanceFlexibilityPolicy:r}){const i=e||{instanceSelections:{}},l=Object.entries(i.instanceSelections||{}),o=l.length>0,s=(a||"").trim().toUpperCase(),c=o&&!t,d=o&&(!s||"EVEN"===s||!Al.has(s)),u=o&&!Il(i),m=e=>{r({instanceSelections:e})},p=()=>{const e=function(e){const t=new Set(e);let a=1;for(;t.has(`selection-${a}`);)a+=1;return`selection-${a}`}(Object.keys(i.instanceSelections||{}));m({...i.instanceSelections,[e]:{machineTypes:[""]}})},h=(e,t)=>{m({...i.instanceSelections,[e]:t})};/* @__PURE__ */
|
|
121
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-3 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Instance Flexibility")," ",/* @__PURE__ */Be.createElement(M,{id:"gce.serverGroup.instanceFlexibilityPolicy"})),/* @__PURE__ */Be.createElement("div",{className:"col-md-9"},n&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger",id:Pl,role:"alert"},n),!o&&/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:p},"Add flexibility policy"),o&&/* @__PURE__ */Be.createElement("div",null,c&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-warning"},"Flexibility requires a regional server group."),d&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-warning"},"Flexibility requires target shape BALANCED, ANY, or ANY_SINGLE_ZONE (not EVEN)."),u&&/* @__PURE__ */Be.createElement("div",{className:"alert alert-warning",role:"alert"},"Machine types must be unique across instance selections."),l.map(([e,t])=>/* @__PURE__ */Be.createElement("div",{key:e,className:"well well-sm",style:{marginBottom:"10px"},"data-selection-name":e},(()=>{const a=`instance-flexibility-selection-${encodeURIComponent(e)}`,r=!Ml(t);/* @__PURE__ */
|
|
122
|
+
return Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`${a}-name`},"Selection name"),/* @__PURE__ */Be.createElement("div",{className:"col-md-6"},/* @__PURE__ */Be.createElement("input",{id:`${a}-name`,className:"form-control input-sm",defaultValue:e,onBlur:t=>{((e,t)=>{const a=t.trim();if(!a||a===e||i.instanceSelections[a])return!1;const n={};return Object.entries(i.instanceSelections).forEach(([t,r])=>{n[t===e?a:t]=r}),m(n),!0})(e,t.currentTarget.value)||(t.currentTarget.value=e)}})),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default","aria-label":`Remove selection ${e}`,onClick:()=>(e=>{const t={...i.instanceSelections};delete t[e],m(t)})(e)},"Remove"))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`${a}-rank`},"Rank (optional)"),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("input",{id:`${a}-rank`,type:"number",min:0,step:1,className:"form-control input-sm","aria-describedby":r&&n?Pl:void 0,"aria-invalid":r,value:null==t.rank?"":t.rank,onChange:t=>((e,t)=>{const a=i.instanceSelections[e];if(""===t){const{rank:t,...n}=a;return void h(e,n)}const n=Number(t);Number.isFinite(n)&&Number.isInteger(n)&&n>=0&&h(e,{...a,rank:n})})(e,t.target.value)}))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-3 sm-label-right"},"Machine types"),/* @__PURE__ */Be.createElement("div",{className:"col-md-9"},(t.machineTypes||[]).map((t,r)=>/* @__PURE__ */Be.createElement("div",{key:r,style:{display:"flex",marginBottom:"4px"}},/* @__PURE__ */Be.createElement("input",{id:`${a}-machine-type-${r}`,className:"form-control input-sm","aria-describedby":!(null==t?void 0:t.trim())&&n?Pl:void 0,"aria-invalid":!(null==t?void 0:t.trim()),value:t,onChange:t=>((e,t,a)=>{const n=i.instanceSelections[e],r=[...n.machineTypes||[]];r[t]=a,h(e,{...n,machineTypes:r})})(e,r,t.target.value),placeholder:"e.g. n2-standard-8","aria-label":`Machine type ${r+1} for selection ${e}`}),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default",style:{marginLeft:"4px"},"aria-label":`Remove machine type ${r+1} from selection ${e}`,onClick:()=>((e,t)=>{const a=i.instanceSelections[e],n=(a.machineTypes||[]).filter((e,a)=>a!==t);h(e,{...a,machineTypes:n.length?n:[""]})})(e,r)},"×"))),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-link",onClick:()=>(e=>{const t=i.instanceSelections[e];h(e,{...t,machineTypes:[...t.machineTypes||[],""]})})(e)},"Add machine type"))))})())),/* @__PURE__ */Be.createElement("button",{type:"button",className:"btn btn-sm btn-default",onClick:p},"Add selection"))))}function Gl(e){var t,a;if(a=e.instanceFlexibilityPolicy,Ge(null==a?void 0:a.instanceSelections))return!0;if(!e.regional)return!1;const n=((null==(t=e.distributionPolicy)?void 0:t.targetShape)||"").trim().toUpperCase();return!!Al.has(n)&&(Object.values(e.instanceFlexibilityPolicy.instanceSelections||{}).every(e=>function(e){const t=(null==e?void 0:e.machineTypes)||[];return t.length>0&&t.every(e=>!!e&&e.trim().length>0)}(e)&&Ml(e))&&Il(e.instanceFlexibilityPolicy))}const Bl="must be a finite non-negative integer.";class Ll extends pi{constructor(){super(...arguments),this.commandChanged=(e,t)=>this.runLatestCommandRequest(e,async e=>{let a=e;for(const n of t)a=(await this.adapter.applyCommandHandler(a,n)).command;return a}),this.capacityChanged=(e,t)=>{const a=function(e,t){if(!e.trim())return;if(zl(t)&&Fl(e))return e;const a=Number(e);return xl(a)?a:void 0}(t,this.props.formik.values);if(void 0===a)return;const{values:n}=this.props.formik;if(!n.autoscalingPolicy)return void this.props.formik.setFieldValue("capacity",{min:a,max:a,desired:a});if("desired"===e)return void this.props.formik.setFieldValue("capacity",{...n.capacity,desired:a});const r="min"===e?"minNumReplicas":"maxNumReplicas";this.props.formik.setFieldValue("autoscalingPolicy",{...n.autoscalingPolicy,[r]:a}),this.props.formik.setFieldValue("capacity",{...n.capacity,[e]:a})},this.capacityModeChanged=e=>{var t,a,n,r;const{values:i}=this.props.formik;if(this.props.formik.setFieldValue("overwriteAncestorAutoscalingPolicy",e&&"clone"===(null==(t=i.viewState)?void 0:t.mode)&&Boolean(i.autoscalingPolicy)),this.props.formik.setFieldValue("viewState",{...i.viewState,useSimpleCapacity:e}),this.props.formik.setFieldValue("source",{...i.source,useSourceCapacity:!1}),e){if(this.props.formik.setFieldValue("enableAutoScaling",!1),this.props.formik.setFieldValue("autoscalingPolicy",null),Dl(null==(a=i.capacity)?void 0:a.desired,i)){const e=i.capacity.desired;this.props.formik.setFieldValue("capacity",{min:e,max:e,desired:e})}return}const l=null!=(r=null==(n=i.capacity)?void 0:n.desired)?r:1,o=i.autoscalingPolicy||{minNumReplicas:l,maxNumReplicas:l,coolDownPeriodSec:60,cpuUtilization:{utilizationTarget:.5}};this.props.formik.setFieldValue("enableAutoScaling",!0),this.props.formik.setFieldValue("autoscalingPolicy",o),this.props.formik.setFieldValue("capacity",{...i.capacity,min:o.minNumReplicas,max:o.maxNumReplicas,desired:Ol(l,o.minNumReplicas,o.maxNumReplicas)})},this.regionalChanged=e=>{this.commandChanged({...this.props.formik.values,regional:e},["regionalChanged","regionChanged","zoneChanged","selectZonesChanged"])},this.zoneChanged=e=>{this.commandChanged({...this.props.formik.values,zone:e},["zoneChanged","selectZonesChanged"])},this.selectZonesChanged=e=>{this.commandChanged({...this.props.formik.values,selectZones:e},["selectZonesChanged","zoneChanged"])},this.selectedZoneChanged=(e,t)=>{var a;const n=this.props.formik.values,r=(null==(a=n.distributionPolicy)?void 0:a.zones)||[],i=t?Array.from(/* @__PURE__ */new Set([...r,e])):r.filter(t=>t!==e),l={...n,distributionPolicy:{...n.distributionPolicy,zones:i}};this.commandChanged(l,["selectZonesChanged","zoneChanged"])},this.targetShapeChanged=e=>{const{values:t}=this.props.formik;this.props.formik.setFieldValue("distributionPolicy",{...t.distributionPolicy,targetShape:e})},this.instanceFlexibilityPolicyChanged=e=>{this.props.formik.setFieldValue("instanceFlexibilityPolicy",e)}}validate(e){return function(e){var t,a,n,r,i,l;const o={},s=null==(t=e.capacity)?void 0:t.desired;if(Dl(s,e)||(o.capacity={desired:`Desired capacity ${Bl}`}),e.autoscalingPolicy){const t=null==(a=e.autoscalingPolicy)?void 0:a.minNumReplicas,r=null==(n=e.autoscalingPolicy)?void 0:n.maxNumReplicas;Dl(t,e)||(o.autoscalingPolicy={...o.autoscalingPolicy,minNumReplicas:`Minimum capacity ${Bl}`}),Dl(r,e)||(o.autoscalingPolicy={...o.autoscalingPolicy,maxNumReplicas:`Maximum capacity ${Bl}`}),xl(s)&&xl(t)&&s<t?o.capacity={desired:"Desired capacity must be at least minimum capacity."}:xl(s)&&xl(r)&&s>r&&(o.capacity={desired:"Desired capacity must not exceed maximum capacity."})}return e.regional||(null==(r=e.zone)?void 0:r.trim())||(o.zone="Zone required."),e.regional&&e.selectZones&&!(null==(l=null==(i=e.distributionPolicy)?void 0:i.zones)?void 0:l.length)&&(o.distributionPolicy={zones:"At least one zone required."}),Gl(e)||(o.instanceFlexibilityPolicy="Instance flexibility policy is invalid."),o}(e)}renderCapacityInput(e,t,a){const n=`gce-capacity-${t}`,r=function(e,t){var a,n;if("desired"===t)return null==(a=null==e?void 0:e.capacity)?void 0:a.desired;return null==(n=null==e?void 0:e.autoscalingPolicy)?void 0:n["min"===t?"minNumReplicas":"maxNumReplicas"]}(this.props.formik.errors,t);/* @__PURE__ */
|
|
123
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:n},e),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("input",{"aria-describedby":r?`${n}-error`:void 0,"aria-invalid":Boolean(r),"aria-label":`${e} capacity`,className:"form-control input-sm",id:n,min:0,onChange:e=>this.capacityChanged(t,e.target.value),required:!0,step:1,type:zl(this.props.formik.values)?"text":"number",value:null!=a?a:""}),r&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:`${n}-error`,role:"alert"},r)))}renderZonalLocation(){var e,t,a;const n=this.props.formik.values,r=Hl(null==(t=null==(e=n.backingData)?void 0:e.filtered)?void 0:t.zones,n.zone?[n.zone]:[]),i=null==(a=this.props.formik.errors)?void 0:a.zone;/* @__PURE__ */
|
|
124
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-capacity-zone"},"Zone"),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{"aria-describedby":i?"gce-capacity-zone-error":void 0,"aria-invalid":Boolean(i),"aria-label":"Zone",className:"form-control input-sm",id:"gce-capacity-zone",onChange:e=>this.zoneChanged(e.target.value),required:!0,value:n.zone||""},
|
|
125
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),r.map(({unavailable:e,value:t})=>/* @__PURE__ */Be.createElement("option",{key:t,value:t},t,e?" (unavailable)":""))),i&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:"gce-capacity-zone-error",role:"alert"},i)))}renderRegionalDistribution(){var e,t,a,n,r,i;const l=this.props.formik.values,o=(null==(e=l.distributionPolicy)?void 0:e.zones)||[],s=Hl(null==(a=null==(t=l.backingData)?void 0:t.filtered)?void 0:a.zones,o),c=this.props.formik.errors,d=null==(n=null==c?void 0:c.distributionPolicy)?void 0:n.zones,u=(null==(r=l.backingData)?void 0:r.distributionPolicyTargetShapes)||["ANY","EVEN","BALANCED","ANY_SINGLE_ZONE"];/* @__PURE__ */
|
|
126
|
+
return Be.createElement("div",null,/* @__PURE__ */Be.createElement("fieldset",{className:"form-group"},/* @__PURE__ */Be.createElement("legend",{className:"col-md-3 sm-label-right"},"Distribution"),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("label",{className:"radio-inline",htmlFor:"gce-capacity-preferred-zones"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Preferred zone distribution",checked:!l.selectZones,id:"gce-capacity-preferred-zones",name:"gce-capacity-zone-distribution",onChange:e=>e.target.checked&&this.selectZonesChanged(!1),type:"radio"}),"Preferred zones"),/* @__PURE__ */Be.createElement("label",{className:"radio-inline",htmlFor:"gce-capacity-explicit-zones"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Explicit zone distribution",checked:Boolean(l.selectZones),id:"gce-capacity-explicit-zones",name:"gce-capacity-zone-distribution",onChange:e=>e.target.checked&&this.selectZonesChanged(!0),type:"radio"}),"Select zones explicitly"))),l.selectZones&&/* @__PURE__ */Be.createElement("fieldset",{"aria-describedby":d?"gce-capacity-zones-error":void 0,className:"form-group"},/* @__PURE__ */Be.createElement("legend",{className:"col-md-3 sm-label-right"},"Zones"),/* @__PURE__ */Be.createElement("div",{"aria-invalid":Boolean(d),className:"col-md-7"},s.map(({unavailable:e,value:t})=>{const a=`gce-capacity-zone-${t}`;/* @__PURE__ */
|
|
127
|
+
return Be.createElement("div",{className:"checkbox",key:t},/* @__PURE__ */Be.createElement("label",{htmlFor:a},/* @__PURE__ */Be.createElement("input",{"aria-label":`Zone ${t}`,checked:o.includes(t),id:a,onChange:e=>this.selectedZoneChanged(t,e.target.checked),type:"checkbox"}),t,e?" (unavailable)":""))}),d&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:"gce-capacity-zones-error",role:"alert"},d))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-capacity-target-shape"},"Target shape"),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("select",{"aria-label":"Target shape",className:"form-control input-sm",id:"gce-capacity-target-shape",onChange:e=>this.targetShapeChanged(e.target.value),value:(null==(i=l.distributionPolicy)?void 0:i.targetShape)||""},
|
|
128
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),u.map(e=>/* @__PURE__ */Be.createElement("option",{key:e,value:e},e))))))}render(){var e,t,a,n,r;const{values:i}=this.props.formik,l=!i.autoscalingPolicy;/* @__PURE__ */
|
|
129
|
+
return Be.createElement("div",{className:"container-fluid form-horizontal"},/* @__PURE__ */Be.createElement("fieldset",{className:"form-group"},/* @__PURE__ */Be.createElement("legend",{className:"col-md-3 sm-label-right"},"Capacity mode"),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("label",{className:"radio-inline",htmlFor:"gce-capacity-simple"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Simple capacity",checked:l,id:"gce-capacity-simple",name:"gce-capacity-mode",onChange:e=>e.target.checked&&this.capacityModeChanged(!0),type:"radio"}),"Simple"),/* @__PURE__ */Be.createElement("label",{className:"radio-inline",htmlFor:"gce-capacity-autoscaling"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Autoscaling capacity",checked:!l,id:"gce-capacity-autoscaling",name:"gce-capacity-mode",onChange:e=>e.target.checked&&this.capacityModeChanged(!1),type:"radio"}),"Autoscaling"))),!l&&this.renderCapacityInput("Minimum","min",null==(e=i.autoscalingPolicy)?void 0:e.minNumReplicas),!l&&this.renderCapacityInput("Maximum","max",null==(t=i.autoscalingPolicy)?void 0:t.maxNumReplicas),this.renderCapacityInput("Desired","desired",null==(a=i.capacity)?void 0:a.desired),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-3 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Regional")),/* @__PURE__ */Be.createElement("div",{className:"col-md-7 checkbox"},/* @__PURE__ */Be.createElement("label",{htmlFor:"gce-capacity-regional"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Regional server group",checked:i.regional,id:"gce-capacity-regional",onChange:e=>this.regionalChanged(e.target.checked),type:"checkbox"}),"Distribute instances across multiple zones"))),i.regional?this.renderRegionalDistribution():this.renderZonalLocation(),/* @__PURE__ */Be.createElement(Rl,{instanceFlexibilityPolicy:i.instanceFlexibilityPolicy,regional:i.regional,setInstanceFlexibilityPolicy:this.instanceFlexibilityPolicyChanged,targetShape:(null==(n=i.distributionPolicy)?void 0:n.targetShape)||void 0,validationError:null==(r=this.props.formik.errors)?void 0:r.instanceFlexibilityPolicy}))}}function xl(e){return"number"==typeof e&&Number.isFinite(e)&&Number.isInteger(e)&&e>=0}function Dl(e,t){return xl(e)||zl(t)&&Fl(e)}function zl(e){return"createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode}function Fl(e){return"string"==typeof e&&/^\s*\$\{.+\}\s*$/.test(e)}function Ol(e,t,a){var n,r;return"number"==typeof e&&"number"==typeof t&&"number"==typeof a?Math.min(a,Math.max(t,e)):null!=(r=null!=(n=null!=e?e:t)?n:a)?r:1}function Hl(e,t){const a=e||[];return Array.from(/* @__PURE__ */new Set([...a,...t])).map(e=>({unavailable:!a.includes(e),value:e}))}const _l=[{label:"Artifact",value:"artifact"},{label:"Prior Stage",value:"priorStage"}];class Ul extends pi{constructor(){super(...arguments),this.imageArtifactEdited=e=>{this.props.formik.setFieldValue("imageArtifactId",null),this.props.formik.setFieldValue("imageArtifact",e)},this.expectedImageArtifactSelected=e=>{this.props.formik.setFieldValue("imageArtifactId",e.id),this.props.formik.setFieldValue("imageArtifact",null)}}validate(e){return function(e){const t=ci(e).image;return t?{image:t}:{}}(e)}renderImageSource(){const{values:e}=this.props.formik;if(!e.viewState.showImageSourceSelector)return null;const t=e.viewState.imageSourceText?/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-3 sm-label-right"},"Image Source"),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement(te,{tag:"span",message:e.viewState.imageSourceText}))):/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-server-group-image-source"},"Image Source"),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{"aria-label":"Image source",className:"form-control input-sm",id:"gce-server-group-image-source",onChange:e=>this.props.formik.setFieldValue("imageSource",e.target.value),value:e.imageSource||""},si(_l,e.imageSource,e=>e.value,e=>({label:e,value:e})).map(({unresolved:e,value:t})=>/* @__PURE__ */Be.createElement("option",{disabled:e,key:t.value,value:t.value},e?`${t.label} (unavailable)`:t.label)))));/* @__PURE__ */
|
|
130
|
+
return Be.createElement(Be.Fragment,null,t,"artifact"===e.imageSource&&/* @__PURE__ */Be.createElement(ae,{artifact:e.imageArtifact,excludedArtifactTypePatterns:ne(re.CUSTOM_OBJECT),expectedArtifactId:e.imageArtifactId,fieldColumns:7,helpKey:"gce.image.artifact",label:"Expected Artifact",onArtifactEdited:this.imageArtifactEdited,onExpectedArtifactSelected:this.expectedImageArtifactSelected,pipeline:e.viewState.pipeline,stage:e.viewState.stage}))}renderImageSelect(){var e,t,a;const{values:n}=this.props.formik;if(n.viewState.disableImageSelection)/* @__PURE__ */
|
|
131
|
+
return Be.createElement("div",null,"Image selection is disabled for this command.");const r=function(e,t){const a=Array.from(new Set(e.map(e=>"string"==typeof e?e:e.imageName).filter(Boolean)));return si(a,t,e=>e,e=>e).map(({unresolved:e,value:t})=>({label:e?`${t} (unavailable)`:t,unavailable:e,value:t}))}((null==(t=null==(e=n.backingData)?void 0:e.filtered)?void 0:t.images)||(null==(a=n.backingData)?void 0:a.allImages)||[],n.image),i=this.validate(n).image;/* @__PURE__ */
|
|
132
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-server-group-image"},"Image"),/* @__PURE__ */Be.createElement("div",{className:"col-md-7"},/* @__PURE__ */Be.createElement("select",{"aria-describedby":i?"gce-server-group-image-error":void 0,"aria-invalid":Boolean(i),"aria-label":"Image",className:"form-control input-sm",id:"gce-server-group-image",onChange:e=>this.props.formik.setFieldValue("image",e.target.value),required:!0,value:n.image||""},
|
|
133
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),r.map(e=>/* @__PURE__ */Be.createElement("option",{disabled:e.unavailable,key:e.value,value:e.value},e.label))),i&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:"gce-server-group-image-error",role:"alert"},i)))}render(){/* @__PURE__ */
|
|
134
|
+
return Be.createElement("div",{className:"container-fluid form-horizontal"},this.renderImageSource(),this.renderImageSelect())}}const $l=65536;function ql(e){const t={};e.instanceType||(t.instanceType="Machine type required.");const a=ao(e);(null==a?void 0:a.type)&&function(e,t,a,n){if(Wl(t)&&Xl(e))return!0;const r=Number(e);return Number.isFinite(r)&&Number.isInteger(r)&&r>=a&&r<=n}(a.sizeGb,e,10,$l)||(t.disks="Boot disk size must be between 10 and 65536 GB.");const n=eo(e),r=Ql(e);return n.some(t=>{if(!t.acceleratorType||!function(e,t){if(Wl(t)&&Xl(e))return!0;const a=Number(e);return Number.isFinite(a)&&Number.isInteger(a)&&a>0}(t.acceleratorCount,e))return!0;const a=r.find(e=>e.name===t.acceleratorType);return!!a&&!a.availableCardCounts.includes(Number(t.acceleratorCount))})&&(t.acceleratorConfigs="Accelerator count is unavailable for the selected type."),t}const jl=class extends pi{constructor(){super(...arguments),this.instanceTypeRequestGeneration=0,this.publish=e=>{this.props.formik.setValues(e)},this.updateValues=e=>{this.publish({...this.props.formik.values,...e})},this.updateMachineType=e=>{const t=this.props.formik.values,a={...t,instanceType:e,viewState:{...t.viewState,instanceProfile:"custom"}},n=++this.instanceTypeRequestGeneration;this.publish(a),Wl(t)&&ie.includesSpel(e)||this.runLatestCommandRequest(a,async t=>{const a=await this.context.services.instanceTypeService.getInstanceTypeDetails(t.selectedProvider||"gce",e);if(n!==this.instanceTypeRequestGeneration)return t;const r=function(e,t){var a,n;const r=null==(n=null==(a=null==t?void 0:t.storage)?void 0:a.defaultSettings)?void 0:n.disks,i={...e.viewState};r&&delete i.overriddenStorageDescription;return{...e,...r?{disks:r.map(e=>({...e}))}:{},viewState:{...i,instanceTypeDetails:t}}}(t,a),i=await this.adapter.applyCommandHandler(r,"zoneChanged");return n===this.instanceTypeRequestGeneration?i.command:t})},this.updateMachineTypeMode=e=>{const t=this.props.formik.values;e?this.updateCustomInstance(no(t)):this.publish({...t,viewState:{...t.viewState,instanceProfile:"custom"}})},this.updateCustomInstance=e=>{this.instanceTypeRequestGeneration++;const t=this.props.formik.values,a={...t,instanceType:ro(e),viewState:{...t.viewState,customInstance:e,instanceProfile:"buildCustom"}};this.runLatestCommandRequest(a,async e=>(await this.adapter.applyCommandHandler(e,"customInstanceChanged")).command)},this.updatePreemptible=e=>{this.updateValues({preemptible:e,automaticRestart:!e,onHostMaintenance:e?"TERMINATE":"MIGRATE"})},this.updateAcceleratorType=(e,t)=>{const a=this.props.formik.values,n=eo(a),r=Ql(a).find(e=>e.name===t),i=Number(n[e].acceleratorCount),l=r?function(e,t){if(!e.length)return 1;if(e.includes(t))return t;return e.reduce((e,a)=>a<=t&&a>e?a:e,e[0])}(r.availableCardCounts,i):i;this.updateValues({acceleratorConfigs:n.map((a,n)=>n===e?{acceleratorType:t,acceleratorCount:l}:a)})},this.updateAcceleratorCount=(e,t)=>{const a=eo(this.props.formik.values);this.updateValues({acceleratorConfigs:a.map((a,n)=>n===e?{...a,acceleratorCount:Zl(t)}:a)})},this.addAccelerator=()=>{const e=this.props.formik.values,t=Ql(e)[0];t&&this.updateValues({acceleratorConfigs:eo(e).concat({acceleratorType:t.name,acceleratorCount:t.availableCardCounts[0]||1})})},this.removeAccelerator=e=>{this.updateValues({acceleratorConfigs:eo(this.props.formik.values).filter((t,a)=>a!==e)})},this.updateBootDisk=e=>{const t=[...this.props.formik.values.disks||[]],a=to(t);-1===a?t.unshift({type:"pd-ssd",sizeGb:10,...e}):t[a]={...t[a],...e},this.updateValues({disks:t})}}validate(e){return ql(e)}render(){var e,t,a,n,r,i;const l=this.props.formik.values,o=this.props.formik.errors||{},s="buildCustom"===l.viewState.instanceProfile,c=Wl(l),d=Yl((null==(t=null==(e=l.backingData)?void 0:e.filtered)?void 0:t.instanceTypes)||[],l.instanceType),u=Yl((null==(n=null==(a=l.backingData)?void 0:a.filtered)?void 0:n.cpuPlatforms)||["(Automatic)"],l.minCpuPlatform),m=no(l),p=(null==(r=l.backingData)?void 0:r.customInstanceTypes)||{},h=ao(l)||{type:"pd-ssd",sizeGb:10},g=Yl((null==(i=l.backingData)?void 0:i.persistentDiskTypes)||[],h.type),v=Ql(l),f=eo(l);/* @__PURE__ */
|
|
135
|
+
return Be.createElement("div",{className:"container-fluid form-horizontal"},/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-5 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Machine type")),/* @__PURE__ */Be.createElement("div",{className:"col-md-6"},/* @__PURE__ */Be.createElement("label",{className:"radio-inline",htmlFor:"gce-machine-type-standard"},/* @__PURE__ */Be.createElement("input",{checked:!s,id:"gce-machine-type-standard",name:"gce-machine-type-mode",onChange:()=>this.updateMachineTypeMode(!1),type:"radio"}),"Standard"),/* @__PURE__ */Be.createElement("label",{className:"radio-inline",htmlFor:"gce-machine-type-custom"},/* @__PURE__ */Be.createElement("input",{checked:s,id:"gce-machine-type-custom",name:"gce-machine-type-mode",onChange:()=>this.updateMachineTypeMode(!0),type:"radio"}),"Custom CPU and memory"))),!s&&/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:"gce-machine-type"},"Machine type"),/* @__PURE__ */Be.createElement("div",{className:"col-md-6"},c?/* @__PURE__ */Be.createElement("input",{"aria-describedby":o.instanceType?"gce-machine-type-error":void 0,"aria-invalid":Boolean(o.instanceType),"aria-label":"Machine type",className:"form-control input-sm",id:"gce-machine-type",onChange:e=>this.updateMachineType(e.target.value),type:"text",value:l.instanceType||""}):/* @__PURE__ */Be.createElement("select",{"aria-describedby":o.instanceType?"gce-machine-type-error":void 0,"aria-invalid":Boolean(o.instanceType),"aria-label":"Machine type",className:"form-control input-sm",id:"gce-machine-type",onChange:e=>this.updateMachineType(e.target.value),required:!0,value:l.instanceType||""},
|
|
136
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),d.map(({unavailable:e,value:t})=>/* @__PURE__ */Be.createElement("option",{key:t,value:t},t,e?" (Unavailable)":""))),Kl(o.instanceType,"gce-machine-type-error"))),s&&/* @__PURE__ */Be.createElement(Be.Fragment,null,this.renderSelect("gce-custom-family","Machine family",m.instanceFamily,Jl(p.instanceFamilyList||["N1","E2","N2","N2D"],m.instanceFamily),e=>this.updateCustomInstance({...m,extendedMemory:"E2"!==e&&m.extendedMemory,instanceFamily:e})),this.renderSelect("gce-custom-cpu","vCPU count",m.vCpuCount,Jl(p.vCpuList||[],m.vCpuCount),e=>this.updateCustomInstance({...m,vCpuCount:Number(e)}),o.instanceType,"gce-machine-type-error"),this.renderSelect("gce-custom-memory","Memory (GB)",m.memory,Jl(p.memoryList||[],m.memory),e=>this.updateCustomInstance({...m,memory:Number(e)}),o.instanceType,"gce-machine-type-error"),"E2"!==m.instanceFamily&&/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-offset-5 col-md-6 checkbox"},/* @__PURE__ */Be.createElement("label",{htmlFor:"gce-custom-extended-memory"},/* @__PURE__ */Be.createElement("input",{checked:m.extendedMemory,id:"gce-custom-extended-memory",onChange:e=>this.updateCustomInstance({...m,extendedMemory:e.target.checked}),type:"checkbox"})," ","Extended memory"))),Kl(o.instanceType,"gce-machine-type-error")),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:"gce-min-cpu-platform"},"Minimum CPU platform ",/* @__PURE__ */Be.createElement(M,{id:"gce.serverGroup.minCpuPlatform"})),/* @__PURE__ */Be.createElement("div",{className:"col-md-6"},c?/* @__PURE__ */Be.createElement("input",{"aria-label":"Minimum CPU platform",className:"form-control input-sm",id:"gce-min-cpu-platform",onChange:e=>this.updateValues({minCpuPlatform:e.target.value}),type:"text",value:l.minCpuPlatform||""}):/* @__PURE__ */Be.createElement("select",{"aria-label":"Minimum CPU platform",className:"form-control input-sm",id:"gce-min-cpu-platform",onChange:e=>this.updateValues({minCpuPlatform:e.target.value}),value:l.minCpuPlatform||""},u.map(({unavailable:e,value:t})=>/* @__PURE__ */Be.createElement("option",{key:t,value:t},t,e?" (Unavailable)":""))))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-offset-5 col-md-6 checkbox"},/* @__PURE__ */Be.createElement("label",{htmlFor:"gce-preemptible"},/* @__PURE__ */Be.createElement("input",{checked:Boolean(l.preemptible),id:"gce-preemptible",onChange:e=>this.updatePreemptible(e.target.checked),type:"checkbox"})," ","Spot (preemptible) instances ",/* @__PURE__ */Be.createElement(M,{id:"gce.serverGroup.preemptibility"})))),/* @__PURE__ */Be.createElement("fieldset",null,/* @__PURE__ */Be.createElement("legend",{className:"sm-label-left"},"Accelerators (GPUs)"),f.map((e,t)=>{const a=v.find(t=>t.name===e.acceleratorType),n=function(e,t){const a=e.map(e=>({...e,unavailable:!1}));t&&!e.some(e=>e.name===t)&&a.push({availableCardCounts:[],name:t,unavailable:!0});return a}(v,e.acceleratorType),r=Jl((null==a?void 0:a.availableCardCounts)||[],e.acceleratorCount);/* @__PURE__ */
|
|
137
|
+
return Be.createElement("div",{className:"form-group",key:`${e.acceleratorType}-${t}`},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:`gce-accelerator-type-${t}`},"GPU type"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("select",{"aria-describedby":o.acceleratorConfigs?"gce-accelerators-error":void 0,"aria-invalid":Boolean(o.acceleratorConfigs),"aria-label":`GPU type ${t+1}`,className:"form-control input-sm",id:`gce-accelerator-type-${t}`,onChange:e=>this.updateAcceleratorType(t,e.target.value),value:e.acceleratorType},n.map(({description:e,name:t,unavailable:a})=>/* @__PURE__ */Be.createElement("option",{key:t,value:t},a?t:e||t,a?" (Unavailable)":"")))),/* @__PURE__ */Be.createElement("label",{className:"col-md-1 sm-label-right",htmlFor:`gce-accelerator-count-${t}`},"Count"),/* @__PURE__ */Be.createElement("div",{className:"col-md-2"},c?/* @__PURE__ */Be.createElement("input",{"aria-describedby":o.acceleratorConfigs?"gce-accelerators-error":void 0,"aria-invalid":Boolean(o.acceleratorConfigs),"aria-label":`GPU count ${t+1}`,className:"form-control input-sm",id:`gce-accelerator-count-${t}`,onChange:e=>this.updateAcceleratorCount(t,e.target.value),type:"text",value:e.acceleratorCount}):/* @__PURE__ */Be.createElement("select",{"aria-describedby":o.acceleratorConfigs?"gce-accelerators-error":void 0,"aria-invalid":Boolean(o.acceleratorConfigs),"aria-label":`GPU count ${t+1}`,className:"form-control input-sm",id:`gce-accelerator-count-${t}`,onChange:e=>this.updateAcceleratorCount(t,e.target.value),value:e.acceleratorCount},r.map(({unavailable:e,value:t})=>/* @__PURE__ */Be.createElement("option",{key:String(t),value:t},t,e?" (Unavailable)":"")))),/* @__PURE__ */Be.createElement("div",{className:"col-md-1"},/* @__PURE__ */Be.createElement("button",{"aria-label":`Remove GPU ${t+1}`,className:"btn btn-link",onClick:()=>this.removeAccelerator(t),type:"button"},
|
|
138
|
+
/* @__PURE__ */Be.createElement("span",{"aria-hidden":"true",className:"glyphicon glyphicon-trash"}))))}),/* @__PURE__ */Be.createElement("button",{className:"btn btn-block btn-sm add-new",disabled:!v.length,onClick:this.addAccelerator,type:"button"},
|
|
139
|
+
/* @__PURE__ */Be.createElement("span",{"aria-hidden":"true",className:"glyphicon glyphicon-plus-sign"})," Add accelerator"),Kl(o.acceleratorConfigs,"gce-accelerators-error")),/* @__PURE__ */Be.createElement("fieldset",null,/* @__PURE__ */Be.createElement("legend",{className:"sm-label-left"},"Boot disk"),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:"gce-boot-disk-type"},"Type"),/* @__PURE__ */Be.createElement("div",{className:"col-md-6"},/* @__PURE__ */Be.createElement("select",{"aria-describedby":o.disks?"gce-boot-disk-error":void 0,"aria-invalid":Boolean(o.disks),"aria-label":"Boot disk type",className:"form-control input-sm",id:"gce-boot-disk-type",onChange:e=>this.updateBootDisk({type:e.target.value}),value:h.type},g.map(({unavailable:e,value:t})=>/* @__PURE__ */Be.createElement("option",{key:t,value:t},t,e?" (Unavailable)":""))))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:"gce-boot-disk-size"},"Size (GB)"),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("input",{"aria-describedby":o.disks?"gce-boot-disk-error":void 0,"aria-invalid":Boolean(o.disks),"aria-label":"Boot disk size",className:"form-control input-sm",id:"gce-boot-disk-size",max:c?void 0:$l,min:c?void 0:10,onChange:e=>this.updateBootDisk({sizeGb:Zl(e.target.value)}),required:!0,type:c?"text":"number",value:h.sizeGb}),Kl(o.disks,"gce-boot-disk-error")))))}renderSelect(e,t,a,n,r,i,l){/* @__PURE__ */
|
|
140
|
+
return Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-5 sm-label-right",htmlFor:e},t),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("select",{"aria-describedby":i?l:void 0,"aria-invalid":Boolean(i),"aria-label":t,className:"form-control input-sm",id:e,onChange:e=>r(e.target.value),value:a},n.map(({unavailable:e,value:t})=>/* @__PURE__ */Be.createElement("option",{key:String(t),value:t},t,e?" (Unavailable)":"")))))}};jl.contextType=Q;let Vl=jl;function Kl(e,t){return e&&/* @__PURE__ */Be.createElement("span",{className:"help-block",id:t,role:"alert"},e)}function Wl(e){return"createPipeline"===e.viewState.mode||"editPipeline"===e.viewState.mode}function Xl(e){return"string"==typeof e&&/^\s*\$\{.+\}\s*$/.test(e)}function Zl(e){return Xl(e)?e:Number(e)}function Yl(e,t){const a=e.map(e=>({unavailable:!1,value:e}));return t&&!e.includes(t)&&a.push({unavailable:!0,value:t}),a}function Jl(e,t){const a=e.map(e=>({unavailable:!1,value:e}));return e.some(e=>String(e)===String(t))||a.push({unavailable:!0,value:t}),a}function Ql(e){return e.viewState.acceleratorTypes||[]}function eo(e){return e.acceleratorConfigs||[]}function to(e){return e.findIndex(e=>e.type.startsWith("pd-")||e.type.startsWith("hyperdisk-"))}function ao(e){const t=e.disks||[];return t[to(t)]}function no(e){var t,a,n,r,i;const l=e.viewState.customInstance||{},o=function(e){if(!e||!e.includes("custom-"))return{extendedMemory:!1};const t=/^(?:(n1|e2|n2|n2d)-)?custom-(\d+)-(\d+)(-ext)?$/i.exec(e);if(!t)return{extendedMemory:!1};return{extendedMemory:Boolean(t[4]),instanceFamily:(t[1]||"N1").toUpperCase(),memory:Number(t[3])/1024,vCpuCount:Number(t[2])}}(e.instanceType),s=(null==(t=e.backingData)?void 0:t.customInstanceTypes)||{};return{extendedMemory:null!=(a=l.extendedMemory)?a:o.extendedMemory,instanceFamily:l.instanceFamily||o.instanceFamily||(null==(n=s.instanceFamilyList)?void 0:n[0])||"N1",memory:l.memory||o.memory||(null==(r=s.memoryList)?void 0:r[0])||1,vCpuCount:l.vCpuCount||o.vCpuCount||(null==(i=s.vCpuList)?void 0:i[0])||1}}function ro(e){const t=e.instanceFamily.toLowerCase();return`${"n1"===t?"":`${t}-`}custom-${e.vCpuCount}-${1024*Number(e.memory)}${e.extendedMemory?"-ext":""}`}const io="global-load-balancer-names",lo="load-balancer-names",oo="backend-service-names";function so(e){return e.name||e}function co(e){return Array.isArray(e)?e:"string"==typeof e?e.split(",").map(e=>e.trim()):[]}function uo(e){const t=e.loadBalancerMetadata||{},a=e.instanceMetadata||{};return{[io]:co(t[io]||a[io]),[lo]:co(t[lo]||a[lo])}}function mo(e,t){if(t){if("HTTP"===t.loadBalancerType||"INTERNAL_MANAGED"===t.loadBalancerType||"EXTERNAL_MANAGED"===t.loadBalancerType){const e=(t.listeners||[]).map(e=>e.name).filter(Boolean);return e.length?{key:"HTTP"===t.loadBalancerType?io:lo,names:e}:void 0}return{key:"SSL"===t.loadBalancerType||"TCP"===t.loadBalancerType?io:lo,names:[e]}}}function po(e){var t,a,n;const r=(null==(a=null==(t=e.backingData)?void 0:t.filtered)?void 0:a.loadBalancerIndex)||{},i=(e.loadBalancers||[]).filter(e=>!e.loadBalancerType&&!r[so(e)]),l=uo(e),o={[io]:i.length?[...l[io]]:[],[lo]:i.length?[...l[lo]]:[]};(e.loadBalancers||[]).forEach(e=>{const t=so(e),a=mo(t,e.loadBalancerType?e:r[t]);a&&o[a.key].push(...a.names)});const s=new Set((e.loadBalancers||[]).map(so));return e.backendServices&&Object.keys(e.backendServices).length?o[oo]=Object.keys(e.backendServices).filter(e=>s.has(e)).flatMap(t=>e.backendServices[t]):i.length&&(o[oo]=co(e.backendServiceMetadata||(null==(n=e.instanceMetadata)?void 0:n[oo]))),function(e){return Object.keys(e).reduce((t,a)=>{const n=Array.from(new Set(e[a].filter(Boolean)));return n.length&&(t[a]=n.join(",")),t},{})}(o)}function ho(e){var t;const a=Pe(e),n={...e.instanceMetadata||{}};return delete n[io],delete n[lo],delete n[oo],a.instanceMetadata={...n,...po(e)},a.loadBalancers=function(e){var t,a;const n=(null==(a=null==(t=e.backingData)?void 0:t.filtered)?void 0:a.loadBalancerIndex)||{};return Array.from(new Set((e.loadBalancers||[]).flatMap(e=>{const t=so(e),a=e.loadBalancerType?e:n[t];if("EXTERNAL_MANAGED"===(null==a?void 0:a.loadBalancerType)){const e=(a.listeners||[]).map(e=>e.name).filter(Boolean);return e.length?e:[t]}return[t]})))}(e),a.tags=(e.tags||[]).map(e=>e.value||e),a.targetSize=null==(t=e.capacity)?void 0:t.desired,e.autoscalingPolicy?a.capacity={...e.capacity,max:e.autoscalingPolicy.maxNumReplicas,min:e.autoscalingPolicy.minNumReplicas}:e.capacity&&(a.capacity={...e.capacity,max:e.capacity.desired,min:e.capacity.desired}),"(Automatic)"===a.minCpuPlatform&&(a.minCpuPlatform=""),delete a.loadBalancerMetadata,delete a.securityGroups,a}const go=class extends Be.Component{constructor(e,t){var a;super(e,t),this.configureRequest=0,this.formik=null,this.unmounted=!1,this.configureCommand=async e=>{var t,a,n,r;const i=++this.configureRequest,l=this.getAdapter();try{let o=e||(null==(t=this.formik)?void 0:t.values)||this.command;if(null==(a=o.viewState)?void 0:a.requiresTemplateSelection){o=function(e,t){const a=t.viewState||{};return{...e,...a.overrides||{},viewState:{...e.viewState,disableImageSelection:!0,disableStrategySelection:a.disableStrategySelection||!1,expectedArtifacts:a.expectedArtifacts||[],hideClusterNamePreview:a.hideClusterNamePreview||!1,imageId:null,imageSourceText:a.imageSourceText,mode:"createPipeline",pipeline:a.pipeline,readOnlyFields:a.readOnlyFields||{},showImageSourceSelector:!0,stage:a.stage,submitButtonLabel:"Add",templatingEnabled:!0}}}(await l.buildNewServerGroupCommand(this.props.application,{mode:"createPipeline"}),o)}if(this.unmounted||i!==this.configureRequest)return;const s=await l.configureCommand(this.props.application,o);if(this.unmounted||i!==this.configureRequest)return;const c=function(e,t){const a=function(e){var t,a,n,r;const i=Pe(e.loadBalancers||[]),l=(null==(a=null==(t=e.backingData)?void 0:t.filtered)?void 0:a.loadBalancerIndex)||{};return{autoHealingHealthCheck:e.autoHealingPolicy?Pe({healthCheck:e.autoHealingPolicy.healthCheck,healthCheckKind:e.autoHealingPolicy.healthCheckKind,healthCheckUrl:e.autoHealingPolicy.healthCheckUrl}):void 0,backendServiceMetadata:co(e.backendServiceMetadata),backendServices:e.backendServices?Pe(e.backendServices):void 0,credentials:e.credentials,distributionZones:Pe((null==(n=e.distributionPolicy)?void 0:n.zones)||[]),image:(null==(r=e.viewState)?void 0:r.imageId)||e.image,implicitSecurityGroups:Pe(e.implicitSecurityGroups||[]),instanceType:e.instanceType,loadBalancerMetadata:Pe(uo(e)),loadBalancerReferences:i.reduce((e,t)=>{const a=so(t),n=mo(a,t.loadBalancerType?t:bo(l,a));return n&&(e[a]=n),e},{}),loadBalancers:i,minCpuPlatform:e.minCpuPlatform,network:e.network,region:e.region,regional:e.regional,securityGroups:Pe(e.securityGroups||[]),subnet:e.subnet,zone:e.zone}}(e),n=function(e,t){var a,n;const r=Object.keys(t).reduce((e,a)=>("function"==typeof t[a]&&(e[a]=t[a]),e),{});return{...t,...e,...r,backingData:t.backingData,viewState:{...t.viewState,...e.viewState,dirty:{...null==(a=t.viewState)?void 0:a.dirty,...null==(n=e.viewState)?void 0:n.dirty}}}}(e,t);return function(e,t){var a,n,r,i;const l=!t.credentials||ko(null==(a=e.backingData)?void 0:a.accounts,["name"]).includes(t.credentials);if(!l)return;null==(n=e.credentialsChanged)||n.call(e,e);const o=!t.region||ko(null==(i=null==(r=e.backingData)?void 0:r.filtered)?void 0:i.regions,["name"]).includes(t.region);if(!o)return;["regionalChanged","regionChanged","networkChanged","zoneChanged","customInstanceChanged"].forEach(t=>{var a;return null==(a=e[t])?void 0:a.call(e,e)})}(n,a),function(e,t){var a,n,r,i;const l=(null==(a=e.backingData)?void 0:a.filtered)||{};ko(null==(n=e.backingData)?void 0:n.accounts,["name"]).includes(t.credentials)||(e.credentials=t.credentials);ko(l.regions,["name"]).includes(t.region)||(e.region=t.region);t.instanceType&&!co(l.instanceTypes).includes(t.instanceType)&&(e.instanceType=t.instanceType);t.minCpuPlatform&&!co(l.cpuPlatforms).includes(t.minCpuPlatform)&&(e.minCpuPlatform=t.minCpuPlatform);t.image&&!ko(null==(r=e.backingData)?void 0:r.allImages,["imageName","name","id"]).includes(t.image)&&(e.image=t.image,e.viewState.imageId=t.image);t.network&&!ko(l.networks,["id","name"]).includes(t.network)&&(e.network=t.network);t.subnet&&!ko(l.subnets,["id","name"]).includes(t.subnet)&&(e.subnet=t.subnet);t.regional||!t.zone||co(l.zones).includes(t.zone)||(e.zone=t.zone);if(t.regional){const a=t.distributionZones.filter(e=>!co(l.zones).includes(e));e.distributionPolicy={...e.distributionPolicy,zones:yo([...(null==(i=e.distributionPolicy)?void 0:i.zones)||[],...a])}}const o=["id","name"],s=/* @__PURE__ */new Set([...ko(l.securityGroups,o),...ko(e.implicitSecurityGroups,o)]);e.securityGroups=yo([...e.securityGroups||[],...t.securityGroups.filter(e=>!s.has(e))]),e.implicitSecurityGroups=function(e,t){const a=/* @__PURE__ */new Set;return e.filter(e=>{const n=Eo(e,t);return!(!n||a.has(n))&&(a.add(n),!0)})}([...e.implicitSecurityGroups||[],...t.implicitSecurityGroups.filter(e=>!s.has(Eo(e,o)))],o);const c=t.autoHealingHealthCheck,d=(l.healthChecks||[]).some(e=>e.name===(null==c?void 0:c.healthCheck)&&e.kind===(null==c?void 0:c.healthCheckKind));(null==c?void 0:c.healthCheck)&&!d&&(e.autoHealingPolicy={...e.autoHealingPolicy||{},...c});const u=l.loadBalancerIndex||{},m=t.loadBalancers.filter(e=>!bo(u,so(e))),p=new Set(m.map(so));e.loadBalancers=function(e){const t=/* @__PURE__ */new Set;return e.filter(e=>{const a=so(e);return!(!a||t.has(a))&&(t.add(a),!0)})}([...e.loadBalancers||[],...m]);const h=Pe(e.backendServices||{});p.forEach(e=>{var a;(null==(a=t.backendServices)?void 0:a[e])&&(h[e]=t.backendServices[e])}),Object.keys(h).length?e.backendServices=h:delete e.backendServices;const g=Object.keys(t.backendServices||{}).filter(e=>!p.has(e)).flatMap(e=>{var a;return(null==(a=t.backendServices)?void 0:a[e])||[]}),v=p.size?t.backendServiceMetadata.filter(e=>!g.includes(e)):[];e.backendServiceMetadata=yo([...co(e.backendServiceMetadata),...Object.keys(h).filter(e=>p.has(e)).flatMap(e=>h[e]),...v]);const f=uo(e);Object.keys(u).forEach(e=>{const a=t.loadBalancerReferences[e];a&&(f[a.key]=f[a.key].filter(e=>!a.names.includes(e)))}),(e.loadBalancers||[]).forEach(e=>{const t=so(e),a=mo(t,u[t]);a&&f[a.key].push(...a.names)}),p.forEach(e=>{const a=t.loadBalancerReferences[e];a&&f[a.key].push(...a.names)});const b=Object.values(t.loadBalancerReferences).reduce((e,t)=>({...e,[t.key]:yo([...e[t.key]||[],...t.names])}),{});p.size&&[io,lo].forEach(e=>{f[e].push(...t.loadBalancerMetadata[e].filter(t=>!(b[e]||[]).includes(t)))});e.loadBalancerMetadata={[io]:yo(f[io]),[lo]:yo(f[lo])},Object.keys(e.loadBalancerMetadata).forEach(t=>{e.loadBalancerMetadata[t].length||delete e.loadBalancerMetadata[t]})}(n,a),n}((null==(n=this.formik)?void 0:n.values)||o,s);this.command=c,this.commandState.command=c,this.commandState.formikValues=c,null==(r=this.formik)||r.setValues(c),this.setState({command:c,initializationError:!1,loaded:!0})}catch(o){this.unmounted||i!==this.configureRequest||this.setState({initializationError:!0,loaded:!1})}},this.retryConfiguration=()=>(this.setState({initializationError:!1,loaded:!1}),this.configureCommand()),this.submit=(e=(e=>null==(e=this.formik)?void 0:e.values)()||this.command)=>function(e,t){var a;const n=ho(e),r=null==(a=n.viewState)?void 0:a.mode;return t.forPipelineConfig||"createPipeline"===r||"editPipeline"===r?t.closeModal(n):t.taskMonitor.submit(()=>t.serverGroupWriter.cloneServerGroup(n,t.application))}(e,{application:this.props.application,closeModal:this.props.closeModal,forPipelineConfig:this.props.forPipelineConfig,serverGroupWriter:this.context.services.serverGroupWriter,taskMonitor:this.state.taskMonitor}),this.onTaskComplete=()=>{this.clearApplicationRefreshSubscription(),this.applicationRefreshUnsubscribe=this.props.application.serverGroups.onNextRefresh(this.onApplicationRefresh),this.props.application.serverGroups.refresh()},this.onApplicationRefresh=()=>{var e;if(this.clearApplicationRefreshSubscription(),this.unmounted)return;const t=function(e,t,a){var n,r,i,l;const o=null==(r=null==(n=null==t?void 0:t.execution)?void 0:n.stages)?void 0:r.find(e=>"cloneServerGroup"===e.type),s=null==(l=null==(i=null==o?void 0:o.context)?void 0:i["deploy.server.groups"])?void 0:l[e.region];if(!s)return;let c="^.^.^.clusters.serverGroup";return a("**.clusters.serverGroup")&&(c="^.serverGroup"),a("**.clusters.cluster.serverGroup")&&(c="^.^.serverGroup"),a("**.clusters")&&(c=".serverGroup"),{state:c,params:{accountId:e.credentials,provider:"gce",region:e.region,serverGroup:s}}}((null==(e=this.formik)?void 0:e.values)||this.command,this.state.taskMonitor.task,e=>this.props.stateService.includes(e));t&&this.props.stateService.go(t.state,t.params)},this.clearApplicationRefreshSubscription=()=>{var e;null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0},this.adapter=e.adapter,this.command=Pe(e.command),this.commandState=mi(this.command),this.state={command:this.command,initializationError:!1,loaded:Boolean(null==(a=this.command.backingData)?void 0:a.filtered),taskMonitor:new E({application:e.application,title:e.title||"Creating your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:this.onTaskComplete})}}static show(e,t){return y.show(fo,e,{dialogClassName:"wizard-modal modal-lg"},t)}componentDidMount(){this.configureCommand()}componentDidUpdate(e){var t,a;if(e.command===this.props.command)return;const n=Pe(this.props.command);this.command=n,this.commandState.command=n,this.commandState.formikValues=n,null==(t=this.formik)||t.setValues(n),this.setState({command:n,initializationError:!1,loaded:Boolean(null==(a=n.backingData)?void 0:a.filtered)}),this.configureCommand(n)}componentWillUnmount(){this.unmounted=!0,this.configureRequest++,this.clearApplicationRefreshSubscription()}getAdapter(){var e;if(!this.adapter){if(!(null==(e=this.context)?void 0:e.services))throw new Error("GCE server group wizard requires Deck runtime services");const t=this.context.services.providerServiceDelegate;this.adapter=new ui(t.getDelegate("gce","serverGroup.commandBuilder"),t.getDelegate("gce","serverGroup.configurationService"))}return this.adapter}render(){var e;const{application:t,dismissModal:a,title:n}=this.props,{command:r,initializationError:i,loaded:l,taskMonitor:o}=this.state;if(i)/* @__PURE__ */
|
|
141
|
+
return Be.createElement("div",{className:"modal-content gce-server-group-initialization-error"},/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("button",{"aria-label":"Close",className:"close",onClick:a,type:"button"},/* @__PURE__ */Be.createElement("span",{"aria-hidden":"true"},"×")),/* @__PURE__ */Be.createElement("h3",null,n||"Create Server Group")),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},/* @__PURE__ */Be.createElement("div",{className:"alert alert-danger",role:"alert"},"Unable to load the resources required to configure this server group. Check your connection and try again.")),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-default gce-server-group-initialization-close",onClick:a,type:"button"},"Close"),/* @__PURE__ */Be.createElement("button",{className:"btn btn-primary",onClick:this.retryConfiguration,type:"button"},"Retry")));const s=this.getAdapter();/* @__PURE__ */
|
|
142
|
+
return Be.createElement(le,{key:l?"loaded":"loading",closeModal:this.submit,dismissModal:a,heading:n||"Create Server Group",initialValues:r,loading:!l,submitButtonLabel:(null==(e=r.viewState)?void 0:e.submitButtonLabel)||"Done",taskMonitor:o,validate:ci,render:({formik:e,nextIdx:a,wizard:n})=>{this.formik=e,this.command=e.values;const r={adapter:s,app:t,commandState:this.commandState,formik:e};/* @__PURE__ */
|
|
143
|
+
return Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement(oe,{label:"Basic Settings",order:a(),render:({innerRef:e,onLoadingChanged:t})=>/* @__PURE__ */Be.createElement(Tl,{ref:e,...r,onLoadingChanged:t}),wizard:n}),/* @__PURE__ */Be.createElement(oe,{label:"Image",order:a(),render:({innerRef:e,onLoadingChanged:t})=>/* @__PURE__ */Be.createElement(Ul,{ref:e,...r,onLoadingChanged:t}),wizard:n}),/* @__PURE__ */Be.createElement(oe,{label:"Instance Type",order:a(),render:({innerRef:e,onLoadingChanged:t})=>/* @__PURE__ */Be.createElement(Vl,{ref:e,...r,onLoadingChanged:t}),wizard:n}),/* @__PURE__ */Be.createElement(oe,{label:"Capacity/Distribution",order:a(),render:({innerRef:e,onLoadingChanged:t})=>/* @__PURE__ */Be.createElement(Ll,{ref:e,...r,onLoadingChanged:t}),wizard:n}),/* @__PURE__ */Be.createElement(oe,{label:"Load Balancers",order:a(),render:({innerRef:e,onLoadingChanged:t})=>/* @__PURE__ */Be.createElement(Ki,{ref:e,...r,onLoadingChanged:t}),wizard:n}),/* @__PURE__ */Be.createElement(oe,{label:"Firewalls",order:a(),render:({innerRef:e,onLoadingChanged:t})=>/* @__PURE__ */Be.createElement(Ri,{ref:e,...r,onLoadingChanged:t}),wizard:n}),/* @__PURE__ */Be.createElement(oe,{label:"Policies",order:a(),render:({innerRef:e,onLoadingChanged:t})=>/* @__PURE__ */Be.createElement(Nl,{ref:e,...r,onLoadingChanged:t}),wizard:n}),/* @__PURE__ */Be.createElement(oe,{label:"Advanced Settings",order:a(),render:({innerRef:e,onLoadingChanged:t})=>/* @__PURE__ */Be.createElement(Mi,{ref:e,...r,onLoadingChanged:t}),wizard:n}))}})}};go.contextType=Q,go.defaultProps={closeModal:P,dismissModal:P};let vo=go;const fo=Object.assign(l(vo),{show:vo.show});function bo(e,t){return e[t]||Object.values(e).find(e=>(e.listeners||[]).some(e=>e.name===t))}function yo(e){return Array.from(new Set(e.filter(Boolean)))}function Eo(e,t){return"string"==typeof e?e:t.map(t=>null==e?void 0:e[t]).find(e=>"string"==typeof e)}function ko(e,t){return(e||[]).map(e=>Eo(e,t)).filter(Boolean)}class Co extends Be.Component{constructor(){super(...arguments),this.handleVCpuChange=e=>{const t=e?e.value:null;this.props.onChange({instanceFamily:this.props.selectedInstanceFamily,vCpuCount:t,memory:this.props.selectedMemory,extendedMemory:this.props.selectedExtendedMemory})},this.handleMemoryChange=e=>{const t=e?e.value:null;this.props.onChange({instanceFamily:this.props.selectedInstanceFamily,vCpuCount:this.props.selectedVCpuCount,memory:t,extendedMemory:this.props.selectedExtendedMemory})},this.handleInstanceFamilyChange=e=>{const t=e?e.value:null;this.props.onChange({instanceFamily:t,vCpuCount:this.props.selectedVCpuCount,memory:this.props.selectedMemory,extendedMemory:"E2"!==t&&this.props.selectedExtendedMemory})},this.handleMemoryChangeCustom=e=>{const t=+e;this.props.onChange({instanceFamily:this.props.selectedInstanceFamily,vCpuCount:this.props.selectedVCpuCount,memory:t,extendedMemory:this.props.selectedExtendedMemory})},this.handleExtendedMemory=e=>{this.props.onChange({instanceFamily:this.props.selectedInstanceFamily,vCpuCount:this.props.selectedVCpuCount,memory:this.props.selectedMemory,extendedMemory:e})}}render(){const e=(this.props.instanceFamilyList||[]).map(e=>({label:e,value:e})),t=(this.props.vCpuList||[]).map(e=>({label:e+"",value:e})),a=(this.props.memoryList||[]).map(e=>({label:e+"",value:e})),n=this.props.selectedVCpuCount?this.props.selectedVCpuCount+"":null,r=this.props.selectedMemory?this.props.selectedMemory+"":null,i=this.props.selectedInstanceFamily?this.props.selectedInstanceFamily:null;/* @__PURE__ */
|
|
144
|
+
return Be.createElement("div",null,/* @__PURE__ */Be.createElement("div",{className:"row"},/* @__PURE__ */Be.createElement("div",{className:"col-md-5 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Family ")),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement(Oe,{options:e,clearable:!1,value:{label:i,value:this.props.selectedInstanceFamily},onChange:this.handleInstanceFamilyChange}))),/* @__PURE__ */Be.createElement("div",{className:"row gce-instance-build-custom-select"},/* @__PURE__ */Be.createElement("div",{className:"col-md-5 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Cores "),/* @__PURE__ */Be.createElement(M,{id:"gce.instance.customInstance.cores"})),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement(Oe,{options:t,clearable:!1,value:{label:n,value:this.props.selectedVCpuCount},onChange:this.handleVCpuChange}))),/* @__PURE__ */Be.createElement("div",{className:"row gce-instance-build-custom-select"},/* @__PURE__ */Be.createElement("div",{className:"col-md-5 sm-label-right"},/* @__PURE__ */Be.createElement("b",null,"Memory (Gb) "),/* @__PURE__ */Be.createElement(M,{id:"gce.instance.customInstance.memory"})),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},this.props.selectedExtendedMemory?/* @__PURE__ */Be.createElement("input",{type:"number",name:"memory",className:"form-control",value:this.props.selectedMemory,onChange:e=>this.handleMemoryChangeCustom(e.target.value)}):/* @__PURE__ */Be.createElement(Oe,{options:a,clearable:!1,value:{label:r,value:this.props.selectedMemory},onChange:this.handleMemoryChange}))),"E2"!==this.props.selectedInstanceFamily?/* @__PURE__ */Be.createElement("div",{className:"row gce-instance-build-custom-select"},/* @__PURE__ */Be.createElement("div",{className:"col-md-5 sm-label-right"}),/* @__PURE__ */Be.createElement("div",{className:"col-md-3"},/* @__PURE__ */Be.createElement("span",{className:"gce-instance-build-custom-extended-memory-checkbox"},/* @__PURE__ */Be.createElement(se,{name:"extendedMemory",text:"Extended Memory",checked:this.props.selectedExtendedMemory,onChange:e=>{this.handleExtendedMemory(e.target.checked)}}),/* @__PURE__ */Be.createElement("div",{className:"gce-instance-build-custom-extended-memory-checkbox-helptext"},/* @__PURE__ */Be.createElement(M,{id:"gce.instance.customInstance.extendedmemory"}))))):null)}}const No=new ti;function To({command:e,onTypeChanged:t}){const{instanceTypeService:a}=w(),n=e,[r,i]=Be.useState(()=>function(e){if(e.viewState.customInstance)return{extendedMemory:Po(e.instanceType),...e.viewState.customInstance};const t=e.instanceType?No.parseInstanceTypeString((n=e.instanceType,Po(n)?n.replace(/-ext$/,""):n)):{instanceFamily:"N1",vCpuCount:null,memory:null},a=So({...t,extendedMemory:Po(e.instanceType)},Ao(e,t));var n;return e.viewState.customInstance=a,a}(n)),l=Ao(n,r),o=So(r,l);/* @__PURE__ */
|
|
145
|
+
return Be.createElement(Co,{instanceFamilyList:l.instanceFamilyList,memoryList:l.memoryList,onChange:e=>{const r=So(e,Ao(n,e)),l=No.generateInstanceTypeString(r.instanceFamily,r.vCpuCount,r.memory,r.extendedMemory);n.viewState.customInstance=r,n.instanceType=l,n.customInstanceChanged&&n.customInstanceChanged(n),i(r),a.getInstanceTypeDetails(n.selectedProvider,l).then(e=>{n.viewState.instanceTypeDetails=e}),t&&t(l)},selectedExtendedMemory:o.extendedMemory,selectedInstanceFamily:o.instanceFamily,selectedMemory:o.memory,selectedVCpuCount:o.vCpuCount,vCpuList:l.vCpuList})}function So(e,t){const a=e.instanceFamily||t.instanceFamilyList[0]||"N1",n=e.vCpuCount||t.vCpuList[0],r=t.memoryList.length?t.memoryList:n?No.generateValidMemoryListForVCpuCount(a,n):[];return{extendedMemory:Boolean(e.extendedMemory),instanceFamily:a,memory:e.memory||r[0],vCpuCount:n}}function Ao(e,t){var a,n;const r=e.backingData.customInstanceTypes||{},i=e.regional?e.region:e.zone,l=null==(n=null==(a=e.backingData.credentialsKeyedByAccount)?void 0:a[e.credentials])?void 0:n.locationToInstanceTypesMap,o=r.vCpuList||(i&&l?No.generateValidVCpuListForLocation(i,l):[]),s=t.vCpuCount||o[0];return{instanceFamilyList:r.instanceFamilyList||No.generateValidInstanceFamilyList(),memoryList:r.memoryList||(s?No.generateValidMemoryListForVCpuCount(t.instanceFamily||"N1",s):[]),vCpuList:o}}function Po(e){return Boolean(e&&e.endsWith("-ext"))}function wo({instanceFlexibilityPolicy:e}){const t=null==e?void 0:e.instanceSelections;return Ge(t)?null:/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},Object.entries(t).map(([e,t])=>/* @__PURE__ */Be.createElement(Be.Fragment,{key:e},/* @__PURE__ */Be.createElement("dt",null,"Selection"),/* @__PURE__ */Be.createElement("dd",null,e),null!=t.rank&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("dt",null,"Rank"),/* @__PURE__ */Be.createElement("dd",null,t.rank)),/* @__PURE__ */Be.createElement("dt",null,"Machine types"),/* @__PURE__ */Be.createElement("dd",null,(t.machineTypes||[]).join(", ")))))}function Io(e){var t;return Boolean((null==(t=e.healthCheck)?void 0:t.trim())&&e.healthCheckKind&&function(e,t=2147483647){return"number"==typeof e&&Number.isFinite(e)&&Number.isInteger(e)&&e>=0&&e<=t}(e.initialDelaySec))}class Mo extends Be.Component{constructor(e){super(e),this.submit=()=>{this.state.taskMonitor.submit(()=>gl.upsertAutoHealingPolicy(this.props.application,this.props.serverGroup,this.state.policy))};const t=e.policy?"Edit":"New",a=Pe(e.policy||{initialDelaySec:300});Reflect.deleteProperty(a,"maxUnavailable"),this.state={policy:a,taskMonitor:new E({application:e.application,title:`${t} autohealing policy for ${e.serverGroup.name}`,onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var t,a,n;null==(a=null==(t=e.application.serverGroups)?void 0:t.refresh)||a.call(t),null==(n=e.closeModal)||n.call(e)}})}}static show(e){return y.show(Mo,e,{dialogClassName:"modal-md"})}render(){const e=!this.props.policy;/* @__PURE__ */
|
|
146
|
+
return Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement(k,{monitor:this.state.taskMonitor}),/* @__PURE__ */Be.createElement(C,{dismiss:this.props.dismissModal}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h4",{className:"modal-title"},e?"New":"Edit"," autohealing policy")),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},/* @__PURE__ */Be.createElement(ul,{account:this.props.serverGroup.account,policy:this.state.policy,onChange:e=>this.setState({policy:e})})),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-default",type:"button",onClick:()=>{var e,t;return null==(t=(e=this.props).dismissModal)?void 0:t.call(e)}},"Cancel"),/* @__PURE__ */Be.createElement(T,{isDisabled:!Io(this.state.policy),label:e?"Create":"Update",onClick:this.submit,submitting:this.state.taskMonitor.submitting})))}}function Ro({application:e,mutationsEnabled:t,serverGroup:a,policy:n}){var r;const i=t=>{ce(a,e).then(e=>e&&t())};if(!n)return t?/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-testid":"add-auto-healing-policy",type:"button",onClick:()=>i(()=>Mo.show({application:e,serverGroup:a}))},"Add auto-healing policy"):null;const l=()=>{p.confirm({header:`Really delete autohealer for ${a.name}?`,buttonText:"Delete autohealer",account:a.account,taskMonitorConfig:{application:e,title:`Deleting autohealing policy for ${a.name}`},submitMethod:()=>gl.deleteAutoHealingPolicy(e,a)})};/* @__PURE__ */
|
|
147
|
+
return Be.createElement("div",{className:"gce-auto-healing-policy-details"},/* @__PURE__ */Be.createElement("dl",{className:"horizontal-when-filters-collapsed"},/* @__PURE__ */Be.createElement("dt",null,"Health Check"),/* @__PURE__ */Be.createElement("dd",null,n.healthCheck||n.healthCheckUrl||"-"),/* @__PURE__ */Be.createElement("dt",null,"Initial Delay"),/* @__PURE__ */Be.createElement("dd",null,null!=(r=n.initialDelaySec)?r:"-"," seconds")),t&&/* @__PURE__ */Be.createElement("div",{className:"text-right"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-testid":"edit-auto-healing-policy",type:"button",onClick:()=>i(()=>Mo.show({application:e,serverGroup:a,policy:n}))},"Edit"),/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-testid":"delete-auto-healing-policy",type:"button",onClick:()=>i(l)},"Delete")))}function Go(e,t,a=2147483647){return"number"==typeof e&&Number.isFinite(e)&&Number.isInteger(e)&&e>=t&&e<=a}function Bo(e,t){return"number"==typeof e&&Number.isFinite(e)&&e>0&&(void 0===t||e<t)}function Lo(e){var t,a;return!(!(null==(t=e.metric)?void 0:t.trim())||!e.metricExportScope)&&("SINGLE_TIME_SERIES_PER_GROUP"===e.metricExportScope&&"SINGLE_INSTANCE_ASSIGNMENT"===e.scalingpolicy?"number"==typeof(a=e.singleInstanceAssignment)&&Number.isFinite(a)&&a>=0:("SINGLE_TIME_SERIES_PER_GROUP"!==e.metricExportScope||"UTILIZATION_TARGET"===e.scalingpolicy)&&(Bo(e.utilizationTarget)&&Boolean(e.utilizationTargetType)))}function xo(e){var t,a,n,r;return Pe(e.policy||{minNumReplicas:null!=(a=null==(t=e.serverGroup.capacity)?void 0:t.min)?a:0,maxNumReplicas:null!=(r=null==(n=e.serverGroup.capacity)?void 0:n.max)?r:1,coolDownPeriodSec:60,mode:"ON",cpuUtilization:{utilizationTarget:.6}})}class Do extends Be.Component{constructor(e){super(e),this.submit=()=>{this.state.taskMonitor.submit(()=>gl.upsertAutoscalingPolicy(this.props.application,this.props.serverGroup,this.state.policy))};const t=e.policy?"Edit":"New";this.state={policy:xo(e),taskMonitor:new E({application:e.application,title:`${t} scaling policy for ${e.serverGroup.name}`,onDismiss:()=>{var t;return null==(t=e.dismissModal)?void 0:t.call(e)},onTaskComplete:()=>{var t,a,n;null==(a=null==(t=e.application.serverGroups)?void 0:t.refresh)||a.call(t),null==(n=e.closeModal)||n.call(e)}})}}static show(e){return y.show(Do,e,{dialogClassName:"modal-lg"})}render(){const e=!this.props.policy;/* @__PURE__ */
|
|
148
|
+
return Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement(k,{monitor:this.state.taskMonitor}),/* @__PURE__ */Be.createElement(C,{dismiss:this.props.dismissModal}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h4",{className:"modal-title"},e?"New":"Edit"," autoscaling policy")),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},/* @__PURE__ */Be.createElement(yl,{policy:this.state.policy,onChange:e=>this.setState({policy:e})})),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-default",type:"button",onClick:()=>{var e,t;return null==(t=(e=this.props).dismissModal)?void 0:t.call(e)}},"Cancel"),/* @__PURE__ */Be.createElement(T,{isDisabled:!this.isValid(),label:e?"Create":"Update",onClick:this.submit,submitting:this.state.taskMonitor.submitting})))}isValid(){var e,t;const{policy:a}=this.state,n=(null==(e=a.cpuUtilization)?void 0:e.predictiveMethod)===ml.STANDARD;return Go(a.minNumReplicas,0)&&Go(a.maxNumReplicas,0)&&a.minNumReplicas<=a.maxNumReplicas&&Go(a.coolDownPeriodSec,15)&&function(e){var t,a;const n=Boolean(e.cpuUtilization&&Object.keys(e.cpuUtilization).length),r=Boolean(e.loadBalancingUtilization&&Object.keys(e.loadBalancingUtilization).length),i=e.customMetricUtilizations||[],l=!n||Bo(null==(t=e.cpuUtilization)?void 0:t.utilizationTarget,1),o=!r||Bo(null==(a=e.loadBalancingUtilization)?void 0:a.utilizationTarget,1),s=i.every(Lo);return l&&o&&s&&(n&&l||r&&o||i.length>0)}(a)&&function(e){return(e.scalingSchedules||[]).every(t=>{var a,n,r;return Boolean(null==(a=t.scheduleName)?void 0:a.trim())&&Go(t.minimumRequiredInstances,0,e.maxNumReplicas)&&Boolean(null==(n=t.scheduleCron)?void 0:n.trim())&&Boolean(null==(r=t.timezone)?void 0:r.trim())&&Go(t.duration,301,1209600)})}(a)&&function(e){if(!e.scaleInControl)return!0;const{maxScaledInReplicas:t,timeWindowSec:a}=e.scaleInControl,n=void 0!==(null==t?void 0:t.fixed),r=void 0!==(null==t?void 0:t.percent);return!(n===r||!Go(a,60,3600))&&(r?Go(null==t?void 0:t.percent,0,100):Go(null==t?void 0:t.fixed,0))}(a)&&(!n||Boolean(Ha.feature.predictiveAutoscaling))&&(!n||Bo(null==(t=a.cpuUtilization)?void 0:t.utilizationTarget,1))}}function zo(e){return void 0===e?"-":`${Math.round(100*e)}%`}function Fo({application:e,mutationsEnabled:t,serverGroup:a,policy:n}){var r,i,l,o,s,c;const d=t=>{ce(a,e).then(e=>e&&t())};if(!n)return t?/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-testid":"add-autoscaling-policy",type:"button",onClick:()=>d(()=>Do.show({application:e,serverGroup:a}))},"Add autoscaling policy"):null;const u=null==(r=n.scaleInControl)?void 0:r.maxScaledInReplicas,m="number"==typeof(null==u?void 0:u.percent)?`${u.percent}%`:"number"==typeof(null==u?void 0:u.fixed)?`${u.fixed}`:void 0,h=()=>{p.confirm({header:`Really delete autoscaler for ${a.name}?`,buttonText:"Delete autoscaler",account:a.account,taskMonitorConfig:{application:e,title:`Deleting autoscaler for ${a.name}`},submitMethod:()=>gl.deleteAutoscalingPolicy(e,a)})};/* @__PURE__ */
|
|
149
|
+
return Be.createElement("div",{className:"gce-autoscaling-policy-details"},/* @__PURE__ */Be.createElement("dl",{className:"horizontal-when-filters-collapsed"},n.cpuUtilization&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("dt",null,"Target CPU Usage"),/* @__PURE__ */Be.createElement("dd",null,"CPU Usage: ",zo(n.cpuUtilization.utilizationTarget))),Ha.feature.predictiveAutoscaling&&void 0!==(null==(i=n.cpuUtilization)?void 0:i.predictiveMethod)&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("dt",null,"Predictive Autoscaling"),/* @__PURE__ */Be.createElement("dd",null,n.cpuUtilization.predictiveMethod)),n.loadBalancingUtilization&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("dt",null,"Target HTTP Load Balancing Usage"),/* @__PURE__ */Be.createElement("dd",null,zo(n.loadBalancingUtilization.utilizationTarget))),(n.customMetricUtilizations||[]).map((e,t)=>{var a,n;/* @__PURE__ */
|
|
150
|
+
return Be.createElement(Be.Fragment,{key:`${e.metric}-${t}`},/* @__PURE__ */Be.createElement("dt",null,"Monitoring Metric"),/* @__PURE__ */Be.createElement("dd",null,e.metric||"-",": ",null!=(n=null!=(a=e.utilizationTarget)?a:e.singleInstanceAssignment)?n:"-","DELTA_PER_SECOND"===e.utilizationTargetType?"/sec":"DELTA_PER_MINUTE"===e.utilizationTargetType?"/min":""))}),/* @__PURE__ */Be.createElement("dt",null,"Min # VMs"),/* @__PURE__ */Be.createElement("dd",null,null!=(l=n.minNumReplicas)?l:"-"),/* @__PURE__ */Be.createElement("dt",null,"Max # VMs"),/* @__PURE__ */Be.createElement("dd",null,null!=(o=n.maxNumReplicas)?o:"-"),/* @__PURE__ */Be.createElement("dt",null,"Cool-down Period"),/* @__PURE__ */Be.createElement("dd",null,null!=(s=n.coolDownPeriodSec)?s:"-"," sec"),/* @__PURE__ */Be.createElement("dt",null,"Mode"),/* @__PURE__ */Be.createElement("dd",null,n.mode||"-"),n.scaleInControl&&/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("dt",null,"Max Scaled-in Replicas"),/* @__PURE__ */Be.createElement("dd",null,null!=m?m:"-"),/* @__PURE__ */Be.createElement("dt",null,"Scale-in Time Window"),/* @__PURE__ */Be.createElement("dd",null,null!=(c=n.scaleInControl.timeWindowSec)?c:"-"," seconds")),(n.scalingSchedules||[]).map((e,t)=>/* @__PURE__ */Be.createElement(Be.Fragment,{key:`${e.scheduleName}-${t}`},/* @__PURE__ */Be.createElement("dt",null,"Scaling Schedule"),/* @__PURE__ */Be.createElement("dd",null,e.scheduleName||"-"," (",e.enabled?"enabled":"disabled",")",e.timezone?`, ${e.timezone}`:""))),(a.autoscalingMessages||[]).map((e,t)=>/* @__PURE__ */Be.createElement(Be.Fragment,{key:t},/* @__PURE__ */Be.createElement("dt",null,"Message"),/* @__PURE__ */Be.createElement("dd",null,e)))),t&&/* @__PURE__ */Be.createElement("div",{className:"text-right"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-testid":"edit-autoscaling-policy",type:"button",onClick:()=>d(()=>Do.show({application:e,serverGroup:a,policy:n}))},"Edit"),/* @__PURE__ */Be.createElement("button",{className:"btn btn-link","data-testid":"delete-autoscaling-policy",type:"button",onClick:()=>d(h)},"Delete")))}function Oo(e,t){if(!e.autoscalingPolicy&&void 0===t.newSize)return{newSize:"Size is required"};if(!e.autoscalingPolicy&&void 0!==t.newSize&&(!Number.isInteger(t.newSize)||t.newSize<0))return{newSize:"Size must be a finite non-negative integer"};if(e.autoscalingPolicy){const e={};if(void 0===t.newMinNumReplicas&&(e.newMinNumReplicas="Min is required"),void 0===t.newMaxNumReplicas&&(e.newMaxNumReplicas="Max is required"),Object.keys(e).length)return e;if((!Number.isInteger(t.newMinNumReplicas)||t.newMinNumReplicas<0)&&(e.newMinNumReplicas="Min must be a finite non-negative integer"),(!Number.isInteger(t.newMaxNumReplicas)||t.newMaxNumReplicas<0)&&(e.newMaxNumReplicas="Max must be a finite non-negative integer"),Object.keys(e).length)return e}return e.autoscalingPolicy&&void 0!==t.newMinNumReplicas&&void 0!==t.newMaxNumReplicas&&t.newMinNumReplicas>t.newMaxNumReplicas?{newMaxNumReplicas:"Min cannot be larger than Max",newMinNumReplicas:"Min cannot be larger than Max"}:{}}class Ho extends Be.Component{constructor(e){var t,a;super(e),this.isValid=()=>this.state.verified&&0===Object.keys(Oo(this.props.serverGroup,this.state.values)).length,this.submit=()=>{if(!this.isValid())return;const{application:e,autoscalingPolicyWriter:t,serverGroup:a,serverGroupWriter:n}=this.props;if(a.autoscalingPolicy){const{params:n,policy:i}={params:{interestingHealthProviderNames:(r=this.state.values).interestingHealthProviderNames,reason:r.reason},policy:{maxNumReplicas:r.newMaxNumReplicas,minNumReplicas:r.newMinNumReplicas}};return void this.state.taskMonitor.submit(()=>t.upsertAutoscalingPolicy(e,a,i,n))}var r;const i=function(e,t){return{capacity:{desired:t.newSize,max:t.newSize,min:t.newSize},interestingHealthProviderNames:t.interestingHealthProviderNames,reason:t.reason,region:e.region,serverGroupName:e.name,targetSize:t.newSize}}(a,this.state.values);this.state.taskMonitor.submit(()=>n.resizeServerGroup(a,e,i))};const{application:n}=e;this.state={taskMonitor:new E({application:n,title:`Resizing ${e.serverGroup.name}`,onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>n.serverGroups.refresh()}),values:{interestingHealthProviderNames:(null==(t=n.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(a=n.attributes)?void 0:a.platformHealthOnly)?["Google"]:void 0},verified:!1}}static show(e){return y.show(Ho,e)}render(){var e,t,a,n,r,i,l;const{application:o,serverGroup:s}=this.props,{values:c}=this.state,d=null!=(a=null==(e=s.asg)?void 0:e.desiredCapacity)?a:null==(t=s.capacity)?void 0:t.desired,u=Object.values(Oo(s,c))[0];/* @__PURE__ */
|
|
151
|
+
return Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement(k,{monitor:this.state.taskMonitor}),/* @__PURE__ */Be.createElement(C,{dismiss:this.props.dismissModal}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h4",{className:"modal-title"},"Resize ",s.name)),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},/* @__PURE__ */Be.createElement("form",{className:"form-horizontal"},s.autoscalingPolicy?/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("p",null,"Sets min and max instance counts for this server group's autoscaling policy."),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("div",{className:"col-md-2 col-md-offset-3"},/* @__PURE__ */Be.createElement("b",null,"Min")),/* @__PURE__ */Be.createElement("div",{className:"col-md-2"},/* @__PURE__ */Be.createElement("b",null,"Max"))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},"Current"),/* @__PURE__ */Be.createElement("div",{className:"col-md-2"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Current minimum replicas",className:"form-control input-sm",disabled:!0,type:"number",value:s.autoscalingPolicy.minNumReplicas})),/* @__PURE__ */Be.createElement("div",{className:"col-md-2"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Current maximum replicas",className:"form-control input-sm",disabled:!0,type:"number",value:s.autoscalingPolicy.maxNumReplicas}))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},"Resize to"),/* @__PURE__ */Be.createElement("div",{className:"col-md-2"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Minimum replicas",className:"form-control input-sm",min:0,name:"newMinNumReplicas",onChange:e=>this.setState({values:{...c,newMinNumReplicas:""===e.target.value?void 0:Number(e.target.value)}}),type:"number",value:null!=(n=c.newMinNumReplicas)?n:""})),/* @__PURE__ */Be.createElement("div",{className:"col-md-2"},/* @__PURE__ */Be.createElement("input",{"aria-label":"Maximum replicas",className:"form-control input-sm",min:0,name:"newMaxNumReplicas",onChange:e=>this.setState({values:{...c,newMaxNumReplicas:""===e.target.value?void 0:Number(e.target.value)}}),type:"number",value:null!=(r=c.newMaxNumReplicas)?r:""})))):/* @__PURE__ */Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement("p",null,"Sets desired instance count for this server group."),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right"},"Current size"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",disabled:!0,type:"number",value:d}))),/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-md-3 sm-label-right",htmlFor:"gce-resize-new-size"},"Resize to"),/* @__PURE__ */Be.createElement("div",{className:"col-md-4"},/* @__PURE__ */Be.createElement("input",{className:"form-control input-sm",id:"gce-resize-new-size",min:0,name:"newSize",onChange:e=>this.setState({values:{...c,newSize:""===e.target.value?void 0:Number(e.target.value)}}),type:"number",value:null!=(i=c.newSize)?i:""})))),u&&/* @__PURE__ */Be.createElement(de,{message:u,type:"error"}),(null==(l=o.attributes)?void 0:l.platformHealthOnlyShowOverride)&&/* @__PURE__ */Be.createElement(ue,{interestingHealthProviderNames:c.interestingHealthProviderNames,onChange:e=>this.setState({values:{...c,interestingHealthProviderNames:e}}),platformHealthType:"Google",showHelpDetails:!0}),/* @__PURE__ */Be.createElement(ee,{reason:c.reason,onChange:e=>this.setState({values:{...c,reason:e}})}))),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement(me,{account:s.account,onValidChange:e=>this.setState({verified:e})}),/* @__PURE__ */Be.createElement("button",{className:"btn btn-default",onClick:this.props.dismissModal,type:"button"},"Cancel"),/* @__PURE__ */Be.createElement("button",{className:"btn btn-primary",disabled:!this.isValid(),onClick:this.submit,type:"button"},"Submit")))}}function _o(e,t,a){return a.filter(a=>{var n;const r=a.app||(null==(n=a.moniker)?void 0:n.app);return!0===a.isDisabled&&r===e.name&&a.cluster===t.cluster&&a.account===t.account&&a.region===t.region}).sort((e,t)=>t.name.localeCompare(e.name))}const Uo=class e extends Be.Component{constructor(e){var t,a;super(e),this.close=()=>this.props.dismissModal(),this.isValid=()=>this.state.verified&&!!this.state.values.restoreServerGroupName,this.submit=()=>{if(!this.isValid())return;const{application:e,serverGroup:t,serverGroupWriter:a}=this.props,n=function(e,t,a){var n;return{interestingHealthProviderNames:a.interestingHealthProviderNames,platformHealthOnlyShowOverride:null==(n=e.attributes)?void 0:n.platformHealthOnlyShowOverride,reason:a.reason,rollbackContext:{restoreServerGroupName:a.restoreServerGroupName,rollbackServerGroupName:t.name},rollbackType:"EXPLICIT"}}(e,t,this.state.values);this.state.taskMonitor.submit(()=>a.rollbackServerGroup(t,e,n))};const{application:n,serverGroup:r}=e;this.state={taskMonitor:new E({application:n,title:`Rollback ${r.name}`,onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>n.serverGroups.refresh()}),values:{interestingHealthProviderNames:(null==(t=n.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(a=n.attributes)?void 0:a.platformHealthOnly)?["Google"]:void 0},verified:!1}}static show(t){return y.show(e,t)}render(){var e;const{application:t,serverGroup:a,serverGroups:n}=this.props,{taskMonitor:r,values:i}=this.state,l=_o(t,a,n);/* @__PURE__ */
|
|
152
|
+
return Be.createElement(Be.Fragment,null,/* @__PURE__ */Be.createElement(k,{monitor:r}),/* @__PURE__ */Be.createElement(C,{dismiss:this.close}),/* @__PURE__ */Be.createElement("div",{className:"modal-header"},/* @__PURE__ */Be.createElement("h4",{className:"modal-title"},"Rollback ",a.name)),/* @__PURE__ */Be.createElement("div",{className:"modal-body"},/* @__PURE__ */Be.createElement("form",{className:"form-horizontal"},/* @__PURE__ */Be.createElement("div",{className:"form-group"},/* @__PURE__ */Be.createElement("label",{className:"col-sm-3 sm-label-right",htmlFor:"gce-rollback-server-group"},"Restore to"),/* @__PURE__ */Be.createElement("div",{className:"col-sm-6"},/* @__PURE__ */Be.createElement("select",{className:"form-control input-sm",id:"gce-rollback-server-group",onChange:e=>this.setState({values:{...i,restoreServerGroupName:e.target.value||void 0}}),value:i.restoreServerGroupName||""},
|
|
153
|
+
/* @__PURE__ */Be.createElement("option",{value:""},"Select..."),l.map(e=>/* @__PURE__ */Be.createElement("option",{key:e.name,value:e.name},e.name))))),(null==(e=t.attributes)?void 0:e.platformHealthOnlyShowOverride)&&/* @__PURE__ */Be.createElement(ue,{interestingHealthProviderNames:i.interestingHealthProviderNames,onChange:e=>this.setState({values:{...i,interestingHealthProviderNames:e}}),platformHealthType:"Google",showHelpDetails:!0}),/* @__PURE__ */Be.createElement(ee,{reason:i.reason,onChange:e=>this.setState({values:{...i,reason:e}})}))),/* @__PURE__ */Be.createElement("div",{className:"modal-footer"},/* @__PURE__ */Be.createElement(me,{account:a.account,onValidChange:e=>this.setState({verified:e})}),/* @__PURE__ */Be.createElement("button",{className:"btn btn-default",onClick:this.close,type:"button"},"Cancel"),/* @__PURE__ */Be.createElement("button",{className:"btn btn-primary",disabled:!this.isValid(),onClick:this.submit,type:"button"},"Submit")))}};Uo.defaultProps={closeModal:P,dismissModal:P};let $o=Uo;function qo(e){var t,a,n;const r=function(e){var t;const a=null==(t=e.launchConfig)?void 0:t.instanceTemplate;return a?(new Ke).deriveProjectId(a):void 0}(e),i=null==(t=e.launchConfig)?void 0:t.instanceTemplate,l=(null==(n=null==(a=null==i?void 0:i.properties)?void 0:a.networkInterfaces)?void 0:n[0])||{},o=new Ke;return{...e,account:e.account||e.accountId,logsLink:r?`https://console.cloud.google.com/logs/query?project=${encodeURIComponent(r)}&resource=gce_instance_group`:void 0,network:o.decorateXpnResourceIfNecessary(r,l.network),subnet:o.decorateXpnResourceIfNecessary(r,l.subnetwork),zones:[...e.zones||[]].sort()}}function jo(e,t){return new _e(a=>{const n=function(e,t){var a,n;const r=((null==(a=null==e?void 0:e.serverGroups)?void 0:a.data)||[]).find(e=>e.name===t.name&&e.account===t.accountId&&e.region===t.region);if(r)return r;const i=(null==(n=null==e?void 0:e.loadBalancers)?void 0:n.data)||[];for(const l of i){const e=(l.serverGroups||[]).find(e=>e.name===t.name&&e.account===t.accountId&&e.region===t.region);if(e)return e}return null}(e.app,e.serverGroup);pe.getServerGroup(e.app.name,e.serverGroup.accountId,e.serverGroup.region,e.serverGroup.name).then(r=>{if(!r||0===Object.keys(r).length)return t(),void a.complete();a.next(qo({...n||{},...r,account:e.serverGroup.accountId})),a.complete()},()=>{t(),a.complete()})})}function Vo(e,t={}){var a,n;return(null==(a=e.attributes)?void 0:a.platformHealthOnlyShowOverride)&&(null==(n=e.attributes)?void 0:n.platformHealthOnly)?{...t,interestingHealthProviderNames:t.interestingHealthProviderNames||["Google"]}:t}function Ko({app:e,serverGroup:t}){var a;const n=w(),{serverGroupCommandBuilder:r,serverGroupWriter:i}=n;if(R.isDisabled("gce"))return null;const l={account:t.account,askForReason:!0,platformHealthOnlyShowOverride:null==(a=e.attributes)?void 0:a.platformHealthOnlyShowOverride,platformHealthType:"Google"};/* @__PURE__ */
|
|
154
|
+
return Be.createElement("div",{className:"dropdown",id:"gce-server-group-actions-dropdown"},/* @__PURE__ */Be.createElement("button",{className:"btn btn-sm btn-primary dropdown-toggle","data-toggle":"dropdown",type:"button"},"Server Group Actions"),/* @__PURE__ */Be.createElement("ul",{className:"dropdown-menu"},!t.isDisabled&&/* @__PURE__ */Be.createElement(G,{resource:t,application:e,onClick:()=>{var a;const n=_o(e,t,(null==(a=e.serverGroups)?void 0:a.data)||[]);$o.show({application:e,serverGroup:t,serverGroups:n,serverGroupWriter:i})}},"Rollback"),/* @__PURE__ */Be.createElement(G,{resource:t,application:e,onClick:()=>{Ho.show({application:e,autoscalingPolicyWriter:gl,serverGroup:t,serverGroupWriter:i})}},"Resize"),/* @__PURE__ */Be.createElement("li",null,/* @__PURE__ */Be.createElement("a",{onClick:()=>{!function(e,t,a,n){Promise.resolve(a.buildServerGroupCommandFromExisting(e,t)).then(a=>{fo.show({application:e,command:a,title:`Clone ${t.name}`},n)}).catch(e=>{var a;ge.error({header:`Error cloning ${t.name}`,body:(null==(a=null==e?void 0:e.data)?void 0:a.message)||(null==e?void 0:e.message)||"Unable to build the clone server group command."})})}(e,t,r,n)}},"Clone")),!t.isDisabled&&/* @__PURE__ */Be.createElement("li",null,/* @__PURE__ */Be.createElement("a",{onClick:()=>{const a={...l,buttonText:`Disable ${t.name}`,header:`Really disable ${t.name}?`,submitMethod:a=>i.disableServerGroup(t,e.name,Vo(e,a)),taskMonitorConfig:{application:e,title:`Disabling ${t.name}`}};he.addDisableWarningMessage(e,t,a),p.confirm(a)}},"Disable")),t.isDisabled&&/* @__PURE__ */Be.createElement("li",null,/* @__PURE__ */Be.createElement("a",{onClick:()=>{p.confirm({...l,buttonText:`Enable ${t.name}`,header:`Really enable ${t.name}?`,submitMethod:a=>i.enableServerGroup(t,e,Vo(e,a)),taskMonitorConfig:{application:e,title:`Enabling ${t.name}`}})}},"Enable")),/* @__PURE__ */Be.createElement("li",null,/* @__PURE__ */Be.createElement("a",{onClick:()=>{const a={...l,buttonText:`Destroy ${t.name}`,header:`Really destroy ${t.name}?`,submitMethod:a=>i.destroyServerGroup(t,e,Vo(e,a)),taskMonitorConfig:{application:e,title:`Destroying ${t.name}`}};he.addDestroyWarningMessage(e,t,a),p.confirm(a)}},"Destroy"))))}function Wo(e,t){var a,n;const r=null==(n=null==(a=e.launchConfig)?void 0:a.instanceTemplate)?void 0:n.properties,i=e.shieldedInstanceConfig||(null==r?void 0:r.shieldedInstanceConfig),l=e.shieldedVmConfig||(null==r?void 0:r.shieldedVmConfig);return Object.prototype.hasOwnProperty.call(i||{},t)?i[t]:Object.prototype.hasOwnProperty.call(l||{},t)?l[t]:e[t]}const Xo=[function({serverGroup:e}){/* @__PURE__ */
|
|
155
|
+
return Be.createElement(u,{heading:"Server Group Information",defaultExpanded:!0},/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Account"),/* @__PURE__ */Be.createElement("dd",null,/* @__PURE__ */Be.createElement(m,{account:e.account})),/* @__PURE__ */Be.createElement("dt",null,"Region"),/* @__PURE__ */Be.createElement("dd",null,e.region),/* @__PURE__ */Be.createElement("dt",null,"Network"),/* @__PURE__ */Be.createElement("dd",null,e.network||"-"),/* @__PURE__ */Be.createElement("dt",null,"Subnet"),/* @__PURE__ */Be.createElement("dd",null,e.subnet||"-")))},function({serverGroup:e}){var t,a,n,r,i,l,o,s;/* @__PURE__ */
|
|
156
|
+
return Be.createElement(u,{heading:"Capacity",defaultExpanded:!0},/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Desired"),/* @__PURE__ */Be.createElement("dd",null,null!=(r=null!=(n=null==(t=e.capacity)?void 0:t.desired)?n:null==(a=e.instances)?void 0:a.length)?r:"-"),/* @__PURE__ */Be.createElement("dt",null,"Min"),/* @__PURE__ */Be.createElement("dd",null,null!=(l=null==(i=e.capacity)?void 0:i.min)?l:"-"),/* @__PURE__ */Be.createElement("dt",null,"Max"),/* @__PURE__ */Be.createElement("dd",null,null!=(s=null==(o=e.capacity)?void 0:o.max)?s:"-")))},function({serverGroup:e}){var t,a;const n=null==(t=e.launchConfig)?void 0:t.instanceTemplate,r=[["Secure Boot",Wo(e,"enableSecureBoot")],["vTPM",Wo(e,"enableVtpm")],["Integrity Monitoring",Wo(e,"enableIntegrityMonitoring")]];/* @__PURE__ */
|
|
157
|
+
return Be.createElement(u,{heading:"Launch Configuration",defaultExpanded:!0},/* @__PURE__ */Be.createElement("dl",{className:"dl-horizontal dl-narrow"},/* @__PURE__ */Be.createElement("dt",null,"Instance Template"),/* @__PURE__ */Be.createElement("dd",null,(null==n?void 0:n.name)||"-"),/* @__PURE__ */Be.createElement("dt",null,"Zones"),/* @__PURE__ */Be.createElement("dd",null,(e.zones||[]).join(", ")||"-"),/* @__PURE__ */Be.createElement("dt",null,"Target shape"),/* @__PURE__ */Be.createElement("dd",null,(null==(a=e.distributionPolicy)?void 0:a.targetShape)||"-"),r.map(([e,t])=>/* @__PURE__ */Be.createElement(Be.Fragment,{key:e},/* @__PURE__ */Be.createElement("dt",null,e),/* @__PURE__ */Be.createElement("dd",null,void 0===t?"-":String(t)))),/* @__PURE__ */Be.createElement("dt",null,"Logs"),/* @__PURE__ */Be.createElement("dd",null,e.logsLink?/* @__PURE__ */Be.createElement("a",{href:e.logsLink,target:"_blank",rel:"noopener noreferrer"},"View Google Cloud logs"):"-")),/* @__PURE__ */Be.createElement(wo,{instanceFlexibilityPolicy:e.instanceFlexibilityPolicy}))},function({app:e,serverGroup:t}){/* @__PURE__ */
|
|
158
|
+
return Be.createElement(u,{heading:"Autoscaling"},/* @__PURE__ */Be.createElement(Fo,{application:e,mutationsEnabled:!R.isDisabled("gce"),policy:t.autoscalingPolicy,serverGroup:t}))},function({app:e,serverGroup:t}){/* @__PURE__ */
|
|
159
|
+
return Be.createElement(u,{heading:"Auto-healing"},/* @__PURE__ */Be.createElement(Ro,{application:e,mutationsEnabled:!R.isDisabled("gce"),policy:t.autoHealingPolicy,serverGroup:t}))}];class Zo{constructor(){const e=new Nn;return{convertServerGroupCommandToDeployConfiguration:function(e){const t=Ce({backingData:[],viewState:[]},e);return"clone"!==e.viewState.mode&&delete t.source,t.disableTraffic=!t.enableTraffic,t.cloudProvider="gce",t.availabilityZones={},t.availabilityZones[t.region]=function(e){return e.zone?[e.zone]:[we(e,"backingData.filtered.truncatedZones"),we(e,["availabilityZones",e.region]),we(e,"distributionPolicy.zones")].find(e=>Array.isArray(e)&&e.length)||[]}(e),t.account=t.credentials,delete t.viewState,delete t.backingData,delete t.selectedProvider,delete t.implicitSecurityGroups,delete t.enableTraffic,delete t.providerType,delete t.enableAutoHealing,delete t.partnerMetadata,t.autoHealingPolicy&&(t.autoHealingPolicy=["healthCheck","healthCheckKind","healthCheckUrl","initialDelaySec"].reduce((e,a)=>(void 0!==t.autoHealingPolicy[a]&&(e[a]=t.autoHealingPolicy[a]),e),{})),t},normalizeServerGroup:function(t,a){return a.getDataSource("loadBalancers").ready().then(()=>(t.loadBalancers&&(t.loadBalancers=e.normalizeLoadBalancerNamesForAccount(t.loadBalancers,t.account,a.getDataSource("loadBalancers").data,t.region)),t))}}}}class Yo{constructor(){this.gceNetworks=void 0,b.listNetworksByProvider("gce").then(e=>{this.gceNetworks=e})}render(e){if(e.subnet)return e.subnet;return be.chain(this.gceNetworks).filter({account:e.account,name:e.network}).map("autoCreateSubnets").head().value()?"(Auto-select)":"[none]"}}function Jo(){R.registerProvider("gce",{name:"Google",logo:{path:On},applicationProviderFields:[{field:"associatePublicIpAddress",helpKey:"gce.serverGroup.associatePublicIpAddress.providerField",label:"Associate Public IP Address",type:"boolean"}],cache:{configurer:qe},image:{reader:Ve},serverGroup:{transformer:Zo,commandBuilder:ni,configurationService:oi,CloneServerGroupModal:fo,detailsActions:Ko,detailsGetter:jo,detailsSections:Xo},instance:{CustomInstanceBuilder:To,details:Ye,instanceTypeService:Qe,multiInstanceTaskTransformer:tt},loadBalancer:{CreateLoadBalancerModal:bn,pipelineCreateLoadBalancerModal:e=>bn.show({...e,app:e.application,forPipelineConfig:!0}),detailsActions:Bn,detailsSections:Dn,transformer:Fn,setTransformer:zn,useDetailsHook:Mn},securityGroup:{CreateSecurityGroupModal:Kr,details:Zr,transformer:Jr,reader:Yr},subnet:{renderer:Yo},snapshotsEnabled:!0})}function Qo(e,t){F.pipeline.getStageTypes().some(t=>(t.provides||t.key)===e&&"gce"===t.cloudProvider)||t()}function es(){Qo("bake",Vn),Qo("cloneServerGroup",fr),Qo("destroyServerGroup",br),Qo("disableServerGroup",yr),Qo("disableCluster",Er),Qo("enableServerGroup",kr),Qo("findImage",Cr),Qo("findImageFromTags",Pr),Qo("resizeServerGroup",wr),Qo("scaleDownCluster",Ir),Qo("shrinkCluster",Mr),Qo("upsertImageTags",xr)}ve.registerValidator("gce",new class{validateSpecialCharacters(e,t){/^([a-zA-Z][a-zA-Z0-9]*)?$/.test(e)||t.push("The application name must begin with a letter and must contain only letters or digits. No special characters are allowed.")}validateLength(e,t,a){const n=63;if(e.length>n)a.push("The maximum length for an application in Google is 63 characters.");else{if(e.length>34)if(e.length>46)t.push(`You will not be able to create a Google load balancer for this application if the\n application's name is longer than 46 characters (currently: ${e.length}\n characters).`);else if(e.length>=44)t.push('With separators ("-"), you will not be able to include a stack and detail field for Google load balancers.');else{const a=44-e.length;t.push(`If you plan to include a stack or detail field for Google load balancers, you will only\n have ~${a} characters to do so.`)}if(e.length>41)if(e.length>53)t.push(`You will not be able to create a Google server group for this application if the\n application's name is longer than 53 characters (currently: ${e.length}\n characters).`);else if(e.length>=51)t.push('With separators ("-"), you will not be able to include a stack and detail field for Google server groups.');else{const a=51-e.length;t.push(`If you plan to include a stack or detail field for Google server groups, you will only\n have ~${a} characters to do so.`)}if(e.length>51)if(e.length>=61)t.push(`With separators ("-"), you will not be able to include a stack and detail field for Google ${J.get("firewalls")}.`);else{const a=61-e.length;t.push(`If you plan to include a stack or detail field for Google ${J.get("firewalls")}, you will only\n have ~${a} characters to do so.`)}}}validate(e=""){const t=[],a=[];return e.length&&(this.validateSpecialCharacters(e,a),this.validateLength(e,t,a)),{warnings:t,errors:a}}}),Jo(),es(),fe.registerProvider("gce",["custom","redblack"]);export{es as registerGooglePipelineStages,Jo as registerGoogleProvider};
|
|
2
160
|
//# sourceMappingURL=index.js.map
|