@spinnaker/google 2025.2.4 → 2025.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/style-inject/dist/style-inject.es.js","../src/autoscalingPolicy/GceAutoScalingFieldLayout.tsx","../src/autoscalingPolicy/IGceAutoscalingPolicy.ts","../src/gce.settings.ts","../src/autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling.tsx","../src/address/address.reader.ts","../src/backendService/backendService.reader.js","../src/healthCheck/healthCheck.read.service.ts","../src/cache/cacheConfigurer.service.js","../src/common/xpnNaming.gce.service.js","../src/help/gce.help.ts","../src/image/image.reader.ts","../src/image/ImageSelect.tsx","../src/instance/custom/customInstanceBuilder.gce.service.js","../src/instance/custom/customInstance.filter.js","../src/loadBalancer/httpLoadBalancerUtils.service.ts","../src/instance/details/instance.details.controller.js","../src/instance/gceInstanceTypeDisks.ts","../src/instance/gceInstanceType.service.js","../src/instance/gceMultiInstanceTask.transformer.js","../src/interceptors/iap.interceptor.ts","../src/loadBalancer/configure/choice/loadBalancerTypeToWizardMap.constant.ts","../src/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.ts","../src/loadBalancer/configure/http/templates.ts","../src/loadBalancer/configure/http/backendService/backendService.component.js","../src/loadBalancer/configure/http/basicSettings/basicSettings.component.js","../src/cache/cacheRefresh.component.ts","../src/certificate/certificate.reader.ts","../src/loadBalancer/configure/common/sessionAffinityNameMaps.ts","../src/loadBalancer/configure/http/transformer.service.js","../src/loadBalancer/configure/http/commandBuilder.service.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRules.service.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRules.controller.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRulesButton.component.js","../src/loadBalancer/configure/http/healthCheck/healthCheck.component.js","../src/loadBalancer/configure/http/pathRule/pathRule.component.js","../src/loadBalancer/configure/http/hostRule/hostRule.component.js","../src/loadBalancer/configure/http/httpLoadBalancer.write.service.js","../src/loadBalancer/configure/common/addressSelector.component.ts","../src/loadBalancer/configure/http/listeners/listener.component.js","../src/loadBalancer/configure/http/createHttpLoadBalancer.controller.js","../src/loadBalancer/configure/common/commonLoadBalancer.controller.ts","../src/loadBalancer/configure/common/commonLoadBalancerCommandBuilder.service.ts","../src/loadBalancer/configure/common/healthCheck.component.ts","../src/loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller.ts","../src/loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller.ts","../src/gceRegionSelectField.directive.js","../src/loadBalancer/loadBalancer.transformer.js","../src/loadBalancer/configure/network/createLoadBalancer.controller.js","../src/loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller.ts","../src/loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller.ts","../src/loadBalancer/details/backendService/backendService.component.ts","../src/loadBalancer/details/backendService/sessionAffinity.filter.ts","../src/loadBalancer/details/deleteModal/deleteModal.controller.ts","../src/loadBalancer/details/healthCheck/healthCheck.component.js","../src/loadBalancer/details/loadBalancerType/loadBalancerType.component.js","../src/loadBalancer/details/loadBalancerDetail.controller.js","../src/loadBalancer/loadBalancer.setTransformer.ts","../src/logo/gce.logo.png","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/pipeline/stages/bake/gceBakeStage.js","../src/pipeline/stages/cloneServerGroup/gceCloneServerGroupStage.js","../src/pipeline/stages/destroyAsg/gceDestroyAsgStage.js","../src/pipeline/stages/disableAsg/gceDisableAsgStage.js","../src/pipeline/stages/disableCluster/gceDisableClusterStage.js","../src/pipeline/stages/enableAsg/gceEnableAsgStage.js","../src/pipeline/stages/findAmi/gceFindAmiStage.js","../src/pipeline/stages/findImageFromTags/gceFindImageFromTagsStage.js","../src/pipeline/stages/resizeAsg/gceResizeAsgStage.js","../src/pipeline/stages/scaleDownCluster/gceScaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/gceShrinkClusterStage.js","../src/pipeline/stages/tagImage/gceTagImageStage.js","../src/securityGroup/configure/createSecurityGroup.controller.js","../src/securityGroup/configure/editSecurityGroup.controller.js","../src/securityGroup/securityGroupHelpText.service.ts","../src/securityGroup/configure/ConfigSecurityGroupMixin.controller.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/autoscalingPolicy/components/basicSettings/basicSettings.component.js","../src/autoscalingPolicy/components/metricSettings/metricSettings.component.js","../src/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.js","../src/autoscalingPolicy/components/scalingSchedules/timeZoneSelect.tsx","../src/serverGroup/serverGroup.transformer.js","../src/healthCheck/healthCheckUtils.ts","../src/serverGroup/configure/wizard/advancedSettings/gceAccelerator.service.ts","../src/serverGroup/configure/wizard/securityGroups/tagManager.service.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/advancedSettings/GceAcceleratorConfigurer.tsx","../src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js","../src/serverGroup/configure/wizard/advancedSettings/diskConfigurer.component.ts","../src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.ts","../src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.js","../src/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.js","../src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.js","../src/serverGroup/configure/wizard/customInstance/CustomInstanceConfigurer.tsx","../src/serverGroup/configure/wizard/customInstance/customInstanceConfigurer.component.ts","../src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.js","../src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/elSevenOptionsGenerator.component.js","../src/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.js","../src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.ts","../src/gceNetworkSelectField.directive.js","../src/subnet/subnetSelectField.directive.js","../src/serverGroup/configure/wizard/location/basicSettings.controller.js","../src/serverGroup/configure/wizard/securityGroups/tagSelector.component.js","../src/serverGroup/configure/wizard/securityGroups/tagSelectorGenerator.component.js","../src/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.js","../src/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.js","../src/serverGroup/configure/wizard/zones/regionalSelector.directive.js","../src/serverGroup/configure/wizard/zones/targetShapeSelector.directive.ts","../src/serverGroup/configure/wizard/zones/zoneSelector.directive.js","../src/serverGroup/configure/serverGroup.configure.gce.module.js","../src/serverGroup/configure/wizard/hiddenMetadataKeys.value.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/wizard/cloneServerGroup.gce.controller.js","../src/serverGroup/details/stateful/StatefulMIGService.ts","../src/serverGroup/details/stateful/MarkDiskStatefulButton.tsx","../src/serverGroup/details/stateful/UpdateBootImageButton.tsx","../src/serverGroup/details/ServerGroupDiskDescriptions.tsx","../src/serverGroup/details/autoscalingPolicy/modal/GceScaleInControls.tsx","../src/serverGroup/details/autoHealingPolicy/addAutoHealingPolicyButton.component.ts","../src/serverGroup/details/autoHealingPolicy/autoHealingPolicy.component.ts","../src/autoscalingPolicy/autoscalingPolicy.write.service.js","../src/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller.ts","../src/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.controller.js","../src/serverGroup/details/autoscalingPolicy/addAutoscalingPolicyButton.component.js","../src/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.js","../src/common/footer.directive.js","../src/serverGroup/details/resize/resizeAutoscalingPolicy.component.js","../src/serverGroup/details/resize/resizeCapacity.component.js","../src/serverGroup/details/resize/resizeServerGroup.controller.js","../src/serverGroup/details/rollback/rollbackServerGroup.controller.js","../src/serverGroup/details/serverGroupDetails.gce.controller.js","../src/serverGroup/details/serverGroup.details.gce.module.js","../src/subnet/subnet.renderer.js","../src/validation/applicationName.validator.js","../src/gce.module.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { isEmpty } from 'lodash';\nimport React from 'react';\n\nimport type { ILayoutProps } from '@spinnaker/core';\n\nimport './gceAutoscalingFieldLayout.less';\n\n// todo(mneterval): remove when GCE Autoscaling Controls are entirely converted to React & Formik\nexport function GceAutoScalingFieldLayout(props: ILayoutProps) {\n const { label, help, input, actions, validation, required } = props;\n\n const showLabel = !isEmpty(label) || !isEmpty(help);\n const { hidden, messageNode } = validation;\n\n return (\n <div className=\"gce-autoscaling-layout\">\n {showLabel && (\n <label className=\"col-md-3 sm-label-right\">\n {label}\n {required && <span>*</span>} {help}\n </label>\n )}\n <div className=\"col-md-2 content-fields\">\n <div>\n {input} {actions}\n </div>\n {!hidden && <div className=\"message\">{messageNode}</div>}\n </div>\n </div>\n );\n}\n","export interface IGceAutoscalingPolicy {\n cpuUtilization: IGceAutoscalingCpuUtilization;\n scaleInControl: IGceScaleInControl;\n}\n\nexport interface IGceScaleInControl {\n maxScaledInReplicas?: {\n fixed?: number;\n percent?: number;\n };\n timeWindowSec?: number;\n}\n\nexport interface IGceAutoscalingCpuUtilization {\n predictiveMethod?: GcePredictiveMethod;\n utilizationTarget?: number;\n}\n\nexport enum GcePredictiveMethod {\n NONE = 'NONE',\n STANDARD = 'OPTIMIZE_AVAILABILITY',\n}\n","import { defaults } from 'lodash';\n\nimport type { IInstanceStorage, IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IGCEProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n zone?: string;\n instanceTypeStorage?: IInstanceStorage;\n };\n feature: {\n predictiveAutoscaling?: boolean;\n statefulMigsEnabled?: boolean;\n };\n}\n\nexport const GCEProviderSettings: IGCEProviderSettings = defaults(SETTINGS.providers.gce || {}, {\n defaults: {},\n feature: {},\n resetToOriginal: SETTINGS.resetProvider('gce'),\n});\n","import { module } from 'angular';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport type { IFormInputProps } from '@spinnaker/core';\nimport { CheckboxInput, FormField, HelpField, LayoutProvider, withErrorBoundary } from '@spinnaker/core';\n\nimport { GceAutoScalingFieldLayout } from '../../GceAutoScalingFieldLayout';\nimport type { IGceAutoscalingPolicy } from '../../IGceAutoscalingPolicy';\nimport { GcePredictiveMethod } from '../../IGceAutoscalingPolicy';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\ninterface IGcePredictiveAutoscalingProps {\n policy: IGceAutoscalingPolicy;\n updatePolicy: (policy: IGceAutoscalingPolicy) => void;\n}\n\nfunction GcePredictiveAutoscaling({ policy, updatePolicy }: IGcePredictiveAutoscalingProps) {\n if (!GCEProviderSettings.feature.predictiveAutoscaling) {\n return null;\n }\n\n function togglePredictiveAutoscaling(predictiveMethod: GcePredictiveMethod) {\n updatePolicy({\n ...policy,\n cpuUtilization: {\n ...policy.cpuUtilization,\n predictiveMethod,\n },\n });\n }\n\n return (\n <LayoutProvider value={GceAutoScalingFieldLayout}>\n <div className=\"row\">\n <FormField\n help={<HelpField id=\"gce.serverGroup.scalingPolicy.predictiveAutoscaling\" />}\n input={(inputProps: IFormInputProps) => <CheckboxInput {...inputProps} />}\n label=\"Enable predictive autoscaling\"\n onChange={(e: React.ChangeEvent<any>) => {\n togglePredictiveAutoscaling(e.target.checked ? GcePredictiveMethod.STANDARD : GcePredictiveMethod.NONE);\n }}\n value={policy?.cpuUtilization?.predictiveMethod === GcePredictiveMethod.STANDARD}\n />\n </div>\n </LayoutProvider>\n );\n}\n\nexport const GCE_PREDICTIVE_AUTOSCALING = 'spinnaker.gce.predictiveAutoscaling';\nmodule(GCE_PREDICTIVE_AUTOSCALING, []).component(\n 'gcePredictiveAutoscaling',\n react2angular(withErrorBoundary(GcePredictiveAutoscaling, 'gcePredictiveAutoscaling'), ['policy', 'updatePolicy']),\n);\n","import { module } from 'angular';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\n\ninterface IAddressSearchResults {\n account: string;\n address: string; // JSON encoded string containing the address. It is missing the account.\n name: string;\n provider: string;\n region: string;\n type: string;\n}\n\nexport interface IGceAddress {\n account?: string;\n address: string;\n creationTimestamp?: string;\n description?: string;\n id?: number;\n kind?: string;\n labelFingerprint?: string;\n name?: string;\n networkTier?: string;\n region?: string;\n selfLink?: string;\n status?: string;\n}\n\nclass GceAddressReader {\n public listAddresses(region?: string): PromiseLike<IGceAddress[]> {\n if (region) {\n return this.listAddresses(null /* region */).then((addresses) =>\n addresses.filter((address) => address.region === region),\n );\n } else {\n return SearchService.search<IAddressSearchResults>(\n { q: '', type: 'addresses', allowShortQuery: 'true' },\n InfrastructureCaches.get('addresses'),\n )\n .then((searchResults: ISearchResults<IAddressSearchResults>) => {\n if (searchResults && searchResults.results) {\n return searchResults.results\n .filter((result) => result.provider === 'gce')\n .map((result) => {\n const address = JSON.parse(result.address) as IGceAddress;\n address.account = result.account;\n address.region = result.region;\n return address;\n });\n } else {\n return [];\n }\n })\n .catch(() => [] as IGceAddress[]);\n }\n }\n}\n\nexport const GCE_ADDRESS_READER = 'spinnaker.gce.addressReader.service';\nmodule(GCE_ADDRESS_READER, []).service('gceAddressReader', GceAddressReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches, REST } from '@spinnaker/core';\n\nexport const GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER = 'spinnaker.deck.gce.backendService.reader.service';\nexport const name = GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER; // for backwards compatibility\nmodule(GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER, []).factory('gceBackendServiceReader', function () {\n function listBackendServices(kind) {\n if (kind) {\n return listBackendServices().then(([services]) => {\n if (services) {\n const results = services.results || [];\n return results.filter((service) => service.kind === kind);\n }\n return [];\n });\n } else {\n return REST('/search')\n .useCache(InfrastructureCaches.get('backendServices'))\n .query({ q: '', type: 'backendServices', allowShortQuery: 'true' })\n .get();\n }\n }\n\n return { listBackendServices };\n});\n","import { module } from 'angular';\nimport { uniqWith } from 'lodash';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\nimport type { IGceHealthCheck } from '../domain';\n\ninterface IHealthCheckSearchResults {\n name: string;\n account: string;\n healthCheck: string; // JSON encoded string containing the real health check (it is missing the account).\n region?: string;\n kind: string;\n provider: string;\n type: string;\n}\n\nexport class GceHealthCheckReader {\n public listHealthChecks(type?: string): PromiseLike<IGceHealthCheck[]> {\n if (type) {\n return this.listHealthChecks().then((healthChecks) =>\n healthChecks.filter((healthCheck) => healthCheck.healthCheckType === type),\n );\n } else {\n return SearchService.search(\n { q: '', type: 'healthChecks', allowShortQuery: 'true' },\n InfrastructureCaches.get('healthChecks'),\n )\n .then((searchResults: ISearchResults<IHealthCheckSearchResults>) => {\n if (searchResults && searchResults.results) {\n const healthChecks = searchResults.results\n .filter((result) => result.provider === 'gce')\n .map((result) => {\n const healthCheck = JSON.parse(result.healthCheck) as IGceHealthCheck;\n healthCheck.account = result.account;\n return healthCheck;\n });\n return uniqWith(healthChecks, (checkA: IGceHealthCheck, checkB: IGceHealthCheck) => {\n return (\n checkA.name === checkB.name &&\n checkA.healthCheckType === checkB.healthCheckType &&\n checkA.account === checkB.account\n );\n });\n } else {\n return [];\n }\n })\n .catch(() => []);\n }\n }\n}\n\nexport const GCE_HEALTH_CHECK_READER = 'spinnaker.gce.healthCheck.reader';\nmodule(GCE_HEALTH_CHECK_READER, []).service('gceHealthCheckReader', GceHealthCheckReader);\n","'use strict';\n\nimport { module } from 'angular';\nimport { GCE_ADDRESS_READER } from '../address/address.reader';\n\nimport { GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER } from '../backendService/backendService.reader';\nimport { GCE_HEALTH_CHECK_READER } from '../healthCheck/healthCheck.read.service';\n\nexport const GOOGLE_CACHE_CACHECONFIGURER_SERVICE = 'spinnaker.gce.cache.initializer';\nexport const name = GOOGLE_CACHE_CACHECONFIGURER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_CACHE_CACHECONFIGURER_SERVICE, [\n GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER,\n GCE_ADDRESS_READER,\n GCE_HEALTH_CHECK_READER,\n]).factory('gceCacheConfigurer', [\n 'gceAddressReader',\n 'gceBackendServiceReader',\n 'gceCertificateReader',\n 'gceHealthCheckReader',\n function (gceAddressReader, gceBackendServiceReader, gceCertificateReader, gceHealthCheckReader) {\n const config = Object.create(null);\n\n config.addresses = {\n initializers: [() => gceAddressReader.listAddresses()],\n };\n\n config.backendServices = {\n initializers: [() => gceBackendServiceReader.listBackendServices()],\n };\n\n config.certificates = {\n initializers: [() => gceCertificateReader.listCertificates()],\n };\n\n config.healthChecks = {\n initializers: [() => gceHealthCheckReader.listHealthChecks()],\n };\n\n return config;\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_COMMON_XPNNAMING_GCE_SERVICE = 'spinnaker.gce.common.xpnNaming.service';\nexport const name = GOOGLE_COMMON_XPNNAMING_GCE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_COMMON_XPNNAMING_GCE_SERVICE, []).factory('gceXpnNamingService', function () {\n const deriveProjectId = (resourceWithSelfLink) => {\n const pathSegments = resourceWithSelfLink.selfLink.split('/');\n return pathSegments[pathSegments.indexOf('projects') + 1];\n };\n\n const decorateXpnResourceIfNecessary = (projectId, xpnResource) => {\n if (!xpnResource) {\n return null;\n }\n\n // A network selfLink looks like: https://compute.googleapis.com/compute/beta/projects/test-host-project/global/networks/default\n // A subnet selfLink looks like: https://compute.googleapis.com/compute/beta/projects/my-test-service-project/regions/us-west1/subnetworks/default\n const xpnResourcePathSegments = xpnResource.split('/');\n const xpnResourceProjectId = xpnResourcePathSegments[xpnResourcePathSegments.indexOf('projects') + 1];\n const xpnResourceName = _.last(xpnResourcePathSegments);\n if (xpnResourceProjectId !== projectId) {\n return xpnResourceProjectId + '/' + xpnResourceName;\n } else {\n return xpnResourceName;\n }\n };\n\n return {\n deriveProjectId,\n decorateXpnResourceIfNecessary,\n };\n});\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'gce.httpLoadBalancer.certificate':\n 'The name of an SSL certificate. If specified, Spinnaker will create an HTTPS load balancer.',\n 'gce.httpLoadBalancer.defaultService':\n 'A default service handles any requests that do not match a specified host rule or path matching rule.',\n 'gce.httpLoadBalancer.externalIP':\n 'The IP address for this listener. If you do not specify an IP, your listener will be assigned an ephemeral IP.',\n 'gce.httpLoadBalancer.hostRule.hostPattern': 'For example, <b>example.com</b>.',\n '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>.`,\n 'gce.httpLoadBalancer.pathRule.paths': 'For example, <b>/path</b> in <b>example.com/path</b>',\n 'gce.httpLoadBalancer.port':\n 'HTTP requests can be load balanced based on port 80 or port 8080. HTTPS requests can be load balanced on port 443.',\n 'gce.image.artifact':\n 'The artifact that is to be deployed to this cluster. The artifact should represent a deployable image.',\n '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 `,\n 'gce.instance.customInstance.cores':\n '<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>',\n 'gce.instance.customInstance.memory':\n '<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>',\n 'gce.instance.customInstance.extendedmemory':\n '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',\n 'gce.instance.customMetadata.instance-template': 'The instance template used to configure this instance.',\n 'gce.instance.customMetadata.load-balancer-names':\n 'This field is used to \"remember\" what load balancers this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.global-load-balancer-names':\n 'This field is used to \"remember\" what global load balancers this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.backend-service-names':\n 'This field is used to \"remember\" what backend services this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.load-balancing-policy':\n 'This field is used to \"remember\" the load balancing policy this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.startup-script': 'This script will run automatically on every boot.',\n 'gce.instance.labels.spinnaker-region': 'This label can be used to group instances when querying for metrics.',\n 'gce.instance.labels.spinnaker-server-group': 'This label can be used to group instances when querying for metrics.',\n 'gce.instance.storage':\n '<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>',\n 'gce.instance.storage.localSSD':\n '<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>',\n 'gce.instance.serviceAccount':\n '<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>',\n 'gce.instance.authScopes':\n '<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>',\n 'gce.instance.authScopes.cloud-platform':\n '<p>The instances in this server group have full API access to all Google Cloud services.</p>',\n 'gce.instanceType.32core':\n '<p>32-core machine types are in Beta and are available only in Ivy Bridge and Haswell zones.</p>',\n 'gce.internalLoadBalancer.ports': 'Use a comma to separate up to five TCP ports.',\n 'gce.internalHttpLoadBalancer.network':\n \"Network must have a subnet whose 'purpose' is 'INTERNAL_HTTPS_LOAD_BALANCER'\",\n 'gce.loadBalancer.connectionDraining':\n '(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.',\n 'gce.loadBalancer.detail':\n '<p>(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.</p>',\n 'gce.loadBalancer.advancedSettings.healthInterval':\n '<p>Configures the interval, in seconds, between load balancer health checks.</p><p>Default: <b>10</b></p>',\n 'gce.loadBalancer.advancedSettings.healthyThreshold':\n '<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>',\n 'gce.loadBalancer.advancedSettings.unhealthyThreshold':\n '<p>Configures the number of unhealthy observations before deservicing an instance from the load balancer.</p><p>Default: <b>2</b></p>',\n 'gce.loadBalancer.healthCheck':\n '(Optional) <b>Health Checks</b> use HTTP requests to determine if a VM instance is healthy.',\n 'gce.loadBalancer.portName':\n '(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.',\n 'gce.loadBalancer.portRange':\n '(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.',\n 'gce.securityGroup.sourceCIDRs':\n 'Traffic is only allowed from sources that match one of these CIDR ranges, or one of the source tags above.',\n 'gce.securityGroup.sourceTags':\n 'Traffic is only allowed from sources that match one of these tags, or one of the source CIDR ranges below.',\n 'gce.securityGroup.targetTags': 'Traffic is only allowed if the target instance has one of these tags.',\n 'gce.securityGroup.targetServiceAccounts':\n 'Traffic is allowed if the target instance has one of these service accounts.',\n 'gce.securityGroup.sourceServiceAccounts':\n 'Traffic is allowed if the source instance has one of these service accounts.',\n 'gce.serverGroup.associatePublicIpAddress.providerField':\n 'Check if new GCE server groups in this application should be assigned a public IP address by default.',\n '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.`,\n 'gce.serverGroup.scalingPolicy.coolDownPeriodSec':\n 'How long to wait before collecting information from a new instance. This should be at least the time it takes to initialize the instance.',\n 'gce.serverGroup.scalingPolicy.cpuUtilization':\n 'Autoscaler adds or removes instances to maintain this CPU usage on each instance.',\n 'gce.serverGroup.scalingPolicy.predictiveAutoscaling':\n 'Autoscaler adds or removes instances based on forecasted load. You must set a CPU utilization target to enable predictive autoscaling.',\n 'gce.serverGroup.scalingPolicy.loadBalancingUtilization':\n 'Autoscaler adds or removes instances to maintain this usage of load-balancing capacity.',\n 'gce.serverGroup.scalingPolicy.customMetricUtilizations':\n 'Autoscaler adds or removes instances to maintain this usage for custom metric.',\n '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`,\n 'gce.serverGroup.imageName':\n '(Required) <b>Image</b> is the Google Compute Engine image. Images are restricted to the account selected.',\n 'gce.serverGroup.capacity':\n '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.',\n 'gce.serverGroup.minCpuPlatform':\n 'The baseline minimum CPU platform to use for your instances, whenever available. Select \"Automatic\" unless you have a specific need.',\n 'gce.serverGroup.customMetadata':\n '<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.',\n 'gce.serverGroup.userData':\n '<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>',\n 'gce.serverGroup.customMetadata.load-balancer-names':\n 'This field is used to \"remember\" what load balancers this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.global-load-balancer-names':\n 'This field is used to \"remember\" what global load balancers this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.backend-service-names':\n 'This field is used to \"remember\" what backend services this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.load-balancing-policy':\n '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.',\n 'gce.serverGroup.customMetadata.select-zones':\n 'This regional server group will be deployed only to specific zones within the region.',\n 'gce.serverGroup.customMetadata.startup-script': 'This script will run automatically on every boot.',\n 'gce.serverGroup.labels.spinnaker-region': 'This label can be used to group instances when querying for metrics.',\n 'gce.serverGroup.labels.spinnaker-server-group':\n 'This label can be used to group instances when querying for metrics.',\n 'gce.serverGroup.shieldedVmConfig':\n 'Shielded VM features include trusted UEFI firmware and come with options for Secure Boot, Virtual Trusted Platform Module (vTPM), and Integrity Monitoring.',\n 'gce.serverGroup.shieldedVmSecureBoot':\n 'Secure boot helps protect your VM instances against boot-level and kernel-level malware and rootkits.',\n 'gce.serverGroup.shieldedVmVtpm':\n 'Virtual Trusted Platform Module (vTPM) validates your guest VM pre-boot and boot integrity, and offers key generation and protection.',\n 'gce.serverGroup.shieldedVmIntegrityMonitoring':\n '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.',\n 'gce.serverGroup.preemptibility':\n 'A preemptible VM costs much less, but lasts only 24 hours. It can be terminated sooner due to system demands.',\n 'gce.serverGroup.automaticRestart':\n 'Compute Engine can automatically restart VM instances if they are terminated for non-user-initiated reasons (maintenance event, hardware failure, software failure, etc.).',\n 'gce.serverGroup.onHostMaintenance':\n 'When Compute Engine performs periodic infrastructure maintenance it can migrate your VM instances to other hardware without downtime.',\n 'gce.serverGroup.canIpForward':\n '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.',\n 'gce.serverGroup.securityGroups.implicit':\n 'Firewall rules with no target tags defined will permit incoming connections that match the ingress rules to all instances in the network.',\n 'gce.serverGroup.securityGroups.targetTags':\n 'This {{firewall}} rule will be associated with this server group only if a target tag is selected.',\n 'gce.serverGroup.autoscaling.targetCPUUsage':\n 'Autoscaling adds or removes VMs in the group to maintain this level of CPU usage on each VM.',\n 'gce.serverGroup.autoscaling.targetHTTPLoadBalancingUsage':\n \"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.\",\n 'gce.serverGroup.autoscaling.targetMetric':\n 'Autoscaling adds or removes VMs in the group to maintain these target levels.',\n 'gce.serverGroup.autoscaling.minVMs':\n 'The least number of VM instances the group will contain, even if the target is not met.',\n 'gce.serverGroup.autoscaling.maxVMs': 'The largest number of VM instances allowed, even if the target is exceeded.',\n 'gce.serverGroup.autoscaling.cooldown':\n '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.',\n 'gce.serverGroup.autoscaling.mode':\n '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.',\n 'gce.serverGroup.autoHealing':\n '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.',\n 'gce.serverGroup.initialDelaySec':\n 'The time to allow an instance to boot and applications to fully start before the first health check.',\n 'gce.serverGroup.maxUnavailable': `\n Maximum number of instances that can be unavailable when auto-healing. The instance is considered available if all of the following conditions are satisfied:\n <ul>\n <li>1. Instance's status is RUNNING.</li>\n <li>2. Instance's liveness health check result was observed to be HEALTHY at least once.</li>\n </ul>`,\n '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>`,\n 'gce.serverGroup.loadBalancingPolicy.balancingMode':\n '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).',\n 'gce.serverGroup.loadBalancingPolicy.maxRatePerInstance':\n 'The maximum number of requests per second that can be sent to the backend instance group. Input must be a number greater than zero.',\n 'gce.serverGroup.loadBalancingPolicy.maxUtilization':\n '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.',\n 'gce.serverGroup.loadBalancingPolicy.maxConnectionsPerInstance':\n 'The target connections per second for individual instances. When this number is exceeded, requests are directed to another backend.',\n '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.`,\n 'gce.serverGroup.loadBalancingPolicy.portName':\n 'A load balancer sends traffic to an instance group through a named port. Input must be a port name.',\n 'gce.serverGroup.loadBalancingPolicy.listeningPort':\n '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).',\n 'gce.serverGroup.traffic':\n 'Registers the server group with any associated load balancers. These registrations are used by Spinnaker to determine if the server group is enabled.',\n 'gce.serverGroup.accelerator':\n '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.',\n 'gce.tagImage.consideredStages':\n 'Limit which previous stages will be considered when locating images to tag. If left unchecked, images generated by any upstream stage will be tagged.',\n 'pipeline.config.gce.bake.accountName':\n '<p>(Optional) The name of a Google account configured within Rosco. If left blank, the first configured account will be used.</p>',\n 'pipeline.config.gce.bake.baseImage':\n '<p>(Optional) A GCE image name. For example: ubuntu-1204-precise-v20150910.</p>',\n '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>`,\n 'gce.loadBalancerType.HTTP(S)':\n '<p>Google Cloud Platform (GCP) HTTP(S) Load Balancing provides global load balancing for HTTP(S) requests destined for your instances.</p>',\n 'gce.loadBalancerType.Internal':\n '<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>',\n 'gce.loadBalancerType.SSL':\n '<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>',\n 'gce.loadBalancerType.TCP':\n '<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>',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import { REST } from '@spinnaker/core';\n\nexport interface IGceImage {\n imageName: string;\n}\n\nexport class GceImageReader {\n public static findImages(params: { account?: string; provider?: string; q?: string }): PromiseLike<IGceImage[]> {\n return REST('/images/find')\n .query(params)\n .get()\n .catch(() => [] as IGceImage[]);\n }\n\n public static getImage(/*amiName: string, region: string, credentials: string*/): PromiseLike<IGceImage> {\n // GCE images are not regional so we don't need to retrieve ids scoped to regions.\n return null;\n }\n}\n","import { module } from 'angular';\nimport { chain } from 'lodash';\nimport React from 'react';\nimport type { AutocompleteResult, Option } from 'react-select';\nimport { Async } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceImage } from '../image';\n\ninterface IImageSelectProps {\n availableImages: IGceImage[];\n selectedImage: string;\n selectImage: (image: string, target?: any) => void;\n target?: any;\n}\n\nexport class ImageSelect extends React.Component<IImageSelectProps> {\n private loadOptions = (inputValue: string): Promise<AutocompleteResult<string>> => {\n return new Promise((resolve) => {\n if (!inputValue || inputValue.length < 3) {\n resolve({\n options: [],\n complete: false,\n });\n } else {\n const filteredOptions = chain(this.props.availableImages)\n .filter((i) => i.imageName.toLowerCase().includes(inputValue))\n .take(20)\n .map((i) => ({ value: i.imageName, label: i.imageName }))\n .value();\n resolve({\n options: filteredOptions,\n complete: false,\n });\n }\n });\n };\n\n public render() {\n return (\n <Async\n cache={null}\n clearable={false}\n ignoreAccents={false}\n loadOptions={this.loadOptions}\n onChange={(selected: Option<string>) => this.props.selectImage(selected.value, this.props.target)}\n placeholder=\"Type at least 3 characters to search for an image...\"\n searchPromptText=\"Type at least 3 characters to search for an image...\"\n value={{ value: this.props.selectedImage, label: this.props.selectedImage }}\n />\n );\n }\n}\n\nexport const GCE_IMAGE_SELECT = 'spinnaker.gce.imageSelect';\nmodule(GCE_IMAGE_SELECT, []).component(\n 'gceImageSelect',\n react2angular(withErrorBoundary(ImageSelect, 'gceImageSelect'), [\n 'availableImages',\n 'selectedImage',\n 'selectImage',\n 'target',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE =\n 'spinnaker.serverGroup.customInstanceBuilder.gce.service';\nexport const name = GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE, []).factory(\n 'gceCustomInstanceBuilderService',\n function () {\n function vCpuCountForLocationIsValid(instanceFamily, vCpuCount, location, locationToInstanceTypesMap) {\n let max = 0;\n switch (instanceFamily) {\n case 'E2':\n // E2 support up to 32 cores\n // https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#e2_custom_machine_types\n max = 32;\n break;\n case 'N2':\n case 'N2D':\n case 'N1':\n default:\n max = locationToInstanceTypesMap[location].vCpuMax;\n }\n return vCpuCount <= max;\n }\n\n /*\n * Above 1, vCPU count must be even.\n * */\n function numberOfVCpusIsValid(instanceFamily, vCpuCount) {\n if (vCpuCount === 1) {\n return true;\n }\n switch (instanceFamily) {\n case 'N2':\n case 'N2D':\n return vCpuCount % 4 === 0;\n case 'E2':\n case 'N1':\n default:\n return vCpuCount % 2 === 0;\n }\n }\n\n function generateValidVCpuListForLocation(location, locationToInstanceTypesMap) {\n const max = locationToInstanceTypesMap[location].vCpuMax;\n return [1, ..._.range(2, max, 2), max];\n }\n\n function generateValidInstanceFamilyList() {\n return ['n1', 'e2', 'n2', 'n2d'].map((x) => x.toUpperCase());\n }\n\n /*\n * Memory per vCPU must be between .9 GB and 6.5 GB\n * Total memory must be a multiple of 256 MB.\n * */\n function minMemoryForVCpuCount(instanceFamily, vCpuCount) {\n switch (instanceFamily) {\n case 'E2':\n case 'N2':\n case 'N2D':\n return Math.ceil(0.5 * vCpuCount * 4) / 4;\n case 'N1':\n default:\n return Math.ceil(0.9 * vCpuCount * 4) / 4;\n }\n }\n\n function maxMemoryForVCpuCount(instanceFamily, vCpuCount) {\n switch (instanceFamily) {\n case 'E2':\n return 8 * vCpuCount > 128 ? 128 : 8 * vCpuCount;\n case 'N2':\n case 'N2D':\n return 8 * vCpuCount;\n case 'N1':\n default:\n return 6.5 * vCpuCount;\n }\n }\n\n function generateValidMemoryListForVCpuCount(instanceFamily, vCpuCount) {\n const min = minMemoryForVCpuCount(instanceFamily, vCpuCount);\n const max = maxMemoryForVCpuCount(instanceFamily, vCpuCount);\n return [..._.range(min, max, 0.25), max];\n }\n\n function memoryIsValid(instanceFamily, totalMemory, vCpuCount, extendedMemory) {\n const min = minMemoryForVCpuCount(instanceFamily, vCpuCount);\n const max = extendedMemory ? 800 : maxMemoryForVCpuCount(instanceFamily, vCpuCount);\n return _.inRange(totalMemory, min, max) || totalMemory === max;\n }\n\n /*\n * In the API, you must always provide memory in MB units.\n * Format: custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY\n * */\n function generateInstanceTypeString(instanceFamily, vCpuCount, totalMemory, extendedMemory) {\n const extendedFlag = extendedMemory ? '-ext' : '';\n const memoryInMbs = Number(totalMemory) * 1024;\n instanceFamily = instanceFamily.toLowerCase();\n if (instanceFamily === 'n1') {\n return `custom-${vCpuCount}-${memoryInMbs}${extendedFlag}`;\n }\n return `${instanceFamily}-custom-${vCpuCount}-${memoryInMbs}${extendedFlag}`;\n }\n\n function parseInstanceTypeString(instanceTypeString) {\n const [vCpuCount, memoryInMbs] = _.chain(instanceTypeString.split('-'))\n .takeRight(2)\n .map((value) => Number(value))\n .value();\n\n let instanceFamily = instanceTypeString.split('-')[0].toUpperCase();\n if (instanceFamily === 'CUSTOM') {\n instanceFamily = 'N1';\n }\n\n const memory = memoryInMbs / 1024;\n\n return { instanceFamily, vCpuCount, memory };\n }\n\n function customInstanceChoicesAreValid(\n instanceFamily,\n vCpuCount,\n totalMemory,\n location,\n locationToInstanceTypesMap,\n extendedMemory,\n ) {\n return _.every([\n numberOfVCpusIsValid(instanceFamily, vCpuCount),\n memoryIsValid(instanceFamily, totalMemory, vCpuCount, extendedMemory),\n vCpuCountForLocationIsValid(instanceFamily, vCpuCount, location, locationToInstanceTypesMap),\n ]);\n }\n\n return {\n generateValidVCpuListForLocation,\n generateValidMemoryListForVCpuCount,\n generateValidInstanceFamilyList,\n generateInstanceTypeString,\n customInstanceChoicesAreValid,\n memoryIsValid,\n vCpuCountForLocationIsValid,\n parseInstanceTypeString,\n };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './customInstanceBuilder.gce.service';\n\nexport const GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER = 'spinnaker.gce.customInstance.filter';\nexport const name = GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER, [GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE]).filter(\n 'customInstanceFilter',\n [\n 'gceCustomInstanceBuilderService',\n function (gceCustomInstanceBuilderService) {\n return function (instanceTypeString) {\n if (_.includes(instanceTypeString, 'custom-')) {\n const { instanceFamily, vCpuCount, memory } = gceCustomInstanceBuilderService.parseInstanceTypeString(\n instanceTypeString,\n );\n return `${instanceFamily} ${vCpuCount} vCPU / ${memory} GB RAM`;\n }\n return instanceTypeString;\n };\n },\n ],\n);\n","import { module } from 'angular';\nimport { uniq } from 'lodash';\n\nimport type { IGceHttpLoadBalancer, IGceLoadBalancer } from '../domain/loadBalancer';\n\nexport class GceHttpLoadBalancerUtils {\n public static REGION = 'global';\n\n public isHttpLoadBalancer(lb: IGceLoadBalancer): lb is IGceHttpLoadBalancer {\n return (\n (lb.provider === 'gce' || lb.type === 'gce') &&\n (lb.loadBalancerType === 'HTTP' || lb.loadBalancerType === 'INTERNAL_MANAGED')\n );\n }\n\n public normalizeLoadBalancerNamesForAccount(\n loadBalancerNames: string[],\n account: string,\n loadBalancers: IGceLoadBalancer[],\n ): string[] {\n // Assume that loadBalancers is a list of all GCE load balancers in an application\n // (but possibly from several accounts), and has already been normalized (listener names mapped to URL map names).\n const normalizedLoadBalancerNames: string[] = [];\n loadBalancerNames.forEach((loadBalancerName) => {\n const matchingUrlMap = loadBalancers.find((loadBalancer) => {\n return (\n account === loadBalancer.account &&\n this.isHttpLoadBalancer(loadBalancer) &&\n loadBalancer.listeners.map((listener) => listener.name).includes(loadBalancerName)\n );\n });\n\n matchingUrlMap\n ? normalizedLoadBalancerNames.push(matchingUrlMap.name)\n : normalizedLoadBalancerNames.push(loadBalancerName);\n });\n return uniq(normalizedLoadBalancerNames);\n }\n}\n\nexport const GCE_HTTP_LOAD_BALANCER_UTILS = 'spinnaker.gce.httpLoadBalancerUtils.service';\nmodule(GCE_HTTP_LOAD_BALANCER_UTILS, []).service('gceHttpLoadBalancerUtils', GceHttpLoadBalancerUtils);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n FirewallLabels,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n} from '@spinnaker/core';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../loadBalancer/httpLoadBalancerUtils.service';\n\nexport const GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.instance.detail.gce.controller';\nexport const name = GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n]).controller('gceInstanceDetailsCtrl', [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n 'moniker',\n 'environment',\n '$q',\n 'gceHttpLoadBalancerUtils',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $uibModal,\n instance,\n app,\n moniker,\n environment,\n $q,\n gceHttpLoadBalancerUtils,\n gceXpnNamingService,\n ) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('gce', 'instance.detailsTemplateUrl');\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n $scope.application = app;\n $scope.moniker = moniker;\n $scope.environment = environment;\n\n function extractHealthMetrics(instance, latest) {\n // do not backfill on standalone instances\n if (app.isStandalone) {\n instance.health = latest.health;\n }\n\n instance.health = instance.health || [];\n const displayableMetrics = instance.health.filter(function (metric) {\n return metric.type !== 'Google' || metric.state !== 'Unknown';\n });\n\n // backfill details where applicable\n if (latest.health) {\n displayableMetrics.forEach(function (metric) {\n const detailsMatch = latest.health.filter(function (latestHealth) {\n return latestHealth.type === metric.type;\n });\n if (detailsMatch.length) {\n _.defaults(metric, detailsMatch[0]);\n }\n });\n }\n $scope.healthMetrics = displayableMetrics;\n }\n\n function retrieveInstance() {\n const extraData = {};\n let instanceSummary, loadBalancers, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n account = instance.account;\n region = instance.region;\n } else {\n app.serverGroups.data.some(function (serverGroup) {\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = serverGroup.loadBalancers;\n account = serverGroup.account;\n region = serverGroup.region;\n extraData.serverGroup = serverGroup.name;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another application\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a disabled server group via a load balancer\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then(function (details) {\n $scope.state.loading = false;\n extractHealthMetrics(instanceSummary, details);\n $scope.instance = _.defaults(details, instanceSummary);\n $scope.instance.account = account;\n $scope.instance.region = region;\n $scope.instance.vpcId = vpcId;\n if (app.getDataSource('loadBalancers')) {\n $scope.instance.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n loadBalancers,\n account,\n app.getDataSource('loadBalancers').data,\n );\n }\n\n $scope.instance.internalDnsName = $scope.instance.instanceId;\n $scope.instance.internalIpAddress = $scope.instance.networkInterfaces[0].networkIP;\n\n if ($scope.instance.networkInterfaces[0].accessConfigs) {\n $scope.instance.externalIpAddress = $scope.instance.networkInterfaces[0].accessConfigs[0].natIP;\n }\n\n $scope.baseIpAddress = $scope.instance.externalIpAddress || $scope.instance.internalIpAddress;\n\n const projectId = gceXpnNamingService.deriveProjectId($scope.instance);\n $scope.instance.logsLink =\n 'https://console.developers.google.com/project/' +\n projectId +\n '/logs?service=gce_instance&minLogLevel=0&filters=text:' +\n $scope.instance.instanceId;\n\n $scope.instance.network = getNetwork(projectId);\n $scope.instance.subnet = getSubnet(projectId);\n\n $scope.instance.sshLink =\n $scope.instance.selfLink.replace(\n /www.googleapis.com\\/compute\\/(alpha|beta|v1)/,\n 'cloudssh.developers.google.com',\n ) + '?authuser=0&hl=en_US';\n\n $scope.instance.gcloudSSHCommand =\n 'gcloud compute ssh --project ' +\n projectId +\n ' --zone ' +\n $scope.instance.placement.availabilityZone +\n ' ' +\n instance.instanceId;\n\n augmentTagsWithHelp();\n }, autoClose);\n }\n\n if (!instanceSummary) {\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.loading = false;\n }\n\n return $q.when(null);\n }\n\n function autoClose() {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n function augmentTagsWithHelp() {\n if (_.has($scope, 'instance.tags.items') && _.has($scope, 'instance.securityGroups')) {\n const securityGroups = _.chain($scope.instance.securityGroups)\n .map((securityGroup) => {\n return _.find(app.securityGroups.data, {\n accountName: $scope.instance.account,\n region: 'global',\n id: securityGroup.groupId,\n });\n })\n .compact()\n .value();\n\n const helpMap = {};\n\n $scope.instance.tags.items.forEach((tag) => {\n const securityGroupsMatches = _.filter(securityGroups, (securityGroup) =>\n _.includes(securityGroup.targetTags, tag),\n );\n const securityGroupMatchNames = _.map(securityGroupsMatches, 'name');\n\n if (!_.isEmpty(securityGroupMatchNames)) {\n const groupOrGroups = securityGroupMatchNames.length > 1 ? 'groups' : 'group';\n\n helpMap[tag] =\n 'This tag associates this instance with security ' +\n groupOrGroups +\n ' <em>' +\n securityGroupMatchNames.join(', ') +\n '</em>.';\n }\n });\n\n $scope.instance.tags.helpMap = helpMap;\n }\n }\n\n function getNetwork(projectId) {\n const networkUrl = _.get($scope.instance, 'networkInterfaces[0].network');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n }\n\n function getSubnet(projectId) {\n const subnetUrl = _.get($scope.instance, 'networkInterfaces[0].subnetwork');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetUrl);\n }\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n const instanceLoadBalancerDoesNotSupportRegister =\n !app.loadBalancers ||\n _.chain(app.loadBalancers.data)\n .filter((lb) => lb.loadBalancerType !== 'NETWORK' && lb.account === instance.account)\n .map('name')\n .intersection(instance.loadBalancers || [])\n .value().length;\n\n if (!instance.loadBalancers || !instance.loadBalancers.length || instanceLoadBalancerDoesNotSupportRegister) {\n return false;\n }\n const outOfService = instance.health.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canDeregisterFromLoadBalancer = function () {\n const instance = $scope.instance;\n const instanceLoadBalancerDoesNotSupportDeregister =\n !app.loadBalancers ||\n _.chain(app.loadBalancers.data)\n .filter((lb) => lb.loadBalancerType !== 'NETWORK' && lb.account === instance.account)\n .map('name')\n .intersection(instance.loadBalancers || [])\n .value().length;\n\n if (!instance.loadBalancers || !instance.loadBalancers.length || instanceLoadBalancerDoesNotSupportDeregister) {\n return false;\n }\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return hasLoadBalancerHealth;\n };\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const discoveryHealth = instance.health.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.showInstanceActionsDivider = function () {\n return (\n this.canRegisterWithDiscovery() ||\n this.hasHealthState('Discovery', 'Up') ||\n this.canRegisterWithLoadBalancer() ||\n this.canDeregisterFromLoadBalancer()\n );\n };\n\n this.terminateInstance = function terminateInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId,\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n const params = { cloudProvider: 'gce' };\n\n if (instance.serverGroup) {\n params.managedInstanceGroupName = instance.serverGroup;\n }\n\n return InstanceWriter.terminateInstance(instance, app, params);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app, {\n serverGroupName: instance.serverGroup,\n instanceIds: [instance.instanceId],\n zone: instance.placement.availabilityZone,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup + '?',\n buttonText: 'Terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rebootInstance = function rebootInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Rebooting ' + instance.instanceId,\n };\n\n const submitMethod = function () {\n return InstanceWriter.rebootInstance(instance, app, {\n // We can't really reliably do anything other than ignore health here.\n interestingHealthProviderNames: [],\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithLoadBalancer = function registerInstanceWithLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.registerInstanceWithLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + loadBalancerNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromLoadBalancer = function deregisterInstanceFromLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.deregisterInstanceFromLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + loadBalancerNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really disable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Disable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.hasHealthState = function hasHealthState(healthProviderType, state) {\n const instance = $scope.instance;\n return instance.health.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n]);\n","// Duplicated from https://github.com/spinnaker/clouddriver/blob/master/clouddriver-web/config/clouddriver.yml\n// TODO(mneterval): remove after resolution of https://github.com/spinnaker/spinnaker/issues/4859\nexport const GCE_INSTANCE_TYPE_DISK_DEFAULTS = Object.freeze([\n {\n instanceType: 'n1-standard-1',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'f1-micro',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'g1-small',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-small',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-micro',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-medium',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'default',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, SETTINGS } from '@spinnaker/core';\n\nimport { GCE_INSTANCE_TYPE_DISK_DEFAULTS } from './gceInstanceTypeDisks';\n\nexport const GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE = 'spinnaker.gce.instanceType.service';\nexport const name = GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE, []).factory('gceInstanceTypeService', [\n '$q',\n '$log',\n function ($q, $log) {\n const cachedResult = null;\n\n const n1standard = {\n type: 'n1-standard',\n description:\n 'This family provides a balance of compute, memory, and network resources, and it is a good choice for general purpose applications.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-standard-1',\n label: 'Small',\n cpu: 1,\n memory: 3.75,\n costFactor: 1,\n },\n {\n name: 'n1-standard-2',\n label: 'Medium',\n cpu: 2,\n memory: 7.5,\n costFactor: 2,\n },\n {\n name: 'n1-standard-4',\n label: 'Large',\n cpu: 4,\n memory: 15,\n costFactor: 2,\n },\n {\n name: 'n1-standard-8',\n label: 'XLarge',\n cpu: 8,\n memory: 30,\n costFactor: 3,\n },\n {\n name: 'n1-standard-16',\n label: '2XLarge',\n cpu: 16,\n memory: 60,\n costFactor: 3,\n },\n {\n name: 'n1-standard-32',\n label: '4XLarge',\n cpu: 32,\n memory: 120,\n costFactor: 4,\n },\n {\n name: 'n1-standard-64',\n label: '8XLarge',\n cpu: 64,\n memory: 240,\n costFactor: 4,\n },\n {\n name: 'n1-standard-96',\n label: '12XLarge',\n cpu: 96,\n memory: 360,\n costFactor: 4,\n },\n ],\n };\n\n const f1micro = {\n type: 'f1-micro bursting',\n description:\n '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).',\n storageType: 'Std',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'f1-micro',\n label: 'Micro',\n cpu: 1,\n memory: 0.6,\n costFactor: 1,\n },\n {\n name: 'g1-small',\n label: 'Small',\n cpu: 1,\n memory: 1.7,\n costFactor: 1,\n },\n {\n name: 'e2-micro',\n label: 'E2 Micro',\n cpu: 2,\n memory: 1,\n costFactor: 1,\n },\n {\n name: 'e2-small',\n label: 'E2 Small',\n cpu: 2,\n memory: 2,\n costFactor: 2,\n },\n {\n name: 'e2-medium',\n label: 'E2 Medium',\n cpu: 2,\n memory: 4,\n costFactor: 2,\n },\n ],\n };\n\n const n1highmem = {\n type: 'n1-highmem',\n description:\n '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.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-highmem-2',\n label: 'Medium',\n cpu: 2,\n memory: 13,\n costFactor: 2,\n },\n {\n name: 'n1-highmem-4',\n label: 'Large',\n cpu: 4,\n memory: 26,\n costFactor: 2,\n },\n {\n name: 'n1-highmem-8',\n label: 'XLarge',\n cpu: 8,\n memory: 52,\n costFactor: 3,\n },\n {\n name: 'n1-highmem-16',\n label: '2XLarge',\n cpu: 16,\n memory: 104,\n costFactor: 3,\n },\n {\n name: 'n1-highmem-32',\n label: '4XLarge',\n cpu: 32,\n memory: 208,\n costFactor: 4,\n },\n {\n name: 'n1-highmem-64',\n label: '8XLarge',\n cpu: 64,\n memory: 416,\n costFactor: 4,\n },\n {\n name: 'n1-highmem-96',\n label: '12XLarge',\n cpu: 96,\n memory: 624,\n costFactor: 4,\n },\n ],\n };\n\n const n1highcpu = {\n type: 'n1-highcpu',\n description:\n '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.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-highcpu-2',\n label: 'Medium',\n cpu: 2,\n memory: 1.8,\n costFactor: 1,\n },\n {\n name: 'n1-highcpu-4',\n label: 'Large',\n cpu: 4,\n memory: 3.6,\n costFactor: 2,\n },\n {\n name: 'n1-highcpu-8',\n label: 'XLarge',\n cpu: 8,\n memory: 7.2,\n costFactor: 2,\n },\n {\n name: 'n1-highcpu-16',\n label: '2XLarge',\n cpu: 16,\n memory: 14.4,\n costFactor: 3,\n },\n {\n name: 'n1-highcpu-32',\n label: '4XLarge',\n cpu: 32,\n memory: 28.8,\n costFactor: 4,\n },\n {\n name: 'n1-highcpu-64',\n label: '8XLarge',\n cpu: 64,\n memory: 57.6,\n costFactor: 4,\n },\n {\n name: 'n1-highcpu-96',\n label: '12XLarge',\n cpu: 96,\n memory: 86.4,\n costFactor: 4,\n },\n ],\n };\n\n const customMachine = {\n type: 'buildCustom',\n instanceTypes: [\n {\n name: 'n1buildCustom',\n nameRegex: /custom-\\d{1,2}-\\d{4,6}/,\n storage: {\n localSSDSupported: true,\n },\n },\n {\n name: 'e2buildCustom',\n nameRegex: /e2-custom-(\\d{1,2})-(\\d{3,6})/,\n storage: {\n localSSDSupported: false,\n },\n },\n {\n name: 'otherbuildCustom',\n nameRegex: /(.*)-?custom-(\\d{1,2})-(\\d{3,6})/,\n storage: {\n localSSDSupported: true,\n },\n },\n ],\n };\n\n const categories = [\n {\n type: 'general',\n label: 'General Purpose',\n families: [n1standard],\n icon: 'hdd',\n },\n {\n type: 'memory',\n label: 'High Memory',\n families: [n1highmem],\n icon: 'hdd',\n },\n {\n type: 'cpu',\n label: 'High CPU',\n families: [n1highcpu],\n icon: 'hdd',\n },\n {\n type: 'micro',\n label: 'Micro Utility',\n families: [f1micro],\n icon: 'hdd',\n },\n {\n type: 'custom',\n label: 'Custom Type',\n families: [],\n icon: 'asterisk',\n },\n {\n type: 'buildCustom',\n label: 'Build Custom',\n families: [customMachine],\n icon: 'wrench',\n },\n ];\n\n const getCategories = _.memoize(() => {\n const initializedCategories = _.cloneDeep(categories);\n return AccountService.getAllAccountDetailsForProvider('gce').then((accountDetails) => {\n // All GCE accounts have the same instance type disk defaults, so we can pick the first one.\n let instanceTypeDisks = _.get(accountDetails, '[0].instanceTypeDisks');\n if (_.isEmpty(instanceTypeDisks)) {\n instanceTypeDisks = GCE_INSTANCE_TYPE_DISK_DEFAULTS;\n }\n if (instanceTypeDisks) {\n const families = _.flatten(initializedCategories.map((category) => category.families));\n families.forEach((family) => {\n family.instanceTypes.forEach((instanceType) => {\n const diskDefaults = instanceTypeDisks.find(\n (instanceTypeDisk) => instanceTypeDisk.instanceType === instanceType.name,\n );\n if (diskDefaults) {\n const disks = diskDefaults.disks\n .map((disk) => {\n switch (disk.type) {\n case 'PD_SSD':\n return {\n type: 'pd-ssd',\n sizeGb: disk.sizeGb,\n };\n case 'PD_STANDARD':\n return {\n type: 'pd-standard',\n sizeGb: disk.sizeGb,\n };\n case 'LOCAL_SSD':\n return {\n type: 'local-ssd',\n sizeGb: 375,\n };\n default:\n $log.warn(`Disk type '${disk.type}' not supported.`);\n return null;\n }\n })\n .filter((disk) => !!disk);\n\n let size = 0;\n let count = 0;\n if (diskDefaults.supportsLocalSSD) {\n count = disks.filter((disk) => disk.type === 'local-ssd').length;\n size = 375;\n } else {\n // TODO(dpeach): This will render the disk defaults incorrectly for f1-micro and g1-small instance types\n // if the disk defaults set in Clouddriver have different sizes. Fixing it will require updating\n // the core instance type selector.\n // This logic will render the count of the largest disk.\n const persistentDisks = disks.filter((disk) => disk.type.startsWith('pd-'));\n if (persistentDisks.length) {\n size = persistentDisks.reduce((maxSizeGb, disk) => Math.max(maxSizeGb, disk.sizeGb), 0);\n count = persistentDisks.filter((disk) => disk.sizeGb === size).length;\n }\n }\n\n instanceType.storage = {\n localSSDSupported: diskDefaults.supportsLocalSSD,\n size: size,\n count: count,\n defaultSettings: { disks },\n };\n }\n });\n });\n }\n return initializedCategories;\n });\n });\n\n function getAllTypesByRegion() {\n if (cachedResult) {\n return $q.when(cachedResult);\n }\n\n return getCategories().then((categories) => {\n return _.chain(categories)\n .map('families')\n .flatten()\n .map('instanceTypes')\n .flatten()\n .map('name')\n .filter((name) => name !== 'n1buildCustom' && name !== 'e2buildCustom' && name !== 'otherbuildCustom')\n .value();\n });\n }\n\n function getAvailableTypesForLocations(locationToInstanceTypesMap, selectedLocations) {\n if (!locationToInstanceTypesMap || !selectedLocations || selectedLocations.length === 0) {\n console.error('Invalid input parameters');\n return [];\n }\n\n const availableTypes = selectedLocations\n .filter((location) => locationToInstanceTypesMap[location])\n .flatMap((location) => locationToInstanceTypesMap[location].instanceTypes || []);\n\n return availableTypes;\n }\n\n const getAvailableTypesForRegions = getAvailableTypesForLocations;\n\n const resolveInstanceTypeDetails = (instanceType) => {\n return {\n name: instanceType,\n storage: Object.assign({ isDefault: true }, SETTINGS.providers.gce.defaults.instanceTypeStorage),\n };\n };\n\n return {\n getCategories: getCategories,\n getAvailableTypesForRegions: getAvailableTypesForRegions,\n getAllTypesByRegion: getAllTypesByRegion,\n getAvailableTypesForLocations: getAvailableTypesForLocations,\n resolveInstanceTypeDetails: resolveInstanceTypeDetails,\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER =\n 'spinnaker.google.instance.multiInstance.task.transformer';\nexport const name = GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER, []).factory('gceMultiInstanceTaskTransformer', function () {\n // custom transformers for specific tasks,\n // e.g. \"rebootInstances\" needs an empty \"interestingHealthProviderNames\" array\n const transformers = {\n rebootInstances: (job) => {\n job.interestingHealthProviderNames = [];\n },\n };\n\n // adds the \"zone\" field to all jobs\n const transformAll = (instanceGroup, job) => {\n job.zone = instanceGroup.instances[0].availabilityZone;\n };\n\n const transformJob = (instanceGroup, job) => {\n transformAll(instanceGroup, job);\n if (transformers[job.type]) {\n transformers[job.type](job);\n }\n };\n\n return {\n transform: transformJob,\n };\n});\n","import type { IHttpInterceptor, IHttpPromiseCallbackArg, IHttpProvider } from 'angular';\nimport { module } from 'angular';\nimport { $http, $q } from 'ngimport';\nimport { SETTINGS } from '@spinnaker/core';\n\n/**\n * When a Cloud IAP (if enabled) session expires, refreshes session.\n */\n\nexport class IapInterceptor implements IHttpInterceptor {\n public responseError = <T>(response: IHttpPromiseCallbackArg<T>): PromiseLike<T> => {\n const { config, status } = response;\n\n if (status === 401 && SETTINGS.feature.iapRefresherEnabled) {\n return $http.get('/_gcp_iap/do_session_refresh').then(\n () => {\n return $http.get(config.url, config).then((result: T) => result);\n },\n // Reject with original response\n () => $q.reject(response),\n );\n }\n\n return $q.reject(response);\n };\n}\n\nexport const IAP_INTERCEPTOR = 'spinnaker.gce.iap.interceptor';\nmodule(IAP_INTERCEPTOR, [])\n .service('iapInterceptor', IapInterceptor)\n .config([\n '$httpProvider',\n ($httpProvider: IHttpProvider) => {\n $httpProvider.interceptors.push('iapInterceptor');\n },\n ]);\n","import { module } from 'angular';\n\nexport interface IGceLoadBalancerWizardConfig {\n label: string;\n createTemplateUrl: string;\n editTemplateUrl: string;\n controller: string;\n}\n\nexport interface IGceLoadBalancerToWizardMap {\n [loadBalancerType: string]: IGceLoadBalancerWizardConfig;\n}\n\nconst loadBalancerTypeToWizardMap: IGceLoadBalancerToWizardMap = {\n NETWORK: {\n label: 'Network',\n createTemplateUrl: require('../network/createLoadBalancer.html'),\n editTemplateUrl: require('../network/editLoadBalancer.html'),\n controller: 'gceCreateLoadBalancerCtrl',\n },\n HTTP: {\n label: 'HTTP(S)',\n createTemplateUrl: require('../http/createHttpLoadBalancer.html'),\n editTemplateUrl: require('../http/editHttpLoadBalancer.html'),\n controller: 'gceCreateHttpLoadBalancerCtrl',\n },\n INTERNAL_MANAGED: {\n label: 'Internal HTTP(S)',\n createTemplateUrl: require('../http/createHttpLoadBalancer.html'),\n editTemplateUrl: require('../http/editHttpLoadBalancer.html'),\n controller: 'gceCreateInternalHttpLoadBalancerCtrl',\n },\n INTERNAL: {\n label: 'Internal',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceInternalLoadBalancerCtrl',\n },\n SSL: {\n label: 'SSL',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceSslLoadBalancerCtrl',\n },\n TCP: {\n label: 'TCP',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceTcpLoadBalancerCtrl',\n },\n};\n\nexport const GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT = 'spinnaker.gce.loadBalancerTypeToWizard.constant';\n\nmodule(GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT, []).constant(\n 'loadBalancerTypeToWizardMap',\n loadBalancerTypeToWizardMap,\n);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService, IModalService } from 'angular-ui-bootstrap';\nimport { find, map } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\n\nimport type { IGceLoadBalancerToWizardMap } from './loadBalancerTypeToWizardMap.constant';\nimport { GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT } from './loadBalancerTypeToWizardMap.constant';\n\nclass GceLoadBalancerChoiceCtrl implements IController {\n public choices: string[];\n public choice = 'Network';\n\n public static $inject = ['$uibModal', '$uibModalInstance', 'application', 'loadBalancerTypeToWizardMap'];\n constructor(\n public $uibModal: IModalService,\n public $uibModalInstance: IModalInstanceService,\n private application: Application,\n private loadBalancerTypeToWizardMap: IGceLoadBalancerToWizardMap,\n ) {}\n\n public $onInit(): void {\n this.choices = map(this.loadBalancerTypeToWizardMap, (wizardConfig) => wizardConfig.label);\n }\n\n public choose(choice: string): void {\n const wizard = find(this.loadBalancerTypeToWizardMap, (wizardConfig) => wizardConfig.label === choice);\n this.$uibModalInstance.dismiss();\n this.$uibModal.open({\n templateUrl: wizard.createTemplateUrl,\n controller: `${wizard.controller} as ctrl`,\n size: 'lg',\n resolve: {\n application: () => this.application,\n loadBalancer: (): null => null,\n isNew: () => true,\n forPipelineConfig: () => false,\n },\n });\n }\n}\n\nexport const GCE_LOAD_BALANCER_CHOICE_MODAL = 'spinnaker.gce.loadBalancerChoice.modal.controller';\n\nmodule(GCE_LOAD_BALANCER_CHOICE_MODAL, [GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT]).controller(\n 'gceLoadBalancerChoiceCtrl',\n GceLoadBalancerChoiceCtrl,\n);\n","export class HttpLoadBalancerTemplate {\n public provider = 'gce';\n public stack = '';\n public detail = '';\n public region = 'global';\n public loadBalancerType = 'HTTP';\n public certificate = '';\n public defaultService: BackendServiceTemplate;\n public hostRules: HostRuleTemplate[] = [];\n public listeners: ListenerTemplate[] = [];\n\n constructor(public credentials: string | null) {}\n}\n\nexport class BackendServiceTemplate {\n public backends: any[] = [];\n public healthCheck: HealthCheckTemplate;\n public sessionAffinity = 'NONE';\n public affinityCookieTtlSec: number | null = null;\n}\n\nexport class HealthCheckTemplate {\n public requestPath = '/';\n public port = 80;\n public checkIntervalSec = 10;\n public timeoutSec = 5;\n public healthyThreshold = 10;\n public unhealthyThreshold = 2;\n}\n\nexport class PathMatcherTemplate {\n public pathRules: PathRuleTemplate[] = [];\n}\n\nexport class HostRuleTemplate {\n public hostPatterns: string[];\n public pathMatcher: PathMatcherTemplate = new PathMatcherTemplate();\n}\n\nexport class PathRuleTemplate {\n public paths: string[];\n}\n\nexport class ListenerTemplate {\n public name: string;\n public port: number;\n public certificate: string | null = null;\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\nimport { BackendServiceTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.backendService.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT, []).component(\n 'gceHttpLoadBalancerBackendServiceSelector',\n {\n bindings: {\n deleteService: '&',\n backendService: '=',\n command: '=',\n index: '=',\n },\n templateUrl: require('./backendService.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.backingData = this.command.backingData;\n this.loadBalancer = this.command.loadBalancer;\n const servicesByName = this.backingData.backendServicesKeyedByName;\n\n this.onBackendServiceSelect = (selectedBackendService) => {\n assign(selectedBackendService);\n this.command.onHealthCheckSelected(selectedBackendService.healthCheck, this.command);\n };\n\n this.toggleEditExisting = () => {\n this.editExisting = !this.editExisting;\n if (!this.editExisting) {\n const template = new BackendServiceTemplate();\n assign(template);\n } else {\n delete this.backendService.name;\n }\n };\n\n this.getAllHealthChecks = () => {\n const allHealthChecks = this.loadBalancer.healthChecks.concat(this.backingData.healthChecks);\n return _.chain(allHealthChecks)\n .filter((hc) => hc.account === this.loadBalancer.credentials || !hc.account)\n .map((hc) => hc.name)\n .uniq()\n .value();\n };\n\n this.getSessionAffinitySuggestions = () => {\n if (this.loadBalancer.loadBalancerType === 'HTTP') {\n return ['None', 'Client IP', 'Generated Cookie'];\n } else {\n return ['None', 'Client IP', 'Generated Cookie', 'Header Field', 'HTTP Cookie'];\n }\n };\n\n this.getAllServiceNames = () => {\n return this.command.backingData.backendServices\n .filter((service) => service.account === this.loadBalancer.credentials)\n .map((service) => service.name);\n };\n\n this.maxCookieTtl = 60 * 60 * 24; // One day.\n\n const getBackendServiceName = () => {\n return _.get(this, 'backendService.name');\n };\n\n if (servicesByName[getBackendServiceName()]) {\n this.editExisting = true;\n }\n\n const assign = (toAssign) => {\n this.loadBalancer.backendServices[this.index] = this.backendService = toAssign;\n };\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.basicSettings.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT, []).component(\n 'gceHttpLoadBalancerBasicSettings',\n {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./basicSettings.component.html'),\n controller: function () {\n this.$onInit = () => {\n const c = this.command;\n this.loadBalancer = c.loadBalancer;\n this.accounts = c.backingData.accounts;\n const loadBalancerMap = c.backingData.loadBalancerMap;\n\n this.getName = (loadBalancer, applicationName) => {\n const loadBalancerName = [applicationName, loadBalancer.stack || '', loadBalancer.detail || ''].join('-');\n return _.trimEnd(loadBalancerName, '-');\n };\n\n this.updateName = (lb, appName) => {\n lb.urlMapName = this.getName(lb, appName);\n };\n\n this.accountChanged = (account) => {\n this.existingLoadBalancerNames = _.get(loadBalancerMap, [account, 'urlMapNames']) || [];\n c.onAccountChange(c);\n };\n\n if (!this.loadBalancer.name) {\n this.updateName(this.loadBalancer, this.application.name);\n }\n\n this.existingLoadBalancerNames = _.get(loadBalancerMap, [this.loadBalancer.credentials, 'urlMapNames']) || [];\n };\n },\n },\n);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\n\nimport type { CacheInitializerService } from '@spinnaker/core';\nimport { CACHE_INITIALIZER_SERVICE, InfrastructureCaches } from '@spinnaker/core';\n\nclass GceCacheRefreshCtrl implements IController {\n public capitalizedKey: string;\n public depluralizedKey: string;\n public renderCompact: boolean;\n public refreshing = false;\n public tooltipTemplate = require('./cacheRefreshTooltip.html');\n private onRefresh: Function;\n private cacheKey: string;\n private cacheKeyAlias: string;\n\n public static $inject = ['cacheInitializer'];\n constructor(private cacheInitializer: CacheInitializerService) {}\n\n public $onInit(): void {\n const cacheKeyAlias = this.cacheKeyAlias || this.cacheKey;\n this.capitalizedKey = cacheKeyAlias[0].toUpperCase() + cacheKeyAlias.substring(1);\n this.depluralizedKey = cacheKeyAlias.substring(0, cacheKeyAlias.length - 1);\n }\n\n public getRefreshTime(): number {\n return InfrastructureCaches.get(this.cacheKey).getStats().ageMax;\n }\n\n public refresh(): void {\n this.refreshing = true;\n this.cacheInitializer\n .refreshCache(this.cacheKey)\n .then(() => this.onRefresh())\n .then(() => {\n this.refreshing = false;\n });\n }\n}\n\nconst gceCacheRefresh: IComponentOptions = {\n bindings: {\n onRefresh: '&',\n cacheKey: '@',\n cacheKeyAlias: '@',\n renderCompact: '<',\n },\n controller: GceCacheRefreshCtrl,\n templateUrl: require('./cacheRefresh.component.html'),\n};\n\nexport const GCE_CACHE_REFRESH = 'spinnaker.gce.cacheRefresh.component';\nmodule(GCE_CACHE_REFRESH, [CACHE_INITIALIZER_SERVICE]).component('gceCacheRefresh', gceCacheRefresh);\n","import { module } from 'angular';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\n\nexport interface IGceCertificate {\n account: string;\n name: string;\n provider: string;\n type: string;\n}\n\nexport class GceCertificateReader {\n public listCertificates(): PromiseLike<IGceCertificate[]> {\n return SearchService.search<IGceCertificate>(\n { q: '', type: 'sslCertificates', allowShortQuery: 'true' },\n InfrastructureCaches.get('certificates'),\n )\n .then((searchResults: ISearchResults<IGceCertificate>) => {\n if (searchResults && searchResults.results) {\n return searchResults.results.filter((certificate) => certificate.provider === 'gce');\n } else {\n return [];\n }\n })\n .catch(() => []);\n }\n}\n\nexport const GCE_CERTIFICATE_READER = 'spinnaker.gce.certificateReader.service';\nmodule(GCE_CERTIFICATE_READER, []).service('gceCertificateReader', GceCertificateReader);\n","import _ from 'lodash';\n\nexport interface IStringMap {\n [key: string]: string;\n}\n\nexport const sessionAffinityViewToModelMap: IStringMap = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n 'Client IP and protocol': 'CLIENT_IP_PROTO',\n 'Client IP, port and protocol': 'CLIENT_IP_PORT_PROTO',\n 'Header Field': 'HEADER_FIELD',\n 'HTTP Cookie': 'HTTP_COOKIE',\n 'Strong Cookie': 'STRONG_COOKIE_AFFINITY',\n};\n\nexport const sessionAffinityModelToViewMap = _.invert<IStringMap, IStringMap>(sessionAffinityViewToModelMap);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\n\nimport { sessionAffinityModelToViewMap, sessionAffinityViewToModelMap } from '../common/sessionAffinityNameMaps';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE = 'spinnaker.gce.deck.httpLoadBalancer.transformer';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE, []).factory(\n 'gceHttpLoadBalancerTransformer',\n function () {\n // SERIALIZE\n\n const keysToOmit = ['backendServices', 'healthChecks', 'listeners', 'stack', 'detail'];\n\n function serialize(originalCommand, originalLoadBalancer) {\n const command = _.cloneDeep(originalCommand);\n const { loadBalancer, backingData } = command;\n\n mapComponentNamesToObjects(loadBalancer, backingData);\n\n loadBalancer.hostRules = loadBalancer.hostRules.reduce((hostRules, hostRule) => {\n return hostRules.concat(\n hostRule.hostPatterns.map((hostPattern) => {\n return {\n hostPatterns: [hostPattern],\n pathMatcher: _.cloneDeep(hostRule.pathMatcher),\n };\n }),\n );\n }, []);\n\n const commands = buildCommandForEachListener(loadBalancer);\n\n if (originalLoadBalancer) {\n commands[0].listenersToDelete = _.chain(originalLoadBalancer.listeners)\n .map('name')\n .difference(_.map(originalCommand.loadBalancer.listeners, 'name'))\n .value();\n }\n\n return commands;\n }\n\n function mapComponentNamesToObjects(loadBalancer, backingData) {\n const unifiedHealthChecksKeyedByName = _.assign(\n backingData.healthChecksKeyedByName,\n _.keyBy(loadBalancer.healthChecks, 'name'),\n );\n const unifiedBackendServicesKeyedByName = _.assign(\n backingData.backendServicesKeyedByName,\n _.keyBy(loadBalancer.backendServices, 'name'),\n );\n\n _.forEach(unifiedBackendServicesKeyedByName, (service) => {\n service.healthCheck = unifiedHealthChecksKeyedByName[service.healthCheck];\n // Map human readable text back to session affinity code.\n service.sessionAffinity = sessionAffinityViewToModelMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n loadBalancer.defaultService = unifiedBackendServicesKeyedByName[loadBalancer.defaultService];\n mapBackendServiceNamesToObjects(loadBalancer.hostRules, unifiedBackendServicesKeyedByName);\n }\n\n function mapBackendServiceNamesToObjects(hostRules, servicesByName) {\n hostRules.forEach((hostRule) => {\n const p = hostRule.pathMatcher;\n\n p.defaultService = servicesByName[p.defaultService];\n\n p.pathRules.forEach((pathRule) => {\n pathRule.backendService = servicesByName[pathRule.backendService];\n });\n });\n }\n\n function buildCommandForEachListener(loadBalancer) {\n return loadBalancer.listeners.map((listener) => {\n let command = _.cloneDeep(loadBalancer);\n command = _.omit(command, keysToOmit);\n command.name = listener.name;\n command.portRange = listener.port;\n command.certificate = listener.certificate || null;\n command.ipAddress = listener.ipAddress;\n command.subnet = listener.subnet;\n\n return command;\n });\n }\n\n // DESERIALIZE\n\n function deserialize(loadBalancer) {\n const { backendServices, healthChecks, defaultService } = getHealthChecksAndBackendServices(loadBalancer);\n const hostRules = getHostRules(loadBalancer);\n const listeners = getListeners(loadBalancer);\n\n return {\n defaultService: defaultService.name,\n backendServices,\n healthChecks,\n hostRules,\n listeners,\n network: loadBalancer.network,\n region: loadBalancer.region,\n urlMapName: loadBalancer.urlMapName,\n credentials: loadBalancer.credentials || loadBalancer.account,\n };\n }\n\n function getHealthChecksAndBackendServices(loadBalancer) {\n const defaultService = loadBalancer.defaultService;\n let backendServices = [loadBalancer.defaultService];\n\n if (loadBalancer.hostRules) {\n backendServices = loadBalancer.hostRules.reduce((services, hostRule) => {\n services = services.concat(hostRule.pathMatcher.defaultService);\n return hostRule.pathMatcher.pathRules.reduce(\n (services, pathRule) => services.concat(pathRule.backendService),\n services,\n );\n }, backendServices);\n }\n\n const healthChecks = _.chain(backendServices).map('healthCheck').uniqBy('name').cloneDeep().value();\n healthChecks.forEach((hc) => {\n hc.account = loadBalancer.account || loadBalancer.credentials;\n });\n backendServices = _.uniqBy(backendServices, 'name');\n\n backendServices.forEach((service) => {\n // Map health check to health check name so we don't have to deal with object references\n service.healthCheck = service.healthCheck.name;\n // Map session affinity code to more human readable text.\n service.sessionAffinity = sessionAffinityModelToViewMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n return { backendServices, healthChecks, defaultService };\n }\n\n function getHostRules(loadBalancer) {\n return mapBackendServicesToNames(_.cloneDeep(loadBalancer.hostRules));\n }\n\n function getListeners(loadBalancer) {\n loadBalancer.listeners.forEach((listener) => {\n const { stack, freeFormDetails } = NameUtils.parseLoadBalancerName(listener.name);\n listener.stack = stack;\n listener.detail = freeFormDetails;\n listener.created = true;\n });\n\n return loadBalancer.listeners;\n }\n\n function mapBackendServicesToNames(hostRules) {\n // Map backend service to backend service name so we don't have to deal with object references\n hostRules.forEach((hostRule) => {\n const p = hostRule.pathMatcher;\n\n p.defaultService = p.defaultService.name;\n\n p.pathRules.forEach((pathRule) => {\n pathRule.backendService = pathRule.backendService.name;\n });\n });\n\n return hostRules;\n }\n\n return { serialize, deserialize };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LOAD_BALANCER_READ_SERVICE, NetworkReader, SubnetReader } from '@spinnaker/core';\n\nimport { GCE_ADDRESS_READER } from '../../../address/address.reader';\nimport { GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER } from '../../../backendService/backendService.reader';\nimport { GCE_CERTIFICATE_READER } from '../../../certificate/certificate.reader';\nimport { sessionAffinityModelToViewMap } from '../common/sessionAffinityNameMaps';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../../common/xpnNaming.gce.service';\nimport { GCEProviderSettings } from '../../../gce.settings';\nimport { GCE_HEALTH_CHECK_READER } from '../../../healthCheck/healthCheck.read.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../httpLoadBalancerUtils.service';\nimport { HttpLoadBalancerTemplate, ListenerTemplate } from './templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from './transformer.service';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE =\n 'spinnaker.deck.gce.httpLoadBalancer.backing.service';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE, [\n GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER,\n GCE_CERTIFICATE_READER,\n LOAD_BALANCER_READ_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GCE_ADDRESS_READER,\n GCE_HEALTH_CHECK_READER,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).factory('gceHttpLoadBalancerCommandBuilder', [\n '$q',\n 'gceHttpLoadBalancerUtils',\n 'gceBackendServiceReader',\n 'gceCertificateReader',\n 'gceHealthCheckReader',\n 'gceHttpLoadBalancerTransformer',\n 'loadBalancerReader',\n 'gceAddressReader',\n 'gceXpnNamingService',\n function (\n $q,\n gceHttpLoadBalancerUtils,\n gceBackendServiceReader,\n gceCertificateReader,\n gceHealthCheckReader,\n gceHttpLoadBalancerTransformer,\n loadBalancerReader,\n gceAddressReader,\n gceXpnNamingService,\n ) {\n function buildCommand({ originalLoadBalancer, isNew, isInternal }) {\n originalLoadBalancer = _.cloneDeep(originalLoadBalancer);\n\n return buildBackingDataAndLoadBalancer(originalLoadBalancer, isNew, isInternal).then(\n ({ backingData, loadBalancer }) => {\n return {\n backingData,\n getAllBackendServices,\n isNew,\n loadBalancer,\n onAccountChange,\n onBackendServiceRefresh,\n onBackendServiceSelected,\n onRegionSelected,\n onCertificateRefresh,\n onHealthCheckRefresh,\n onHealthCheckSelected,\n getUnusedBackendServices,\n removeUnusedBackendServices,\n getUnusedHealthChecks,\n removeUnusedHealthChecks,\n onAddressRefresh,\n };\n },\n );\n }\n\n function buildBackingDataAndLoadBalancer(originalLoadBalancer, isNew, isInternal) {\n let region = null;\n if (isInternal) {\n region = originalLoadBalancer ? originalLoadBalancer.region : GCEProviderSettings.defaults.region;\n }\n return buildBackingData(region).then((backingData) => {\n const loadBalancer = buildLoadBalancer(isNew, originalLoadBalancer, isInternal);\n\n unifyDataSources(backingData, loadBalancer);\n\n return { backingData, loadBalancer };\n });\n }\n\n function buildBackingData(region) {\n const promises = {\n backendServices: getBackendServices(region),\n healthChecks: getHealthChecks(region),\n certificates: getCertificates(),\n loadBalancerMap: getLoadBalancerMap(region),\n networks: getNetworks(),\n subnets: SubnetReader.listSubnetsByProvider('gce'),\n addresses: gceAddressReader.listAddresses(region),\n accounts: getAccounts(),\n };\n return $q.all(promises);\n }\n\n function buildLoadBalancer(isNew, loadBalancer, isInternal) {\n const loadBalancerTemplate = new HttpLoadBalancerTemplate(GCEProviderSettings.defaults.account || null);\n if (isInternal) {\n loadBalancerTemplate.loadBalancerType = 'INTERNAL_MANAGED';\n loadBalancerTemplate.isInternal = true;\n if (loadBalancer) {\n loadBalancer.network = gceXpnNamingService.decorateXpnResourceIfNecessary(\n loadBalancer.project,\n loadBalancer.network,\n );\n loadBalancer.listeners.forEach((listener) => {\n listener.subnet = gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, listener.subnet);\n });\n }\n loadBalancerTemplate.region = GCEProviderSettings.defaults.region;\n loadBalancerTemplate.network = 'default';\n } else {\n loadBalancerTemplate.loadBalancerType = 'HTTP';\n loadBalancerTemplate.isInternal = false;\n }\n\n let mixinData;\n if (isNew) {\n mixinData = {\n backendServices: [],\n listeners: [new ListenerTemplate()],\n healthChecks: [],\n };\n } else {\n mixinData = gceHttpLoadBalancerTransformer.deserialize(loadBalancer);\n }\n\n const loadBalancerData = _.assign(loadBalancerTemplate, mixinData);\n return loadBalancerData;\n }\n\n function unifyDataSources(backingData, loadBalancer) {\n setAccount(backingData.accounts, loadBalancer);\n removeExistingListenersFromBackingData(backingData, loadBalancer.listeners);\n\n // update backing data with any values coming from load balancer -- they are more up to date.\n const lbHealthCheckMap = _.keyBy(loadBalancer.healthChecks, 'name');\n const backingDataHealthCheckMap = _.keyBy(backingData.healthChecks, 'name');\n\n backingData.healthChecksKeyedByName = _.assign(backingDataHealthCheckMap, _.cloneDeep(lbHealthCheckMap));\n backingData.healthChecksKeyedByNameCopy = _.cloneDeep(backingDataHealthCheckMap);\n backingData.healthChecks = _.map(backingDataHealthCheckMap, _.identity);\n\n const lbBackendServicesMap = _.keyBy(loadBalancer.backendServices, 'name');\n const backingDataBackendServiceMap = _.keyBy(backingData.backendServices, 'name');\n\n backingData.backendServicesKeyedByName = _.assign(\n backingDataBackendServiceMap,\n _.cloneDeep(lbBackendServicesMap),\n );\n backingData.backendServicesKeyedByNameCopy = _.cloneDeep(backingDataBackendServiceMap);\n backingData.backendServices = _.map(backingDataBackendServiceMap, _.identity);\n\n backingData.regions = backingData.accounts\n .find((account) => account.name === loadBalancer.credentials)\n .regions.map((region) => region.name);\n\n backingData.subnetMap = _.groupBy(backingData.subnets, 'network');\n backingData.internalHttpLbNetworks = backingData.networks.filter((network) =>\n backingData.subnetMap[network].find((subnet) => subnet.purpose === 'INTERNAL_HTTPS_LOAD_BALANCER'),\n );\n }\n\n function removeExistingListenersFromBackingData(backingData, existingListeners) {\n const accountNames = backingData.accounts.map((account) => account.name);\n\n accountNames.forEach((accountName) => {\n if (_.has(backingData, ['loadBalancerMap', accountName, 'listeners'])) {\n backingData.loadBalancerMap[accountName].listeners = _.without(\n backingData.loadBalancerMap[accountName].listeners,\n ...existingListeners.map((listener) => listener.name),\n );\n }\n });\n }\n\n function setAccount(accounts, loadBalancerData) {\n const accountNames = _.map(accounts, 'name');\n const credentials = _.get(loadBalancerData, 'credentials.name') || loadBalancerData.credentials;\n\n if (!accountNames.includes(credentials)) {\n loadBalancerData.credentials = _.first(accountNames);\n }\n }\n\n function getHealthChecks(region) {\n return gceHealthCheckReader.listHealthChecks().then((healthChecks) => {\n return healthChecks.filter((healthCheck) => !region || healthCheck.region === region);\n });\n }\n\n function getNetworks() {\n return NetworkReader.listNetworksByProvider('gce').then((networks) => {\n return _.chain(networks).map('name').compact().uniq().value();\n });\n }\n\n function getBackendServices(region) {\n const kind = region ? 'regionBackendService' : 'globalBackendService';\n return gceBackendServiceReader.listBackendServices(kind).then((backendServices) => {\n backendServices = backendServices.filter((backendService) => !region || backendService.region === region);\n backendServices.forEach((service) => {\n service.healthCheck = service.healthCheckLink.split('/').pop();\n\n const ttlIsDefined = typeof service.affinityCookieTtlSec === 'string';\n service.affinityCookieTtlSec = ttlIsDefined ? Number(service.affinityCookieTtlSec) : null;\n\n service.sessionAffinity = sessionAffinityModelToViewMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n return backendServices;\n });\n }\n\n function getCertificates() {\n return gceCertificateReader.listCertificates();\n }\n\n function getAccounts() {\n return AccountService.listAccounts('gce');\n }\n\n function getLoadBalancerMap(region) {\n return loadBalancerReader.listLoadBalancers('gce').then((lbs) => {\n return _.chain(lbs)\n .map((lb) => lb.accounts)\n .flatten()\n .groupBy('name')\n .mapValues((accounts) => {\n const loadBalancers = _.chain(accounts)\n .map((a) => a.regions)\n .flatten()\n .filter((region) => region.name === (region || gceHttpLoadBalancerUtils.REGION))\n .map((region) => region.loadBalancers)\n .flatten()\n .value();\n\n const urlMapNames = _.chain(loadBalancers).map('urlMapName').uniq().value();\n const listeners = _.chain(loadBalancers).map('name').uniq().value();\n\n return { urlMapNames, listeners };\n })\n .valueOf();\n });\n }\n\n function onHealthCheckRefresh(command) {\n getHealthChecks(command.loadBalancer.region).then((healthChecks) => {\n command.backingData.healthChecks = healthChecks;\n command.backingData.healthChecksKeyedByName = _.keyBy(healthChecks, 'name');\n command.backingData.healthChecksKeyedByNameCopy = _.cloneDeep(command.backingData.healthChecksKeyedByName);\n\n command.loadBalancer.healthChecks = command.loadBalancer.healthChecks.map((hc) => {\n const updated = command.backingData.healthChecksKeyedByName[_.get(hc, 'name')];\n if (updated) {\n return _.cloneDeep(updated);\n } else {\n return hc;\n }\n });\n });\n }\n\n function onCertificateRefresh(command) {\n getCertificates().then((certificates) => {\n command.backingData.certificates = certificates;\n });\n }\n\n function onBackendServiceRefresh(command) {\n getBackendServices(command.loadBalancer.region).then((backendServices) => {\n command.backingData.backendServices = backendServices;\n command.backingData.backendServicesKeyedByName = _.keyBy(backendServices, 'name');\n command.backingData.backendServicesKeyedByNameCopy = _.cloneDeep(\n command.backingData.backendServicesKeyedByName,\n );\n\n command.loadBalancer.backendServices = command.loadBalancer.backendServices.map((service) => {\n const updated = command.backingData.backendServicesKeyedByName[_.get(service, 'name')];\n if (updated) {\n return _.cloneDeep(updated);\n } else {\n return service;\n }\n });\n });\n }\n\n function onRegionSelected(command) {\n buildBackingData(command.loadBalancer.region).then((backingData) => {\n Object.assign(command.backingData, backingData);\n unifyDataSources(command.backingData, command.loadBalancer);\n });\n }\n\n function onHealthCheckSelected(selectedName, command) {\n if (!command.loadBalancer.healthChecks.find((hc) => _.get(hc, 'name') === selectedName)) {\n const selectedObject = command.backingData.healthChecksKeyedByName[selectedName];\n if (selectedObject) {\n command.loadBalancer.healthChecks.push(selectedObject);\n }\n }\n }\n\n function onBackendServiceSelected(selectedName, command) {\n if (!command.loadBalancer.backendServices.find((service) => service.name === selectedName)) {\n const selectedObject = command.backingData.backendServicesKeyedByName[selectedName];\n command.loadBalancer.backendServices.push(selectedObject);\n if (selectedObject.healthCheck) {\n onHealthCheckSelected(selectedObject.healthCheck, command);\n }\n }\n }\n\n function getAllBackendServices(command) {\n const allBackendServices = command.loadBalancer.backendServices.concat(command.backingData.backendServices);\n return _.chain(allBackendServices)\n .filter((service) => {\n return (\n service.account === command.loadBalancer.credentials || service.account === command.loadBalancer.account\n );\n })\n .map('name')\n .compact()\n .uniq()\n .value();\n }\n\n function getUnusedHealthChecks(command) {\n return _.chain(command.loadBalancer.healthChecks)\n .map('name')\n .difference(_.map(command.loadBalancer.backendServices, 'healthCheck'))\n .compact()\n .uniq()\n .value();\n }\n\n function getUnusedBackendServices(command) {\n const defaultService = command.loadBalancer.defaultService;\n const hostRuleServices = _.map(command.loadBalancer.hostRules, 'pathMatcher.defaultService');\n const pathRuleServices = _.chain(command.loadBalancer.hostRules)\n .map('pathMatcher.pathRules')\n .flatten()\n .map('backendService')\n .value();\n\n const usedServices = _.chain([defaultService, ...hostRuleServices, ...pathRuleServices])\n .compact()\n .uniq()\n .value();\n\n return _.chain(command.loadBalancer.backendServices)\n .map('name')\n .difference(usedServices)\n .compact()\n .uniq()\n .value();\n }\n\n function removeUnusedBackendServices(command) {\n const unusedBackendServices = getUnusedBackendServices(command);\n command.loadBalancer.backendServices = command.loadBalancer.backendServices.filter(\n (service) => !unusedBackendServices.includes(service.name),\n );\n }\n\n function removeUnusedHealthChecks(command) {\n const unusedHealthChecks = getUnusedHealthChecks(command);\n command.loadBalancer.healthChecks = command.loadBalancer.healthChecks.filter(\n (healthCheck) => !unusedHealthChecks.includes(healthCheck.name),\n );\n }\n\n function onAccountChange(command) {\n command.loadBalancer.backendServices = [];\n command.loadBalancer.healthChecks = [];\n command.loadBalancer.hostRules = [];\n command.loadBalancer.listeners = [new ListenerTemplate()];\n command.loadBalancer.defaultService = null;\n command.backingData.regions = command.backingData.accounts\n .find((account) => account.name === command.loadBalancer.credentials)\n .regions.map((region) => region.name);\n }\n\n function onAddressRefresh(command) {\n gceAddressReader.listAddresses('global').then((addresses) => {\n command.backingData.addresses = addresses;\n });\n }\n\n return { buildCommand };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRules.service';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE, []).factory(\n 'hostAndPathRulesService',\n function () {\n function buildTable(hostRules, defaultService) {\n const defaultRow = buildRow('Any unmatched (default)', 'Any unmatched (default)', defaultService.name);\n if (hostRules.length === 0) {\n return [defaultRow];\n }\n\n return hostRules.reduce(\n (rows, hostRule) => {\n const [hostPattern] = hostRule.hostPatterns;\n const { defaultService, pathRules } = hostRule.pathMatcher;\n\n rows.push(buildRow(hostPattern, '/*', defaultService.name));\n\n return rows.concat(\n pathRules.reduce((rows, pathRule) => {\n const { backendService, paths } = pathRule;\n return rows.concat(paths.map((path) => buildRow(hostPattern, path, backendService.name)));\n }, []),\n );\n },\n [defaultRow],\n );\n }\n\n function buildRow(hostPattern, path, backend) {\n return { hostPattern, path, backend };\n }\n\n return { buildTable };\n },\n);\n","import { module } from 'angular';\n\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE } from './hostAndPathRules.service';\n\n('use strict');\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRules.controller';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER, [\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE,\n]).controller('gceHostAndPathRulesCtrl', [\n 'hostRules',\n 'defaultService',\n 'loadBalancerName',\n '$uibModalInstance',\n 'hostAndPathRulesService',\n function (hostRules, defaultService, loadBalancerName, $uibModalInstance, hostAndPathRulesService) {\n this.table = hostAndPathRulesService.buildTable(hostRules, defaultService);\n this.loadBalancerName = loadBalancerName;\n this.close = $uibModalInstance.dismiss;\n },\n]);\n","import { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER } from './hostAndPathRules.controller';\n\n('use strict');\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRulesButton.component';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER,\n]).component('gceHostAndPathRulesButton', {\n bindings: {\n hostRules: '=',\n defaultService: '=',\n loadBalancerName: '=',\n },\n template: '<a href ng-click=\"$ctrl.viewHostAndPathRules()\">View Host and Path Rules</a>',\n controller: [\n '$uibModal',\n function ($uibModal) {\n this.viewHostAndPathRules = () => {\n $uibModal.open({\n templateUrl: require('./hostAndPathRules.modal.html'),\n controller: 'gceHostAndPathRulesCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n hostRules: () => this.hostRules,\n defaultService: () => this.defaultService,\n loadBalancerName: () => this.loadBalancerName,\n },\n });\n };\n },\n ],\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { HealthCheckTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT =\n 'spinnaker.deck.httpLoadBalancer.healthCheck.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT, []).component(\n 'gceHttpLoadBalancerHealthCheck',\n {\n bindings: {\n command: '=',\n deleteHealthCheck: '&',\n healthCheck: '=',\n index: '=',\n },\n templateUrl: require('./healthCheck.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.max = Number.MAX_SAFE_INTEGER;\n this.backingData = this.command.backingData;\n this.loadBalancer = this.command.loadBalancer;\n const healthChecksByName = this.backingData.healthChecksKeyedByName;\n\n this.onHealthCheckSelect = (selectedHealthCheck) => {\n assign(selectedHealthCheck);\n };\n\n this.getAllHealthCheckNames = () => {\n return this.command.backingData.healthChecks\n .filter((hc) => hc.account === this.loadBalancer.credentials)\n .map((hc) => hc.name);\n };\n\n this.toggleEditExisting = () => {\n this.editExisting = !this.editExisting;\n if (!this.editExisting) {\n assign(new HealthCheckTemplate());\n } else {\n delete this.healthCheck.name;\n }\n };\n\n const assign = (toAssign) => {\n this.loadBalancer.healthChecks[this.index] = this.healthCheck = toAssign;\n };\n\n const getHealthCheckName = () => {\n return _.get(this, 'healthCheck.name');\n };\n\n this.onProtocolChange = () => {\n if (this.healthCheck.healthCheckType !== this.healthCheckType) {\n assign(Object.assign({}, new HealthCheckTemplate(), { healthCheckType: this.healthCheckType }));\n }\n };\n\n if (healthChecksByName[getHealthCheckName()]) {\n this.editExisting = true;\n }\n\n this.healthCheckType = this.healthCheck.healthCheckType;\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.pathRule.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT, []).component('gcePathRule', {\n bindings: {\n pathRule: '=',\n command: '=',\n index: '=',\n deletePathRule: '&',\n },\n templateUrl: require('./pathRule.component.html'),\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT } from '../pathRule/pathRule.component';\nimport { PathRuleTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.hostRule.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT, [\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT,\n]).component('gceHostRule', {\n bindings: {\n hostRule: '=',\n index: '=',\n command: '=',\n deleteHostRule: '&',\n },\n templateUrl: require('./hostRule.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.loadBalancer = this.command.loadBalancer;\n const pathRules = this.hostRule.pathMatcher.pathRules;\n\n this.addPathRule = () => {\n pathRules.push(new PathRuleTemplate());\n };\n\n this.deletePathRule = (index) => {\n pathRules.splice(index, 1);\n };\n };\n },\n});\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { InfrastructureCaches, TaskExecutor } from '@spinnaker/core';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE =\n 'spinnaker.deck.gce.httpLoadBalancer.write.service';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE, [])\n .factory('gceHttpLoadBalancerWriter', function () {\n function upsertLoadBalancers(loadBalancers, application, descriptor) {\n loadBalancers.forEach((lb) => {\n angular.extend(lb, {\n type: 'upsertLoadBalancer',\n cloudProvider: 'gce',\n loadBalancerName: lb.name,\n });\n });\n\n InfrastructureCaches.clearCache('backendServices');\n InfrastructureCaches.clearCache('healthChecks');\n\n return TaskExecutor.executeTask({\n job: loadBalancers,\n application: application,\n description: `${descriptor} Load Balancer: ${loadBalancers[0].urlMapName}`,\n });\n }\n\n function deleteLoadBalancers(loadBalancer, application, params = {}) {\n const job = {\n type: 'deleteLoadBalancer',\n loadBalancerName: loadBalancer.listeners[0].name,\n regions: [loadBalancer.region || 'global'],\n region: loadBalancer.region || 'global',\n loadBalancerType: loadBalancer.loadBalancerType,\n cloudProvider: loadBalancer.provider,\n credentials: loadBalancer.account,\n };\n\n angular.extend(job, params);\n\n InfrastructureCaches.clearCache('backendServices');\n InfrastructureCaches.clearCache('healthChecks');\n\n return TaskExecutor.executeTask({\n job: [job],\n application: application,\n description: `Delete load balancer: ${loadBalancer.urlMapName} in ${loadBalancer.account}:global`,\n });\n }\n\n return { upsertLoadBalancers, deleteLoadBalancers };\n });\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IGceAddress } from '../../../address/address.reader';\n\nclass GceAddressSelectorCtrl implements IController {\n public selectedAddress: IGceAddress;\n public addressList: IGceAddress[];\n public account: string;\n // The IP address string is the only piece that we can expect a parent resource to keep track of.\n // We'll try to match this IP to a full address map.\n private initialIpAddress: string;\n\n public $onInit(): void {\n this.selectedAddress = this.addressList.find((address) => address.address === this.initialIpAddress);\n if (!this.selectedAddress) {\n this.selectedAddress = { address: this.initialIpAddress, account: this.account };\n }\n }\n}\n\nconst gceAddressSelector: IComponentOptions = {\n bindings: {\n initialIpAddress: '<',\n addressList: '<',\n readOnly: '<',\n onAddressSelect: '&',\n account: '<',\n },\n template: `\n <ui-select on-select=\"$ctrl.onAddressSelect({address: $ctrl.selectedAddress})\"\n ng-disabled=\"$ctrl.readOnly\"\n ng-model=\"$ctrl.selectedAddress\"\n class=\"form-control input-sm\">\n <ui-select-match allow-clear>\n {{$ctrl.selectedAddress.address}} <span ng-if=\"$ctrl.selectedAddress.name\">({{$ctrl.selectedAddress.name}})</span>\n </ui-select-match>\n <ui-select-choices repeat=\"address in $ctrl.addressList | filter: {name: $select.search, account: $ctrl.account}\">\n <span>\n {{address.address}} <span ng-if=\"address.name\">({{address.name}})</span> <br>\n </span>\n </ui-select-choices>\n </ui-select>`,\n controller: GceAddressSelectorCtrl,\n};\n\nexport const GCE_ADDRESS_SELECTOR = 'spinnaker.gce.addressSelector.component';\nmodule(GCE_ADDRESS_SELECTOR, []).component('gceAddressSelector', gceAddressSelector);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GCE_ADDRESS_SELECTOR } from '../../common/addressSelector.component';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.listener.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT, [GCE_ADDRESS_SELECTOR]).component(\n 'gceListener',\n {\n bindings: {\n command: '=',\n listener: '=',\n deleteListener: '&',\n index: '=',\n application: '=',\n },\n templateUrl: require('./listener.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.certificates = this.command.backingData.certificates;\n const loadBalancerMap = this.command.backingData.loadBalancerMap;\n\n this.getName = (listener, applicationName) => {\n const listenerName = [applicationName, listener.stack || '', listener.detail || ''].join('-');\n return _.trimEnd(listenerName, '-');\n };\n\n this.getCertificates = () => {\n return this.command.backingData.certificates\n .filter((certificate) => certificate.account === this.command.loadBalancer.credentials)\n .map((certificate) => certificate.name);\n };\n\n this.getSubnets = () => {\n const ret = this.command.backingData.subnetMap[this.command.loadBalancer.network]\n .filter((subnet) => subnet.region === this.command.loadBalancer.region)\n .map((subnet) => subnet.name);\n return _.uniq(ret);\n };\n\n this.getInternalAddresses = () => {\n return this.command.backingData.addresses.filter(\n (address) =>\n address.addressType === 'INTERNAL' && address.subnetwork.split('/').pop() === this.listener.subnet,\n );\n };\n\n this.updateName = (listener, appName) => {\n listener.name = this.getName(listener, appName);\n };\n\n this.localListenerHasSameName = () => {\n return (\n this.command.loadBalancer.listeners.filter((listener) => listener.name === this.listener.name).length > 1\n );\n };\n\n this.existingListenerNames = () => {\n return _.get(loadBalancerMap, [this.command.loadBalancer.credentials, 'listeners']);\n };\n\n this.isHttps = (port) => port === 443 || port === '443';\n\n if (!this.listener.name) {\n this.updateName(this.listener, this.application.name);\n }\n\n this.onAddressSelect = (address) => {\n if (address) {\n this.listener.ipAddress = address.address;\n } else {\n this.listener.ipAddress = null;\n }\n };\n };\n },\n },\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT } from './backendService/backendService.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT } from './basicSettings/basicSettings.component';\nimport { GCE_CACHE_REFRESH } from '../../../cache/cacheRefresh.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE } from './commandBuilder.service';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from '../../details/hostAndPathRules/hostAndPathRulesButton.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT } from './healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT } from './hostRule/hostRule.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from './httpLoadBalancer.write.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT } from './listeners/listener.component';\nimport { BackendServiceTemplate, HealthCheckTemplate, HostRuleTemplate, ListenerTemplate } from './templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from './transformer.service';\n\nimport './httpLoadBalancerWizard.component.less';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.createHttp.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP,\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GCE_CACHE_REFRESH,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n]).controller('gceCreateHttpLoadBalancerCtrl', [\n '$scope',\n '$uibModal',\n '$uibModalInstance',\n 'application',\n 'loadBalancer',\n 'isNew',\n 'gceHttpLoadBalancerWriter',\n '$state',\n 'wizardSubFormValidation',\n 'gceHttpLoadBalancerCommandBuilder',\n 'gceHttpLoadBalancerTransformer',\n function (\n $scope,\n $uibModal,\n $uibModalInstance,\n application,\n loadBalancer,\n isNew,\n gceHttpLoadBalancerWriter,\n $state,\n wizardSubFormValidation,\n gceHttpLoadBalancerCommandBuilder,\n gceHttpLoadBalancerTransformer,\n ) {\n this.application = application;\n this.isNew = isNew;\n this.modalDescriptor = this.isNew\n ? 'Create HTTP(S) load balancer'\n : `Edit ${loadBalancer.name}:global:${loadBalancer.account}`;\n\n this.pages = {\n location: require('./basicSettings/basicSettings.html'),\n listeners: require('./listeners/listeners.html'),\n defaultService: require('./defaultService/defaultService.html'),\n backendServices: require('./backendService/backendServices.html'),\n healthChecks: require('./healthCheck/healthChecks.html'),\n hostRules: require('./hostRule/hostRules.html'),\n };\n\n const keyToTemplateMap = {\n backendServices: BackendServiceTemplate,\n healthChecks: HealthCheckTemplate,\n hostRules: HostRuleTemplate,\n listeners: ListenerTemplate,\n };\n\n this.add = (key) => {\n this.command.loadBalancer[key].push(new keyToTemplateMap[key]());\n };\n\n this.remove = (key, index) => {\n this.command.loadBalancer[key].splice(index, 1);\n };\n\n const onApplicationRefresh = () => {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n\n const lb = this.command.loadBalancer;\n const newStateParams = {\n name: lb.urlMapName,\n accountId: lb.credentials,\n region: lb.region,\n provider: 'gce',\n };\n\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n };\n\n const onTaskComplete = () => {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n };\n\n $scope.taskMonitor = this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n this.submit = () => {\n const serializedCommands = gceHttpLoadBalancerTransformer.serialize(this.command, loadBalancer);\n const descriptor = this.isNew ? 'Create' : 'Update';\n\n this.taskMonitor.submit(() =>\n gceHttpLoadBalancerWriter.upsertLoadBalancers(serializedCommands, application, descriptor),\n );\n };\n\n gceHttpLoadBalancerCommandBuilder.buildCommand({ isNew, originalLoadBalancer: loadBalancer }).then((command) => {\n this.command = command;\n\n wizardSubFormValidation\n .config({ scope: $scope, form: 'form' })\n .register({ page: 'location', subForm: 'location' })\n .register({\n page: 'listeners',\n subForm: 'listeners',\n validators: [\n {\n watchString: 'ctrl.command.loadBalancer.listeners',\n validator: (listeners) => listeners.length > 0,\n collection: true,\n },\n ],\n })\n .register({ page: 'default-service', subForm: 'defaultService' })\n .register({ page: 'health-checks', subForm: 'healthChecks' })\n .register({ page: 'backend-services', subForm: 'backendServices' })\n .register({ page: 'host-rules', subForm: 'hostRules' });\n });\n\n this.cancel = $uibModalInstance.dismiss;\n },\n]);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport { trimEnd } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\nimport { InfrastructureCaches } from '@spinnaker/core';\nimport type { IGceLoadBalancer } from '../../../domain/loadBalancer';\n\nexport class CommonGceLoadBalancerCtrl {\n public static $inject = ['$scope', 'application', '$uibModalInstance', '$state'];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private $state: StateService,\n ) {}\n\n public onTaskComplete(loadBalancer: IGceLoadBalancer): void {\n InfrastructureCaches.clearCache('healthChecks');\n this.application.getDataSource('loadBalancers').refresh();\n this.application\n .getDataSource('loadBalancers')\n .onNextRefresh(this.$scope, () => this.onApplicationRefresh(loadBalancer));\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public getName(lb: IGceLoadBalancer, application: Application): string {\n const loadBalancerName = [application.name, lb.stack || '', lb.detail || ''].join('-');\n return trimEnd(loadBalancerName, '-');\n }\n\n private onApplicationRefresh(loadBalancer: IGceLoadBalancer): void {\n // If the user has already closed the modal, do not navigate to the new details view\n if (this.$scope.$$destroyed) {\n return;\n }\n this.$uibModalInstance.close();\n\n const newStateParams = {\n name: loadBalancer.loadBalancerName,\n accountId: loadBalancer.credentials,\n region: loadBalancer.region,\n provider: 'gce',\n };\n\n if (!this.$state.includes('**.loadBalancerDetails')) {\n this.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n this.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n}\n","import { module } from 'angular';\nimport _ from 'lodash';\n\nimport type { IAccount, ILoadBalancersByAccount, INetwork, ISubnet, LoadBalancerReader } from '@spinnaker/core';\nimport { AccountService, LOAD_BALANCER_READ_SERVICE, NetworkReader, SubnetReader } from '@spinnaker/core';\nimport type { GceCertificateReader, IGceCertificate } from '../../../certificate/certificate.reader';\nimport { GCE_CERTIFICATE_READER } from '../../../certificate/certificate.reader';\nimport type { IGceHealthCheck } from '../../../domain/healthCheck';\nimport type { GceHealthCheckReader } from '../../../healthCheck/healthCheck.read.service';\nimport { GCE_HEALTH_CHECK_READER } from '../../../healthCheck/healthCheck.read.service';\n\nexport class GceCommonLoadBalancerCommandBuilder {\n private dataFetchers: { [key: string]: Function } = {\n existingLoadBalancerNamesByAccount: (): PromiseLike<_.Dictionary<any>> => {\n return this.loadBalancerReader.listLoadBalancers('gce').then((loadBalancerList: ILoadBalancersByAccount[]) => {\n return _.chain(loadBalancerList)\n .map('accounts')\n .flatten()\n .groupBy('name') // account name\n .mapValues((regionWrappers) =>\n _.chain(regionWrappers)\n .map('regions')\n .flatten()\n .map('loadBalancers')\n .flatten()\n .map('name') // load balancer name\n .value(),\n )\n .value();\n });\n },\n accounts: (): PromiseLike<IAccount[]> => AccountService.listAccounts('gce'),\n networks: (): PromiseLike<INetwork[]> => NetworkReader.listNetworksByProvider('gce'),\n subnets: (): PromiseLike<ISubnet[]> => SubnetReader.listSubnetsByProvider('gce'),\n healthChecks: (): PromiseLike<IGceHealthCheck[]> => this.gceHealthCheckReader.listHealthChecks(),\n certificates: (): PromiseLike<IGceCertificate[]> => this.gceCertificateReader.listCertificates(),\n };\n\n public static $inject = ['$q', 'loadBalancerReader', 'gceHealthCheckReader', 'gceCertificateReader'];\n constructor(\n private $q: ng.IQService,\n private loadBalancerReader: LoadBalancerReader,\n private gceHealthCheckReader: GceHealthCheckReader,\n private gceCertificateReader: GceCertificateReader,\n ) {}\n\n public getBackingData(dataTypes: string[]): PromiseLike<any> {\n const promises = dataTypes.reduce(\n (promisesByDataType: { [dataType: string]: PromiseLike<any> }, dataType: string) => {\n if (this.dataFetchers[dataType]) {\n promisesByDataType[dataType] = this.dataFetchers[dataType]();\n }\n return promisesByDataType;\n },\n {},\n );\n\n return this.$q.all(promises);\n }\n\n public groupHealthChecksByAccountAndType(\n healthChecks: IGceHealthCheck[],\n ): { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } } {\n return _.chain(healthChecks)\n .groupBy('account')\n .mapValues((grouped: IGceHealthCheck[]) => _.groupBy(grouped, 'healthCheckType'))\n .value();\n }\n\n public groupHealthCheckNamesByAccount(\n healthChecks: IGceHealthCheck[],\n namesToOmit: string[],\n ): { [account: string]: string[] } {\n return _.chain(healthChecks)\n .groupBy('account')\n .mapValues((grouped: IGceHealthCheck[]) => _.chain(grouped).map('name').difference(namesToOmit).value())\n .value() as { [account: string]: string[] };\n }\n}\n\nexport const GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER = 'spinnaker.gce.commonLoadBalancerCommandBuilder.service';\n\nmodule(GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER, [\n LOAD_BALANCER_READ_SERVICE,\n GCE_CERTIFICATE_READER,\n GCE_HEALTH_CHECK_READER,\n]).service('gceCommonLoadBalancerCommandBuilder', GceCommonLoadBalancerCommandBuilder);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport { get } from 'lodash';\n\nimport type { IGceHealthCheck } from '../../../domain/index';\n\nclass HealthCheckCreateCtrl implements IController {\n public healthCheck: IGceHealthCheck;\n public healthCheckPlaceholder: IGceHealthCheck;\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public editExisting = false;\n public existingHealthChecksForProtocol: IGceHealthCheck[];\n public existingHealthCheckNames: string[];\n public credentials: string;\n public max = Number.MAX_SAFE_INTEGER;\n\n public static $inject = ['$scope'];\n constructor(private $scope: ng.IScope) {}\n\n public $onInit(): void {\n if (this.healthCheck.name) {\n this.healthCheckPlaceholder = this.healthCheck;\n this.existingHealthChecksForProtocol = this.healthChecksByAccountAndType[this.credentials][\n this.healthCheck.healthCheckType\n ];\n this.editExisting = true;\n } else {\n this.existingHealthChecksForProtocol = this.healthChecksByAccountAndType[this.credentials]['TCP'];\n }\n\n this.$scope.$watch('$ctrl.credentials', () => this.setExistingHealthChecksForProtocol());\n }\n\n public onProtocolChange(): void {\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n this.setExistingHealthChecksForProtocol();\n }\n\n public setExistingHealthChecksForProtocol() {\n this.existingHealthChecksForProtocol =\n get<{}, IGceHealthCheck[]>(this, [\n 'healthChecksByAccountAndType',\n this.credentials,\n this.healthCheck.healthCheckType,\n ]) || [];\n\n if (!this.existingHealthChecksForProtocol.find((healthCheck) => healthCheck.name === this.healthCheck.name)) {\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n }\n }\n\n public toggleEditExisting(): void {\n this.editExisting = !this.editExisting;\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n }\n\n public onHealthCheckSelect(selectedHealthCheck: IGceHealthCheck): void {\n Object.assign(this.healthCheck, selectedHealthCheck);\n }\n\n public onHealthCheckNameChange(typedName: string): void {\n this.healthCheck.name = typedName;\n }\n}\n\nconst healthCheckCreateComponent: ng.IComponentOptions = {\n bindings: {\n healthCheck: '=',\n credentials: '<',\n healthChecksByAccountAndType: '<',\n existingHealthCheckNames: '<',\n },\n templateUrl: require('./healthCheck.component.html'),\n controller: HealthCheckCreateCtrl,\n};\n\nexport const GCE_HEALTH_CHECK_SELECTOR_COMPONENT = 'spinnaker.gce.healthCheckSelector.component';\n\nmodule(GCE_HEALTH_CHECK_SELECTOR_COMPONENT, []).component('gceHealthCheckSelector', healthCheckCreateComponent);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IController, IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type { Application, IAccount, ICredentials, IRegion } from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../../common/xpnNaming.gce.service';\nimport type {\n IGceBackendService,\n IGceHealthCheck,\n IGceLoadBalancer,\n IGceNetwork,\n IGceSubnet,\n} from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface IPrivateScope extends IScope {\n $$destroyed: boolean;\n}\n\nclass InternalLoadBalancer implements IGceLoadBalancer {\n public name: string;\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public ports: any;\n public ipProtocol = 'TCP';\n public loadBalancerType = 'INTERNAL';\n public credentials: string;\n public account: string;\n public project: string;\n public network = 'default';\n public subnet: string;\n public cloudProvider = 'gce';\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n\n constructor(public region: string) {}\n}\n\nclass InternalLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements IController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Client IP and protocol': 'CLIENT_IP_PROTO',\n 'Client IP, port and protocol': 'CLIENT_IP_PORT_PROTO',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public networks: IGceNetwork[];\n public networkOptions: string[];\n public subnets: IGceSubnet[];\n public subnetOptions: string[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public taskMonitor: any;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n 'gceXpnNamingService',\n '$state',\n ];\n constructor(\n public $scope: IPrivateScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: InternalLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n private gceXpnNamingService: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'networks', 'subnets', 'healthChecks'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new InternalLoadBalancer(\n GCEProviderSettings ? GCEProviderSettings.defaults.region : null,\n );\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.networks = backingData.networks;\n this.subnets = backingData.subnets;\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public networkUpdated(): void {\n this.subnetOptions = this.subnets\n .filter((subnet) => {\n return (\n subnet.region === this.loadBalancer.region &&\n (subnet.account === this.loadBalancer.credentials || subnet.account === this.loadBalancer.account) &&\n subnet.network === this.loadBalancer.network\n );\n })\n .map((subnet) => subnet.id);\n\n if (!this.subnetOptions.includes(this.loadBalancer.subnet)) {\n this.loadBalancer.subnet = this.subnetOptions[0];\n }\n }\n\n public protocolUpdated(): void {\n if (this.loadBalancer.ipProtocol === 'UDP') {\n this.viewState = new ViewState('None');\n this.loadBalancer.backendService.sessionAffinity = 'NONE';\n }\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n this.networkOptions = this.networks\n .filter((network: IGceNetwork) => network.account === this.loadBalancer.credentials)\n .map((network) => network.id);\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n this.networkUpdated();\n });\n }\n\n public regionUpdated(): void {\n this.networkUpdated();\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as any;\n toSubmitLoadBalancer.ports = toSubmitLoadBalancer.ports.split(',').map((port: string) => port.trim());\n toSubmitLoadBalancer.cloudProvider = 'gce';\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.ports = this.loadBalancer.ports.join(', ');\n this.loadBalancer.subnet = this.gceXpnNamingService.decorateXpnResourceIfNecessary(\n this.loadBalancer.project,\n this.loadBalancer.subnet,\n );\n this.loadBalancer.network = this.gceXpnNamingService.decorateXpnResourceIfNecessary(\n this.loadBalancer.project,\n this.loadBalancer.network,\n );\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_INTERNAL_LOAD_BALANCER_CTRL = 'spinnaker.gce.internalLoadBalancer.controller';\n\nmodule(GCE_INTERNAL_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).controller('gceInternalLoadBalancerCtrl', InternalLoadBalancerCtrl);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GCE_CACHE_REFRESH } from '../../../cache/cacheRefresh.component';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from '../../details/hostAndPathRules/hostAndPathRulesButton.component';\nimport type { IGceHttpLoadBalancer } from '../../../domain';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT } from '../http/backendService/backendService.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../http/basicSettings/basicSettings.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE } from '../http/commandBuilder.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT } from '../http/healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT } from '../http/hostRule/hostRule.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from '../http/httpLoadBalancer.write.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT } from '../http/listeners/listener.component';\nimport { BackendServiceTemplate, HealthCheckTemplate, HostRuleTemplate, ListenerTemplate } from '../http/templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from '../http/transformer.service';\n\nimport '../http/httpLoadBalancerWizard.component.less';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.createInternalHttp.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER; // for backwards compatibility\n\nclass CreateInternalHttpLoadBalancerController implements ng.IComponentController {\n public taskMonitor: any;\n public command: any;\n public modalDescriptor: string;\n\n public pages = {\n location: require('../http/basicSettings/basicSettings.html'),\n listeners: require('../http/listeners/listeners.html'),\n defaultService: require('../http/defaultService/defaultService.html'),\n backendServices: require('../http/backendService/backendServices.html'),\n healthChecks: require('../http/healthCheck/healthChecks.html'),\n hostRules: require('../http/hostRule/hostRules.html'),\n };\n\n private keyToTemplateMap: { [key: string]: any } = {\n backendServices: BackendServiceTemplate,\n healthChecks: HealthCheckTemplate,\n hostRules: HostRuleTemplate,\n listeners: ListenerTemplate,\n };\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceHttpLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n 'gceHttpLoadBalancerTransformer',\n 'gceHttpLoadBalancerWriter',\n '$state',\n ];\n\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: IGceHttpLoadBalancer,\n private gceHttpLoadBalancerCommandBuilder: any,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n private gceHttpLoadBalancerTransformer: any,\n private gceHttpLoadBalancerWriter: any,\n private $state: StateService,\n ) {\n this.modalDescriptor = this.isNew\n ? 'Create Internal HTTP(S) load balancer'\n : `Edit ${this.loadBalancer.name}:${this.loadBalancer.region}:${this.loadBalancer.account}`;\n\n const onTaskComplete = () => {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, this.onApplicationRefresh.bind(this));\n };\n\n $scope.taskMonitor = this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n }\n\n public $onInit(): void {\n this.gceHttpLoadBalancerCommandBuilder\n .buildCommand({ isNew: this.isNew, originalLoadBalancer: this.loadBalancer, isInternal: true })\n .then((command: any) => {\n this.command = command;\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'location' })\n .register({\n page: 'listeners',\n subForm: 'listeners',\n validators: [\n {\n watchString: 'ctrl.command.loadBalancer.listeners',\n validator: (listeners: any[]) => listeners.length > 0,\n collection: true,\n },\n ],\n })\n .register({ page: 'default-service', subForm: 'defaultService' })\n .register({ page: 'health-checks', subForm: 'healthChecks' })\n .register({ page: 'backend-services', subForm: 'backendServices' })\n .register({ page: 'host-rules', subForm: 'hostRules' });\n });\n }\n\n public add(key: string): void {\n this.command.loadBalancer[key].push(new this.keyToTemplateMap[key]());\n }\n\n public remove(key: string, index: number): void {\n this.command.loadBalancer[key].splice(index, 1);\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public submit(): void {\n const serializedCommands = this.gceHttpLoadBalancerTransformer.serialize(this.command, this.loadBalancer);\n const descriptor = this.isNew ? 'Create' : 'Update';\n this.taskMonitor.submit(() =>\n this.gceHttpLoadBalancerWriter.upsertLoadBalancers(serializedCommands, this.application, descriptor),\n );\n }\n\n private onApplicationRefresh(): void {\n // If the user has already closed the modal, do not navigate to the new details view\n if (this.$scope.$$destroyed) {\n return;\n }\n this.$uibModalInstance.close();\n const lb = this.command.loadBalancer;\n const newStateParams = {\n name: lb.urlMapName,\n accountId: lb.credentials,\n region: lb.region,\n provider: 'gce',\n };\n\n if (!this.$state.includes('**.loadBalancerDetails')) {\n this.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n this.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n}\n\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER, [\n 'ui.bootstrap',\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GCE_CACHE_REFRESH,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n]).controller('gceCreateInternalHttpLoadBalancerCtrl', CreateInternalHttpLoadBalancerController);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE = 'spinnaker.google.regionSelectField.directive';\nexport const name = GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE, []).directive('gceRegionSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./regionSelectField.directive.html'),\n scope: {\n regions: '=',\n component: '=',\n field: '@',\n account: '=',\n onChange: '&',\n labelColumns: '@',\n readOnly: '=',\n fieldColumns: '@',\n },\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GCEProviderSettings } from '../gce.settings';\n\nexport const GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER = 'spinnaker.gce.loadBalancer.transformer';\nexport const name = GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER, []).factory('gceLoadBalancerTransformer', [\n '$q',\n function ($q) {\n function updateHealthCounts(container) {\n const instances = container.instances;\n const serverGroups = container.serverGroups || [container];\n container.instanceCounts = {\n up: instances.filter((instance) => {\n return instance.health[0].state === 'InService';\n }).length,\n down: instances.filter((instance) => {\n return instance.health[0].state === 'OutOfService';\n }).length,\n outOfService: serverGroups.reduce((acc, serverGroup) => {\n return (\n serverGroup.instances.filter((instance) => {\n return instance.healthState === 'OutOfService';\n }).length + acc\n );\n }, 0),\n };\n }\n\n function transformInstance(instance, loadBalancer) {\n instance.health = instance.health || {};\n instance.provider = loadBalancer.type;\n instance.account = loadBalancer.account;\n instance.region = loadBalancer.region;\n instance.health.type = 'LoadBalancer';\n instance.healthState = instance.health.state\n ? instance.health.state === 'InService'\n ? 'Up'\n : 'Down'\n : 'OutOfService';\n instance.health = [instance.health];\n instance.loadBalancers = [loadBalancer.name];\n }\n\n function normalizeLoadBalancer(loadBalancer) {\n loadBalancer.serverGroups.forEach(function (serverGroup) {\n serverGroup.account = loadBalancer.account;\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = serverGroup.detachedInstances.map(function (instanceId) {\n return { id: instanceId };\n });\n serverGroup.instances = serverGroup.instances.concat(serverGroup.detachedInstances);\n } else {\n serverGroup.detachedInstances = [];\n }\n\n serverGroup.instances.forEach(function (instance) {\n transformInstance(instance, loadBalancer);\n });\n updateHealthCounts(serverGroup);\n });\n const activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups).map('instances').flatten().value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups).map('detachedInstances').flatten().value();\n if (_.get(loadBalancer, 'backendService.healthCheck')) {\n loadBalancer.backendService.healthCheck.timeout = loadBalancer.backendService.healthCheck.timeoutSec;\n loadBalancer.backendService.healthCheck.interval = loadBalancer.backendService.healthCheck.checkIntervalSec;\n }\n updateHealthCounts(loadBalancer);\n return $q.when(loadBalancer);\n }\n\n function convertLoadBalancerForEditing(loadBalancer) {\n const toEdit = {\n provider: 'gce',\n region: loadBalancer.region,\n credentials: loadBalancer.account,\n listeners: [],\n name: loadBalancer.name,\n regionZones: loadBalancer.availabilityZones,\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb;\n\n toEdit.vpcId = elb.vpcid;\n\n if (elb.listenerDescriptions) {\n toEdit.listeners = elb.listenerDescriptions.map(function (description) {\n const listener = description.listener;\n return {\n protocol: listener.protocol,\n portRange: listener.loadBalancerPort,\n healthCheck: elb.healthCheck !== undefined,\n };\n });\n }\n\n if (elb.healthCheck && elb.healthCheck.target) {\n toEdit.healthTimeout = elb.healthCheck.timeout;\n toEdit.healthInterval = elb.healthCheck.interval;\n toEdit.healthyThreshold = elb.healthCheck.healthyThreshold;\n toEdit.unhealthyThreshold = elb.healthCheck.unhealthyThreshold;\n\n const healthCheck = loadBalancer.elb.healthCheck.target;\n const protocolIndex = healthCheck.indexOf(':');\n const pathIndex = healthCheck.indexOf('/');\n\n if (protocolIndex !== -1 && pathIndex !== -1) {\n toEdit.healthCheckProtocol = healthCheck.substring(0, protocolIndex);\n toEdit.healthCheckPort = healthCheck.substring(protocolIndex + 1, pathIndex);\n toEdit.healthCheckPath = healthCheck.substring(pathIndex);\n if (!isNaN(toEdit.healthCheckPort)) {\n toEdit.healthCheckPort = Number(toEdit.healthCheckPort);\n }\n }\n } else {\n toEdit.healthCheckProtocol = 'HTTP';\n toEdit.healthCheckPort = 80;\n toEdit.healthCheckPath = '/';\n toEdit.healthTimeout = 5;\n toEdit.healthInterval = 10;\n toEdit.healthyThreshold = 10;\n toEdit.unhealthyThreshold = 2;\n }\n\n toEdit.sessionAffinity = loadBalancer.sessionAffinity || 'None';\n }\n return toEdit;\n }\n\n function constructNewLoadBalancerTemplate() {\n return {\n provider: 'gce',\n stack: '',\n detail: '',\n credentials: GCEProviderSettings.defaults.account,\n region: GCEProviderSettings.defaults.region,\n healthCheckProtocol: 'HTTP',\n healthCheckPort: 80,\n healthCheckPath: '/',\n healthTimeout: 5,\n healthInterval: 10,\n healthyThreshold: 10,\n unhealthyThreshold: 2,\n sessionAffinity: 'NONE',\n regionZones: [],\n listeners: [\n {\n protocol: 'TCP',\n portRange: '8080',\n healthCheck: true,\n },\n ],\n };\n }\n\n return {\n normalizeLoadBalancer: normalizeLoadBalancer,\n convertLoadBalancerForEditing: convertLoadBalancerForEditing,\n constructNewLoadBalancerTemplate: constructNewLoadBalancerTemplate,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { AccountService, LoadBalancerWriter, ModalWizard, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE } from '../../../gceRegionSelectField.directive';\nimport { GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from '../../loadBalancer.transformer';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER =\n 'spinnaker.loadBalancer.gce.create.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE,\n]).controller('gceCreateLoadBalancerCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'gceLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n function ($scope, $uibModalInstance, $state, gceLoadBalancerTransformer, application, loadBalancer, isNew) {\n const ctrl = this;\n\n $scope.isNew = isNew;\n\n $scope.pages = {\n location: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n healthCheck: require('./healthCheck.html'),\n advancedSettings: require('./advancedSettings.html'),\n };\n\n $scope.state = {\n accountsLoaded: false,\n submitting: false,\n };\n\n $scope.sessionAffinityOptions = [\n { value: 'NONE', name: 'None' },\n { value: 'CLIENT_IP', name: 'Client IP' },\n { value: 'CLIENT_IP_PROTO', name: 'Client IP and protocol' },\n ];\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.loadBalancer.name,\n accountId: $scope.loadBalancer.credentials,\n region: $scope.loadBalancer.region,\n provider: 'gce',\n };\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: (isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function initializeEditMode() {}\n\n function initializeCreateMode() {\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accountsLoaded = true;\n\n const accountNames = _.map($scope.accounts, 'name');\n if (accountNames.length && !accountNames.includes($scope.loadBalancer.credentials)) {\n $scope.loadBalancer.credentials = accountNames[0];\n }\n\n ctrl.accountUpdated();\n });\n }\n\n function updateLoadBalancerNames() {\n const account = $scope.loadBalancer.credentials;\n\n const accountLoadBalancersByRegion = {};\n application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n application.getDataSource('loadBalancers').data.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancersByRegion[loadBalancer.region] =\n accountLoadBalancersByRegion[loadBalancer.region] || [];\n accountLoadBalancersByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n $scope.existingLoadBalancerNames = _.flatten(_.map(accountLoadBalancersByRegion));\n });\n }\n\n // initialize controller\n if (loadBalancer) {\n $scope.loadBalancer = gceLoadBalancerTransformer.convertLoadBalancerForEditing(loadBalancer);\n initializeEditMode();\n } else {\n $scope.loadBalancer = gceLoadBalancerTransformer.constructNewLoadBalancerTemplate();\n updateLoadBalancerNames();\n initializeCreateMode();\n }\n\n // Controller API\n\n this.requiresHealthCheckPath = function () {\n return $scope.loadBalancer.healthCheckProtocol && $scope.loadBalancer.healthCheckProtocol.indexOf('HTTP') === 0;\n };\n\n this.prependForwardSlash = (text) => {\n return text && text.indexOf('/') !== 0 ? `/${text}` : text;\n };\n\n this.updateName = function () {\n $scope.loadBalancer.name = this.getName();\n };\n\n this.getName = function () {\n const loadBalancer = $scope.loadBalancer;\n const loadBalancerName = [application.name, loadBalancer.stack || '', loadBalancer.detail || ''].join('-');\n return _.trimEnd(loadBalancerName, '-');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.loadBalancer.credentials).then(function (regions) {\n if (_.isArray(regions)) {\n $scope.regions = _.map(regions, 'name');\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n $scope.regions = _.keys(regions);\n }\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n updateLoadBalancerNames();\n ctrl.updateName();\n };\n\n this.setVisibilityHealthCheckTab = function () {\n const wizard = ModalWizard;\n\n if ($scope.loadBalancer.listeners[0].healthCheck) {\n wizard.includePage('Health Check');\n wizard.markIncomplete('Health Check');\n wizard.includePage('Advanced Settings');\n wizard.markIncomplete('Advanced Settings');\n } else {\n wizard.excludePage('Health Check');\n wizard.markComplete('Health Check');\n wizard.excludePage('Advanced Settings');\n wizard.markComplete('Advanced Settings');\n wizard.markComplete('Listener');\n }\n };\n\n this.submit = function () {\n const descriptor = isNew ? 'Create' : 'Update';\n\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'gce',\n loadBalancerName: $scope.loadBalancer.name,\n };\n\n if ($scope.loadBalancer.listeners && $scope.loadBalancer.listeners.length > 0) {\n const listener = $scope.loadBalancer.listeners[0];\n\n if (listener.protocol) {\n params.ipProtocol = listener.protocol;\n }\n\n if (listener.portRange) {\n params.portRange = listener.portRange;\n }\n\n if (listener.healthCheck) {\n params.healthCheck = {\n port: $scope.loadBalancer.healthCheckPort,\n requestPath: $scope.loadBalancer.healthCheckPath,\n timeoutSec: $scope.loadBalancer.healthTimeout,\n checkIntervalSec: $scope.loadBalancer.healthInterval,\n healthyThreshold: $scope.loadBalancer.healthyThreshold,\n unhealthyThreshold: $scope.loadBalancer.unhealthyThreshold,\n };\n } else {\n params.healthCheck = null;\n }\n\n params.sessionAffinity = $scope.loadBalancer.sessionAffinity;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer($scope.loadBalancer, application, descriptor, params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IController, IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type {\n Application,\n IAccount,\n ICredentials,\n IInstance,\n ILoadBalancerUpsertCommand,\n IRegion,\n} from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport type { IGceBackendService, IGceHealthCheck, IGceLoadBalancer } from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface ISslLoadBalancerUpsertDescription extends ILoadBalancerUpsertCommand {\n backendService: IGceBackendService;\n loadBalancerName: string;\n instances: IInstance[];\n}\n\nclass SslLoadBalancer implements IGceLoadBalancer {\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public portRange = '443';\n public ipProtocol = 'TCP';\n public instances: IInstance[];\n public loadBalancerType = 'SSL';\n public credentials: string;\n public account: string;\n public certificate: string;\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n public cloudProvider: string;\n public name: string;\n constructor(public region = 'global') {}\n}\n\nclass SslLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements IController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n backendService: require('./backendService.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public certificateWrappers: any[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public portOptions: string[] = ['25', '43', '110', '143', '195', '443', '465', '587', '700', '993', '995'];\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public maxCookieTtl = 60 * 60 * 24; // One day.\n public taskMonitor: any;\n public hasBackendService = true;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n '$state',\n ];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: SslLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'healthChecks', 'certificates'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new SslLoadBalancer(GCEProviderSettings ? GCEProviderSettings.defaults.region : null);\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.certificateWrappers = backingData.certificates as any[];\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public onCertificateRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['certificates']).then((data) => {\n this.certificateWrappers = data.certificates as any[];\n });\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n });\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as ISslLoadBalancerUpsertDescription;\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.cloudProvider = 'gce';\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.portRange = this.loadBalancer.portRange.split('-')[0];\n this.loadBalancer.certificate = this.loadBalancer.certificate.split('/').pop();\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_SSL_LOAD_BALANCER_CTRL = 'spinnaker.gce.sslLoadBalancer.controller';\n\nmodule(GCE_SSL_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n]).controller('gceSslLoadBalancerCtrl', SslLoadBalancerCtrl);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type {\n Application,\n IAccount,\n ICredentials,\n IInstance,\n ILoadBalancerUpsertCommand,\n IRegion,\n} from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport type { IGceBackendService, IGceHealthCheck, IGceLoadBalancer } from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface ITcpLoadBalancerUpsertDescription extends ILoadBalancerUpsertCommand {\n backendService: IGceBackendService;\n loadBalancerName: string;\n instances: IInstance[];\n}\n\nclass TcpLoadBalancer implements IGceLoadBalancer {\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public portRange = '443';\n public ipProtocol = 'TCP';\n public instances: IInstance[];\n public loadBalancerType = 'TCP';\n public credentials: string;\n public account: string;\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n public cloudProvider: string;\n public name: string;\n constructor(public region = 'global') {}\n}\n\nclass TcpLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements ng.IComponentController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n backendService: require('./backendService.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public portOptions: string[] = ['25', '43', '110', '143', '195', '443', '465', '587', '700', '993', '995'];\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public maxCookieTtl = 60 * 60 * 24; // One day.\n public taskMonitor: any;\n public hasBackendService = true;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n '$state',\n ];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: TcpLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'healthChecks'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new TcpLoadBalancer(GCEProviderSettings ? GCEProviderSettings.defaults.region : null);\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n });\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as ITcpLoadBalancerUpsertDescription;\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.cloudProvider = 'gce';\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.portRange = this.loadBalancer.portRange.split('-')[0];\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_TCP_LOAD_BALANCER_CTRL = 'spinnaker.gce.tcpLoadBalancer.controller';\n\nmodule(GCE_TCP_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n]).controller('gceTcpLoadBalancerCtrl', TcpLoadBalancerCtrl);\n","import { module } from 'angular';\n\nconst gceBackendServiceDetailsComponent: ng.IComponentOptions = {\n bindings: {\n backendService: '<',\n },\n template: `\n <dt>Name</dt>\n <dd>{{$ctrl.backendService.name}}</dd>\n <dt>Health Check</dt>\n <dd>{{$ctrl.backendService.healthCheck.name}}</dd>\n <dt ng-if=\"$ctrl.backendService.sessionAffinity\">Session Affinity</dt>\n <dd ng-if=\"$ctrl.backendService.sessionAffinity\">{{$ctrl.backendService.sessionAffinity | gceSessionAffinityFilter}}</dd>\n <dt ng-if=\"$ctrl.backendService.sessionAffinity === 'GENERATED_COOKIE'\">Affinity Cookie TTL</dt>\n <dd ng-if=\"$ctrl.backendService.sessionAffinity === 'GENERATED_COOKIE'\">{{$ctrl.backendService.affinityCookieTtlSec}}</dd>`,\n};\n\nexport const GCE_BACKEND_SERVICE_DETAILS_COMPONENT =\n 'spinnaker.gce.loadBalancer.details.backendServiceDetails.component';\nmodule(GCE_BACKEND_SERVICE_DETAILS_COMPONENT, []).component(\n 'gceBackendServiceDetails',\n gceBackendServiceDetailsComponent,\n);\n","import { module } from 'angular';\nimport { sessionAffinityModelToViewMap } from '../../configure/common/sessionAffinityNameMaps';\n\nfunction gceSessionAffinityFilter() {\n return function (modelValue: string): string {\n return sessionAffinityModelToViewMap[modelValue] || modelValue;\n };\n}\n\nexport const SESSION_AFFINITY_FILTER = 'spinnaker.gce.loadBalancer.details.sessionAffinity.filter';\nmodule(SESSION_AFFINITY_FILTER, []).filter('gceSessionAffinityFilter', gceSessionAffinityFilter);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport type { Application, ILoadBalancerDeleteCommand } from '@spinnaker/core';\nimport { LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from '../../configure/http/httpLoadBalancer.write.service';\nimport type { GceHttpLoadBalancerUtils } from '../../httpLoadBalancerUtils.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../httpLoadBalancerUtils.service';\n\nclass Verification {\n public verified = false;\n}\n\nclass Params {\n public deleteHealthChecks = false;\n}\n\ninterface IGoogleLoadBalancerDeleteOperation extends ILoadBalancerDeleteCommand {\n region: string;\n accountName: string;\n deleteHealthChecks: boolean;\n loadBalancerType: string;\n}\n\nclass DeleteLoadBalancerModalController implements IController {\n public verification: Verification = new Verification();\n public params: Params = new Params();\n public taskMonitor: any;\n\n public static $inject = [\n 'application',\n 'gceHttpLoadBalancerUtils',\n 'gceHttpLoadBalancerWriter',\n 'loadBalancer',\n '$uibModalInstance',\n ];\n constructor(\n private application: Application,\n private gceHttpLoadBalancerUtils: GceHttpLoadBalancerUtils,\n private gceHttpLoadBalancerWriter: any,\n private loadBalancer: any,\n private $uibModalInstance: IModalInstanceService,\n ) {}\n\n public $onInit(): void {\n const taskMonitorConfig = {\n application: this.application,\n title: 'Deleting ' + this.loadBalancer.name,\n modalInstance: this.$uibModalInstance,\n };\n\n this.taskMonitor = new TaskMonitor(taskMonitorConfig);\n }\n\n public isValid(): boolean {\n return this.verification.verified;\n }\n\n public submit(): void {\n this.taskMonitor.submit(this.getSubmitMethod());\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public hasHealthChecks(): boolean {\n if (this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(this.loadBalancer)) {\n return true;\n } else {\n return !!this.loadBalancer.healthCheck;\n }\n }\n\n private getSubmitMethod(): () => PromiseLike<any> {\n if (this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(this.loadBalancer)) {\n return () => {\n return this.gceHttpLoadBalancerWriter.deleteLoadBalancers(this.loadBalancer, this.application, this.params);\n };\n } else {\n return () => {\n const command: IGoogleLoadBalancerDeleteOperation = {\n cloudProvider: 'gce',\n loadBalancerName: this.loadBalancer.name,\n accountName: this.loadBalancer.account,\n credentials: this.loadBalancer.account,\n region: this.loadBalancer.region,\n loadBalancerType: this.loadBalancer.loadBalancerType || 'NETWORK',\n deleteHealthChecks: this.params.deleteHealthChecks,\n };\n return LoadBalancerWriter.deleteLoadBalancer(command, this.application);\n };\n }\n }\n}\n\nexport const DELETE_MODAL_CONTROLLER = 'spinnaker.gce.loadBalancer.deleteModal.controller';\nmodule(DELETE_MODAL_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP as any,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n]).controller('gceLoadBalancerDeleteModalCtrl', DeleteLoadBalancerModalController);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.details.healthCheck.component';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT, []).component('gceHealthCheck', {\n bindings: {\n healthCheck: '=',\n },\n templateUrl: require('./healthCheck.component.html'),\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.loadBalancerType';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT, []).component('gceLoadBalancerType', {\n template: '<span>{{ $ctrl.type }}</span>',\n bindings: {\n loadBalancer: '=',\n },\n controller: function () {\n this.$onInit = () => {\n this.type = (function (lb) {\n if (lb.loadBalancerType === 'HTTP') {\n if (_.isString(lb.certificate)) {\n return 'HTTPS';\n } else {\n return 'HTTP';\n }\n } else {\n return lb.loadBalancerType;\n }\n })(this.loadBalancer);\n };\n },\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LOAD_BALANCER_READ_SERVICE } from '@spinnaker/core';\n\nimport { GCE_BACKEND_SERVICE_DETAILS_COMPONENT } from './backendService/backendService.component';\nimport { SESSION_AFFINITY_FILTER } from './backendService/sessionAffinity.filter';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT } from '../configure/choice/loadBalancerTypeToWizardMap.constant';\nimport { DELETE_MODAL_CONTROLLER } from './deleteModal/deleteModal.controller';\nimport { GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT } from './healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from './hostAndPathRules/hostAndPathRulesButton.component';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../httpLoadBalancerUtils.service';\nimport { GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT } from './loadBalancerType/loadBalancerType.component';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER =\n 'spinnaker.loadBalancer.gce.details.controller';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n LOAD_BALANCER_READ_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GCE_BACKEND_SERVICE_DETAILS_COMPONENT,\n DELETE_MODAL_CONTROLLER,\n SESSION_AFFINITY_FILTER,\n GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT,\n ])\n .controller('gceLoadBalancerDetailsCtrl', [\n '$scope',\n '$state',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'gceHttpLoadBalancerUtils',\n 'loadBalancerReader',\n '$q',\n 'loadBalancerTypeToWizardMap',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $uibModal,\n loadBalancer,\n app,\n gceHttpLoadBalancerUtils,\n loadBalancerReader,\n $q,\n loadBalancerTypeToWizardMap,\n gceXpnNamingService,\n ) {\n const application = (this.application = app);\n\n $scope.state = {\n loading: true,\n };\n\n function extractLoadBalancer() {\n $scope.loadBalancer = application.loadBalancers.data.filter(function (test) {\n const testVpc = test.vpcId || null;\n return (\n test.name === loadBalancer.name &&\n (test.region === loadBalancer.region || test.region === 'global') &&\n test.account === loadBalancer.accountId &&\n testVpc === loadBalancer.vpcId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n return createDetailsLoader().then(function (details) {\n $scope.state.loading = false;\n const filtered = details.filter(function (test) {\n return test.vpcid === loadBalancer.vpcId || (!test.vpcid && !loadBalancer.vpcId);\n });\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n AccountService.getCredentialsKeyedByAccount('gce').then(function () {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer($scope.loadBalancer)) {\n $scope.loadBalancer.elb.backendServices = getBackendServices($scope.loadBalancer);\n $scope.loadBalancer.elb.healthChecks = _.chain($scope.loadBalancer.elb.backendServices)\n .map('healthCheck')\n .uniqBy('name')\n .value();\n }\n });\n }\n AccountService.getAccountDetails(loadBalancer.accountId).then(function (accountDetails) {\n let resourceTypes;\n\n if ($scope.loadBalancer.loadBalancerType === 'INTERNAL') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'NETWORK') {\n resourceTypes = ['gce_forwarding_rule', 'gce_target_pool', 'gce_health_check'];\n } else if ($scope.loadBalancer.loadBalancerType === 'SSL') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'TCP') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'INTERNAL_MANAGED') {\n resourceTypes = ['http_load_balancer', 'gce_target_http_proxy', 'gce_url_map', 'gce_backend_service'];\n } else {\n // $scope.loadBalancer.loadBalancerType === 'HTTP'\n resourceTypes = ['http_load_balancer', 'gce_target_http_proxy', 'gce_url_map', 'gce_backend_service'];\n }\n\n resourceTypes = _.join(resourceTypes, ' OR ');\n\n $scope.loadBalancer.project = accountDetails.project;\n $scope.loadBalancer.logsLink =\n 'https://console.developers.google.com/project/' +\n accountDetails.project +\n '/logs?advancedFilter=resource.type=(' +\n resourceTypes +\n ')%0A\"' +\n $scope.loadBalancer.name +\n '\"';\n });\n }, autoClose);\n }\n if (!$scope.loadBalancer) {\n autoClose();\n }\n return $q.when(null);\n }\n\n function createDetailsLoader() {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer($scope.loadBalancer)) {\n const detailsPromises = $scope.loadBalancer.listeners.map((listener) => {\n return loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n $scope.loadBalancer.region,\n listener.name,\n );\n });\n\n return $q.all(detailsPromises).then((loadBalancers) => {\n loadBalancers = _.flatten(loadBalancers);\n const representativeLb = loadBalancers[0];\n representativeLb.dns = loadBalancers.map((loadBalancer) => {\n let protocol;\n if (loadBalancer.listenerDescriptions[0].listener.loadBalancerPort === '443') {\n protocol = 'https:';\n } else {\n protocol = 'http:';\n }\n return { dnsname: loadBalancer.dnsname, protocol: protocol };\n });\n representativeLb.dns = _.uniqBy(representativeLb.dns, 'dnsname');\n representativeLb.listenerDescriptions = _.flatten(loadBalancers.map((lb) => lb.listenerDescriptions));\n return [representativeLb];\n });\n } else {\n return loadBalancerReader\n .getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n $scope.loadBalancer.region,\n $scope.loadBalancer.name,\n )\n .then((loadBalancerDetails) => {\n const loadBalancer = loadBalancerDetails[0];\n let protocol;\n if (loadBalancer.listenerDescriptions[0].listener.loadBalancerPort === '443') {\n protocol = 'https:';\n } else {\n protocol = 'http:';\n }\n loadBalancer.dns = { dnsname: loadBalancer.dnsname, protocol: protocol };\n return loadBalancerDetails;\n });\n }\n }\n\n function getBackendServices(loadBalancer) {\n let backendServices = [loadBalancer.defaultService];\n\n if (loadBalancer.hostRules.length) {\n backendServices = _.chain(loadBalancer.hostRules)\n .reduce((services, hostRule) => {\n services.push(hostRule.pathMatcher.defaultService);\n return services.concat(_.map(hostRule.pathMatcher.pathRules, 'backendService'));\n }, backendServices)\n .uniqBy('name')\n .value();\n }\n return backendServices;\n }\n\n function autoClose() {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n app.loadBalancers\n .ready()\n .then(extractLoadBalancer)\n .then(() => {\n // If the user navigates away from the view before the initial extractLoadBalancer call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.loadBalancers.onRefresh($scope, extractLoadBalancer);\n }\n });\n\n this.editLoadBalancer = function editLoadBalancer() {\n const wizard = loadBalancerTypeToWizardMap[$scope.loadBalancer.loadBalancerType];\n\n $uibModal.open({\n templateUrl: wizard.editTemplateUrl,\n controller: `${wizard.controller} as ctrl`,\n size: 'lg',\n resolve: {\n application: function () {\n return application;\n },\n loadBalancer: function () {\n return angular.copy($scope.loadBalancer);\n },\n isNew: function () {\n return false;\n },\n },\n });\n };\n\n this.deleteLoadBalancer = function deleteLoadBalancer() {\n if (!($scope.loadBalancer.instances && $scope.loadBalancer.instances.length)) {\n $uibModal.open({\n controller: 'gceLoadBalancerDeleteModalCtrl as ctrl',\n templateUrl: require('./deleteModal/deleteModal.html'),\n resolve: {\n application: () => application,\n loadBalancer: () => $scope.loadBalancer,\n },\n });\n }\n };\n\n this.isHttpLoadBalancer = (lb) => gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb);\n\n this.getNetworkId = function getNetworkId(loadBalancer) {\n return gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, loadBalancer.network);\n };\n\n this.getSubnetId = function getSubnetId(loadBalancer) {\n return gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, loadBalancer.subnet);\n };\n },\n ]);\n","import { module } from 'angular';\nimport { cloneDeep, groupBy, map, partition } from 'lodash';\n\nimport type { IGceHttpLoadBalancer, IGceLoadBalancer } from '../domain/loadBalancer';\n\nimport type { GceHttpLoadBalancerUtils } from './httpLoadBalancerUtils.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from './httpLoadBalancerUtils.service';\n\nexport class GceLoadBalancerSetTransformer {\n private static normalizeHttpLoadBalancerGroup(group: IGceHttpLoadBalancer[]): IGceHttpLoadBalancer {\n const normalized = cloneDeep(group[0]);\n\n normalized.listeners = group.map((loadBalancer) => {\n const port = loadBalancer.portRange ? GceLoadBalancerSetTransformer.parsePortRange(loadBalancer.portRange) : null;\n return {\n port,\n name: loadBalancer.name,\n certificate: loadBalancer.certificate,\n ipAddress: loadBalancer.ipAddress,\n subnet: loadBalancer.subnet,\n };\n });\n\n normalized.name = normalized.urlMapName;\n delete normalized.subnet;\n return normalized;\n }\n\n private static parsePortRange(portRange: string): string {\n return portRange.split('-')[0];\n }\n\n public static $inject = ['gceHttpLoadBalancerUtils'];\n constructor(private gceHttpLoadBalancerUtils: GceHttpLoadBalancerUtils) {}\n\n public normalizeLoadBalancerSet = (loadBalancers: IGceLoadBalancer[]): IGceLoadBalancer[] => {\n const [httpLoadBalancers, otherLoadBalancers] = partition(loadBalancers, (lb) =>\n this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb),\n );\n\n const groupedByUrlMap = groupBy(httpLoadBalancers, 'urlMapName');\n const normalizedElSevenLoadBalancers = map(\n groupedByUrlMap,\n GceLoadBalancerSetTransformer.normalizeHttpLoadBalancerGroup,\n );\n\n return (normalizedElSevenLoadBalancers as IGceLoadBalancer[]).concat(otherLoadBalancers);\n };\n}\n\nexport const LOAD_BALANCER_SET_TRANSFORMER = 'spinnaker.gce.loadBalancer.setTransformer.service';\nmodule(LOAD_BALANCER_SET_TRANSFORMER, [GCE_HTTP_LOAD_BALANCER_UTILS]).service(\n 'gceLoadBalancerSetTransformer',\n GceLoadBalancerSetTransformer,\n);\n","export default \"gce.logo2ae85d8704b1d6b8.png\"","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.gce.pipeline.stage.bake.executionDetails.controller';\nexport const name = GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'gceBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus', 'artifactStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'gce';\n $scope.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' &&\n SETTINGS.feature.roscoSelector($scope.stage.context));\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n ArtifactReferenceService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n ExpectedArtifactService,\n PipelineTemplates,\n Registry,\n SETTINGS,\n} from '@spinnaker/core';\nimport { GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\n\nexport const GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE = 'spinnaker.gce.pipeline.stage..bakeStage';\nexport const name = GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE, [GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'gce',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n producesArtifacts: true,\n supportsCustomTimeout: true,\n validators: [\n {\n type: 'anyFieldRequired',\n fields: [\n { fieldName: 'package', fieldLabel: 'Package' },\n { fieldName: 'packageArtifactIds', fieldLabel: 'Package Artifacts' },\n ],\n },\n ],\n restartable: true,\n artifactExtractor: ExpectedArtifactService.accumulateArtifacts(['packageArtifactIds']),\n artifactRemover: ArtifactReferenceService.removeArtifactFromFields(['packageArtifactIds']),\n });\n })\n .controller('gceBakeStageCtrl', [\n '$scope',\n '$q',\n '$uibModal',\n function ($scope, $q, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.region = 'global';\n\n if (!$scope.stage.cloudProvider) {\n $scope.stage.cloudProvider = 'gce';\n }\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $scope.viewState.providerSelected = true;\n $q.all([\n BakeryReader.getBaseOsOptions('gce'),\n BakeryReader.getBaseLabelOptions(),\n ExpectedArtifactService.getExpectedArtifactsAvailableToStage($scope.stage, $scope.pipeline),\n ]).then(function ([baseOsOptions, baseLabelOptions, expectedArtifacts]) {\n $scope.baseOsOptions = baseOsOptions.baseImages;\n $scope.baseLabelOptions = baseLabelOptions;\n $scope.viewState.expectedArtifacts = expectedArtifacts;\n\n if (!$scope.stage.baseOs && $scope.baseOsOptions && $scope.baseOsOptions.length) {\n $scope.stage.baseOs = $scope.baseOsOptions[0].id;\n }\n if (!$scope.stage.baseLabel && $scope.baseLabelOptions && $scope.baseLabelOptions.length) {\n $scope.stage.baseLabel = $scope.baseLabelOptions[0];\n }\n $scope.viewState.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage));\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n });\n }\n\n function showAdvanced() {\n const stage = $scope.stage;\n return !!(\n stage.templateFileName ||\n (stage.extendedAttributes && _.size(stage.extendedAttributes) > 0) ||\n stage.varFileName ||\n stage.baseAmi ||\n stage.accountName\n );\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\n // Since the selector computes using stage as an input, it needs to be able to recompute roscoMode on updates\n if (typeof SETTINGS.feature.roscoSelector === 'function') {\n $scope.viewState.roscoMode = SETTINGS.feature.roscoSelector($scope.stage);\n }\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n this.addExtendedAttribute = function () {\n if (!$scope.stage.extendedAttributes) {\n $scope.stage.extendedAttributes = {};\n }\n $uibModal\n .open({\n templateUrl: PipelineTemplates.addExtendedAttributes,\n controller: 'bakeStageAddExtendedAttributeController',\n controllerAs: 'addExtendedAttribute',\n resolve: {\n extendedAttribute: function () {\n return {\n key: '',\n value: '',\n };\n },\n },\n })\n .result.then(function (extendedAttribute) {\n $scope.stage.extendedAttributes[extendedAttribute.key] = extendedAttribute.value;\n })\n .catch(() => {});\n };\n\n this.removeExtendedAttribute = function (key) {\n delete $scope.stage.extendedAttributes[key];\n };\n\n this.showTemplateFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.templateFileName;\n };\n\n this.showAccountName = function () {\n return $scope.viewState.roscoMode || $scope.stage.accountName;\n };\n\n this.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && _.size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n this.showVarFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.varFileName;\n };\n\n $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, NameUtils, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE =\n 'spinnaker.gce.pipeline.stage..cloneServerGroupStage';\nexport const name = GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'cloneServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./cloneServerGroupStage.html'),\n executionStepLabelUrl: require('./cloneServerGroupStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'targetCluster', fieldLabel: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceCloneServerGroupStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then((accounts) => {\n $scope.accounts = accounts;\n $scope.viewState.accountsLoaded = true;\n });\n\n this.cloneTargets = StageConstants.TARGET_LIST;\n stage.target = stage.target || this.cloneTargets[0].val;\n stage.application = $scope.application.name;\n stage.cloudProvider = 'gce';\n stage.cloudProviderType = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n\n this.targetClusterUpdated = () => {\n if (stage.targetCluster) {\n const clusterName = NameUtils.parseServerGroupName(stage.targetCluster);\n stage.stack = clusterName.stack;\n stage.freeFormDetails = clusterName.freeFormDetails;\n } else {\n stage.stack = '';\n stage.freeFormDetails = '';\n }\n };\n\n $scope.$watch('stage.targetCluster', this.targetClusterUpdated);\n\n this.removeCapacity = () => {\n delete stage.capacity;\n };\n\n if (!_.has(stage, 'useSourceCapacity')) {\n stage.useSourceCapacity = true;\n }\n\n this.toggleDisableTraffic = () => {\n stage.disableTraffic = !stage.disableTraffic;\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE = 'spinnaker.gce.pipeline.stage..destroyAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE = 'spinnaker.gce.pipeline.stage..disableAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./disableAsgStage.html'),\n executionStepLabelUrl: require('./disableAsgStepLabel.html'),\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to disable a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..disableClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableCluster',\n cloudProvider: 'gce',\n templateUrl: require('./disableClusterStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingEnabledServerGroups',\n fieldLabel: 'Keep [X] enabled Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceDisableClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n stage.remainingEnabledServerGroups = 1;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE = 'spinnaker.gce.pipeline.stage..enableAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./enableAsgStage.html'),\n executionStepLabelUrl: require('./enableAsgStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceEnableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE = 'spinnaker.gce.pipeline.stage..findAmiStage';\nexport const name = GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE; // for backwards compatibility\nangular\n .module(GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImage',\n cloudProvider: 'gce',\n templateUrl: require('./findAmiStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'selectionStrategy', fieldLabel: 'Server Group Selection' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials' },\n ],\n });\n })\n .controller('gceFindAmiStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.selectionStrategies = [\n {\n label: 'Largest',\n val: 'LARGEST',\n description: 'When multiple server groups exist, prefer the server group with the most instances',\n },\n {\n label: 'Newest',\n val: 'NEWEST',\n description: 'When multiple server groups exist, prefer the newest',\n },\n {\n label: 'Oldest',\n val: 'OLDEST',\n description: 'When multiple server groups exist, prefer the oldest',\n },\n {\n label: 'Fail',\n val: 'FAIL',\n description: 'When multiple server groups exist, fail',\n },\n ];\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n stage.selectionStrategy = stage.selectionStrategy || $scope.selectionStrategies[0].val;\n\n if (angular.isUndefined(stage.onlyEnabled)) {\n stage.onlyEnabled = true;\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { BakeryReader, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE =\n 'spinnaker.gce.pipeline.stage..findImageFromTagsStage';\nexport const name = GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'gce',\n templateUrl: require('./findImageFromTagsStage.html'),\n executionDetailsUrl: require('./findImageFromTagsExecutionDetails.html'),\n executionConfigSections: ['findImageConfig', 'taskStatus'],\n validators: [\n { type: 'requiredField', fieldName: 'packageName' },\n { type: 'requiredField', fieldName: 'tags' },\n ],\n });\n })\n .controller('gceFindImageFromTagsStageCtrl', [\n '$scope',\n function ($scope) {\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.regions = $scope.stage.regions || [];\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'gce';\n\n BakeryReader.getRegions('gce').then(function (regions) {\n $scope.regions = regions;\n });\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE = 'spinnaker.gce.pipeline.stage..resizeAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./resizeAsgStage.html'),\n executionStepLabelUrl: require('./resizeAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n supportsCustomTimeout: true,\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to resize a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'action' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceResizeAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.viewState.accountsLoaded = true;\n });\n\n $scope.resizeTargets = StageConstants.TARGET_LIST;\n\n $scope.scaleActions = [\n {\n label: 'Scale Up',\n val: 'scale_up',\n },\n {\n label: 'Scale Down',\n val: 'scale_down',\n },\n {\n label: 'Scale to Cluster Size',\n val: 'scale_to_cluster',\n },\n {\n label: 'Scale to Exact Size',\n val: 'scale_exact',\n },\n ];\n\n $scope.resizeTypes = [\n {\n label: 'Percentage',\n val: 'pct',\n },\n {\n label: 'Incremental',\n val: 'incr',\n },\n ];\n\n stage.capacity = stage.capacity || {};\n stage.regions = stage.regions || [];\n stage.target = stage.target || $scope.resizeTargets[0].val;\n stage.action = stage.action || $scope.scaleActions[0].val;\n stage.resizeType = stage.resizeType || $scope.resizeTypes[0].val;\n if (!stage.action && stage.resizeType === 'exact') {\n stage.action = 'scale_exact';\n }\n stage.cloudProvider = 'gce';\n stage.cloudProviderType = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n ctrl.updateResizeType = function () {\n if (stage.action === 'scale_exact') {\n stage.resizeType = 'exact';\n delete stage.scalePct;\n delete stage.scaleNum;\n } else {\n stage.capacity = {};\n if (stage.resizeType === 'pct') {\n delete stage.scaleNum;\n } else {\n stage.resizeType = 'incr';\n delete stage.scalePct;\n stage.scaleNum = stage.scaleNum || 0;\n }\n }\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..scaleDownClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'gce',\n templateUrl: require('./scaleDownClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingFullSizeServerGroups',\n fieldLabel: 'Keep [X] full size Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n strategy: true,\n });\n })\n .controller('gceScaleDownClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (stage.remainingFullSizeServerGroups === undefined) {\n stage.remainingFullSizeServerGroups = 1;\n }\n\n if (stage.allowScaleDownActive === undefined) {\n stage.allowScaleDownActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..shrinkClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'gce',\n templateUrl: require('./shrinkClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'shrinkToSize', fieldLabel: 'shrink to [X] Server Groups' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceShrinkClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (stage.shrinkToSize === undefined) {\n stage.shrinkToSize = 1;\n }\n\n if (stage.allowDeleteActive === undefined) {\n stage.allowDeleteActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.retainLargerOverNewer === undefined) {\n stage.retainLargerOverNewer = 'false';\n }\n stage.retainLargerOverNewer = stage.retainLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, PipelineConfigService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE = 'spinnaker.gce.pipeline.stage..tagImageStage';\nexport const name = GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'upsertImageTags',\n cloudProvider: 'gce',\n templateUrl: require('./tagImageStage.html'),\n executionDetailsUrl: require('./tagImageExecutionDetails.html'),\n executionConfigSections: ['tagImageConfig', 'taskStatus'],\n });\n })\n .controller('gceTagImageStageCtrl', [\n '$scope',\n ($scope) => {\n AccountService.listAccounts('gce').then((accounts) => ($scope.accounts = accounts));\n\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'gce';\n\n const initUpstreamStages = () => {\n const upstreamDependencies = PipelineConfigService.getAllUpstreamDependencies(\n $scope.pipeline,\n $scope.stage,\n ).filter((stage) => StageConstants.IMAGE_PRODUCING_STAGES.includes(stage.type));\n $scope.consideredStages = new Map(upstreamDependencies.map((stage) => [stage.refId, stage.name]));\n };\n $scope.$watch('pipeline.stages', initUpstreamStages);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\n\nimport { AccountService, InfrastructureCaches } from '@spinnaker/core';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER =\n 'spinnaker.gce.securityGroup.create.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER, [UIROUTER_ANGULARJS])\n .controller('gceCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'application',\n 'securityGroup',\n function ($scope, $uibModalInstance, $state, $controller, application, securityGroup) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n targets: require('./createSecurityGroupTargets.html'),\n sourceFilters: require('./createSecurityGroupSourceFilters.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n const ctrl = this;\n\n securityGroup.backingData = {};\n securityGroup.network = 'default';\n securityGroup.sourceRanges = [];\n securityGroup.sourceTags = [];\n securityGroup.ipIngress = [];\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'create',\n }),\n );\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n ctrl.upsert = function () {\n ctrl.mixinUpsert('Create');\n };\n\n ctrl.initializeSecurityGroups();\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\n\nimport { FirewallLabels, InfrastructureCaches, SecurityGroupWriter, TaskMonitor } from '@spinnaker/core';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER =\n 'spinnaker.google.securityGroup.edit.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER, [UIROUTER_ANGULARJS])\n .controller('gceEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'application',\n 'securityGroup',\n '$controller',\n function ($scope, $uibModalInstance, $state, application, securityGroup, $controller) {\n $scope.pages = {\n targets: require('./createSecurityGroupTargets.html'),\n sourceFilters: require('./createSecurityGroupSourceFilters.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'edit',\n }),\n );\n\n $scope.isNew = false;\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: () => application.securityGroups.refresh(),\n });\n\n securityGroup.sourceRanges = _.map(securityGroup.sourceRanges, function (sourceRange) {\n return { value: sourceRange };\n });\n\n securityGroup.ipIngress = _.chain(securityGroup.ipIngressRules)\n .map(function (rule) {\n if (rule.portRanges && rule.portRanges.length > 0) {\n return rule.portRanges.map(function (portRange) {\n return {\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n } else {\n return [\n {\n type: rule.protocol,\n },\n ];\n }\n })\n .flatten()\n .value();\n\n securityGroup.sourceTags = securityGroup.sourceTags || [];\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.addSourceCIDR = function (sourceRanges) {\n sourceRanges.push({ value: '0.0.0.0/0' });\n };\n\n this.removeSourceCIDR = function (sourceRanges, index) {\n sourceRanges.splice(index, 1);\n };\n\n this.addRule = function (ruleset) {\n ruleset.push({\n type: 'tcp',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n this.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n this.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const allowed = _.map($scope.securityGroup.ipIngress, function (ipIngressRule) {\n const rule = {\n ipProtocol: ipIngressRule.type,\n };\n\n if (ipIngressRule.startPort && ipIngressRule.endPort) {\n rule.portRanges = [ipIngressRule.startPort + '-' + ipIngressRule.endPort];\n }\n\n return rule;\n });\n\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', {\n cloudProvider: 'gce',\n sourceRanges: _.uniq(_.map($scope.securityGroup.sourceRanges, 'value')),\n allowed: allowed,\n targetTags: $scope.securityGroup.targetTags || [],\n region: 'global',\n });\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n ]);\n","import { module } from 'angular';\nimport { has } from 'lodash';\n\nimport type { Application, IServerGroup } from '@spinnaker/core';\nimport { FirewallLabels } from '@spinnaker/core';\n\nexport class GceSecurityGroupHelpTextService {\n private serverGroupsIndexedByTag: Map<string, Set<string>>;\n private application: Application;\n private account: string;\n private network: string;\n\n public register(application: Application, account: string, network: string): PromiseLike<void> {\n this.reset();\n this.application = application;\n this.account = account;\n this.network = network;\n return this.indexServerGroupsByTag();\n }\n\n public getHelpTextForTag(tag: string, tagType: 'source' | 'target'): string {\n const serverGroups = this.getServerGroupsWithTag(tag);\n let text: string;\n switch (serverGroups.length) {\n case 0:\n text = null;\n break;\n case 1:\n text = `This ${tagType} tag associates this ${FirewallLabels.get('firewall')} with the server group <em>${\n serverGroups[0]\n }</em>.`;\n break;\n default:\n text = `This ${tagType} tag associates this ${FirewallLabels.get('firewall')} with the server groups\n ${serverGroups.map((serverGroup) => `<em>${serverGroup}</em>`).join(', ')}.`;\n break;\n }\n return text;\n }\n\n public getServerGroupsWithTag(tag: string): string[] {\n if (this.serverGroupsIndexedByTag.get(tag)) {\n return Array.from(this.serverGroupsIndexedByTag.get(tag)).sort();\n } else {\n return [];\n }\n }\n\n public reset(): void {\n this.application = null;\n this.account = null;\n this.serverGroupsIndexedByTag = new Map<string, Set<string>>();\n }\n\n private indexServerGroupsByTag(): PromiseLike<void> {\n return this.application.ready().then(() => {\n this.application.getDataSource('serverGroups').data.forEach((serverGroup: IServerGroup) => {\n if (\n has(serverGroup, 'providerMetadata.tags.length') &&\n serverGroup.account === this.account &&\n serverGroup.providerMetadata?.networkName === this.network\n ) {\n serverGroup.providerMetadata.tags.forEach((tag: string) => {\n if (!this.serverGroupsIndexedByTag.get(tag)) {\n this.serverGroupsIndexedByTag.set(\n tag,\n new Set<string>([serverGroup.name]),\n );\n } else {\n this.serverGroupsIndexedByTag.get(tag).add(serverGroup.name);\n }\n });\n }\n });\n });\n }\n}\n\nexport const GCE_SECURITY_GROUP_HELP_TEXT_SERVICE = 'spinnaker.gce.securityGroupHelpText.service';\nmodule(GCE_SECURITY_GROUP_HELP_TEXT_SERVICE, []).service(\n 'gceSecurityGroupHelpTextService',\n GceSecurityGroupHelpTextService,\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n FirewallLabels,\n ModalWizard,\n NetworkReader,\n SECURITY_GROUP_READER,\n SecurityGroupWriter,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { GCE_SECURITY_GROUP_HELP_TEXT_SERVICE } from '../securityGroupHelpText.service';\n\nimport './securityGroup.configure.less';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER =\n 'spinnaker.google.securityGroup.baseConfig.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n GCE_SECURITY_GROUP_HELP_TEXT_SERVICE,\n]).controller('gceConfigSecurityGroupMixin', [\n '$scope',\n '$state',\n '$uibModalInstance',\n 'application',\n 'securityGroup',\n 'securityGroupReader',\n 'cacheInitializer',\n 'gceSecurityGroupHelpTextService',\n 'mode',\n function (\n $scope,\n $state,\n $uibModalInstance,\n application,\n securityGroup,\n securityGroupReader,\n cacheInitializer,\n gceSecurityGroupHelpTextService,\n mode,\n ) {\n const ctrl = this;\n\n $scope.isNew = true;\n\n $scope.state = {\n submitting: false,\n refreshingSecurityGroups: false,\n removedRules: [],\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n mode: mode,\n target: null,\n targetOptions: null,\n };\n\n $scope.wizard = ModalWizard;\n\n ctrl.getTagHelpText = function (tag, tagType) {\n return gceSecurityGroupHelpTextService.getHelpTextForTag(tag, tagType);\n };\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n ctrl.registerHelpTextService = function () {\n gceSecurityGroupHelpTextService.register(\n application,\n $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n securityGroup.network,\n );\n };\n\n ctrl.initializeTargetOptions = function () {\n const options = ['allowAllTraffic', 'specifyTags'];\n if ($scope.state.mode === 'edit') {\n $scope.state.targetOptions = options;\n } else {\n $scope.state.targetOptions = ['autoGenerate'].concat(options);\n }\n };\n\n ctrl.initializeTarget = function () {\n if ($scope.state.mode === 'create') {\n $scope.state.target = 'autoGenerate';\n } else {\n if ($scope.securityGroup.targetTags && $scope.securityGroup.targetTags.length > 0) {\n $scope.state.target = 'specifyTags';\n } else {\n $scope.state.target = 'allowAllTraffic';\n }\n }\n };\n\n ctrl.getTargetLabel = function (target) {\n switch (target) {\n case 'autoGenerate':\n return 'Auto-generate target tag';\n case 'allowAllTraffic':\n return 'Allow traffic to all server groups';\n case 'specifyTags':\n return 'Specify target tags';\n default:\n return null;\n }\n };\n\n ctrl.onTargetChange = function () {\n switch ($scope.state.target) {\n case 'autoGenerate':\n $scope.securityGroup.targetTags = null;\n break;\n case 'allowAllTraffic':\n $scope.securityGroup.targetTags = [];\n break;\n case 'specifyTags':\n $scope.securityGroup.targetTags = $scope.securityGroup.targetTags || [];\n break;\n default:\n break;\n }\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: 'global',\n vpcId: $scope.securityGroup.vpcId,\n provider: 'gce',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Creating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n $scope.securityGroup = securityGroup;\n ctrl.initializeTargetOptions();\n ctrl.initializeTarget();\n ctrl.onTargetChange();\n ctrl.registerHelpTextService();\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create');\n });\n };\n\n ctrl.mixinUpsert = function (descriptor) {\n $scope.taskMonitor.submit(function () {\n const allowed = _.map($scope.securityGroup.ipIngress, function (ipIngressRule) {\n const rule = {\n ipProtocol: ipIngressRule.type,\n };\n\n if (ipIngressRule.startPort && ipIngressRule.endPort) {\n rule.portRanges = [ipIngressRule.startPort + '-' + ipIngressRule.endPort];\n }\n\n return rule;\n });\n\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, descriptor, {\n cloudProvider: 'gce',\n sourceRanges: _.uniq(_.map($scope.securityGroup.sourceRanges, 'value')),\n targetTags: $scope.securityGroup.targetTags,\n sourceTags: $scope.securityGroup.sourceTags,\n allowed: allowed,\n region: 'global',\n network: $scope.securityGroup.network,\n });\n });\n };\n\n ctrl.accountUpdated = function () {\n ctrl.initializeSecurityGroups();\n ctrl.updateNetworks();\n ctrl.updateName();\n };\n\n ctrl.refreshSecurityGroups = function () {\n $scope.state.refreshingSecurityGroups = true;\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return ctrl.initializeSecurityGroups().then(function () {\n $scope.state.refreshingSecurityGroups = false;\n });\n });\n };\n\n ctrl.initializeSecurityGroups = function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n const account = $scope.securityGroup.credentials || $scope.securityGroup.accountName;\n\n let existingGroups;\n if (account) {\n existingGroups = securityGroups[account].gce.global;\n } else {\n existingGroups = securityGroups;\n }\n\n $scope.existingSecurityGroupNames = _.map(existingGroups, 'name');\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateNetworks = function () {\n NetworkReader.listNetworksByProvider('gce').then(function (gceNetworks) {\n const account = $scope.securityGroup.credentials || $scope.securityGroup.accountName;\n $scope.securityGroup.backingData.networks = _(gceNetworks)\n .filter((n) => n.account === account && !n.id.includes('/'))\n .map((n) => n.id)\n .value();\n });\n };\n\n ctrl.getCurrentNamePattern = function () {\n return /^[a-zA-Z0-9-]*$/;\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n name = _.trimEnd(name, '-');\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n ctrl.namePattern = {\n test: function (name) {\n return ctrl.getCurrentNamePattern().test(name);\n },\n };\n\n ctrl.addSourceCIDR = function (sourceRanges) {\n sourceRanges.push({ value: '0.0.0.0/0' });\n };\n\n ctrl.removeSourceCIDR = function (sourceRanges, index) {\n sourceRanges.splice(index, 1);\n };\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n type: 'tcp',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n ctrl.dismissRemovedRules = function () {\n $scope.state.removedRules = [];\n ModalWizard.markClean('Ingress');\n ModalWizard.markComplete('Ingress');\n };\n\n ctrl.isValid = function () {\n return (\n ($scope.state.target === 'specifyTags' ? $scope.securityGroup.targetTags.length > 0 : true) &&\n $scope.securityGroup.ipIngress.length > 0 &&\n ($scope.securityGroup.sourceTags.length > 0 || $scope.securityGroup.sourceRanges.length > 0)\n );\n };\n\n ctrl.addTargetTag = function () {\n $scope.securityGroup.targetTags.push('');\n };\n\n ctrl.removeTargetTag = function (index) {\n $scope.securityGroup.targetTags.splice(index, 1);\n };\n\n ctrl.addSourceTag = function () {\n $scope.securityGroup.sourceTags.push('');\n };\n\n ctrl.removeSourceTag = function (index) {\n $scope.securityGroup.sourceTags.splice(index, 1);\n };\n },\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels } from '@spinnaker/core';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER } from '../configure/ConfigSecurityGroupMixin.controller';\n\nexport const GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER =\n 'spinnaker.google.securityGroup.clone.controller';\nexport const name = GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER,\n ])\n .controller('gceCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, securityGroup, application) {\n const vm = this;\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n targets: require('../configure/createSecurityGroupTargets.html'),\n sourceFilters: require('../configure/createSecurityGroupSourceFilters.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'clone',\n }),\n );\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n vm.accountUpdated();\n });\n\n securityGroup.sourceRanges = _.map(securityGroup.sourceRanges, function (sourceRange) {\n return { value: sourceRange };\n });\n\n securityGroup.ipIngress = _.chain(securityGroup.ipIngressRules)\n .map(function (rule) {\n if (rule.portRanges && rule.portRanges.length > 0) {\n return rule.portRanges.map(function (portRange) {\n return {\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n } else {\n return [\n {\n type: rule.protocol,\n },\n ];\n }\n })\n .flatten()\n .value();\n\n securityGroup.backingData = {};\n\n securityGroup.sourceTags = securityGroup.sourceTags || [];\n\n vm.upsert = function () {\n vm.mixinUpsert('Clone');\n };\n\n vm.initializeSecurityGroups();\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CloudProviderRegistry,\n ConfirmationModalService,\n FirewallLabels,\n SECURITY_GROUP_READER,\n SecurityGroupWriter,\n} from '@spinnaker/core';\n\nimport { GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { GCE_SECURITY_GROUP_HELP_TEXT_SERVICE } from '../securityGroupHelpText.service';\n\nexport const GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.securityGroup.gce.details.controller';\nexport const name = GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n GCE_SECURITY_GROUP_HELP_TEXT_SERVICE,\n ])\n .controller('gceSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'securityGroupReader',\n '$uibModal',\n 'gceSecurityGroupHelpTextService',\n function (\n $scope,\n $state,\n resolvedSecurityGroup,\n app,\n securityGroupReader,\n $uibModal,\n gceSecurityGroupHelpTextService,\n ) {\n const application = (this.application = app);\n const securityGroup = resolvedSecurityGroup;\n\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('gce', 'securityGroup.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n function extractSecurityGroup() {\n return securityGroupReader\n .getSecurityGroupDetails(\n application,\n securityGroup.accountId,\n securityGroup.provider,\n securityGroup.region,\n securityGroup.vpcId,\n securityGroup.name,\n )\n .then(function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n $scope.securityGroup = details;\n const applicationSecurityGroup = securityGroupReader.getApplicationSecurityGroup(\n application,\n securityGroup.accountId,\n securityGroup.region,\n securityGroup.name,\n );\n $scope.securityGroup = angular.extend(_.cloneDeep(applicationSecurityGroup), $scope.securityGroup);\n\n // These come back from the global firewall endpoint as '[tag-a, tag-b]'\n if (typeof $scope.securityGroup.targetTags === 'string') {\n const targetTags = $scope.securityGroup.targetTags;\n $scope.securityGroup.targetTags = targetTags.substring(1, targetTags.length - 1).split(', ');\n }\n if (typeof $scope.securityGroup.sourceTags === 'string') {\n const sourceTags = $scope.securityGroup.sourceTags;\n $scope.securityGroup.sourceTags = sourceTags.substring(1, sourceTags.length - 1).split(', ');\n }\n\n // These come back from the global firewall endpoint as '[account-a@project.iam.gserviceaccount.com, account-b@project.iam.gserviceaccount.com]'\n if (typeof $scope.securityGroup.targetServiceAccounts === 'string') {\n const targetServiceAccounts = $scope.securityGroup.targetServiceAccounts;\n $scope.securityGroup.targetServiceAccounts = targetServiceAccounts\n .substring(1, targetServiceAccounts.length - 1)\n .split(', ');\n }\n if (typeof $scope.securityGroup.sourceServiceAccounts === 'string') {\n const sourceServiceAccounts = $scope.securityGroup.sourceServiceAccounts;\n $scope.securityGroup.sourceServiceAccounts = sourceServiceAccounts\n .substring(1, sourceServiceAccounts.length - 1)\n .split(', ');\n }\n\n $scope.securityGroup.sourceRanges = _.chain($scope.securityGroup.ipRangeRules)\n .map((rule) => {\n return rule.range.ip && rule.range.cidr ? rule.range.ip + rule.range.cidr : null;\n })\n .compact()\n .uniq()\n .value();\n\n const ipIngress = _.map($scope.securityGroup.ipRangeRules, function (ipRangeRule) {\n return {\n protocol: ipRangeRule.protocol,\n portRanges: ipRangeRule.portRanges,\n };\n });\n\n let ipIngressRules = {};\n\n ipIngress.forEach(function (ipIngressRule) {\n if (_.has(ipIngressRules, ipIngressRule.protocol)) {\n ipIngressRules[ipIngressRule.protocol] = ipIngressRules[ipIngressRule.protocol].concat(\n ipIngressRule.portRanges,\n );\n\n ipIngressRules[ipIngressRule.protocol] = _.uniqBy(ipIngressRules[ipIngressRule.protocol], function (\n portRange,\n ) {\n return portRange.startPort + '->' + portRange.endPort;\n });\n } else {\n ipIngressRules[ipIngressRule.protocol] = ipIngressRule.portRanges;\n }\n });\n\n ipIngressRules = _.map(ipIngressRules, function (portRanges, protocol) {\n return {\n protocol: protocol,\n portRanges: portRanges,\n };\n });\n\n $scope.securityGroup.ipIngressRules = ipIngressRules;\n\n $scope.securityGroup.protocolPortRangeCount = _.sumBy(ipIngressRules, function (ipIngressRule) {\n return ipIngressRule.portRanges.length > 1 ? ipIngressRule.portRanges.length : 1;\n });\n\n AccountService.getAccountDetails(securityGroup.accountId).then(function (accountDetails) {\n $scope.securityGroup.logsLink =\n 'https://console.developers.google.com/project/' +\n accountDetails.project +\n '/logs?service=gce_firewall_rule&minLogLevel=0&filters=text:' +\n securityGroup.name;\n });\n\n gceSecurityGroupHelpTextService.register(\n application,\n $scope.securityGroup.accountName,\n $scope.securityGroup.network,\n );\n }\n }, fourOhFour);\n }\n\n function fourOhFour() {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n application.securityGroups\n .ready()\n .then(() => extractSecurityGroup())\n .then(() => {\n // If the user navigates away from the view before the initial extractSecurityGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\n }\n });\n\n this.getTagHelpText = function (tag, tagType) {\n return gceSecurityGroupHelpTextService.getHelpTextForTag(tag, tagType);\n };\n\n this.editInboundRules = function editInboundRules() {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'gceEditSecurityGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n securityGroup: function () {\n return angular.copy($scope.securityGroup);\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'gceCloneSecurityGroupController as ctrl',\n size: 'lg',\n resolve: {\n securityGroup: function () {\n const securityGroup = angular.copy($scope.securityGroup);\n if (securityGroup.region) {\n securityGroup.regions = [securityGroup.region];\n }\n return securityGroup;\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.deleteSecurityGroup = function deleteSecurityGroup() {\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n };\n\n const submitMethod = function () {\n return SecurityGroupWriter.deleteSecurityGroup(securityGroup, application, {\n cloudProvider: $scope.securityGroup.type,\n securityGroupName: securityGroup.name,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + securityGroup.name + '?',\n buttonText: 'Delete ' + securityGroup.name,\n account: securityGroup.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n if (app.isStandalone) {\n // we still want the edit to refresh the firewall details when the modal closes\n app.securityGroups = {\n refresh: extractSecurityGroup,\n };\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.gce.securityGroup.reader';\nexport const name = GOOGLE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('gceSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n return indexedSecurityGroups[container.account].global[securityGroupId];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.gce.securityGroup.transformer';\nexport const name = GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('gceSecurityGroupTransformer', [\n '$q',\n function ($q) {\n function normalizeSecurityGroup(securityGroup) {\n return $q.when(securityGroup); // no-op\n }\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.basicSettings.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT, []).component(\n 'gceAutoscalingPolicyBasicSettings',\n {\n bindings: {\n policy: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./basicSettings.component.html'),\n controller: function controller() {\n this.modes = ['ON', 'OFF', 'ONLY_SCALE_OUT'];\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.metricSettings.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT, []).component(\n 'gceAutoscalingPolicyMetricSettings',\n {\n bindings: {\n policy: '=',\n showNoMetricsWarning: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./metricSettings.component.html'),\n controller: function () {\n this.$onInit = () => {\n const multipleAllowedFor = {\n cpuUtilization: false,\n loadBalancingUtilization: false,\n customMetricUtilizations: true,\n };\n\n const metricTypes = Object.keys(multipleAllowedFor);\n\n this.targetTypesToDisplayMap = {\n GAUGE: 'Gauge',\n DELTA_PER_SECOND: 'Delta / second',\n DELTA_PER_MINUTE: 'Delta / minute',\n };\n\n this.metricScopeTypesToDisplayMap = {\n TIME_SERIES_PER_INSTANCE: 'Time series per instance',\n SINGLE_TIME_SERIES_PER_GROUP: 'Single time series per group',\n };\n\n this.scalingpolicyTypesToDisplayMap = {\n UTILIZATION_TARGET: 'Utilization target',\n SINGLE_INSTANCE_ASSIGNMENT: 'singleInstanceAssignment',\n };\n\n this.addMetric = (metricType) => {\n if (multipleAllowedFor[metricType]) {\n this.policy[metricType] = this.policy[metricType] || [];\n this.policy[metricType].push({});\n } else if (emptyOrUndefined(this.policy[metricType])) {\n this.policy[metricType] = { utilizationTarget: null };\n }\n };\n\n this.deleteMetric = (metricType, index) => {\n if (multipleAllowedFor[metricType]) {\n this.policy[metricType].splice(index, 1);\n } else {\n // sending an empty object to the API deletes the policy.\n this.policy[metricType] = {};\n }\n };\n\n this.showMetric = (metricType) => {\n const metric = this.policy[metricType];\n // should not show policy form if the policy is undefined or an empty object.\n return !emptyOrUndefined(metric);\n };\n\n this.isSingleTimeSeriesPerGroup = (scopeType, index) => {\n if (this.policy.customMetricUtilizations[index].metricExportScope === scopeType) return true;\n };\n\n this.isScalingPolicySingleInstanceAssignment = (policyType, index) => {\n if (this.policy.customMetricUtilizations[index].scalingpolicy === policyType) return true;\n };\n\n this.showNoMetricsWarning = () => {\n return _.every(\n metricTypes.map((type) => {\n return _.some([\n multipleAllowedFor[type] && !_.get(this.policy, [type, 'length']),\n emptyOrUndefined(this.policy[type]),\n ]);\n }),\n );\n };\n\n this.setUtilizationTargetFromDisplay = (metricType, value) => {\n this.policy[metricType].utilizationTarget = value / 100;\n };\n\n this.initializeTargetDisplay = (metricType) => {\n this[`${metricType}TargetDisplay`] = safeDecimalToPercent(this.policy[metricType].utilizationTarget);\n };\n\n function safeDecimalToPercent(value) {\n if (value === 0) {\n return 0;\n }\n return value ? Math.round(value * 100) : undefined;\n }\n\n function emptyOrUndefined(value) {\n return _.isEqual(value, {}) || _.isUndefined(value);\n }\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\nimport timezones from './standardTimezone.json';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.scalingSchedules.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT, []).component(\n 'gceAutoscalingPolicyScalingSchedules',\n {\n bindings: {\n policy: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./scalingSchedules.component.html'),\n controller: function () {\n this.$onInit = () => {\n const multipleAllowedFor = {\n scalingSchedules: true,\n };\n\n this.timezones = timezones;\n\n this.addSchedule = (scheduleType) => {\n if (multipleAllowedFor[scheduleType]) {\n this.policy[scheduleType] = this.policy[scheduleType] || [];\n this.policy[scheduleType].push({});\n } else if (emptyOrUndefined(this.policy[scheduleType])) {\n this.policy[scheduleType] = {};\n }\n };\n\n this.deleteSchedule = (scheduleType, index) => {\n if (multipleAllowedFor[scheduleType]) {\n this.policy[scheduleType].splice(index, 1);\n } else {\n // sending an empty object to the API deletes the policy.\n this.policy[scheduleType] = {};\n }\n };\n\n this.selectTimezone = (timezone, index) => {\n const { scalingSchedules } = this.policy;\n const schedule = scalingSchedules[index];\n scalingSchedules[index] = { ...schedule, timezone };\n\n this.updatePolicy({\n ...this.policy,\n scalingSchedules: [...scalingSchedules],\n });\n };\n\n function emptyOrUndefined(value) {\n return _.isEqual(value, {}) || _.isUndefined(value);\n }\n };\n },\n },\n);\n","import { module } from 'angular';\nimport { chain } from 'lodash';\nimport React from 'react';\nimport type { AutocompleteResult, Option } from 'react-select';\nimport { Async } from 'react-select';\nimport { react2angular } from 'react2angular';\nimport { withErrorBoundary } from '@spinnaker/core';\n\ninterface ITimezoneSelectProps {\n availableTimezones: string[];\n selectedTimezone: string;\n selectTimezone: (timezone: string, target?: any) => void;\n target?: any;\n}\n\nexport class TimezoneSelect extends React.Component<ITimezoneSelectProps> {\n private loadOptions = (inputValue: string): Promise<AutocompleteResult<string>> => {\n return new Promise((resolve) => {\n if (!inputValue || inputValue.length < 3) {\n resolve({\n options: [],\n complete: false,\n });\n } else {\n const filteredOptions = chain(this.props.availableTimezones)\n .filter((i) => i.toLowerCase().includes(inputValue))\n .map((i) => ({ value: i, label: i }))\n .value();\n resolve({\n options: filteredOptions,\n complete: false,\n });\n }\n });\n };\n\n public render() {\n return (\n <Async\n cache={null}\n clearable={false}\n ignoreAccents={false}\n loadOptions={this.loadOptions}\n onChange={(selected: Option<string>) => this.props.selectTimezone(selected.value, this.props.target)}\n placeholder=\"Type at least 3 characters to search for an timezone...\"\n searchPromptText=\"Type at least 3 characters to search for an timezone...\"\n value={{ value: this.props.selectedTimezone, label: this.props.selectedTimezone }}\n required={true}\n />\n );\n }\n}\n\nexport const GCE_TIMEZONE_SELECT = 'spinnaker.gce.timezoneSelect';\nmodule(GCE_TIMEZONE_SELECT, []).component(\n 'gceTimezoneSelect',\n react2angular(withErrorBoundary(TimezoneSelect, 'gceTimezoneSelect'), [\n 'availableTimezones',\n 'selectedTimezone',\n 'selectTimezone',\n 'target',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport { defaults } from 'lodash';\n\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../loadBalancer/httpLoadBalancerUtils.service';\n\nexport const GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.gce.serverGroup.transformer';\nexport const name = GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER, [GCE_HTTP_LOAD_BALANCER_UTILS]).factory(\n 'gceServerGroupTransformer',\n [\n 'gceHttpLoadBalancerUtils',\n function (gceHttpLoadBalancerUtils) {\n function normalizeServerGroup(serverGroup, application) {\n return application\n .getDataSource('loadBalancers')\n .ready()\n .then(() => {\n if (serverGroup.loadBalancers) {\n // At this point, the HTTP(S) load balancers have been normalized (listener names mapped to URL map names).\n // Our server groups' lists of load balancer names still need to make this mapping.\n serverGroup.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n serverGroup.loadBalancers,\n serverGroup.account,\n application.getDataSource('loadBalancers').data,\n );\n }\n return serverGroup;\n });\n }\n\n function convertServerGroupCommandToDeployConfiguration(base) {\n const truncatedZones = base.backingData.filtered.truncatedZones;\n\n // use defaults to avoid copying the backingData, which is huge and expensive to copy over\n const command = defaults({ backingData: [], viewState: [] }, base);\n if (base.viewState.mode !== 'clone') {\n delete command.source;\n }\n // We took this approach to avoid a breaking change to existing pipelines.\n command.disableTraffic = !command.enableTraffic;\n command.cloudProvider = 'gce';\n command.availabilityZones = {};\n command.availabilityZones[command.region] = base.zone ? [base.zone] : truncatedZones;\n command.account = command.credentials;\n delete command.viewState;\n delete command.backingData;\n delete command.selectedProvider;\n delete command.implicitSecurityGroups;\n delete command.enableTraffic;\n delete command.providerType;\n delete command.enableAutoHealing;\n\n return command;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration: convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup: normalizeServerGroup,\n };\n },\n ],\n);\n","import type { IGceHealthCheck, IGceHealthCheckKind } from '../domain';\n\nexport interface IGceHealthCheckOption {\n displayName: string;\n kind: IGceHealthCheckKind;\n name: string;\n selfLink: string;\n}\n\nexport function parseHealthCheckUrl(url: string): { healthCheckName: string; healthCheckKind: IGceHealthCheckKind } {\n const healthCheckPathParts = url.split('/');\n if (healthCheckPathParts.length < 2) {\n throw new Error(`Health check url ${url} missing expected segments.`);\n }\n const healthCheckName = healthCheckPathParts[healthCheckPathParts.length - 1];\n const healthCheckKind = healthCheckPathParts[healthCheckPathParts.length - 2].slice(0, -1);\n return {\n healthCheckName,\n healthCheckKind: healthCheckKind as IGceHealthCheckKind,\n };\n}\n\nexport function getHealthCheckOptions(healthChecks: IGceHealthCheck[]): IGceHealthCheckOption[] {\n const duplicateNames = getDuplicateHealthCheckNames(healthChecks);\n return healthChecks.map((hc) => {\n const isNameDupe = duplicateNames.has(hc.name);\n return {\n displayName: isNameDupe ? `${hc.name} (${hc.kind})` : hc.name,\n kind: hc.kind,\n name: hc.name,\n selfLink: hc.selfLink,\n };\n });\n}\n\nexport function getDuplicateHealthCheckNames(healthChecks: IGceHealthCheck[]): Set<string> {\n const allNames = new Set<string>();\n const duplicateNames = new Set<string>();\n healthChecks.forEach((hc) => {\n if (allNames.has(hc.name)) {\n duplicateNames.add(hc.name);\n } else {\n allNames.add(hc.name);\n }\n });\n return duplicateNames;\n}\n","import { get, intersectionBy, isFinite } from 'lodash';\n\nexport interface IGceAcceleratorTypeRaw {\n name: string;\n description: string;\n maximumCardsPerInstance: number;\n}\n\nexport interface IGceAcceleratorType extends IGceAcceleratorTypeRaw {\n availableCardCounts: number[];\n}\n\ninterface IZoneToAcceleratorTypesMap {\n [zone: string]: IGceAcceleratorTypeRaw[];\n}\n\nexport interface IGceAcceleratorCommand {\n backingData: any;\n credentials: string;\n distributionPolicy: { zones: string[]; targetShape?: string };\n regional: boolean;\n selectZones: boolean;\n zone: string;\n}\n\nexport class GceAcceleratorService {\n public static getAvailableAccelerators({\n backingData,\n credentials,\n distributionPolicy,\n regional,\n selectZones,\n zone,\n }: IGceAcceleratorCommand): IGceAcceleratorType[] {\n const acceleratorMap = this.getZoneToAcceleratorTypesMap(backingData, credentials);\n\n if (zone && !regional) {\n return this.getAcceleratorTypesForZone(acceleratorMap, zone);\n }\n\n if (regional && selectZones) {\n const zones = get(distributionPolicy, 'zones', []);\n const allZonesAcceleratorTypes = zones.map((z) => this.getAcceleratorTypesForZone(acceleratorMap, z));\n return intersectionBy.apply(null, [...allZonesAcceleratorTypes, 'name']);\n }\n\n return [];\n }\n\n private static getZoneToAcceleratorTypesMap(backingData: any, credentials: string): IZoneToAcceleratorTypesMap {\n return get(backingData, ['credentialsKeyedByAccount', credentials, 'zoneToAcceleratorTypesMap'], {});\n }\n\n private static getAcceleratorTypesForZone(\n acceleratorMap: IZoneToAcceleratorTypesMap,\n zone: string,\n ): IGceAcceleratorType[] {\n return get(acceleratorMap, [zone, 'acceleratorTypes', 'acceleratorTypes'], []).map((a) => {\n return {\n ...a,\n availableCardCounts: this.getAvailableCardCounts(a),\n };\n });\n }\n\n private static getAvailableCardCounts(accelerator: IGceAcceleratorTypeRaw): number[] {\n const maxCards = isFinite(accelerator.maximumCardsPerInstance) ? accelerator.maximumCardsPerInstance : 4;\n const availableCardCounts = [];\n for (let i = 1; i <= maxCards; i *= 2) {\n availableCardCounts.push(i);\n }\n return availableCardCounts;\n }\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels } from '@spinnaker/core';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE =\n 'spinnaker.deck.gce.tagManager.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE, []).factory('gceTagManager', function () {\n const resetKeys = ['command', 'securityGroups', 'securityGroupObjectsKeyedByTag', 'securityGroupObjectsKeyedById'];\n\n this.reset = () => {\n resetKeys.forEach((key) => delete this[key]);\n };\n\n this.register = (command) => {\n this.command = command;\n const { credentials, backingData } = command;\n if (backingData.securityGroups[credentials] !== undefined) {\n this.securityGroupObjects = _.cloneDeep(backingData.securityGroups[credentials].gce.global);\n\n initializeSecurityGroupObjects(this.securityGroupObjects, command.tags);\n\n const { byTag, bySecurityGroupId } = groupSecurityGroupObjects(this.securityGroupObjects);\n this.securityGroupObjectsKeyedByTag = byTag;\n this.securityGroupObjectsKeyedById = bySecurityGroupId;\n }\n\n if (!command.securityGroups) {\n command.securityGroups = this.inferSecurityGroupIdsFromTags(command.tags);\n }\n };\n\n this.inferSecurityGroupIdsFromTags = (commandTags = []) => {\n return _.chain(commandTags)\n .map((t) => this.securityGroupObjectsKeyedByTag[t.value])\n .flatten()\n .compact()\n .filter((sg) => sg.network === this.command.network)\n .map('id')\n .uniq()\n .value();\n };\n\n const initializeSecurityGroupObjects = (securityGroupObjects, commandTags = []) => {\n securityGroupObjects.forEach((sg) => {\n // Raw target tags look like '[tag-a, tag-b]'.\n const rawTags = sg.targetTags;\n sg.tagsArray = rawTags ? rawTags.substring(1, rawTags.length - 1).split(', ') : [];\n\n sg.selectedTags = commandTags\n ? _.intersection(\n commandTags.map((t) => t.value),\n sg.tagsArray,\n )\n : [];\n });\n };\n\n const groupSecurityGroupObjects = (securityGroupObjects) => {\n return securityGroupObjects.reduce(\n (groupings, sg) => {\n const { bySecurityGroupId } = groupings;\n bySecurityGroupId[sg.id] = sg;\n\n return sg.tagsArray.reduce((groupings, tag) => {\n const { byTag } = groupings;\n if (!byTag[tag]) {\n byTag[tag] = [];\n }\n byTag[tag].push(sg);\n\n return groupings;\n }, groupings);\n },\n { byTag: {}, bySecurityGroupId: {} },\n );\n };\n\n this.inferSelectedSecurityGroupFromTag = _.debounce((tagName) => {\n let securityGroupObjectsWithTag = this.securityGroupObjectsKeyedByTag[tagName];\n const c = this.command;\n\n if (securityGroupObjectsWithTag) {\n securityGroupObjectsWithTag = _.filter(securityGroupObjectsWithTag, (sg) => sg.network === this.command.network);\n }\n\n if (securityGroupObjectsWithTag) {\n updateSelectedTagsOnSecurityGroupObjects(securityGroupObjectsWithTag, tagName);\n c.securityGroups = _.map(\n updateSelectedSecurityGroups(getSecurityGroupObjectsFromIds(c.securityGroups), securityGroupObjectsWithTag),\n 'id',\n );\n }\n\n // If you pause while typing \"tag-a,\" but you really want to add \"tag-abc,\"\n // make sure you remove \"tag-a\".\n this.updateSelectedTags();\n }, 100);\n\n this.updateSelectedTags = () => {\n const c = this.command;\n const tags = c.tags.map((t) => t.value);\n\n getSecurityGroupObjectsFromIds(c.securityGroups).forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = _.intersection(sg.selectedTags, tags);\n }\n\n if (!_.get(sg, 'selectedTags.length')) {\n c.securityGroups = _.without(c.securityGroups, sg.id);\n }\n });\n };\n\n this.addTag = (tagName) => {\n const c = this.command;\n const tags = c.tags;\n let securityGroupObjectsWithTag = this.securityGroupObjectsKeyedByTag[tagName];\n\n if (securityGroupObjectsWithTag) {\n securityGroupObjectsWithTag = _.filter(securityGroupObjectsWithTag, (sg) => sg.network === this.command.network);\n }\n\n if (\n !_.includes(\n tags.map((t) => t.value),\n tagName,\n )\n ) {\n tags.push({ value: tagName });\n }\n\n if (securityGroupObjectsWithTag) {\n updateSelectedTagsOnSecurityGroupObjects(securityGroupObjectsWithTag, tagName);\n c.securityGroups = _.map(\n updateSelectedSecurityGroups(getSecurityGroupObjectsFromIds(c.securityGroups), securityGroupObjectsWithTag),\n 'id',\n );\n }\n };\n\n const getSecurityGroupObjectsFromIds = (ids) => ids.map((id) => this.securityGroupObjectsKeyedById[id]);\n\n const updateSelectedTagsOnSecurityGroupObjects = (securityGroupObjects, newTag) => {\n securityGroupObjects.forEach((sg) => {\n sg.selectedTags = _.chain(sg.selectedTags || [])\n .concat([newTag])\n .uniq()\n .value();\n });\n };\n\n const updateSelectedSecurityGroups = (oldGroups, newGroups) => {\n return _.chain(oldGroups).concat(newGroups).uniq().value();\n };\n\n this.removeTag = (tagName) => {\n const c = this.command;\n const securityGroupIds = c.securityGroups || [];\n const securityGroupObjects = getSecurityGroupObjectsFromIds(securityGroupIds);\n\n securityGroupObjects.forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = sg.selectedTags.filter((tag) => tag !== tagName);\n }\n });\n\n c.tags = c.tags.filter((tag) => tag.value !== tagName);\n };\n\n this.removeSecurityGroup = (securityGroupId) => {\n const securityGroupObject = this.securityGroupObjectsKeyedById[securityGroupId];\n const tagsToRemove = securityGroupObject.selectedTags;\n const c = this.command;\n\n getSecurityGroupObjectsFromIds(c.securityGroups).forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = _.difference(sg.selectedTags, tagsToRemove);\n }\n });\n\n securityGroupObject.selectedTags = [];\n c.tags = _.chain(c.tags)\n .map((t) => t.value)\n .difference(tagsToRemove)\n .map((t) => ({ value: t }))\n .value();\n };\n\n this.getToolTipContent = (tagName) => {\n const groups = _.get(this, ['securityGroupObjectsKeyedByTag', tagName]);\n const groupIds = groups ? groups.filter((sg) => sg.network === this.command.network).map((sg) => sg.id) : [];\n\n return `This tag associates this server group with ${\n groupIds.length > 1 ? FirewallLabels.get('firewalls') : FirewallLabels.get('firewall')\n }\n <em>${groupIds.join(', ')}</em>.`;\n };\n\n this.showToolTip = (tagName) => {\n return !!_.get(this, ['securityGroupObjectsKeyedByTag', tagName]);\n };\n\n return this;\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n NetworkReader,\n SECURITY_GROUP_READER,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { GCEProviderSettings } from '../../gce.settings';\nimport { GCE_HEALTH_CHECK_READER } from '../../healthCheck/healthCheck.read.service';\nimport { getHealthCheckOptions } from '../../healthCheck/healthCheckUtils';\nimport { GceImageReader } from '../../image';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE } from '../../instance/gceInstanceType.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../loadBalancer/httpLoadBalancerUtils.service';\nimport { LOAD_BALANCER_SET_TRANSFORMER } from '../../loadBalancer/loadBalancer.setTransformer';\nimport { GceAcceleratorService } from './wizard/advancedSettings/gceAccelerator.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './wizard/securityGroups/tagManager.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.serverGroup.configure.gce.configuration.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [\n LOAD_BALANCER_SET_TRANSFORMER,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GCE_HEALTH_CHECK_READER,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .factory('gceServerGroupConfigurationService', [\n 'securityGroupReader',\n 'gceInstanceTypeService',\n 'cacheInitializer',\n '$q',\n 'loadBalancerReader',\n 'gceCustomInstanceBuilderService',\n 'gceHttpLoadBalancerUtils',\n 'gceHealthCheckReader',\n 'gceTagManager',\n 'gceLoadBalancerSetTransformer',\n function (\n securityGroupReader,\n gceInstanceTypeService,\n cacheInitializer,\n $q,\n loadBalancerReader,\n gceCustomInstanceBuilderService,\n gceHttpLoadBalancerUtils,\n gceHealthCheckReader,\n gceTagManager,\n gceLoadBalancerSetTransformer,\n ) {\n const persistentDiskTypes = ['pd-standard', 'pd-ssd', 'hyperdisk-balanced'];\n const authScopes = [\n 'cloud-platform',\n 'userinfo.email',\n 'compute.readonly',\n 'compute',\n 'cloud.useraccounts.readonly',\n 'cloud.useraccounts',\n 'devstorage.read_only',\n 'devstorage.write_only',\n 'devstorage.full_control',\n 'taskqueue',\n 'bigquery',\n 'sqlservice.admin',\n 'datastore',\n 'logging.write',\n 'logging.read',\n 'logging.admin',\n 'monitoring.write',\n 'monitoring.read',\n 'monitoring',\n 'bigtable.data.readonly',\n 'bigtable.data',\n 'bigtable.admin',\n 'bigtable.admin.table',\n ];\n\n function configureCommand(application, command) {\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('gce'),\n securityGroupReader.getAllSecurityGroups(),\n NetworkReader.listNetworksByProvider('gce'),\n SubnetReader.listSubnetsByProvider('gce'),\n loadBalancerReader.listLoadBalancers('gce'),\n loadAllImages(command.credentials),\n gceInstanceTypeService.getAllTypesByRegion(),\n $q.when(angular.copy(persistentDiskTypes)),\n $q.when(angular.copy(authScopes)),\n gceHealthCheckReader.listHealthChecks(),\n AccountService.listAccounts('gce'),\n ])\n .then(function ([\n credentialsKeyedByAccount,\n securityGroups,\n networks,\n subnets,\n loadBalancers,\n allImages,\n instanceTypes,\n persistentDiskTypes,\n authScopes,\n healthChecks,\n accounts,\n ]) {\n const backingData = {\n credentialsKeyedByAccount,\n securityGroups,\n networks,\n subnets,\n loadBalancers,\n allImages,\n instanceTypes,\n persistentDiskTypes,\n authScopes,\n healthChecks,\n accounts,\n };\n let securityGroupReloader = $q.when(null);\n let networkReloader = $q.when(null);\n let healthCheckReloader = $q.when(null);\n backingData.filtered = {};\n backingData.distributionPolicyTargetShapes = getDistributionPolicyTargetShapes();\n command.backingData = backingData;\n configureImages(command);\n\n if (command.securityGroups && command.securityGroups.length) {\n // Verify all firewalls are accounted for; otherwise, try refreshing firewalls cache.\n const securityGroupIds = _.map(getSecurityGroups(command), 'id');\n if (_.intersection(command.securityGroups, securityGroupIds).length < command.securityGroups.length) {\n securityGroupReloader = refreshSecurityGroups(command, true);\n }\n }\n if (command.network) {\n // Verify network is accounted for; otherwise, try refreshing networks cache.\n const networkNames = getNetworkNames(command);\n if (!networkNames.includes(command.network)) {\n networkReloader = refreshNetworks(command);\n }\n }\n\n // eslint-disable-next-line no-console\n if (command.autoScalingPolicy) {\n command.enableAutoScaling = true;\n }\n\n if (command.autoHealingPolicy) {\n command.enableAutoHealing = true;\n }\n if (_.has(command, 'autoHealingPolicy.healthCheck')) {\n // Verify health check is accounted for; otherwise, try refreshing health checks cache.\n const healthChecks = getHealthChecks(command);\n if (!_.chain(healthChecks).map('selfLink').includes(command.autoHealingPolicy.healthCheckUrl).value()) {\n healthCheckReloader = refreshHealthChecks(command, true);\n }\n }\n\n return $q.all([securityGroupReloader, networkReloader, healthCheckReloader]).then(() => {\n gceTagManager.register(command);\n attachEventHandlers(command);\n });\n });\n }\n\n function getDistributionPolicyTargetShapes() {\n return ['ANY', 'EVEN'];\n }\n\n function configureDistributionPolicyTargetShape(command) {\n const accountDetails = command.backingData.credentialsKeyedByAccount[command.credentials];\n if (!command.distributionPolicy.targetShape) {\n command.distributionPolicy.targetShape = 'EVEN';\n }\n }\n\n function loadAllImages(account) {\n return GceImageReader.findImages({\n account: account,\n provider: 'gce',\n q: '*',\n });\n }\n\n function configureInstanceTypes(command) {\n const result = { dirty: {} };\n if (command.region) {\n const results = [result.dirty];\n\n results.push(configureCustomInstanceTypes(command).dirty);\n results.push(configureStandardInstanceTypes(command).dirty);\n\n angular.extend(...results);\n } else {\n command.backingData.filtered.instanceTypes = [];\n }\n return result;\n }\n\n function configureCpuPlatforms(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n const locationToCpuPlatformsMap =\n command.backingData.credentialsKeyedByAccount[command.credentials].locationToCpuPlatformsMap;\n\n filteredData.cpuPlatforms = ['(Automatic)'];\n\n const location = command.regional ? command.region : command.zone;\n\n if (_.has(locationToCpuPlatformsMap, location)) {\n filteredData.cpuPlatforms = _.concat(filteredData.cpuPlatforms, locationToCpuPlatformsMap[location]);\n }\n\n if (!_.includes(filteredData.cpuPlatforms, command.minCpuPlatform)) {\n delete command.minCpuPlatform;\n result.dirty.minCpuPlatform = true;\n }\n return result;\n }\n\n function configureStandardInstanceTypes(command) {\n const c = command;\n const result = { dirty: {} };\n\n const locations = c.regional ? c.distributionPolicy.zones : [c.zone];\n const { credentialsKeyedByAccount } = c.backingData;\n const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];\n\n if (locations.every((l) => !l)) {\n return result;\n }\n\n let filtered = gceInstanceTypeService.getAvailableTypesForLocations(locationToInstanceTypesMap, locations);\n\n filtered = sortInstanceTypes(filtered);\n const instanceType = c.instanceType;\n if (_.every([instanceType, !_.includes(instanceType, 'custom-'), !_.includes(filtered, instanceType)])) {\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n c.backingData.filtered.instanceTypes = filtered;\n return result;\n }\n\n function configureCustomInstanceTypes(command) {\n const c = command;\n const result = { dirty: {} };\n let vCpuCount = _.get(c, 'viewState.customInstance.vCpuCount');\n const instanceFamily = _.get(c, 'viewState.customInstance.instanceFamily');\n const memory = _.get(c, 'viewState.customInstance.memory');\n const extendedMemory = _.get(c, 'viewState.customInstance.extendedMemory');\n const { zone, regional, region } = c;\n const { locationToInstanceTypesMap } = c.backingData.credentialsKeyedByAccount[c.credentials];\n const location = regional ? region : zone;\n\n if (!location) {\n return result;\n }\n\n if (zone || regional) {\n _.set(\n c,\n 'backingData.customInstanceTypes.vCpuList',\n gceCustomInstanceBuilderService.generateValidVCpuListForLocation(location, locationToInstanceTypesMap),\n );\n }\n\n // initializes vCpuCount so that memory selector will be populated.\n if (\n !vCpuCount ||\n !gceCustomInstanceBuilderService.vCpuCountForLocationIsValid(\n instanceFamily,\n vCpuCount,\n location,\n locationToInstanceTypesMap,\n )\n ) {\n vCpuCount = _.get(c, 'backingData.customInstanceTypes.vCpuList[0]');\n _.set(c, 'viewState.customInstance.vCpuCount', vCpuCount);\n }\n\n _.set(\n c,\n 'backingData.customInstanceTypes.memoryList',\n gceCustomInstanceBuilderService.generateValidMemoryListForVCpuCount(instanceFamily, vCpuCount),\n );\n\n if (\n _.every([\n memory,\n vCpuCount,\n !gceCustomInstanceBuilderService.memoryIsValid(instanceFamily, memory, vCpuCount, extendedMemory),\n ])\n ) {\n _.set(c, 'viewState.customInstance.memory', undefined);\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n\n _.set(\n c,\n 'backingData.customInstanceTypes.instanceFamilyList',\n gceCustomInstanceBuilderService.generateValidInstanceFamilyList(),\n );\n\n return result;\n }\n\n function configureAccelerators(command) {\n const result = { dirty: {} };\n const acceleratorTypes = GceAcceleratorService.getAvailableAccelerators(command);\n _.set(command, ['viewState', 'acceleratorTypes'], acceleratorTypes);\n result.dirty.acceleratorTypes = true;\n const chosenAccelerators = _.get(command, 'acceleratorConfigs', []);\n if (chosenAccelerators.length > 0) {\n command.acceleratorConfigs = chosenAccelerators.filter(\n (chosen) => !!acceleratorTypes.find((a) => a.name === chosen.acceleratorType),\n );\n if (command.acceleratorConfigs.length === 0) {\n delete command.acceleratorConfigs;\n }\n }\n return result;\n }\n\n // n1-standard-8 should come before n1-standard-16, so we must sort by the individual segments of the names.\n function sortInstanceTypes(instanceTypes) {\n const tokenizedInstanceTypes = _.map(instanceTypes, (instanceType) => {\n const tokens = instanceType.split('-');\n\n return {\n class: tokens[0],\n group: tokens[1],\n index: Number(tokens[2]) || 0,\n };\n });\n\n const sortedTokenizedInstanceTypes = _.sortBy(tokenizedInstanceTypes, ['class', 'group', 'index']);\n\n return _.map(sortedTokenizedInstanceTypes, (sortedTokenizedInstanceType) => {\n return (\n sortedTokenizedInstanceType.class +\n '-' +\n sortedTokenizedInstanceType.group +\n (sortedTokenizedInstanceType.index ? '-' + sortedTokenizedInstanceType.index : '')\n );\n });\n }\n\n function configureImages(command) {\n command.image = command.viewState.imageId;\n const result = { dirty: {} };\n if (command.credentials !== command.viewState.lastImageAccount) {\n command.viewState.lastImageAccount = command.credentials;\n if (!_.chain(command.backingData.allImages).find({ imageName: command.image }).value()) {\n command.image = null;\n result.dirty.imageName = true;\n }\n }\n return result;\n }\n\n function configureZones(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n const regions = command.backingData.credentialsKeyedByAccount[command.credentials].regions;\n if (_.isArray(regions)) {\n filteredData.zones = _.find(regions, { name: command.region }).zones;\n filteredData.truncatedZones = _.takeRight(filteredData.zones.sort(), 3);\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n filteredData.zones = regions[command.region];\n }\n if (!_.chain(filteredData.zones).includes(command.zone).value()) {\n delete command.zone;\n if (!command.regional) {\n result.dirty.zone = true;\n }\n }\n return result;\n }\n\n function getHealthChecks(command) {\n const matchingHealthChecks = _.filter(command.backingData.healthChecks, { account: command.credentials });\n return getHealthCheckOptions(matchingHealthChecks);\n }\n\n function configureHealthChecks(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n\n if (command.credentials === null) {\n return result;\n }\n\n filteredData.healthChecks = getHealthChecks(command);\n\n if (\n _.has(command, 'autoHealingPolicy.healthCheck') &&\n !_.chain(filteredData.healthChecks).map('selfLink').includes(command.autoHealingPolicy.healthCheckUrl).value()\n ) {\n delete command.autoHealingPolicy.healthCheck;\n result.dirty.autoHealingPolicy = true;\n } else {\n result.dirty.autoHealingPolicy = null;\n }\n\n return result;\n }\n\n function getLoadBalancers(command) {\n return _.chain(command.backingData.loadBalancers)\n .map('accounts')\n .flattenDeep()\n .filter({ name: command.credentials })\n .map('regions')\n .flattenDeep()\n .map('loadBalancers')\n .flattenDeep()\n .filter(_.curry(isRelevantLoadBalancer)(command))\n .uniq()\n .value();\n }\n\n function isRelevantLoadBalancer(command, loadBalancer) {\n return loadBalancer.region === command.region || loadBalancer.region === 'global';\n }\n\n function configureLoadBalancerOptions(command) {\n const results = { dirty: {} };\n const current = command.loadBalancers;\n const newLoadBalancerObjects = gceLoadBalancerSetTransformer.normalizeLoadBalancerSet(\n getLoadBalancers(command),\n );\n command.backingData.filtered.loadBalancerIndex = _.keyBy(newLoadBalancerObjects, 'name');\n command.backingData.filtered.loadBalancers = _.map(newLoadBalancerObjects, 'name');\n\n if (current && command.loadBalancers) {\n command.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n command.loadBalancers,\n command.credentials,\n newLoadBalancerObjects,\n );\n const matched = _.intersection(command.backingData.filtered.loadBalancers, command.loadBalancers);\n const removed = _.xor(matched, command.loadBalancers);\n command.loadBalancers = matched;\n configureBackendServiceOptions(command);\n\n if (removed.length) {\n results.dirty.loadBalancers = removed;\n }\n }\n return results;\n }\n\n function configureBackendServiceOptions(command) {\n /*\n a server group has a list of backend services, but there's no mapping from l7 -> backend service\n for the server group. this will not populate the wizard perfectly,\n but it is the best we can do with the given data.\n */\n\n const backendsFromMetadata = command.backendServiceMetadata;\n const lbIndex = command.backingData.filtered.loadBalancerIndex;\n\n const backendServices = command.loadBalancers.reduce((backendServices, lbName) => {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer(lbIndex[lbName])) {\n backendServices[lbName] = _.intersection(lbIndex[lbName].backendServices, backendsFromMetadata);\n }\n return backendServices;\n }, {});\n\n if (Object.keys(backendServices).length > 0) {\n command.backendServices = backendServices;\n }\n }\n\n function refreshLoadBalancers(command, skipCommandReconfiguration) {\n return loadBalancerReader.listLoadBalancers('gce').then(function (loadBalancers) {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n configureLoadBalancerOptions(command);\n }\n });\n }\n\n function refreshHealthChecks(command, skipCommandReconfiguration) {\n return cacheInitializer\n .refreshCache('healthChecks')\n .then(function () {\n return gceHealthCheckReader.listHealthChecks();\n })\n .then(function (healthChecks) {\n command.backingData.healthChecks = healthChecks;\n if (!skipCommandReconfiguration) {\n configureHealthChecks(command);\n }\n });\n }\n\n function configureSubnets(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n filteredData.subnets = _.chain(command.backingData.subnets)\n .filter({ account: command.credentials, network: command.network, region: command.region })\n .map('id')\n .value();\n\n if (!_.chain(filteredData.subnets).includes(command.subnet).value()) {\n command.subnet = '';\n result.dirty.subnet = true;\n }\n return result;\n }\n\n function getSecurityGroups(command) {\n let newSecurityGroups = command.backingData.securityGroups[command.credentials] || { gce: {} };\n newSecurityGroups = _.filter(newSecurityGroups.gce.global, function (securityGroup) {\n return securityGroup.network === command.network;\n });\n return _.chain(newSecurityGroups).sortBy('name').value();\n }\n\n function getXpnHostProjectIfAny(network) {\n if (network && network.includes('/')) {\n return network.split('/')[0] + '/';\n } else {\n return '';\n }\n }\n\n function configureSecurityGroupOptions(command) {\n const results = { dirty: {} };\n const currentOptions = command.backingData.filtered.securityGroups;\n const newSecurityGroups = getSecurityGroups(command);\n if (currentOptions && command.securityGroups) {\n // not initializing - we are actually changing groups\n const currentGroupNames = command.securityGroups.map(function (groupId) {\n const match = _.chain(currentOptions).find({ id: groupId }).value();\n return match ? match.id : groupId;\n });\n const matchedGroups = command.securityGroups\n .map(function (groupId) {\n const securityGroup = _.chain(currentOptions).find({ id: groupId }).value();\n return securityGroup ? securityGroup.id : null;\n })\n .map(function (groupName) {\n return _.chain(newSecurityGroups).find({ id: groupName }).value();\n })\n .filter(function (group) {\n return group;\n });\n command.securityGroups = _.map(matchedGroups, 'id');\n const removed = _.xor(currentGroupNames, command.securityGroups);\n if (removed.length) {\n results.dirty.securityGroups = removed;\n }\n }\n\n // Only include explicit firewall options in the pulldown list.\n command.backingData.filtered.securityGroups = _.filter(newSecurityGroups, function (securityGroup) {\n return !_.isEmpty(securityGroup.targetTags);\n });\n\n // Identify implicit firewalls so they can be optionally listed in a read-only state.\n command.implicitSecurityGroups = _.filter(newSecurityGroups, function (securityGroup) {\n return _.isEmpty(securityGroup.targetTags);\n });\n\n // Only include explicitly-selected firewalls in the body of the command.\n const xpnHostProject = getXpnHostProjectIfAny(command.network);\n const decoratedSecurityGroups = _.map(command.securityGroups, (sg) =>\n !sg.startsWith(xpnHostProject) ? xpnHostProject + sg : sg,\n );\n command.securityGroups = _.difference(decoratedSecurityGroups, _.map(command.implicitSecurityGroups, 'id'));\n\n return results;\n }\n\n function refreshSecurityGroups(command, skipCommandReconfiguration) {\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n function getNetworkNames(command) {\n return _.map(_.filter(command.backingData.networks, { account: command.credentials }), 'id');\n }\n\n function refreshNetworks(command) {\n NetworkReader.listNetworksByProvider('gce').then(function (gceNetworks) {\n command.backingData.networks = gceNetworks;\n });\n }\n\n function refreshInstanceTypes(command) {\n return cacheInitializer.refreshCache('instanceTypes').then(function () {\n return gceInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {\n command.backingData.instanceTypes = instanceTypes;\n configureInstanceTypes(command);\n });\n });\n }\n\n function attachEventHandlers(cmd) {\n cmd.regionalChanged = function regionalChanged(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n const defaults = GCEProviderSettings.defaults;\n if (command.regional) {\n command.zone = null;\n configureDistributionPolicyTargetShape(command);\n } else if (!command.zone) {\n if (command.region === defaults.region) {\n command.zone = defaults.zone;\n } else {\n command.zone = filteredData.zones[0];\n }\n\n angular.extend(result.dirty, configureZones(command).dirty);\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.regionChanged = function regionChanged(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n angular.extend(result.dirty, configureSubnets(command).dirty);\n if (command.region) {\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n angular.extend(result.dirty, configureZones(command).dirty);\n angular.extend(result.dirty, configureCpuPlatforms(command).dirty);\n // TODO: Internal Load Balancers also need to be filtered by network.\n angular.extend(result.dirty, configureLoadBalancerOptions(command).dirty);\n angular.extend(result.dirty, configureImages(command).dirty);\n } else {\n filteredData.zones = null;\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.credentialsChanged = function credentialsChanged(command) {\n const result = { dirty: {} };\n const backingData = command.backingData;\n if (command.credentials) {\n const regions = backingData.credentialsKeyedByAccount[command.credentials].regions;\n if (_.isArray(regions)) {\n backingData.filtered.regions = _.map(regions, 'name');\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n backingData.filtered.regions = _.keys(regions);\n }\n if (!backingData.filtered.regions.includes(command.region)) {\n command.region = null;\n result.dirty.region = true;\n } else {\n angular.extend(result.dirty, command.regionChanged(command).dirty);\n }\n\n backingData.filtered.networks = getNetworkNames(command);\n if (!backingData.filtered.networks.includes(command.network)) {\n command.network = null;\n result.dirty.network = true;\n } else {\n angular.extend(result.dirty, command.networkChanged(command).dirty);\n }\n\n angular.extend(result.dirty, configureHealthChecks(command).dirty);\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n\n configureDistributionPolicyTargetShape(command);\n } else {\n command.region = null;\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n\n return result;\n };\n\n cmd.networkChanged = function networkChanged(command) {\n const result = { dirty: {} };\n\n command.viewState.autoCreateSubnets = _.chain(command.backingData.networks)\n .filter({ account: command.credentials, id: command.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n command.viewState.subnets = _.chain(command.backingData.networks)\n .filter({ account: command.credentials, id: command.network })\n .map('subnets')\n .head()\n .value();\n\n angular.extend(result.dirty, configureSubnets(command).dirty);\n angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);\n\n // TODO: Internal Load Balancers also need to be filtered by network.\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n\n return result;\n };\n\n cmd.zoneChanged = function zoneChanged(command) {\n const result = { dirty: {} };\n if (command.zone === undefined && !command.regional) {\n result.dirty.zone = true;\n }\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n angular.extend(command.viewState.dirty, configureInstanceTypes(command).dirty);\n angular.extend(command.viewState.dirty, configureCpuPlatforms(command).dirty);\n angular.extend(command.viewState.dirty, configureAccelerators(command).dirty);\n return result;\n };\n\n cmd.selectZonesChanged = function selectZonesChanged(command) {\n const result = { dirty: {} };\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n angular.extend(command.viewState.dirty, configureAccelerators(command).dirty);\n return result;\n };\n\n cmd.customInstanceChanged = function customInstanceChanged(command) {\n const result = { dirty: {} };\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(result, command.viewState.dirty, configureCustomInstanceTypes(command).dirty);\n\n return result;\n };\n }\n\n return {\n configureCommand,\n configureInstanceTypes,\n configureImages,\n configureZones,\n configureSubnets,\n configureLoadBalancerOptions,\n refreshLoadBalancers,\n refreshSecurityGroups,\n refreshInstanceTypes,\n refreshHealthChecks,\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { get, isEmpty } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceAcceleratorType } from './gceAccelerator.service';\n\ninterface IGceAcceleratorConfig {\n acceleratorType: string;\n acceleratorCount: number;\n}\n\nexport interface IGceAcceleratorConfigurerProps {\n acceleratorConfigs: IGceAcceleratorConfig[];\n availableAccelerators: IGceAcceleratorType[];\n regional: boolean;\n setAcceleratorConfigs: (configs: IGceAcceleratorConfig[]) => void;\n zone: string;\n}\n\nexport function GceAcceleratorConfigurer({\n acceleratorConfigs = [],\n availableAccelerators = [],\n regional,\n setAcceleratorConfigs,\n zone,\n}: IGceAcceleratorConfigurerProps) {\n const addAccelerator = (): void => {\n if (isEmpty(availableAccelerators)) {\n return;\n }\n setAcceleratorConfigs(\n acceleratorConfigs.concat([\n {\n acceleratorType: availableAccelerators[0].name,\n acceleratorCount: 1,\n },\n ]),\n );\n };\n\n const removeAccelerator = (indexToRemove: number): void => {\n setAcceleratorConfigs(\n acceleratorConfigs.filter((_config, index) => {\n return indexToRemove !== index;\n }),\n );\n };\n\n const getTypeOptions = (): Array<Option<string>> => {\n return availableAccelerators.map(({ description, name }) => {\n return {\n label: description,\n value: name,\n };\n });\n };\n\n const getAvailableCardCounts = (acceleratorType: string): number[] => {\n const acceleratorConfig = availableAccelerators.find(({ name }) => name === acceleratorType);\n return get(acceleratorConfig, 'availableCardCounts', []);\n };\n\n const getCountOptions = (acceleratorType: string): Array<Option<number>> => {\n return getAvailableCardCounts(acceleratorType).map((count) => ({\n label: count.toString(),\n value: count,\n }));\n };\n\n const getNearestCount = (type: string, currentCount: number): number => {\n const availableCounts = getAvailableCardCounts(type);\n if (availableCounts.includes(currentCount)) {\n return currentCount;\n }\n return availableCounts.reduce((nearest, count) => {\n if (count > currentCount) {\n return nearest;\n }\n return count;\n }, 1);\n };\n\n const onTypeChange = (indexToUpdate: number, type: string): void => {\n setAcceleratorConfigs(\n acceleratorConfigs.map((config, index) => {\n if (indexToUpdate !== index) {\n return config;\n }\n return {\n acceleratorType: type,\n acceleratorCount: getNearestCount(type, config.acceleratorCount),\n };\n }),\n );\n };\n\n const onCountChange = (indexToUpdate: number, count: number) => {\n setAcceleratorConfigs(\n acceleratorConfigs.map((config, index) => {\n if (indexToUpdate !== index) {\n return config;\n }\n return {\n ...config,\n acceleratorCount: count,\n };\n }),\n );\n };\n\n return (\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n Accelerators <HelpField id=\"gce.serverGroup.accelerator\" />\n </div>\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style={{ width: '75%' }}>Type</th>\n <th style={{ width: '15%' }}>Count</th>\n <th />\n </tr>\n </thead>\n <tbody>\n {acceleratorConfigs.map(({ acceleratorType, acceleratorCount }, i) => (\n <tr key={i}>\n <td>\n <Select\n clearable={false}\n onChange={(option: Option<string>) => onTypeChange(i, option.value)}\n options={getTypeOptions()}\n value={acceleratorType}\n />\n </td>\n <td>\n <Select\n clearable={false}\n onChange={(option: Option<number>) => onCountChange(i, option.value)}\n options={getCountOptions(acceleratorType)}\n value={acceleratorCount}\n />\n </td>\n <td>\n <button className=\"btn btn-link\" onClick={() => removeAccelerator(i)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </button>\n </td>\n </tr>\n ))}\n {!isEmpty(acceleratorConfigs) && (\n <tr>\n <td colSpan={3}>\n Adding Accelerators places constraints on the instances that you can deploy. See\n <a href=\"https://cloud.google.com/compute/docs/gpus/#restrictions\" target=\"_blank\">\n {' '}\n the complete list of these restrictions\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n {!isEmpty(availableAccelerators) && (\n <tr>\n <td colSpan={3}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={addAccelerator}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add Accelerator\n </button>\n </td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && !regional && !zone && (\n <tr>\n <td colSpan={3}>\n A zone must be selected to configure accelerators. Please note: the set of available accelerator types\n are limited by zone. See{' '}\n <a href=\"https://cloud.google.com/compute/docs/gpus/#gpus-list\" target=\"_blank\">\n the complete list of types in each zone\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && !regional && zone && (\n <tr>\n <td colSpan={3}>There are no accelerators available in the currently selected zone.</td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && regional && (\n <tr>\n <td colSpan={3}>\n There are no accelerators available in all of the currently selected zone(s). Please explicitly select\n only zones that each support the accelerators you would like to configure. See{' '}\n <a href=\"https://cloud.google.com/compute/docs/gpus/#gpus-list\" target=\"_blank\">\n the complete list of types in each zone\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport const GCE_ACCELERATOR_CONFIGURER = 'spinnaker.gce.accelerator.component';\nmodule(GCE_ACCELERATOR_CONFIGURER, []).component(\n 'gceAcceleratorConfigurer',\n react2angular(withErrorBoundary(GceAcceleratorConfigurer, 'gceAcceleratorConfigurer'), [\n 'acceleratorConfigs',\n 'availableAccelerators',\n 'regional',\n 'setAcceleratorConfigs',\n 'zone',\n ]),\n);\n","import { module } from 'angular';\nimport UI_SELECT from 'ui-select';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from '../securityGroups/tagManager.service';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.advancedSettings.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE, [\n UI_SELECT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n])\n .directive('gceServerGroupAdvancedSettingsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./advancedSettings.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupAdvancedSettingsSelectorCtrl',\n };\n })\n .controller('gceServerGroupAdvancedSettingsSelectorCtrl', [\n '$scope',\n 'gceTagManager',\n function ($scope, gceTagManager) {\n this.addTag = () => {\n this.command.tags.push({});\n };\n\n this.removeTag = (index) => {\n this.command.tags.splice(index, 1);\n gceTagManager.updateSelectedTags();\n };\n\n this.setDisks = (disks) => {\n this.command.disks = disks;\n };\n\n this.inferSelectedSecurityGroupFromTag = gceTagManager.inferSelectedSecurityGroupFromTag;\n this.showToolTip = gceTagManager.showToolTip;\n this.getToolTipContent = gceTagManager.getToolTipContent;\n\n this.setPreemptible = () => {\n if (this.command.preemptible) {\n this.command.automaticRestart = false;\n this.command.onHostMaintenance = 'TERMINATE';\n } else {\n this.command.automaticRestart = true;\n this.command.onHostMaintenance = 'MIGRATE';\n }\n };\n\n this.setEnableVtpm = () => {\n if (!this.command.enableVtpm) {\n // Integrity monitoring requires vTPM to be enabled.\n this.command.enableIntegrityMonitoring = false;\n }\n };\n\n this.setAcceleratorConfigs = (configs) => {\n $scope.$apply(() => {\n this.command.acceleratorConfigs = configs;\n });\n };\n },\n ]);\n","import type { IComponentController, IComponentOptions, IScope } from 'angular';\nimport { module } from 'angular';\nimport { without } from 'lodash';\n\ninterface IGceDisk {\n type: string;\n sizeGb: number;\n sourceImage?: string;\n}\n\nclass GceDiskConfigurerController implements IComponentController {\n public localSSDCount: number;\n public persistentDisks: IGceDisk[];\n public isDefault: boolean;\n\n // From component bindings.\n public command: any;\n public disks: IGceDisk[];\n private updateDisks: (arg: { disks: IGceDisk[] }) => void;\n\n public static $inject = ['$scope'];\n constructor(public $scope: IScope) {}\n\n public $onInit(): void {\n this.setLocalSSDCount();\n this.setPersistentDisks();\n\n if (this.getLocalSSDDisks().length && !this.command?.viewState?.instanceTypeDetails?.storage?.localSSDSupported) {\n this.updateDisks({ disks: this.sortDisks(this.getPersistentDisks()) });\n }\n\n this.isDefault = !!this.command?.viewState?.instanceTypeDetails?.storage?.isDefault;\n }\n\n public $onChanges(): void {\n this.$onInit();\n }\n\n public handleLocalSSDCountChange(): void {\n // Handles invalid input.\n if (this.localSSDCount === undefined) {\n return;\n }\n\n let disks = this.getPersistentDisks();\n for (let i = 0; i < this.localSSDCount; i++) {\n disks = disks.concat([{ type: 'local-ssd', sizeGb: 375 }]);\n }\n\n disks = this.sortDisks(disks);\n this.updateDisks({ disks });\n }\n\n public handlePersistentDiskChange(): void {\n let disks = this.persistentDisks.concat(this.getLocalSSDDisks());\n disks = this.sortDisks(disks);\n this.updateDisks({ disks });\n }\n\n public handleImageChange = (imageName: string, target: IGceDisk) => {\n // called from a React component\n this.$scope.$apply(() => {\n target.sourceImage = imageName;\n this.handlePersistentDiskChange();\n });\n };\n\n public addPersistentDisk(): void {\n this.persistentDisks = this.persistentDisks.concat([{ type: 'pd-ssd', sizeGb: 10, sourceImage: null }]);\n this.handlePersistentDiskChange();\n }\n\n public removePersistentDisk(index: number): void {\n this.persistentDisks.splice(index, 1);\n this.handlePersistentDiskChange();\n }\n\n private setPersistentDisks(): void {\n this.persistentDisks = this.getPersistentDisks();\n }\n\n private setLocalSSDCount(): void {\n this.localSSDCount = this.getLocalSSDDisks().length;\n }\n\n private sortDisks(disks: IGceDisk[]): IGceDisk[] {\n const diskWithoutImage = disks.find(\n (disk) => (disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-')) && disk.sourceImage === undefined,\n );\n return [diskWithoutImage].concat(without(disks, diskWithoutImage));\n }\n\n private getLocalSSDDisks(): IGceDisk[] {\n return (this.command.disks || []).filter((disk: IGceDisk) => disk.type === 'local-ssd');\n }\n\n private getPersistentDisks(): IGceDisk[] {\n return (this.command.disks || []).filter(\n (disk: IGceDisk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n }\n}\n\nconst gceDiskConfigurer: IComponentOptions = {\n controller: GceDiskConfigurerController,\n bindings: { command: '<', disks: '<', updateDisks: '&' },\n template: `\n <ng-form name=\"diskConfigurer\">\n <div class=\"form-group\">\n <div class=\"col-md-5 sm-label-right\">\n <b>Number of Local SSD Disks</b>\n <help-field key=\"gce.instance.storage.localSSD\"></help-field>\n </div>\n <div class=\"col-md-2\">\n <input type=\"number\"\n class=\"form-control input-sm\"\n ng-model=\"$ctrl.localSSDCount\"\n ng-change=\"$ctrl.handleLocalSSDCountChange()\"\n required\n min=\"0\"\n max=\"{{$ctrl.command.viewState.instanceTypeDetails.storage.localSSDSupported ? 8 : 0}}\"\n ng-disabled=\"!$ctrl.command.viewState.instanceTypeDetails.storage.localSSDSupported\"/>\n </div>\n </div>\n <div class=\"form-group\">\n <div class=\"sm-label-left\" style=\"margin-bottom: 5px;\">Persistent Disks\n <span class=\"glyphicon glyphicon-warning-sign\"\n style=\"color: #EEBB3C;\"\n ng-if=\"$ctrl.isDefault && !diskConfigurer.$dirty\"\n uib-tooltip=\"This instance type does not have an explicitly configured persistent disk option and is using the\n default disk storage specified in settings.js.\"></span>\n </div>\n <table class=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style=\"width: 25%;\">Type</th>\n <th>Size (GB)</th>\n <th style=\"width: 50%;\">Image</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"disk in $ctrl.persistentDisks\">\n <td>\n <ui-select ng-model=\"disk.type\" class=\"form-control input-sm\" on-select=\"$ctrl.handlePersistentDiskChange()\" required>\n <ui-select-match placeholder=\"Select...\">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat=\"persistentDiskType in $ctrl.command.backingData.persistentDiskTypes | filter: $select.search\">\n <span ng-bind-html=\"persistentDiskType | highlight: $select.search\"></span>\n </ui-select-choices>\n </ui-select>\n </td>\n <td>\n <input type=\"number\"\n class=\"form-control input-sm\"\n ng-model=\"disk.sizeGb\"\n ng-change=\"$ctrl.handlePersistentDiskChange()\"\n required\n min=\"10\"/>\n </td>\n <td>\n <div ng-if=\"$index === 0\">\n <p class=\"small\" style=\"margin: 0;\" ng-if=\"$ctrl.command.viewState.mode === 'create' || $ctrl.command.viewState.mode === 'clone'\">\n This disk will use the image selected at the top of this dialogue.\n </p>\n <p class=\"small\" style=\"margin: 0;\" ng-if=\"$ctrl.command.viewState.mode === 'createPipeline' || $ctrl.command.viewState.mode === 'editPipeline'\">\n This disk will use the image inferred from this pipeline's execution context.\n </p>\n </div>\n <gce-image-select\n ng-if=\"$index > 0\"\n available-images=\"$ctrl.command.backingData.allImages\"\n selected-image=\"disk.sourceImage\"\n select-image=\"$ctrl.handleImageChange\"\n target=\"disk\"\n ></gce-image-select>\n </td>\n <td ng-if=\"$index > 0\">\n <a class=\"btn btn-link sm-label\" style=\"margin-top: 0;\" ng-click=\"$ctrl.removePersistentDisk($index)\">\n <span class=\"glyphicon glyphicon-trash\"></span>\n </a>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"4\">\n <button class=\"btn btn-block btn-sm add-new\" ng-click=\"$ctrl.addPersistentDisk()\">\n <span class=\"glyphicon glyphicon-plus-sign\"></span> Add New Persistent Disk\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n </ng-form>`,\n};\n\nexport const GCE_DISK_CONFIGURER = 'spinnaker.gce.diskConfigurer.component';\nmodule(GCE_DISK_CONFIGURER, []).component('gceDiskConfigurer', gceDiskConfigurer);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport { set } from 'lodash';\n\nimport type { IGceAutoHealingPolicy } from '../../../../domain/autoHealingPolicy';\nimport type { IGceHealthCheckOption } from '../../../../healthCheck/healthCheckUtils';\nimport { parseHealthCheckUrl } from '../../../../healthCheck/healthCheckUtils';\n\nclass GceAutoHealingPolicySelector implements IController {\n public healthChecks: string[];\n public autoHealingPolicy: IGceAutoHealingPolicy;\n public enabled: boolean;\n public viewState: { maxUnavailableMetric: 'percent' | 'fixed' };\n private setAutoHealingPolicy: Function;\n\n public $onInit(): void {\n if (this.autoHealingPolicy && this.autoHealingPolicy.maxUnavailable) {\n if (typeof this.autoHealingPolicy.maxUnavailable.fixed === 'number') {\n this.viewState = { maxUnavailableMetric: 'fixed' };\n } else if (typeof this.autoHealingPolicy.maxUnavailable.percent === 'number') {\n this.viewState = { maxUnavailableMetric: 'percent' };\n }\n }\n\n if (!this.autoHealingPolicy) {\n this.setAutoHealingPolicy({ autoHealingPolicy: { initialDelaySec: 300 } });\n }\n }\n\n public $onDestroy(): void {\n this.setAutoHealingPolicy({ autoHealingPolicy: null });\n }\n\n public manageMaxUnavailableMetric(selectedMetric: string): void {\n if (!selectedMetric) {\n // Clouddriver deletes maxUnavailable if maxUnavailable is an empty object.\n this.autoHealingPolicy.maxUnavailable = {};\n } else {\n const toDeleteKey = selectedMetric === 'percent' ? 'fixed' : 'percent';\n set(this.autoHealingPolicy, ['maxUnavailable', toDeleteKey], undefined);\n }\n }\n\n public onHealthCheckChange(_healthCheck: IGceHealthCheckOption, healthCheckUrl: string) {\n if (healthCheckUrl) {\n const { healthCheckName, healthCheckKind } = parseHealthCheckUrl(healthCheckUrl);\n this.autoHealingPolicy.healthCheck = healthCheckName;\n this.autoHealingPolicy.healthCheckKind = healthCheckKind;\n }\n }\n}\n\nconst gceAutoHealingPolicySelectorComponent: IComponentOptions = {\n bindings: {\n onHealthCheckRefresh: '&',\n setAutoHealingPolicy: '&',\n healthChecks: '<',\n autoHealingPolicy: '<',\n enabled: '<',\n labelColumns: '@?',\n },\n templateUrl: require('./autoHealingPolicySelector.component.html'),\n controller: GceAutoHealingPolicySelector,\n};\n\nexport const GCE_AUTOHEALING_POLICY_SELECTOR = 'spinnaker.gce.autoHealingPolicy.selector.component';\nmodule(GCE_AUTOHEALING_POLICY_SELECTOR, []).component(\n 'gceAutoHealingPolicySelector',\n gceAutoHealingPolicySelectorComponent,\n);\n","/* eslint-disable no-debugger */\nimport { IComponentOptions, module } from 'angular';\nimport { cloneDeep } from 'lodash';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\n\nimport './autoScalingPolicySelector.less';\n\nconst gceAutoScalingPolicySelectorComponent = {\n bindings: {\n policy: '<',\n enabled: '<',\n setAutoScalingPolicy: '&',\n autoscalingPolicy: '<',\n },\n templateUrl: require('./autoScalingPolicySelector.component.html'),\n controller: 'gceUpsertAutoscalingPolicyCtrl',\n};\n\nexport const GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT = 'spinnaker.gce.autoScalingPolicy.selector.component';\nmodule(GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT, [\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n])\n .controller('gceUpsertAutoscalingPolicyCtrl', [\n '$scope',\n function ($scope) {\n var vm = this;\n this.$onInit = function () {\n this.policy = cloneDeep({});\n this.setAutoScalingPolicy({ autoscalingPolicy: this.policy });\n\n this.updatePolicy = (updatedPolicy) => {\n $scope.$applyAsync(() => {\n this.policy = updatedPolicy;\n this.setAutoScalingPolicy({ autoscalingPolicy: this.policy });\n });\n };\n };\n },\n ])\n .component('gceAutoScalingPolicySelectorComponent', gceAutoScalingPolicySelectorComponent);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT =\n 'spinnaker.deck.gce.serverGroup.configure.advancedCapacitySelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT, []).component(\n 'gceServerGroupAdvancedCapacitySelector',\n {\n bindings: {\n command: '=',\n },\n templateUrl: require('./advancedCapacitySelector.component.html'),\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT =\n 'spinnaker.google.serverGroup.configure.wizard.simpleCapacity.selector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT, [])\n .component('gceServerGroupSimpleCapacitySelector', {\n templateUrl: require('./simpleCapacitySelector.component.html'),\n bindings: {\n command: '=',\n setSimpleCapacity: '=',\n },\n controller: 'gceServerGroupSimpleCapacitySelectorCtrl',\n })\n .controller('gceServerGroupSimpleCapacitySelectorCtrl', function () {\n this.setMinMax = (newVal) => {\n this.command.capacity.min = newVal;\n this.command.capacity.max = newVal;\n };\n });\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport { CheckboxInput, HelpField } from '@spinnaker/core';\nimport './customInstanceConfigurer.component.less';\n\nexport interface ICustomInstanceConfig {\n vCpuCount: number;\n memory: number;\n instanceFamily: string;\n extendedMemory: boolean;\n}\n\nexport interface ICustomInstanceConfigurerProps {\n vCpuList: number[];\n memoryList: number[];\n instanceFamilyList: string[];\n selectedVCpuCount: number;\n selectedMemory: number;\n selectedInstanceFamily: string;\n selectedExtendedMemory: boolean;\n onChange: (config: ICustomInstanceConfig) => void;\n}\n\nexport class CustomInstanceConfigurer extends React.Component<ICustomInstanceConfigurerProps> {\n public render() {\n const instanceFamilyOptions: Option[] = (this.props.instanceFamilyList || []).map((instanceFamily) => ({\n label: instanceFamily,\n value: instanceFamily,\n }));\n const vCpuOptions: Option[] = (this.props.vCpuList || []).map((vCpu) => ({ label: vCpu + '', value: vCpu }));\n const memoryOptions: Option[] = (this.props.memoryList || []).map((memory) => ({\n label: memory + '',\n value: memory,\n }));\n const selectedVCpuCountLabel = this.props.selectedVCpuCount ? this.props.selectedVCpuCount + '' : null;\n const selectedMemoryLabel = this.props.selectedMemory ? this.props.selectedMemory + '' : null;\n const selectedInstanceFamilyLabel = this.props.selectedInstanceFamily ? this.props.selectedInstanceFamily : null;\n\n return (\n <div>\n <div className=\"row\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Family </b>\n </div>\n <div className=\"col-md-3\">\n <Select\n options={instanceFamilyOptions}\n clearable={false}\n value={{ label: selectedInstanceFamilyLabel, value: this.props.selectedInstanceFamily }}\n onChange={this.handleInstanceFamilyChange}\n />\n </div>\n </div>\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Cores </b>\n <HelpField id=\"gce.instance.customInstance.cores\" />\n </div>\n <div className=\"col-md-3\">\n <Select\n options={vCpuOptions}\n clearable={false}\n value={{ label: selectedVCpuCountLabel, value: this.props.selectedVCpuCount }}\n onChange={this.handleVCpuChange}\n />\n </div>\n </div>\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Memory (Gb) </b>\n <HelpField id=\"gce.instance.customInstance.memory\" />\n </div>\n <div className=\"col-md-3\">\n {this.props.selectedExtendedMemory ? (\n <input\n type=\"number\"\n name=\"memory\"\n className=\"form-control\"\n value={this.props.selectedMemory}\n onChange={(event) => this.handleMemoryChangeCustom(event.target.value)}\n />\n ) : (\n <Select\n options={memoryOptions}\n clearable={false}\n value={{ label: selectedMemoryLabel, value: this.props.selectedMemory }}\n onChange={this.handleMemoryChange}\n />\n )}\n </div>\n </div>\n {this.props.selectedInstanceFamily !== 'E2' ? (\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\"></div>\n <div className=\"col-md-3\">\n <span className=\"gce-instance-build-custom-extended-memory-checkbox\">\n <CheckboxInput\n name=\"extendedMemory\"\n text=\"Extended Memory\"\n checked={this.props.selectedExtendedMemory}\n onChange={(event: { target: { checked: boolean } }) => {\n this.handleExtendedMemory(event.target.checked);\n }}\n />\n <div className=\"gce-instance-build-custom-extended-memory-checkbox-helptext\">\n <HelpField id=\"gce.instance.customInstance.extendedmemory\" />\n </div>\n </span>\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n private handleVCpuChange = (option: Option) => {\n const value = (option ? option.value : null) as number;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: value,\n memory: this.props.selectedMemory,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleMemoryChange = (option: Option) => {\n const value = (option ? option.value : null) as number;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: value,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleInstanceFamilyChange = (option: Option) => {\n const value = (option ? option.value : null) as string;\n this.props.onChange({\n instanceFamily: value,\n vCpuCount: this.props.selectedVCpuCount,\n memory: this.props.selectedMemory,\n extendedMemory: value === 'E2' ? false : this.props.selectedExtendedMemory,\n });\n };\n\n private handleMemoryChangeCustom = (val: string) => {\n const value = +val;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: value,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleExtendedMemory = (checked: boolean) => {\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: this.props.selectedMemory,\n extendedMemory: checked,\n });\n };\n}\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { CustomInstanceConfigurer } from './CustomInstanceConfigurer';\n\nexport const GCE_CUSTOM_INSTANCE_CONFIGURER = 'spinnaker.gce.customInstanceConfigurer';\nmodule(GCE_CUSTOM_INSTANCE_CONFIGURER, []).component(\n 'gceCustomInstanceConfigurer',\n react2angular(withErrorBoundary(CustomInstanceConfigurer, 'gceCustomInstanceConfigurer'), [\n 'vCpuList',\n 'instanceFamilyList',\n 'memoryList',\n 'selectedVCpuCount',\n 'selectedMemory',\n 'selectedInstanceFamily',\n 'selectedExtendedMemory',\n 'onChange',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\n\n// TODO(dpeach): this approach is unmaintainable because we\n// have to intercept ui-select event emitters to make it work.\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT =\n 'spinnaker.deck.gce.backendServiceSelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT, []).component(\n 'gceBackendServiceSelector',\n {\n bindings: {\n command: '=',\n loadBalancerName: '=',\n },\n templateUrl: require('./backendServiceSelector.component.html'),\n controller: [\n '$scope',\n function ($scope) {\n $scope.$on('$destroy', () => {\n if (this.command.backendServices) {\n delete this.command.backendServices[this.loadBalancerName];\n }\n });\n\n $scope.$on('uis:select', function (event) {\n event.preventDefault();\n });\n },\n ],\n },\n);\n","import * as angular from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT } from './backendServiceSelector.component';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT =\n 'spinnaker.deck.gce.elSevenOptionsGenerator.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT,\n ])\n .directive('gceElSevenOptionsGenerator', [\n '$compile',\n function ($compile) {\n const template = `<gce-backend-service-selector load-balancer-name=\"loadBalancerName\" command=\"command\">\n </gce-backend-service-selector>`;\n\n return {\n restrict: 'E',\n scope: {\n command: '=',\n loadBalancerName: '@',\n },\n link: function (scope, element) {\n const compiledTemplate = $compile(template)(scope);\n\n // Look up DOM to find container for selected load balancer.\n const listItem = angular.element(element).closest('.ui-select-match-item');\n\n // Drop service selector in between load balancers.\n listItem.after(compiledTemplate);\n\n scope.$on('$destroy', () => {\n // Remove selector if load balancer is removed.\n listItem.next().remove();\n });\n },\n };\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT } from './elSevenOptions/elSevenOptionsGenerator.component';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../../../loadBalancer/httpLoadBalancerUtils.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../../serverGroupConfiguration.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.loadBalancers.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE, [\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n ])\n .directive('gceServerGroupLoadBalancerSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./loadBalancerSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupLoadBalancerSelectorCtrl',\n };\n })\n .controller('gceServerGroupLoadBalancerSelectorCtrl', [\n 'gceHttpLoadBalancerUtils',\n function (gceHttpLoadBalancerUtils) {\n this.showLoadBalancingPolicy = () => {\n if (_.has(this, 'command.backingData.filtered.loadBalancerIndex')) {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n\n return (\n angular.isDefined(selected) &&\n _.some(selected, (s) => {\n return (\n index[s].loadBalancerType === 'HTTP' ||\n index[s].loadBalancerType === 'INTERNAL_MANAGED' ||\n index[s].loadBalancerType === 'SSL' ||\n index[s].loadBalancerType === 'TCP'\n );\n })\n );\n }\n };\n\n this.isHttpLoadBalancer = (lb) => gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb);\n },\n ]);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport { chain, get, has, intersection, set, without } from 'lodash';\n\nimport type { IGceBackendService, INamedPort } from '../../../../domain';\n\nimport './loadBalancingPolicySelector.component.less';\n\nclass GceLoadBalancingPolicySelectorController implements IController {\n public maxPort = 65535;\n public command: any;\n [key: string]: any;\n public globalBackendServices: IGceBackendService[];\n\n public static $inject = ['gceBackendServiceReader'];\n constructor(private gceBackendServiceReader: any) {}\n\n public setModel(propertyName: string, viewValue: number): void {\n set(this, propertyName, viewValue / 100);\n }\n\n public setView(propertyName: string, modelValue: number): void {\n this[propertyName] = this.decimalToPercent(modelValue);\n }\n\n public onBalancingModeChange(mode: string): void {\n const keys: string[] = ['maxUtilization', 'maxRatePerInstance', 'maxConnectionsPerInstance'];\n let toDelete: string[] = [];\n switch (mode) {\n case 'RATE':\n toDelete = without(keys, 'maxRatePerInstance');\n break;\n case 'UTILIZATION':\n toDelete = without(keys, 'maxUtilization');\n break;\n case 'CONNECTION':\n toDelete = without(keys, 'maxConnectionsPerInstance');\n break;\n default:\n break;\n }\n\n toDelete.forEach((key) => delete this.command.loadBalancingPolicy[key]);\n }\n\n public getBalancingModes(): string[] {\n let balancingModes: string[] = [];\n /*\n * Three cases:\n * - If we have only HTTP(S) load balancers, our balancing mode can be RATE or UTILIZATION.\n * - If we have only SSL/TCP load balancers, our balancing mode can be CONNECTION or UTILIZATION.\n * - If we have both, only UTILIZATION.\n * */\n if (has(this, 'command.backingData.filtered.loadBalancerIndex')) {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n\n const hasSsl = selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'SSL');\n const hasTcp = selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'TCP');\n const hasHttp = selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'HTTP');\n\n if ((hasSsl || hasTcp) && hasHttp) {\n balancingModes = ['UTILIZATION'];\n } else if (hasSsl || hasTcp) {\n balancingModes = ['CONNECTION', 'UTILIZATION'];\n } else {\n balancingModes = ['RATE', 'UTILIZATION'];\n }\n }\n\n if (!balancingModes.includes(get(this.command, 'loadBalancingPolicy.balancingMode') as string)) {\n set(this.command, 'loadBalancingPolicy.balancingMode', balancingModes[0]);\n }\n return balancingModes;\n }\n\n public $onInit(): void {\n this.gceBackendServiceReader.listBackendServices('globalBackendService').then((services: IGceBackendService[]) => {\n this.globalBackendServices = services;\n });\n }\n\n public $onDestroy(): void {\n delete this.command.loadBalancingPolicy;\n }\n\n public addNamedPort() {\n if (!get(this.command, 'loadBalancingPolicy.namedPorts')) {\n set(this.command, 'loadBalancingPolicy.namedPorts', []);\n }\n\n this.command.loadBalancingPolicy.namedPorts.push({ name: '', port: 80 });\n }\n\n public removeNamedPort(index: number) {\n this.command.loadBalancingPolicy.namedPorts.splice(index, 1);\n }\n\n public getPortNames(): string[] {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n const inUsePortNames = this.command.loadBalancingPolicy.namedPorts.map((namedPort: INamedPort) => namedPort.name);\n\n const getThem = (globalBackendServices: IGceBackendService[], loadBalancer: string): string[] => {\n switch (get(index[loadBalancer], 'loadBalancerType')) {\n case 'SSL':\n case 'TCP':\n case 'HTTP': {\n const lbBackendServices: string[] = get(index[loadBalancer], 'backendServices');\n const filteredBackendServices = globalBackendServices.filter((service: IGceBackendService) =>\n lbBackendServices.includes(service.name),\n );\n const portNames = filteredBackendServices.map((service: IGceBackendService) => service.portName);\n const portNameIntersection = intersection(portNames, inUsePortNames);\n return portNames.filter((portName) => !portNameIntersection.includes(portName));\n }\n default:\n return [];\n }\n };\n\n return chain(selected)\n .flatMap((lbName: string) => getThem(this.globalBackendServices, lbName))\n .uniq()\n .value();\n }\n\n private decimalToPercent(value: number): number {\n if (value === 0) {\n return 0;\n }\n return value ? Math.round(value * 100) : undefined;\n }\n}\n\nconst gceLoadBalancingPolicySelectorComponent: IComponentOptions = {\n bindings: {\n command: '=',\n },\n controller: GceLoadBalancingPolicySelectorController,\n templateUrl: require('./loadBalancingPolicySelector.component.html'),\n};\n\nexport const GCE_LOAD_BALANCING_POLICY_SELECTOR = 'spinnaker.gce.loadBalancingPolicy.selector.component';\n\nmodule(GCE_LOAD_BALANCING_POLICY_SELECTOR, []).component(\n 'gceLoadBalancingPolicySelector',\n gceLoadBalancingPolicySelectorComponent,\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE = 'spinnaker.google.networkSelectField.directive';\nexport const name = GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE, []).directive('gceNetworkSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./networkSelectField.directive.html'),\n scope: {\n networks: '=',\n component: '=',\n field: '@',\n account: '=',\n helpKey: '@',\n onChange: '&',\n labelColumns: '@',\n fieldColumns: '@',\n },\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE = 'spinnaker.google.subnet.subnetSelectField.directive';\nexport const name = GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE, []).directive('gceSubnetSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./subnetSelectField.directive.html'),\n scope: {\n subnets: '=',\n subnetPlaceholder: '=',\n autoCreateSubnets: '=',\n component: '=',\n field: '@',\n account: '=',\n region: '=',\n onChange: '&',\n labelColumns: '@',\n helpKey: '@',\n },\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport {\n ArtifactTypePatterns,\n excludeAllTypesExcept,\n ExpectedArtifactSelectorViewController,\n IMAGE_READER,\n NgGCEImageArtifactDelegate,\n} from '@spinnaker/core';\n\nimport { GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE } from '../../../../gceNetworkSelectField.directive';\nimport { GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE } from '../../../../gceRegionSelectField.directive';\nimport { GceImageReader } from '../../../../image';\nimport { GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE } from '../../../../subnet/subnetSelectField.directive';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER =\n 'spinnaker.google.serverGroup.configure.wizard.basicSettings.controller';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n IMAGE_READER,\n GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE,\n GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE,\n GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE,\n ])\n .controller('gceServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n function ($scope, $controller, $uibModalStack, $state) {\n function fetchImagesForAccount() {\n return observableFrom(\n GceImageReader.findImages({\n account: $scope.command.credentials,\n provider: $scope.command.selectedProvider,\n q: '*',\n }),\n );\n }\n\n const imageSearchResultsStream = new Subject();\n imageSearchResultsStream.pipe(switchMap(fetchImagesForAccount)).subscribe((images) => {\n $scope.command.backingData.allImages = images;\n });\n\n this.accountUpdated = () => {\n imageSearchResultsStream.next();\n };\n\n this.selectImage = (image) => {\n // called from a React component\n $scope.$apply(() => {\n $scope.command.image = image;\n });\n };\n\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: GceImageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n this.stackPattern = {\n test: function (stack) {\n const pattern = $scope.command.viewState.templatingEnabled ? /^([a-zA-Z0-9]*(\\${.+})*)*$/ : /^[a-zA-Z0-9]*$/;\n return pattern.test(stack);\n },\n };\n\n this.detailPattern = {\n test: function (detail) {\n const pattern = $scope.command.viewState.templatingEnabled\n ? /^([a-zA-Z0-9-]*(\\${.+})*)*$/\n : /^[a-zA-Z0-9-]*$/;\n return pattern.test(detail);\n },\n };\n\n this.getSubnetPlaceholder = () => {\n if (!$scope.command.region) {\n return '(Select an account)';\n } else if ($scope.command.viewState.autoCreateSubnets) {\n return '(Subnet will be automatically selected)';\n } else if ($scope.command.viewState.autoCreateSubnets === null) {\n return '(Subnets not supported)';\n } else {\n return null;\n }\n };\n\n this.imageSources = ['artifact', 'priorStage'];\n\n this.excludedImageArtifactTypes = excludeAllTypesExcept(ArtifactTypePatterns.CUSTOM_OBJECT);\n\n this.onImageArtifactEdited = (artifact) => {\n $scope.$applyAsync(() => {\n $scope.command.imageArtifactId = null;\n $scope.command.imageArtifact = artifact;\n });\n };\n\n this.onImageArtifactSelected = (expectedArtifact) => {\n this.onChangeImageArtifactId(expectedArtifact.id);\n };\n\n this.onChangeImageArtifactId = (artifactId) => {\n $scope.$applyAsync(() => {\n $scope.command.imageArtifactId = artifactId;\n $scope.command.imageArtifact = null;\n });\n };\n\n this.onImageArtifactAccountSelected = (accountName) => {\n $scope.$applyAsync(() => {\n $scope.command.imageAccountName = accountName;\n });\n };\n\n const gceImageDelegate = new NgGCEImageArtifactDelegate($scope);\n $scope.gceImageArtifact = {\n showCreateArtifactForm: false,\n delegate: gceImageDelegate,\n controller: new ExpectedArtifactSelectorViewController(gceImageDelegate),\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT =\n 'spinnaker.deck.gce.tagSelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n]).component('gceTagSelector', {\n bindings: {\n command: '=',\n securityGroupId: '=',\n },\n templateUrl: require('./tagSelector.component.html'),\n controller: [\n '$scope',\n 'gceTagManager',\n function ($scope, gceTagManager) {\n this.securityGroup = gceTagManager.securityGroupObjectsKeyedById[this.securityGroupId];\n this.onSelect = gceTagManager.addTag;\n this.onRemove = gceTagManager.removeTag;\n\n $scope.$on('uis:select', function (event) {\n event.preventDefault();\n });\n },\n ],\n});\n","import * as angular from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT } from './tagSelector.component';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT =\n 'spinnaker.deck.gce.tagSelectorGenerator.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .directive('gceTagSelectorGenerator', [\n '$compile',\n 'gceTagManager',\n function ($compile, gceTagManager) {\n const template = `<gce-tag-selector security-group-id=\"securityGroupId\" command=\"command\">\n </gce-tag-selector>`;\n\n return {\n restrict: 'E',\n scope: {\n command: '=',\n securityGroupId: '=',\n },\n link: function (scope, element) {\n const { securityGroupId } = scope;\n const securityGroupObject = gceTagManager.securityGroupObjectsKeyedById[securityGroupId];\n\n if (securityGroupObject && securityGroupObject.tagsArray.length < 2) {\n securityGroupObject.tagsArray.forEach((tagName) => gceTagManager.addTag(tagName));\n return;\n }\n\n const compiledTemplate = $compile(template)(scope);\n\n angular.element(element).closest('.ui-select-match-item').after(compiledTemplate);\n },\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches } from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../../serverGroupConfiguration.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT } from './tagSelectorGenerator.component';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.securityGroups.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE, [\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n])\n .directive('gceServerGroupSecurityGroupSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./securityGroupSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupSecurityGroupsSelectorCtrl',\n };\n })\n .controller('gceServerGroupSecurityGroupsSelectorCtrl', [\n 'gceServerGroupConfigurationService',\n 'gceTagManager',\n function (gceServerGroupConfigurationService, gceTagManager) {\n this.getSecurityGroupRefreshTime = () => {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.refreshSecurityGroups = () => {\n this.refreshing = true;\n gceServerGroupConfigurationService.refreshSecurityGroups(this.command).then(() => {\n this.refreshing = false;\n });\n };\n\n this.onRemove = gceTagManager.removeSecurityGroup;\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.securityGroups.removed.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE, [])\n .directive('gceServerGroupSecurityGroupsRemoved', function () {\n return {\n restrict: 'E',\n templateUrl: require('./securityGroupsRemoved.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupSecurityGroupsRemovedCtrl',\n };\n })\n .controller('gceServerGroupSecurityGroupsRemovedCtrl', function () {\n this.acknowledgeSecurityGroupRemoval = () => {\n this.command.viewState.dirty.securityGroups = null;\n };\n });\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.regional.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE, [])\n .directive('gceRegionalSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./regionalSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n });\n","import { module, noop } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.targetShape.directive';\n\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE, []).directive(\n 'gceTargetShapeSelector',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./targetShapeSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: noop,\n };\n },\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.zone.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE, [])\n .directive('gceZoneSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./zoneSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n });\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\nimport { GCE_TIMEZONE_SELECT } from '../../autoscalingPolicy/components/scalingSchedules/timeZoneSelect';\nimport { GCE_CACHE_REFRESH } from '../../cache/cacheRefresh.component';\nimport { GCE_IMAGE_SELECT } from '../../image/ImageSelect';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\nimport { GCE_ACCELERATOR_CONFIGURER } from './wizard/advancedSettings/GceAcceleratorConfigurer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';\nimport { GCE_DISK_CONFIGURER } from './wizard/advancedSettings/diskConfigurer.component';\nimport { GCE_AUTOHEALING_POLICY_SELECTOR } from './wizard/autoHealingPolicy/autoHealingPolicySelector.component';\nimport { GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT } from './wizard/autoScalingPolicy/autoScalingPolicySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT } from './wizard/capacity/advancedCapacitySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT } from './wizard/capacity/simpleCapacitySelector.component';\nimport { GCE_CUSTOM_INSTANCE_CONFIGURER } from './wizard/customInstance/customInstanceConfigurer.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE } from './wizard/loadBalancers/loadBalancerSelector.directive';\nimport { GCE_LOAD_BALANCING_POLICY_SELECTOR } from './wizard/loadBalancingPolicy/loadBalancingPolicySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER } from './wizard/location/basicSettings.controller';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE } from './wizard/securityGroups/securityGroupSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE } from './wizard/securityGroups/securityGroupsRemoved.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE } from './wizard/zones/regionalSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE } from './wizard/zones/targetShapeSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE = 'spinnaker.serverGroup.configure.gce';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE, [\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n GCE_LOAD_BALANCING_POLICY_SELECTOR,\n GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT,\n GCE_AUTOHEALING_POLICY_SELECTOR,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GCE_CACHE_REFRESH,\n GCE_CUSTOM_INSTANCE_CONFIGURER,\n GCE_DISK_CONFIGURER,\n GCE_ACCELERATOR_CONFIGURER,\n GCE_IMAGE_SELECT,\n GCE_TIMEZONE_SELECT,\n GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE =\n 'spinnaker.deck.gce.serverGroup.hiddenMetadataKeys.value';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE, []).value('gceServerGroupHiddenMetadataKeys', [\n 'load-balancer-names',\n 'global-load-balancer-names',\n 'backend-service-names',\n 'load-balancing-policy',\n 'select-zones',\n 'customUserData',\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, ExpectedArtifactService, INSTANCE_TYPE_SERVICE } from '@spinnaker/core';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCEProviderSettings } from '../../gce.settings';\nimport { parseHealthCheckUrl } from '../../healthCheck/healthCheckUtils';\n\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE } from './wizard/hiddenMetadataKeys.value';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.gce.serverGroupCommandBuilder.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n INSTANCE_TYPE_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE,\n ])\n .factory('gceServerGroupCommandBuilder', [\n '$q',\n 'instanceTypeService',\n 'gceCustomInstanceBuilderService',\n 'gceServerGroupHiddenMetadataKeys',\n 'gceXpnNamingService',\n function (\n $q,\n instanceTypeService,\n gceCustomInstanceBuilderService,\n gceServerGroupHiddenMetadataKeys,\n gceXpnNamingService,\n ) {\n // Two assumptions here:\n // 1) All GCE machine types are represented in the tree of choices.\n // 2) Each machine type appears in exactly one category.\n function determineInstanceCategoryFromInstanceType(command) {\n return instanceTypeService.getCategories('gce').then(function (categories) {\n categories.forEach(function (category) {\n category.families.forEach(function (family) {\n family.instanceTypes.forEach(function (instanceType) {\n if (instanceType.name === command.instanceType) {\n command.viewState.instanceProfile = category.type;\n }\n });\n });\n });\n });\n }\n\n function extractNetworkName(serverGroup) {\n const projectId = gceXpnNamingService.deriveProjectId(serverGroup.launchConfig.instanceTemplate);\n const networkUrl = _.get(serverGroup, 'launchConfig.instanceTemplate.properties.networkInterfaces[0].network');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n }\n\n function extractSubnetName(serverGroup) {\n const projectId = gceXpnNamingService.deriveProjectId(serverGroup.launchConfig.instanceTemplate);\n const subnetworkUrl = _.get(\n serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].subnetwork',\n );\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetworkUrl);\n }\n\n function determineAssociatePublicIPAddress(serverGroup) {\n return _.has(serverGroup, 'launchConfig.instanceTemplate.properties.networkInterfaces[0].accessConfigs');\n }\n\n function extractLoadBalancers(asg) {\n return ['load-balancer-names', 'global-load-balancer-names'].reduce((loadBalancers, property) => {\n if (asg[property]) {\n loadBalancers = loadBalancers.concat(asg[property]);\n }\n return loadBalancers;\n }, []);\n }\n\n function extractLoadBalancersFromMetadata(metadata) {\n return ['load-balancer-names', 'global-load-balancer-names'].reduce((loadBalancers, property) => {\n if (metadata[property]) {\n loadBalancers = loadBalancers.concat(metadata[property].split(','));\n }\n return loadBalancers;\n }, []);\n }\n\n function populateDisksFromExisting(disks, command) {\n disks = disks.map((disk, index) => {\n if (index === 0) {\n return {\n type: disk.initializeParams.diskType,\n sizeGb: disk.initializeParams.diskSizeGb,\n };\n } else {\n return {\n type: disk.initializeParams.diskType,\n sizeGb: disk.initializeParams.diskSizeGb,\n sourceImage: _.last(_.get(disk, 'initializeParams.sourceImage', '').split('/')) || null,\n };\n }\n });\n const localSSDDisks = disks.filter((disk) => disk.type === 'local-ssd');\n const persistentDisks = disks.filter(\n (disk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n\n if (persistentDisks.length) {\n command.disks = persistentDisks.concat(localSSDDisks);\n return instanceTypeService\n .getInstanceTypeDetails(\n command.selectedProvider,\n _.includes(command.instanceType, 'custom-') ? 'buildCustom' : command.instanceType,\n )\n .then((instanceTypeDetails) => {\n command.viewState.instanceTypeDetails = instanceTypeDetails;\n calculateOverriddenStorageDescription(instanceTypeDetails, command);\n });\n } else {\n command.disks = [{ type: 'pd-ssd', sizeGb: 10 }].concat(localSSDDisks);\n return $q.when(null);\n }\n }\n\n function populateDisksFromPipeline(command) {\n const persistentDisks = getPersistentDisks(command);\n const localSSDDisks = getLocalSSDDisks(command);\n\n if (persistentDisks.length) {\n command.disks = persistentDisks.concat(localSSDDisks);\n return instanceTypeService\n .getInstanceTypeDetails(\n command.selectedProvider,\n _.includes(command.instanceType, 'custom-') ? 'buildCustom' : command.instanceType,\n )\n .then((instanceTypeDetails) => {\n command.viewState.instanceTypeDetails = instanceTypeDetails;\n calculateOverriddenStorageDescription(instanceTypeDetails, command);\n });\n } else {\n command.disks = [{ type: 'pd-ssd', sizeGb: 10 }].concat(localSSDDisks);\n return $q.when(null);\n }\n }\n\n function getLocalSSDDisks(command) {\n return (command.disks || []).filter((disk) => disk.type === 'local-ssd');\n }\n\n function getPersistentDisks(command) {\n return (command.disks || []).filter(\n (disk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n }\n\n function calculatePersistentDiskOverriddenStorageDescription(command) {\n const persistentDisks = getPersistentDisks(command);\n\n const diskCountBySizeGb = new Map();\n persistentDisks.forEach((disk) => {\n if (diskCountBySizeGb.has(disk.sizeGb)) {\n diskCountBySizeGb.set(disk.sizeGb, diskCountBySizeGb.get(disk.sizeGb) + 1);\n } else {\n diskCountBySizeGb.set(disk.sizeGb, 1);\n }\n });\n\n return Array.from(diskCountBySizeGb)\n .sort(([sizeA], [sizeB]) => sizeB - sizeA)\n .map(([sizeGb, count]) => count + '×' + sizeGb)\n .join(', ');\n }\n\n function calculateOverriddenStorageDescription(instanceTypeDetails, command) {\n if (instanceTypeDetails.storage.localSSDSupported) {\n if (getLocalSSDDisks(command).length !== instanceTypeDetails.storage.count) {\n command.viewState.overriddenStorageDescription = getLocalSSDDisks(command).length + '×375';\n }\n } else {\n const persistentDisks = getPersistentDisks(command);\n const overrideStorageDescription =\n persistentDisks.some((disk) => disk.sizeGb !== instanceTypeDetails.storage.size) ||\n persistentDisks.length !== instanceTypeDetails.storage.count;\n\n if (overrideStorageDescription) {\n command.viewState.overriddenStorageDescription = calculatePersistentDiskOverriddenStorageDescription(\n command,\n );\n }\n }\n }\n\n function populateAvailabilityPolicies(scheduling, command) {\n if (scheduling) {\n command.preemptible = scheduling.preemptible;\n command.automaticRestart = scheduling.automaticRestart;\n command.onHostMaintenance = scheduling.onHostMaintenance;\n } else {\n command.preemptible = false;\n command.automaticRestart = true;\n command.onHostMaintenance = 'MIGRATE';\n }\n }\n\n function populateAutoHealingPolicy(serverGroup, command) {\n const autoHealingPolicy = serverGroup.autoHealingPolicy;\n if (autoHealingPolicy) {\n const healthCheckUrl = autoHealingPolicy.healthCheckUrl\n ? autoHealingPolicy.healthCheckUrl\n : autoHealingPolicy.healthCheck;\n\n if (healthCheckUrl) {\n const { healthCheckName, healthCheckKind } = parseHealthCheckUrl(healthCheckUrl);\n command.autoHealingPolicy = {\n healthCheck: healthCheckName,\n healthCheckKind: healthCheckKind,\n healthCheckUrl: healthCheckUrl,\n initialDelaySec: autoHealingPolicy.initialDelaySec,\n };\n }\n\n const maxUnavailable = autoHealingPolicy.maxUnavailable;\n if (maxUnavailable) {\n command.autoHealingPolicy.maxUnavailable = maxUnavailable;\n command.viewState.maxUnavailableMetric = typeof maxUnavailable.percent === 'number' ? 'percent' : 'fixed';\n }\n }\n }\n\n function populateShieldedVmConfig(serverGroup, command) {\n command.enableSecureBoot = serverGroup.enableSecureBoot;\n command.enableVtpm = serverGroup.enableVtpm;\n command.enableIntegrityMonitoring = serverGroup.enableIntegrityMonitoring;\n }\n\n function populateCustomMetadata(metadataItems, command) {\n // Hide metadata items in the wizard.\n if (metadataItems) {\n let customUserData = '';\n let customUserDataKeys = [];\n if (angular.isArray(metadataItems)) {\n const customUserDataItem = metadataItems.find((metadataItem) => metadataItem.key === 'customUserData');\n if (customUserDataItem) {\n customUserData = customUserDataItem.value;\n customUserDataKeys = getCustomUserDataKeys(customUserData);\n command.userData = customUserData;\n }\n metadataItems.forEach(function (metadataItem) {\n if (\n !_.includes(customUserDataKeys, metadataItem.key) &&\n !_.includes(gceServerGroupHiddenMetadataKeys, metadataItem.key)\n ) {\n command.instanceMetadata[metadataItem.key] = metadataItem.value;\n }\n });\n } else {\n if (metadataItems.customUserData) {\n customUserData = metadataItems.customUserData;\n customUserDataKeys = getCustomUserDataKeys(customUserData);\n command.userData = customUserData;\n metadataItems = _.omit(metadataItems, customUserDataKeys);\n }\n angular.extend(command.instanceMetadata, _.omit(metadataItems, gceServerGroupHiddenMetadataKeys));\n }\n }\n\n if (command.labels['spinnaker-moniker-sequence']) {\n delete command.labels['spinnaker-moniker-sequence'];\n }\n }\n\n function getCustomUserDataKeys(customUserData) {\n const customUserDataKeys = [];\n customUserData.split(/\\n|,/).forEach(function (userDataItem) {\n const customUserDataKey = userDataItem.split('=')[0];\n customUserDataKeys.push(customUserDataKey);\n });\n return customUserDataKeys;\n }\n\n function populateTags(instanceTemplateTags, command) {\n if (instanceTemplateTags && instanceTemplateTags.items) {\n _.map(instanceTemplateTags.items, function (tag) {\n command.tags.push({ value: tag });\n });\n }\n }\n\n function populateResourceManagerTags(instanceTemplateResourceManagerTags, command) {\n if (instanceTemplateResourceManagerTags) {\n Object.assign(command.resourceManagerTags, instanceTemplateResourceManagerTags);\n }\n }\n\n function populatePartnerMetadata(instanceTemplatePartnerMetadata, command) {\n if (instanceTemplatePartnerMetadata) {\n Object.assign(command.partnerMetadata, instanceTemplatePartnerMetadata);\n }\n }\n\n function populateLabels(instanceTemplateLabels, command) {\n if (instanceTemplateLabels) {\n Object.assign(command.labels, instanceTemplateLabels);\n\n if (command.labels['spinnaker-region']) {\n delete command.labels['spinnaker-region'];\n }\n\n if (command.labels['spinnaker-server-group']) {\n delete command.labels['spinnaker-server-group'];\n }\n\n // Need to delete the sequence, otherwise it won't increment\n if (command.labels['spinnaker-moniker-sequence']) {\n delete command.labels['spinnaker-moniker-sequence'];\n }\n }\n }\n\n function populateAuthScopes(serviceAccounts, command) {\n if (serviceAccounts && serviceAccounts.length) {\n command.serviceAccountEmail = serviceAccounts[0].email;\n command.authScopes = _.map(serviceAccounts[0].scopes, (authScope) => {\n return authScope.replace('https://www.googleapis.com/auth/', '');\n });\n } else {\n command.authScopes = [];\n }\n }\n\n function attemptToSetValidCredentials(application, defaultCredentials, command) {\n return AccountService.listAccounts('gce').then(function (gceAccounts) {\n const gceAccountNames = _.map(gceAccounts, 'name');\n const firstGCEAccount = gceAccountNames[0];\n\n const defaultCredentialsAreValid = defaultCredentials && gceAccountNames.includes(defaultCredentials);\n\n command.credentials = defaultCredentialsAreValid ? defaultCredentials : firstGCEAccount || 'my-account-name';\n });\n }\n\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultCredentials = defaults.account || GCEProviderSettings.defaults.account;\n const defaultRegion = defaults.region || GCEProviderSettings.defaults.region;\n const defaultZone = defaults.zone || GCEProviderSettings.defaults.zone;\n const associatePublicIpAddress = _.has(application, 'attributes.providerSettings.gce.associatePublicIpAddress')\n ? application.attributes.providerSettings.gce.associatePublicIpAddress\n : true;\n\n const command = {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n zone: defaultZone,\n regional: false, // TODO(duftler): Externalize this default alongside defaultRegion and defaultZone.\n selectZones: false, // Explicitly select zones for regional server groups.\n distributionPolicy: { zones: [] },\n network: 'default',\n associatePublicIpAddress: associatePublicIpAddress,\n canIpForward: false,\n strategy: '',\n capacity: {\n min: 0,\n max: 0,\n desired: 1,\n },\n backendServiceMetadata: [],\n minCpuPlatform: '(Automatic)',\n disks: [\n { type: 'pd-ssd', sizeGb: 10 },\n { type: 'local-ssd', sizeGb: 375 },\n ],\n imageSource: 'priorStage',\n instanceMetadata: {},\n tags: [],\n labels: {},\n resourceManagerTags: {},\n partnerMetadata: {},\n enableSecureBoot: false,\n enableVtpm: false,\n enableIntegrityMonitoring: false,\n preemptible: false,\n automaticRestart: true,\n onHostMaintenance: 'MIGRATE',\n serviceAccountEmail: 'default',\n authScopes: ['cloud.useraccounts.readonly', 'devstorage.read_only', 'logging.write', 'monitoring.write'],\n enableTraffic: true,\n cloudProvider: 'gce',\n selectedProvider: 'gce',\n availabilityZones: [],\n viewState: {\n instanceProfile: 'custom',\n allImageSelection: null,\n useSimpleCapacity: true,\n usePreferredZones: true,\n listImplicitSecurityGroups: false,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n expectedArtifacts: [],\n },\n };\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['Google'];\n }\n\n return attemptToSetValidCredentials(application, defaultCredentials, command).then(() => command);\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline(currentStage, pipeline) {\n const expectedArtifacts = ExpectedArtifactService.getExpectedArtifactsAvailableToStage(currentStage, pipeline);\n return $q.when({\n viewState: {\n pipeline,\n expectedArtifacts: expectedArtifacts,\n requiresTemplateSelection: true,\n stage: currentStage,\n },\n });\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n const moniker = serverGroup.moniker;\n\n const command = {\n application: application.name,\n autoscalingPolicy: _.cloneDeep(serverGroup.autoscalingPolicy),\n strategy: '',\n stack: moniker.stack,\n freeFormDetails: moniker.detail,\n credentials: serverGroup.account,\n loadBalancers: extractLoadBalancers(serverGroup.asg),\n loadBalancingPolicy: _.cloneDeep(serverGroup.loadBalancingPolicy),\n backendServiceMetadata: serverGroup.asg['backend-service-names'],\n securityGroups: serverGroup.securityGroups,\n region: serverGroup.region,\n capacity: {\n min: serverGroup.asg.minSize,\n max: serverGroup.asg.maxSize,\n desired: serverGroup.asg.desiredCapacity,\n },\n regional: serverGroup.regional,\n network: extractNetworkName(serverGroup),\n subnet: extractSubnetName(serverGroup),\n associatePublicIpAddress: determineAssociatePublicIPAddress(serverGroup),\n canIpForward: serverGroup.canIpForward,\n minCpuPlatform: serverGroup.launchConfig.minCpuPlatform || '(Automatic)',\n instanceMetadata: {},\n tags: [],\n labels: {},\n resourceManagerTags: {},\n partnerMetadata: {},\n availabilityZones: [],\n enableSecureBoot: serverGroup.enableSecureBoot,\n enableVtpm: serverGroup.enableVtpm,\n enableIntegrityMonitoring: serverGroup.enableIntegrityMonitoring,\n enableTraffic: true,\n cloudProvider: 'gce',\n selectedProvider: 'gce',\n distributionPolicy: {\n zones: serverGroup.distributionPolicy ? serverGroup.distributionPolicy.zones : [],\n targetShape: serverGroup.distributionPolicy ? serverGroup.distributionPolicy.targetShape : null,\n },\n selectZones: serverGroup.selectZones,\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n asgName: serverGroup.name,\n },\n viewState: {\n allImageSelection: null,\n useSimpleCapacity: !serverGroup.autoscalingPolicy,\n usePreferredZones: false,\n listImplicitSecurityGroups: false,\n mode: mode,\n },\n };\n\n if (!command.regional) {\n command.zone = serverGroup.zones[0];\n command.source.zone = serverGroup.zones[0];\n }\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['Google'];\n }\n\n populateAutoHealingPolicy(serverGroup, command);\n\n if (serverGroup.launchConfig) {\n const instanceType = serverGroup.launchConfig.instanceType;\n angular.extend(command, {\n instanceType: instanceType,\n });\n\n if (_.includes(instanceType, 'custom-')) {\n command.viewState.customInstance = gceCustomInstanceBuilderService.parseInstanceTypeString(instanceType);\n command.viewState.instanceProfile = 'buildCustom';\n }\n\n command.viewState.imageId = serverGroup.launchConfig.imageId;\n return determineInstanceCategoryFromInstanceType(command).then(function () {\n populateAvailabilityPolicies(serverGroup.launchConfig.instanceTemplate.properties.scheduling, command);\n populateCustomMetadata(serverGroup.launchConfig.instanceTemplate.properties.metadata.items, command);\n populateTags(serverGroup.launchConfig.instanceTemplate.properties.tags, command);\n populateLabels(serverGroup.instanceTemplateLabels, command);\n populateAuthScopes(serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts, command);\n populateResourceManagerTags(\n serverGroup.launchConfig.instanceTemplate.properties.resourceManagerTags,\n command,\n );\n populatePartnerMetadata(serverGroup.launchConfig.instanceTemplate.properties.partnerMetadata, command);\n\n return populateDisksFromExisting(serverGroup.launchConfig.instanceTemplate.properties.disks, command).then(\n function () {\n return command;\n },\n );\n });\n }\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster, currentStage, pipeline) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = Object.keys(pipelineCluster.availabilityZones)[0];\n const zone = pipelineCluster.zone;\n const instanceTypeCategoryLoader = instanceTypeService.getCategoryForInstanceType(\n 'gce',\n pipelineCluster.instanceType,\n );\n\n const commandOptions = { account: pipelineCluster.account, region: region, zone: zone };\n return $q\n .all([buildNewServerGroupCommand(application, commandOptions), instanceTypeCategoryLoader])\n .then(function ([command, instanceProfile]) {\n const expectedArtifacts = ExpectedArtifactService.getExpectedArtifactsAvailableToStage(\n currentStage,\n pipeline,\n );\n const viewState = {\n pipeline,\n stage: currentStage,\n instanceProfile,\n disableImageSelection: true,\n expectedArtifacts: expectedArtifacts,\n showImageSourceSelector: true,\n useSimpleCapacity: !pipelineCluster.autoscalingPolicy,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n customInstance:\n instanceProfile === 'buildCustom'\n ? gceCustomInstanceBuilderService.parseInstanceTypeString(pipelineCluster.instanceType)\n : null,\n templatingEnabled: true,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n enableTraffic: !pipelineCluster.disableTraffic,\n viewState: viewState,\n };\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);\n\n return populateDisksFromPipeline(extendedCommand).then(function () {\n const instanceMetadata = extendedCommand.instanceMetadata;\n extendedCommand.loadBalancers = extractLoadBalancersFromMetadata(instanceMetadata);\n extendedCommand.backendServiceMetadata = instanceMetadata['backend-service-names']\n ? instanceMetadata['backend-service-names'].split(',')\n : [];\n extendedCommand.minCpuPlatform = pipelineCluster.minCpuPlatform || '(Automatic)';\n extendedCommand.instanceMetadata = {};\n populateCustomMetadata(instanceMetadata, extendedCommand);\n populateAutoHealingPolicy(pipelineCluster, extendedCommand);\n populateShieldedVmConfig(pipelineCluster, extendedCommand);\n\n const instanceTemplateTags = { items: extendedCommand.tags };\n extendedCommand.tags = [];\n populateTags(instanceTemplateTags, extendedCommand);\n\n const resourceManagerTags = extendedCommand.resourceManagerTags;\n populateResourceManagerTags(resourceManagerTags, extendedCommand);\n\n const partnerMetadata = extendedCommand.partnerMetadata;\n populatePartnerMetadata(partnerMetadata, extendedCommand);\n\n return extendedCommand;\n });\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _, { isEmpty } from 'lodash';\n\nimport { FirewallLabels, INSTANCE_TYPE_SERVICE, ModalWizard, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE } from './hiddenMetadataKeys.value';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from '../../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './securityGroups/tagManager.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER =\n 'spinnaker.serverGroup.configure.gce.cloneServerGroup';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n INSTANCE_TYPE_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .controller('gceCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n '$log',\n 'serverGroupWriter',\n 'gceServerGroupConfigurationService',\n 'serverGroupCommand',\n 'application',\n 'title',\n 'gceCustomInstanceBuilderService',\n 'instanceTypeService',\n 'wizardSubFormValidation',\n 'gceServerGroupHiddenMetadataKeys',\n 'gceTagManager',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n $log,\n serverGroupWriter,\n gceServerGroupConfigurationService,\n serverGroupCommand,\n application,\n title,\n gceCustomInstanceBuilderService,\n instanceTypeService,\n wizardSubFormValidation,\n gceServerGroupHiddenMetadataKeys,\n gceTagManager,\n ) {\n $scope.pages = {\n templateSelection: require('./templateSelection/templateSelection.html'),\n basicSettings: require('./location/basicSettings.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n securityGroups: require('./securityGroups/securityGroups.html'),\n instanceType: require('./instanceType/instanceType.html'),\n capacity: require('./capacity/capacity.html'),\n autoHealingPolicy: require('./autoHealingPolicy/autoHealingPolicy.html'),\n autoScalingPolicy: require('./autoScalingPolicy/autoScalingPolicy.html'),\n zones: require('./capacity/zones.html'),\n advancedSettings: require('./advancedSettings/advancedSettings.html'),\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n\n $scope.command = serverGroupCommand;\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: [\n 'account, region, subnet, cluster name (stack, details)',\n 'load balancers',\n FirewallLabels.get('firewalls'),\n 'instance type',\n 'all fields on the Advanced Settings page',\n ],\n notCopied: [],\n };\n\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'gce',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n gceServerGroupConfigurationService\n .configureCommand(application, serverGroupCommand)\n .then(function () {\n $scope.state.loaded = true;\n initializeSelectOptions();\n initializeWatches();\n wizardSubFormValidation\n .config({ scope: $scope, form: 'form' })\n .register({ page: 'location', subForm: 'basicSettings' })\n .register({ page: 'capacity', subForm: 'capacitySubForm' })\n .register({ page: 'zones', subForm: 'zonesSubForm' })\n .register({ page: 'load-balancers', subForm: 'loadBalancerSubForm' })\n .register({ page: 'autohealing-policy', subForm: 'autoHealingPolicySubForm' })\n .register({ page: 'autoscaling-policy', subForm: 'autoScalingPolicySubForm' });\n })\n .catch((e) => {\n $log.error('Error generating server group command: ', e);\n });\n }\n\n function initializeWatches() {\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.regional', createResultProcessor($scope.command.regionalChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n $scope.$watch('command.network', createResultProcessor($scope.command.networkChanged));\n $scope.$watch('command.zone', createResultProcessor($scope.command.zoneChanged));\n $scope.$watch('command.viewState.instanceTypeDetails', updateStorageSettingsFromInstanceType());\n $scope.$watch('command.selectZones', createResultProcessor($scope.command.selectZonesChanged));\n $scope.$watch('command.distributionPolicy.zones', createResultProcessor($scope.command.selectZonesChanged));\n $scope.$watch(\n 'command.viewState.customInstance',\n () => {\n $scope.command.customInstanceChanged($scope.command);\n setInstanceTypeFromCustomChoices();\n },\n true,\n );\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged($scope.command));\n processCommandUpdateResult($scope.command.regionalChanged($scope.command));\n processCommandUpdateResult($scope.command.regionChanged($scope.command));\n processCommandUpdateResult($scope.command.networkChanged($scope.command));\n processCommandUpdateResult($scope.command.zoneChanged($scope.command));\n processCommandUpdateResult($scope.command.customInstanceChanged($scope.command));\n gceServerGroupConfigurationService.configureSubnets($scope.command);\n }\n\n function createResultProcessor(method) {\n return function () {\n processCommandUpdateResult(method($scope.command));\n };\n }\n\n function processCommandUpdateResult(result) {\n if (result.dirty.loadBalancers) {\n ModalWizard.markDirty('load-balancers');\n }\n if (result.dirty.securityGroups) {\n ModalWizard.markDirty('security-groups');\n }\n if (result.dirty.availabilityZones) {\n ModalWizard.markDirty('capacity');\n }\n if (result.dirty.instanceType) {\n ModalWizard.markDirty('instance-type');\n }\n }\n\n function setInstanceTypeFromCustomChoices() {\n const c = $scope.command;\n const location = c.regional ? c.region : c.zone;\n const { locationToInstanceTypesMap } = c.backingData.credentialsKeyedByAccount[c.credentials];\n const extendedMemory = _.get(c, 'viewState.customInstance.extendedMemory');\n const customInstanceChoices = [\n _.get(c, 'viewState.customInstance.instanceFamily'),\n _.get(c, 'viewState.customInstance.vCpuCount'),\n _.get(c, 'viewState.customInstance.memory'),\n ];\n\n if (\n _.every([\n ...customInstanceChoices,\n gceCustomInstanceBuilderService.customInstanceChoicesAreValid(\n ...customInstanceChoices,\n location,\n locationToInstanceTypesMap,\n extendedMemory,\n ),\n ])\n ) {\n c.instanceType = gceCustomInstanceBuilderService.generateInstanceTypeString(\n ...customInstanceChoices,\n extendedMemory,\n );\n\n instanceTypeService.getInstanceTypeDetails(c.selectedProvider, 'buildCustom').then((instanceTypeDetails) => {\n c.viewState.instanceTypeDetails = instanceTypeDetails;\n });\n }\n }\n\n function updateStorageSettingsFromInstanceType() {\n return function (instanceTypeDetails) {\n if ($scope.command.viewState.initialized) {\n if (instanceTypeDetails && instanceTypeDetails.storage && instanceTypeDetails.storage.defaultSettings) {\n $scope.command.disks = instanceTypeDetails.storage.defaultSettings.disks;\n delete $scope.command.viewState.overriddenStorageDescription;\n }\n } else {\n $scope.command.viewState.initialized = true;\n }\n };\n }\n\n this.isValid = function () {\n const selectedZones =\n $scope.command.selectZones && _.get($scope, 'command.distributionPolicy.zones.length') >= 1;\n const autoScalingPolicy = $scope.command.autoscalingPolicy;\n return (\n $scope.command &&\n ($scope.command.viewState.disableImageSelection || $scope.command.image) &&\n $scope.command.application &&\n $scope.command.credentials &&\n $scope.command.instanceType &&\n $scope.command.region &&\n ($scope.command.regional || $scope.command.zone) &&\n $scope.command.capacity.desired !== null &&\n (!$scope.command.selectZones || selectedZones) &&\n $scope.form.$valid &&\n (!autoScalingPolicy ||\n (autoScalingPolicy &&\n (!isEmpty(autoScalingPolicy.cpuUtilization) ||\n !isEmpty(autoScalingPolicy.customMetricUtilizations) ||\n !isEmpty(autoScalingPolicy.loadBalancingUtilization)))) &&\n ModalWizard.isComplete()\n );\n };\n\n this.showSubmitButton = function () {\n return ModalWizard.allPagesVisited();\n };\n\n function buildLoadBalancerMetadata(loadBalancerNames, loadBalancerIndex, backendServices) {\n let metadata = {};\n\n if (_.get(loadBalancerNames, 'length') > 0) {\n metadata = loadBalancerNames.reduce(\n (metadata, name) => {\n const loadBalancerDetails = loadBalancerIndex[name];\n\n if (loadBalancerDetails.loadBalancerType === 'HTTP') {\n metadata['global-load-balancer-names'] = metadata['global-load-balancer-names'].concat(\n loadBalancerDetails.listeners.map((listener) => listener.name),\n );\n } else if (loadBalancerDetails.loadBalancerType === 'INTERNAL_MANAGED') {\n metadata['load-balancer-names'] = metadata['load-balancer-names'].concat(\n loadBalancerDetails.listeners.map((listener) => listener.name),\n );\n } else if (loadBalancerDetails.loadBalancerType === 'SSL') {\n metadata['global-load-balancer-names'].push(name);\n } else if (loadBalancerDetails.loadBalancerType === 'TCP') {\n metadata['global-load-balancer-names'].push(name);\n } else {\n metadata['load-balancer-names'].push(name);\n }\n return metadata;\n },\n { 'load-balancer-names': [], 'global-load-balancer-names': [] },\n );\n }\n\n if (_.isObject(backendServices) && Object.keys(backendServices).length > 0) {\n metadata['backend-service-names'] = _.reduce(\n backendServices,\n (accumulatedBackends, backends) => accumulatedBackends.concat(backends),\n [],\n );\n }\n\n for (const key in metadata) {\n if (metadata[key].length === 0) {\n delete metadata[key];\n } else {\n metadata[key] = _.uniq(metadata[key]).toString();\n }\n }\n\n return metadata;\n }\n\n function collectLoadBalancerNamesForCommand(loadBalancerIndex, loadBalancerMetadata) {\n let loadBalancerNames = [];\n if (loadBalancerMetadata['load-balancer-names']) {\n loadBalancerNames = loadBalancerNames.concat(loadBalancerMetadata['load-balancer-names'].split(','));\n }\n\n const selectedSslLoadBalancerNames = _.chain(loadBalancerIndex)\n .filter({ loadBalancerType: 'SSL' })\n .map('name')\n .intersection(\n loadBalancerMetadata['global-load-balancer-names']\n ? loadBalancerMetadata['global-load-balancer-names'].split(',')\n : [],\n )\n .value();\n\n const selectedTcpLoadBalancerNames = _.chain(loadBalancerIndex)\n .filter({ loadBalancerType: 'TCP' })\n .map('name')\n .intersection(\n loadBalancerMetadata['global-load-balancer-names']\n ? loadBalancerMetadata['global-load-balancer-names'].split(',')\n : [],\n )\n .value();\n\n return loadBalancerNames.concat(selectedSslLoadBalancerNames).concat(selectedTcpLoadBalancerNames);\n }\n\n this.submit = function () {\n // We use this list of load balancer names when 'Enabling' a server group.\n const loadBalancerMetadata = buildLoadBalancerMetadata(\n $scope.command.loadBalancers,\n $scope.command.backingData.filtered.loadBalancerIndex,\n $scope.command.backendServices,\n );\n\n const origLoadBalancers = $scope.command.loadBalancers;\n $scope.command.loadBalancers = collectLoadBalancerNamesForCommand(\n $scope.command.backingData.filtered.loadBalancerIndex,\n loadBalancerMetadata,\n );\n\n if ($scope.command.minCpuPlatform === '(Automatic)') {\n $scope.command.minCpuPlatform = '';\n }\n\n angular.extend($scope.command.instanceMetadata, loadBalancerMetadata);\n\n const origTags = $scope.command.tags;\n const transformedTags = [];\n // The tags are stored using a 'value' attribute to enable the Add/Remove behavior in the wizard.\n $scope.command.tags.forEach(function (tag) {\n transformedTags.push(tag.value);\n });\n $scope.command.tags = transformedTags;\n\n $scope.command.targetSize = $scope.command.capacity.desired;\n\n if ($scope.command.autoscalingPolicy) {\n $scope.command.capacity.min = $scope.command.autoscalingPolicy.minNumReplicas;\n $scope.command.capacity.max = $scope.command.autoscalingPolicy.maxNumReplicas;\n } else {\n $scope.command.capacity.min = $scope.command.capacity.desired;\n $scope.command.capacity.max = $scope.command.capacity.desired;\n }\n\n delete $scope.command.securityGroups;\n\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n\n $scope.taskMonitor.submit(function () {\n const promise = serverGroupWriter.cloneServerGroup(angular.copy($scope.command), application);\n\n // Copy back the original objects so the wizard can still be used if the command needs to be resubmitted.\n $scope.command.instanceMetadata = _.omit($scope.command.instanceMetadata, gceServerGroupHiddenMetadataKeys);\n\n $scope.command.tags = origTags;\n $scope.command.loadBalancers = origLoadBalancers;\n $scope.command.securityGroups = gceTagManager.inferSecurityGroupIdsFromTags($scope.command.tags);\n\n return promise;\n });\n };\n\n this.onHealthCheckRefresh = function () {\n gceServerGroupConfigurationService.refreshHealthChecks($scope.command);\n };\n\n this.onEnableAutoHealingChange = function () {\n // Prevent empty auto-healing policies from being overwritten by those of their ancestors\n $scope.command.overwriteAncestorAutoHealingPolicy =\n $scope.command.viewState.mode === 'clone' &&\n $scope.command.autoHealingPolicy != null &&\n $scope.command.enableAutoHealing === false;\n };\n\n this.setAutoHealingPolicy = function (autoHealingPolicy) {\n $scope.command.autoHealingPolicy = autoHealingPolicy;\n };\n\n this.onEnableAutoScalingChange = function () {\n // Prevent empty auto-scaling policies from being overwritten by those of their ancestors\n $scope.command.overwriteAncestorAutoScalingPolicy =\n $scope.command.autoscalingPolicy != null && $scope.command.enableAutoScaling === false;\n };\n\n this.setAutoScalingPolicy = function (autoScalingPolicy) {\n $scope.command.autoscalingPolicy = autoScalingPolicy;\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.specialInstanceProfiles = new Set(['custom', 'buildCustom']);\n\n // This function is called from within React, and without $apply, Angular does not know when it has been called.\n $scope.command.setCustomInstanceViewState = (customInstanceChoices) => {\n $scope.$apply(() => ($scope.command.viewState.customInstance = customInstanceChoices));\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n $scope.$on('$destroy', gceTagManager.reset);\n },\n ]);\n","import { has } from 'lodash';\n\nimport { TaskExecutor } from '@spinnaker/core';\nimport type { IGceServerGroup } from '../../../domain';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nexport class StatefulMIGService {\n public static markDiskStateful(applicationName: string, deviceName: string, serverGroup: IGceServerGroup) {\n return TaskExecutor.executeTask({\n application: applicationName,\n description: 'Mark disk as stateful',\n job: [\n {\n cloudProvider: 'gce',\n credentials: serverGroup.account,\n deviceName,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n type: 'setStatefulDisk',\n },\n ],\n });\n }\n\n public static statefullyUpdateBootDisk(applicationName: string, bootImage: string, serverGroup: IGceServerGroup) {\n return TaskExecutor.executeTask({\n application: applicationName,\n description: 'Statefully update boot disk image',\n job: [\n {\n bootImage,\n cloudProvider: 'gce',\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n type: 'statefullyUpdateBootImage',\n },\n ],\n });\n }\n\n public static isDiskStateful(deviceName: string, serverGroup: IGceServerGroup): boolean {\n return has(serverGroup, ['statefulPolicy', 'preservedState', 'disks', deviceName]);\n }\n\n public static statefulMigsEnabled(): boolean {\n return GCEProviderSettings.feature.statefulMigsEnabled;\n }\n}\n","import React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { ConfirmationModalService } from '@spinnaker/core';\n\nimport { StatefulMIGService } from './StatefulMIGService';\nimport type { IGceServerGroup } from '../../../domain';\n\ninterface IMarkDiskStatefulButtonProps {\n application: Application;\n deviceName: string;\n serverGroup: IGceServerGroup;\n}\n\nexport function MarkDiskStatefulButton({ application, deviceName, serverGroup }: IMarkDiskStatefulButtonProps) {\n function openConfirmationModal(): void {\n ConfirmationModalService.confirm({\n account: serverGroup.account,\n askForReason: true,\n buttonText: 'Mark as stateful',\n header: `Really mark disk ${deviceName} as stateful?`,\n submitMethod: () => {\n return StatefulMIGService.markDiskStateful(application.name, deviceName, serverGroup);\n },\n taskMonitorConfig: {\n application,\n title: 'Marking disk as stateful',\n },\n });\n }\n\n if (StatefulMIGService.isDiskStateful(deviceName, serverGroup)) {\n return <span> (Marked as Stateful)</span>;\n }\n\n return (\n <button className=\"btn-link\" onClick={() => openConfirmationModal()}>\n Mark as Stateful\n </button>\n );\n}\n","import React from 'react';\n\nimport type { Application, IModalComponentProps } from '@spinnaker/core';\nimport { FormikFormField, ReactModal, TaskMonitor, WizardModal, WizardPage } from '@spinnaker/core';\n\nimport { StatefulMIGService } from './StatefulMIGService';\nimport type { IGceServerGroup } from '../../../domain';\nimport type { IGceImage } from '../../../image';\nimport { GceImageReader, ImageSelect } from '../../../image';\n\ninterface IUpdateBootImageButtonProps {\n application: Application;\n bootImage: string;\n serverGroup: IGceServerGroup;\n}\n\nexport function UpdateBootImageButton(props: IUpdateBootImageButtonProps) {\n function openUpdateImageModal() {\n const componentProps = { ...props } as IUpdateBootImageModalProps;\n ReactModal.show(UpdateBootImageModal, componentProps, { dialogClassName: 'wizard-modal modal-lg' });\n }\n\n return (\n <button className=\"btn-link\" onClick={openUpdateImageModal}>\n Statefully Update\n </button>\n );\n}\n\ninterface IUpdateBootImageModalProps extends IModalComponentProps, IUpdateBootImageButtonProps {\n application: Application;\n serverGroup: IGceServerGroup;\n}\n\ninterface IUpdateBootImageModalState {\n availableImages: IGceImage[];\n taskMonitor: TaskMonitor;\n}\n\ninterface IUpdateBootImageModalFormValues {\n image: string;\n}\n\nclass UpdateBootImageModal extends React.Component<IUpdateBootImageModalProps, IUpdateBootImageModalState> {\n public constructor(props: IUpdateBootImageModalProps) {\n super(props);\n this.state = {\n availableImages: [],\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Updating Boot Image',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n }),\n };\n }\n\n public componentDidMount() {\n GceImageReader.findImages({\n account: this.props.serverGroup.account,\n provider: 'gce',\n q: '*',\n }).then((images) => {\n this.setState({ availableImages: images });\n });\n }\n\n private submit = (values: IUpdateBootImageModalFormValues): void => {\n this.state.taskMonitor.submit(() =>\n StatefulMIGService.statefullyUpdateBootDisk(this.props.application.name, values.image, this.props.serverGroup),\n );\n };\n\n public render() {\n return (\n <WizardModal<IUpdateBootImageModalFormValues>\n closeModal={this.submit}\n dismissModal={this.props.dismissModal}\n heading=\"Update Boot Disk Image\"\n initialValues={{ image: this.props.bootImage }}\n submitButtonLabel=\"Update Image\"\n taskMonitor={this.state.taskMonitor}\n render={({ formik, nextIdx, wizard }) => (\n <WizardPage\n label=\"Boot Image\"\n wizard={wizard}\n order={nextIdx()}\n render={() => (\n <FormikFormField\n input={(props) => (\n <div className=\"full-width\" style={{ height: '225px' }}>\n <ImageSelect\n availableImages={this.state.availableImages}\n selectedImage={props.value}\n selectImage={(imageName: string) => formik.setFieldValue('image', imageName)}\n />\n </div>\n )}\n label=\"Boot image name:\"\n name=\"image\"\n required={true}\n />\n )}\n />\n )}\n />\n );\n }\n}\n","import { module } from 'angular';\nimport { get, last } from 'lodash';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport type { Application } from '@spinnaker/core';\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceDisk, IGceServerGroup } from '../../domain';\nimport { MarkDiskStatefulButton } from './stateful/MarkDiskStatefulButton';\nimport { StatefulMIGService } from './stateful/StatefulMIGService';\nimport { UpdateBootImageButton } from './stateful/UpdateBootImageButton';\n\ninterface IServerGroupDiskDescriptionProps {\n application: Application;\n serverGroup: IGceServerGroup;\n}\n\nclass ServerGroupDiskDescriptions extends React.Component<IServerGroupDiskDescriptionProps> {\n public render() {\n const { application, serverGroup } = this.props;\n const disks: IGceDisk[] = get(serverGroup, 'launchConfig.instanceTemplate.properties.disks', []);\n const statefulOperationsEnabled: boolean = StatefulMIGService.statefulMigsEnabled();\n const canUpdateBootImage =\n statefulOperationsEnabled &&\n disks.some((disk) => StatefulMIGService.isDiskStateful(disk.deviceName, serverGroup));\n\n return disks.map((disk) => {\n if (disk.boot) {\n return (\n <React.Fragment key={disk.deviceName}>\n <dt>\n Boot Disk\n {canUpdateBootImage && (\n <UpdateBootImageButton\n application={application}\n bootImage={ServerGroupDiskDescriptions.getDiskImageName(disk)}\n serverGroup={serverGroup}\n />\n )}\n </dt>\n <dd>{ServerGroupDiskDescriptions.getDiskTypeLabel(disk)}</dd>\n <dd>{ServerGroupDiskDescriptions.getDiskImageLabel(disk)}</dd>\n </React.Fragment>\n );\n }\n return (\n <React.Fragment key={disk.deviceName}>\n <dt>\n Disk\n {statefulOperationsEnabled && (\n <MarkDiskStatefulButton\n application={application}\n deviceName={disk.deviceName}\n serverGroup={serverGroup}\n />\n )}\n </dt>\n <dd>{ServerGroupDiskDescriptions.getDiskTypeLabel(disk)}</dd>\n <dd>{ServerGroupDiskDescriptions.getDiskImageLabel(disk)}</dd>\n </React.Fragment>\n );\n });\n }\n\n private static translateDiskType = (disk: IGceDisk): string => {\n const diskType = disk.initializeParams.diskType;\n if (diskType === 'pd-ssd') {\n return 'Persistent SSD';\n } else if (diskType === 'local-ssd') {\n return 'Local SSD';\n } else {\n return 'Persistent Std';\n }\n };\n\n private static getDiskTypeLabel = (disk: IGceDisk): string => {\n return `${ServerGroupDiskDescriptions.translateDiskType(disk)}: ${disk.initializeParams.diskSizeGb}GB`;\n };\n\n private static getDiskImageLabel = (disk: IGceDisk): string => {\n return `Image: ${ServerGroupDiskDescriptions.getDiskImageName(disk)}`;\n };\n\n private static getDiskImageName = (disk: IGceDisk): string => {\n return last(get(disk, 'initializeParams.sourceImage', '').split('/'));\n };\n}\n\nexport const GCE_SERVER_GROUP_DISK_DESCRIPTIONS = 'spinnaker.gce.serverGroupDiskDescriptions';\nmodule(GCE_SERVER_GROUP_DISK_DESCRIPTIONS, []).component(\n 'gceServerGroupDiskDescriptions',\n react2angular(withErrorBoundary(ServerGroupDiskDescriptions, 'gceServerGroupDiskDescriptions'), [\n 'application',\n 'serverGroup',\n ]),\n);\n","import { module } from 'angular';\nimport { isEmpty } from 'lodash';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport {\n CheckboxInput,\n FormField,\n LayoutProvider,\n NumberInput,\n ReactSelectInput,\n withErrorBoundary,\n} from '@spinnaker/core';\n\nimport type { IGceAutoscalingPolicy, IGceScaleInControl } from '../../../../autoscalingPolicy';\nimport { GceAutoScalingFieldLayout } from '../../../../autoscalingPolicy';\n\nenum maxReplicasUnit {\n fixed = 'fixed',\n percent = 'percent',\n}\n\ninterface IGceScaleInControlsProps {\n policy: IGceAutoscalingPolicy;\n updatePolicy: (policy: IGceAutoscalingPolicy) => void;\n}\n\nconst defaultScaleInControl: IGceScaleInControl = {\n maxScaledInReplicas: {\n fixed: null,\n percent: 0,\n },\n timeWindowSec: 60,\n};\n\nfunction GceScaleInControls({ policy, updatePolicy }: IGceScaleInControlsProps) {\n function updateScaleInControl(scaleInControl: IGceScaleInControl) {\n const scaleInControlExist = Object.keys(scaleInControl).length;\n if (scaleInControlExist) {\n updatePolicy({\n ...policy,\n scaleInControl,\n });\n } else {\n const updatedPolicy: any = policy;\n delete updatedPolicy['scaleInControl'];\n updatePolicy({\n ...updatedPolicy,\n });\n }\n }\n\n function getMaxReplicasUnit(): maxReplicasUnit {\n if (Number.isInteger(policy.scaleInControl.maxScaledInReplicas.percent)) {\n return maxReplicasUnit.percent;\n }\n return maxReplicasUnit.fixed;\n }\n\n return (\n <LayoutProvider value={GceAutoScalingFieldLayout}>\n <div className=\"row\">\n <FormField\n input={(inputProps) => <CheckboxInput {...inputProps} />}\n label=\"Enable scale-in controls\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl(e.target.checked ? defaultScaleInControl : {});\n }}\n value={!isEmpty(policy.scaleInControl)}\n />\n </div>\n {!isEmpty(policy.scaleInControl) && (\n <>\n <div className=\"row\">\n <FormField\n input={(inputProps) => (\n <NumberInput\n {...inputProps}\n min={0}\n max={getMaxReplicasUnit() === maxReplicasUnit.percent ? 100 : null}\n />\n )}\n label=\"Max scaled-in replicas\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n maxScaledInReplicas: {\n [getMaxReplicasUnit()]: parseInt(e.target.value, 10),\n },\n });\n }}\n value={policy.scaleInControl.maxScaledInReplicas[getMaxReplicasUnit()]}\n />\n <FormField\n input={(inputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n stringOptions={[maxReplicasUnit.percent, maxReplicasUnit.fixed]}\n />\n )}\n label=\"\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n maxScaledInReplicas: {\n [e.target.value]: policy.scaleInControl.maxScaledInReplicas[getMaxReplicasUnit()],\n },\n });\n }}\n value={getMaxReplicasUnit()}\n />\n </div>\n <div className=\"row\">\n <FormField\n input={(inputProps) => <NumberInput {...inputProps} min={60} max={3600} />}\n label=\"Time window (seconds)\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n timeWindowSec: parseInt(e.target.value, 10),\n });\n }}\n value={policy.scaleInControl.timeWindowSec}\n />\n </div>\n </>\n )}\n </LayoutProvider>\n );\n}\n\nexport const GCE_SCALE_IN_CONTROLS = 'spinnaker.gce.scaleInControls';\nmodule(GCE_SCALE_IN_CONTROLS, []).component(\n 'gceScaleInControls',\n react2angular(withErrorBoundary(GceScaleInControls, 'gceScaleInControls'), ['policy', 'updatePolicy']),\n);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport type { Application, IServerGroup } from '@spinnaker/core';\n\nclass GceAddAutoHealingPolicyButtonCtrl implements IController {\n public application: Application;\n public serverGroup: IServerGroup;\n\n public static $inject = ['$uibModal'];\n constructor(private $uibModal: IModalService) {}\n\n public addAutoHealingPolicy(): void {\n this.$uibModal.open({\n templateUrl: require('./modal/upsertAutoHealingPolicy.modal.html'),\n controller: 'gceUpsertAutoHealingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'md',\n resolve: {\n serverGroup: () => this.serverGroup,\n application: () => this.application,\n },\n });\n }\n}\n\nconst gceAddAutoHealingPolicyButton: IComponentOptions = {\n bindings: {\n application: '<',\n serverGroup: '<',\n },\n template: '<a href ng-click=\"$ctrl.addAutoHealingPolicy()\">Create new autohealing policy</a>',\n controller: GceAddAutoHealingPolicyButtonCtrl,\n};\n\nexport const GCE_ADD_AUTOHEALING_POLICY_BUTTON = 'spinnaker.gce.addAutoHealingPolicyButton.component';\nmodule(GCE_ADD_AUTOHEALING_POLICY_BUTTON, []).component('gceAddAutoHealingPolicyButton', gceAddAutoHealingPolicyButton);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport { ConfirmationModalService } from '@spinnaker/core';\nimport type { IGceServerGroup } from '../../../domain/index';\n\nclass GceAutoHealingPolicyDetailsCtrl implements IController {\n public serverGroup: IGceServerGroup;\n public application: Application;\n\n public static $inject = ['$uibModal', 'gceAutoscalingPolicyWriter'];\n constructor(private $uibModal: IModalService, private gceAutoscalingPolicyWriter: any) {}\n\n public editPolicy(): void {\n this.$uibModal.open({\n templateUrl: require('./modal/upsertAutoHealingPolicy.modal.html'),\n controller: 'gceUpsertAutoHealingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'md',\n resolve: {\n application: () => this.application,\n serverGroup: () => this.serverGroup,\n },\n });\n }\n\n public deletePolicy(): void {\n const taskMonitor = {\n application: this.application,\n title: `Deleting autohealing policy for ${this.serverGroup.name}`,\n };\n\n ConfirmationModalService.confirm({\n header: `Really delete autohealer for ${this.serverGroup.name}?`,\n buttonText: 'Delete autohealer',\n account: this.serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: () => this.gceAutoscalingPolicyWriter.deleteAutoHealingPolicy(this.application, this.serverGroup),\n });\n }\n}\n\nconst gceAutoHealingPolicyDetails: IComponentOptions = {\n bindings: { serverGroup: '<', application: '<' },\n template: `\n <dt>\n Health Check\n <help-field key=\"gce.serverGroup.autoHealing\"></help-field>\n </dt>\n <dd>{{$ctrl.serverGroup.autoHealingPolicyHealthCheck}}</dd>\n <dt>\n Initial Delay\n <help-field key=\"gce.serverGroup.initialDelaySec\"></help-field>\n </dt>\n <dd>{{$ctrl.serverGroup.initialDelaySec}} seconds</dd>\n <dt ng-if=\"$ctrl.serverGroup.maxUnavailable\">\n Max Unavailable\n <help-field key=\"gce.serverGroup.maxUnavailable\"></help-field>\n </dt>\n <dd ng-if=\"$ctrl.serverGroup.maxUnavailable\">{{$ctrl.serverGroup.maxUnavailable}}</dd>\n <action-icons class=\"text-right\"\n edit=\"$ctrl.editPolicy()\"\n edit-info=\"Edit Policy\"\n destroy=\"$ctrl.deletePolicy()\"\n destroy-info=\"Delete Policy\">\n </action-icons>`,\n controller: GceAutoHealingPolicyDetailsCtrl,\n};\n\nexport const GCE_AUTOHEALING_POLICY_DETAILS = 'spinnaker.gce.autoHealingPolicyDetails.component';\nmodule(GCE_AUTOHEALING_POLICY_DETAILS, []).component('gceAutoHealingPolicyDetails', gceAutoHealingPolicyDetails);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { TaskExecutor } from '@spinnaker/core';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE =\n 'spinnaker.gce.serverGroup.details.scalingPolicy.write.service';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE, [])\n .factory('gceAutoscalingPolicyWriter', function () {\n function upsertAutoscalingPolicy(application, serverGroup, policy, params = {}) {\n const job = {\n type: 'upsertScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n autoscalingPolicy: policy,\n };\n angular.extend(job, params);\n\n return TaskExecutor.executeTask({\n application,\n description: 'Upsert scaling policy ' + serverGroup.name,\n job: [job],\n });\n }\n\n function deleteAutoscalingPolicy(application, serverGroup) {\n return TaskExecutor.executeTask({\n application,\n description: 'Delete scaling policy ' + serverGroup.name,\n job: [\n {\n type: 'deleteScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n },\n ],\n });\n }\n\n function upsertAutoHealingPolicy(application, serverGroup, policy, params = {}) {\n const job = {\n type: 'upsertScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n autoHealingPolicy: policy,\n };\n angular.extend(job, params);\n\n return TaskExecutor.executeTask({\n application,\n description: 'Upsert autohealing policy ' + serverGroup.name,\n job: [job],\n });\n }\n\n function deleteAutoHealingPolicy(application, serverGroup) {\n return TaskExecutor.executeTask({\n application,\n description: 'Delete autohealing policy ' + serverGroup.name,\n job: [\n {\n type: 'deleteScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n deleteAutoHealingPolicy: true,\n },\n ],\n });\n }\n\n return { upsertAutoscalingPolicy, deleteAutoscalingPolicy, upsertAutoHealingPolicy, deleteAutoHealingPolicy };\n });\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\nimport { cloneDeep } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\nimport { TaskMonitor } from '@spinnaker/core';\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport type { IGceAutoHealingPolicy, IGceServerGroup } from '../../../../domain/index';\nimport type { GceHealthCheckReader } from '../../../../healthCheck/healthCheck.read.service';\nimport { GCE_HEALTH_CHECK_READER } from '../../../../healthCheck/healthCheck.read.service';\nimport type { IGceHealthCheckOption } from '../../../../healthCheck/healthCheckUtils';\nimport { getHealthCheckOptions } from '../../../../healthCheck/healthCheckUtils';\n\nimport './upsertAutoHealingPolicy.modal.less';\n\nclass GceUpsertAutoHealingPolicyModalCtrl implements IController {\n public autoHealingPolicy: IGceAutoHealingPolicy;\n public taskMonitor: TaskMonitor;\n public healthChecks: IGceHealthCheckOption[];\n public action: 'Edit' | 'New';\n public isNew: boolean;\n public submitButtonLabel: string;\n\n public static $inject = [\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n 'gceHealthCheckReader',\n 'gceAutoscalingPolicyWriter',\n ];\n constructor(\n private $uibModalInstance: IModalServiceInstance,\n private application: Application,\n public serverGroup: IGceServerGroup,\n private gceHealthCheckReader: GceHealthCheckReader,\n private gceAutoscalingPolicyWriter: any,\n ) {\n this.initialize();\n }\n\n public submit(): void {\n const submitMethod = () => {\n return this.gceAutoscalingPolicyWriter.upsertAutoHealingPolicy(\n this.application,\n this.serverGroup,\n this.autoHealingPolicy,\n );\n };\n this.taskMonitor.submit(submitMethod);\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public setAutoHealingPolicy(autoHealingPolicy: IGceAutoHealingPolicy): void {\n this.autoHealingPolicy = autoHealingPolicy;\n }\n\n public onHealthCheckRefresh(): void {\n this.gceHealthCheckReader.listHealthChecks().then((healthChecks) => {\n const matchingHealthChecks = healthChecks.filter((hc) => hc.account === this.serverGroup.account);\n this.healthChecks = getHealthCheckOptions(matchingHealthChecks);\n });\n }\n\n private initialize(): void {\n this.onHealthCheckRefresh();\n this.action = this.serverGroup.autoHealingPolicy ? 'Edit' : 'New';\n this.isNew = !this.serverGroup.autoHealingPolicy;\n this.submitButtonLabel = this.isNew ? 'Create' : 'Update';\n if (!this.isNew) {\n this.autoHealingPolicy = cloneDeep(this.serverGroup.autoHealingPolicy);\n }\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: `${this.action} autohealing policy for ${this.serverGroup.name}`,\n modalInstance: this.$uibModalInstance,\n });\n }\n}\n\nexport const GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL = 'spinnaker.gce.upsertAutoHealingPolicy.modal.controller';\nmodule(GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL, [\n GCE_HEALTH_CHECK_READER,\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n]).controller('gceUpsertAutoHealingPolicyModalCtrl', GceUpsertAutoHealingPolicyModalCtrl);\n","'use strict';\n\nimport { module } from 'angular';\nimport { cloneDeep } from 'lodash';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE } from '../../../configure/serverGroup.configure.gce.module';\n\nimport './upsertAutoscalingPolicy.modal.less';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER =\n 'spinnaker.deck.gce.upsertAutoscalingPolicy.modal.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER, [\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n]).controller('gceUpsertAutoscalingPolicyModalCtrl', [\n 'policy',\n 'application',\n 'serverGroup',\n '$uibModalInstance',\n 'gceAutoscalingPolicyWriter',\n '$scope',\n function (policy, application, serverGroup, $uibModalInstance, gceAutoscalingPolicyWriter, $scope) {\n [this.action, this.isNew] = policy ? ['Edit', false] : ['New', true];\n this.policy = cloneDeep(policy || {});\n\n this.cancel = $uibModalInstance.dismiss;\n\n this.taskMonitor = new TaskMonitor({\n application: application,\n title: `${this.action} scaling policy for ${serverGroup.name}`,\n modalInstance: $uibModalInstance,\n });\n\n this.save = () => {\n const submitMethod = () =>\n gceAutoscalingPolicyWriter.upsertAutoscalingPolicy(application, serverGroup, this.policy);\n\n this.taskMonitor.submit(submitMethod);\n };\n\n this.updatePolicy = (updatedPolicy) => {\n $scope.$applyAsync(() => {\n this.policy = updatedPolicy;\n });\n };\n },\n]);\n","import { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER } from './modal/upsertAutoscalingPolicy.modal.controller';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT =\n 'spinnaker.gce.serverGroup.details.scalingPolicy.addButton';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER,\n]).component('gceAddAutoscalingPolicyButton', {\n bindings: {\n serverGroup: '=',\n application: '=',\n },\n template: '<a href ng-click=\"$ctrl.addAutoscalingPolicy()\">Create new scaling policy</a>',\n controller: [\n '$uibModal',\n function ($uibModal) {\n this.addAutoscalingPolicy = () => {\n $uibModal.open({\n templateUrl: require('./modal/upsertAutoscalingPolicy.modal.html'),\n controller: 'gceUpsertAutoscalingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n policy: () => undefined,\n serverGroup: () => this.serverGroup,\n application: () => this.application,\n },\n });\n };\n },\n ],\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { ConfirmationModalService, SETTINGS } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from './../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport { GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT } from '../../configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component';\nimport { GCEProviderSettings } from '../../../gce.settings';\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER } from './modal/upsertAutoscalingPolicy.modal.controller';\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE =\n 'spinnaker.gce.instance.details.scalingPolicy.directive';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER,\n GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT,\n]).component('gceAutoscalingPolicy', {\n bindings: {\n policy: '=',\n application: '=',\n serverGroup: '=',\n },\n templateUrl: require('./autoscalingPolicy.directive.html'),\n controller: [\n '$uibModal',\n 'gceAutoscalingPolicyWriter',\n function ($uibModal, gceAutoscalingPolicyWriter) {\n var scope = this;\n scope.$onInit = function () {\n const policy = scope.policy;\n\n policy.bases = [];\n\n if (policy.cpuUtilization) {\n const basis = {\n description: 'CPU Usage',\n helpKey: 'gce.serverGroup.autoscaling.targetCPUUsage',\n };\n\n if (policy.cpuUtilization.utilizationTarget) {\n basis.targets = [Math.round(policy.cpuUtilization.utilizationTarget * 100) + '%'];\n }\n\n policy.bases.push(basis);\n }\n\n if (policy.loadBalancingUtilization) {\n const basis = {\n description: 'HTTP Load Balancing Usage',\n helpKey: 'gce.serverGroup.autoscaling.targetHTTPLoadBalancingUsage',\n };\n\n if (policy.loadBalancingUtilization.utilizationTarget) {\n basis.targets = [Math.round(policy.loadBalancingUtilization.utilizationTarget * 100) + '%'];\n }\n\n policy.bases.push(basis);\n }\n\n if (policy.customMetricUtilizations) {\n const basis = {\n description: policy.customMetricUtilizations.length > 1 ? 'Monitoring Metrics' : 'Monitoring Metric',\n helpKey: 'gce.serverGroup.autoscaling.targetMetric',\n };\n\n if (policy.customMetricUtilizations.length > 0) {\n basis.targets = [];\n policy.customMetricUtilizations.forEach((metric) => {\n let target = metric.metric + ': ' + metric.utilizationTarget;\n\n if (metric.utilizationTargetType === 'DELTA_PER_SECOND') {\n target += '/sec';\n } else if (metric.utilizationTargetType === 'DELTA_PER_MINUTE') {\n target += '/min';\n }\n\n basis.targets.push(target);\n });\n }\n\n policy.bases.push(basis);\n }\n\n scope.scaleInControlsConfigured =\n policy.scaleInControl &&\n policy.scaleInControl.timeWindowSec &&\n policy.scaleInControl.maxScaledInReplicas &&\n (policy.scaleInControl.maxScaledInReplicas.percent || policy.scaleInControl.maxScaledInReplicas.fixed);\n\n if (scope.scaleInControlsConfigured) {\n scope.maxScaledInReplicasMessage = policy.scaleInControl.maxScaledInReplicas.percent\n ? `${policy.scaleInControl.maxScaledInReplicas.percent}%`\n : `${policy.scaleInControl.maxScaledInReplicas.fixed}`;\n\n scope.timeWindowSecMessage = `${policy.scaleInControl.timeWindowSec} seconds`;\n }\n\n scope.predictiveAutoscalingEnabled =\n GCEProviderSettings.feature.predictiveAutoscaling &&\n policy.cpuUtilization &&\n policy.cpuUtilization.predictiveMethod;\n\n scope.editPolicy = () => {\n $uibModal.open({\n templateUrl: require('./modal/upsertAutoscalingPolicy.modal.html'),\n controller: 'gceUpsertAutoscalingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n policy: () => scope.policy,\n application: () => scope.application,\n serverGroup: () => scope.serverGroup,\n },\n });\n };\n\n scope.deletePolicy = () => {\n const taskMonitor = {\n application: scope.application,\n title: `Deleting autoscaler for ${scope.serverGroup.name}`,\n };\n\n ConfirmationModalService.confirm({\n header: `Really delete autoscaler for ${scope.serverGroup.name}?`,\n buttonText: 'Delete autoscaler',\n account: scope.serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: () =>\n gceAutoscalingPolicyWriter.deleteAutoscalingPolicy(scope.application, scope.serverGroup),\n });\n };\n };\n },\n ],\n});\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_COMMON_FOOTER_DIRECTIVE = 'spinnaker.google.footer.directive';\nexport const name = GOOGLE_COMMON_FOOTER_DIRECTIVE; // for backwards compatibility\nangular.module(GOOGLE_COMMON_FOOTER_DIRECTIVE, []).directive('gceFooter', function () {\n return {\n restrict: 'E',\n templateUrl: require('./footer.directive.html'),\n scope: {},\n bindToController: {\n action: '&',\n isValid: '&',\n cancel: '&',\n account: '=?',\n verification: '=?',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../autoscalingPolicy/autoscalingPolicy.write.service';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT =\n 'spinnaker.deck.gce.serverGroup.details.resizeAutoscalingPolicy.component';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT, [\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n ])\n .component('gceResizeAutoscalingPolicy', {\n bindings: {\n serverGroup: '=',\n command: '=',\n formMethods: '=',\n application: '=',\n },\n templateUrl: require('./resizeAutoscalingPolicy.component.html'),\n controller: [\n '$scope',\n 'gceAutoscalingPolicyWriter',\n function ($scope, gceAutoscalingPolicyWriter) {\n // In Angular 1.7 Directive bindings were removed in the constructor, default values now must be instantiated within $onInit\n // See https://docs.angularjs.org/guide/migration#-compile- and https://docs.angularjs.org/guide/migration#migrate1.5to1.6-ng-services-$compile\n this.$onInit = () => {\n const newPolicyBounds = ['newMinNumReplicas', 'newMaxNumReplicas'];\n newPolicyBounds.forEach((prop) => (this.command[prop] = null));\n\n angular.extend(this.formMethods, {\n formIsValid: () =>\n _.every([\n _.chain(newPolicyBounds)\n .map((bound) => this.command[bound] !== null)\n .every()\n .value(),\n $scope.resizeAutoscalingPolicyForm.$valid,\n ]),\n submitMethod: () => {\n return gceAutoscalingPolicyWriter.upsertAutoscalingPolicy(\n this.application,\n this.serverGroup,\n {\n minNumReplicas: this.command.newMinNumReplicas,\n maxNumReplicas: this.command.newMaxNumReplicas,\n },\n {\n reason: this.command.reason,\n interestingHealthProviderNames: this.command.interestingHealthProviderNames,\n },\n );\n },\n });\n };\n },\n ],\n });\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { SERVER_GROUP_WRITER } from '@spinnaker/core';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT =\n 'spinnaker.google.serverGroup.details.resize.capacity.component';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT, [SERVER_GROUP_WRITER])\n .component('gceResizeCapacity', {\n bindings: {\n command: '=',\n application: '=',\n serverGroup: '=',\n formMethods: '=',\n },\n templateUrl: require('./resizeCapacity.component.html'),\n controller: [\n '$scope',\n 'serverGroupWriter',\n function ($scope, serverGroupWriter) {\n // In Angular 1.7 Directive bindings were removed in the constructor, default values now must be instantiated within $onInit\n // See https://docs.angularjs.org/guide/migration#-compile- and https://docs.angularjs.org/guide/migration#migrate1.5to1.6-ng-services-$compile\n this.$onInit = () => {\n this.command.newSize = null;\n\n angular.extend(this.formMethods, {\n formIsValid: () => _.every([this.command.newSize !== null, $scope.resizeCapacityForm.$valid]),\n submitMethod: () => {\n return serverGroupWriter.resizeServerGroup(this.serverGroup, this.application, {\n capacity: { min: this.command.newSize, max: this.command.newSize, desired: this.command.newSize },\n serverGroupName: this.serverGroup.name,\n targetSize: this.command.newSize,\n region: this.serverGroup.region,\n interestingHealthProviderNames: this.command.interestingHealthProviderNames,\n reason: this.command.reason,\n });\n },\n });\n };\n },\n ],\n });\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_COMMON_FOOTER_DIRECTIVE } from '../../../common/footer.directive';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT } from './resizeAutoscalingPolicy.component';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT } from './resizeCapacity.component';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER =\n 'spinnaker.google.serverGroup.details.resize.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER, [\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT,\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT,\n GOOGLE_COMMON_FOOTER_DIRECTIVE,\n]).controller('gceResizeServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n function ($scope, $uibModalInstance, application, serverGroup) {\n $scope.serverGroup = serverGroup;\n $scope.application = application;\n $scope.verification = {};\n $scope.command = {};\n $scope.formMethods = {};\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Google'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n if (!$scope.verification.verified) {\n return false;\n }\n return $scope.formMethods.formIsValid();\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Resizing ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.resize = function () {\n this.submitting = true;\n if (!this.isValid()) {\n return;\n }\n\n $scope.taskMonitor.submit($scope.formMethods.submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\nimport { GOOGLE_COMMON_FOOTER_DIRECTIVE } from '../../../common/footer.directive';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.google.serverGroup.details.rollback.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [\n SERVER_GROUP_WRITER,\n GOOGLE_COMMON_FOOTER_DIRECTIVE,\n]).controller('gceRollbackServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n 'disabledServerGroups',\n function ($scope, $uibModalInstance, serverGroupWriter, application, serverGroup, disabledServerGroups) {\n $scope.serverGroup = serverGroup;\n $scope.disabledServerGroups = disabledServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.verification = {};\n\n $scope.command = {\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n },\n };\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Google'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n\n return command.rollbackContext.restoreServerGroupName !== undefined;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Rollback ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.rollback = function () {\n this.submitting = true;\n if (!this.isValid()) {\n return;\n }\n\n const submitMethod = function () {\n return serverGroupWriter.rollbackServerGroup(serverGroup, application, $scope.command);\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n ClusterTargetBuilder,\n ConfirmationModalService,\n FirewallLabels,\n NetworkReader,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupTemplates,\n ServerGroupWarningMessageService,\n} from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT } from './autoscalingPolicy/addAutoscalingPolicyButton.component';\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE } from './autoscalingPolicy/autoscalingPolicy.directive';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport '../configure/serverGroup.configure.gce.module';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER } from './resize/resizeServerGroup.controller';\nimport { GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\n\nimport './serverGroupDetails.less';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER =\n 'spinnaker.serverGroup.details.gce.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n SERVER_GROUP_WRITER,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER,\n GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT,\n ])\n .controller('gceServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$templateCache',\n '$interpolate',\n 'app',\n 'serverGroup',\n 'gceServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $templateCache,\n $interpolate,\n app,\n serverGroup,\n gceServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n gceXpnNamingService,\n ) {\n this.state = {\n loading: true,\n };\n\n this.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n const extractServerGroupSummary = () => {\n let summary = _.find(app.serverGroups.data, (toCheck) => {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some((loadBalancer) => {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some((possibleServerGroup) => {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n return summary;\n };\n\n const autoClose = () => {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n };\n\n const cancelLoader = () => {\n this.state.loading = false;\n };\n\n const retrieveServerGroup = () => {\n const summary = extractServerGroupSummary();\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then((details) => {\n cancelLoader();\n\n angular.extend(details, summary);\n // it's possible the summary was not found because the clusters are still loading\n details.account = serverGroup.accountId;\n\n this.serverGroup = details;\n\n if (!_.isEmpty(this.serverGroup)) {\n if (details.securityGroups) {\n this.securityGroups = _.chain(details.securityGroups)\n .map((id) => {\n return (\n _.find(app.securityGroups.data, { accountName: serverGroup.accountId, region: 'global', id: id }) ||\n _.find(app.securityGroups.data, { accountName: serverGroup.accountId, region: 'global', name: id })\n );\n })\n .compact()\n .value();\n }\n\n this.serverGroup.zones.sort();\n\n const projectId = gceXpnNamingService.deriveProjectId(this.serverGroup.launchConfig.instanceTemplate);\n this.serverGroup.logsLink =\n 'https://console.developers.google.com/project/' +\n projectId +\n '/logs?advancedFilter=resource.type=(gce_instance_group_manager OR gce_instance OR gce_autoscaler)%0A\"' +\n this.serverGroup.name +\n '\"';\n\n this.serverGroup.network = getNetwork(projectId);\n retrieveSubnet(projectId);\n determineAssociatePublicIPAddress();\n\n findStartupScript();\n prepareAvailabilityPolicies();\n prepareShieldedVmConfig();\n prepareAutoHealingPolicy();\n prepareAuthScopes();\n prepareCurrentActions();\n augmentTagsWithHelp();\n configureEntityTagTargets();\n processLabels();\n } else {\n autoClose();\n }\n }, autoClose);\n };\n\n const findStartupScript = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.metadata.items')) {\n const metadataItems = this.serverGroup.launchConfig.instanceTemplate.properties.metadata.items;\n const startupScriptItem = _.find(metadataItems, (metadataItem) => {\n return metadataItem.key === 'startup-script';\n });\n\n if (startupScriptItem) {\n this.serverGroup.startupScript = startupScriptItem.value;\n }\n }\n };\n\n const prepareAvailabilityPolicies = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.scheduling')) {\n const scheduling = this.serverGroup.launchConfig.instanceTemplate.properties.scheduling;\n\n this.serverGroup.availabilityPolicies = {\n preemptibility: scheduling.preemptible ? 'On' : 'Off',\n automaticRestart: scheduling.automaticRestart ? 'On' : 'Off',\n onHostMaintenance: scheduling.onHostMaintenance === 'MIGRATE' ? 'Migrate' : 'Terminate',\n };\n }\n };\n\n const prepareShieldedVmConfig = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.shieldedVmConfig')) {\n const shieldedVmConfig = this.serverGroup.launchConfig.instanceTemplate.properties.shieldedVmConfig;\n\n this.serverGroup.shieldedVmConfig = {\n enableSecureBoot: shieldedVmConfig.enableSecureBoot ? 'On' : 'Off',\n enableVtpm: shieldedVmConfig.enableVtpm ? 'On' : 'Off',\n enableIntegrityMonitoring: shieldedVmConfig.enableIntegrityMonitoring ? 'On' : 'Off',\n };\n }\n };\n\n const prepareAutoHealingPolicy = () => {\n if (this.serverGroup.autoHealingPolicy) {\n const autoHealingPolicy = this.serverGroup.autoHealingPolicy;\n const healthCheckUrl = autoHealingPolicy.healthCheck;\n\n this.serverGroup.autoHealingPolicyHealthCheck = healthCheckUrl ? _.last(healthCheckUrl.split('/')) : null;\n this.serverGroup.initialDelaySec = autoHealingPolicy.initialDelaySec;\n\n if (autoHealingPolicy.maxUnavailable) {\n if (typeof autoHealingPolicy.maxUnavailable.percent === 'number') {\n this.serverGroup.maxUnavailable = autoHealingPolicy.maxUnavailable.percent + '%';\n } else {\n this.serverGroup.maxUnavailable = autoHealingPolicy.maxUnavailable.fixed + ' instances';\n }\n }\n }\n };\n\n const prepareAuthScopes = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.serviceAccounts')) {\n const serviceAccounts = this.serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts;\n if (serviceAccounts.length) {\n const serviceAccount = this.serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts[0];\n\n this.serverGroup.serviceAccountEmail = serviceAccount.email;\n this.serverGroup.authScopes = _.map(serviceAccount.scopes, (authScope) => {\n return authScope.replace('https://www.googleapis.com/auth/', '');\n });\n }\n }\n };\n\n const prepareCurrentActions = () => {\n if (this.serverGroup.currentActions) {\n this.serverGroup.currentActionsSummary = [];\n\n _.forOwn(this.serverGroup.currentActions, (value, key) => {\n if (key !== 'none' && value) {\n this.serverGroup.currentActionsSummary.push({ action: _.startCase(key), count: value });\n }\n });\n\n if (!this.serverGroup.currentActionsSummary.length) {\n delete this.serverGroup.currentActionsSummary;\n }\n }\n };\n\n const augmentTagsWithHelp = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.tags.items') && this.securityGroups) {\n const helpMap = {};\n\n this.serverGroup.launchConfig.instanceTemplate.properties.tags.items.forEach((tag) => {\n const securityGroupsMatches = _.filter(this.securityGroups, (securityGroup) =>\n _.includes(securityGroup.targetTags, tag),\n );\n const securityGroupMatchNames = _.map(securityGroupsMatches, 'name');\n\n if (!_.isEmpty(securityGroupMatchNames)) {\n const groupOrGroups = securityGroupMatchNames.length > 1 ? 'groups' : 'group';\n\n helpMap[tag] =\n 'This tag associates this server group with security ' +\n groupOrGroups +\n ' <em>' +\n securityGroupMatchNames.join(', ') +\n '</em>.';\n }\n });\n\n this.serverGroup.launchConfig.instanceTemplate.properties.tags.helpMap = helpMap;\n }\n };\n\n const processLabels = () => {\n if (!_.size(this.serverGroup.instanceTemplateLabels)) {\n delete this.serverGroup.instanceTemplateLabels;\n }\n };\n\n const getNetwork = (projectId) => {\n const networkUrl = _.get(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].network',\n );\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n };\n\n const retrieveSubnet = (projectId) => {\n NetworkReader.listNetworksByProvider('gce').then((networks) => {\n const autoCreateSubnets = _.chain(networks)\n .filter({ account: this.serverGroup.account, id: this.serverGroup.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n if (autoCreateSubnets) {\n this.serverGroup.subnet = '(Auto-select)';\n } else {\n const subnetUrl = _.get(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].subnetwork',\n );\n this.serverGroup.subnet = gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetUrl);\n }\n });\n };\n\n const determineAssociatePublicIPAddress = () => {\n this.serverGroup.associatePublicIPAddress = _.has(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].accessConfigs',\n );\n };\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = (params) => serverGroupWriter.destroyServerGroup(serverGroup, app, params);\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => serverGroupWriter.disableServerGroup(serverGroup, app, params);\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => serverGroupWriter.enableServerGroup(serverGroup, app, params);\n\n const confirmationModalParams = {\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.rollbackServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./rollback/rollbackServerGroup.html'),\n controller: 'gceRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => this.serverGroup,\n disabledServerGroups: () => {\n const cluster = _.find(app.clusters, {\n name: this.serverGroup.cluster,\n account: this.serverGroup.account,\n });\n return _.filter(cluster.serverGroups, { isDisabled: true, region: this.serverGroup.region });\n },\n application: () => app,\n },\n });\n };\n\n this.resizeServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./resize/resizeServerGroup.html'),\n controller: 'gceResizeServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => {\n return this.serverGroup;\n },\n application: () => {\n return app;\n },\n },\n });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'gceCloneServerGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n title: () => {\n return 'Clone ' + serverGroup.name;\n },\n application: () => {\n return app;\n },\n serverGroup: () => {\n return serverGroup;\n },\n serverGroupCommand: () => {\n return gceServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup);\n },\n },\n });\n };\n\n this.showStartupScript = () => {\n $scope.userDataModalTitle = 'Startup Script';\n $scope.serverGroup = { name: this.serverGroup.name };\n $scope.userData = this.serverGroup.startupScript;\n $uibModal.open({\n templateUrl: ServerGroupTemplates.userData,\n scope: $scope,\n });\n };\n\n this.buildJenkinsLink = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.buildInfoUrl) {\n return this.serverGroup.buildInfo.buildInfoUrl;\n } else if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.jenkins) {\n const jenkins = this.serverGroup.buildInfo.jenkins;\n return jenkins.host + 'job/' + jenkins.name + '/' + jenkins.number;\n }\n return null;\n };\n\n this.truncateCommitHash = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.commit) {\n return this.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n\n const configureEntityTagTargets = () => {\n this.entityTagTargets = ClusterTargetBuilder.buildClusterTargets(this.serverGroup);\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GCE_ADD_AUTOHEALING_POLICY_BUTTON } from './autoHealingPolicy/addAutoHealingPolicyButton.component';\nimport { GCE_AUTOHEALING_POLICY_DETAILS } from './autoHealingPolicy/autoHealingPolicy.component';\nimport { GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL } from './autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller';\nimport { GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER } from './serverGroupDetails.gce.controller';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE = 'spinnaker.serverGroup.details.gce';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE, [\n GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER,\n GCE_ADD_AUTOHEALING_POLICY_BUTTON,\n GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL,\n GCE_AUTOHEALING_POLICY_DETAILS,\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { NetworkReader } from '@spinnaker/core';\n\nexport const GOOGLE_SUBNET_SUBNET_RENDERER = 'spinnaker.gce.subnet.renderer';\nexport const name = GOOGLE_SUBNET_SUBNET_RENDERER; // for backwards compatibility\nmodule(GOOGLE_SUBNET_SUBNET_RENDERER, []).factory('gceSubnetRenderer', function () {\n let gceNetworks;\n\n NetworkReader.listNetworksByProvider('gce').then(function (networks) {\n gceNetworks = networks;\n });\n\n function render(serverGroup) {\n if (serverGroup.subnet) {\n return serverGroup.subnet;\n } else {\n const autoCreateSubnets = _.chain(gceNetworks)\n .filter({ account: serverGroup.account, name: serverGroup.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n return autoCreateSubnets ? '(Auto-select)' : '[none]';\n }\n }\n\n return {\n render: render,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ApplicationNameValidator, FirewallLabels } from '@spinnaker/core';\n\nexport const GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR = 'spinnaker.gce.validation.applicationName';\nexport const name = GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR; // for backwards compatibility\nmodule(GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR, [])\n .factory('gceApplicationNameValidator', function () {\n function validateSpecialCharacters(name, errors) {\n const pattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!pattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters or digits. No ' +\n 'special characters are allowed.',\n );\n }\n }\n\n function validateLength(name, warnings, errors) {\n // GCE resource names must comply with https://www.ietf.org/rfc/rfc1035.txt\n // [a-z]([-a-z0-9]*[a-z0-9])?\n const maxResourceNameLength = 63;\n\n // e.g. $appName-$stack-$detail-tp-1451531076528 and $appName-$stack-$detail-hc-1451531076528\n const loadBalancerNameSuffixLength = 17;\n const maxLengthForLoadBalancers = maxResourceNameLength - loadBalancerNameSuffixLength;\n\n // e.g. $appName-$stack-$detail-v000-abcd\n const instanceNameSuffixLength = 10;\n const maxLengthForServerGroups = maxResourceNameLength - instanceNameSuffixLength;\n\n if (name.length > maxResourceNameLength) {\n errors.push('The maximum length for an application in Google is 63 characters.');\n return;\n }\n\n if (name.length > maxLengthForLoadBalancers - 12) {\n if (name.length > maxLengthForLoadBalancers) {\n warnings.push(`You will not be able to create a Google load balancer for this application if the\n application's name is longer than ${maxLengthForLoadBalancers} characters (currently: ${name.length}\n characters).`);\n } else if (name.length >= maxLengthForLoadBalancers - 2) {\n warnings.push(\n 'With separators (\"-\"), you will not be able to include a stack and detail field for ' +\n 'Google load balancers.',\n );\n } else {\n const remaining = maxLengthForLoadBalancers - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google load balancers, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n\n if (name.length > maxLengthForServerGroups - 12) {\n if (name.length > maxLengthForServerGroups) {\n warnings.push(`You will not be able to create a Google server group for this application if the\n application's name is longer than ${maxLengthForServerGroups} characters (currently: ${name.length}\n characters).`);\n } else if (name.length >= maxLengthForServerGroups - 2) {\n warnings.push(\n 'With separators (\"-\"), you will not be able to include a stack and detail field for ' +\n 'Google server groups.',\n );\n } else {\n const remaining = maxLengthForServerGroups - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google server groups, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n\n if (name.length > maxResourceNameLength - 12) {\n if (name.length >= maxResourceNameLength - 2) {\n warnings.push(\n `With separators (\"-\"), you will not be able to include a stack and detail field for Google ${FirewallLabels.get(\n 'firewalls',\n )}.`,\n );\n } else {\n const remaining = maxResourceNameLength - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google ${FirewallLabels.get(\n 'firewalls',\n )}, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n }\n\n function validate(name) {\n const warnings = [];\n const errors = [];\n\n if (name && name.length) {\n validateSpecialCharacters(name, errors);\n validateLength(name, warnings, errors);\n }\n\n return {\n warnings: warnings,\n errors: errors,\n };\n }\n\n return {\n validate: validate,\n };\n })\n .run([\n 'gceApplicationNameValidator',\n function (gceApplicationNameValidator) {\n ApplicationNameValidator.registerValidator('gce', gceApplicationNameValidator);\n },\n ]);\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport { GCE_PREDICTIVE_AUTOSCALING } from './autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling';\nimport { GOOGLE_CACHE_CACHECONFIGURER_SERVICE } from './cache/cacheConfigurer.service';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from './common/xpnNaming.gce.service';\nimport './help/gce.help';\nimport { GceImageReader } from './image';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER } from './instance/custom/customInstance.filter';\nimport { GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE } from './instance/gceInstanceType.service';\nimport { GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER } from './instance/gceMultiInstanceTask.transformer';\nimport { IAP_INTERCEPTOR } from './interceptors/iap.interceptor';\nimport { GCE_LOAD_BALANCER_CHOICE_MODAL } from './loadBalancer/configure/choice/gceLoadBalancerChoice.modal';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER } from './loadBalancer/configure/http/createHttpLoadBalancer.controller';\nimport { GCE_INTERNAL_LOAD_BALANCER_CTRL } from './loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER } from './loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER } from './loadBalancer/configure/network/createLoadBalancer.controller';\nimport { GCE_SSL_LOAD_BALANCER_CTRL } from './loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller';\nimport { GCE_TCP_LOAD_BALANCER_CTRL } from './loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { LOAD_BALANCER_SET_TRANSFORMER } from './loadBalancer/loadBalancer.setTransformer';\nimport { GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport logo from './logo/gce.logo.png';\nimport { GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE } from './pipeline/stages/bake/gceBakeStage';\nimport { GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE } from './pipeline/stages/cloneServerGroup/gceCloneServerGroupStage';\nimport { GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/gceDestroyAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE } from './pipeline/stages/disableAsg/gceDisableAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE } from './pipeline/stages/disableCluster/gceDisableClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE } from './pipeline/stages/enableAsg/gceEnableAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE } from './pipeline/stages/findAmi/gceFindAmiStage';\nimport { GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE } from './pipeline/stages/findImageFromTags/gceFindImageFromTagsStage';\nimport { GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE } from './pipeline/stages/resizeAsg/gceResizeAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/gceScaleDownClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/gceShrinkClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE } from './pipeline/stages/tagImage/gceTagImageStage';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER } from './securityGroup/configure/createSecurityGroup.controller';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER } from './securityGroup/configure/editSecurityGroup.controller';\nimport { GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './securityGroup/details/securityGroupDetail.controller';\nimport { GOOGLE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE } from './serverGroup/configure/serverGroup.configure.gce.module';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER } from './serverGroup/configure/wizard/cloneServerGroup.gce.controller';\nimport { GCE_SERVER_GROUP_DISK_DESCRIPTIONS } from './serverGroup/details/ServerGroupDiskDescriptions';\nimport { GCE_SCALE_IN_CONTROLS } from './serverGroup/details/autoscalingPolicy/modal/GceScaleInControls';\nimport { GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE } from './serverGroup/details/serverGroup.details.gce.module';\nimport { GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { GOOGLE_SUBNET_SUBNET_RENDERER } from './subnet/subnet.renderer';\nimport { GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR } from './validation/applicationName.validator';\n\nimport './logo/gce.logo.less';\n\nexport const GOOGLE_MODULE = 'spinnaker.gce';\nmodule(GOOGLE_MODULE, [\n LOAD_BALANCER_SET_TRANSFORMER,\n GCE_INTERNAL_LOAD_BALANCER_CTRL,\n GCE_LOAD_BALANCER_CHOICE_MODAL,\n GCE_SSL_LOAD_BALANCER_CTRL,\n GCE_TCP_LOAD_BALANCER_CTRL,\n IAP_INTERCEPTOR,\n GCE_SERVER_GROUP_DISK_DESCRIPTIONS,\n GCE_SCALE_IN_CONTROLS,\n GCE_PREDICTIVE_AUTOSCALING,\n GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE,\n GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE,\n GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE,\n GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE,\n GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE,\n GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE,\n GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE,\n GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE,\n GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER,\n GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER,\n GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER,\n GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER,\n GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n GOOGLE_SECURITYGROUP_SECURITYGROUP_READER,\n GOOGLE_SUBNET_SUBNET_RENDERER,\n GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR,\n GOOGLE_CACHE_CACHECONFIGURER_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).config(() => {\n CloudProviderRegistry.registerProvider('gce', {\n name: 'Google',\n logo: {\n path: logo,\n },\n cache: {\n configurer: 'gceCacheConfigurer',\n },\n image: {\n reader: GceImageReader,\n },\n serverGroup: {\n transformer: 'gceServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'gceServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'gceCloneServerGroupCtrl',\n commandBuilder: 'gceServerGroupCommandBuilder',\n configurationService: 'gceServerGroupConfigurationService',\n },\n instance: {\n instanceTypeService: 'gceInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'gceInstanceDetailsCtrl',\n multiInstanceTaskTransformer: 'gceMultiInstanceTaskTransformer',\n customInstanceBuilderTemplateUrl: require('./serverGroup/configure/wizard/customInstance/customInstanceBuilder.html'),\n },\n loadBalancer: {\n transformer: 'gceLoadBalancerTransformer',\n setTransformer: 'gceLoadBalancerSetTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetails.html'),\n detailsController: 'gceLoadBalancerDetailsCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/choice/gceLoadBalancerChoice.modal.html'),\n createLoadBalancerController: 'gceLoadBalancerChoiceCtrl',\n },\n securityGroup: {\n transformer: 'gceSecurityGroupTransformer',\n reader: 'gceSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'gceSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'gceCreateSecurityGroupCtrl',\n },\n subnet: {\n renderer: 'gceSubnetRenderer',\n },\n snapshotsEnabled: true,\n applicationProviderFields: {\n templateUrl: require('./applicationProviderFields/gceFields.html'),\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('gce', ['custom', 'redblack']);\n"],"names":["_","ViewState","observableFrom"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/style-inject/dist/style-inject.es.js","../src/autoscalingPolicy/GceAutoScalingFieldLayout.tsx","../src/autoscalingPolicy/IGceAutoscalingPolicy.ts","../src/gce.settings.ts","../src/autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling.tsx","../src/address/address.reader.ts","../src/backendService/backendService.reader.js","../src/healthCheck/healthCheck.read.service.ts","../src/cache/cacheConfigurer.service.js","../src/common/xpnNaming.gce.service.js","../src/help/gce.help.ts","../src/image/image.reader.ts","../src/image/ImageSelect.tsx","../src/instance/custom/customInstanceBuilder.gce.service.js","../src/instance/custom/customInstance.filter.js","../src/loadBalancer/httpLoadBalancerUtils.service.ts","../src/instance/details/instance.details.controller.js","../src/instance/gceInstanceTypeDisks.ts","../src/instance/gceInstanceType.service.js","../src/instance/gceMultiInstanceTask.transformer.js","../src/interceptors/iap.interceptor.ts","../src/loadBalancer/configure/choice/loadBalancerTypeToWizardMap.constant.ts","../src/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.ts","../src/loadBalancer/configure/http/templates.ts","../src/loadBalancer/configure/http/backendService/backendService.component.js","../src/loadBalancer/configure/http/basicSettings/basicSettings.component.js","../src/cache/cacheRefresh.component.ts","../src/certificate/certificate.reader.ts","../src/loadBalancer/configure/common/sessionAffinityNameMaps.ts","../src/loadBalancer/configure/http/transformer.service.js","../src/loadBalancer/configure/http/commandBuilder.service.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRules.service.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRules.controller.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRulesButton.component.js","../src/loadBalancer/configure/http/healthCheck/healthCheck.component.js","../src/loadBalancer/configure/http/pathRule/pathRule.component.js","../src/loadBalancer/configure/http/hostRule/hostRule.component.js","../src/loadBalancer/configure/http/httpLoadBalancer.write.service.js","../src/loadBalancer/configure/common/addressSelector.component.ts","../src/loadBalancer/configure/http/listeners/listener.component.js","../src/loadBalancer/configure/http/createHttpLoadBalancer.controller.js","../src/loadBalancer/configure/common/commonLoadBalancer.controller.ts","../src/loadBalancer/configure/common/commonLoadBalancerCommandBuilder.service.ts","../src/loadBalancer/configure/common/healthCheck.component.ts","../src/loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller.ts","../src/loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller.ts","../src/gceRegionSelectField.directive.js","../src/loadBalancer/loadBalancer.transformer.js","../src/loadBalancer/configure/network/createLoadBalancer.controller.js","../src/loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller.ts","../src/loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller.ts","../src/loadBalancer/details/backendService/backendService.component.ts","../src/loadBalancer/details/backendService/sessionAffinity.filter.ts","../src/loadBalancer/details/deleteModal/deleteModal.controller.ts","../src/loadBalancer/details/healthCheck/healthCheck.component.js","../src/loadBalancer/details/loadBalancerType/loadBalancerType.component.js","../src/loadBalancer/details/loadBalancerDetail.controller.js","../src/loadBalancer/loadBalancer.setTransformer.ts","../src/logo/gce.logo.png","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/pipeline/stages/bake/gceBakeStage.js","../src/pipeline/stages/cloneServerGroup/gceCloneServerGroupStage.js","../src/pipeline/stages/destroyAsg/gceDestroyAsgStage.js","../src/pipeline/stages/disableAsg/gceDisableAsgStage.js","../src/pipeline/stages/disableCluster/gceDisableClusterStage.js","../src/pipeline/stages/enableAsg/gceEnableAsgStage.js","../src/pipeline/stages/findAmi/gceFindAmiStage.js","../src/pipeline/stages/findImageFromTags/gceFindImageFromTagsStage.js","../src/pipeline/stages/resizeAsg/gceResizeAsgStage.js","../src/pipeline/stages/scaleDownCluster/gceScaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/gceShrinkClusterStage.js","../src/pipeline/stages/tagImage/gceTagImageStage.js","../src/securityGroup/configure/createSecurityGroup.controller.js","../src/securityGroup/configure/editSecurityGroup.controller.js","../src/securityGroup/securityGroupHelpText.service.ts","../src/securityGroup/configure/ConfigSecurityGroupMixin.controller.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/autoscalingPolicy/components/basicSettings/basicSettings.component.js","../src/autoscalingPolicy/components/metricSettings/metricSettings.component.js","../src/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.js","../src/autoscalingPolicy/components/scalingSchedules/timeZoneSelect.tsx","../src/serverGroup/serverGroup.transformer.js","../src/healthCheck/healthCheckUtils.ts","../src/serverGroup/configure/wizard/advancedSettings/gceAccelerator.service.ts","../src/serverGroup/configure/wizard/securityGroups/tagManager.service.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/advancedSettings/GceAcceleratorConfigurer.tsx","../src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js","../src/serverGroup/configure/wizard/advancedSettings/diskConfigurer.component.ts","../src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.ts","../src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.js","../src/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.js","../src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.js","../src/serverGroup/configure/wizard/customInstance/CustomInstanceConfigurer.tsx","../src/serverGroup/configure/wizard/customInstance/customInstanceConfigurer.component.ts","../src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.js","../src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/elSevenOptionsGenerator.component.js","../src/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.js","../src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.ts","../src/gceNetworkSelectField.directive.js","../src/subnet/subnetSelectField.directive.js","../src/serverGroup/configure/wizard/location/basicSettings.controller.js","../src/serverGroup/configure/wizard/securityGroups/tagSelector.component.js","../src/serverGroup/configure/wizard/securityGroups/tagSelectorGenerator.component.js","../src/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.js","../src/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.js","../src/serverGroup/configure/wizard/zones/regionalSelector.directive.js","../src/serverGroup/configure/wizard/zones/targetShapeSelector.directive.ts","../src/serverGroup/configure/wizard/zones/zoneSelector.directive.js","../src/serverGroup/configure/serverGroup.configure.gce.module.js","../src/serverGroup/configure/wizard/hiddenMetadataKeys.value.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/wizard/cloneServerGroup.gce.controller.js","../src/serverGroup/details/stateful/StatefulMIGService.ts","../src/serverGroup/details/stateful/MarkDiskStatefulButton.tsx","../src/serverGroup/details/stateful/UpdateBootImageButton.tsx","../src/serverGroup/details/ServerGroupDiskDescriptions.tsx","../src/serverGroup/details/autoscalingPolicy/modal/GceScaleInControls.tsx","../src/serverGroup/details/autoHealingPolicy/addAutoHealingPolicyButton.component.ts","../src/serverGroup/details/autoHealingPolicy/autoHealingPolicy.component.ts","../src/autoscalingPolicy/autoscalingPolicy.write.service.js","../src/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller.ts","../src/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.controller.js","../src/serverGroup/details/autoscalingPolicy/addAutoscalingPolicyButton.component.js","../src/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.js","../src/common/footer.directive.js","../src/serverGroup/details/resize/resizeAutoscalingPolicy.component.js","../src/serverGroup/details/resize/resizeCapacity.component.js","../src/serverGroup/details/resize/resizeServerGroup.controller.js","../src/serverGroup/details/rollback/rollbackServerGroup.controller.js","../src/serverGroup/details/serverGroupDetails.gce.controller.js","../src/serverGroup/details/serverGroup.details.gce.module.js","../src/subnet/subnet.renderer.js","../src/validation/applicationName.validator.js","../src/gce.module.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { isEmpty } from 'lodash';\nimport React from 'react';\n\nimport type { ILayoutProps } from '@spinnaker/core';\n\nimport './gceAutoscalingFieldLayout.less';\n\n// todo(mneterval): remove when GCE Autoscaling Controls are entirely converted to React & Formik\nexport function GceAutoScalingFieldLayout(props: ILayoutProps) {\n const { label, help, input, actions, validation, required } = props;\n\n const showLabel = !isEmpty(label) || !isEmpty(help);\n const { hidden, messageNode } = validation;\n\n return (\n <div className=\"gce-autoscaling-layout\">\n {showLabel && (\n <label className=\"col-md-3 sm-label-right\">\n {label}\n {required && <span>*</span>} {help}\n </label>\n )}\n <div className=\"col-md-2 content-fields\">\n <div>\n {input} {actions}\n </div>\n {!hidden && <div className=\"message\">{messageNode}</div>}\n </div>\n </div>\n );\n}\n","export interface IGceAutoscalingPolicy {\n cpuUtilization: IGceAutoscalingCpuUtilization;\n scaleInControl: IGceScaleInControl;\n}\n\nexport interface IGceScaleInControl {\n maxScaledInReplicas?: {\n fixed?: number;\n percent?: number;\n };\n timeWindowSec?: number;\n}\n\nexport interface IGceAutoscalingCpuUtilization {\n predictiveMethod?: GcePredictiveMethod;\n utilizationTarget?: number;\n}\n\nexport enum GcePredictiveMethod {\n NONE = 'NONE',\n STANDARD = 'OPTIMIZE_AVAILABILITY',\n}\n","import { defaults } from 'lodash';\n\nimport type { IInstanceStorage, IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IGCEProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n zone?: string;\n instanceTypeStorage?: IInstanceStorage;\n };\n feature: {\n predictiveAutoscaling?: boolean;\n statefulMigsEnabled?: boolean;\n };\n}\n\nexport const GCEProviderSettings: IGCEProviderSettings = defaults(SETTINGS.providers.gce || {}, {\n defaults: {},\n feature: {},\n resetToOriginal: SETTINGS.resetProvider('gce'),\n});\n","import { module } from 'angular';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport type { IFormInputProps } from '@spinnaker/core';\nimport { CheckboxInput, FormField, HelpField, LayoutProvider, withErrorBoundary } from '@spinnaker/core';\n\nimport { GceAutoScalingFieldLayout } from '../../GceAutoScalingFieldLayout';\nimport type { IGceAutoscalingPolicy } from '../../IGceAutoscalingPolicy';\nimport { GcePredictiveMethod } from '../../IGceAutoscalingPolicy';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\ninterface IGcePredictiveAutoscalingProps {\n policy: IGceAutoscalingPolicy;\n updatePolicy: (policy: IGceAutoscalingPolicy) => void;\n}\n\nfunction GcePredictiveAutoscaling({ policy, updatePolicy }: IGcePredictiveAutoscalingProps) {\n if (!GCEProviderSettings.feature.predictiveAutoscaling) {\n return null;\n }\n\n function togglePredictiveAutoscaling(predictiveMethod: GcePredictiveMethod) {\n updatePolicy({\n ...policy,\n cpuUtilization: {\n ...policy.cpuUtilization,\n predictiveMethod,\n },\n });\n }\n\n return (\n <LayoutProvider value={GceAutoScalingFieldLayout}>\n <div className=\"row\">\n <FormField\n help={<HelpField id=\"gce.serverGroup.scalingPolicy.predictiveAutoscaling\" />}\n input={(inputProps: IFormInputProps) => <CheckboxInput {...inputProps} />}\n label=\"Enable predictive autoscaling\"\n onChange={(e: React.ChangeEvent<any>) => {\n togglePredictiveAutoscaling(e.target.checked ? GcePredictiveMethod.STANDARD : GcePredictiveMethod.NONE);\n }}\n value={policy?.cpuUtilization?.predictiveMethod === GcePredictiveMethod.STANDARD}\n />\n </div>\n </LayoutProvider>\n );\n}\n\nexport const GCE_PREDICTIVE_AUTOSCALING = 'spinnaker.gce.predictiveAutoscaling';\nmodule(GCE_PREDICTIVE_AUTOSCALING, []).component(\n 'gcePredictiveAutoscaling',\n react2angular(withErrorBoundary(GcePredictiveAutoscaling, 'gcePredictiveAutoscaling'), ['policy', 'updatePolicy']),\n);\n","import { module } from 'angular';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\n\ninterface IAddressSearchResults {\n account: string;\n address: string; // JSON encoded string containing the address. It is missing the account.\n name: string;\n provider: string;\n region: string;\n type: string;\n}\n\nexport interface IGceAddress {\n account?: string;\n address: string;\n creationTimestamp?: string;\n description?: string;\n id?: number;\n kind?: string;\n labelFingerprint?: string;\n name?: string;\n networkTier?: string;\n region?: string;\n selfLink?: string;\n status?: string;\n}\n\nclass GceAddressReader {\n public listAddresses(region?: string): PromiseLike<IGceAddress[]> {\n if (region) {\n return this.listAddresses(null /* region */).then((addresses) =>\n addresses.filter((address) => address.region === region),\n );\n } else {\n return SearchService.search<IAddressSearchResults>(\n { q: '', type: 'addresses', allowShortQuery: 'true' },\n InfrastructureCaches.get('addresses'),\n )\n .then((searchResults: ISearchResults<IAddressSearchResults>) => {\n if (searchResults && searchResults.results) {\n return searchResults.results\n .filter((result) => result.provider === 'gce')\n .map((result) => {\n const address = JSON.parse(result.address) as IGceAddress;\n address.account = result.account;\n address.region = result.region;\n return address;\n });\n } else {\n return [];\n }\n })\n .catch(() => [] as IGceAddress[]);\n }\n }\n}\n\nexport const GCE_ADDRESS_READER = 'spinnaker.gce.addressReader.service';\nmodule(GCE_ADDRESS_READER, []).service('gceAddressReader', GceAddressReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches, REST } from '@spinnaker/core';\n\nexport const GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER = 'spinnaker.deck.gce.backendService.reader.service';\nexport const name = GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER; // for backwards compatibility\nmodule(GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER, []).factory('gceBackendServiceReader', function () {\n function listBackendServices(kind) {\n if (kind) {\n return listBackendServices().then(([services]) => {\n if (services) {\n const results = services.results || [];\n return results.filter((service) => service.kind === kind);\n }\n return [];\n });\n } else {\n return REST('/search')\n .useCache(InfrastructureCaches.get('backendServices'))\n .query({ q: '', type: 'backendServices', allowShortQuery: 'true' })\n .get();\n }\n }\n\n return { listBackendServices };\n});\n","import { module } from 'angular';\nimport { uniqWith } from 'lodash';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\nimport type { IGceHealthCheck } from '../domain';\n\ninterface IHealthCheckSearchResults {\n name: string;\n account: string;\n healthCheck: string; // JSON encoded string containing the real health check (it is missing the account).\n region?: string;\n kind: string;\n provider: string;\n type: string;\n}\n\nexport class GceHealthCheckReader {\n public listHealthChecks(type?: string): PromiseLike<IGceHealthCheck[]> {\n if (type) {\n return this.listHealthChecks().then((healthChecks) =>\n healthChecks.filter((healthCheck) => healthCheck.healthCheckType === type),\n );\n } else {\n return SearchService.search(\n { q: '', type: 'healthChecks', allowShortQuery: 'true' },\n InfrastructureCaches.get('healthChecks'),\n )\n .then((searchResults: ISearchResults<IHealthCheckSearchResults>) => {\n if (searchResults && searchResults.results) {\n const healthChecks = searchResults.results\n .filter((result) => result.provider === 'gce')\n .map((result) => {\n const healthCheck = JSON.parse(result.healthCheck) as IGceHealthCheck;\n healthCheck.account = result.account;\n return healthCheck;\n });\n return uniqWith(healthChecks, (checkA: IGceHealthCheck, checkB: IGceHealthCheck) => {\n return (\n checkA.name === checkB.name &&\n checkA.healthCheckType === checkB.healthCheckType &&\n checkA.account === checkB.account\n );\n });\n } else {\n return [];\n }\n })\n .catch(() => []);\n }\n }\n}\n\nexport const GCE_HEALTH_CHECK_READER = 'spinnaker.gce.healthCheck.reader';\nmodule(GCE_HEALTH_CHECK_READER, []).service('gceHealthCheckReader', GceHealthCheckReader);\n","'use strict';\n\nimport { module } from 'angular';\nimport { GCE_ADDRESS_READER } from '../address/address.reader';\n\nimport { GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER } from '../backendService/backendService.reader';\nimport { GCE_HEALTH_CHECK_READER } from '../healthCheck/healthCheck.read.service';\n\nexport const GOOGLE_CACHE_CACHECONFIGURER_SERVICE = 'spinnaker.gce.cache.initializer';\nexport const name = GOOGLE_CACHE_CACHECONFIGURER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_CACHE_CACHECONFIGURER_SERVICE, [\n GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER,\n GCE_ADDRESS_READER,\n GCE_HEALTH_CHECK_READER,\n]).factory('gceCacheConfigurer', [\n 'gceAddressReader',\n 'gceBackendServiceReader',\n 'gceCertificateReader',\n 'gceHealthCheckReader',\n function (gceAddressReader, gceBackendServiceReader, gceCertificateReader, gceHealthCheckReader) {\n const config = Object.create(null);\n\n config.addresses = {\n initializers: [() => gceAddressReader.listAddresses()],\n };\n\n config.backendServices = {\n initializers: [() => gceBackendServiceReader.listBackendServices()],\n };\n\n config.certificates = {\n initializers: [() => gceCertificateReader.listCertificates()],\n };\n\n config.healthChecks = {\n initializers: [() => gceHealthCheckReader.listHealthChecks()],\n };\n\n return config;\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_COMMON_XPNNAMING_GCE_SERVICE = 'spinnaker.gce.common.xpnNaming.service';\nexport const name = GOOGLE_COMMON_XPNNAMING_GCE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_COMMON_XPNNAMING_GCE_SERVICE, []).factory('gceXpnNamingService', function () {\n const deriveProjectId = (resourceWithSelfLink) => {\n const pathSegments = resourceWithSelfLink.selfLink.split('/');\n return pathSegments[pathSegments.indexOf('projects') + 1];\n };\n\n const decorateXpnResourceIfNecessary = (projectId, xpnResource) => {\n if (!xpnResource) {\n return null;\n }\n\n // A network selfLink looks like: https://compute.googleapis.com/compute/beta/projects/test-host-project/global/networks/default\n // A subnet selfLink looks like: https://compute.googleapis.com/compute/beta/projects/my-test-service-project/regions/us-west1/subnetworks/default\n const xpnResourcePathSegments = xpnResource.split('/');\n const xpnResourceProjectId = xpnResourcePathSegments[xpnResourcePathSegments.indexOf('projects') + 1];\n const xpnResourceName = _.last(xpnResourcePathSegments);\n if (xpnResourceProjectId !== projectId) {\n return xpnResourceProjectId + '/' + xpnResourceName;\n } else {\n return xpnResourceName;\n }\n };\n\n return {\n deriveProjectId,\n decorateXpnResourceIfNecessary,\n };\n});\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'gce.httpLoadBalancer.certificate':\n 'The name of an SSL certificate. If specified, Spinnaker will create an HTTPS load balancer.',\n 'gce.httpLoadBalancer.defaultService':\n 'A default service handles any requests that do not match a specified host rule or path matching rule.',\n 'gce.httpLoadBalancer.externalIP':\n 'The IP address for this listener. If you do not specify an IP, your listener will be assigned an ephemeral IP.',\n 'gce.httpLoadBalancer.hostRule.hostPattern': 'For example, <b>example.com</b>.',\n '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>.`,\n 'gce.httpLoadBalancer.pathRule.paths': 'For example, <b>/path</b> in <b>example.com/path</b>',\n 'gce.httpLoadBalancer.port':\n 'HTTP requests can be load balanced based on port 80 or port 8080. HTTPS requests can be load balanced on port 443.',\n 'gce.image.artifact':\n 'The artifact that is to be deployed to this cluster. The artifact should represent a deployable image.',\n '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 `,\n 'gce.instance.customInstance.cores':\n '<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>',\n 'gce.instance.customInstance.memory':\n '<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>',\n 'gce.instance.customInstance.extendedmemory':\n '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',\n 'gce.instance.customMetadata.instance-template': 'The instance template used to configure this instance.',\n 'gce.instance.customMetadata.load-balancer-names':\n 'This field is used to \"remember\" what load balancers this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.global-load-balancer-names':\n 'This field is used to \"remember\" what global load balancers this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.backend-service-names':\n 'This field is used to \"remember\" what backend services this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.load-balancing-policy':\n 'This field is used to \"remember\" the load balancing policy this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.startup-script': 'This script will run automatically on every boot.',\n 'gce.instance.labels.spinnaker-region': 'This label can be used to group instances when querying for metrics.',\n 'gce.instance.labels.spinnaker-server-group': 'This label can be used to group instances when querying for metrics.',\n 'gce.instance.storage':\n '<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>',\n 'gce.instance.storage.localSSD':\n '<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>',\n 'gce.instance.serviceAccount':\n '<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>',\n 'gce.instance.authScopes':\n '<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>',\n 'gce.instance.authScopes.cloud-platform':\n '<p>The instances in this server group have full API access to all Google Cloud services.</p>',\n 'gce.instanceType.32core':\n '<p>32-core machine types are in Beta and are available only in Ivy Bridge and Haswell zones.</p>',\n 'gce.internalLoadBalancer.ports': 'Use a comma to separate up to five TCP ports.',\n 'gce.internalHttpLoadBalancer.network':\n \"Network must have a subnet whose 'purpose' is 'INTERNAL_HTTPS_LOAD_BALANCER'\",\n 'gce.loadBalancer.connectionDraining':\n '(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.',\n 'gce.loadBalancer.detail':\n '<p>(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.</p>',\n 'gce.loadBalancer.advancedSettings.healthInterval':\n '<p>Configures the interval, in seconds, between load balancer health checks.</p><p>Default: <b>10</b></p>',\n 'gce.loadBalancer.advancedSettings.healthyThreshold':\n '<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>',\n 'gce.loadBalancer.advancedSettings.unhealthyThreshold':\n '<p>Configures the number of unhealthy observations before deservicing an instance from the load balancer.</p><p>Default: <b>2</b></p>',\n 'gce.loadBalancer.healthCheck':\n '(Optional) <b>Health Checks</b> use HTTP requests to determine if a VM instance is healthy.',\n 'gce.loadBalancer.portName':\n '(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.',\n 'gce.loadBalancer.portRange':\n '(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.',\n 'gce.securityGroup.sourceCIDRs':\n 'Traffic is only allowed from sources that match one of these CIDR ranges, or one of the source tags above.',\n 'gce.securityGroup.sourceTags':\n 'Traffic is only allowed from sources that match one of these tags, or one of the source CIDR ranges below.',\n 'gce.securityGroup.targetTags': 'Traffic is only allowed if the target instance has one of these tags.',\n 'gce.securityGroup.targetServiceAccounts':\n 'Traffic is allowed if the target instance has one of these service accounts.',\n 'gce.securityGroup.sourceServiceAccounts':\n 'Traffic is allowed if the source instance has one of these service accounts.',\n 'gce.serverGroup.associatePublicIpAddress.providerField':\n 'Check if new GCE server groups in this application should be assigned a public IP address by default.',\n '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.`,\n 'gce.serverGroup.scalingPolicy.coolDownPeriodSec':\n 'How long to wait before collecting information from a new instance. This should be at least the time it takes to initialize the instance.',\n 'gce.serverGroup.scalingPolicy.cpuUtilization':\n 'Autoscaler adds or removes instances to maintain this CPU usage on each instance.',\n 'gce.serverGroup.scalingPolicy.predictiveAutoscaling':\n 'Autoscaler adds or removes instances based on forecasted load. You must set a CPU utilization target to enable predictive autoscaling.',\n 'gce.serverGroup.scalingPolicy.loadBalancingUtilization':\n 'Autoscaler adds or removes instances to maintain this usage of load-balancing capacity.',\n 'gce.serverGroup.scalingPolicy.customMetricUtilizations':\n 'Autoscaler adds or removes instances to maintain this usage for custom metric.',\n '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`,\n 'gce.serverGroup.imageName':\n '(Required) <b>Image</b> is the Google Compute Engine image. Images are restricted to the account selected.',\n 'gce.serverGroup.capacity':\n '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.',\n 'gce.serverGroup.minCpuPlatform':\n 'The baseline minimum CPU platform to use for your instances, whenever available. Select \"Automatic\" unless you have a specific need.',\n 'gce.serverGroup.customMetadata':\n '<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.',\n 'gce.serverGroup.userData':\n '<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>',\n 'gce.serverGroup.customMetadata.load-balancer-names':\n 'This field is used to \"remember\" what load balancers this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.global-load-balancer-names':\n 'This field is used to \"remember\" what global load balancers this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.backend-service-names':\n 'This field is used to \"remember\" what backend services this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.load-balancing-policy':\n '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.',\n 'gce.serverGroup.customMetadata.select-zones':\n 'This regional server group will be deployed only to specific zones within the region.',\n 'gce.serverGroup.customMetadata.startup-script': 'This script will run automatically on every boot.',\n 'gce.serverGroup.labels.spinnaker-region': 'This label can be used to group instances when querying for metrics.',\n 'gce.serverGroup.labels.spinnaker-server-group':\n 'This label can be used to group instances when querying for metrics.',\n 'gce.serverGroup.shieldedVmConfig':\n 'Shielded VM features include trusted UEFI firmware and come with options for Secure Boot, Virtual Trusted Platform Module (vTPM), and Integrity Monitoring.',\n 'gce.serverGroup.shieldedVmSecureBoot':\n 'Secure boot helps protect your VM instances against boot-level and kernel-level malware and rootkits.',\n 'gce.serverGroup.shieldedVmVtpm':\n 'Virtual Trusted Platform Module (vTPM) validates your guest VM pre-boot and boot integrity, and offers key generation and protection.',\n 'gce.serverGroup.shieldedVmIntegrityMonitoring':\n '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.',\n 'gce.serverGroup.preemptibility':\n 'A preemptible VM costs much less, but lasts only 24 hours. It can be terminated sooner due to system demands.',\n 'gce.serverGroup.automaticRestart':\n 'Compute Engine can automatically restart VM instances if they are terminated for non-user-initiated reasons (maintenance event, hardware failure, software failure, etc.).',\n 'gce.serverGroup.onHostMaintenance':\n 'When Compute Engine performs periodic infrastructure maintenance it can migrate your VM instances to other hardware without downtime.',\n 'gce.serverGroup.canIpForward':\n '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.',\n 'gce.serverGroup.securityGroups.implicit':\n 'Firewall rules with no target tags defined will permit incoming connections that match the ingress rules to all instances in the network.',\n 'gce.serverGroup.securityGroups.targetTags':\n 'This {{firewall}} rule will be associated with this server group only if a target tag is selected.',\n 'gce.serverGroup.autoscaling.targetCPUUsage':\n 'Autoscaling adds or removes VMs in the group to maintain this level of CPU usage on each VM.',\n 'gce.serverGroup.autoscaling.targetHTTPLoadBalancingUsage':\n \"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.\",\n 'gce.serverGroup.autoscaling.targetMetric':\n 'Autoscaling adds or removes VMs in the group to maintain these target levels.',\n 'gce.serverGroup.autoscaling.minVMs':\n 'The least number of VM instances the group will contain, even if the target is not met.',\n 'gce.serverGroup.autoscaling.maxVMs': 'The largest number of VM instances allowed, even if the target is exceeded.',\n 'gce.serverGroup.autoscaling.cooldown':\n '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.',\n 'gce.serverGroup.autoscaling.mode':\n '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.',\n 'gce.serverGroup.autoHealing':\n '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.',\n 'gce.serverGroup.initialDelaySec':\n 'The time to allow an instance to boot and applications to fully start before the first health check.',\n 'gce.serverGroup.maxUnavailable': `\n Maximum number of instances that can be unavailable when auto-healing. The instance is considered available if all of the following conditions are satisfied:\n <ul>\n <li>1. Instance's status is RUNNING.</li>\n <li>2. Instance's liveness health check result was observed to be HEALTHY at least once.</li>\n </ul>`,\n '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>`,\n 'gce.serverGroup.loadBalancingPolicy.balancingMode':\n '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).',\n 'gce.serverGroup.loadBalancingPolicy.maxRatePerInstance':\n 'The maximum number of requests per second that can be sent to the backend instance group. Input must be a number greater than zero.',\n 'gce.serverGroup.loadBalancingPolicy.maxUtilization':\n '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.',\n 'gce.serverGroup.loadBalancingPolicy.maxConnectionsPerInstance':\n 'The target connections per second for individual instances. When this number is exceeded, requests are directed to another backend.',\n '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.`,\n 'gce.serverGroup.loadBalancingPolicy.portName':\n 'A load balancer sends traffic to an instance group through a named port. Input must be a port name.',\n 'gce.serverGroup.loadBalancingPolicy.listeningPort':\n '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).',\n 'gce.serverGroup.traffic':\n 'Registers the server group with any associated load balancers. These registrations are used by Spinnaker to determine if the server group is enabled.',\n 'gce.serverGroup.accelerator':\n '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.',\n 'gce.tagImage.consideredStages':\n 'Limit which previous stages will be considered when locating images to tag. If left unchecked, images generated by any upstream stage will be tagged.',\n 'pipeline.config.gce.bake.accountName':\n '<p>(Optional) The name of a Google account configured within Rosco. If left blank, the first configured account will be used.</p>',\n 'pipeline.config.gce.bake.baseImage':\n '<p>(Optional) A GCE image name. For example: ubuntu-1204-precise-v20150910.</p>',\n '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>`,\n 'gce.loadBalancerType.HTTP(S)':\n '<p>Google Cloud Platform (GCP) HTTP(S) Load Balancing provides global load balancing for HTTP(S) requests destined for your instances.</p>',\n 'gce.loadBalancerType.Internal':\n '<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>',\n 'gce.loadBalancerType.SSL':\n '<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>',\n 'gce.loadBalancerType.TCP':\n '<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>',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import { REST } from '@spinnaker/core';\n\nexport interface IGceImage {\n imageName: string;\n}\n\nexport class GceImageReader {\n public static findImages(params: { account?: string; provider?: string; q?: string }): PromiseLike<IGceImage[]> {\n return REST('/images/find')\n .query(params)\n .get()\n .catch(() => [] as IGceImage[]);\n }\n\n public static getImage(/*amiName: string, region: string, credentials: string*/): PromiseLike<IGceImage> {\n // GCE images are not regional so we don't need to retrieve ids scoped to regions.\n return null;\n }\n}\n","import { module } from 'angular';\nimport { chain } from 'lodash';\nimport React from 'react';\nimport type { AutocompleteResult, Option } from 'react-select';\nimport { Async } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceImage } from '../image';\n\ninterface IImageSelectProps {\n availableImages: IGceImage[];\n selectedImage: string;\n selectImage: (image: string, target?: any) => void;\n target?: any;\n}\n\nexport class ImageSelect extends React.Component<IImageSelectProps> {\n private loadOptions = (inputValue: string): Promise<AutocompleteResult<string>> => {\n return new Promise((resolve) => {\n if (!inputValue || inputValue.length < 3) {\n resolve({\n options: [],\n complete: false,\n });\n } else {\n const filteredOptions = chain(this.props.availableImages)\n .filter((i) => i.imageName.toLowerCase().includes(inputValue))\n .take(20)\n .map((i) => ({ value: i.imageName, label: i.imageName }))\n .value();\n resolve({\n options: filteredOptions,\n complete: false,\n });\n }\n });\n };\n\n public render() {\n return (\n <Async\n cache={null}\n clearable={false}\n ignoreAccents={false}\n loadOptions={this.loadOptions}\n onChange={(selected: Option<string>) => this.props.selectImage(selected.value, this.props.target)}\n placeholder=\"Type at least 3 characters to search for an image...\"\n searchPromptText=\"Type at least 3 characters to search for an image...\"\n value={{ value: this.props.selectedImage, label: this.props.selectedImage }}\n />\n );\n }\n}\n\nexport const GCE_IMAGE_SELECT = 'spinnaker.gce.imageSelect';\nmodule(GCE_IMAGE_SELECT, []).component(\n 'gceImageSelect',\n react2angular(withErrorBoundary(ImageSelect, 'gceImageSelect'), [\n 'availableImages',\n 'selectedImage',\n 'selectImage',\n 'target',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE =\n 'spinnaker.serverGroup.customInstanceBuilder.gce.service';\nexport const name = GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE, []).factory(\n 'gceCustomInstanceBuilderService',\n function () {\n function vCpuCountForLocationIsValid(instanceFamily, vCpuCount, location, locationToInstanceTypesMap) {\n let max = 0;\n switch (instanceFamily) {\n case 'E2':\n // E2 support up to 32 cores\n // https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#e2_custom_machine_types\n max = 32;\n break;\n case 'N2':\n case 'N2D':\n case 'N1':\n default:\n max = locationToInstanceTypesMap[location].vCpuMax;\n }\n return vCpuCount <= max;\n }\n\n /*\n * Above 1, vCPU count must be even.\n * */\n function numberOfVCpusIsValid(instanceFamily, vCpuCount) {\n if (vCpuCount === 1) {\n return true;\n }\n switch (instanceFamily) {\n case 'N2':\n case 'N2D':\n return vCpuCount % 4 === 0;\n case 'E2':\n case 'N1':\n default:\n return vCpuCount % 2 === 0;\n }\n }\n\n function generateValidVCpuListForLocation(location, locationToInstanceTypesMap) {\n const max = locationToInstanceTypesMap[location].vCpuMax;\n return [1, ..._.range(2, max, 2), max];\n }\n\n function generateValidInstanceFamilyList() {\n return ['n1', 'e2', 'n2', 'n2d'].map((x) => x.toUpperCase());\n }\n\n /*\n * Memory per vCPU must be between .9 GB and 6.5 GB\n * Total memory must be a multiple of 256 MB.\n * */\n function minMemoryForVCpuCount(instanceFamily, vCpuCount) {\n switch (instanceFamily) {\n case 'E2':\n case 'N2':\n case 'N2D':\n return Math.ceil(0.5 * vCpuCount * 4) / 4;\n case 'N1':\n default:\n return Math.ceil(0.9 * vCpuCount * 4) / 4;\n }\n }\n\n function maxMemoryForVCpuCount(instanceFamily, vCpuCount) {\n switch (instanceFamily) {\n case 'E2':\n return 8 * vCpuCount > 128 ? 128 : 8 * vCpuCount;\n case 'N2':\n case 'N2D':\n return 8 * vCpuCount;\n case 'N1':\n default:\n return 6.5 * vCpuCount;\n }\n }\n\n function generateValidMemoryListForVCpuCount(instanceFamily, vCpuCount) {\n const min = minMemoryForVCpuCount(instanceFamily, vCpuCount);\n const max = maxMemoryForVCpuCount(instanceFamily, vCpuCount);\n return [..._.range(min, max, 0.25), max];\n }\n\n function memoryIsValid(instanceFamily, totalMemory, vCpuCount, extendedMemory) {\n const min = minMemoryForVCpuCount(instanceFamily, vCpuCount);\n const max = extendedMemory ? 800 : maxMemoryForVCpuCount(instanceFamily, vCpuCount);\n return _.inRange(totalMemory, min, max) || totalMemory === max;\n }\n\n /*\n * In the API, you must always provide memory in MB units.\n * Format: custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY\n * */\n function generateInstanceTypeString(instanceFamily, vCpuCount, totalMemory, extendedMemory) {\n const extendedFlag = extendedMemory ? '-ext' : '';\n const memoryInMbs = Number(totalMemory) * 1024;\n instanceFamily = instanceFamily.toLowerCase();\n if (instanceFamily === 'n1') {\n return `custom-${vCpuCount}-${memoryInMbs}${extendedFlag}`;\n }\n return `${instanceFamily}-custom-${vCpuCount}-${memoryInMbs}${extendedFlag}`;\n }\n\n function parseInstanceTypeString(instanceTypeString) {\n const [vCpuCount, memoryInMbs] = _.chain(instanceTypeString.split('-'))\n .takeRight(2)\n .map((value) => Number(value))\n .value();\n\n let instanceFamily = instanceTypeString.split('-')[0].toUpperCase();\n if (instanceFamily === 'CUSTOM') {\n instanceFamily = 'N1';\n }\n\n const memory = memoryInMbs / 1024;\n\n return { instanceFamily, vCpuCount, memory };\n }\n\n function customInstanceChoicesAreValid(\n instanceFamily,\n vCpuCount,\n totalMemory,\n location,\n locationToInstanceTypesMap,\n extendedMemory,\n ) {\n return _.every([\n numberOfVCpusIsValid(instanceFamily, vCpuCount),\n memoryIsValid(instanceFamily, totalMemory, vCpuCount, extendedMemory),\n vCpuCountForLocationIsValid(instanceFamily, vCpuCount, location, locationToInstanceTypesMap),\n ]);\n }\n\n return {\n generateValidVCpuListForLocation,\n generateValidMemoryListForVCpuCount,\n generateValidInstanceFamilyList,\n generateInstanceTypeString,\n customInstanceChoicesAreValid,\n memoryIsValid,\n vCpuCountForLocationIsValid,\n parseInstanceTypeString,\n };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './customInstanceBuilder.gce.service';\n\nexport const GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER = 'spinnaker.gce.customInstance.filter';\nexport const name = GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER, [GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE]).filter(\n 'customInstanceFilter',\n [\n 'gceCustomInstanceBuilderService',\n function (gceCustomInstanceBuilderService) {\n return function (instanceTypeString) {\n if (_.includes(instanceTypeString, 'custom-')) {\n const { instanceFamily, vCpuCount, memory } = gceCustomInstanceBuilderService.parseInstanceTypeString(\n instanceTypeString,\n );\n return `${instanceFamily} ${vCpuCount} vCPU / ${memory} GB RAM`;\n }\n return instanceTypeString;\n };\n },\n ],\n);\n","import { module } from 'angular';\nimport { uniq } from 'lodash';\n\nimport type { IGceHttpLoadBalancer, IGceLoadBalancer } from '../domain/loadBalancer';\n\nexport class GceHttpLoadBalancerUtils {\n public static REGION = 'global';\n\n public isHttpLoadBalancer(lb: IGceLoadBalancer): lb is IGceHttpLoadBalancer {\n return (\n (lb.provider === 'gce' || lb.type === 'gce') &&\n (lb.loadBalancerType === 'HTTP' || lb.loadBalancerType === 'INTERNAL_MANAGED')\n );\n }\n\n public normalizeLoadBalancerNamesForAccount(\n loadBalancerNames: string[],\n account: string,\n loadBalancers: IGceLoadBalancer[],\n ): string[] {\n // Assume that loadBalancers is a list of all GCE load balancers in an application\n // (but possibly from several accounts), and has already been normalized (listener names mapped to URL map names).\n const normalizedLoadBalancerNames: string[] = [];\n loadBalancerNames.forEach((loadBalancerName) => {\n const matchingUrlMap = loadBalancers.find((loadBalancer) => {\n return (\n account === loadBalancer.account &&\n this.isHttpLoadBalancer(loadBalancer) &&\n loadBalancer.listeners.map((listener) => listener.name).includes(loadBalancerName)\n );\n });\n\n matchingUrlMap\n ? normalizedLoadBalancerNames.push(matchingUrlMap.name)\n : normalizedLoadBalancerNames.push(loadBalancerName);\n });\n return uniq(normalizedLoadBalancerNames);\n }\n}\n\nexport const GCE_HTTP_LOAD_BALANCER_UTILS = 'spinnaker.gce.httpLoadBalancerUtils.service';\nmodule(GCE_HTTP_LOAD_BALANCER_UTILS, []).service('gceHttpLoadBalancerUtils', GceHttpLoadBalancerUtils);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n FirewallLabels,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n} from '@spinnaker/core';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../loadBalancer/httpLoadBalancerUtils.service';\n\nexport const GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.instance.detail.gce.controller';\nexport const name = GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n]).controller('gceInstanceDetailsCtrl', [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n 'moniker',\n 'environment',\n '$q',\n 'gceHttpLoadBalancerUtils',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $uibModal,\n instance,\n app,\n moniker,\n environment,\n $q,\n gceHttpLoadBalancerUtils,\n gceXpnNamingService,\n ) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('gce', 'instance.detailsTemplateUrl');\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n $scope.application = app;\n $scope.moniker = moniker;\n $scope.environment = environment;\n\n function extractHealthMetrics(instance, latest) {\n // do not backfill on standalone instances\n if (app.isStandalone) {\n instance.health = latest.health;\n }\n\n instance.health = instance.health || [];\n const displayableMetrics = instance.health.filter(function (metric) {\n return metric.type !== 'Google' || metric.state !== 'Unknown';\n });\n\n // backfill details where applicable\n if (latest.health) {\n displayableMetrics.forEach(function (metric) {\n const detailsMatch = latest.health.filter(function (latestHealth) {\n return latestHealth.type === metric.type;\n });\n if (detailsMatch.length) {\n _.defaults(metric, detailsMatch[0]);\n }\n });\n }\n $scope.healthMetrics = displayableMetrics;\n }\n\n function retrieveInstance() {\n const extraData = {};\n let instanceSummary, loadBalancers, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n account = instance.account;\n region = instance.region;\n } else {\n app.serverGroups.data.some(function (serverGroup) {\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = serverGroup.loadBalancers;\n account = serverGroup.account;\n region = serverGroup.region;\n extraData.serverGroup = serverGroup.name;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another application\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a disabled server group via a load balancer\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then(function (details) {\n $scope.state.loading = false;\n extractHealthMetrics(instanceSummary, details);\n $scope.instance = _.defaults(details, instanceSummary);\n $scope.instance.account = account;\n $scope.instance.region = region;\n $scope.instance.vpcId = vpcId;\n if (app.getDataSource('loadBalancers')) {\n $scope.instance.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n loadBalancers,\n account,\n app.getDataSource('loadBalancers').data,\n );\n }\n\n $scope.instance.internalDnsName = $scope.instance.instanceId;\n $scope.instance.internalIpAddress = $scope.instance.networkInterfaces[0].networkIP;\n\n if ($scope.instance.networkInterfaces[0].accessConfigs) {\n $scope.instance.externalIpAddress = $scope.instance.networkInterfaces[0].accessConfigs[0].natIP;\n }\n\n $scope.baseIpAddress = $scope.instance.externalIpAddress || $scope.instance.internalIpAddress;\n\n const projectId = gceXpnNamingService.deriveProjectId($scope.instance);\n $scope.instance.logsLink =\n 'https://console.developers.google.com/project/' +\n projectId +\n '/logs?service=gce_instance&minLogLevel=0&filters=text:' +\n $scope.instance.instanceId;\n\n $scope.instance.network = getNetwork(projectId);\n $scope.instance.subnet = getSubnet(projectId);\n\n $scope.instance.sshLink =\n $scope.instance.selfLink.replace(\n /www.googleapis.com\\/compute\\/(alpha|beta|v1)/,\n 'cloudssh.developers.google.com',\n ) + '?authuser=0&hl=en_US';\n\n $scope.instance.gcloudSSHCommand =\n 'gcloud compute ssh --project ' +\n projectId +\n ' --zone ' +\n $scope.instance.placement.availabilityZone +\n ' ' +\n instance.instanceId;\n\n augmentTagsWithHelp();\n }, autoClose);\n }\n\n if (!instanceSummary) {\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.loading = false;\n }\n\n return $q.when(null);\n }\n\n function autoClose() {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n function augmentTagsWithHelp() {\n if (_.has($scope, 'instance.tags.items') && _.has($scope, 'instance.securityGroups')) {\n const securityGroups = _.chain($scope.instance.securityGroups)\n .map((securityGroup) => {\n return _.find(app.securityGroups.data, {\n accountName: $scope.instance.account,\n region: 'global',\n id: securityGroup.groupId,\n });\n })\n .compact()\n .value();\n\n const helpMap = {};\n\n $scope.instance.tags.items.forEach((tag) => {\n const securityGroupsMatches = _.filter(securityGroups, (securityGroup) =>\n _.includes(securityGroup.targetTags, tag),\n );\n const securityGroupMatchNames = _.map(securityGroupsMatches, 'name');\n\n if (!_.isEmpty(securityGroupMatchNames)) {\n const groupOrGroups = securityGroupMatchNames.length > 1 ? 'groups' : 'group';\n\n helpMap[tag] =\n 'This tag associates this instance with security ' +\n groupOrGroups +\n ' <em>' +\n securityGroupMatchNames.join(', ') +\n '</em>.';\n }\n });\n\n $scope.instance.tags.helpMap = helpMap;\n }\n }\n\n function getNetwork(projectId) {\n const networkUrl = _.get($scope.instance, 'networkInterfaces[0].network');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n }\n\n function getSubnet(projectId) {\n const subnetUrl = _.get($scope.instance, 'networkInterfaces[0].subnetwork');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetUrl);\n }\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n const instanceLoadBalancerDoesNotSupportRegister =\n !app.loadBalancers ||\n _.chain(app.loadBalancers.data)\n .filter((lb) => lb.loadBalancerType !== 'NETWORK' && lb.account === instance.account)\n .map('name')\n .intersection(instance.loadBalancers || [])\n .value().length;\n\n if (!instance.loadBalancers || !instance.loadBalancers.length || instanceLoadBalancerDoesNotSupportRegister) {\n return false;\n }\n const outOfService = instance.health.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canDeregisterFromLoadBalancer = function () {\n const instance = $scope.instance;\n const instanceLoadBalancerDoesNotSupportDeregister =\n !app.loadBalancers ||\n _.chain(app.loadBalancers.data)\n .filter((lb) => lb.loadBalancerType !== 'NETWORK' && lb.account === instance.account)\n .map('name')\n .intersection(instance.loadBalancers || [])\n .value().length;\n\n if (!instance.loadBalancers || !instance.loadBalancers.length || instanceLoadBalancerDoesNotSupportDeregister) {\n return false;\n }\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return hasLoadBalancerHealth;\n };\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const discoveryHealth = instance.health.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.showInstanceActionsDivider = function () {\n return (\n this.canRegisterWithDiscovery() ||\n this.hasHealthState('Discovery', 'Up') ||\n this.canRegisterWithLoadBalancer() ||\n this.canDeregisterFromLoadBalancer()\n );\n };\n\n this.terminateInstance = function terminateInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId,\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n const params = { cloudProvider: 'gce' };\n\n if (instance.serverGroup) {\n params.managedInstanceGroupName = instance.serverGroup;\n }\n\n return InstanceWriter.terminateInstance(instance, app, params);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app, {\n serverGroupName: instance.serverGroup,\n instanceIds: [instance.instanceId],\n zone: instance.placement.availabilityZone,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup + '?',\n buttonText: 'Terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rebootInstance = function rebootInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Rebooting ' + instance.instanceId,\n };\n\n const submitMethod = function () {\n return InstanceWriter.rebootInstance(instance, app, {\n // We can't really reliably do anything other than ignore health here.\n interestingHealthProviderNames: [],\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithLoadBalancer = function registerInstanceWithLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.registerInstanceWithLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + loadBalancerNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromLoadBalancer = function deregisterInstanceFromLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.deregisterInstanceFromLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + loadBalancerNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really disable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Disable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.hasHealthState = function hasHealthState(healthProviderType, state) {\n const instance = $scope.instance;\n return instance.health.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n]);\n","// Duplicated from https://github.com/spinnaker/clouddriver/blob/master/clouddriver-web/config/clouddriver.yml\n// TODO(mneterval): remove after resolution of https://github.com/spinnaker/spinnaker/issues/4859\nexport const GCE_INSTANCE_TYPE_DISK_DEFAULTS = Object.freeze([\n {\n instanceType: 'n1-standard-1',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'f1-micro',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'g1-small',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-small',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-micro',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-medium',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'default',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, SETTINGS } from '@spinnaker/core';\n\nimport { GCE_INSTANCE_TYPE_DISK_DEFAULTS } from './gceInstanceTypeDisks';\n\nexport const GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE = 'spinnaker.gce.instanceType.service';\nexport const name = GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE, []).factory('gceInstanceTypeService', [\n '$q',\n '$log',\n function ($q, $log) {\n const cachedResult = null;\n\n const n1standard = {\n type: 'n1-standard',\n description:\n 'This family provides a balance of compute, memory, and network resources, and it is a good choice for general purpose applications.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-standard-1',\n label: 'Small',\n cpu: 1,\n memory: 3.75,\n costFactor: 1,\n },\n {\n name: 'n1-standard-2',\n label: 'Medium',\n cpu: 2,\n memory: 7.5,\n costFactor: 2,\n },\n {\n name: 'n1-standard-4',\n label: 'Large',\n cpu: 4,\n memory: 15,\n costFactor: 2,\n },\n {\n name: 'n1-standard-8',\n label: 'XLarge',\n cpu: 8,\n memory: 30,\n costFactor: 3,\n },\n {\n name: 'n1-standard-16',\n label: '2XLarge',\n cpu: 16,\n memory: 60,\n costFactor: 3,\n },\n {\n name: 'n1-standard-32',\n label: '4XLarge',\n cpu: 32,\n memory: 120,\n costFactor: 4,\n },\n {\n name: 'n1-standard-64',\n label: '8XLarge',\n cpu: 64,\n memory: 240,\n costFactor: 4,\n },\n {\n name: 'n1-standard-96',\n label: '12XLarge',\n cpu: 96,\n memory: 360,\n costFactor: 4,\n },\n ],\n };\n\n const f1micro = {\n type: 'f1-micro bursting',\n description:\n '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).',\n storageType: 'Std',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'f1-micro',\n label: 'Micro',\n cpu: 1,\n memory: 0.6,\n costFactor: 1,\n },\n {\n name: 'g1-small',\n label: 'Small',\n cpu: 1,\n memory: 1.7,\n costFactor: 1,\n },\n {\n name: 'e2-micro',\n label: 'E2 Micro',\n cpu: 2,\n memory: 1,\n costFactor: 1,\n },\n {\n name: 'e2-small',\n label: 'E2 Small',\n cpu: 2,\n memory: 2,\n costFactor: 2,\n },\n {\n name: 'e2-medium',\n label: 'E2 Medium',\n cpu: 2,\n memory: 4,\n costFactor: 2,\n },\n ],\n };\n\n const n1highmem = {\n type: 'n1-highmem',\n description:\n '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.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-highmem-2',\n label: 'Medium',\n cpu: 2,\n memory: 13,\n costFactor: 2,\n },\n {\n name: 'n1-highmem-4',\n label: 'Large',\n cpu: 4,\n memory: 26,\n costFactor: 2,\n },\n {\n name: 'n1-highmem-8',\n label: 'XLarge',\n cpu: 8,\n memory: 52,\n costFactor: 3,\n },\n {\n name: 'n1-highmem-16',\n label: '2XLarge',\n cpu: 16,\n memory: 104,\n costFactor: 3,\n },\n {\n name: 'n1-highmem-32',\n label: '4XLarge',\n cpu: 32,\n memory: 208,\n costFactor: 4,\n },\n {\n name: 'n1-highmem-64',\n label: '8XLarge',\n cpu: 64,\n memory: 416,\n costFactor: 4,\n },\n {\n name: 'n1-highmem-96',\n label: '12XLarge',\n cpu: 96,\n memory: 624,\n costFactor: 4,\n },\n ],\n };\n\n const n1highcpu = {\n type: 'n1-highcpu',\n description:\n '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.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-highcpu-2',\n label: 'Medium',\n cpu: 2,\n memory: 1.8,\n costFactor: 1,\n },\n {\n name: 'n1-highcpu-4',\n label: 'Large',\n cpu: 4,\n memory: 3.6,\n costFactor: 2,\n },\n {\n name: 'n1-highcpu-8',\n label: 'XLarge',\n cpu: 8,\n memory: 7.2,\n costFactor: 2,\n },\n {\n name: 'n1-highcpu-16',\n label: '2XLarge',\n cpu: 16,\n memory: 14.4,\n costFactor: 3,\n },\n {\n name: 'n1-highcpu-32',\n label: '4XLarge',\n cpu: 32,\n memory: 28.8,\n costFactor: 4,\n },\n {\n name: 'n1-highcpu-64',\n label: '8XLarge',\n cpu: 64,\n memory: 57.6,\n costFactor: 4,\n },\n {\n name: 'n1-highcpu-96',\n label: '12XLarge',\n cpu: 96,\n memory: 86.4,\n costFactor: 4,\n },\n ],\n };\n\n const customMachine = {\n type: 'buildCustom',\n instanceTypes: [\n {\n name: 'n1buildCustom',\n nameRegex: /custom-\\d{1,2}-\\d{4,6}/,\n storage: {\n localSSDSupported: true,\n },\n },\n {\n name: 'e2buildCustom',\n nameRegex: /e2-custom-(\\d{1,2})-(\\d{3,6})/,\n storage: {\n localSSDSupported: false,\n },\n },\n {\n name: 'otherbuildCustom',\n nameRegex: /(.*)-?custom-(\\d{1,2})-(\\d{3,6})/,\n storage: {\n localSSDSupported: true,\n },\n },\n ],\n };\n\n const categories = [\n {\n type: 'general',\n label: 'General Purpose',\n families: [n1standard],\n icon: 'hdd',\n },\n {\n type: 'memory',\n label: 'High Memory',\n families: [n1highmem],\n icon: 'hdd',\n },\n {\n type: 'cpu',\n label: 'High CPU',\n families: [n1highcpu],\n icon: 'hdd',\n },\n {\n type: 'micro',\n label: 'Micro Utility',\n families: [f1micro],\n icon: 'hdd',\n },\n {\n type: 'custom',\n label: 'Custom Type',\n families: [],\n icon: 'asterisk',\n },\n {\n type: 'buildCustom',\n label: 'Build Custom',\n families: [customMachine],\n icon: 'wrench',\n },\n ];\n\n const getCategories = _.memoize(() => {\n const initializedCategories = _.cloneDeep(categories);\n return AccountService.getAllAccountDetailsForProvider('gce').then((accountDetails) => {\n // All GCE accounts have the same instance type disk defaults, so we can pick the first one.\n let instanceTypeDisks = _.get(accountDetails, '[0].instanceTypeDisks');\n if (_.isEmpty(instanceTypeDisks)) {\n instanceTypeDisks = GCE_INSTANCE_TYPE_DISK_DEFAULTS;\n }\n if (instanceTypeDisks) {\n const families = _.flatten(initializedCategories.map((category) => category.families));\n families.forEach((family) => {\n family.instanceTypes.forEach((instanceType) => {\n const diskDefaults = instanceTypeDisks.find(\n (instanceTypeDisk) => instanceTypeDisk.instanceType === instanceType.name,\n );\n if (diskDefaults) {\n const disks = diskDefaults.disks\n .map((disk) => {\n switch (disk.type) {\n case 'PD_SSD':\n return {\n type: 'pd-ssd',\n sizeGb: disk.sizeGb,\n };\n case 'PD_STANDARD':\n return {\n type: 'pd-standard',\n sizeGb: disk.sizeGb,\n };\n case 'LOCAL_SSD':\n return {\n type: 'local-ssd',\n sizeGb: 375,\n };\n default:\n $log.warn(`Disk type '${disk.type}' not supported.`);\n return null;\n }\n })\n .filter((disk) => !!disk);\n\n let size = 0;\n let count = 0;\n if (diskDefaults.supportsLocalSSD) {\n count = disks.filter((disk) => disk.type === 'local-ssd').length;\n size = 375;\n } else {\n // TODO(dpeach): This will render the disk defaults incorrectly for f1-micro and g1-small instance types\n // if the disk defaults set in Clouddriver have different sizes. Fixing it will require updating\n // the core instance type selector.\n // This logic will render the count of the largest disk.\n const persistentDisks = disks.filter((disk) => disk.type.startsWith('pd-'));\n if (persistentDisks.length) {\n size = persistentDisks.reduce((maxSizeGb, disk) => Math.max(maxSizeGb, disk.sizeGb), 0);\n count = persistentDisks.filter((disk) => disk.sizeGb === size).length;\n }\n }\n\n instanceType.storage = {\n localSSDSupported: diskDefaults.supportsLocalSSD,\n size: size,\n count: count,\n defaultSettings: { disks },\n };\n }\n });\n });\n }\n return initializedCategories;\n });\n });\n\n function getAllTypesByRegion() {\n if (cachedResult) {\n return $q.when(cachedResult);\n }\n\n return getCategories().then((categories) => {\n return _.chain(categories)\n .map('families')\n .flatten()\n .map('instanceTypes')\n .flatten()\n .map('name')\n .filter((name) => name !== 'n1buildCustom' && name !== 'e2buildCustom' && name !== 'otherbuildCustom')\n .value();\n });\n }\n\n function getAvailableTypesForLocations(locationToInstanceTypesMap, selectedLocations) {\n if (!locationToInstanceTypesMap || !selectedLocations || selectedLocations.length === 0) {\n console.error('Invalid input parameters');\n return [];\n }\n\n const availableTypes = selectedLocations\n .filter((location) => locationToInstanceTypesMap[location])\n .flatMap((location) => locationToInstanceTypesMap[location].instanceTypes || []);\n\n return availableTypes;\n }\n\n const getAvailableTypesForRegions = getAvailableTypesForLocations;\n\n const resolveInstanceTypeDetails = (instanceType) => {\n return {\n name: instanceType,\n storage: Object.assign({ isDefault: true }, SETTINGS.providers.gce.defaults.instanceTypeStorage),\n };\n };\n\n return {\n getCategories: getCategories,\n getAvailableTypesForRegions: getAvailableTypesForRegions,\n getAllTypesByRegion: getAllTypesByRegion,\n getAvailableTypesForLocations: getAvailableTypesForLocations,\n resolveInstanceTypeDetails: resolveInstanceTypeDetails,\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER =\n 'spinnaker.google.instance.multiInstance.task.transformer';\nexport const name = GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER, []).factory('gceMultiInstanceTaskTransformer', function () {\n // custom transformers for specific tasks,\n // e.g. \"rebootInstances\" needs an empty \"interestingHealthProviderNames\" array\n const transformers = {\n rebootInstances: (job) => {\n job.interestingHealthProviderNames = [];\n },\n };\n\n // adds the \"zone\" field to all jobs\n const transformAll = (instanceGroup, job) => {\n job.zone = instanceGroup.instances[0].availabilityZone;\n };\n\n const transformJob = (instanceGroup, job) => {\n transformAll(instanceGroup, job);\n if (transformers[job.type]) {\n transformers[job.type](job);\n }\n };\n\n return {\n transform: transformJob,\n };\n});\n","import type { IHttpInterceptor, IHttpPromiseCallbackArg, IHttpProvider } from 'angular';\nimport { module } from 'angular';\nimport { $http, $q } from 'ngimport';\nimport { SETTINGS } from '@spinnaker/core';\n\n/**\n * When a Cloud IAP (if enabled) session expires, refreshes session.\n */\n\nexport class IapInterceptor implements IHttpInterceptor {\n public responseError = <T>(response: IHttpPromiseCallbackArg<T>): PromiseLike<T> => {\n const { config, status } = response;\n\n if (status === 401 && SETTINGS.feature.iapRefresherEnabled) {\n return $http.get('/_gcp_iap/do_session_refresh').then(\n () => {\n return $http.get(config.url, config).then((result: T) => result);\n },\n // Reject with original response\n () => $q.reject(response),\n );\n }\n\n return $q.reject(response);\n };\n}\n\nexport const IAP_INTERCEPTOR = 'spinnaker.gce.iap.interceptor';\nmodule(IAP_INTERCEPTOR, [])\n .service('iapInterceptor', IapInterceptor)\n .config([\n '$httpProvider',\n ($httpProvider: IHttpProvider) => {\n $httpProvider.interceptors.push('iapInterceptor');\n },\n ]);\n","import { module } from 'angular';\n\nexport interface IGceLoadBalancerWizardConfig {\n label: string;\n createTemplateUrl: string;\n editTemplateUrl: string;\n controller: string;\n}\n\nexport interface IGceLoadBalancerToWizardMap {\n [loadBalancerType: string]: IGceLoadBalancerWizardConfig;\n}\n\nconst loadBalancerTypeToWizardMap: IGceLoadBalancerToWizardMap = {\n NETWORK: {\n label: 'Network',\n createTemplateUrl: require('../network/createLoadBalancer.html'),\n editTemplateUrl: require('../network/editLoadBalancer.html'),\n controller: 'gceCreateLoadBalancerCtrl',\n },\n HTTP: {\n label: 'HTTP(S)',\n createTemplateUrl: require('../http/createHttpLoadBalancer.html'),\n editTemplateUrl: require('../http/editHttpLoadBalancer.html'),\n controller: 'gceCreateHttpLoadBalancerCtrl',\n },\n INTERNAL_MANAGED: {\n label: 'Internal HTTP(S)',\n createTemplateUrl: require('../http/createHttpLoadBalancer.html'),\n editTemplateUrl: require('../http/editHttpLoadBalancer.html'),\n controller: 'gceCreateInternalHttpLoadBalancerCtrl',\n },\n INTERNAL: {\n label: 'Internal',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceInternalLoadBalancerCtrl',\n },\n SSL: {\n label: 'SSL',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceSslLoadBalancerCtrl',\n },\n TCP: {\n label: 'TCP',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceTcpLoadBalancerCtrl',\n },\n};\n\nexport const GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT = 'spinnaker.gce.loadBalancerTypeToWizard.constant';\n\nmodule(GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT, []).constant(\n 'loadBalancerTypeToWizardMap',\n loadBalancerTypeToWizardMap,\n);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService, IModalService } from 'angular-ui-bootstrap';\nimport { find, map } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\n\nimport type { IGceLoadBalancerToWizardMap } from './loadBalancerTypeToWizardMap.constant';\nimport { GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT } from './loadBalancerTypeToWizardMap.constant';\n\nclass GceLoadBalancerChoiceCtrl implements IController {\n public choices: string[];\n public choice = 'Network';\n\n public static $inject = ['$uibModal', '$uibModalInstance', 'application', 'loadBalancerTypeToWizardMap'];\n constructor(\n public $uibModal: IModalService,\n public $uibModalInstance: IModalInstanceService,\n private application: Application,\n private loadBalancerTypeToWizardMap: IGceLoadBalancerToWizardMap,\n ) {}\n\n public $onInit(): void {\n this.choices = map(this.loadBalancerTypeToWizardMap, (wizardConfig) => wizardConfig.label);\n }\n\n public choose(choice: string): void {\n const wizard = find(this.loadBalancerTypeToWizardMap, (wizardConfig) => wizardConfig.label === choice);\n this.$uibModalInstance.dismiss();\n this.$uibModal.open({\n templateUrl: wizard.createTemplateUrl,\n controller: `${wizard.controller} as ctrl`,\n size: 'lg',\n resolve: {\n application: () => this.application,\n loadBalancer: (): null => null,\n isNew: () => true,\n forPipelineConfig: () => false,\n },\n });\n }\n}\n\nexport const GCE_LOAD_BALANCER_CHOICE_MODAL = 'spinnaker.gce.loadBalancerChoice.modal.controller';\n\nmodule(GCE_LOAD_BALANCER_CHOICE_MODAL, [GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT]).controller(\n 'gceLoadBalancerChoiceCtrl',\n GceLoadBalancerChoiceCtrl,\n);\n","export class HttpLoadBalancerTemplate {\n public provider = 'gce';\n public stack = '';\n public detail = '';\n public region = 'global';\n public loadBalancerType = 'HTTP';\n public certificate = '';\n public defaultService: BackendServiceTemplate;\n public hostRules: HostRuleTemplate[] = [];\n public listeners: ListenerTemplate[] = [];\n\n constructor(public credentials: string | null) {}\n}\n\nexport class BackendServiceTemplate {\n public backends: any[] = [];\n public healthCheck: HealthCheckTemplate;\n public sessionAffinity = 'NONE';\n public affinityCookieTtlSec: number | null = null;\n}\n\nexport class HealthCheckTemplate {\n public requestPath = '/';\n public port = 80;\n public checkIntervalSec = 10;\n public timeoutSec = 5;\n public healthyThreshold = 10;\n public unhealthyThreshold = 2;\n}\n\nexport class PathMatcherTemplate {\n public pathRules: PathRuleTemplate[] = [];\n}\n\nexport class HostRuleTemplate {\n public hostPatterns: string[];\n public pathMatcher: PathMatcherTemplate = new PathMatcherTemplate();\n}\n\nexport class PathRuleTemplate {\n public paths: string[];\n}\n\nexport class ListenerTemplate {\n public name: string;\n public port: number;\n public certificate: string | null = null;\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\nimport { BackendServiceTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.backendService.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT, []).component(\n 'gceHttpLoadBalancerBackendServiceSelector',\n {\n bindings: {\n deleteService: '&',\n backendService: '=',\n command: '=',\n index: '=',\n },\n templateUrl: require('./backendService.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.backingData = this.command.backingData;\n this.loadBalancer = this.command.loadBalancer;\n const servicesByName = this.backingData.backendServicesKeyedByName;\n\n this.onBackendServiceSelect = (selectedBackendService) => {\n assign(selectedBackendService);\n this.command.onHealthCheckSelected(selectedBackendService.healthCheck, this.command);\n };\n\n this.toggleEditExisting = () => {\n this.editExisting = !this.editExisting;\n if (!this.editExisting) {\n const template = new BackendServiceTemplate();\n assign(template);\n } else {\n delete this.backendService.name;\n }\n };\n\n this.getAllHealthChecks = () => {\n const allHealthChecks = this.loadBalancer.healthChecks.concat(this.backingData.healthChecks);\n return _.chain(allHealthChecks)\n .filter((hc) => hc.account === this.loadBalancer.credentials || !hc.account)\n .map((hc) => hc.name)\n .uniq()\n .value();\n };\n\n this.getSessionAffinitySuggestions = () => {\n if (this.loadBalancer.loadBalancerType === 'HTTP') {\n return ['None', 'Client IP', 'Generated Cookie'];\n } else {\n return ['None', 'Client IP', 'Generated Cookie', 'Header Field', 'HTTP Cookie'];\n }\n };\n\n this.getAllServiceNames = () => {\n return this.command.backingData.backendServices\n .filter((service) => service.account === this.loadBalancer.credentials)\n .map((service) => service.name);\n };\n\n this.maxCookieTtl = 60 * 60 * 24; // One day.\n\n const getBackendServiceName = () => {\n return _.get(this, 'backendService.name');\n };\n\n if (servicesByName[getBackendServiceName()]) {\n this.editExisting = true;\n }\n\n const assign = (toAssign) => {\n this.loadBalancer.backendServices[this.index] = this.backendService = toAssign;\n };\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.basicSettings.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT, []).component(\n 'gceHttpLoadBalancerBasicSettings',\n {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./basicSettings.component.html'),\n controller: function () {\n this.$onInit = () => {\n const c = this.command;\n this.loadBalancer = c.loadBalancer;\n this.accounts = c.backingData.accounts;\n const loadBalancerMap = c.backingData.loadBalancerMap;\n\n this.getName = (loadBalancer, applicationName) => {\n const loadBalancerName = [applicationName, loadBalancer.stack || '', loadBalancer.detail || ''].join('-');\n return _.trimEnd(loadBalancerName, '-');\n };\n\n this.updateName = (lb, appName) => {\n lb.urlMapName = this.getName(lb, appName);\n };\n\n this.accountChanged = (account) => {\n this.existingLoadBalancerNames = _.get(loadBalancerMap, [account, 'urlMapNames']) || [];\n c.onAccountChange(c);\n };\n\n if (!this.loadBalancer.name) {\n this.updateName(this.loadBalancer, this.application.name);\n }\n\n this.existingLoadBalancerNames = _.get(loadBalancerMap, [this.loadBalancer.credentials, 'urlMapNames']) || [];\n };\n },\n },\n);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\n\nimport type { CacheInitializerService } from '@spinnaker/core';\nimport { CACHE_INITIALIZER_SERVICE, InfrastructureCaches } from '@spinnaker/core';\n\nclass GceCacheRefreshCtrl implements IController {\n public capitalizedKey: string;\n public depluralizedKey: string;\n public renderCompact: boolean;\n public refreshing = false;\n public tooltipTemplate = require('./cacheRefreshTooltip.html');\n private onRefresh: Function;\n private cacheKey: string;\n private cacheKeyAlias: string;\n\n public static $inject = ['cacheInitializer'];\n constructor(private cacheInitializer: CacheInitializerService) {}\n\n public $onInit(): void {\n const cacheKeyAlias = this.cacheKeyAlias || this.cacheKey;\n this.capitalizedKey = cacheKeyAlias[0].toUpperCase() + cacheKeyAlias.substring(1);\n this.depluralizedKey = cacheKeyAlias.substring(0, cacheKeyAlias.length - 1);\n }\n\n public getRefreshTime(): number {\n return InfrastructureCaches.get(this.cacheKey).getStats().ageMax;\n }\n\n public refresh(): void {\n this.refreshing = true;\n this.cacheInitializer\n .refreshCache(this.cacheKey)\n .then(() => this.onRefresh())\n .then(() => {\n this.refreshing = false;\n });\n }\n}\n\nconst gceCacheRefresh: IComponentOptions = {\n bindings: {\n onRefresh: '&',\n cacheKey: '@',\n cacheKeyAlias: '@',\n renderCompact: '<',\n },\n controller: GceCacheRefreshCtrl,\n templateUrl: require('./cacheRefresh.component.html'),\n};\n\nexport const GCE_CACHE_REFRESH = 'spinnaker.gce.cacheRefresh.component';\nmodule(GCE_CACHE_REFRESH, [CACHE_INITIALIZER_SERVICE]).component('gceCacheRefresh', gceCacheRefresh);\n","import { module } from 'angular';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\n\nexport interface IGceCertificate {\n account: string;\n name: string;\n provider: string;\n type: string;\n}\n\nexport class GceCertificateReader {\n public listCertificates(): PromiseLike<IGceCertificate[]> {\n return SearchService.search<IGceCertificate>(\n { q: '', type: 'sslCertificates', allowShortQuery: 'true' },\n InfrastructureCaches.get('certificates'),\n )\n .then((searchResults: ISearchResults<IGceCertificate>) => {\n if (searchResults && searchResults.results) {\n return searchResults.results.filter((certificate) => certificate.provider === 'gce');\n } else {\n return [];\n }\n })\n .catch(() => []);\n }\n}\n\nexport const GCE_CERTIFICATE_READER = 'spinnaker.gce.certificateReader.service';\nmodule(GCE_CERTIFICATE_READER, []).service('gceCertificateReader', GceCertificateReader);\n","import _ from 'lodash';\n\nexport interface IStringMap {\n [key: string]: string;\n}\n\nexport const sessionAffinityViewToModelMap: IStringMap = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n 'Client IP and protocol': 'CLIENT_IP_PROTO',\n 'Client IP, port and protocol': 'CLIENT_IP_PORT_PROTO',\n 'Header Field': 'HEADER_FIELD',\n 'HTTP Cookie': 'HTTP_COOKIE',\n 'Strong Cookie': 'STRONG_COOKIE_AFFINITY',\n};\n\nexport const sessionAffinityModelToViewMap = _.invert<IStringMap, IStringMap>(sessionAffinityViewToModelMap);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\n\nimport { sessionAffinityModelToViewMap, sessionAffinityViewToModelMap } from '../common/sessionAffinityNameMaps';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE = 'spinnaker.gce.deck.httpLoadBalancer.transformer';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE, []).factory(\n 'gceHttpLoadBalancerTransformer',\n function () {\n // SERIALIZE\n\n const keysToOmit = ['backendServices', 'healthChecks', 'listeners', 'stack', 'detail'];\n\n function serialize(originalCommand, originalLoadBalancer) {\n const command = _.cloneDeep(originalCommand);\n const { loadBalancer, backingData } = command;\n\n mapComponentNamesToObjects(loadBalancer, backingData);\n\n loadBalancer.hostRules = loadBalancer.hostRules.reduce((hostRules, hostRule) => {\n return hostRules.concat(\n hostRule.hostPatterns.map((hostPattern) => {\n return {\n hostPatterns: [hostPattern],\n pathMatcher: _.cloneDeep(hostRule.pathMatcher),\n };\n }),\n );\n }, []);\n\n const commands = buildCommandForEachListener(loadBalancer);\n\n if (originalLoadBalancer) {\n commands[0].listenersToDelete = _.chain(originalLoadBalancer.listeners)\n .map('name')\n .difference(_.map(originalCommand.loadBalancer.listeners, 'name'))\n .value();\n }\n\n return commands;\n }\n\n function mapComponentNamesToObjects(loadBalancer, backingData) {\n const unifiedHealthChecksKeyedByName = _.assign(\n backingData.healthChecksKeyedByName,\n _.keyBy(loadBalancer.healthChecks, 'name'),\n );\n const unifiedBackendServicesKeyedByName = _.assign(\n backingData.backendServicesKeyedByName,\n _.keyBy(loadBalancer.backendServices, 'name'),\n );\n\n _.forEach(unifiedBackendServicesKeyedByName, (service) => {\n service.healthCheck = unifiedHealthChecksKeyedByName[service.healthCheck];\n // Map human readable text back to session affinity code.\n service.sessionAffinity = sessionAffinityViewToModelMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n loadBalancer.defaultService = unifiedBackendServicesKeyedByName[loadBalancer.defaultService];\n mapBackendServiceNamesToObjects(loadBalancer.hostRules, unifiedBackendServicesKeyedByName);\n }\n\n function mapBackendServiceNamesToObjects(hostRules, servicesByName) {\n hostRules.forEach((hostRule) => {\n const p = hostRule.pathMatcher;\n\n p.defaultService = servicesByName[p.defaultService];\n\n p.pathRules.forEach((pathRule) => {\n pathRule.backendService = servicesByName[pathRule.backendService];\n });\n });\n }\n\n function buildCommandForEachListener(loadBalancer) {\n return loadBalancer.listeners.map((listener) => {\n let command = _.cloneDeep(loadBalancer);\n command = _.omit(command, keysToOmit);\n command.name = listener.name;\n command.portRange = listener.port;\n command.certificate = listener.certificate || null;\n command.ipAddress = listener.ipAddress;\n command.subnet = listener.subnet;\n\n return command;\n });\n }\n\n // DESERIALIZE\n\n function deserialize(loadBalancer) {\n const { backendServices, healthChecks, defaultService } = getHealthChecksAndBackendServices(loadBalancer);\n const hostRules = getHostRules(loadBalancer);\n const listeners = getListeners(loadBalancer);\n\n return {\n defaultService: defaultService.name,\n backendServices,\n healthChecks,\n hostRules,\n listeners,\n network: loadBalancer.network,\n region: loadBalancer.region,\n urlMapName: loadBalancer.urlMapName,\n credentials: loadBalancer.credentials || loadBalancer.account,\n };\n }\n\n function getHealthChecksAndBackendServices(loadBalancer) {\n const defaultService = loadBalancer.defaultService;\n let backendServices = [loadBalancer.defaultService];\n\n if (loadBalancer.hostRules) {\n backendServices = loadBalancer.hostRules.reduce((services, hostRule) => {\n services = services.concat(hostRule.pathMatcher.defaultService);\n return hostRule.pathMatcher.pathRules.reduce(\n (services, pathRule) => services.concat(pathRule.backendService),\n services,\n );\n }, backendServices);\n }\n\n const healthChecks = _.chain(backendServices).map('healthCheck').uniqBy('name').cloneDeep().value();\n healthChecks.forEach((hc) => {\n hc.account = loadBalancer.account || loadBalancer.credentials;\n });\n backendServices = _.uniqBy(backendServices, 'name');\n\n backendServices.forEach((service) => {\n // Map health check to health check name so we don't have to deal with object references\n service.healthCheck = service.healthCheck.name;\n // Map session affinity code to more human readable text.\n service.sessionAffinity = sessionAffinityModelToViewMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n return { backendServices, healthChecks, defaultService };\n }\n\n function getHostRules(loadBalancer) {\n return mapBackendServicesToNames(_.cloneDeep(loadBalancer.hostRules));\n }\n\n function getListeners(loadBalancer) {\n loadBalancer.listeners.forEach((listener) => {\n const { stack, freeFormDetails } = NameUtils.parseLoadBalancerName(listener.name);\n listener.stack = stack;\n listener.detail = freeFormDetails;\n listener.created = true;\n });\n\n return loadBalancer.listeners;\n }\n\n function mapBackendServicesToNames(hostRules) {\n // Map backend service to backend service name so we don't have to deal with object references\n hostRules.forEach((hostRule) => {\n const p = hostRule.pathMatcher;\n\n p.defaultService = p.defaultService.name;\n\n p.pathRules.forEach((pathRule) => {\n pathRule.backendService = pathRule.backendService.name;\n });\n });\n\n return hostRules;\n }\n\n return { serialize, deserialize };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LOAD_BALANCER_READ_SERVICE, NetworkReader, SubnetReader } from '@spinnaker/core';\n\nimport { GCE_ADDRESS_READER } from '../../../address/address.reader';\nimport { GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER } from '../../../backendService/backendService.reader';\nimport { GCE_CERTIFICATE_READER } from '../../../certificate/certificate.reader';\nimport { sessionAffinityModelToViewMap } from '../common/sessionAffinityNameMaps';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../../common/xpnNaming.gce.service';\nimport { GCEProviderSettings } from '../../../gce.settings';\nimport { GCE_HEALTH_CHECK_READER } from '../../../healthCheck/healthCheck.read.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../httpLoadBalancerUtils.service';\nimport { HttpLoadBalancerTemplate, ListenerTemplate } from './templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from './transformer.service';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE =\n 'spinnaker.deck.gce.httpLoadBalancer.backing.service';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE, [\n GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER,\n GCE_CERTIFICATE_READER,\n LOAD_BALANCER_READ_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GCE_ADDRESS_READER,\n GCE_HEALTH_CHECK_READER,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).factory('gceHttpLoadBalancerCommandBuilder', [\n '$q',\n 'gceHttpLoadBalancerUtils',\n 'gceBackendServiceReader',\n 'gceCertificateReader',\n 'gceHealthCheckReader',\n 'gceHttpLoadBalancerTransformer',\n 'loadBalancerReader',\n 'gceAddressReader',\n 'gceXpnNamingService',\n function (\n $q,\n gceHttpLoadBalancerUtils,\n gceBackendServiceReader,\n gceCertificateReader,\n gceHealthCheckReader,\n gceHttpLoadBalancerTransformer,\n loadBalancerReader,\n gceAddressReader,\n gceXpnNamingService,\n ) {\n function buildCommand({ originalLoadBalancer, isNew, isInternal }) {\n originalLoadBalancer = _.cloneDeep(originalLoadBalancer);\n\n return buildBackingDataAndLoadBalancer(originalLoadBalancer, isNew, isInternal).then(\n ({ backingData, loadBalancer }) => {\n return {\n backingData,\n getAllBackendServices,\n isNew,\n loadBalancer,\n onAccountChange,\n onBackendServiceRefresh,\n onBackendServiceSelected,\n onRegionSelected,\n onCertificateRefresh,\n onHealthCheckRefresh,\n onHealthCheckSelected,\n getUnusedBackendServices,\n removeUnusedBackendServices,\n getUnusedHealthChecks,\n removeUnusedHealthChecks,\n onAddressRefresh,\n };\n },\n );\n }\n\n function buildBackingDataAndLoadBalancer(originalLoadBalancer, isNew, isInternal) {\n let region = null;\n if (isInternal) {\n region = originalLoadBalancer ? originalLoadBalancer.region : GCEProviderSettings.defaults.region;\n }\n return buildBackingData(region).then((backingData) => {\n const loadBalancer = buildLoadBalancer(isNew, originalLoadBalancer, isInternal);\n\n unifyDataSources(backingData, loadBalancer);\n\n return { backingData, loadBalancer };\n });\n }\n\n function buildBackingData(region) {\n const promises = {\n backendServices: getBackendServices(region),\n healthChecks: getHealthChecks(region),\n certificates: getCertificates(),\n loadBalancerMap: getLoadBalancerMap(region),\n networks: getNetworks(),\n subnets: SubnetReader.listSubnetsByProvider('gce'),\n addresses: gceAddressReader.listAddresses(region),\n accounts: getAccounts(),\n };\n return $q.all(promises);\n }\n\n function buildLoadBalancer(isNew, loadBalancer, isInternal) {\n const loadBalancerTemplate = new HttpLoadBalancerTemplate(GCEProviderSettings.defaults.account || null);\n if (isInternal) {\n loadBalancerTemplate.loadBalancerType = 'INTERNAL_MANAGED';\n loadBalancerTemplate.isInternal = true;\n if (loadBalancer) {\n loadBalancer.network = gceXpnNamingService.decorateXpnResourceIfNecessary(\n loadBalancer.project,\n loadBalancer.network,\n );\n loadBalancer.listeners.forEach((listener) => {\n listener.subnet = gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, listener.subnet);\n });\n }\n loadBalancerTemplate.region = GCEProviderSettings.defaults.region;\n loadBalancerTemplate.network = 'default';\n } else {\n loadBalancerTemplate.loadBalancerType = 'HTTP';\n loadBalancerTemplate.isInternal = false;\n }\n\n let mixinData;\n if (isNew) {\n mixinData = {\n backendServices: [],\n listeners: [new ListenerTemplate()],\n healthChecks: [],\n };\n } else {\n mixinData = gceHttpLoadBalancerTransformer.deserialize(loadBalancer);\n }\n\n const loadBalancerData = _.assign(loadBalancerTemplate, mixinData);\n return loadBalancerData;\n }\n\n function unifyDataSources(backingData, loadBalancer) {\n setAccount(backingData.accounts, loadBalancer);\n removeExistingListenersFromBackingData(backingData, loadBalancer.listeners);\n\n // update backing data with any values coming from load balancer -- they are more up to date.\n const lbHealthCheckMap = _.keyBy(loadBalancer.healthChecks, 'name');\n const backingDataHealthCheckMap = _.keyBy(backingData.healthChecks, 'name');\n\n backingData.healthChecksKeyedByName = _.assign(backingDataHealthCheckMap, _.cloneDeep(lbHealthCheckMap));\n backingData.healthChecksKeyedByNameCopy = _.cloneDeep(backingDataHealthCheckMap);\n backingData.healthChecks = _.map(backingDataHealthCheckMap, _.identity);\n\n const lbBackendServicesMap = _.keyBy(loadBalancer.backendServices, 'name');\n const backingDataBackendServiceMap = _.keyBy(backingData.backendServices, 'name');\n\n backingData.backendServicesKeyedByName = _.assign(\n backingDataBackendServiceMap,\n _.cloneDeep(lbBackendServicesMap),\n );\n backingData.backendServicesKeyedByNameCopy = _.cloneDeep(backingDataBackendServiceMap);\n backingData.backendServices = _.map(backingDataBackendServiceMap, _.identity);\n\n backingData.regions = backingData.accounts\n .find((account) => account.name === loadBalancer.credentials)\n .regions.map((region) => region.name);\n\n backingData.subnetMap = _.groupBy(backingData.subnets, 'network');\n backingData.internalHttpLbNetworks = backingData.networks.filter((network) =>\n backingData.subnetMap[network].find((subnet) => subnet.purpose === 'INTERNAL_HTTPS_LOAD_BALANCER'),\n );\n }\n\n function removeExistingListenersFromBackingData(backingData, existingListeners) {\n const accountNames = backingData.accounts.map((account) => account.name);\n\n accountNames.forEach((accountName) => {\n if (_.has(backingData, ['loadBalancerMap', accountName, 'listeners'])) {\n backingData.loadBalancerMap[accountName].listeners = _.without(\n backingData.loadBalancerMap[accountName].listeners,\n ...existingListeners.map((listener) => listener.name),\n );\n }\n });\n }\n\n function setAccount(accounts, loadBalancerData) {\n const accountNames = _.map(accounts, 'name');\n const credentials = _.get(loadBalancerData, 'credentials.name') || loadBalancerData.credentials;\n\n if (!accountNames.includes(credentials)) {\n loadBalancerData.credentials = _.first(accountNames);\n }\n }\n\n function getHealthChecks(region) {\n return gceHealthCheckReader.listHealthChecks().then((healthChecks) => {\n return healthChecks.filter((healthCheck) => !region || healthCheck.region === region);\n });\n }\n\n function getNetworks() {\n return NetworkReader.listNetworksByProvider('gce').then((networks) => {\n return _.chain(networks).map('name').compact().uniq().value();\n });\n }\n\n function getBackendServices(region) {\n const kind = region ? 'regionBackendService' : 'globalBackendService';\n return gceBackendServiceReader.listBackendServices(kind).then((backendServices) => {\n backendServices = backendServices.filter((backendService) => !region || backendService.region === region);\n backendServices.forEach((service) => {\n service.healthCheck = service.healthCheckLink.split('/').pop();\n\n const ttlIsDefined = typeof service.affinityCookieTtlSec === 'string';\n service.affinityCookieTtlSec = ttlIsDefined ? Number(service.affinityCookieTtlSec) : null;\n\n service.sessionAffinity = sessionAffinityModelToViewMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n return backendServices;\n });\n }\n\n function getCertificates() {\n return gceCertificateReader.listCertificates();\n }\n\n function getAccounts() {\n return AccountService.listAccounts('gce');\n }\n\n function getLoadBalancerMap(region) {\n return loadBalancerReader.listLoadBalancers('gce').then((lbs) => {\n return _.chain(lbs)\n .map((lb) => lb.accounts)\n .flatten()\n .groupBy('name')\n .mapValues((accounts) => {\n const loadBalancers = _.chain(accounts)\n .map((a) => a.regions)\n .flatten()\n .filter((region) => region.name === (region || gceHttpLoadBalancerUtils.REGION))\n .map((region) => region.loadBalancers)\n .flatten()\n .value();\n\n const urlMapNames = _.chain(loadBalancers).map('urlMapName').uniq().value();\n const listeners = _.chain(loadBalancers).map('name').uniq().value();\n\n return { urlMapNames, listeners };\n })\n .valueOf();\n });\n }\n\n function onHealthCheckRefresh(command) {\n getHealthChecks(command.loadBalancer.region).then((healthChecks) => {\n command.backingData.healthChecks = healthChecks;\n command.backingData.healthChecksKeyedByName = _.keyBy(healthChecks, 'name');\n command.backingData.healthChecksKeyedByNameCopy = _.cloneDeep(command.backingData.healthChecksKeyedByName);\n\n command.loadBalancer.healthChecks = command.loadBalancer.healthChecks.map((hc) => {\n const updated = command.backingData.healthChecksKeyedByName[_.get(hc, 'name')];\n if (updated) {\n return _.cloneDeep(updated);\n } else {\n return hc;\n }\n });\n });\n }\n\n function onCertificateRefresh(command) {\n getCertificates().then((certificates) => {\n command.backingData.certificates = certificates;\n });\n }\n\n function onBackendServiceRefresh(command) {\n getBackendServices(command.loadBalancer.region).then((backendServices) => {\n command.backingData.backendServices = backendServices;\n command.backingData.backendServicesKeyedByName = _.keyBy(backendServices, 'name');\n command.backingData.backendServicesKeyedByNameCopy = _.cloneDeep(\n command.backingData.backendServicesKeyedByName,\n );\n\n command.loadBalancer.backendServices = command.loadBalancer.backendServices.map((service) => {\n const updated = command.backingData.backendServicesKeyedByName[_.get(service, 'name')];\n if (updated) {\n return _.cloneDeep(updated);\n } else {\n return service;\n }\n });\n });\n }\n\n function onRegionSelected(command) {\n buildBackingData(command.loadBalancer.region).then((backingData) => {\n Object.assign(command.backingData, backingData);\n unifyDataSources(command.backingData, command.loadBalancer);\n });\n }\n\n function onHealthCheckSelected(selectedName, command) {\n if (!command.loadBalancer.healthChecks.find((hc) => _.get(hc, 'name') === selectedName)) {\n const selectedObject = command.backingData.healthChecksKeyedByName[selectedName];\n if (selectedObject) {\n command.loadBalancer.healthChecks.push(selectedObject);\n }\n }\n }\n\n function onBackendServiceSelected(selectedName, command) {\n if (!command.loadBalancer.backendServices.find((service) => service.name === selectedName)) {\n const selectedObject = command.backingData.backendServicesKeyedByName[selectedName];\n command.loadBalancer.backendServices.push(selectedObject);\n if (selectedObject.healthCheck) {\n onHealthCheckSelected(selectedObject.healthCheck, command);\n }\n }\n }\n\n function getAllBackendServices(command) {\n const allBackendServices = command.loadBalancer.backendServices.concat(command.backingData.backendServices);\n return _.chain(allBackendServices)\n .filter((service) => {\n return (\n service.account === command.loadBalancer.credentials || service.account === command.loadBalancer.account\n );\n })\n .map('name')\n .compact()\n .uniq()\n .value();\n }\n\n function getUnusedHealthChecks(command) {\n return _.chain(command.loadBalancer.healthChecks)\n .map('name')\n .difference(_.map(command.loadBalancer.backendServices, 'healthCheck'))\n .compact()\n .uniq()\n .value();\n }\n\n function getUnusedBackendServices(command) {\n const defaultService = command.loadBalancer.defaultService;\n const hostRuleServices = _.map(command.loadBalancer.hostRules, 'pathMatcher.defaultService');\n const pathRuleServices = _.chain(command.loadBalancer.hostRules)\n .map('pathMatcher.pathRules')\n .flatten()\n .map('backendService')\n .value();\n\n const usedServices = _.chain([defaultService, ...hostRuleServices, ...pathRuleServices])\n .compact()\n .uniq()\n .value();\n\n return _.chain(command.loadBalancer.backendServices)\n .map('name')\n .difference(usedServices)\n .compact()\n .uniq()\n .value();\n }\n\n function removeUnusedBackendServices(command) {\n const unusedBackendServices = getUnusedBackendServices(command);\n command.loadBalancer.backendServices = command.loadBalancer.backendServices.filter(\n (service) => !unusedBackendServices.includes(service.name),\n );\n }\n\n function removeUnusedHealthChecks(command) {\n const unusedHealthChecks = getUnusedHealthChecks(command);\n command.loadBalancer.healthChecks = command.loadBalancer.healthChecks.filter(\n (healthCheck) => !unusedHealthChecks.includes(healthCheck.name),\n );\n }\n\n function onAccountChange(command) {\n command.loadBalancer.backendServices = [];\n command.loadBalancer.healthChecks = [];\n command.loadBalancer.hostRules = [];\n command.loadBalancer.listeners = [new ListenerTemplate()];\n command.loadBalancer.defaultService = null;\n command.backingData.regions = command.backingData.accounts\n .find((account) => account.name === command.loadBalancer.credentials)\n .regions.map((region) => region.name);\n }\n\n function onAddressRefresh(command) {\n gceAddressReader.listAddresses('global').then((addresses) => {\n command.backingData.addresses = addresses;\n });\n }\n\n return { buildCommand };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRules.service';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE, []).factory(\n 'hostAndPathRulesService',\n function () {\n function buildTable(hostRules, defaultService) {\n const defaultRow = buildRow('Any unmatched (default)', 'Any unmatched (default)', defaultService.name);\n if (hostRules.length === 0) {\n return [defaultRow];\n }\n\n return hostRules.reduce(\n (rows, hostRule) => {\n const [hostPattern] = hostRule.hostPatterns;\n const { defaultService, pathRules } = hostRule.pathMatcher;\n\n rows.push(buildRow(hostPattern, '/*', defaultService.name));\n\n return rows.concat(\n pathRules.reduce((rows, pathRule) => {\n const { backendService, paths } = pathRule;\n return rows.concat(paths.map((path) => buildRow(hostPattern, path, backendService.name)));\n }, []),\n );\n },\n [defaultRow],\n );\n }\n\n function buildRow(hostPattern, path, backend) {\n return { hostPattern, path, backend };\n }\n\n return { buildTable };\n },\n);\n","import { module } from 'angular';\n\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE } from './hostAndPathRules.service';\n\n('use strict');\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRules.controller';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER, [\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE,\n]).controller('gceHostAndPathRulesCtrl', [\n 'hostRules',\n 'defaultService',\n 'loadBalancerName',\n '$uibModalInstance',\n 'hostAndPathRulesService',\n function (hostRules, defaultService, loadBalancerName, $uibModalInstance, hostAndPathRulesService) {\n this.table = hostAndPathRulesService.buildTable(hostRules, defaultService);\n this.loadBalancerName = loadBalancerName;\n this.close = $uibModalInstance.dismiss;\n },\n]);\n","import { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER } from './hostAndPathRules.controller';\n\n('use strict');\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRulesButton.component';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER,\n]).component('gceHostAndPathRulesButton', {\n bindings: {\n hostRules: '=',\n defaultService: '=',\n loadBalancerName: '=',\n },\n template: '<a href ng-click=\"$ctrl.viewHostAndPathRules()\">View Host and Path Rules</a>',\n controller: [\n '$uibModal',\n function ($uibModal) {\n this.viewHostAndPathRules = () => {\n $uibModal.open({\n templateUrl: require('./hostAndPathRules.modal.html'),\n controller: 'gceHostAndPathRulesCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n hostRules: () => this.hostRules,\n defaultService: () => this.defaultService,\n loadBalancerName: () => this.loadBalancerName,\n },\n });\n };\n },\n ],\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { HealthCheckTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT =\n 'spinnaker.deck.httpLoadBalancer.healthCheck.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT, []).component(\n 'gceHttpLoadBalancerHealthCheck',\n {\n bindings: {\n command: '=',\n deleteHealthCheck: '&',\n healthCheck: '=',\n index: '=',\n },\n templateUrl: require('./healthCheck.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.max = Number.MAX_SAFE_INTEGER;\n this.backingData = this.command.backingData;\n this.loadBalancer = this.command.loadBalancer;\n const healthChecksByName = this.backingData.healthChecksKeyedByName;\n\n this.onHealthCheckSelect = (selectedHealthCheck) => {\n assign(selectedHealthCheck);\n };\n\n this.getAllHealthCheckNames = () => {\n return this.command.backingData.healthChecks\n .filter((hc) => hc.account === this.loadBalancer.credentials)\n .map((hc) => hc.name);\n };\n\n this.toggleEditExisting = () => {\n this.editExisting = !this.editExisting;\n if (!this.editExisting) {\n assign(new HealthCheckTemplate());\n } else {\n delete this.healthCheck.name;\n }\n };\n\n const assign = (toAssign) => {\n this.loadBalancer.healthChecks[this.index] = this.healthCheck = toAssign;\n };\n\n const getHealthCheckName = () => {\n return _.get(this, 'healthCheck.name');\n };\n\n this.onProtocolChange = () => {\n if (this.healthCheck.healthCheckType !== this.healthCheckType) {\n assign(Object.assign({}, new HealthCheckTemplate(), { healthCheckType: this.healthCheckType }));\n }\n };\n\n if (healthChecksByName[getHealthCheckName()]) {\n this.editExisting = true;\n }\n\n this.healthCheckType = this.healthCheck.healthCheckType;\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.pathRule.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT, []).component('gcePathRule', {\n bindings: {\n pathRule: '=',\n command: '=',\n index: '=',\n deletePathRule: '&',\n },\n templateUrl: require('./pathRule.component.html'),\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT } from '../pathRule/pathRule.component';\nimport { PathRuleTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.hostRule.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT, [\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT,\n]).component('gceHostRule', {\n bindings: {\n hostRule: '=',\n index: '=',\n command: '=',\n deleteHostRule: '&',\n },\n templateUrl: require('./hostRule.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.loadBalancer = this.command.loadBalancer;\n const pathRules = this.hostRule.pathMatcher.pathRules;\n\n this.addPathRule = () => {\n pathRules.push(new PathRuleTemplate());\n };\n\n this.deletePathRule = (index) => {\n pathRules.splice(index, 1);\n };\n };\n },\n});\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { InfrastructureCaches, TaskExecutor } from '@spinnaker/core';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE =\n 'spinnaker.deck.gce.httpLoadBalancer.write.service';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE, [])\n .factory('gceHttpLoadBalancerWriter', function () {\n function upsertLoadBalancers(loadBalancers, application, descriptor) {\n loadBalancers.forEach((lb) => {\n angular.extend(lb, {\n type: 'upsertLoadBalancer',\n cloudProvider: 'gce',\n loadBalancerName: lb.name,\n });\n });\n\n InfrastructureCaches.clearCache('backendServices');\n InfrastructureCaches.clearCache('healthChecks');\n\n return TaskExecutor.executeTask({\n job: loadBalancers,\n application: application,\n description: `${descriptor} Load Balancer: ${loadBalancers[0].urlMapName}`,\n });\n }\n\n function deleteLoadBalancers(loadBalancer, application, params = {}) {\n const job = {\n type: 'deleteLoadBalancer',\n loadBalancerName: loadBalancer.listeners[0].name,\n regions: [loadBalancer.region || 'global'],\n region: loadBalancer.region || 'global',\n loadBalancerType: loadBalancer.loadBalancerType,\n cloudProvider: loadBalancer.provider,\n credentials: loadBalancer.account,\n };\n\n angular.extend(job, params);\n\n InfrastructureCaches.clearCache('backendServices');\n InfrastructureCaches.clearCache('healthChecks');\n\n return TaskExecutor.executeTask({\n job: [job],\n application: application,\n description: `Delete load balancer: ${loadBalancer.urlMapName} in ${loadBalancer.account}:global`,\n });\n }\n\n return { upsertLoadBalancers, deleteLoadBalancers };\n });\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IGceAddress } from '../../../address/address.reader';\n\nclass GceAddressSelectorCtrl implements IController {\n public selectedAddress: IGceAddress;\n public addressList: IGceAddress[];\n public account: string;\n // The IP address string is the only piece that we can expect a parent resource to keep track of.\n // We'll try to match this IP to a full address map.\n private initialIpAddress: string;\n\n public $onInit(): void {\n this.selectedAddress = this.addressList.find((address) => address.address === this.initialIpAddress);\n if (!this.selectedAddress) {\n this.selectedAddress = { address: this.initialIpAddress, account: this.account };\n }\n }\n}\n\nconst gceAddressSelector: IComponentOptions = {\n bindings: {\n initialIpAddress: '<',\n addressList: '<',\n readOnly: '<',\n onAddressSelect: '&',\n account: '<',\n },\n template: `\n <ui-select on-select=\"$ctrl.onAddressSelect({address: $ctrl.selectedAddress})\"\n ng-disabled=\"$ctrl.readOnly\"\n ng-model=\"$ctrl.selectedAddress\"\n class=\"form-control input-sm\">\n <ui-select-match allow-clear>\n {{$ctrl.selectedAddress.address}} <span ng-if=\"$ctrl.selectedAddress.name\">({{$ctrl.selectedAddress.name}})</span>\n </ui-select-match>\n <ui-select-choices repeat=\"address in $ctrl.addressList | filter: {name: $select.search, account: $ctrl.account}\">\n <span>\n {{address.address}} <span ng-if=\"address.name\">({{address.name}})</span> <br>\n </span>\n </ui-select-choices>\n </ui-select>`,\n controller: GceAddressSelectorCtrl,\n};\n\nexport const GCE_ADDRESS_SELECTOR = 'spinnaker.gce.addressSelector.component';\nmodule(GCE_ADDRESS_SELECTOR, []).component('gceAddressSelector', gceAddressSelector);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GCE_ADDRESS_SELECTOR } from '../../common/addressSelector.component';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.listener.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT, [GCE_ADDRESS_SELECTOR]).component(\n 'gceListener',\n {\n bindings: {\n command: '=',\n listener: '=',\n deleteListener: '&',\n index: '=',\n application: '=',\n },\n templateUrl: require('./listener.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.certificates = this.command.backingData.certificates;\n const loadBalancerMap = this.command.backingData.loadBalancerMap;\n\n this.getName = (listener, applicationName) => {\n const listenerName = [applicationName, listener.stack || '', listener.detail || ''].join('-');\n return _.trimEnd(listenerName, '-');\n };\n\n this.getCertificates = () => {\n return this.command.backingData.certificates\n .filter((certificate) => certificate.account === this.command.loadBalancer.credentials)\n .map((certificate) => certificate.name);\n };\n\n this.getSubnets = () => {\n const ret = this.command.backingData.subnetMap[this.command.loadBalancer.network]\n .filter((subnet) => subnet.region === this.command.loadBalancer.region)\n .map((subnet) => subnet.name);\n return _.uniq(ret);\n };\n\n this.getInternalAddresses = () => {\n return this.command.backingData.addresses.filter(\n (address) =>\n address.addressType === 'INTERNAL' && address.subnetwork.split('/').pop() === this.listener.subnet,\n );\n };\n\n this.updateName = (listener, appName) => {\n listener.name = this.getName(listener, appName);\n };\n\n this.localListenerHasSameName = () => {\n return (\n this.command.loadBalancer.listeners.filter((listener) => listener.name === this.listener.name).length > 1\n );\n };\n\n this.existingListenerNames = () => {\n return _.get(loadBalancerMap, [this.command.loadBalancer.credentials, 'listeners']);\n };\n\n this.isHttps = (port) => port === 443 || port === '443';\n\n if (!this.listener.name) {\n this.updateName(this.listener, this.application.name);\n }\n\n this.onAddressSelect = (address) => {\n if (address) {\n this.listener.ipAddress = address.address;\n } else {\n this.listener.ipAddress = null;\n }\n };\n };\n },\n },\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT } from './backendService/backendService.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT } from './basicSettings/basicSettings.component';\nimport { GCE_CACHE_REFRESH } from '../../../cache/cacheRefresh.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE } from './commandBuilder.service';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from '../../details/hostAndPathRules/hostAndPathRulesButton.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT } from './healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT } from './hostRule/hostRule.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from './httpLoadBalancer.write.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT } from './listeners/listener.component';\nimport { BackendServiceTemplate, HealthCheckTemplate, HostRuleTemplate, ListenerTemplate } from './templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from './transformer.service';\n\nimport './httpLoadBalancerWizard.component.less';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.createHttp.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP,\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GCE_CACHE_REFRESH,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n]).controller('gceCreateHttpLoadBalancerCtrl', [\n '$scope',\n '$uibModal',\n '$uibModalInstance',\n 'application',\n 'loadBalancer',\n 'isNew',\n 'gceHttpLoadBalancerWriter',\n '$state',\n 'wizardSubFormValidation',\n 'gceHttpLoadBalancerCommandBuilder',\n 'gceHttpLoadBalancerTransformer',\n function (\n $scope,\n $uibModal,\n $uibModalInstance,\n application,\n loadBalancer,\n isNew,\n gceHttpLoadBalancerWriter,\n $state,\n wizardSubFormValidation,\n gceHttpLoadBalancerCommandBuilder,\n gceHttpLoadBalancerTransformer,\n ) {\n this.application = application;\n this.isNew = isNew;\n this.modalDescriptor = this.isNew\n ? 'Create HTTP(S) load balancer'\n : `Edit ${loadBalancer.name}:global:${loadBalancer.account}`;\n\n this.pages = {\n location: require('./basicSettings/basicSettings.html'),\n listeners: require('./listeners/listeners.html'),\n defaultService: require('./defaultService/defaultService.html'),\n backendServices: require('./backendService/backendServices.html'),\n healthChecks: require('./healthCheck/healthChecks.html'),\n hostRules: require('./hostRule/hostRules.html'),\n };\n\n const keyToTemplateMap = {\n backendServices: BackendServiceTemplate,\n healthChecks: HealthCheckTemplate,\n hostRules: HostRuleTemplate,\n listeners: ListenerTemplate,\n };\n\n this.add = (key) => {\n this.command.loadBalancer[key].push(new keyToTemplateMap[key]());\n };\n\n this.remove = (key, index) => {\n this.command.loadBalancer[key].splice(index, 1);\n };\n\n const onApplicationRefresh = () => {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n\n const lb = this.command.loadBalancer;\n const newStateParams = {\n name: lb.urlMapName,\n accountId: lb.credentials,\n region: lb.region,\n provider: 'gce',\n };\n\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n };\n\n const onTaskComplete = () => {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n };\n\n $scope.taskMonitor = this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n this.submit = () => {\n const serializedCommands = gceHttpLoadBalancerTransformer.serialize(this.command, loadBalancer);\n const descriptor = this.isNew ? 'Create' : 'Update';\n\n this.taskMonitor.submit(() =>\n gceHttpLoadBalancerWriter.upsertLoadBalancers(serializedCommands, application, descriptor),\n );\n };\n\n gceHttpLoadBalancerCommandBuilder.buildCommand({ isNew, originalLoadBalancer: loadBalancer }).then((command) => {\n this.command = command;\n\n wizardSubFormValidation\n .config({ scope: $scope, form: 'form' })\n .register({ page: 'location', subForm: 'location' })\n .register({\n page: 'listeners',\n subForm: 'listeners',\n validators: [\n {\n watchString: 'ctrl.command.loadBalancer.listeners',\n validator: (listeners) => listeners.length > 0,\n collection: true,\n },\n ],\n })\n .register({ page: 'default-service', subForm: 'defaultService' })\n .register({ page: 'health-checks', subForm: 'healthChecks' })\n .register({ page: 'backend-services', subForm: 'backendServices' })\n .register({ page: 'host-rules', subForm: 'hostRules' });\n });\n\n this.cancel = $uibModalInstance.dismiss;\n },\n]);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport { trimEnd } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\nimport { InfrastructureCaches } from '@spinnaker/core';\nimport type { IGceLoadBalancer } from '../../../domain/loadBalancer';\n\nexport class CommonGceLoadBalancerCtrl {\n public static $inject = ['$scope', 'application', '$uibModalInstance', '$state'];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private $state: StateService,\n ) {}\n\n public onTaskComplete(loadBalancer: IGceLoadBalancer): void {\n InfrastructureCaches.clearCache('healthChecks');\n this.application.getDataSource('loadBalancers').refresh();\n this.application\n .getDataSource('loadBalancers')\n .onNextRefresh(this.$scope, () => this.onApplicationRefresh(loadBalancer));\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public getName(lb: IGceLoadBalancer, application: Application): string {\n const loadBalancerName = [application.name, lb.stack || '', lb.detail || ''].join('-');\n return trimEnd(loadBalancerName, '-');\n }\n\n private onApplicationRefresh(loadBalancer: IGceLoadBalancer): void {\n // If the user has already closed the modal, do not navigate to the new details view\n if (this.$scope.$$destroyed) {\n return;\n }\n this.$uibModalInstance.close();\n\n const newStateParams = {\n name: loadBalancer.loadBalancerName,\n accountId: loadBalancer.credentials,\n region: loadBalancer.region,\n provider: 'gce',\n };\n\n if (!this.$state.includes('**.loadBalancerDetails')) {\n this.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n this.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n}\n","import { module } from 'angular';\nimport _ from 'lodash';\n\nimport type { IAccount, ILoadBalancersByAccount, INetwork, ISubnet, LoadBalancerReader } from '@spinnaker/core';\nimport { AccountService, LOAD_BALANCER_READ_SERVICE, NetworkReader, SubnetReader } from '@spinnaker/core';\nimport type { GceCertificateReader, IGceCertificate } from '../../../certificate/certificate.reader';\nimport { GCE_CERTIFICATE_READER } from '../../../certificate/certificate.reader';\nimport type { IGceHealthCheck } from '../../../domain/healthCheck';\nimport type { GceHealthCheckReader } from '../../../healthCheck/healthCheck.read.service';\nimport { GCE_HEALTH_CHECK_READER } from '../../../healthCheck/healthCheck.read.service';\n\nexport class GceCommonLoadBalancerCommandBuilder {\n private dataFetchers: { [key: string]: Function } = {\n existingLoadBalancerNamesByAccount: (): PromiseLike<_.Dictionary<any>> => {\n return this.loadBalancerReader.listLoadBalancers('gce').then((loadBalancerList: ILoadBalancersByAccount[]) => {\n return _.chain(loadBalancerList)\n .map('accounts')\n .flatten()\n .groupBy('name') // account name\n .mapValues((regionWrappers) =>\n _.chain(regionWrappers)\n .map('regions')\n .flatten()\n .map('loadBalancers')\n .flatten()\n .map('name') // load balancer name\n .value(),\n )\n .value();\n });\n },\n accounts: (): PromiseLike<IAccount[]> => AccountService.listAccounts('gce'),\n networks: (): PromiseLike<INetwork[]> => NetworkReader.listNetworksByProvider('gce'),\n subnets: (): PromiseLike<ISubnet[]> => SubnetReader.listSubnetsByProvider('gce'),\n healthChecks: (): PromiseLike<IGceHealthCheck[]> => this.gceHealthCheckReader.listHealthChecks(),\n certificates: (): PromiseLike<IGceCertificate[]> => this.gceCertificateReader.listCertificates(),\n };\n\n public static $inject = ['$q', 'loadBalancerReader', 'gceHealthCheckReader', 'gceCertificateReader'];\n constructor(\n private $q: ng.IQService,\n private loadBalancerReader: LoadBalancerReader,\n private gceHealthCheckReader: GceHealthCheckReader,\n private gceCertificateReader: GceCertificateReader,\n ) {}\n\n public getBackingData(dataTypes: string[]): PromiseLike<any> {\n const promises = dataTypes.reduce(\n (promisesByDataType: { [dataType: string]: PromiseLike<any> }, dataType: string) => {\n if (this.dataFetchers[dataType]) {\n promisesByDataType[dataType] = this.dataFetchers[dataType]();\n }\n return promisesByDataType;\n },\n {},\n );\n\n return this.$q.all(promises);\n }\n\n public groupHealthChecksByAccountAndType(\n healthChecks: IGceHealthCheck[],\n ): { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } } {\n return _.chain(healthChecks)\n .groupBy('account')\n .mapValues((grouped: IGceHealthCheck[]) => _.groupBy(grouped, 'healthCheckType'))\n .value();\n }\n\n public groupHealthCheckNamesByAccount(\n healthChecks: IGceHealthCheck[],\n namesToOmit: string[],\n ): { [account: string]: string[] } {\n return _.chain(healthChecks)\n .groupBy('account')\n .mapValues((grouped: IGceHealthCheck[]) => _.chain(grouped).map('name').difference(namesToOmit).value())\n .value() as { [account: string]: string[] };\n }\n}\n\nexport const GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER = 'spinnaker.gce.commonLoadBalancerCommandBuilder.service';\n\nmodule(GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER, [\n LOAD_BALANCER_READ_SERVICE,\n GCE_CERTIFICATE_READER,\n GCE_HEALTH_CHECK_READER,\n]).service('gceCommonLoadBalancerCommandBuilder', GceCommonLoadBalancerCommandBuilder);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport { get } from 'lodash';\n\nimport type { IGceHealthCheck } from '../../../domain/index';\n\nclass HealthCheckCreateCtrl implements IController {\n public healthCheck: IGceHealthCheck;\n public healthCheckPlaceholder: IGceHealthCheck;\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public editExisting = false;\n public existingHealthChecksForProtocol: IGceHealthCheck[];\n public existingHealthCheckNames: string[];\n public credentials: string;\n public max = Number.MAX_SAFE_INTEGER;\n\n public static $inject = ['$scope'];\n constructor(private $scope: ng.IScope) {}\n\n public $onInit(): void {\n if (this.healthCheck.name) {\n this.healthCheckPlaceholder = this.healthCheck;\n this.existingHealthChecksForProtocol = this.healthChecksByAccountAndType[this.credentials][\n this.healthCheck.healthCheckType\n ];\n this.editExisting = true;\n } else {\n this.existingHealthChecksForProtocol = this.healthChecksByAccountAndType[this.credentials]['TCP'];\n }\n\n this.$scope.$watch('$ctrl.credentials', () => this.setExistingHealthChecksForProtocol());\n }\n\n public onProtocolChange(): void {\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n this.setExistingHealthChecksForProtocol();\n }\n\n public setExistingHealthChecksForProtocol() {\n this.existingHealthChecksForProtocol =\n get<{}, IGceHealthCheck[]>(this, [\n 'healthChecksByAccountAndType',\n this.credentials,\n this.healthCheck.healthCheckType,\n ]) || [];\n\n if (!this.existingHealthChecksForProtocol.find((healthCheck) => healthCheck.name === this.healthCheck.name)) {\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n }\n }\n\n public toggleEditExisting(): void {\n this.editExisting = !this.editExisting;\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n }\n\n public onHealthCheckSelect(selectedHealthCheck: IGceHealthCheck): void {\n Object.assign(this.healthCheck, selectedHealthCheck);\n }\n\n public onHealthCheckNameChange(typedName: string): void {\n this.healthCheck.name = typedName;\n }\n}\n\nconst healthCheckCreateComponent: ng.IComponentOptions = {\n bindings: {\n healthCheck: '=',\n credentials: '<',\n healthChecksByAccountAndType: '<',\n existingHealthCheckNames: '<',\n },\n templateUrl: require('./healthCheck.component.html'),\n controller: HealthCheckCreateCtrl,\n};\n\nexport const GCE_HEALTH_CHECK_SELECTOR_COMPONENT = 'spinnaker.gce.healthCheckSelector.component';\n\nmodule(GCE_HEALTH_CHECK_SELECTOR_COMPONENT, []).component('gceHealthCheckSelector', healthCheckCreateComponent);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IController, IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type { Application, IAccount, ICredentials, IRegion } from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../../common/xpnNaming.gce.service';\nimport type {\n IGceBackendService,\n IGceHealthCheck,\n IGceLoadBalancer,\n IGceNetwork,\n IGceSubnet,\n} from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface IPrivateScope extends IScope {\n $$destroyed: boolean;\n}\n\nclass InternalLoadBalancer implements IGceLoadBalancer {\n public name: string;\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public ports: any;\n public ipProtocol = 'TCP';\n public loadBalancerType = 'INTERNAL';\n public credentials: string;\n public account: string;\n public project: string;\n public network = 'default';\n public subnet: string;\n public cloudProvider = 'gce';\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n\n constructor(public region: string) {}\n}\n\nclass InternalLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements IController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Client IP and protocol': 'CLIENT_IP_PROTO',\n 'Client IP, port and protocol': 'CLIENT_IP_PORT_PROTO',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public networks: IGceNetwork[];\n public networkOptions: string[];\n public subnets: IGceSubnet[];\n public subnetOptions: string[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public taskMonitor: any;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n 'gceXpnNamingService',\n '$state',\n ];\n constructor(\n public $scope: IPrivateScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: InternalLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n private gceXpnNamingService: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'networks', 'subnets', 'healthChecks'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new InternalLoadBalancer(\n GCEProviderSettings ? GCEProviderSettings.defaults.region : null,\n );\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.networks = backingData.networks;\n this.subnets = backingData.subnets;\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public networkUpdated(): void {\n this.subnetOptions = this.subnets\n .filter((subnet) => {\n return (\n subnet.region === this.loadBalancer.region &&\n (subnet.account === this.loadBalancer.credentials || subnet.account === this.loadBalancer.account) &&\n subnet.network === this.loadBalancer.network\n );\n })\n .map((subnet) => subnet.id);\n\n if (!this.subnetOptions.includes(this.loadBalancer.subnet)) {\n this.loadBalancer.subnet = this.subnetOptions[0];\n }\n }\n\n public protocolUpdated(): void {\n if (this.loadBalancer.ipProtocol === 'UDP') {\n this.viewState = new ViewState('None');\n this.loadBalancer.backendService.sessionAffinity = 'NONE';\n }\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n this.networkOptions = this.networks\n .filter((network: IGceNetwork) => network.account === this.loadBalancer.credentials)\n .map((network) => network.id);\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n this.networkUpdated();\n });\n }\n\n public regionUpdated(): void {\n this.networkUpdated();\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as any;\n toSubmitLoadBalancer.ports = toSubmitLoadBalancer.ports.split(',').map((port: string) => port.trim());\n toSubmitLoadBalancer.cloudProvider = 'gce';\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.ports = this.loadBalancer.ports.join(', ');\n this.loadBalancer.subnet = this.gceXpnNamingService.decorateXpnResourceIfNecessary(\n this.loadBalancer.project,\n this.loadBalancer.subnet,\n );\n this.loadBalancer.network = this.gceXpnNamingService.decorateXpnResourceIfNecessary(\n this.loadBalancer.project,\n this.loadBalancer.network,\n );\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_INTERNAL_LOAD_BALANCER_CTRL = 'spinnaker.gce.internalLoadBalancer.controller';\n\nmodule(GCE_INTERNAL_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).controller('gceInternalLoadBalancerCtrl', InternalLoadBalancerCtrl);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GCE_CACHE_REFRESH } from '../../../cache/cacheRefresh.component';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from '../../details/hostAndPathRules/hostAndPathRulesButton.component';\nimport type { IGceHttpLoadBalancer } from '../../../domain';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT } from '../http/backendService/backendService.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../http/basicSettings/basicSettings.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE } from '../http/commandBuilder.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT } from '../http/healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT } from '../http/hostRule/hostRule.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from '../http/httpLoadBalancer.write.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT } from '../http/listeners/listener.component';\nimport { BackendServiceTemplate, HealthCheckTemplate, HostRuleTemplate, ListenerTemplate } from '../http/templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from '../http/transformer.service';\n\nimport '../http/httpLoadBalancerWizard.component.less';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.createInternalHttp.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER; // for backwards compatibility\n\nclass CreateInternalHttpLoadBalancerController implements ng.IComponentController {\n public taskMonitor: any;\n public command: any;\n public modalDescriptor: string;\n\n public pages = {\n location: require('../http/basicSettings/basicSettings.html'),\n listeners: require('../http/listeners/listeners.html'),\n defaultService: require('../http/defaultService/defaultService.html'),\n backendServices: require('../http/backendService/backendServices.html'),\n healthChecks: require('../http/healthCheck/healthChecks.html'),\n hostRules: require('../http/hostRule/hostRules.html'),\n };\n\n private keyToTemplateMap: { [key: string]: any } = {\n backendServices: BackendServiceTemplate,\n healthChecks: HealthCheckTemplate,\n hostRules: HostRuleTemplate,\n listeners: ListenerTemplate,\n };\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceHttpLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n 'gceHttpLoadBalancerTransformer',\n 'gceHttpLoadBalancerWriter',\n '$state',\n ];\n\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: IGceHttpLoadBalancer,\n private gceHttpLoadBalancerCommandBuilder: any,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n private gceHttpLoadBalancerTransformer: any,\n private gceHttpLoadBalancerWriter: any,\n private $state: StateService,\n ) {\n this.modalDescriptor = this.isNew\n ? 'Create Internal HTTP(S) load balancer'\n : `Edit ${this.loadBalancer.name}:${this.loadBalancer.region}:${this.loadBalancer.account}`;\n\n const onTaskComplete = () => {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, this.onApplicationRefresh.bind(this));\n };\n\n $scope.taskMonitor = this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n }\n\n public $onInit(): void {\n this.gceHttpLoadBalancerCommandBuilder\n .buildCommand({ isNew: this.isNew, originalLoadBalancer: this.loadBalancer, isInternal: true })\n .then((command: any) => {\n this.command = command;\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'location' })\n .register({\n page: 'listeners',\n subForm: 'listeners',\n validators: [\n {\n watchString: 'ctrl.command.loadBalancer.listeners',\n validator: (listeners: any[]) => listeners.length > 0,\n collection: true,\n },\n ],\n })\n .register({ page: 'default-service', subForm: 'defaultService' })\n .register({ page: 'health-checks', subForm: 'healthChecks' })\n .register({ page: 'backend-services', subForm: 'backendServices' })\n .register({ page: 'host-rules', subForm: 'hostRules' });\n });\n }\n\n public add(key: string): void {\n this.command.loadBalancer[key].push(new this.keyToTemplateMap[key]());\n }\n\n public remove(key: string, index: number): void {\n this.command.loadBalancer[key].splice(index, 1);\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public submit(): void {\n const serializedCommands = this.gceHttpLoadBalancerTransformer.serialize(this.command, this.loadBalancer);\n const descriptor = this.isNew ? 'Create' : 'Update';\n this.taskMonitor.submit(() =>\n this.gceHttpLoadBalancerWriter.upsertLoadBalancers(serializedCommands, this.application, descriptor),\n );\n }\n\n private onApplicationRefresh(): void {\n // If the user has already closed the modal, do not navigate to the new details view\n if (this.$scope.$$destroyed) {\n return;\n }\n this.$uibModalInstance.close();\n const lb = this.command.loadBalancer;\n const newStateParams = {\n name: lb.urlMapName,\n accountId: lb.credentials,\n region: lb.region,\n provider: 'gce',\n };\n\n if (!this.$state.includes('**.loadBalancerDetails')) {\n this.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n this.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n}\n\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER, [\n 'ui.bootstrap',\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GCE_CACHE_REFRESH,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n]).controller('gceCreateInternalHttpLoadBalancerCtrl', CreateInternalHttpLoadBalancerController);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE = 'spinnaker.google.regionSelectField.directive';\nexport const name = GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE, []).directive('gceRegionSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./regionSelectField.directive.html'),\n scope: {\n regions: '=',\n component: '=',\n field: '@',\n account: '=',\n onChange: '&',\n labelColumns: '@',\n readOnly: '=',\n fieldColumns: '@',\n },\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GCEProviderSettings } from '../gce.settings';\n\nexport const GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER = 'spinnaker.gce.loadBalancer.transformer';\nexport const name = GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER, []).factory('gceLoadBalancerTransformer', [\n '$q',\n function ($q) {\n function updateHealthCounts(container) {\n const instances = container.instances;\n const serverGroups = container.serverGroups || [container];\n container.instanceCounts = {\n up: instances.filter((instance) => {\n return instance.health[0].state === 'InService';\n }).length,\n down: instances.filter((instance) => {\n return instance.health[0].state === 'OutOfService';\n }).length,\n outOfService: serverGroups.reduce((acc, serverGroup) => {\n return (\n serverGroup.instances.filter((instance) => {\n return instance.healthState === 'OutOfService';\n }).length + acc\n );\n }, 0),\n };\n }\n\n function transformInstance(instance, loadBalancer) {\n instance.health = instance.health || {};\n instance.provider = loadBalancer.type;\n instance.account = loadBalancer.account;\n instance.region = loadBalancer.region;\n instance.health.type = 'LoadBalancer';\n instance.healthState = instance.health.state\n ? instance.health.state === 'InService'\n ? 'Up'\n : 'Down'\n : 'OutOfService';\n instance.health = [instance.health];\n instance.loadBalancers = [loadBalancer.name];\n }\n\n function normalizeLoadBalancer(loadBalancer) {\n loadBalancer.serverGroups.forEach(function (serverGroup) {\n serverGroup.account = loadBalancer.account;\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = serverGroup.detachedInstances.map(function (instanceId) {\n return { id: instanceId };\n });\n serverGroup.instances = serverGroup.instances.concat(serverGroup.detachedInstances);\n } else {\n serverGroup.detachedInstances = [];\n }\n\n serverGroup.instances.forEach(function (instance) {\n transformInstance(instance, loadBalancer);\n });\n updateHealthCounts(serverGroup);\n });\n const activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups).map('instances').flatten().value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups).map('detachedInstances').flatten().value();\n if (_.get(loadBalancer, 'backendService.healthCheck')) {\n loadBalancer.backendService.healthCheck.timeout = loadBalancer.backendService.healthCheck.timeoutSec;\n loadBalancer.backendService.healthCheck.interval = loadBalancer.backendService.healthCheck.checkIntervalSec;\n }\n updateHealthCounts(loadBalancer);\n return $q.when(loadBalancer);\n }\n\n function convertLoadBalancerForEditing(loadBalancer) {\n const toEdit = {\n provider: 'gce',\n region: loadBalancer.region,\n credentials: loadBalancer.account,\n listeners: [],\n name: loadBalancer.name,\n regionZones: loadBalancer.availabilityZones,\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb;\n\n toEdit.vpcId = elb.vpcid;\n\n if (elb.listenerDescriptions) {\n toEdit.listeners = elb.listenerDescriptions.map(function (description) {\n const listener = description.listener;\n return {\n protocol: listener.protocol,\n portRange: listener.loadBalancerPort,\n healthCheck: elb.healthCheck !== undefined,\n };\n });\n }\n\n if (elb.healthCheck && elb.healthCheck.target) {\n toEdit.healthTimeout = elb.healthCheck.timeout;\n toEdit.healthInterval = elb.healthCheck.interval;\n toEdit.healthyThreshold = elb.healthCheck.healthyThreshold;\n toEdit.unhealthyThreshold = elb.healthCheck.unhealthyThreshold;\n\n const healthCheck = loadBalancer.elb.healthCheck.target;\n const protocolIndex = healthCheck.indexOf(':');\n const pathIndex = healthCheck.indexOf('/');\n\n if (protocolIndex !== -1 && pathIndex !== -1) {\n toEdit.healthCheckProtocol = healthCheck.substring(0, protocolIndex);\n toEdit.healthCheckPort = healthCheck.substring(protocolIndex + 1, pathIndex);\n toEdit.healthCheckPath = healthCheck.substring(pathIndex);\n if (!isNaN(toEdit.healthCheckPort)) {\n toEdit.healthCheckPort = Number(toEdit.healthCheckPort);\n }\n }\n } else {\n toEdit.healthCheckProtocol = 'HTTP';\n toEdit.healthCheckPort = 80;\n toEdit.healthCheckPath = '/';\n toEdit.healthTimeout = 5;\n toEdit.healthInterval = 10;\n toEdit.healthyThreshold = 10;\n toEdit.unhealthyThreshold = 2;\n }\n\n toEdit.sessionAffinity = loadBalancer.sessionAffinity || 'None';\n }\n return toEdit;\n }\n\n function constructNewLoadBalancerTemplate() {\n return {\n provider: 'gce',\n stack: '',\n detail: '',\n credentials: GCEProviderSettings.defaults.account,\n region: GCEProviderSettings.defaults.region,\n healthCheckProtocol: 'HTTP',\n healthCheckPort: 80,\n healthCheckPath: '/',\n healthTimeout: 5,\n healthInterval: 10,\n healthyThreshold: 10,\n unhealthyThreshold: 2,\n sessionAffinity: 'NONE',\n regionZones: [],\n listeners: [\n {\n protocol: 'TCP',\n portRange: '8080',\n healthCheck: true,\n },\n ],\n };\n }\n\n return {\n normalizeLoadBalancer: normalizeLoadBalancer,\n convertLoadBalancerForEditing: convertLoadBalancerForEditing,\n constructNewLoadBalancerTemplate: constructNewLoadBalancerTemplate,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { AccountService, LoadBalancerWriter, ModalWizard, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE } from '../../../gceRegionSelectField.directive';\nimport { GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from '../../loadBalancer.transformer';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER =\n 'spinnaker.loadBalancer.gce.create.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE,\n]).controller('gceCreateLoadBalancerCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'gceLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n function ($scope, $uibModalInstance, $state, gceLoadBalancerTransformer, application, loadBalancer, isNew) {\n const ctrl = this;\n\n $scope.isNew = isNew;\n\n $scope.pages = {\n location: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n healthCheck: require('./healthCheck.html'),\n advancedSettings: require('./advancedSettings.html'),\n };\n\n $scope.state = {\n accountsLoaded: false,\n submitting: false,\n };\n\n $scope.sessionAffinityOptions = [\n { value: 'NONE', name: 'None' },\n { value: 'CLIENT_IP', name: 'Client IP' },\n { value: 'CLIENT_IP_PROTO', name: 'Client IP and protocol' },\n ];\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.loadBalancer.name,\n accountId: $scope.loadBalancer.credentials,\n region: $scope.loadBalancer.region,\n provider: 'gce',\n };\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: (isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function initializeEditMode() {}\n\n function initializeCreateMode() {\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accountsLoaded = true;\n\n const accountNames = _.map($scope.accounts, 'name');\n if (accountNames.length && !accountNames.includes($scope.loadBalancer.credentials)) {\n $scope.loadBalancer.credentials = accountNames[0];\n }\n\n ctrl.accountUpdated();\n });\n }\n\n function updateLoadBalancerNames() {\n const account = $scope.loadBalancer.credentials;\n\n const accountLoadBalancersByRegion = {};\n application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n application.getDataSource('loadBalancers').data.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancersByRegion[loadBalancer.region] =\n accountLoadBalancersByRegion[loadBalancer.region] || [];\n accountLoadBalancersByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n $scope.existingLoadBalancerNames = _.flatten(_.map(accountLoadBalancersByRegion));\n });\n }\n\n // initialize controller\n if (loadBalancer) {\n $scope.loadBalancer = gceLoadBalancerTransformer.convertLoadBalancerForEditing(loadBalancer);\n initializeEditMode();\n } else {\n $scope.loadBalancer = gceLoadBalancerTransformer.constructNewLoadBalancerTemplate();\n updateLoadBalancerNames();\n initializeCreateMode();\n }\n\n // Controller API\n\n this.requiresHealthCheckPath = function () {\n return $scope.loadBalancer.healthCheckProtocol && $scope.loadBalancer.healthCheckProtocol.indexOf('HTTP') === 0;\n };\n\n this.prependForwardSlash = (text) => {\n return text && text.indexOf('/') !== 0 ? `/${text}` : text;\n };\n\n this.updateName = function () {\n $scope.loadBalancer.name = this.getName();\n };\n\n this.getName = function () {\n const loadBalancer = $scope.loadBalancer;\n const loadBalancerName = [application.name, loadBalancer.stack || '', loadBalancer.detail || ''].join('-');\n return _.trimEnd(loadBalancerName, '-');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.loadBalancer.credentials).then(function (regions) {\n if (_.isArray(regions)) {\n $scope.regions = _.map(regions, 'name');\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n $scope.regions = _.keys(regions);\n }\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n updateLoadBalancerNames();\n ctrl.updateName();\n };\n\n this.setVisibilityHealthCheckTab = function () {\n const wizard = ModalWizard;\n\n if ($scope.loadBalancer.listeners[0].healthCheck) {\n wizard.includePage('Health Check');\n wizard.markIncomplete('Health Check');\n wizard.includePage('Advanced Settings');\n wizard.markIncomplete('Advanced Settings');\n } else {\n wizard.excludePage('Health Check');\n wizard.markComplete('Health Check');\n wizard.excludePage('Advanced Settings');\n wizard.markComplete('Advanced Settings');\n wizard.markComplete('Listener');\n }\n };\n\n this.submit = function () {\n const descriptor = isNew ? 'Create' : 'Update';\n\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'gce',\n loadBalancerName: $scope.loadBalancer.name,\n };\n\n if ($scope.loadBalancer.listeners && $scope.loadBalancer.listeners.length > 0) {\n const listener = $scope.loadBalancer.listeners[0];\n\n if (listener.protocol) {\n params.ipProtocol = listener.protocol;\n }\n\n if (listener.portRange) {\n params.portRange = listener.portRange;\n }\n\n if (listener.healthCheck) {\n params.healthCheck = {\n port: $scope.loadBalancer.healthCheckPort,\n requestPath: $scope.loadBalancer.healthCheckPath,\n timeoutSec: $scope.loadBalancer.healthTimeout,\n checkIntervalSec: $scope.loadBalancer.healthInterval,\n healthyThreshold: $scope.loadBalancer.healthyThreshold,\n unhealthyThreshold: $scope.loadBalancer.unhealthyThreshold,\n };\n } else {\n params.healthCheck = null;\n }\n\n params.sessionAffinity = $scope.loadBalancer.sessionAffinity;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer($scope.loadBalancer, application, descriptor, params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IController, IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type {\n Application,\n IAccount,\n ICredentials,\n IInstance,\n ILoadBalancerUpsertCommand,\n IRegion,\n} from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport type { IGceBackendService, IGceHealthCheck, IGceLoadBalancer } from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface ISslLoadBalancerUpsertDescription extends ILoadBalancerUpsertCommand {\n backendService: IGceBackendService;\n loadBalancerName: string;\n instances: IInstance[];\n}\n\nclass SslLoadBalancer implements IGceLoadBalancer {\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public portRange = '443';\n public ipProtocol = 'TCP';\n public instances: IInstance[];\n public loadBalancerType = 'SSL';\n public credentials: string;\n public account: string;\n public certificate: string;\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n public cloudProvider: string;\n public name: string;\n constructor(public region = 'global') {}\n}\n\nclass SslLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements IController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n backendService: require('./backendService.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public certificateWrappers: any[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public portOptions: string[] = ['25', '43', '110', '143', '195', '443', '465', '587', '700', '993', '995'];\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public maxCookieTtl = 60 * 60 * 24; // One day.\n public taskMonitor: any;\n public hasBackendService = true;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n '$state',\n ];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: SslLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'healthChecks', 'certificates'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new SslLoadBalancer(GCEProviderSettings ? GCEProviderSettings.defaults.region : null);\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.certificateWrappers = backingData.certificates as any[];\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public onCertificateRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['certificates']).then((data) => {\n this.certificateWrappers = data.certificates as any[];\n });\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n });\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as ISslLoadBalancerUpsertDescription;\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.cloudProvider = 'gce';\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.portRange = this.loadBalancer.portRange.split('-')[0];\n this.loadBalancer.certificate = this.loadBalancer.certificate.split('/').pop();\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_SSL_LOAD_BALANCER_CTRL = 'spinnaker.gce.sslLoadBalancer.controller';\n\nmodule(GCE_SSL_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n]).controller('gceSslLoadBalancerCtrl', SslLoadBalancerCtrl);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type {\n Application,\n IAccount,\n ICredentials,\n IInstance,\n ILoadBalancerUpsertCommand,\n IRegion,\n} from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport type { IGceBackendService, IGceHealthCheck, IGceLoadBalancer } from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface ITcpLoadBalancerUpsertDescription extends ILoadBalancerUpsertCommand {\n backendService: IGceBackendService;\n loadBalancerName: string;\n instances: IInstance[];\n}\n\nclass TcpLoadBalancer implements IGceLoadBalancer {\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public portRange = '443';\n public ipProtocol = 'TCP';\n public instances: IInstance[];\n public loadBalancerType = 'TCP';\n public credentials: string;\n public account: string;\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n public cloudProvider: string;\n public name: string;\n constructor(public region = 'global') {}\n}\n\nclass TcpLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements ng.IComponentController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n backendService: require('./backendService.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public portOptions: string[] = ['25', '43', '110', '143', '195', '443', '465', '587', '700', '993', '995'];\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public maxCookieTtl = 60 * 60 * 24; // One day.\n public taskMonitor: any;\n public hasBackendService = true;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n '$state',\n ];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: TcpLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'healthChecks'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new TcpLoadBalancer(GCEProviderSettings ? GCEProviderSettings.defaults.region : null);\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n });\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as ITcpLoadBalancerUpsertDescription;\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.cloudProvider = 'gce';\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.portRange = this.loadBalancer.portRange.split('-')[0];\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_TCP_LOAD_BALANCER_CTRL = 'spinnaker.gce.tcpLoadBalancer.controller';\n\nmodule(GCE_TCP_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n]).controller('gceTcpLoadBalancerCtrl', TcpLoadBalancerCtrl);\n","import { module } from 'angular';\n\nconst gceBackendServiceDetailsComponent: ng.IComponentOptions = {\n bindings: {\n backendService: '<',\n },\n template: `\n <dt>Name</dt>\n <dd>{{$ctrl.backendService.name}}</dd>\n <dt>Health Check</dt>\n <dd>{{$ctrl.backendService.healthCheck.name}}</dd>\n <dt ng-if=\"$ctrl.backendService.sessionAffinity\">Session Affinity</dt>\n <dd ng-if=\"$ctrl.backendService.sessionAffinity\">{{$ctrl.backendService.sessionAffinity | gceSessionAffinityFilter}}</dd>\n <dt ng-if=\"$ctrl.backendService.sessionAffinity === 'GENERATED_COOKIE'\">Affinity Cookie TTL</dt>\n <dd ng-if=\"$ctrl.backendService.sessionAffinity === 'GENERATED_COOKIE'\">{{$ctrl.backendService.affinityCookieTtlSec}}</dd>`,\n};\n\nexport const GCE_BACKEND_SERVICE_DETAILS_COMPONENT =\n 'spinnaker.gce.loadBalancer.details.backendServiceDetails.component';\nmodule(GCE_BACKEND_SERVICE_DETAILS_COMPONENT, []).component(\n 'gceBackendServiceDetails',\n gceBackendServiceDetailsComponent,\n);\n","import { module } from 'angular';\nimport { sessionAffinityModelToViewMap } from '../../configure/common/sessionAffinityNameMaps';\n\nfunction gceSessionAffinityFilter() {\n return function (modelValue: string): string {\n return sessionAffinityModelToViewMap[modelValue] || modelValue;\n };\n}\n\nexport const SESSION_AFFINITY_FILTER = 'spinnaker.gce.loadBalancer.details.sessionAffinity.filter';\nmodule(SESSION_AFFINITY_FILTER, []).filter('gceSessionAffinityFilter', gceSessionAffinityFilter);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport type { Application, ILoadBalancerDeleteCommand } from '@spinnaker/core';\nimport { LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from '../../configure/http/httpLoadBalancer.write.service';\nimport type { GceHttpLoadBalancerUtils } from '../../httpLoadBalancerUtils.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../httpLoadBalancerUtils.service';\n\nclass Verification {\n public verified = false;\n}\n\nclass Params {\n public deleteHealthChecks = false;\n}\n\ninterface IGoogleLoadBalancerDeleteOperation extends ILoadBalancerDeleteCommand {\n region: string;\n accountName: string;\n deleteHealthChecks: boolean;\n loadBalancerType: string;\n}\n\nclass DeleteLoadBalancerModalController implements IController {\n public verification: Verification = new Verification();\n public params: Params = new Params();\n public taskMonitor: any;\n\n public static $inject = [\n 'application',\n 'gceHttpLoadBalancerUtils',\n 'gceHttpLoadBalancerWriter',\n 'loadBalancer',\n '$uibModalInstance',\n ];\n constructor(\n private application: Application,\n private gceHttpLoadBalancerUtils: GceHttpLoadBalancerUtils,\n private gceHttpLoadBalancerWriter: any,\n private loadBalancer: any,\n private $uibModalInstance: IModalInstanceService,\n ) {}\n\n public $onInit(): void {\n const taskMonitorConfig = {\n application: this.application,\n title: 'Deleting ' + this.loadBalancer.name,\n modalInstance: this.$uibModalInstance,\n };\n\n this.taskMonitor = new TaskMonitor(taskMonitorConfig);\n }\n\n public isValid(): boolean {\n return this.verification.verified;\n }\n\n public submit(): void {\n this.taskMonitor.submit(this.getSubmitMethod());\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public hasHealthChecks(): boolean {\n if (this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(this.loadBalancer)) {\n return true;\n } else {\n return !!this.loadBalancer.healthCheck;\n }\n }\n\n private getSubmitMethod(): () => PromiseLike<any> {\n if (this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(this.loadBalancer)) {\n return () => {\n return this.gceHttpLoadBalancerWriter.deleteLoadBalancers(this.loadBalancer, this.application, this.params);\n };\n } else {\n return () => {\n const command: IGoogleLoadBalancerDeleteOperation = {\n cloudProvider: 'gce',\n loadBalancerName: this.loadBalancer.name,\n accountName: this.loadBalancer.account,\n credentials: this.loadBalancer.account,\n region: this.loadBalancer.region,\n loadBalancerType: this.loadBalancer.loadBalancerType || 'NETWORK',\n deleteHealthChecks: this.params.deleteHealthChecks,\n };\n return LoadBalancerWriter.deleteLoadBalancer(command, this.application);\n };\n }\n }\n}\n\nexport const DELETE_MODAL_CONTROLLER = 'spinnaker.gce.loadBalancer.deleteModal.controller';\nmodule(DELETE_MODAL_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP as any,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n]).controller('gceLoadBalancerDeleteModalCtrl', DeleteLoadBalancerModalController);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.details.healthCheck.component';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT, []).component('gceHealthCheck', {\n bindings: {\n healthCheck: '=',\n },\n templateUrl: require('./healthCheck.component.html'),\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.loadBalancerType';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT, []).component('gceLoadBalancerType', {\n template: '<span>{{ $ctrl.type }}</span>',\n bindings: {\n loadBalancer: '=',\n },\n controller: function () {\n this.$onInit = () => {\n this.type = (function (lb) {\n if (lb.loadBalancerType === 'HTTP') {\n if (_.isString(lb.certificate)) {\n return 'HTTPS';\n } else {\n return 'HTTP';\n }\n } else {\n return lb.loadBalancerType;\n }\n })(this.loadBalancer);\n };\n },\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LOAD_BALANCER_READ_SERVICE } from '@spinnaker/core';\n\nimport { GCE_BACKEND_SERVICE_DETAILS_COMPONENT } from './backendService/backendService.component';\nimport { SESSION_AFFINITY_FILTER } from './backendService/sessionAffinity.filter';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT } from '../configure/choice/loadBalancerTypeToWizardMap.constant';\nimport { DELETE_MODAL_CONTROLLER } from './deleteModal/deleteModal.controller';\nimport { GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT } from './healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from './hostAndPathRules/hostAndPathRulesButton.component';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../httpLoadBalancerUtils.service';\nimport { GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT } from './loadBalancerType/loadBalancerType.component';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER =\n 'spinnaker.loadBalancer.gce.details.controller';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n LOAD_BALANCER_READ_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GCE_BACKEND_SERVICE_DETAILS_COMPONENT,\n DELETE_MODAL_CONTROLLER,\n SESSION_AFFINITY_FILTER,\n GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT,\n ])\n .controller('gceLoadBalancerDetailsCtrl', [\n '$scope',\n '$state',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'gceHttpLoadBalancerUtils',\n 'loadBalancerReader',\n '$q',\n 'loadBalancerTypeToWizardMap',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $uibModal,\n loadBalancer,\n app,\n gceHttpLoadBalancerUtils,\n loadBalancerReader,\n $q,\n loadBalancerTypeToWizardMap,\n gceXpnNamingService,\n ) {\n const application = (this.application = app);\n\n $scope.state = {\n loading: true,\n };\n\n function extractLoadBalancer() {\n $scope.loadBalancer = application.loadBalancers.data.filter(function (test) {\n const testVpc = test.vpcId || null;\n return (\n test.name === loadBalancer.name &&\n (test.region === loadBalancer.region || test.region === 'global') &&\n test.account === loadBalancer.accountId &&\n testVpc === loadBalancer.vpcId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n return createDetailsLoader().then(function (details) {\n $scope.state.loading = false;\n const filtered = details.filter(function (test) {\n return test.vpcid === loadBalancer.vpcId || (!test.vpcid && !loadBalancer.vpcId);\n });\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n AccountService.getCredentialsKeyedByAccount('gce').then(function () {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer($scope.loadBalancer)) {\n $scope.loadBalancer.elb.backendServices = getBackendServices($scope.loadBalancer);\n $scope.loadBalancer.elb.healthChecks = _.chain($scope.loadBalancer.elb.backendServices)\n .map('healthCheck')\n .uniqBy('name')\n .value();\n }\n });\n }\n AccountService.getAccountDetails(loadBalancer.accountId).then(function (accountDetails) {\n let resourceTypes;\n\n if ($scope.loadBalancer.loadBalancerType === 'INTERNAL') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'NETWORK') {\n resourceTypes = ['gce_forwarding_rule', 'gce_target_pool', 'gce_health_check'];\n } else if ($scope.loadBalancer.loadBalancerType === 'SSL') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'TCP') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'INTERNAL_MANAGED') {\n resourceTypes = ['http_load_balancer', 'gce_target_http_proxy', 'gce_url_map', 'gce_backend_service'];\n } else {\n // $scope.loadBalancer.loadBalancerType === 'HTTP'\n resourceTypes = ['http_load_balancer', 'gce_target_http_proxy', 'gce_url_map', 'gce_backend_service'];\n }\n\n resourceTypes = _.join(resourceTypes, ' OR ');\n\n $scope.loadBalancer.project = accountDetails.project;\n $scope.loadBalancer.logsLink =\n 'https://console.developers.google.com/project/' +\n accountDetails.project +\n '/logs?advancedFilter=resource.type=(' +\n resourceTypes +\n ')%0A\"' +\n $scope.loadBalancer.name +\n '\"';\n });\n }, autoClose);\n }\n if (!$scope.loadBalancer) {\n autoClose();\n }\n return $q.when(null);\n }\n\n function createDetailsLoader() {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer($scope.loadBalancer)) {\n const detailsPromises = $scope.loadBalancer.listeners.map((listener) => {\n return loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n $scope.loadBalancer.region,\n listener.name,\n );\n });\n\n return $q.all(detailsPromises).then((loadBalancers) => {\n loadBalancers = _.flatten(loadBalancers);\n const representativeLb = loadBalancers[0];\n representativeLb.dns = loadBalancers.map((loadBalancer) => {\n let protocol;\n if (loadBalancer.listenerDescriptions[0].listener.loadBalancerPort === '443') {\n protocol = 'https:';\n } else {\n protocol = 'http:';\n }\n return { dnsname: loadBalancer.dnsname, protocol: protocol };\n });\n representativeLb.dns = _.uniqBy(representativeLb.dns, 'dnsname');\n representativeLb.listenerDescriptions = _.flatten(loadBalancers.map((lb) => lb.listenerDescriptions));\n return [representativeLb];\n });\n } else {\n return loadBalancerReader\n .getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n $scope.loadBalancer.region,\n $scope.loadBalancer.name,\n )\n .then((loadBalancerDetails) => {\n const loadBalancer = loadBalancerDetails[0];\n let protocol;\n if (loadBalancer.listenerDescriptions[0].listener.loadBalancerPort === '443') {\n protocol = 'https:';\n } else {\n protocol = 'http:';\n }\n loadBalancer.dns = { dnsname: loadBalancer.dnsname, protocol: protocol };\n return loadBalancerDetails;\n });\n }\n }\n\n function getBackendServices(loadBalancer) {\n let backendServices = [loadBalancer.defaultService];\n\n if (loadBalancer.hostRules.length) {\n backendServices = _.chain(loadBalancer.hostRules)\n .reduce((services, hostRule) => {\n services.push(hostRule.pathMatcher.defaultService);\n return services.concat(_.map(hostRule.pathMatcher.pathRules, 'backendService'));\n }, backendServices)\n .uniqBy('name')\n .value();\n }\n return backendServices;\n }\n\n function autoClose() {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n app.loadBalancers\n .ready()\n .then(extractLoadBalancer)\n .then(() => {\n // If the user navigates away from the view before the initial extractLoadBalancer call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.loadBalancers.onRefresh($scope, extractLoadBalancer);\n }\n });\n\n this.editLoadBalancer = function editLoadBalancer() {\n const wizard = loadBalancerTypeToWizardMap[$scope.loadBalancer.loadBalancerType];\n\n $uibModal.open({\n templateUrl: wizard.editTemplateUrl,\n controller: `${wizard.controller} as ctrl`,\n size: 'lg',\n resolve: {\n application: function () {\n return application;\n },\n loadBalancer: function () {\n return angular.copy($scope.loadBalancer);\n },\n isNew: function () {\n return false;\n },\n },\n });\n };\n\n this.deleteLoadBalancer = function deleteLoadBalancer() {\n if (!($scope.loadBalancer.instances && $scope.loadBalancer.instances.length)) {\n $uibModal.open({\n controller: 'gceLoadBalancerDeleteModalCtrl as ctrl',\n templateUrl: require('./deleteModal/deleteModal.html'),\n resolve: {\n application: () => application,\n loadBalancer: () => $scope.loadBalancer,\n },\n });\n }\n };\n\n this.isHttpLoadBalancer = (lb) => gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb);\n\n this.getNetworkId = function getNetworkId(loadBalancer) {\n return gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, loadBalancer.network);\n };\n\n this.getSubnetId = function getSubnetId(loadBalancer) {\n return gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, loadBalancer.subnet);\n };\n },\n ]);\n","import { module } from 'angular';\nimport { cloneDeep, groupBy, map, partition } from 'lodash';\n\nimport type { IGceHttpLoadBalancer, IGceLoadBalancer } from '../domain/loadBalancer';\n\nimport type { GceHttpLoadBalancerUtils } from './httpLoadBalancerUtils.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from './httpLoadBalancerUtils.service';\n\nexport class GceLoadBalancerSetTransformer {\n private static normalizeHttpLoadBalancerGroup(group: IGceHttpLoadBalancer[]): IGceHttpLoadBalancer {\n const normalized = cloneDeep(group[0]);\n\n normalized.listeners = group.map((loadBalancer) => {\n const port = loadBalancer.portRange ? GceLoadBalancerSetTransformer.parsePortRange(loadBalancer.portRange) : null;\n return {\n port,\n name: loadBalancer.name,\n certificate: loadBalancer.certificate,\n ipAddress: loadBalancer.ipAddress,\n subnet: loadBalancer.subnet,\n };\n });\n\n normalized.name = normalized.urlMapName;\n delete normalized.subnet;\n return normalized;\n }\n\n private static parsePortRange(portRange: string): string {\n return portRange.split('-')[0];\n }\n\n public static $inject = ['gceHttpLoadBalancerUtils'];\n constructor(private gceHttpLoadBalancerUtils: GceHttpLoadBalancerUtils) {}\n\n public normalizeLoadBalancerSet = (loadBalancers: IGceLoadBalancer[]): IGceLoadBalancer[] => {\n const [httpLoadBalancers, otherLoadBalancers] = partition(loadBalancers, (lb) =>\n this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb),\n );\n\n const groupedByUrlMap = groupBy(httpLoadBalancers, 'urlMapName');\n const normalizedElSevenLoadBalancers = map(\n groupedByUrlMap,\n GceLoadBalancerSetTransformer.normalizeHttpLoadBalancerGroup,\n );\n\n return (normalizedElSevenLoadBalancers as IGceLoadBalancer[]).concat(otherLoadBalancers);\n };\n}\n\nexport const LOAD_BALANCER_SET_TRANSFORMER = 'spinnaker.gce.loadBalancer.setTransformer.service';\nmodule(LOAD_BALANCER_SET_TRANSFORMER, [GCE_HTTP_LOAD_BALANCER_UTILS]).service(\n 'gceLoadBalancerSetTransformer',\n GceLoadBalancerSetTransformer,\n);\n","export default \"gce.logo2ae85d8704b1d6b8.png\"","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.gce.pipeline.stage.bake.executionDetails.controller';\nexport const name = GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'gceBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus', 'artifactStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'gce';\n $scope.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' &&\n SETTINGS.feature.roscoSelector($scope.stage.context));\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n ArtifactReferenceService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n ExpectedArtifactService,\n PipelineTemplates,\n Registry,\n SETTINGS,\n} from '@spinnaker/core';\nimport { GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\n\nexport const GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE = 'spinnaker.gce.pipeline.stage..bakeStage';\nexport const name = GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE, [GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'gce',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n producesArtifacts: true,\n supportsCustomTimeout: true,\n validators: [\n {\n type: 'anyFieldRequired',\n fields: [\n { fieldName: 'package', fieldLabel: 'Package' },\n { fieldName: 'packageArtifactIds', fieldLabel: 'Package Artifacts' },\n ],\n },\n ],\n restartable: true,\n artifactExtractor: ExpectedArtifactService.accumulateArtifacts(['packageArtifactIds']),\n artifactRemover: ArtifactReferenceService.removeArtifactFromFields(['packageArtifactIds']),\n });\n })\n .controller('gceBakeStageCtrl', [\n '$scope',\n '$q',\n '$uibModal',\n function ($scope, $q, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.region = 'global';\n\n if (!$scope.stage.cloudProvider) {\n $scope.stage.cloudProvider = 'gce';\n }\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $scope.viewState.providerSelected = true;\n $q.all([\n BakeryReader.getBaseOsOptions('gce'),\n BakeryReader.getBaseLabelOptions(),\n ExpectedArtifactService.getExpectedArtifactsAvailableToStage($scope.stage, $scope.pipeline),\n ]).then(function ([baseOsOptions, baseLabelOptions, expectedArtifacts]) {\n $scope.baseOsOptions = baseOsOptions.baseImages;\n $scope.baseLabelOptions = baseLabelOptions;\n $scope.viewState.expectedArtifacts = expectedArtifacts;\n\n if (!$scope.stage.baseOs && $scope.baseOsOptions && $scope.baseOsOptions.length) {\n $scope.stage.baseOs = $scope.baseOsOptions[0].id;\n }\n if (!$scope.stage.baseLabel && $scope.baseLabelOptions && $scope.baseLabelOptions.length) {\n $scope.stage.baseLabel = $scope.baseLabelOptions[0];\n }\n $scope.viewState.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage));\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n });\n }\n\n function showAdvanced() {\n const stage = $scope.stage;\n return !!(\n stage.templateFileName ||\n (stage.extendedAttributes && _.size(stage.extendedAttributes) > 0) ||\n stage.varFileName ||\n stage.baseAmi ||\n stage.accountName\n );\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\n // Since the selector computes using stage as an input, it needs to be able to recompute roscoMode on updates\n if (typeof SETTINGS.feature.roscoSelector === 'function') {\n $scope.viewState.roscoMode = SETTINGS.feature.roscoSelector($scope.stage);\n }\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n this.addExtendedAttribute = function () {\n if (!$scope.stage.extendedAttributes) {\n $scope.stage.extendedAttributes = {};\n }\n $uibModal\n .open({\n templateUrl: PipelineTemplates.addExtendedAttributes,\n controller: 'bakeStageAddExtendedAttributeController',\n controllerAs: 'addExtendedAttribute',\n resolve: {\n extendedAttribute: function () {\n return {\n key: '',\n value: '',\n };\n },\n },\n })\n .result.then(function (extendedAttribute) {\n $scope.stage.extendedAttributes[extendedAttribute.key] = extendedAttribute.value;\n })\n .catch(() => {});\n };\n\n this.removeExtendedAttribute = function (key) {\n delete $scope.stage.extendedAttributes[key];\n };\n\n this.showTemplateFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.templateFileName;\n };\n\n this.showAccountName = function () {\n return $scope.viewState.roscoMode || $scope.stage.accountName;\n };\n\n this.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && _.size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n this.showVarFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.varFileName;\n };\n\n $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, NameUtils, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE =\n 'spinnaker.gce.pipeline.stage..cloneServerGroupStage';\nexport const name = GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'cloneServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./cloneServerGroupStage.html'),\n executionStepLabelUrl: require('./cloneServerGroupStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'targetCluster', fieldLabel: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceCloneServerGroupStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then((accounts) => {\n $scope.accounts = accounts;\n $scope.viewState.accountsLoaded = true;\n });\n\n this.cloneTargets = StageConstants.TARGET_LIST;\n stage.target = stage.target || this.cloneTargets[0].val;\n stage.application = $scope.application.name;\n stage.cloudProvider = 'gce';\n stage.cloudProviderType = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n\n this.targetClusterUpdated = () => {\n if (stage.targetCluster) {\n const clusterName = NameUtils.parseServerGroupName(stage.targetCluster);\n stage.stack = clusterName.stack;\n stage.freeFormDetails = clusterName.freeFormDetails;\n } else {\n stage.stack = '';\n stage.freeFormDetails = '';\n }\n };\n\n $scope.$watch('stage.targetCluster', this.targetClusterUpdated);\n\n this.removeCapacity = () => {\n delete stage.capacity;\n };\n\n if (!_.has(stage, 'useSourceCapacity')) {\n stage.useSourceCapacity = true;\n }\n\n this.toggleDisableTraffic = () => {\n stage.disableTraffic = !stage.disableTraffic;\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE = 'spinnaker.gce.pipeline.stage..destroyAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE = 'spinnaker.gce.pipeline.stage..disableAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./disableAsgStage.html'),\n executionStepLabelUrl: require('./disableAsgStepLabel.html'),\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to disable a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..disableClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableCluster',\n cloudProvider: 'gce',\n templateUrl: require('./disableClusterStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingEnabledServerGroups',\n fieldLabel: 'Keep [X] enabled Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceDisableClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n stage.remainingEnabledServerGroups = 1;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE = 'spinnaker.gce.pipeline.stage..enableAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./enableAsgStage.html'),\n executionStepLabelUrl: require('./enableAsgStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceEnableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE = 'spinnaker.gce.pipeline.stage..findAmiStage';\nexport const name = GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE; // for backwards compatibility\nangular\n .module(GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImage',\n cloudProvider: 'gce',\n templateUrl: require('./findAmiStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'selectionStrategy', fieldLabel: 'Server Group Selection' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials' },\n ],\n });\n })\n .controller('gceFindAmiStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.selectionStrategies = [\n {\n label: 'Largest',\n val: 'LARGEST',\n description: 'When multiple server groups exist, prefer the server group with the most instances',\n },\n {\n label: 'Newest',\n val: 'NEWEST',\n description: 'When multiple server groups exist, prefer the newest',\n },\n {\n label: 'Oldest',\n val: 'OLDEST',\n description: 'When multiple server groups exist, prefer the oldest',\n },\n {\n label: 'Fail',\n val: 'FAIL',\n description: 'When multiple server groups exist, fail',\n },\n ];\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n stage.selectionStrategy = stage.selectionStrategy || $scope.selectionStrategies[0].val;\n\n if (angular.isUndefined(stage.onlyEnabled)) {\n stage.onlyEnabled = true;\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { BakeryReader, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE =\n 'spinnaker.gce.pipeline.stage..findImageFromTagsStage';\nexport const name = GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'gce',\n templateUrl: require('./findImageFromTagsStage.html'),\n executionDetailsUrl: require('./findImageFromTagsExecutionDetails.html'),\n executionConfigSections: ['findImageConfig', 'taskStatus'],\n validators: [\n { type: 'requiredField', fieldName: 'packageName' },\n { type: 'requiredField', fieldName: 'tags' },\n ],\n });\n })\n .controller('gceFindImageFromTagsStageCtrl', [\n '$scope',\n function ($scope) {\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.regions = $scope.stage.regions || [];\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'gce';\n\n BakeryReader.getRegions('gce').then(function (regions) {\n $scope.regions = regions;\n });\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE = 'spinnaker.gce.pipeline.stage..resizeAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./resizeAsgStage.html'),\n executionStepLabelUrl: require('./resizeAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n supportsCustomTimeout: true,\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to resize a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'action' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceResizeAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.viewState.accountsLoaded = true;\n });\n\n $scope.resizeTargets = StageConstants.TARGET_LIST;\n\n $scope.scaleActions = [\n {\n label: 'Scale Up',\n val: 'scale_up',\n },\n {\n label: 'Scale Down',\n val: 'scale_down',\n },\n {\n label: 'Scale to Cluster Size',\n val: 'scale_to_cluster',\n },\n {\n label: 'Scale to Exact Size',\n val: 'scale_exact',\n },\n ];\n\n $scope.resizeTypes = [\n {\n label: 'Percentage',\n val: 'pct',\n },\n {\n label: 'Incremental',\n val: 'incr',\n },\n ];\n\n stage.capacity = stage.capacity || {};\n stage.regions = stage.regions || [];\n stage.target = stage.target || $scope.resizeTargets[0].val;\n stage.action = stage.action || $scope.scaleActions[0].val;\n stage.resizeType = stage.resizeType || $scope.resizeTypes[0].val;\n if (!stage.action && stage.resizeType === 'exact') {\n stage.action = 'scale_exact';\n }\n stage.cloudProvider = 'gce';\n stage.cloudProviderType = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n ctrl.updateResizeType = function () {\n if (stage.action === 'scale_exact') {\n stage.resizeType = 'exact';\n delete stage.scalePct;\n delete stage.scaleNum;\n } else {\n stage.capacity = {};\n if (stage.resizeType === 'pct') {\n delete stage.scaleNum;\n } else {\n stage.resizeType = 'incr';\n delete stage.scalePct;\n stage.scaleNum = stage.scaleNum || 0;\n }\n }\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..scaleDownClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'gce',\n templateUrl: require('./scaleDownClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingFullSizeServerGroups',\n fieldLabel: 'Keep [X] full size Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n strategy: true,\n });\n })\n .controller('gceScaleDownClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (stage.remainingFullSizeServerGroups === undefined) {\n stage.remainingFullSizeServerGroups = 1;\n }\n\n if (stage.allowScaleDownActive === undefined) {\n stage.allowScaleDownActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..shrinkClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'gce',\n templateUrl: require('./shrinkClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'shrinkToSize', fieldLabel: 'shrink to [X] Server Groups' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceShrinkClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n if (stage.shrinkToSize === undefined) {\n stage.shrinkToSize = 1;\n }\n\n if (stage.allowDeleteActive === undefined) {\n stage.allowDeleteActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.retainLargerOverNewer === undefined) {\n stage.retainLargerOverNewer = 'false';\n }\n stage.retainLargerOverNewer = stage.retainLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, PipelineConfigService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE = 'spinnaker.gce.pipeline.stage..tagImageStage';\nexport const name = GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'upsertImageTags',\n cloudProvider: 'gce',\n templateUrl: require('./tagImageStage.html'),\n executionDetailsUrl: require('./tagImageExecutionDetails.html'),\n executionConfigSections: ['tagImageConfig', 'taskStatus'],\n });\n })\n .controller('gceTagImageStageCtrl', [\n '$scope',\n ($scope) => {\n AccountService.listAccounts('gce').then((accounts) => ($scope.accounts = accounts));\n\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'gce';\n\n const initUpstreamStages = () => {\n const upstreamDependencies = PipelineConfigService.getAllUpstreamDependencies(\n $scope.pipeline,\n $scope.stage,\n ).filter((stage) => StageConstants.IMAGE_PRODUCING_STAGES.includes(stage.type));\n $scope.consideredStages = new Map(upstreamDependencies.map((stage) => [stage.refId, stage.name]));\n };\n $scope.$watch('pipeline.stages', initUpstreamStages);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\n\nimport { AccountService, InfrastructureCaches } from '@spinnaker/core';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER =\n 'spinnaker.gce.securityGroup.create.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER, [UIROUTER_ANGULARJS])\n .controller('gceCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'application',\n 'securityGroup',\n function ($scope, $uibModalInstance, $state, $controller, application, securityGroup) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n targets: require('./createSecurityGroupTargets.html'),\n sourceFilters: require('./createSecurityGroupSourceFilters.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n const ctrl = this;\n\n securityGroup.backingData = {};\n securityGroup.network = 'default';\n securityGroup.sourceRanges = [];\n securityGroup.sourceTags = [];\n securityGroup.ipIngress = [];\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'create',\n }),\n );\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n ctrl.upsert = function () {\n ctrl.mixinUpsert('Create');\n };\n\n ctrl.initializeSecurityGroups();\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\n\nimport { FirewallLabels, InfrastructureCaches, SecurityGroupWriter, TaskMonitor } from '@spinnaker/core';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER =\n 'spinnaker.google.securityGroup.edit.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER, [UIROUTER_ANGULARJS])\n .controller('gceEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'application',\n 'securityGroup',\n '$controller',\n function ($scope, $uibModalInstance, $state, application, securityGroup, $controller) {\n $scope.pages = {\n targets: require('./createSecurityGroupTargets.html'),\n sourceFilters: require('./createSecurityGroupSourceFilters.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'edit',\n }),\n );\n\n $scope.isNew = false;\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: () => application.securityGroups.refresh(),\n });\n\n securityGroup.sourceRanges = _.map(securityGroup.sourceRanges, function (sourceRange) {\n return { value: sourceRange };\n });\n\n securityGroup.ipIngress = _.chain(securityGroup.ipIngressRules)\n .map(function (rule) {\n if (rule.portRanges && rule.portRanges.length > 0) {\n return rule.portRanges.map(function (portRange) {\n return {\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n } else {\n return [\n {\n type: rule.protocol,\n },\n ];\n }\n })\n .flatten()\n .value();\n\n securityGroup.sourceTags = securityGroup.sourceTags || [];\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.addSourceCIDR = function (sourceRanges) {\n sourceRanges.push({ value: '0.0.0.0/0' });\n };\n\n this.removeSourceCIDR = function (sourceRanges, index) {\n sourceRanges.splice(index, 1);\n };\n\n this.addRule = function (ruleset) {\n ruleset.push({\n type: 'tcp',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n this.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n this.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const allowed = _.map($scope.securityGroup.ipIngress, function (ipIngressRule) {\n const rule = {\n ipProtocol: ipIngressRule.type,\n };\n\n if (ipIngressRule.startPort && ipIngressRule.endPort) {\n rule.portRanges = [ipIngressRule.startPort + '-' + ipIngressRule.endPort];\n }\n\n return rule;\n });\n\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', {\n cloudProvider: 'gce',\n sourceRanges: _.uniq(_.map($scope.securityGroup.sourceRanges, 'value')),\n allowed: allowed,\n targetTags: $scope.securityGroup.targetTags || [],\n region: 'global',\n });\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n ]);\n","import { module } from 'angular';\nimport { has } from 'lodash';\n\nimport type { Application, IServerGroup } from '@spinnaker/core';\nimport { FirewallLabels } from '@spinnaker/core';\n\nexport class GceSecurityGroupHelpTextService {\n private serverGroupsIndexedByTag: Map<string, Set<string>>;\n private application: Application;\n private account: string;\n private network: string;\n\n public register(application: Application, account: string, network: string): PromiseLike<void> {\n this.reset();\n this.application = application;\n this.account = account;\n this.network = network;\n return this.indexServerGroupsByTag();\n }\n\n public getHelpTextForTag(tag: string, tagType: 'source' | 'target'): string {\n const serverGroups = this.getServerGroupsWithTag(tag);\n let text: string;\n switch (serverGroups.length) {\n case 0:\n text = null;\n break;\n case 1:\n text = `This ${tagType} tag associates this ${FirewallLabels.get('firewall')} with the server group <em>${\n serverGroups[0]\n }</em>.`;\n break;\n default:\n text = `This ${tagType} tag associates this ${FirewallLabels.get('firewall')} with the server groups\n ${serverGroups.map((serverGroup) => `<em>${serverGroup}</em>`).join(', ')}.`;\n break;\n }\n return text;\n }\n\n public getServerGroupsWithTag(tag: string): string[] {\n if (this.serverGroupsIndexedByTag.get(tag)) {\n return Array.from(this.serverGroupsIndexedByTag.get(tag)).sort();\n } else {\n return [];\n }\n }\n\n public reset(): void {\n this.application = null;\n this.account = null;\n this.serverGroupsIndexedByTag = new Map<string, Set<string>>();\n }\n\n private indexServerGroupsByTag(): PromiseLike<void> {\n return this.application.ready().then(() => {\n this.application.getDataSource('serverGroups').data.forEach((serverGroup: IServerGroup) => {\n if (\n has(serverGroup, 'providerMetadata.tags.length') &&\n serverGroup.account === this.account &&\n serverGroup.providerMetadata?.networkName === this.network\n ) {\n serverGroup.providerMetadata.tags.forEach((tag: string) => {\n if (!this.serverGroupsIndexedByTag.get(tag)) {\n this.serverGroupsIndexedByTag.set(\n tag,\n new Set<string>([serverGroup.name]),\n );\n } else {\n this.serverGroupsIndexedByTag.get(tag).add(serverGroup.name);\n }\n });\n }\n });\n });\n }\n}\n\nexport const GCE_SECURITY_GROUP_HELP_TEXT_SERVICE = 'spinnaker.gce.securityGroupHelpText.service';\nmodule(GCE_SECURITY_GROUP_HELP_TEXT_SERVICE, []).service(\n 'gceSecurityGroupHelpTextService',\n GceSecurityGroupHelpTextService,\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n FirewallLabels,\n ModalWizard,\n NetworkReader,\n SECURITY_GROUP_READER,\n SecurityGroupWriter,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { GCE_SECURITY_GROUP_HELP_TEXT_SERVICE } from '../securityGroupHelpText.service';\n\nimport './securityGroup.configure.less';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER =\n 'spinnaker.google.securityGroup.baseConfig.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n GCE_SECURITY_GROUP_HELP_TEXT_SERVICE,\n]).controller('gceConfigSecurityGroupMixin', [\n '$scope',\n '$state',\n '$uibModalInstance',\n 'application',\n 'securityGroup',\n 'securityGroupReader',\n 'cacheInitializer',\n 'gceSecurityGroupHelpTextService',\n 'mode',\n function (\n $scope,\n $state,\n $uibModalInstance,\n application,\n securityGroup,\n securityGroupReader,\n cacheInitializer,\n gceSecurityGroupHelpTextService,\n mode,\n ) {\n const ctrl = this;\n\n $scope.isNew = true;\n\n $scope.state = {\n submitting: false,\n refreshingSecurityGroups: false,\n removedRules: [],\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n mode: mode,\n target: null,\n targetOptions: null,\n };\n\n $scope.wizard = ModalWizard;\n\n ctrl.getTagHelpText = function (tag, tagType) {\n return gceSecurityGroupHelpTextService.getHelpTextForTag(tag, tagType);\n };\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n ctrl.registerHelpTextService = function () {\n gceSecurityGroupHelpTextService.register(\n application,\n $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n securityGroup.network,\n );\n };\n\n ctrl.initializeTargetOptions = function () {\n const options = ['allowAllTraffic', 'specifyTags'];\n if ($scope.state.mode === 'edit') {\n $scope.state.targetOptions = options;\n } else {\n $scope.state.targetOptions = ['autoGenerate'].concat(options);\n }\n };\n\n ctrl.initializeTarget = function () {\n if ($scope.state.mode === 'create') {\n $scope.state.target = 'autoGenerate';\n } else {\n if ($scope.securityGroup.targetTags && $scope.securityGroup.targetTags.length > 0) {\n $scope.state.target = 'specifyTags';\n } else {\n $scope.state.target = 'allowAllTraffic';\n }\n }\n };\n\n ctrl.getTargetLabel = function (target) {\n switch (target) {\n case 'autoGenerate':\n return 'Auto-generate target tag';\n case 'allowAllTraffic':\n return 'Allow traffic to all server groups';\n case 'specifyTags':\n return 'Specify target tags';\n default:\n return null;\n }\n };\n\n ctrl.onTargetChange = function () {\n switch ($scope.state.target) {\n case 'autoGenerate':\n $scope.securityGroup.targetTags = null;\n break;\n case 'allowAllTraffic':\n $scope.securityGroup.targetTags = [];\n break;\n case 'specifyTags':\n $scope.securityGroup.targetTags = $scope.securityGroup.targetTags || [];\n break;\n default:\n break;\n }\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: 'global',\n vpcId: $scope.securityGroup.vpcId,\n provider: 'gce',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Creating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n $scope.securityGroup = securityGroup;\n ctrl.initializeTargetOptions();\n ctrl.initializeTarget();\n ctrl.onTargetChange();\n ctrl.registerHelpTextService();\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create');\n });\n };\n\n ctrl.mixinUpsert = function (descriptor) {\n $scope.taskMonitor.submit(function () {\n const allowed = _.map($scope.securityGroup.ipIngress, function (ipIngressRule) {\n const rule = {\n ipProtocol: ipIngressRule.type,\n };\n\n if (ipIngressRule.startPort && ipIngressRule.endPort) {\n rule.portRanges = [ipIngressRule.startPort + '-' + ipIngressRule.endPort];\n }\n\n return rule;\n });\n\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, descriptor, {\n cloudProvider: 'gce',\n sourceRanges: _.uniq(_.map($scope.securityGroup.sourceRanges, 'value')),\n targetTags: $scope.securityGroup.targetTags,\n sourceTags: $scope.securityGroup.sourceTags,\n allowed: allowed,\n region: 'global',\n network: $scope.securityGroup.network,\n });\n });\n };\n\n ctrl.accountUpdated = function () {\n ctrl.initializeSecurityGroups();\n ctrl.updateNetworks();\n ctrl.updateName();\n };\n\n ctrl.refreshSecurityGroups = function () {\n $scope.state.refreshingSecurityGroups = true;\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return ctrl.initializeSecurityGroups().then(function () {\n $scope.state.refreshingSecurityGroups = false;\n });\n });\n };\n\n ctrl.initializeSecurityGroups = function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n const account = $scope.securityGroup.credentials || $scope.securityGroup.accountName;\n\n let existingGroups;\n if (account) {\n existingGroups = securityGroups[account].gce.global;\n } else {\n existingGroups = securityGroups;\n }\n\n $scope.existingSecurityGroupNames = _.map(existingGroups, 'name');\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateNetworks = function () {\n NetworkReader.listNetworksByProvider('gce').then(function (gceNetworks) {\n const account = $scope.securityGroup.credentials || $scope.securityGroup.accountName;\n $scope.securityGroup.backingData.networks = _(gceNetworks)\n .filter((n) => n.account === account && !n.id.includes('/'))\n .map((n) => n.id)\n .value();\n });\n };\n\n ctrl.getCurrentNamePattern = function () {\n return /^[a-zA-Z0-9-]*$/;\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n name = _.trimEnd(name, '-');\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n ctrl.namePattern = {\n test: function (name) {\n return ctrl.getCurrentNamePattern().test(name);\n },\n };\n\n ctrl.addSourceCIDR = function (sourceRanges) {\n sourceRanges.push({ value: '0.0.0.0/0' });\n };\n\n ctrl.removeSourceCIDR = function (sourceRanges, index) {\n sourceRanges.splice(index, 1);\n };\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n type: 'tcp',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n ctrl.dismissRemovedRules = function () {\n $scope.state.removedRules = [];\n ModalWizard.markClean('Ingress');\n ModalWizard.markComplete('Ingress');\n };\n\n ctrl.isValid = function () {\n return (\n ($scope.state.target === 'specifyTags' ? $scope.securityGroup.targetTags.length > 0 : true) &&\n $scope.securityGroup.ipIngress.length > 0 &&\n ($scope.securityGroup.sourceTags.length > 0 || $scope.securityGroup.sourceRanges.length > 0)\n );\n };\n\n ctrl.addTargetTag = function () {\n $scope.securityGroup.targetTags.push('');\n };\n\n ctrl.removeTargetTag = function (index) {\n $scope.securityGroup.targetTags.splice(index, 1);\n };\n\n ctrl.addSourceTag = function () {\n $scope.securityGroup.sourceTags.push('');\n };\n\n ctrl.removeSourceTag = function (index) {\n $scope.securityGroup.sourceTags.splice(index, 1);\n };\n },\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels } from '@spinnaker/core';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER } from '../configure/ConfigSecurityGroupMixin.controller';\n\nexport const GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER =\n 'spinnaker.google.securityGroup.clone.controller';\nexport const name = GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER,\n ])\n .controller('gceCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, securityGroup, application) {\n const vm = this;\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n targets: require('../configure/createSecurityGroupTargets.html'),\n sourceFilters: require('../configure/createSecurityGroupSourceFilters.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'clone',\n }),\n );\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n vm.accountUpdated();\n });\n\n securityGroup.sourceRanges = _.map(securityGroup.sourceRanges, function (sourceRange) {\n return { value: sourceRange };\n });\n\n securityGroup.ipIngress = _.chain(securityGroup.ipIngressRules)\n .map(function (rule) {\n if (rule.portRanges && rule.portRanges.length > 0) {\n return rule.portRanges.map(function (portRange) {\n return {\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n } else {\n return [\n {\n type: rule.protocol,\n },\n ];\n }\n })\n .flatten()\n .value();\n\n securityGroup.backingData = {};\n\n securityGroup.sourceTags = securityGroup.sourceTags || [];\n\n vm.upsert = function () {\n vm.mixinUpsert('Clone');\n };\n\n vm.initializeSecurityGroups();\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CloudProviderRegistry,\n ConfirmationModalService,\n FirewallLabels,\n SECURITY_GROUP_READER,\n SecurityGroupWriter,\n} from '@spinnaker/core';\n\nimport { GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { GCE_SECURITY_GROUP_HELP_TEXT_SERVICE } from '../securityGroupHelpText.service';\n\nexport const GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.securityGroup.gce.details.controller';\nexport const name = GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n GCE_SECURITY_GROUP_HELP_TEXT_SERVICE,\n ])\n .controller('gceSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'securityGroupReader',\n '$uibModal',\n 'gceSecurityGroupHelpTextService',\n function (\n $scope,\n $state,\n resolvedSecurityGroup,\n app,\n securityGroupReader,\n $uibModal,\n gceSecurityGroupHelpTextService,\n ) {\n const application = (this.application = app);\n const securityGroup = resolvedSecurityGroup;\n\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('gce', 'securityGroup.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n function extractSecurityGroup() {\n return securityGroupReader\n .getSecurityGroupDetails(\n application,\n securityGroup.accountId,\n securityGroup.provider,\n securityGroup.region,\n securityGroup.vpcId,\n securityGroup.name,\n )\n .then(function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n $scope.securityGroup = details;\n const applicationSecurityGroup = securityGroupReader.getApplicationSecurityGroup(\n application,\n securityGroup.accountId,\n securityGroup.region,\n securityGroup.name,\n );\n $scope.securityGroup = angular.extend(_.cloneDeep(applicationSecurityGroup), $scope.securityGroup);\n\n // These come back from the global firewall endpoint as '[tag-a, tag-b]'\n if (typeof $scope.securityGroup.targetTags === 'string') {\n const targetTags = $scope.securityGroup.targetTags;\n $scope.securityGroup.targetTags = targetTags.substring(1, targetTags.length - 1).split(', ');\n }\n if (typeof $scope.securityGroup.sourceTags === 'string') {\n const sourceTags = $scope.securityGroup.sourceTags;\n $scope.securityGroup.sourceTags = sourceTags.substring(1, sourceTags.length - 1).split(', ');\n }\n\n // These come back from the global firewall endpoint as '[account-a@project.iam.gserviceaccount.com, account-b@project.iam.gserviceaccount.com]'\n if (typeof $scope.securityGroup.targetServiceAccounts === 'string') {\n const targetServiceAccounts = $scope.securityGroup.targetServiceAccounts;\n $scope.securityGroup.targetServiceAccounts = targetServiceAccounts\n .substring(1, targetServiceAccounts.length - 1)\n .split(', ');\n }\n if (typeof $scope.securityGroup.sourceServiceAccounts === 'string') {\n const sourceServiceAccounts = $scope.securityGroup.sourceServiceAccounts;\n $scope.securityGroup.sourceServiceAccounts = sourceServiceAccounts\n .substring(1, sourceServiceAccounts.length - 1)\n .split(', ');\n }\n\n $scope.securityGroup.sourceRanges = _.chain($scope.securityGroup.ipRangeRules)\n .map((rule) => {\n return rule.range.ip && rule.range.cidr ? rule.range.ip + rule.range.cidr : null;\n })\n .compact()\n .uniq()\n .value();\n\n const ipIngress = _.map($scope.securityGroup.ipRangeRules, function (ipRangeRule) {\n return {\n protocol: ipRangeRule.protocol,\n portRanges: ipRangeRule.portRanges,\n };\n });\n\n let ipIngressRules = {};\n\n ipIngress.forEach(function (ipIngressRule) {\n if (_.has(ipIngressRules, ipIngressRule.protocol)) {\n ipIngressRules[ipIngressRule.protocol] = ipIngressRules[ipIngressRule.protocol].concat(\n ipIngressRule.portRanges,\n );\n\n ipIngressRules[ipIngressRule.protocol] = _.uniqBy(ipIngressRules[ipIngressRule.protocol], function (\n portRange,\n ) {\n return portRange.startPort + '->' + portRange.endPort;\n });\n } else {\n ipIngressRules[ipIngressRule.protocol] = ipIngressRule.portRanges;\n }\n });\n\n ipIngressRules = _.map(ipIngressRules, function (portRanges, protocol) {\n return {\n protocol: protocol,\n portRanges: portRanges,\n };\n });\n\n $scope.securityGroup.ipIngressRules = ipIngressRules;\n\n $scope.securityGroup.protocolPortRangeCount = _.sumBy(ipIngressRules, function (ipIngressRule) {\n return ipIngressRule.portRanges.length > 1 ? ipIngressRule.portRanges.length : 1;\n });\n\n AccountService.getAccountDetails(securityGroup.accountId).then(function (accountDetails) {\n $scope.securityGroup.logsLink =\n 'https://console.developers.google.com/project/' +\n accountDetails.project +\n '/logs?service=gce_firewall_rule&minLogLevel=0&filters=text:' +\n securityGroup.name;\n });\n\n gceSecurityGroupHelpTextService.register(\n application,\n $scope.securityGroup.accountName,\n $scope.securityGroup.network,\n );\n }\n }, fourOhFour);\n }\n\n function fourOhFour() {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n application.securityGroups\n .ready()\n .then(() => extractSecurityGroup())\n .then(() => {\n // If the user navigates away from the view before the initial extractSecurityGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\n }\n });\n\n this.getTagHelpText = function (tag, tagType) {\n return gceSecurityGroupHelpTextService.getHelpTextForTag(tag, tagType);\n };\n\n this.editInboundRules = function editInboundRules() {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'gceEditSecurityGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n securityGroup: function () {\n return angular.copy($scope.securityGroup);\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'gceCloneSecurityGroupController as ctrl',\n size: 'lg',\n resolve: {\n securityGroup: function () {\n const securityGroup = angular.copy($scope.securityGroup);\n if (securityGroup.region) {\n securityGroup.regions = [securityGroup.region];\n }\n return securityGroup;\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.deleteSecurityGroup = function deleteSecurityGroup() {\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n };\n\n const submitMethod = function () {\n return SecurityGroupWriter.deleteSecurityGroup(securityGroup, application, {\n cloudProvider: $scope.securityGroup.type,\n securityGroupName: securityGroup.name,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + securityGroup.name + '?',\n buttonText: 'Delete ' + securityGroup.name,\n account: securityGroup.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n if (app.isStandalone) {\n // we still want the edit to refresh the firewall details when the modal closes\n app.securityGroups = {\n refresh: extractSecurityGroup,\n };\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.gce.securityGroup.reader';\nexport const name = GOOGLE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('gceSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n return indexedSecurityGroups[container.account].global[securityGroupId];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.gce.securityGroup.transformer';\nexport const name = GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('gceSecurityGroupTransformer', [\n '$q',\n function ($q) {\n function normalizeSecurityGroup(securityGroup) {\n return $q.when(securityGroup); // no-op\n }\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.basicSettings.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT, []).component(\n 'gceAutoscalingPolicyBasicSettings',\n {\n bindings: {\n policy: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./basicSettings.component.html'),\n controller: function controller() {\n this.modes = ['ON', 'OFF', 'ONLY_SCALE_OUT'];\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.metricSettings.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT, []).component(\n 'gceAutoscalingPolicyMetricSettings',\n {\n bindings: {\n policy: '=',\n showNoMetricsWarning: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./metricSettings.component.html'),\n controller: function () {\n this.$onInit = () => {\n const multipleAllowedFor = {\n cpuUtilization: false,\n loadBalancingUtilization: false,\n customMetricUtilizations: true,\n };\n\n const metricTypes = Object.keys(multipleAllowedFor);\n\n this.targetTypesToDisplayMap = {\n GAUGE: 'Gauge',\n DELTA_PER_SECOND: 'Delta / second',\n DELTA_PER_MINUTE: 'Delta / minute',\n };\n\n this.metricScopeTypesToDisplayMap = {\n TIME_SERIES_PER_INSTANCE: 'Time series per instance',\n SINGLE_TIME_SERIES_PER_GROUP: 'Single time series per group',\n };\n\n this.scalingpolicyTypesToDisplayMap = {\n UTILIZATION_TARGET: 'Utilization target',\n SINGLE_INSTANCE_ASSIGNMENT: 'singleInstanceAssignment',\n };\n\n this.addMetric = (metricType) => {\n if (multipleAllowedFor[metricType]) {\n this.policy[metricType] = this.policy[metricType] || [];\n this.policy[metricType].push({});\n } else if (emptyOrUndefined(this.policy[metricType])) {\n this.policy[metricType] = { utilizationTarget: null };\n }\n };\n\n this.deleteMetric = (metricType, index) => {\n if (multipleAllowedFor[metricType]) {\n this.policy[metricType].splice(index, 1);\n } else {\n // sending an empty object to the API deletes the policy.\n this.policy[metricType] = {};\n }\n };\n\n this.showMetric = (metricType) => {\n const metric = this.policy[metricType];\n // should not show policy form if the policy is undefined or an empty object.\n return !emptyOrUndefined(metric);\n };\n\n this.isSingleTimeSeriesPerGroup = (scopeType, index) => {\n if (this.policy.customMetricUtilizations[index].metricExportScope === scopeType) return true;\n };\n\n this.isScalingPolicySingleInstanceAssignment = (policyType, index) => {\n if (this.policy.customMetricUtilizations[index].scalingpolicy === policyType) return true;\n };\n\n this.showNoMetricsWarning = () => {\n return _.every(\n metricTypes.map((type) => {\n return _.some([\n multipleAllowedFor[type] && !_.get(this.policy, [type, 'length']),\n emptyOrUndefined(this.policy[type]),\n ]);\n }),\n );\n };\n\n this.setUtilizationTargetFromDisplay = (metricType, value) => {\n this.policy[metricType].utilizationTarget = value / 100;\n };\n\n this.initializeTargetDisplay = (metricType) => {\n this[`${metricType}TargetDisplay`] = safeDecimalToPercent(this.policy[metricType].utilizationTarget);\n };\n\n function safeDecimalToPercent(value) {\n if (value === 0) {\n return 0;\n }\n return value ? Math.round(value * 100) : undefined;\n }\n\n function emptyOrUndefined(value) {\n return _.isEqual(value, {}) || _.isUndefined(value);\n }\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\nimport timezones from './standardTimezone.json';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.scalingSchedules.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT, []).component(\n 'gceAutoscalingPolicyScalingSchedules',\n {\n bindings: {\n policy: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./scalingSchedules.component.html'),\n controller: function () {\n this.$onInit = () => {\n const multipleAllowedFor = {\n scalingSchedules: true,\n };\n\n this.timezones = timezones;\n\n this.addSchedule = (scheduleType) => {\n if (multipleAllowedFor[scheduleType]) {\n this.policy[scheduleType] = this.policy[scheduleType] || [];\n this.policy[scheduleType].push({});\n } else if (emptyOrUndefined(this.policy[scheduleType])) {\n this.policy[scheduleType] = {};\n }\n };\n\n this.deleteSchedule = (scheduleType, index) => {\n if (multipleAllowedFor[scheduleType]) {\n this.policy[scheduleType].splice(index, 1);\n } else {\n // sending an empty object to the API deletes the policy.\n this.policy[scheduleType] = {};\n }\n };\n\n this.selectTimezone = (timezone, index) => {\n const { scalingSchedules } = this.policy;\n const schedule = scalingSchedules[index];\n scalingSchedules[index] = { ...schedule, timezone };\n\n this.updatePolicy({\n ...this.policy,\n scalingSchedules: [...scalingSchedules],\n });\n };\n\n function emptyOrUndefined(value) {\n return _.isEqual(value, {}) || _.isUndefined(value);\n }\n };\n },\n },\n);\n","import { module } from 'angular';\nimport { chain } from 'lodash';\nimport React from 'react';\nimport type { AutocompleteResult, Option } from 'react-select';\nimport { Async } from 'react-select';\nimport { react2angular } from 'react2angular';\nimport { withErrorBoundary } from '@spinnaker/core';\n\ninterface ITimezoneSelectProps {\n availableTimezones: string[];\n selectedTimezone: string;\n selectTimezone: (timezone: string, target?: any) => void;\n target?: any;\n}\n\nexport class TimezoneSelect extends React.Component<ITimezoneSelectProps> {\n private loadOptions = (inputValue: string): Promise<AutocompleteResult<string>> => {\n return new Promise((resolve) => {\n if (!inputValue || inputValue.length < 3) {\n resolve({\n options: [],\n complete: false,\n });\n } else {\n const filteredOptions = chain(this.props.availableTimezones)\n .filter((i) => i.toLowerCase().includes(inputValue))\n .map((i) => ({ value: i, label: i }))\n .value();\n resolve({\n options: filteredOptions,\n complete: false,\n });\n }\n });\n };\n\n public render() {\n return (\n <Async\n cache={null}\n clearable={false}\n ignoreAccents={false}\n loadOptions={this.loadOptions}\n onChange={(selected: Option<string>) => this.props.selectTimezone(selected.value, this.props.target)}\n placeholder=\"Type at least 3 characters to search for an timezone...\"\n searchPromptText=\"Type at least 3 characters to search for an timezone...\"\n value={{ value: this.props.selectedTimezone, label: this.props.selectedTimezone }}\n required={true}\n />\n );\n }\n}\n\nexport const GCE_TIMEZONE_SELECT = 'spinnaker.gce.timezoneSelect';\nmodule(GCE_TIMEZONE_SELECT, []).component(\n 'gceTimezoneSelect',\n react2angular(withErrorBoundary(TimezoneSelect, 'gceTimezoneSelect'), [\n 'availableTimezones',\n 'selectedTimezone',\n 'selectTimezone',\n 'target',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport { defaults } from 'lodash';\n\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../loadBalancer/httpLoadBalancerUtils.service';\n\nexport const GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.gce.serverGroup.transformer';\nexport const name = GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER, [GCE_HTTP_LOAD_BALANCER_UTILS]).factory(\n 'gceServerGroupTransformer',\n [\n 'gceHttpLoadBalancerUtils',\n function (gceHttpLoadBalancerUtils) {\n function normalizeServerGroup(serverGroup, application) {\n return application\n .getDataSource('loadBalancers')\n .ready()\n .then(() => {\n if (serverGroup.loadBalancers) {\n // At this point, the HTTP(S) load balancers have been normalized (listener names mapped to URL map names).\n // Our server groups' lists of load balancer names still need to make this mapping.\n serverGroup.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n serverGroup.loadBalancers,\n serverGroup.account,\n application.getDataSource('loadBalancers').data,\n );\n }\n return serverGroup;\n });\n }\n\n function convertServerGroupCommandToDeployConfiguration(base) {\n const truncatedZones = base.backingData.filtered.truncatedZones;\n\n // use defaults to avoid copying the backingData, which is huge and expensive to copy over\n const command = defaults({ backingData: [], viewState: [] }, base);\n if (base.viewState.mode !== 'clone') {\n delete command.source;\n }\n // We took this approach to avoid a breaking change to existing pipelines.\n command.disableTraffic = !command.enableTraffic;\n command.cloudProvider = 'gce';\n command.availabilityZones = {};\n command.availabilityZones[command.region] = base.zone ? [base.zone] : truncatedZones;\n command.account = command.credentials;\n delete command.viewState;\n delete command.backingData;\n delete command.selectedProvider;\n delete command.implicitSecurityGroups;\n delete command.enableTraffic;\n delete command.providerType;\n delete command.enableAutoHealing;\n\n return command;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration: convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup: normalizeServerGroup,\n };\n },\n ],\n);\n","import type { IGceHealthCheck, IGceHealthCheckKind } from '../domain';\n\nexport interface IGceHealthCheckOption {\n displayName: string;\n kind: IGceHealthCheckKind;\n name: string;\n selfLink: string;\n}\n\nexport function parseHealthCheckUrl(url: string): { healthCheckName: string; healthCheckKind: IGceHealthCheckKind } {\n const healthCheckPathParts = url.split('/');\n if (healthCheckPathParts.length < 2) {\n throw new Error(`Health check url ${url} missing expected segments.`);\n }\n const healthCheckName = healthCheckPathParts[healthCheckPathParts.length - 1];\n const healthCheckKind = healthCheckPathParts[healthCheckPathParts.length - 2].slice(0, -1);\n return {\n healthCheckName,\n healthCheckKind: healthCheckKind as IGceHealthCheckKind,\n };\n}\n\nexport function getHealthCheckOptions(healthChecks: IGceHealthCheck[]): IGceHealthCheckOption[] {\n const duplicateNames = getDuplicateHealthCheckNames(healthChecks);\n return healthChecks.map((hc) => {\n const isNameDupe = duplicateNames.has(hc.name);\n return {\n displayName: isNameDupe ? `${hc.name} (${hc.kind})` : hc.name,\n kind: hc.kind,\n name: hc.name,\n selfLink: hc.selfLink,\n };\n });\n}\n\nexport function getDuplicateHealthCheckNames(healthChecks: IGceHealthCheck[]): Set<string> {\n const allNames = new Set<string>();\n const duplicateNames = new Set<string>();\n healthChecks.forEach((hc) => {\n if (allNames.has(hc.name)) {\n duplicateNames.add(hc.name);\n } else {\n allNames.add(hc.name);\n }\n });\n return duplicateNames;\n}\n","import { get, intersectionBy, isFinite } from 'lodash';\n\nexport interface IGceAcceleratorTypeRaw {\n name: string;\n description: string;\n maximumCardsPerInstance: number;\n}\n\nexport interface IGceAcceleratorType extends IGceAcceleratorTypeRaw {\n availableCardCounts: number[];\n}\n\ninterface IZoneToAcceleratorTypesMap {\n [zone: string]: IGceAcceleratorTypeRaw[];\n}\n\nexport interface IGceAcceleratorCommand {\n backingData: any;\n credentials: string;\n distributionPolicy: { zones: string[]; targetShape?: string };\n regional: boolean;\n selectZones: boolean;\n zone: string;\n}\n\nexport class GceAcceleratorService {\n public static getAvailableAccelerators({\n backingData,\n credentials,\n distributionPolicy,\n regional,\n selectZones,\n zone,\n }: IGceAcceleratorCommand): IGceAcceleratorType[] {\n const acceleratorMap = this.getZoneToAcceleratorTypesMap(backingData, credentials);\n\n if (zone && !regional) {\n return this.getAcceleratorTypesForZone(acceleratorMap, zone);\n }\n\n if (regional && selectZones) {\n const zones = get(distributionPolicy, 'zones', []);\n const allZonesAcceleratorTypes = zones.map((z) => this.getAcceleratorTypesForZone(acceleratorMap, z));\n return intersectionBy.apply(null, [...allZonesAcceleratorTypes, 'name']);\n }\n\n return [];\n }\n\n private static getZoneToAcceleratorTypesMap(backingData: any, credentials: string): IZoneToAcceleratorTypesMap {\n return get(backingData, ['credentialsKeyedByAccount', credentials, 'zoneToAcceleratorTypesMap'], {});\n }\n\n private static getAcceleratorTypesForZone(\n acceleratorMap: IZoneToAcceleratorTypesMap,\n zone: string,\n ): IGceAcceleratorType[] {\n return get(acceleratorMap, [zone, 'acceleratorTypes', 'acceleratorTypes'], []).map((a) => {\n return {\n ...a,\n availableCardCounts: this.getAvailableCardCounts(a),\n };\n });\n }\n\n private static getAvailableCardCounts(accelerator: IGceAcceleratorTypeRaw): number[] {\n const maxCards = isFinite(accelerator.maximumCardsPerInstance) ? accelerator.maximumCardsPerInstance : 4;\n const availableCardCounts = [];\n for (let i = 1; i <= maxCards; i *= 2) {\n availableCardCounts.push(i);\n }\n return availableCardCounts;\n }\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels } from '@spinnaker/core';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE =\n 'spinnaker.deck.gce.tagManager.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE, []).factory('gceTagManager', function () {\n const resetKeys = ['command', 'securityGroups', 'securityGroupObjectsKeyedByTag', 'securityGroupObjectsKeyedById'];\n\n this.reset = () => {\n resetKeys.forEach((key) => delete this[key]);\n };\n\n this.register = (command) => {\n this.command = command;\n const { credentials, backingData } = command;\n if (backingData.securityGroups[credentials] !== undefined) {\n this.securityGroupObjects = _.cloneDeep(backingData.securityGroups[credentials].gce.global);\n\n initializeSecurityGroupObjects(this.securityGroupObjects, command.tags);\n\n const { byTag, bySecurityGroupId } = groupSecurityGroupObjects(this.securityGroupObjects);\n this.securityGroupObjectsKeyedByTag = byTag;\n this.securityGroupObjectsKeyedById = bySecurityGroupId;\n }\n\n if (!command.securityGroups) {\n command.securityGroups = this.inferSecurityGroupIdsFromTags(command.tags);\n }\n };\n\n this.inferSecurityGroupIdsFromTags = (commandTags = []) => {\n return _.chain(commandTags)\n .map((t) => this.securityGroupObjectsKeyedByTag[t.value])\n .flatten()\n .compact()\n .filter((sg) => sg.network === this.command.network)\n .map('id')\n .uniq()\n .value();\n };\n\n const initializeSecurityGroupObjects = (securityGroupObjects, commandTags = []) => {\n securityGroupObjects.forEach((sg) => {\n // Raw target tags look like '[tag-a, tag-b]'.\n const rawTags = sg.targetTags;\n sg.tagsArray = rawTags ? rawTags.substring(1, rawTags.length - 1).split(', ') : [];\n\n sg.selectedTags = commandTags\n ? _.intersection(\n commandTags.map((t) => t.value),\n sg.tagsArray,\n )\n : [];\n });\n };\n\n const groupSecurityGroupObjects = (securityGroupObjects) => {\n return securityGroupObjects.reduce(\n (groupings, sg) => {\n const { bySecurityGroupId } = groupings;\n bySecurityGroupId[sg.id] = sg;\n\n return sg.tagsArray.reduce((groupings, tag) => {\n const { byTag } = groupings;\n if (!byTag[tag]) {\n byTag[tag] = [];\n }\n byTag[tag].push(sg);\n\n return groupings;\n }, groupings);\n },\n { byTag: {}, bySecurityGroupId: {} },\n );\n };\n\n this.inferSelectedSecurityGroupFromTag = _.debounce((tagName) => {\n let securityGroupObjectsWithTag = this.securityGroupObjectsKeyedByTag[tagName];\n const c = this.command;\n\n if (securityGroupObjectsWithTag) {\n securityGroupObjectsWithTag = _.filter(securityGroupObjectsWithTag, (sg) => sg.network === this.command.network);\n }\n\n if (securityGroupObjectsWithTag) {\n updateSelectedTagsOnSecurityGroupObjects(securityGroupObjectsWithTag, tagName);\n c.securityGroups = _.map(\n updateSelectedSecurityGroups(getSecurityGroupObjectsFromIds(c.securityGroups), securityGroupObjectsWithTag),\n 'id',\n );\n }\n\n // If you pause while typing \"tag-a,\" but you really want to add \"tag-abc,\"\n // make sure you remove \"tag-a\".\n this.updateSelectedTags();\n }, 100);\n\n this.updateSelectedTags = () => {\n const c = this.command;\n const tags = c.tags.map((t) => t.value);\n\n getSecurityGroupObjectsFromIds(c.securityGroups).forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = _.intersection(sg.selectedTags, tags);\n }\n\n if (!_.get(sg, 'selectedTags.length')) {\n c.securityGroups = _.without(c.securityGroups, sg.id);\n }\n });\n };\n\n this.addTag = (tagName) => {\n const c = this.command;\n const tags = c.tags;\n let securityGroupObjectsWithTag = this.securityGroupObjectsKeyedByTag[tagName];\n\n if (securityGroupObjectsWithTag) {\n securityGroupObjectsWithTag = _.filter(securityGroupObjectsWithTag, (sg) => sg.network === this.command.network);\n }\n\n if (\n !_.includes(\n tags.map((t) => t.value),\n tagName,\n )\n ) {\n tags.push({ value: tagName });\n }\n\n if (securityGroupObjectsWithTag) {\n updateSelectedTagsOnSecurityGroupObjects(securityGroupObjectsWithTag, tagName);\n c.securityGroups = _.map(\n updateSelectedSecurityGroups(getSecurityGroupObjectsFromIds(c.securityGroups), securityGroupObjectsWithTag),\n 'id',\n );\n }\n };\n\n const getSecurityGroupObjectsFromIds = (ids) => ids.map((id) => this.securityGroupObjectsKeyedById[id]);\n\n const updateSelectedTagsOnSecurityGroupObjects = (securityGroupObjects, newTag) => {\n securityGroupObjects.forEach((sg) => {\n sg.selectedTags = _.chain(sg.selectedTags || [])\n .concat([newTag])\n .uniq()\n .value();\n });\n };\n\n const updateSelectedSecurityGroups = (oldGroups, newGroups) => {\n return _.chain(oldGroups).concat(newGroups).uniq().value();\n };\n\n this.removeTag = (tagName) => {\n const c = this.command;\n const securityGroupIds = c.securityGroups || [];\n const securityGroupObjects = getSecurityGroupObjectsFromIds(securityGroupIds);\n\n securityGroupObjects.forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = sg.selectedTags.filter((tag) => tag !== tagName);\n }\n });\n\n c.tags = c.tags.filter((tag) => tag.value !== tagName);\n };\n\n this.removeSecurityGroup = (securityGroupId) => {\n const securityGroupObject = this.securityGroupObjectsKeyedById[securityGroupId];\n const tagsToRemove = securityGroupObject.selectedTags;\n const c = this.command;\n\n getSecurityGroupObjectsFromIds(c.securityGroups).forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = _.difference(sg.selectedTags, tagsToRemove);\n }\n });\n\n securityGroupObject.selectedTags = [];\n c.tags = _.chain(c.tags)\n .map((t) => t.value)\n .difference(tagsToRemove)\n .map((t) => ({ value: t }))\n .value();\n };\n\n this.getToolTipContent = (tagName) => {\n const groups = _.get(this, ['securityGroupObjectsKeyedByTag', tagName]);\n const groupIds = groups ? groups.filter((sg) => sg.network === this.command.network).map((sg) => sg.id) : [];\n\n return `This tag associates this server group with ${\n groupIds.length > 1 ? FirewallLabels.get('firewalls') : FirewallLabels.get('firewall')\n }\n <em>${groupIds.join(', ')}</em>.`;\n };\n\n this.showToolTip = (tagName) => {\n return !!_.get(this, ['securityGroupObjectsKeyedByTag', tagName]);\n };\n\n return this;\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n NetworkReader,\n SECURITY_GROUP_READER,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { GCEProviderSettings } from '../../gce.settings';\nimport { GCE_HEALTH_CHECK_READER } from '../../healthCheck/healthCheck.read.service';\nimport { getHealthCheckOptions } from '../../healthCheck/healthCheckUtils';\nimport { GceImageReader } from '../../image';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE } from '../../instance/gceInstanceType.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../loadBalancer/httpLoadBalancerUtils.service';\nimport { LOAD_BALANCER_SET_TRANSFORMER } from '../../loadBalancer/loadBalancer.setTransformer';\nimport { GceAcceleratorService } from './wizard/advancedSettings/gceAccelerator.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './wizard/securityGroups/tagManager.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.serverGroup.configure.gce.configuration.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [\n LOAD_BALANCER_SET_TRANSFORMER,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GCE_HEALTH_CHECK_READER,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .factory('gceServerGroupConfigurationService', [\n 'securityGroupReader',\n 'gceInstanceTypeService',\n 'cacheInitializer',\n '$q',\n 'loadBalancerReader',\n 'gceCustomInstanceBuilderService',\n 'gceHttpLoadBalancerUtils',\n 'gceHealthCheckReader',\n 'gceTagManager',\n 'gceLoadBalancerSetTransformer',\n function (\n securityGroupReader,\n gceInstanceTypeService,\n cacheInitializer,\n $q,\n loadBalancerReader,\n gceCustomInstanceBuilderService,\n gceHttpLoadBalancerUtils,\n gceHealthCheckReader,\n gceTagManager,\n gceLoadBalancerSetTransformer,\n ) {\n const persistentDiskTypes = ['pd-standard', 'pd-ssd', 'hyperdisk-balanced'];\n const authScopes = [\n 'cloud-platform',\n 'userinfo.email',\n 'compute.readonly',\n 'compute',\n 'cloud.useraccounts.readonly',\n 'cloud.useraccounts',\n 'devstorage.read_only',\n 'devstorage.write_only',\n 'devstorage.full_control',\n 'taskqueue',\n 'bigquery',\n 'sqlservice.admin',\n 'datastore',\n 'logging.write',\n 'logging.read',\n 'logging.admin',\n 'monitoring.write',\n 'monitoring.read',\n 'monitoring',\n 'bigtable.data.readonly',\n 'bigtable.data',\n 'bigtable.admin',\n 'bigtable.admin.table',\n ];\n\n function configureCommand(application, command) {\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('gce'),\n securityGroupReader.getAllSecurityGroups(),\n NetworkReader.listNetworksByProvider('gce'),\n SubnetReader.listSubnetsByProvider('gce'),\n loadBalancerReader.listLoadBalancers('gce'),\n loadAllImages(command.credentials),\n gceInstanceTypeService.getAllTypesByRegion(),\n $q.when(angular.copy(persistentDiskTypes)),\n $q.when(angular.copy(authScopes)),\n gceHealthCheckReader.listHealthChecks(),\n AccountService.listAccounts('gce'),\n ])\n .then(function ([\n credentialsKeyedByAccount,\n securityGroups,\n networks,\n subnets,\n loadBalancers,\n allImages,\n instanceTypes,\n persistentDiskTypes,\n authScopes,\n healthChecks,\n accounts,\n ]) {\n const backingData = {\n credentialsKeyedByAccount,\n securityGroups,\n networks,\n subnets,\n loadBalancers,\n allImages,\n instanceTypes,\n persistentDiskTypes,\n authScopes,\n healthChecks,\n accounts,\n };\n let securityGroupReloader = $q.when(null);\n let networkReloader = $q.when(null);\n let healthCheckReloader = $q.when(null);\n backingData.filtered = {};\n backingData.distributionPolicyTargetShapes = getDistributionPolicyTargetShapes();\n command.backingData = backingData;\n configureImages(command);\n\n if (command.securityGroups && command.securityGroups.length) {\n // Verify all firewalls are accounted for; otherwise, try refreshing firewalls cache.\n const securityGroupIds = _.map(getSecurityGroups(command), 'id');\n if (_.intersection(command.securityGroups, securityGroupIds).length < command.securityGroups.length) {\n securityGroupReloader = refreshSecurityGroups(command, true);\n }\n }\n if (command.network) {\n // Verify network is accounted for; otherwise, try refreshing networks cache.\n const networkNames = getNetworkNames(command);\n if (!networkNames.includes(command.network)) {\n networkReloader = refreshNetworks(command);\n }\n }\n\n // eslint-disable-next-line no-console\n if (command.autoScalingPolicy) {\n command.enableAutoScaling = true;\n }\n\n if (command.autoHealingPolicy) {\n command.enableAutoHealing = true;\n }\n if (_.has(command, 'autoHealingPolicy.healthCheck')) {\n // Verify health check is accounted for; otherwise, try refreshing health checks cache.\n const healthChecks = getHealthChecks(command);\n if (!_.chain(healthChecks).map('selfLink').includes(command.autoHealingPolicy.healthCheckUrl).value()) {\n healthCheckReloader = refreshHealthChecks(command, true);\n }\n }\n\n return $q.all([securityGroupReloader, networkReloader, healthCheckReloader]).then(() => {\n gceTagManager.register(command);\n attachEventHandlers(command);\n });\n });\n }\n\n function getDistributionPolicyTargetShapes() {\n return ['ANY', 'EVEN'];\n }\n\n function configureDistributionPolicyTargetShape(command) {\n const accountDetails = command.backingData.credentialsKeyedByAccount[command.credentials];\n if (!command.distributionPolicy.targetShape) {\n command.distributionPolicy.targetShape = 'EVEN';\n }\n }\n\n function loadAllImages(account) {\n return GceImageReader.findImages({\n account: account,\n provider: 'gce',\n q: '*',\n });\n }\n\n function configureInstanceTypes(command) {\n const result = { dirty: {} };\n if (command.region) {\n const results = [result.dirty];\n\n results.push(configureCustomInstanceTypes(command).dirty);\n results.push(configureStandardInstanceTypes(command).dirty);\n\n angular.extend(...results);\n } else {\n command.backingData.filtered.instanceTypes = [];\n }\n return result;\n }\n\n function configureCpuPlatforms(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n const locationToCpuPlatformsMap =\n command.backingData.credentialsKeyedByAccount[command.credentials].locationToCpuPlatformsMap;\n\n filteredData.cpuPlatforms = ['(Automatic)'];\n\n const location = command.regional ? command.region : command.zone;\n\n if (_.has(locationToCpuPlatformsMap, location)) {\n filteredData.cpuPlatforms = _.concat(filteredData.cpuPlatforms, locationToCpuPlatformsMap[location]);\n }\n\n if (!_.includes(filteredData.cpuPlatforms, command.minCpuPlatform)) {\n delete command.minCpuPlatform;\n result.dirty.minCpuPlatform = true;\n }\n return result;\n }\n\n function configureStandardInstanceTypes(command) {\n const c = command;\n const result = { dirty: {} };\n\n const locations = c.regional ? c.distributionPolicy.zones : [c.zone];\n const { credentialsKeyedByAccount } = c.backingData;\n const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];\n\n if (locations.every((l) => !l)) {\n return result;\n }\n\n let filtered = gceInstanceTypeService.getAvailableTypesForLocations(locationToInstanceTypesMap, locations);\n\n filtered = sortInstanceTypes(filtered);\n const instanceType = c.instanceType;\n if (_.every([instanceType, !_.includes(instanceType, 'custom-'), !_.includes(filtered, instanceType)])) {\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n c.backingData.filtered.instanceTypes = filtered;\n return result;\n }\n\n function configureCustomInstanceTypes(command) {\n const c = command;\n const result = { dirty: {} };\n let vCpuCount = _.get(c, 'viewState.customInstance.vCpuCount');\n const instanceFamily = _.get(c, 'viewState.customInstance.instanceFamily');\n const memory = _.get(c, 'viewState.customInstance.memory');\n const extendedMemory = _.get(c, 'viewState.customInstance.extendedMemory');\n const { zone, regional, region } = c;\n const { locationToInstanceTypesMap } = c.backingData.credentialsKeyedByAccount[c.credentials];\n const location = regional ? region : zone;\n\n if (!location) {\n return result;\n }\n\n if (zone || regional) {\n _.set(\n c,\n 'backingData.customInstanceTypes.vCpuList',\n gceCustomInstanceBuilderService.generateValidVCpuListForLocation(location, locationToInstanceTypesMap),\n );\n }\n\n // initializes vCpuCount so that memory selector will be populated.\n if (\n !vCpuCount ||\n !gceCustomInstanceBuilderService.vCpuCountForLocationIsValid(\n instanceFamily,\n vCpuCount,\n location,\n locationToInstanceTypesMap,\n )\n ) {\n vCpuCount = _.get(c, 'backingData.customInstanceTypes.vCpuList[0]');\n _.set(c, 'viewState.customInstance.vCpuCount', vCpuCount);\n }\n\n _.set(\n c,\n 'backingData.customInstanceTypes.memoryList',\n gceCustomInstanceBuilderService.generateValidMemoryListForVCpuCount(instanceFamily, vCpuCount),\n );\n\n if (\n _.every([\n memory,\n vCpuCount,\n !gceCustomInstanceBuilderService.memoryIsValid(instanceFamily, memory, vCpuCount, extendedMemory),\n ])\n ) {\n _.set(c, 'viewState.customInstance.memory', undefined);\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n\n _.set(\n c,\n 'backingData.customInstanceTypes.instanceFamilyList',\n gceCustomInstanceBuilderService.generateValidInstanceFamilyList(),\n );\n\n return result;\n }\n\n function configureAccelerators(command) {\n const result = { dirty: {} };\n const acceleratorTypes = GceAcceleratorService.getAvailableAccelerators(command);\n _.set(command, ['viewState', 'acceleratorTypes'], acceleratorTypes);\n result.dirty.acceleratorTypes = true;\n const chosenAccelerators = _.get(command, 'acceleratorConfigs', []);\n if (chosenAccelerators.length > 0) {\n command.acceleratorConfigs = chosenAccelerators.filter(\n (chosen) => !!acceleratorTypes.find((a) => a.name === chosen.acceleratorType),\n );\n if (command.acceleratorConfigs.length === 0) {\n delete command.acceleratorConfigs;\n }\n }\n return result;\n }\n\n // n1-standard-8 should come before n1-standard-16, so we must sort by the individual segments of the names.\n function sortInstanceTypes(instanceTypes) {\n const tokenizedInstanceTypes = _.map(instanceTypes, (instanceType) => {\n const tokens = instanceType.split('-');\n\n return {\n class: tokens[0],\n group: tokens[1],\n index: Number(tokens[2]) || 0,\n };\n });\n\n const sortedTokenizedInstanceTypes = _.sortBy(tokenizedInstanceTypes, ['class', 'group', 'index']);\n\n return _.map(sortedTokenizedInstanceTypes, (sortedTokenizedInstanceType) => {\n return (\n sortedTokenizedInstanceType.class +\n '-' +\n sortedTokenizedInstanceType.group +\n (sortedTokenizedInstanceType.index ? '-' + sortedTokenizedInstanceType.index : '')\n );\n });\n }\n\n function configureImages(command) {\n command.image = command.viewState.imageId;\n const result = { dirty: {} };\n if (command.credentials !== command.viewState.lastImageAccount) {\n command.viewState.lastImageAccount = command.credentials;\n if (!_.chain(command.backingData.allImages).find({ imageName: command.image }).value()) {\n command.image = null;\n result.dirty.imageName = true;\n }\n }\n return result;\n }\n\n function configureZones(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n const regions = command.backingData.credentialsKeyedByAccount[command.credentials].regions;\n if (_.isArray(regions)) {\n filteredData.zones = _.find(regions, { name: command.region }).zones;\n filteredData.truncatedZones = _.takeRight(filteredData.zones.sort(), 3);\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n filteredData.zones = regions[command.region];\n }\n if (!_.chain(filteredData.zones).includes(command.zone).value()) {\n delete command.zone;\n if (!command.regional) {\n result.dirty.zone = true;\n }\n }\n return result;\n }\n\n function getHealthChecks(command) {\n const matchingHealthChecks = _.filter(command.backingData.healthChecks, { account: command.credentials });\n return getHealthCheckOptions(matchingHealthChecks);\n }\n\n function configureHealthChecks(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n\n if (command.credentials === null) {\n return result;\n }\n\n filteredData.healthChecks = getHealthChecks(command);\n\n if (\n _.has(command, 'autoHealingPolicy.healthCheck') &&\n !_.chain(filteredData.healthChecks).map('selfLink').includes(command.autoHealingPolicy.healthCheckUrl).value()\n ) {\n delete command.autoHealingPolicy.healthCheck;\n result.dirty.autoHealingPolicy = true;\n } else {\n result.dirty.autoHealingPolicy = null;\n }\n\n return result;\n }\n\n function getLoadBalancers(command) {\n return _.chain(command.backingData.loadBalancers)\n .map('accounts')\n .flattenDeep()\n .filter({ name: command.credentials })\n .map('regions')\n .flattenDeep()\n .map('loadBalancers')\n .flattenDeep()\n .filter(_.curry(isRelevantLoadBalancer)(command))\n .uniq()\n .value();\n }\n\n function isRelevantLoadBalancer(command, loadBalancer) {\n return loadBalancer.region === command.region || loadBalancer.region === 'global';\n }\n\n function configureLoadBalancerOptions(command) {\n const results = { dirty: {} };\n const current = command.loadBalancers;\n const newLoadBalancerObjects = gceLoadBalancerSetTransformer.normalizeLoadBalancerSet(\n getLoadBalancers(command),\n );\n command.backingData.filtered.loadBalancerIndex = _.keyBy(newLoadBalancerObjects, 'name');\n command.backingData.filtered.loadBalancers = _.map(newLoadBalancerObjects, 'name');\n\n if (current && command.loadBalancers) {\n command.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n command.loadBalancers,\n command.credentials,\n newLoadBalancerObjects,\n );\n const matched = _.intersection(command.backingData.filtered.loadBalancers, command.loadBalancers);\n const removed = _.xor(matched, command.loadBalancers);\n command.loadBalancers = matched;\n configureBackendServiceOptions(command);\n\n if (removed.length) {\n results.dirty.loadBalancers = removed;\n }\n }\n return results;\n }\n\n function configureBackendServiceOptions(command) {\n /*\n a server group has a list of backend services, but there's no mapping from l7 -> backend service\n for the server group. this will not populate the wizard perfectly,\n but it is the best we can do with the given data.\n */\n\n const backendsFromMetadata = command.backendServiceMetadata;\n const lbIndex = command.backingData.filtered.loadBalancerIndex;\n\n const backendServices = command.loadBalancers.reduce((backendServices, lbName) => {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer(lbIndex[lbName])) {\n backendServices[lbName] = _.intersection(lbIndex[lbName].backendServices, backendsFromMetadata);\n }\n return backendServices;\n }, {});\n\n if (Object.keys(backendServices).length > 0) {\n command.backendServices = backendServices;\n }\n }\n\n function refreshLoadBalancers(command, skipCommandReconfiguration) {\n return loadBalancerReader.listLoadBalancers('gce').then(function (loadBalancers) {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n configureLoadBalancerOptions(command);\n }\n });\n }\n\n function refreshHealthChecks(command, skipCommandReconfiguration) {\n return cacheInitializer\n .refreshCache('healthChecks')\n .then(function () {\n return gceHealthCheckReader.listHealthChecks();\n })\n .then(function (healthChecks) {\n command.backingData.healthChecks = healthChecks;\n if (!skipCommandReconfiguration) {\n configureHealthChecks(command);\n }\n });\n }\n\n function configureSubnets(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n filteredData.subnets = _.chain(command.backingData.subnets)\n .filter({ account: command.credentials, network: command.network, region: command.region })\n .map('id')\n .value();\n\n if (!_.chain(filteredData.subnets).includes(command.subnet).value()) {\n command.subnet = '';\n result.dirty.subnet = true;\n }\n return result;\n }\n\n function getSecurityGroups(command) {\n let newSecurityGroups = command.backingData.securityGroups[command.credentials] || { gce: {} };\n newSecurityGroups = _.filter(newSecurityGroups.gce.global, function (securityGroup) {\n return securityGroup.network === command.network;\n });\n return _.chain(newSecurityGroups).sortBy('name').value();\n }\n\n function getXpnHostProjectIfAny(network) {\n if (network && network.includes('/')) {\n return network.split('/')[0] + '/';\n } else {\n return '';\n }\n }\n\n function configureSecurityGroupOptions(command) {\n const results = { dirty: {} };\n const currentOptions = command.backingData.filtered.securityGroups;\n const newSecurityGroups = getSecurityGroups(command);\n if (currentOptions && command.securityGroups) {\n // not initializing - we are actually changing groups\n const currentGroupNames = command.securityGroups.map(function (groupId) {\n const match = _.chain(currentOptions).find({ id: groupId }).value();\n return match ? match.id : groupId;\n });\n const matchedGroups = command.securityGroups\n .map(function (groupId) {\n const securityGroup = _.chain(currentOptions).find({ id: groupId }).value();\n return securityGroup ? securityGroup.id : null;\n })\n .map(function (groupName) {\n return _.chain(newSecurityGroups).find({ id: groupName }).value();\n })\n .filter(function (group) {\n return group;\n });\n command.securityGroups = _.map(matchedGroups, 'id');\n const removed = _.xor(currentGroupNames, command.securityGroups);\n if (removed.length) {\n results.dirty.securityGroups = removed;\n }\n }\n\n // Only include explicit firewall options in the pulldown list.\n command.backingData.filtered.securityGroups = _.filter(newSecurityGroups, function (securityGroup) {\n return !_.isEmpty(securityGroup.targetTags);\n });\n\n // Identify implicit firewalls so they can be optionally listed in a read-only state.\n command.implicitSecurityGroups = _.filter(newSecurityGroups, function (securityGroup) {\n return _.isEmpty(securityGroup.targetTags);\n });\n\n // Only include explicitly-selected firewalls in the body of the command.\n const xpnHostProject = getXpnHostProjectIfAny(command.network);\n const decoratedSecurityGroups = _.map(command.securityGroups, (sg) =>\n !sg.startsWith(xpnHostProject) ? xpnHostProject + sg : sg,\n );\n command.securityGroups = _.difference(decoratedSecurityGroups, _.map(command.implicitSecurityGroups, 'id'));\n\n return results;\n }\n\n function refreshSecurityGroups(command, skipCommandReconfiguration) {\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n function getNetworkNames(command) {\n return _.map(_.filter(command.backingData.networks, { account: command.credentials }), 'id');\n }\n\n function refreshNetworks(command) {\n NetworkReader.listNetworksByProvider('gce').then(function (gceNetworks) {\n command.backingData.networks = gceNetworks;\n });\n }\n\n function refreshInstanceTypes(command) {\n return cacheInitializer.refreshCache('instanceTypes').then(function () {\n return gceInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {\n command.backingData.instanceTypes = instanceTypes;\n configureInstanceTypes(command);\n });\n });\n }\n\n function attachEventHandlers(cmd) {\n cmd.regionalChanged = function regionalChanged(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n const defaults = GCEProviderSettings.defaults;\n if (command.regional) {\n command.zone = null;\n configureDistributionPolicyTargetShape(command);\n } else if (!command.zone) {\n if (command.region === defaults.region) {\n command.zone = defaults.zone;\n } else {\n command.zone = filteredData.zones[0];\n }\n\n angular.extend(result.dirty, configureZones(command).dirty);\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.regionChanged = function regionChanged(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n angular.extend(result.dirty, configureSubnets(command).dirty);\n if (command.region) {\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n angular.extend(result.dirty, configureZones(command).dirty);\n angular.extend(result.dirty, configureCpuPlatforms(command).dirty);\n // TODO: Internal Load Balancers also need to be filtered by network.\n angular.extend(result.dirty, configureLoadBalancerOptions(command).dirty);\n angular.extend(result.dirty, configureImages(command).dirty);\n } else {\n filteredData.zones = null;\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.credentialsChanged = function credentialsChanged(command) {\n const result = { dirty: {} };\n const backingData = command.backingData;\n if (command.credentials) {\n const regions = backingData.credentialsKeyedByAccount[command.credentials].regions;\n if (_.isArray(regions)) {\n backingData.filtered.regions = _.map(regions, 'name');\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n backingData.filtered.regions = _.keys(regions);\n }\n if (!backingData.filtered.regions.includes(command.region)) {\n command.region = null;\n result.dirty.region = true;\n } else {\n angular.extend(result.dirty, command.regionChanged(command).dirty);\n }\n\n backingData.filtered.networks = getNetworkNames(command);\n if (!backingData.filtered.networks.includes(command.network)) {\n command.network = null;\n result.dirty.network = true;\n } else {\n angular.extend(result.dirty, command.networkChanged(command).dirty);\n }\n\n angular.extend(result.dirty, configureHealthChecks(command).dirty);\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n\n configureDistributionPolicyTargetShape(command);\n } else {\n command.region = null;\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n\n return result;\n };\n\n cmd.networkChanged = function networkChanged(command) {\n const result = { dirty: {} };\n\n command.viewState.autoCreateSubnets = _.chain(command.backingData.networks)\n .filter({ account: command.credentials, id: command.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n command.viewState.subnets = _.chain(command.backingData.networks)\n .filter({ account: command.credentials, id: command.network })\n .map('subnets')\n .head()\n .value();\n\n angular.extend(result.dirty, configureSubnets(command).dirty);\n angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);\n\n // TODO: Internal Load Balancers also need to be filtered by network.\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n\n return result;\n };\n\n cmd.zoneChanged = function zoneChanged(command) {\n const result = { dirty: {} };\n if (command.zone === undefined && !command.regional) {\n result.dirty.zone = true;\n }\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n angular.extend(command.viewState.dirty, configureInstanceTypes(command).dirty);\n angular.extend(command.viewState.dirty, configureCpuPlatforms(command).dirty);\n angular.extend(command.viewState.dirty, configureAccelerators(command).dirty);\n return result;\n };\n\n cmd.selectZonesChanged = function selectZonesChanged(command) {\n const result = { dirty: {} };\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n angular.extend(command.viewState.dirty, configureAccelerators(command).dirty);\n return result;\n };\n\n cmd.customInstanceChanged = function customInstanceChanged(command) {\n const result = { dirty: {} };\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(result, command.viewState.dirty, configureCustomInstanceTypes(command).dirty);\n\n return result;\n };\n }\n\n return {\n configureCommand,\n configureInstanceTypes,\n configureImages,\n configureZones,\n configureSubnets,\n configureLoadBalancerOptions,\n refreshLoadBalancers,\n refreshSecurityGroups,\n refreshInstanceTypes,\n refreshHealthChecks,\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { get, isEmpty } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceAcceleratorType } from './gceAccelerator.service';\n\ninterface IGceAcceleratorConfig {\n acceleratorType: string;\n acceleratorCount: number;\n}\n\nexport interface IGceAcceleratorConfigurerProps {\n acceleratorConfigs: IGceAcceleratorConfig[];\n availableAccelerators: IGceAcceleratorType[];\n regional: boolean;\n setAcceleratorConfigs: (configs: IGceAcceleratorConfig[]) => void;\n zone: string;\n}\n\nexport function GceAcceleratorConfigurer({\n acceleratorConfigs = [],\n availableAccelerators = [],\n regional,\n setAcceleratorConfigs,\n zone,\n}: IGceAcceleratorConfigurerProps) {\n const addAccelerator = (): void => {\n if (isEmpty(availableAccelerators)) {\n return;\n }\n setAcceleratorConfigs(\n acceleratorConfigs.concat([\n {\n acceleratorType: availableAccelerators[0].name,\n acceleratorCount: 1,\n },\n ]),\n );\n };\n\n const removeAccelerator = (indexToRemove: number): void => {\n setAcceleratorConfigs(\n acceleratorConfigs.filter((_config, index) => {\n return indexToRemove !== index;\n }),\n );\n };\n\n const getTypeOptions = (): Array<Option<string>> => {\n return availableAccelerators.map(({ description, name }) => {\n return {\n label: description,\n value: name,\n };\n });\n };\n\n const getAvailableCardCounts = (acceleratorType: string): number[] => {\n const acceleratorConfig = availableAccelerators.find(({ name }) => name === acceleratorType);\n return get(acceleratorConfig, 'availableCardCounts', []);\n };\n\n const getCountOptions = (acceleratorType: string): Array<Option<number>> => {\n return getAvailableCardCounts(acceleratorType).map((count) => ({\n label: count.toString(),\n value: count,\n }));\n };\n\n const getNearestCount = (type: string, currentCount: number): number => {\n const availableCounts = getAvailableCardCounts(type);\n if (availableCounts.includes(currentCount)) {\n return currentCount;\n }\n return availableCounts.reduce((nearest, count) => {\n if (count > currentCount) {\n return nearest;\n }\n return count;\n }, 1);\n };\n\n const onTypeChange = (indexToUpdate: number, type: string): void => {\n setAcceleratorConfigs(\n acceleratorConfigs.map((config, index) => {\n if (indexToUpdate !== index) {\n return config;\n }\n return {\n acceleratorType: type,\n acceleratorCount: getNearestCount(type, config.acceleratorCount),\n };\n }),\n );\n };\n\n const onCountChange = (indexToUpdate: number, count: number) => {\n setAcceleratorConfigs(\n acceleratorConfigs.map((config, index) => {\n if (indexToUpdate !== index) {\n return config;\n }\n return {\n ...config,\n acceleratorCount: count,\n };\n }),\n );\n };\n\n return (\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n Accelerators <HelpField id=\"gce.serverGroup.accelerator\" />\n </div>\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style={{ width: '75%' }}>Type</th>\n <th style={{ width: '15%' }}>Count</th>\n <th />\n </tr>\n </thead>\n <tbody>\n {acceleratorConfigs.map(({ acceleratorType, acceleratorCount }, i) => (\n <tr key={i}>\n <td>\n <Select\n clearable={false}\n onChange={(option: Option<string>) => onTypeChange(i, option.value)}\n options={getTypeOptions()}\n value={acceleratorType}\n />\n </td>\n <td>\n <Select\n clearable={false}\n onChange={(option: Option<number>) => onCountChange(i, option.value)}\n options={getCountOptions(acceleratorType)}\n value={acceleratorCount}\n />\n </td>\n <td>\n <button className=\"btn btn-link\" onClick={() => removeAccelerator(i)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </button>\n </td>\n </tr>\n ))}\n {!isEmpty(acceleratorConfigs) && (\n <tr>\n <td colSpan={3}>\n Adding Accelerators places constraints on the instances that you can deploy. See\n <a href=\"https://cloud.google.com/compute/docs/gpus/#restrictions\" target=\"_blank\">\n {' '}\n the complete list of these restrictions\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n {!isEmpty(availableAccelerators) && (\n <tr>\n <td colSpan={3}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={addAccelerator}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add Accelerator\n </button>\n </td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && !regional && !zone && (\n <tr>\n <td colSpan={3}>\n A zone must be selected to configure accelerators. Please note: the set of available accelerator types\n are limited by zone. See{' '}\n <a href=\"https://cloud.google.com/compute/docs/gpus/#gpus-list\" target=\"_blank\">\n the complete list of types in each zone\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && !regional && zone && (\n <tr>\n <td colSpan={3}>There are no accelerators available in the currently selected zone.</td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && regional && (\n <tr>\n <td colSpan={3}>\n There are no accelerators available in all of the currently selected zone(s). Please explicitly select\n only zones that each support the accelerators you would like to configure. See{' '}\n <a href=\"https://cloud.google.com/compute/docs/gpus/#gpus-list\" target=\"_blank\">\n the complete list of types in each zone\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport const GCE_ACCELERATOR_CONFIGURER = 'spinnaker.gce.accelerator.component';\nmodule(GCE_ACCELERATOR_CONFIGURER, []).component(\n 'gceAcceleratorConfigurer',\n react2angular(withErrorBoundary(GceAcceleratorConfigurer, 'gceAcceleratorConfigurer'), [\n 'acceleratorConfigs',\n 'availableAccelerators',\n 'regional',\n 'setAcceleratorConfigs',\n 'zone',\n ]),\n);\n","import { module } from 'angular';\nimport UI_SELECT from 'ui-select';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from '../securityGroups/tagManager.service';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.advancedSettings.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE, [\n UI_SELECT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n])\n .directive('gceServerGroupAdvancedSettingsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./advancedSettings.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupAdvancedSettingsSelectorCtrl',\n };\n })\n .controller('gceServerGroupAdvancedSettingsSelectorCtrl', [\n '$scope',\n 'gceTagManager',\n function ($scope, gceTagManager) {\n this.addTag = () => {\n this.command.tags.push({});\n };\n\n this.removeTag = (index) => {\n this.command.tags.splice(index, 1);\n gceTagManager.updateSelectedTags();\n };\n\n this.setDisks = (disks) => {\n this.command.disks = disks;\n };\n\n this.inferSelectedSecurityGroupFromTag = gceTagManager.inferSelectedSecurityGroupFromTag;\n this.showToolTip = gceTagManager.showToolTip;\n this.getToolTipContent = gceTagManager.getToolTipContent;\n\n this.setPreemptible = () => {\n if (this.command.preemptible) {\n this.command.automaticRestart = false;\n this.command.onHostMaintenance = 'TERMINATE';\n } else {\n this.command.automaticRestart = true;\n this.command.onHostMaintenance = 'MIGRATE';\n }\n };\n\n this.setEnableVtpm = () => {\n if (!this.command.enableVtpm) {\n // Integrity monitoring requires vTPM to be enabled.\n this.command.enableIntegrityMonitoring = false;\n }\n };\n\n this.setAcceleratorConfigs = (configs) => {\n $scope.$apply(() => {\n this.command.acceleratorConfigs = configs;\n });\n };\n },\n ]);\n","import type { IComponentController, IComponentOptions, IScope } from 'angular';\nimport { module } from 'angular';\nimport { without } from 'lodash';\n\ninterface IGceDisk {\n type: string;\n sizeGb: number;\n sourceImage?: string;\n}\n\nclass GceDiskConfigurerController implements IComponentController {\n public localSSDCount: number;\n public persistentDisks: IGceDisk[];\n public isDefault: boolean;\n\n // From component bindings.\n public command: any;\n public disks: IGceDisk[];\n private updateDisks: (arg: { disks: IGceDisk[] }) => void;\n\n public static $inject = ['$scope'];\n constructor(public $scope: IScope) {}\n\n public $onInit(): void {\n this.setLocalSSDCount();\n this.setPersistentDisks();\n\n if (this.getLocalSSDDisks().length && !this.command?.viewState?.instanceTypeDetails?.storage?.localSSDSupported) {\n this.updateDisks({ disks: this.sortDisks(this.getPersistentDisks()) });\n }\n\n this.isDefault = !!this.command?.viewState?.instanceTypeDetails?.storage?.isDefault;\n }\n\n public $onChanges(): void {\n this.$onInit();\n }\n\n public handleLocalSSDCountChange(): void {\n // Handles invalid input.\n if (this.localSSDCount === undefined) {\n return;\n }\n\n let disks = this.getPersistentDisks();\n for (let i = 0; i < this.localSSDCount; i++) {\n disks = disks.concat([{ type: 'local-ssd', sizeGb: 375 }]);\n }\n\n disks = this.sortDisks(disks);\n this.updateDisks({ disks });\n }\n\n public handlePersistentDiskChange(): void {\n let disks = this.persistentDisks.concat(this.getLocalSSDDisks());\n disks = this.sortDisks(disks);\n this.updateDisks({ disks });\n }\n\n public handleImageChange = (imageName: string, target: IGceDisk) => {\n // called from a React component\n this.$scope.$apply(() => {\n target.sourceImage = imageName;\n this.handlePersistentDiskChange();\n });\n };\n\n public addPersistentDisk(): void {\n this.persistentDisks = this.persistentDisks.concat([{ type: 'pd-ssd', sizeGb: 10, sourceImage: null }]);\n this.handlePersistentDiskChange();\n }\n\n public removePersistentDisk(index: number): void {\n this.persistentDisks.splice(index, 1);\n this.handlePersistentDiskChange();\n }\n\n private setPersistentDisks(): void {\n this.persistentDisks = this.getPersistentDisks();\n }\n\n private setLocalSSDCount(): void {\n this.localSSDCount = this.getLocalSSDDisks().length;\n }\n\n private sortDisks(disks: IGceDisk[]): IGceDisk[] {\n const diskWithoutImage = disks.find(\n (disk) => (disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-')) && disk.sourceImage === undefined,\n );\n return [diskWithoutImage].concat(without(disks, diskWithoutImage));\n }\n\n private getLocalSSDDisks(): IGceDisk[] {\n return (this.command.disks || []).filter((disk: IGceDisk) => disk.type === 'local-ssd');\n }\n\n private getPersistentDisks(): IGceDisk[] {\n return (this.command.disks || []).filter(\n (disk: IGceDisk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n }\n}\n\nconst gceDiskConfigurer: IComponentOptions = {\n controller: GceDiskConfigurerController,\n bindings: { command: '<', disks: '<', updateDisks: '&' },\n template: `\n <ng-form name=\"diskConfigurer\">\n <div class=\"form-group\">\n <div class=\"col-md-5 sm-label-right\">\n <b>Number of Local SSD Disks</b>\n <help-field key=\"gce.instance.storage.localSSD\"></help-field>\n </div>\n <div class=\"col-md-2\">\n <input type=\"number\"\n class=\"form-control input-sm\"\n ng-model=\"$ctrl.localSSDCount\"\n ng-change=\"$ctrl.handleLocalSSDCountChange()\"\n required\n min=\"0\"\n max=\"{{$ctrl.command.viewState.instanceTypeDetails.storage.localSSDSupported ? 8 : 0}}\"\n ng-disabled=\"!$ctrl.command.viewState.instanceTypeDetails.storage.localSSDSupported\"/>\n </div>\n </div>\n <div class=\"form-group\">\n <div class=\"sm-label-left\" style=\"margin-bottom: 5px;\">Persistent Disks\n <span class=\"glyphicon glyphicon-warning-sign\"\n style=\"color: #EEBB3C;\"\n ng-if=\"$ctrl.isDefault && !diskConfigurer.$dirty\"\n uib-tooltip=\"This instance type does not have an explicitly configured persistent disk option and is using the\n default disk storage specified in settings.js.\"></span>\n </div>\n <table class=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style=\"width: 25%;\">Type</th>\n <th>Size (GB)</th>\n <th style=\"width: 50%;\">Image</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"disk in $ctrl.persistentDisks\">\n <td>\n <ui-select ng-model=\"disk.type\" class=\"form-control input-sm\" on-select=\"$ctrl.handlePersistentDiskChange()\" required>\n <ui-select-match placeholder=\"Select...\">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat=\"persistentDiskType in $ctrl.command.backingData.persistentDiskTypes | filter: $select.search\">\n <span ng-bind-html=\"persistentDiskType | highlight: $select.search\"></span>\n </ui-select-choices>\n </ui-select>\n </td>\n <td>\n <input type=\"number\"\n class=\"form-control input-sm\"\n ng-model=\"disk.sizeGb\"\n ng-change=\"$ctrl.handlePersistentDiskChange()\"\n required\n min=\"10\"/>\n </td>\n <td>\n <div ng-if=\"$index === 0\">\n <p class=\"small\" style=\"margin: 0;\" ng-if=\"$ctrl.command.viewState.mode === 'create' || $ctrl.command.viewState.mode === 'clone'\">\n This disk will use the image selected at the top of this dialogue.\n </p>\n <p class=\"small\" style=\"margin: 0;\" ng-if=\"$ctrl.command.viewState.mode === 'createPipeline' || $ctrl.command.viewState.mode === 'editPipeline'\">\n This disk will use the image inferred from this pipeline's execution context.\n </p>\n </div>\n <gce-image-select\n ng-if=\"$index > 0\"\n available-images=\"$ctrl.command.backingData.allImages\"\n selected-image=\"disk.sourceImage\"\n select-image=\"$ctrl.handleImageChange\"\n target=\"disk\"\n ></gce-image-select>\n </td>\n <td ng-if=\"$index > 0\">\n <a class=\"btn btn-link sm-label\" style=\"margin-top: 0;\" ng-click=\"$ctrl.removePersistentDisk($index)\">\n <span class=\"glyphicon glyphicon-trash\"></span>\n </a>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"4\">\n <button class=\"btn btn-block btn-sm add-new\" ng-click=\"$ctrl.addPersistentDisk()\">\n <span class=\"glyphicon glyphicon-plus-sign\"></span> Add New Persistent Disk\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n </ng-form>`,\n};\n\nexport const GCE_DISK_CONFIGURER = 'spinnaker.gce.diskConfigurer.component';\nmodule(GCE_DISK_CONFIGURER, []).component('gceDiskConfigurer', gceDiskConfigurer);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport { set } from 'lodash';\n\nimport type { IGceAutoHealingPolicy } from '../../../../domain/autoHealingPolicy';\nimport type { IGceHealthCheckOption } from '../../../../healthCheck/healthCheckUtils';\nimport { parseHealthCheckUrl } from '../../../../healthCheck/healthCheckUtils';\n\nclass GceAutoHealingPolicySelector implements IController {\n public healthChecks: string[];\n public autoHealingPolicy: IGceAutoHealingPolicy;\n public enabled: boolean;\n public viewState: { maxUnavailableMetric: 'percent' | 'fixed' };\n private setAutoHealingPolicy: Function;\n\n public $onInit(): void {\n if (this.autoHealingPolicy && this.autoHealingPolicy.maxUnavailable) {\n if (typeof this.autoHealingPolicy.maxUnavailable.fixed === 'number') {\n this.viewState = { maxUnavailableMetric: 'fixed' };\n } else if (typeof this.autoHealingPolicy.maxUnavailable.percent === 'number') {\n this.viewState = { maxUnavailableMetric: 'percent' };\n }\n }\n\n if (!this.autoHealingPolicy) {\n this.setAutoHealingPolicy({ autoHealingPolicy: { initialDelaySec: 300 } });\n }\n }\n\n public $onDestroy(): void {\n this.setAutoHealingPolicy({ autoHealingPolicy: null });\n }\n\n public manageMaxUnavailableMetric(selectedMetric: string): void {\n if (!selectedMetric) {\n // Clouddriver deletes maxUnavailable if maxUnavailable is an empty object.\n this.autoHealingPolicy.maxUnavailable = {};\n } else {\n const toDeleteKey = selectedMetric === 'percent' ? 'fixed' : 'percent';\n set(this.autoHealingPolicy, ['maxUnavailable', toDeleteKey], undefined);\n }\n }\n\n public onHealthCheckChange(_healthCheck: IGceHealthCheckOption, healthCheckUrl: string) {\n if (healthCheckUrl) {\n const { healthCheckName, healthCheckKind } = parseHealthCheckUrl(healthCheckUrl);\n this.autoHealingPolicy.healthCheck = healthCheckName;\n this.autoHealingPolicy.healthCheckKind = healthCheckKind;\n }\n }\n}\n\nconst gceAutoHealingPolicySelectorComponent: IComponentOptions = {\n bindings: {\n onHealthCheckRefresh: '&',\n setAutoHealingPolicy: '&',\n healthChecks: '<',\n autoHealingPolicy: '<',\n enabled: '<',\n labelColumns: '@?',\n },\n templateUrl: require('./autoHealingPolicySelector.component.html'),\n controller: GceAutoHealingPolicySelector,\n};\n\nexport const GCE_AUTOHEALING_POLICY_SELECTOR = 'spinnaker.gce.autoHealingPolicy.selector.component';\nmodule(GCE_AUTOHEALING_POLICY_SELECTOR, []).component(\n 'gceAutoHealingPolicySelector',\n gceAutoHealingPolicySelectorComponent,\n);\n","/* eslint-disable no-debugger */\nimport { IComponentOptions, module } from 'angular';\nimport { cloneDeep } from 'lodash';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\n\nimport './autoScalingPolicySelector.less';\n\nconst gceAutoScalingPolicySelectorComponent = {\n bindings: {\n policy: '<',\n enabled: '<',\n setAutoScalingPolicy: '&',\n autoscalingPolicy: '<',\n },\n templateUrl: require('./autoScalingPolicySelector.component.html'),\n controller: 'gceUpsertAutoscalingPolicyCtrl',\n};\n\nexport const GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT = 'spinnaker.gce.autoScalingPolicy.selector.component';\nmodule(GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT, [\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n])\n .controller('gceUpsertAutoscalingPolicyCtrl', [\n '$scope',\n function ($scope) {\n var vm = this;\n this.$onInit = function () {\n this.policy = cloneDeep({});\n this.setAutoScalingPolicy({ autoscalingPolicy: this.policy });\n\n this.updatePolicy = (updatedPolicy) => {\n $scope.$applyAsync(() => {\n this.policy = updatedPolicy;\n this.setAutoScalingPolicy({ autoscalingPolicy: this.policy });\n });\n };\n };\n },\n ])\n .component('gceAutoScalingPolicySelectorComponent', gceAutoScalingPolicySelectorComponent);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT =\n 'spinnaker.deck.gce.serverGroup.configure.advancedCapacitySelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT, []).component(\n 'gceServerGroupAdvancedCapacitySelector',\n {\n bindings: {\n command: '=',\n },\n templateUrl: require('./advancedCapacitySelector.component.html'),\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT =\n 'spinnaker.google.serverGroup.configure.wizard.simpleCapacity.selector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT, [])\n .component('gceServerGroupSimpleCapacitySelector', {\n templateUrl: require('./simpleCapacitySelector.component.html'),\n bindings: {\n command: '=',\n setSimpleCapacity: '=',\n },\n controller: 'gceServerGroupSimpleCapacitySelectorCtrl',\n })\n .controller('gceServerGroupSimpleCapacitySelectorCtrl', function () {\n this.setMinMax = (newVal) => {\n this.command.capacity.min = newVal;\n this.command.capacity.max = newVal;\n };\n });\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport { CheckboxInput, HelpField } from '@spinnaker/core';\nimport './customInstanceConfigurer.component.less';\n\nexport interface ICustomInstanceConfig {\n vCpuCount: number;\n memory: number;\n instanceFamily: string;\n extendedMemory: boolean;\n}\n\nexport interface ICustomInstanceConfigurerProps {\n vCpuList: number[];\n memoryList: number[];\n instanceFamilyList: string[];\n selectedVCpuCount: number;\n selectedMemory: number;\n selectedInstanceFamily: string;\n selectedExtendedMemory: boolean;\n onChange: (config: ICustomInstanceConfig) => void;\n}\n\nexport class CustomInstanceConfigurer extends React.Component<ICustomInstanceConfigurerProps> {\n public render() {\n const instanceFamilyOptions: Option[] = (this.props.instanceFamilyList || []).map((instanceFamily) => ({\n label: instanceFamily,\n value: instanceFamily,\n }));\n const vCpuOptions: Option[] = (this.props.vCpuList || []).map((vCpu) => ({ label: vCpu + '', value: vCpu }));\n const memoryOptions: Option[] = (this.props.memoryList || []).map((memory) => ({\n label: memory + '',\n value: memory,\n }));\n const selectedVCpuCountLabel = this.props.selectedVCpuCount ? this.props.selectedVCpuCount + '' : null;\n const selectedMemoryLabel = this.props.selectedMemory ? this.props.selectedMemory + '' : null;\n const selectedInstanceFamilyLabel = this.props.selectedInstanceFamily ? this.props.selectedInstanceFamily : null;\n\n return (\n <div>\n <div className=\"row\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Family </b>\n </div>\n <div className=\"col-md-3\">\n <Select\n options={instanceFamilyOptions}\n clearable={false}\n value={{ label: selectedInstanceFamilyLabel, value: this.props.selectedInstanceFamily }}\n onChange={this.handleInstanceFamilyChange}\n />\n </div>\n </div>\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Cores </b>\n <HelpField id=\"gce.instance.customInstance.cores\" />\n </div>\n <div className=\"col-md-3\">\n <Select\n options={vCpuOptions}\n clearable={false}\n value={{ label: selectedVCpuCountLabel, value: this.props.selectedVCpuCount }}\n onChange={this.handleVCpuChange}\n />\n </div>\n </div>\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Memory (Gb) </b>\n <HelpField id=\"gce.instance.customInstance.memory\" />\n </div>\n <div className=\"col-md-3\">\n {this.props.selectedExtendedMemory ? (\n <input\n type=\"number\"\n name=\"memory\"\n className=\"form-control\"\n value={this.props.selectedMemory}\n onChange={(event) => this.handleMemoryChangeCustom(event.target.value)}\n />\n ) : (\n <Select\n options={memoryOptions}\n clearable={false}\n value={{ label: selectedMemoryLabel, value: this.props.selectedMemory }}\n onChange={this.handleMemoryChange}\n />\n )}\n </div>\n </div>\n {this.props.selectedInstanceFamily !== 'E2' ? (\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\"></div>\n <div className=\"col-md-3\">\n <span className=\"gce-instance-build-custom-extended-memory-checkbox\">\n <CheckboxInput\n name=\"extendedMemory\"\n text=\"Extended Memory\"\n checked={this.props.selectedExtendedMemory}\n onChange={(event: { target: { checked: boolean } }) => {\n this.handleExtendedMemory(event.target.checked);\n }}\n />\n <div className=\"gce-instance-build-custom-extended-memory-checkbox-helptext\">\n <HelpField id=\"gce.instance.customInstance.extendedmemory\" />\n </div>\n </span>\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n private handleVCpuChange = (option: Option) => {\n const value = (option ? option.value : null) as number;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: value,\n memory: this.props.selectedMemory,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleMemoryChange = (option: Option) => {\n const value = (option ? option.value : null) as number;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: value,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleInstanceFamilyChange = (option: Option) => {\n const value = (option ? option.value : null) as string;\n this.props.onChange({\n instanceFamily: value,\n vCpuCount: this.props.selectedVCpuCount,\n memory: this.props.selectedMemory,\n extendedMemory: value === 'E2' ? false : this.props.selectedExtendedMemory,\n });\n };\n\n private handleMemoryChangeCustom = (val: string) => {\n const value = +val;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: value,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleExtendedMemory = (checked: boolean) => {\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: this.props.selectedMemory,\n extendedMemory: checked,\n });\n };\n}\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { CustomInstanceConfigurer } from './CustomInstanceConfigurer';\n\nexport const GCE_CUSTOM_INSTANCE_CONFIGURER = 'spinnaker.gce.customInstanceConfigurer';\nmodule(GCE_CUSTOM_INSTANCE_CONFIGURER, []).component(\n 'gceCustomInstanceConfigurer',\n react2angular(withErrorBoundary(CustomInstanceConfigurer, 'gceCustomInstanceConfigurer'), [\n 'vCpuList',\n 'instanceFamilyList',\n 'memoryList',\n 'selectedVCpuCount',\n 'selectedMemory',\n 'selectedInstanceFamily',\n 'selectedExtendedMemory',\n 'onChange',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\n\n// TODO(dpeach): this approach is unmaintainable because we\n// have to intercept ui-select event emitters to make it work.\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT =\n 'spinnaker.deck.gce.backendServiceSelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT, []).component(\n 'gceBackendServiceSelector',\n {\n bindings: {\n command: '=',\n loadBalancerName: '=',\n },\n templateUrl: require('./backendServiceSelector.component.html'),\n controller: [\n '$scope',\n function ($scope) {\n $scope.$on('$destroy', () => {\n if (this.command.backendServices) {\n delete this.command.backendServices[this.loadBalancerName];\n }\n });\n\n $scope.$on('uis:select', function (event) {\n event.preventDefault();\n });\n },\n ],\n },\n);\n","import * as angular from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT } from './backendServiceSelector.component';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT =\n 'spinnaker.deck.gce.elSevenOptionsGenerator.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT,\n ])\n .directive('gceElSevenOptionsGenerator', [\n '$compile',\n function ($compile) {\n const template = `<gce-backend-service-selector load-balancer-name=\"loadBalancerName\" command=\"command\">\n </gce-backend-service-selector>`;\n\n return {\n restrict: 'E',\n scope: {\n command: '=',\n loadBalancerName: '@',\n },\n link: function (scope, element) {\n const compiledTemplate = $compile(template)(scope);\n\n // Look up DOM to find container for selected load balancer.\n const listItem = angular.element(element).closest('.ui-select-match-item');\n\n // Drop service selector in between load balancers.\n listItem.after(compiledTemplate);\n\n scope.$on('$destroy', () => {\n // Remove selector if load balancer is removed.\n listItem.next().remove();\n });\n },\n };\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT } from './elSevenOptions/elSevenOptionsGenerator.component';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../../../loadBalancer/httpLoadBalancerUtils.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../../serverGroupConfiguration.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.loadBalancers.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE, [\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n ])\n .directive('gceServerGroupLoadBalancerSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./loadBalancerSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupLoadBalancerSelectorCtrl',\n };\n })\n .controller('gceServerGroupLoadBalancerSelectorCtrl', [\n 'gceHttpLoadBalancerUtils',\n function (gceHttpLoadBalancerUtils) {\n this.showLoadBalancingPolicy = () => {\n if (_.has(this, 'command.backingData.filtered.loadBalancerIndex')) {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n\n return (\n angular.isDefined(selected) &&\n _.some(selected, (s) => {\n return (\n index[s].loadBalancerType === 'HTTP' ||\n index[s].loadBalancerType === 'INTERNAL_MANAGED' ||\n index[s].loadBalancerType === 'SSL' ||\n index[s].loadBalancerType === 'TCP'\n );\n })\n );\n }\n };\n\n this.isHttpLoadBalancer = (lb) => gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb);\n },\n ]);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport { chain, get, has, intersection, set, without } from 'lodash';\n\nimport type { IGceBackendService, INamedPort } from '../../../../domain';\n\nimport './loadBalancingPolicySelector.component.less';\n\nclass GceLoadBalancingPolicySelectorController implements IController {\n public maxPort = 65535;\n public command: any;\n [key: string]: any;\n public globalBackendServices: IGceBackendService[];\n\n public static $inject = ['gceBackendServiceReader'];\n constructor(private gceBackendServiceReader: any) {}\n\n public setModel(propertyName: string, viewValue: number): void {\n set(this, propertyName, viewValue / 100);\n }\n\n public setView(propertyName: string, modelValue: number): void {\n this[propertyName] = this.decimalToPercent(modelValue);\n }\n\n public onBalancingModeChange(mode: string): void {\n const keys: string[] = ['maxUtilization', 'maxRatePerInstance', 'maxConnectionsPerInstance'];\n let toDelete: string[] = [];\n switch (mode) {\n case 'RATE':\n toDelete = without(keys, 'maxRatePerInstance');\n break;\n case 'UTILIZATION':\n toDelete = without(keys, 'maxUtilization');\n break;\n case 'CONNECTION':\n toDelete = without(keys, 'maxConnectionsPerInstance');\n break;\n default:\n break;\n }\n\n toDelete.forEach((key) => delete this.command.loadBalancingPolicy[key]);\n }\n\n public getBalancingModes(): string[] {\n let balancingModes: string[] = [];\n /*\n * Three cases:\n * - If we have only HTTP(S) load balancers, our balancing mode can be RATE or UTILIZATION.\n * - If we have only SSL/TCP load balancers, our balancing mode can be CONNECTION or UTILIZATION.\n * - If we have both, only UTILIZATION.\n * */\n if (has(this, 'command.backingData.filtered.loadBalancerIndex')) {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n\n const hasSsl = selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'SSL');\n const hasTcp = selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'TCP');\n const hasHttp =\n selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'HTTP') ||\n selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'HTTP2') ||\n selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'GRPC');\n if ((hasSsl || hasTcp) && hasHttp) {\n balancingModes = ['UTILIZATION'];\n } else if (hasSsl || hasTcp) {\n balancingModes = ['CONNECTION', 'UTILIZATION'];\n } else {\n balancingModes = ['RATE', 'UTILIZATION'];\n }\n }\n\n if (!balancingModes.includes(get(this.command, 'loadBalancingPolicy.balancingMode') as string)) {\n set(this.command, 'loadBalancingPolicy.balancingMode', balancingModes[0]);\n }\n return balancingModes;\n }\n\n public $onInit(): void {\n this.gceBackendServiceReader.listBackendServices('globalBackendService').then((services: IGceBackendService[]) => {\n this.globalBackendServices = services;\n });\n }\n\n public $onDestroy(): void {\n delete this.command.loadBalancingPolicy;\n }\n\n public addNamedPort() {\n if (!get(this.command, 'loadBalancingPolicy.namedPorts')) {\n set(this.command, 'loadBalancingPolicy.namedPorts', []);\n }\n\n this.command.loadBalancingPolicy.namedPorts.push({ name: '', port: 80 });\n }\n\n public removeNamedPort(index: number) {\n this.command.loadBalancingPolicy.namedPorts.splice(index, 1);\n }\n\n public getPortNames(): string[] {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n const inUsePortNames = this.command.loadBalancingPolicy.namedPorts.map((namedPort: INamedPort) => namedPort.name);\n\n const getThem = (globalBackendServices: IGceBackendService[], loadBalancer: string): string[] => {\n switch (get(index[loadBalancer], 'loadBalancerType')) {\n case 'SSL':\n case 'TCP':\n case 'GRPC':\n case 'HTTP2':\n case 'HTTP': {\n const lbBackendServices: string[] = get(index[loadBalancer], 'backendServices');\n const filteredBackendServices = globalBackendServices.filter((service: IGceBackendService) =>\n lbBackendServices.includes(service.name),\n );\n const portNames = filteredBackendServices.map((service: IGceBackendService) => service.portName);\n const portNameIntersection = intersection(portNames, inUsePortNames);\n return portNames.filter((portName) => !portNameIntersection.includes(portName));\n }\n default:\n return [];\n }\n };\n\n return chain(selected)\n .flatMap((lbName: string) => getThem(this.globalBackendServices, lbName))\n .uniq()\n .value();\n }\n\n private decimalToPercent(value: number): number {\n if (value === 0) {\n return 0;\n }\n return value ? Math.round(value * 100) : undefined;\n }\n}\n\nconst gceLoadBalancingPolicySelectorComponent: IComponentOptions = {\n bindings: {\n command: '=',\n },\n controller: GceLoadBalancingPolicySelectorController,\n templateUrl: require('./loadBalancingPolicySelector.component.html'),\n};\n\nexport const GCE_LOAD_BALANCING_POLICY_SELECTOR = 'spinnaker.gce.loadBalancingPolicy.selector.component';\n\nmodule(GCE_LOAD_BALANCING_POLICY_SELECTOR, []).component(\n 'gceLoadBalancingPolicySelector',\n gceLoadBalancingPolicySelectorComponent,\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE = 'spinnaker.google.networkSelectField.directive';\nexport const name = GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE, []).directive('gceNetworkSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./networkSelectField.directive.html'),\n scope: {\n networks: '=',\n component: '=',\n field: '@',\n account: '=',\n helpKey: '@',\n onChange: '&',\n labelColumns: '@',\n fieldColumns: '@',\n },\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE = 'spinnaker.google.subnet.subnetSelectField.directive';\nexport const name = GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE, []).directive('gceSubnetSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./subnetSelectField.directive.html'),\n scope: {\n subnets: '=',\n subnetPlaceholder: '=',\n autoCreateSubnets: '=',\n component: '=',\n field: '@',\n account: '=',\n region: '=',\n onChange: '&',\n labelColumns: '@',\n helpKey: '@',\n },\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport {\n ArtifactTypePatterns,\n excludeAllTypesExcept,\n ExpectedArtifactSelectorViewController,\n IMAGE_READER,\n NgGCEImageArtifactDelegate,\n} from '@spinnaker/core';\n\nimport { GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE } from '../../../../gceNetworkSelectField.directive';\nimport { GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE } from '../../../../gceRegionSelectField.directive';\nimport { GceImageReader } from '../../../../image';\nimport { GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE } from '../../../../subnet/subnetSelectField.directive';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER =\n 'spinnaker.google.serverGroup.configure.wizard.basicSettings.controller';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n IMAGE_READER,\n GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE,\n GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE,\n GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE,\n ])\n .controller('gceServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n function ($scope, $controller, $uibModalStack, $state) {\n function fetchImagesForAccount() {\n return observableFrom(\n GceImageReader.findImages({\n account: $scope.command.credentials,\n provider: $scope.command.selectedProvider,\n q: '*',\n }),\n );\n }\n\n const imageSearchResultsStream = new Subject();\n imageSearchResultsStream.pipe(switchMap(fetchImagesForAccount)).subscribe((images) => {\n $scope.command.backingData.allImages = images;\n });\n\n this.accountUpdated = () => {\n imageSearchResultsStream.next();\n };\n\n this.selectImage = (image) => {\n // called from a React component\n $scope.$apply(() => {\n $scope.command.image = image;\n });\n };\n\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: GceImageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n this.stackPattern = {\n test: function (stack) {\n const pattern = $scope.command.viewState.templatingEnabled ? /^([a-zA-Z0-9]*(\\${.+})*)*$/ : /^[a-zA-Z0-9]*$/;\n return pattern.test(stack);\n },\n };\n\n this.detailPattern = {\n test: function (detail) {\n const pattern = $scope.command.viewState.templatingEnabled\n ? /^([a-zA-Z0-9-]*(\\${.+})*)*$/\n : /^[a-zA-Z0-9-]*$/;\n return pattern.test(detail);\n },\n };\n\n this.getSubnetPlaceholder = () => {\n if (!$scope.command.region) {\n return '(Select an account)';\n } else if ($scope.command.viewState.autoCreateSubnets) {\n return '(Subnet will be automatically selected)';\n } else if ($scope.command.viewState.autoCreateSubnets === null) {\n return '(Subnets not supported)';\n } else {\n return null;\n }\n };\n\n this.imageSources = ['artifact', 'priorStage'];\n\n this.excludedImageArtifactTypes = excludeAllTypesExcept(ArtifactTypePatterns.CUSTOM_OBJECT);\n\n this.onImageArtifactEdited = (artifact) => {\n $scope.$applyAsync(() => {\n $scope.command.imageArtifactId = null;\n $scope.command.imageArtifact = artifact;\n });\n };\n\n this.onImageArtifactSelected = (expectedArtifact) => {\n this.onChangeImageArtifactId(expectedArtifact.id);\n };\n\n this.onChangeImageArtifactId = (artifactId) => {\n $scope.$applyAsync(() => {\n $scope.command.imageArtifactId = artifactId;\n $scope.command.imageArtifact = null;\n });\n };\n\n this.onImageArtifactAccountSelected = (accountName) => {\n $scope.$applyAsync(() => {\n $scope.command.imageAccountName = accountName;\n });\n };\n\n const gceImageDelegate = new NgGCEImageArtifactDelegate($scope);\n $scope.gceImageArtifact = {\n showCreateArtifactForm: false,\n delegate: gceImageDelegate,\n controller: new ExpectedArtifactSelectorViewController(gceImageDelegate),\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT =\n 'spinnaker.deck.gce.tagSelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n]).component('gceTagSelector', {\n bindings: {\n command: '=',\n securityGroupId: '=',\n },\n templateUrl: require('./tagSelector.component.html'),\n controller: [\n '$scope',\n 'gceTagManager',\n function ($scope, gceTagManager) {\n this.securityGroup = gceTagManager.securityGroupObjectsKeyedById[this.securityGroupId];\n this.onSelect = gceTagManager.addTag;\n this.onRemove = gceTagManager.removeTag;\n\n $scope.$on('uis:select', function (event) {\n event.preventDefault();\n });\n },\n ],\n});\n","import * as angular from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT } from './tagSelector.component';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT =\n 'spinnaker.deck.gce.tagSelectorGenerator.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .directive('gceTagSelectorGenerator', [\n '$compile',\n 'gceTagManager',\n function ($compile, gceTagManager) {\n const template = `<gce-tag-selector security-group-id=\"securityGroupId\" command=\"command\">\n </gce-tag-selector>`;\n\n return {\n restrict: 'E',\n scope: {\n command: '=',\n securityGroupId: '=',\n },\n link: function (scope, element) {\n const { securityGroupId } = scope;\n const securityGroupObject = gceTagManager.securityGroupObjectsKeyedById[securityGroupId];\n\n if (securityGroupObject && securityGroupObject.tagsArray.length < 2) {\n securityGroupObject.tagsArray.forEach((tagName) => gceTagManager.addTag(tagName));\n return;\n }\n\n const compiledTemplate = $compile(template)(scope);\n\n angular.element(element).closest('.ui-select-match-item').after(compiledTemplate);\n },\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches } from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../../serverGroupConfiguration.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT } from './tagSelectorGenerator.component';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.securityGroups.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE, [\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n])\n .directive('gceServerGroupSecurityGroupSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./securityGroupSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupSecurityGroupsSelectorCtrl',\n };\n })\n .controller('gceServerGroupSecurityGroupsSelectorCtrl', [\n 'gceServerGroupConfigurationService',\n 'gceTagManager',\n function (gceServerGroupConfigurationService, gceTagManager) {\n this.getSecurityGroupRefreshTime = () => {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.refreshSecurityGroups = () => {\n this.refreshing = true;\n gceServerGroupConfigurationService.refreshSecurityGroups(this.command).then(() => {\n this.refreshing = false;\n });\n };\n\n this.onRemove = gceTagManager.removeSecurityGroup;\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.securityGroups.removed.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE, [])\n .directive('gceServerGroupSecurityGroupsRemoved', function () {\n return {\n restrict: 'E',\n templateUrl: require('./securityGroupsRemoved.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupSecurityGroupsRemovedCtrl',\n };\n })\n .controller('gceServerGroupSecurityGroupsRemovedCtrl', function () {\n this.acknowledgeSecurityGroupRemoval = () => {\n this.command.viewState.dirty.securityGroups = null;\n };\n });\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.regional.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE, [])\n .directive('gceRegionalSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./regionalSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n });\n","import { module, noop } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.targetShape.directive';\n\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE, []).directive(\n 'gceTargetShapeSelector',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./targetShapeSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: noop,\n };\n },\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.zone.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE, [])\n .directive('gceZoneSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./zoneSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n });\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\nimport { GCE_TIMEZONE_SELECT } from '../../autoscalingPolicy/components/scalingSchedules/timeZoneSelect';\nimport { GCE_CACHE_REFRESH } from '../../cache/cacheRefresh.component';\nimport { GCE_IMAGE_SELECT } from '../../image/ImageSelect';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\nimport { GCE_ACCELERATOR_CONFIGURER } from './wizard/advancedSettings/GceAcceleratorConfigurer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';\nimport { GCE_DISK_CONFIGURER } from './wizard/advancedSettings/diskConfigurer.component';\nimport { GCE_AUTOHEALING_POLICY_SELECTOR } from './wizard/autoHealingPolicy/autoHealingPolicySelector.component';\nimport { GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT } from './wizard/autoScalingPolicy/autoScalingPolicySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT } from './wizard/capacity/advancedCapacitySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT } from './wizard/capacity/simpleCapacitySelector.component';\nimport { GCE_CUSTOM_INSTANCE_CONFIGURER } from './wizard/customInstance/customInstanceConfigurer.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE } from './wizard/loadBalancers/loadBalancerSelector.directive';\nimport { GCE_LOAD_BALANCING_POLICY_SELECTOR } from './wizard/loadBalancingPolicy/loadBalancingPolicySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER } from './wizard/location/basicSettings.controller';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE } from './wizard/securityGroups/securityGroupSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE } from './wizard/securityGroups/securityGroupsRemoved.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE } from './wizard/zones/regionalSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE } from './wizard/zones/targetShapeSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE = 'spinnaker.serverGroup.configure.gce';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE, [\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n GCE_LOAD_BALANCING_POLICY_SELECTOR,\n GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT,\n GCE_AUTOHEALING_POLICY_SELECTOR,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GCE_CACHE_REFRESH,\n GCE_CUSTOM_INSTANCE_CONFIGURER,\n GCE_DISK_CONFIGURER,\n GCE_ACCELERATOR_CONFIGURER,\n GCE_IMAGE_SELECT,\n GCE_TIMEZONE_SELECT,\n GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE =\n 'spinnaker.deck.gce.serverGroup.hiddenMetadataKeys.value';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE, []).value('gceServerGroupHiddenMetadataKeys', [\n 'load-balancer-names',\n 'global-load-balancer-names',\n 'backend-service-names',\n 'load-balancing-policy',\n 'select-zones',\n 'customUserData',\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, ExpectedArtifactService, INSTANCE_TYPE_SERVICE } from '@spinnaker/core';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCEProviderSettings } from '../../gce.settings';\nimport { parseHealthCheckUrl } from '../../healthCheck/healthCheckUtils';\n\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE } from './wizard/hiddenMetadataKeys.value';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.gce.serverGroupCommandBuilder.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n INSTANCE_TYPE_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE,\n ])\n .factory('gceServerGroupCommandBuilder', [\n '$q',\n 'instanceTypeService',\n 'gceCustomInstanceBuilderService',\n 'gceServerGroupHiddenMetadataKeys',\n 'gceXpnNamingService',\n function (\n $q,\n instanceTypeService,\n gceCustomInstanceBuilderService,\n gceServerGroupHiddenMetadataKeys,\n gceXpnNamingService,\n ) {\n // Two assumptions here:\n // 1) All GCE machine types are represented in the tree of choices.\n // 2) Each machine type appears in exactly one category.\n function determineInstanceCategoryFromInstanceType(command) {\n return instanceTypeService.getCategories('gce').then(function (categories) {\n categories.forEach(function (category) {\n category.families.forEach(function (family) {\n family.instanceTypes.forEach(function (instanceType) {\n if (instanceType.name === command.instanceType) {\n command.viewState.instanceProfile = category.type;\n }\n });\n });\n });\n });\n }\n\n function extractNetworkName(serverGroup) {\n const projectId = gceXpnNamingService.deriveProjectId(serverGroup.launchConfig.instanceTemplate);\n const networkUrl = _.get(serverGroup, 'launchConfig.instanceTemplate.properties.networkInterfaces[0].network');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n }\n\n function extractSubnetName(serverGroup) {\n const projectId = gceXpnNamingService.deriveProjectId(serverGroup.launchConfig.instanceTemplate);\n const subnetworkUrl = _.get(\n serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].subnetwork',\n );\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetworkUrl);\n }\n\n function determineAssociatePublicIPAddress(serverGroup) {\n return _.has(serverGroup, 'launchConfig.instanceTemplate.properties.networkInterfaces[0].accessConfigs');\n }\n\n function extractLoadBalancers(asg) {\n return ['load-balancer-names', 'global-load-balancer-names'].reduce((loadBalancers, property) => {\n if (asg[property]) {\n loadBalancers = loadBalancers.concat(asg[property]);\n }\n return loadBalancers;\n }, []);\n }\n\n function extractLoadBalancersFromMetadata(metadata) {\n return ['load-balancer-names', 'global-load-balancer-names'].reduce((loadBalancers, property) => {\n if (metadata[property]) {\n loadBalancers = loadBalancers.concat(metadata[property].split(','));\n }\n return loadBalancers;\n }, []);\n }\n\n function populateDisksFromExisting(disks, command) {\n disks = disks.map((disk, index) => {\n if (index === 0) {\n return {\n type: disk.initializeParams.diskType,\n sizeGb: disk.initializeParams.diskSizeGb,\n };\n } else {\n return {\n type: disk.initializeParams.diskType,\n sizeGb: disk.initializeParams.diskSizeGb,\n sourceImage: _.last(_.get(disk, 'initializeParams.sourceImage', '').split('/')) || null,\n };\n }\n });\n const localSSDDisks = disks.filter((disk) => disk.type === 'local-ssd');\n const persistentDisks = disks.filter(\n (disk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n\n if (persistentDisks.length) {\n command.disks = persistentDisks.concat(localSSDDisks);\n return instanceTypeService\n .getInstanceTypeDetails(\n command.selectedProvider,\n _.includes(command.instanceType, 'custom-') ? 'buildCustom' : command.instanceType,\n )\n .then((instanceTypeDetails) => {\n command.viewState.instanceTypeDetails = instanceTypeDetails;\n calculateOverriddenStorageDescription(instanceTypeDetails, command);\n });\n } else {\n command.disks = [{ type: 'pd-ssd', sizeGb: 10 }].concat(localSSDDisks);\n return $q.when(null);\n }\n }\n\n function populateDisksFromPipeline(command) {\n const persistentDisks = getPersistentDisks(command);\n const localSSDDisks = getLocalSSDDisks(command);\n\n if (persistentDisks.length) {\n command.disks = persistentDisks.concat(localSSDDisks);\n return instanceTypeService\n .getInstanceTypeDetails(\n command.selectedProvider,\n _.includes(command.instanceType, 'custom-') ? 'buildCustom' : command.instanceType,\n )\n .then((instanceTypeDetails) => {\n command.viewState.instanceTypeDetails = instanceTypeDetails;\n calculateOverriddenStorageDescription(instanceTypeDetails, command);\n });\n } else {\n command.disks = [{ type: 'pd-ssd', sizeGb: 10 }].concat(localSSDDisks);\n return $q.when(null);\n }\n }\n\n function getLocalSSDDisks(command) {\n return (command.disks || []).filter((disk) => disk.type === 'local-ssd');\n }\n\n function getPersistentDisks(command) {\n return (command.disks || []).filter(\n (disk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n }\n\n function calculatePersistentDiskOverriddenStorageDescription(command) {\n const persistentDisks = getPersistentDisks(command);\n\n const diskCountBySizeGb = new Map();\n persistentDisks.forEach((disk) => {\n if (diskCountBySizeGb.has(disk.sizeGb)) {\n diskCountBySizeGb.set(disk.sizeGb, diskCountBySizeGb.get(disk.sizeGb) + 1);\n } else {\n diskCountBySizeGb.set(disk.sizeGb, 1);\n }\n });\n\n return Array.from(diskCountBySizeGb)\n .sort(([sizeA], [sizeB]) => sizeB - sizeA)\n .map(([sizeGb, count]) => count + '×' + sizeGb)\n .join(', ');\n }\n\n function calculateOverriddenStorageDescription(instanceTypeDetails, command) {\n if (instanceTypeDetails.storage.localSSDSupported) {\n if (getLocalSSDDisks(command).length !== instanceTypeDetails.storage.count) {\n command.viewState.overriddenStorageDescription = getLocalSSDDisks(command).length + '×375';\n }\n } else {\n const persistentDisks = getPersistentDisks(command);\n const overrideStorageDescription =\n persistentDisks.some((disk) => disk.sizeGb !== instanceTypeDetails.storage.size) ||\n persistentDisks.length !== instanceTypeDetails.storage.count;\n\n if (overrideStorageDescription) {\n command.viewState.overriddenStorageDescription = calculatePersistentDiskOverriddenStorageDescription(\n command,\n );\n }\n }\n }\n\n function populateAvailabilityPolicies(scheduling, command) {\n if (scheduling) {\n command.preemptible = scheduling.preemptible;\n command.automaticRestart = scheduling.automaticRestart;\n command.onHostMaintenance = scheduling.onHostMaintenance;\n } else {\n command.preemptible = false;\n command.automaticRestart = true;\n command.onHostMaintenance = 'MIGRATE';\n }\n }\n\n function populateAutoHealingPolicy(serverGroup, command) {\n const autoHealingPolicy = serverGroup.autoHealingPolicy;\n if (autoHealingPolicy) {\n const healthCheckUrl = autoHealingPolicy.healthCheckUrl\n ? autoHealingPolicy.healthCheckUrl\n : autoHealingPolicy.healthCheck;\n\n if (healthCheckUrl) {\n const { healthCheckName, healthCheckKind } = parseHealthCheckUrl(healthCheckUrl);\n command.autoHealingPolicy = {\n healthCheck: healthCheckName,\n healthCheckKind: healthCheckKind,\n healthCheckUrl: healthCheckUrl,\n initialDelaySec: autoHealingPolicy.initialDelaySec,\n };\n }\n\n const maxUnavailable = autoHealingPolicy.maxUnavailable;\n if (maxUnavailable) {\n command.autoHealingPolicy.maxUnavailable = maxUnavailable;\n command.viewState.maxUnavailableMetric = typeof maxUnavailable.percent === 'number' ? 'percent' : 'fixed';\n }\n }\n }\n\n function populateShieldedVmConfig(serverGroup, command) {\n command.enableSecureBoot = serverGroup.enableSecureBoot;\n command.enableVtpm = serverGroup.enableVtpm;\n command.enableIntegrityMonitoring = serverGroup.enableIntegrityMonitoring;\n }\n\n function populateCustomMetadata(metadataItems, command) {\n // Hide metadata items in the wizard.\n if (metadataItems) {\n let customUserData = '';\n let customUserDataKeys = [];\n if (angular.isArray(metadataItems)) {\n const customUserDataItem = metadataItems.find((metadataItem) => metadataItem.key === 'customUserData');\n if (customUserDataItem) {\n customUserData = customUserDataItem.value;\n customUserDataKeys = getCustomUserDataKeys(customUserData);\n command.userData = customUserData;\n }\n metadataItems.forEach(function (metadataItem) {\n if (\n !_.includes(customUserDataKeys, metadataItem.key) &&\n !_.includes(gceServerGroupHiddenMetadataKeys, metadataItem.key)\n ) {\n command.instanceMetadata[metadataItem.key] = metadataItem.value;\n }\n });\n } else {\n if (metadataItems.customUserData) {\n customUserData = metadataItems.customUserData;\n customUserDataKeys = getCustomUserDataKeys(customUserData);\n command.userData = customUserData;\n metadataItems = _.omit(metadataItems, customUserDataKeys);\n }\n angular.extend(command.instanceMetadata, _.omit(metadataItems, gceServerGroupHiddenMetadataKeys));\n }\n }\n\n if (command.labels['spinnaker-moniker-sequence']) {\n delete command.labels['spinnaker-moniker-sequence'];\n }\n }\n\n function getCustomUserDataKeys(customUserData) {\n const customUserDataKeys = [];\n customUserData.split(/\\n|,/).forEach(function (userDataItem) {\n const customUserDataKey = userDataItem.split('=')[0];\n customUserDataKeys.push(customUserDataKey);\n });\n return customUserDataKeys;\n }\n\n function populateTags(instanceTemplateTags, command) {\n if (instanceTemplateTags && instanceTemplateTags.items) {\n _.map(instanceTemplateTags.items, function (tag) {\n command.tags.push({ value: tag });\n });\n }\n }\n\n function populateResourceManagerTags(instanceTemplateResourceManagerTags, command) {\n if (instanceTemplateResourceManagerTags) {\n Object.assign(command.resourceManagerTags, instanceTemplateResourceManagerTags);\n }\n }\n\n function populatePartnerMetadata(instanceTemplatePartnerMetadata, command) {\n if (instanceTemplatePartnerMetadata) {\n Object.assign(command.partnerMetadata, instanceTemplatePartnerMetadata);\n }\n }\n\n function populateLabels(instanceTemplateLabels, command) {\n if (instanceTemplateLabels) {\n Object.assign(command.labels, instanceTemplateLabels);\n\n if (command.labels['spinnaker-region']) {\n delete command.labels['spinnaker-region'];\n }\n\n if (command.labels['spinnaker-server-group']) {\n delete command.labels['spinnaker-server-group'];\n }\n\n // Need to delete the sequence, otherwise it won't increment\n if (command.labels['spinnaker-moniker-sequence']) {\n delete command.labels['spinnaker-moniker-sequence'];\n }\n }\n }\n\n function populateAuthScopes(serviceAccounts, command) {\n if (serviceAccounts && serviceAccounts.length) {\n command.serviceAccountEmail = serviceAccounts[0].email;\n command.authScopes = _.map(serviceAccounts[0].scopes, (authScope) => {\n return authScope.replace('https://www.googleapis.com/auth/', '');\n });\n } else {\n command.authScopes = [];\n }\n }\n\n function attemptToSetValidCredentials(application, defaultCredentials, command) {\n return AccountService.listAccounts('gce').then(function (gceAccounts) {\n const gceAccountNames = _.map(gceAccounts, 'name');\n const firstGCEAccount = gceAccountNames[0];\n\n const defaultCredentialsAreValid = defaultCredentials && gceAccountNames.includes(defaultCredentials);\n\n command.credentials = defaultCredentialsAreValid ? defaultCredentials : firstGCEAccount || 'my-account-name';\n });\n }\n\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultCredentials = defaults.account || GCEProviderSettings.defaults.account;\n const defaultRegion = defaults.region || GCEProviderSettings.defaults.region;\n const defaultZone = defaults.zone || GCEProviderSettings.defaults.zone;\n const associatePublicIpAddress = _.has(application, 'attributes.providerSettings.gce.associatePublicIpAddress')\n ? application.attributes.providerSettings.gce.associatePublicIpAddress\n : true;\n\n const command = {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n zone: defaultZone,\n regional: false, // TODO(duftler): Externalize this default alongside defaultRegion and defaultZone.\n selectZones: false, // Explicitly select zones for regional server groups.\n distributionPolicy: { zones: [] },\n network: 'default',\n associatePublicIpAddress: associatePublicIpAddress,\n canIpForward: false,\n strategy: '',\n capacity: {\n min: 0,\n max: 0,\n desired: 1,\n },\n backendServiceMetadata: [],\n minCpuPlatform: '(Automatic)',\n disks: [\n { type: 'pd-ssd', sizeGb: 10 },\n { type: 'local-ssd', sizeGb: 375 },\n ],\n imageSource: 'priorStage',\n instanceMetadata: {},\n tags: [],\n labels: {},\n resourceManagerTags: {},\n partnerMetadata: {},\n enableSecureBoot: false,\n enableVtpm: false,\n enableIntegrityMonitoring: false,\n preemptible: false,\n automaticRestart: true,\n onHostMaintenance: 'MIGRATE',\n serviceAccountEmail: 'default',\n authScopes: ['cloud.useraccounts.readonly', 'devstorage.read_only', 'logging.write', 'monitoring.write'],\n enableTraffic: true,\n cloudProvider: 'gce',\n selectedProvider: 'gce',\n availabilityZones: [],\n viewState: {\n instanceProfile: 'custom',\n allImageSelection: null,\n useSimpleCapacity: true,\n usePreferredZones: true,\n listImplicitSecurityGroups: false,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n expectedArtifacts: [],\n },\n };\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['Google'];\n }\n\n return attemptToSetValidCredentials(application, defaultCredentials, command).then(() => command);\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline(currentStage, pipeline) {\n const expectedArtifacts = ExpectedArtifactService.getExpectedArtifactsAvailableToStage(currentStage, pipeline);\n return $q.when({\n viewState: {\n pipeline,\n expectedArtifacts: expectedArtifacts,\n requiresTemplateSelection: true,\n stage: currentStage,\n },\n });\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n const moniker = serverGroup.moniker;\n\n const command = {\n application: application.name,\n autoscalingPolicy: _.cloneDeep(serverGroup.autoscalingPolicy),\n strategy: '',\n stack: moniker.stack,\n freeFormDetails: moniker.detail,\n credentials: serverGroup.account,\n loadBalancers: extractLoadBalancers(serverGroup.asg),\n loadBalancingPolicy: _.cloneDeep(serverGroup.loadBalancingPolicy),\n backendServiceMetadata: serverGroup.asg['backend-service-names'],\n securityGroups: serverGroup.securityGroups,\n region: serverGroup.region,\n capacity: {\n min: serverGroup.asg.minSize,\n max: serverGroup.asg.maxSize,\n desired: serverGroup.asg.desiredCapacity,\n },\n regional: serverGroup.regional,\n network: extractNetworkName(serverGroup),\n subnet: extractSubnetName(serverGroup),\n associatePublicIpAddress: determineAssociatePublicIPAddress(serverGroup),\n canIpForward: serverGroup.canIpForward,\n minCpuPlatform: serverGroup.launchConfig.minCpuPlatform || '(Automatic)',\n instanceMetadata: {},\n tags: [],\n labels: {},\n resourceManagerTags: {},\n partnerMetadata: {},\n availabilityZones: [],\n enableSecureBoot: serverGroup.enableSecureBoot,\n enableVtpm: serverGroup.enableVtpm,\n enableIntegrityMonitoring: serverGroup.enableIntegrityMonitoring,\n enableTraffic: true,\n cloudProvider: 'gce',\n selectedProvider: 'gce',\n distributionPolicy: {\n zones: serverGroup.distributionPolicy ? serverGroup.distributionPolicy.zones : [],\n targetShape: serverGroup.distributionPolicy ? serverGroup.distributionPolicy.targetShape : null,\n },\n selectZones: serverGroup.selectZones,\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n asgName: serverGroup.name,\n },\n viewState: {\n allImageSelection: null,\n useSimpleCapacity: !serverGroup.autoscalingPolicy,\n usePreferredZones: false,\n listImplicitSecurityGroups: false,\n mode: mode,\n },\n };\n\n if (!command.regional) {\n command.zone = serverGroup.zones[0];\n command.source.zone = serverGroup.zones[0];\n }\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['Google'];\n }\n\n populateAutoHealingPolicy(serverGroup, command);\n\n if (serverGroup.launchConfig) {\n const instanceType = serverGroup.launchConfig.instanceType;\n angular.extend(command, {\n instanceType: instanceType,\n });\n\n if (_.includes(instanceType, 'custom-')) {\n command.viewState.customInstance = gceCustomInstanceBuilderService.parseInstanceTypeString(instanceType);\n command.viewState.instanceProfile = 'buildCustom';\n }\n\n command.viewState.imageId = serverGroup.launchConfig.imageId;\n return determineInstanceCategoryFromInstanceType(command).then(function () {\n populateAvailabilityPolicies(serverGroup.launchConfig.instanceTemplate.properties.scheduling, command);\n populateCustomMetadata(serverGroup.launchConfig.instanceTemplate.properties.metadata.items, command);\n populateTags(serverGroup.launchConfig.instanceTemplate.properties.tags, command);\n populateLabels(serverGroup.instanceTemplateLabels, command);\n populateAuthScopes(serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts, command);\n populateResourceManagerTags(\n serverGroup.launchConfig.instanceTemplate.properties.resourceManagerTags,\n command,\n );\n populatePartnerMetadata(serverGroup.launchConfig.instanceTemplate.properties.partnerMetadata, command);\n\n return populateDisksFromExisting(serverGroup.launchConfig.instanceTemplate.properties.disks, command).then(\n function () {\n return command;\n },\n );\n });\n }\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster, currentStage, pipeline) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = Object.keys(pipelineCluster.availabilityZones)[0];\n const zone = pipelineCluster.zone;\n const instanceTypeCategoryLoader = instanceTypeService.getCategoryForInstanceType(\n 'gce',\n pipelineCluster.instanceType,\n );\n\n const commandOptions = { account: pipelineCluster.account, region: region, zone: zone };\n return $q\n .all([buildNewServerGroupCommand(application, commandOptions), instanceTypeCategoryLoader])\n .then(function ([command, instanceProfile]) {\n const expectedArtifacts = ExpectedArtifactService.getExpectedArtifactsAvailableToStage(\n currentStage,\n pipeline,\n );\n const viewState = {\n pipeline,\n stage: currentStage,\n instanceProfile,\n disableImageSelection: true,\n expectedArtifacts: expectedArtifacts,\n showImageSourceSelector: true,\n useSimpleCapacity: !pipelineCluster.autoscalingPolicy,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n customInstance:\n instanceProfile === 'buildCustom'\n ? gceCustomInstanceBuilderService.parseInstanceTypeString(pipelineCluster.instanceType)\n : null,\n templatingEnabled: true,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n enableTraffic: !pipelineCluster.disableTraffic,\n viewState: viewState,\n };\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);\n\n return populateDisksFromPipeline(extendedCommand).then(function () {\n const instanceMetadata = extendedCommand.instanceMetadata;\n extendedCommand.loadBalancers = extractLoadBalancersFromMetadata(instanceMetadata);\n extendedCommand.backendServiceMetadata = instanceMetadata['backend-service-names']\n ? instanceMetadata['backend-service-names'].split(',')\n : [];\n extendedCommand.minCpuPlatform = pipelineCluster.minCpuPlatform || '(Automatic)';\n extendedCommand.instanceMetadata = {};\n populateCustomMetadata(instanceMetadata, extendedCommand);\n populateAutoHealingPolicy(pipelineCluster, extendedCommand);\n populateShieldedVmConfig(pipelineCluster, extendedCommand);\n\n const instanceTemplateTags = { items: extendedCommand.tags };\n extendedCommand.tags = [];\n populateTags(instanceTemplateTags, extendedCommand);\n\n const resourceManagerTags = extendedCommand.resourceManagerTags;\n populateResourceManagerTags(resourceManagerTags, extendedCommand);\n\n const partnerMetadata = extendedCommand.partnerMetadata;\n populatePartnerMetadata(partnerMetadata, extendedCommand);\n\n return extendedCommand;\n });\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _, { isEmpty } from 'lodash';\n\nimport { FirewallLabels, INSTANCE_TYPE_SERVICE, ModalWizard, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE } from './hiddenMetadataKeys.value';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from '../../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './securityGroups/tagManager.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER =\n 'spinnaker.serverGroup.configure.gce.cloneServerGroup';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n INSTANCE_TYPE_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .controller('gceCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n '$log',\n 'serverGroupWriter',\n 'gceServerGroupConfigurationService',\n 'serverGroupCommand',\n 'application',\n 'title',\n 'gceCustomInstanceBuilderService',\n 'instanceTypeService',\n 'wizardSubFormValidation',\n 'gceServerGroupHiddenMetadataKeys',\n 'gceTagManager',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n $log,\n serverGroupWriter,\n gceServerGroupConfigurationService,\n serverGroupCommand,\n application,\n title,\n gceCustomInstanceBuilderService,\n instanceTypeService,\n wizardSubFormValidation,\n gceServerGroupHiddenMetadataKeys,\n gceTagManager,\n ) {\n $scope.pages = {\n templateSelection: require('./templateSelection/templateSelection.html'),\n basicSettings: require('./location/basicSettings.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n securityGroups: require('./securityGroups/securityGroups.html'),\n instanceType: require('./instanceType/instanceType.html'),\n capacity: require('./capacity/capacity.html'),\n autoHealingPolicy: require('./autoHealingPolicy/autoHealingPolicy.html'),\n autoScalingPolicy: require('./autoScalingPolicy/autoScalingPolicy.html'),\n zones: require('./capacity/zones.html'),\n advancedSettings: require('./advancedSettings/advancedSettings.html'),\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n\n $scope.command = serverGroupCommand;\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: [\n 'account, region, subnet, cluster name (stack, details)',\n 'load balancers',\n FirewallLabels.get('firewalls'),\n 'instance type',\n 'all fields on the Advanced Settings page',\n ],\n notCopied: [],\n };\n\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'gce',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n gceServerGroupConfigurationService\n .configureCommand(application, serverGroupCommand)\n .then(function () {\n $scope.state.loaded = true;\n initializeSelectOptions();\n initializeWatches();\n wizardSubFormValidation\n .config({ scope: $scope, form: 'form' })\n .register({ page: 'location', subForm: 'basicSettings' })\n .register({ page: 'capacity', subForm: 'capacitySubForm' })\n .register({ page: 'zones', subForm: 'zonesSubForm' })\n .register({ page: 'load-balancers', subForm: 'loadBalancerSubForm' })\n .register({ page: 'autohealing-policy', subForm: 'autoHealingPolicySubForm' })\n .register({ page: 'autoscaling-policy', subForm: 'autoScalingPolicySubForm' });\n })\n .catch((e) => {\n $log.error('Error generating server group command: ', e);\n });\n }\n\n function initializeWatches() {\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.regional', createResultProcessor($scope.command.regionalChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n $scope.$watch('command.network', createResultProcessor($scope.command.networkChanged));\n $scope.$watch('command.zone', createResultProcessor($scope.command.zoneChanged));\n $scope.$watch('command.viewState.instanceTypeDetails', updateStorageSettingsFromInstanceType());\n $scope.$watch('command.selectZones', createResultProcessor($scope.command.selectZonesChanged));\n $scope.$watch('command.distributionPolicy.zones', createResultProcessor($scope.command.selectZonesChanged));\n $scope.$watch(\n 'command.viewState.customInstance',\n () => {\n $scope.command.customInstanceChanged($scope.command);\n setInstanceTypeFromCustomChoices();\n },\n true,\n );\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged($scope.command));\n processCommandUpdateResult($scope.command.regionalChanged($scope.command));\n processCommandUpdateResult($scope.command.regionChanged($scope.command));\n processCommandUpdateResult($scope.command.networkChanged($scope.command));\n processCommandUpdateResult($scope.command.zoneChanged($scope.command));\n processCommandUpdateResult($scope.command.customInstanceChanged($scope.command));\n gceServerGroupConfigurationService.configureSubnets($scope.command);\n }\n\n function createResultProcessor(method) {\n return function () {\n processCommandUpdateResult(method($scope.command));\n };\n }\n\n function processCommandUpdateResult(result) {\n if (result.dirty.loadBalancers) {\n ModalWizard.markDirty('load-balancers');\n }\n if (result.dirty.securityGroups) {\n ModalWizard.markDirty('security-groups');\n }\n if (result.dirty.availabilityZones) {\n ModalWizard.markDirty('capacity');\n }\n if (result.dirty.instanceType) {\n ModalWizard.markDirty('instance-type');\n }\n }\n\n function setInstanceTypeFromCustomChoices() {\n const c = $scope.command;\n const location = c.regional ? c.region : c.zone;\n const { locationToInstanceTypesMap } = c.backingData.credentialsKeyedByAccount[c.credentials];\n const extendedMemory = _.get(c, 'viewState.customInstance.extendedMemory');\n const customInstanceChoices = [\n _.get(c, 'viewState.customInstance.instanceFamily'),\n _.get(c, 'viewState.customInstance.vCpuCount'),\n _.get(c, 'viewState.customInstance.memory'),\n ];\n\n if (\n _.every([\n ...customInstanceChoices,\n gceCustomInstanceBuilderService.customInstanceChoicesAreValid(\n ...customInstanceChoices,\n location,\n locationToInstanceTypesMap,\n extendedMemory,\n ),\n ])\n ) {\n c.instanceType = gceCustomInstanceBuilderService.generateInstanceTypeString(\n ...customInstanceChoices,\n extendedMemory,\n );\n\n instanceTypeService.getInstanceTypeDetails(c.selectedProvider, 'buildCustom').then((instanceTypeDetails) => {\n c.viewState.instanceTypeDetails = instanceTypeDetails;\n });\n }\n }\n\n function updateStorageSettingsFromInstanceType() {\n return function (instanceTypeDetails) {\n if ($scope.command.viewState.initialized) {\n if (instanceTypeDetails && instanceTypeDetails.storage && instanceTypeDetails.storage.defaultSettings) {\n $scope.command.disks = instanceTypeDetails.storage.defaultSettings.disks;\n delete $scope.command.viewState.overriddenStorageDescription;\n }\n } else {\n $scope.command.viewState.initialized = true;\n }\n };\n }\n\n this.isValid = function () {\n const selectedZones =\n $scope.command.selectZones && _.get($scope, 'command.distributionPolicy.zones.length') >= 1;\n const autoScalingPolicy = $scope.command.autoscalingPolicy;\n return (\n $scope.command &&\n ($scope.command.viewState.disableImageSelection || $scope.command.image) &&\n $scope.command.application &&\n $scope.command.credentials &&\n $scope.command.instanceType &&\n $scope.command.region &&\n ($scope.command.regional || $scope.command.zone) &&\n $scope.command.capacity.desired !== null &&\n (!$scope.command.selectZones || selectedZones) &&\n $scope.form.$valid &&\n (!autoScalingPolicy ||\n (autoScalingPolicy &&\n (!isEmpty(autoScalingPolicy.cpuUtilization) ||\n !isEmpty(autoScalingPolicy.customMetricUtilizations) ||\n !isEmpty(autoScalingPolicy.loadBalancingUtilization)))) &&\n ModalWizard.isComplete()\n );\n };\n\n this.showSubmitButton = function () {\n return ModalWizard.allPagesVisited();\n };\n\n function buildLoadBalancerMetadata(loadBalancerNames, loadBalancerIndex, backendServices) {\n let metadata = {};\n\n if (_.get(loadBalancerNames, 'length') > 0) {\n metadata = loadBalancerNames.reduce(\n (metadata, name) => {\n const loadBalancerDetails = loadBalancerIndex[name];\n\n if (loadBalancerDetails.loadBalancerType === 'HTTP') {\n metadata['global-load-balancer-names'] = metadata['global-load-balancer-names'].concat(\n loadBalancerDetails.listeners.map((listener) => listener.name),\n );\n } else if (loadBalancerDetails.loadBalancerType === 'INTERNAL_MANAGED') {\n metadata['load-balancer-names'] = metadata['load-balancer-names'].concat(\n loadBalancerDetails.listeners.map((listener) => listener.name),\n );\n } else if (loadBalancerDetails.loadBalancerType === 'SSL') {\n metadata['global-load-balancer-names'].push(name);\n } else if (loadBalancerDetails.loadBalancerType === 'TCP') {\n metadata['global-load-balancer-names'].push(name);\n } else {\n metadata['load-balancer-names'].push(name);\n }\n return metadata;\n },\n { 'load-balancer-names': [], 'global-load-balancer-names': [] },\n );\n }\n\n if (_.isObject(backendServices) && Object.keys(backendServices).length > 0) {\n metadata['backend-service-names'] = _.reduce(\n backendServices,\n (accumulatedBackends, backends) => accumulatedBackends.concat(backends),\n [],\n );\n }\n\n for (const key in metadata) {\n if (metadata[key].length === 0) {\n delete metadata[key];\n } else {\n metadata[key] = _.uniq(metadata[key]).toString();\n }\n }\n\n return metadata;\n }\n\n function collectLoadBalancerNamesForCommand(loadBalancerIndex, loadBalancerMetadata) {\n let loadBalancerNames = [];\n if (loadBalancerMetadata['load-balancer-names']) {\n loadBalancerNames = loadBalancerNames.concat(loadBalancerMetadata['load-balancer-names'].split(','));\n }\n\n const selectedSslLoadBalancerNames = _.chain(loadBalancerIndex)\n .filter({ loadBalancerType: 'SSL' })\n .map('name')\n .intersection(\n loadBalancerMetadata['global-load-balancer-names']\n ? loadBalancerMetadata['global-load-balancer-names'].split(',')\n : [],\n )\n .value();\n\n const selectedTcpLoadBalancerNames = _.chain(loadBalancerIndex)\n .filter({ loadBalancerType: 'TCP' })\n .map('name')\n .intersection(\n loadBalancerMetadata['global-load-balancer-names']\n ? loadBalancerMetadata['global-load-balancer-names'].split(',')\n : [],\n )\n .value();\n\n return loadBalancerNames.concat(selectedSslLoadBalancerNames).concat(selectedTcpLoadBalancerNames);\n }\n\n this.submit = function () {\n // We use this list of load balancer names when 'Enabling' a server group.\n const loadBalancerMetadata = buildLoadBalancerMetadata(\n $scope.command.loadBalancers,\n $scope.command.backingData.filtered.loadBalancerIndex,\n $scope.command.backendServices,\n );\n\n const origLoadBalancers = $scope.command.loadBalancers;\n $scope.command.loadBalancers = collectLoadBalancerNamesForCommand(\n $scope.command.backingData.filtered.loadBalancerIndex,\n loadBalancerMetadata,\n );\n\n if ($scope.command.minCpuPlatform === '(Automatic)') {\n $scope.command.minCpuPlatform = '';\n }\n\n angular.extend($scope.command.instanceMetadata, loadBalancerMetadata);\n\n const origTags = $scope.command.tags;\n const transformedTags = [];\n // The tags are stored using a 'value' attribute to enable the Add/Remove behavior in the wizard.\n $scope.command.tags.forEach(function (tag) {\n transformedTags.push(tag.value);\n });\n $scope.command.tags = transformedTags;\n\n $scope.command.targetSize = $scope.command.capacity.desired;\n\n if ($scope.command.autoscalingPolicy) {\n $scope.command.capacity.min = $scope.command.autoscalingPolicy.minNumReplicas;\n $scope.command.capacity.max = $scope.command.autoscalingPolicy.maxNumReplicas;\n } else {\n $scope.command.capacity.min = $scope.command.capacity.desired;\n $scope.command.capacity.max = $scope.command.capacity.desired;\n }\n\n delete $scope.command.securityGroups;\n\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n\n $scope.taskMonitor.submit(function () {\n const promise = serverGroupWriter.cloneServerGroup(angular.copy($scope.command), application);\n\n // Copy back the original objects so the wizard can still be used if the command needs to be resubmitted.\n $scope.command.instanceMetadata = _.omit($scope.command.instanceMetadata, gceServerGroupHiddenMetadataKeys);\n\n $scope.command.tags = origTags;\n $scope.command.loadBalancers = origLoadBalancers;\n $scope.command.securityGroups = gceTagManager.inferSecurityGroupIdsFromTags($scope.command.tags);\n\n return promise;\n });\n };\n\n this.onHealthCheckRefresh = function () {\n gceServerGroupConfigurationService.refreshHealthChecks($scope.command);\n };\n\n this.onEnableAutoHealingChange = function () {\n // Prevent empty auto-healing policies from being overwritten by those of their ancestors\n $scope.command.overwriteAncestorAutoHealingPolicy =\n $scope.command.viewState.mode === 'clone' &&\n $scope.command.autoHealingPolicy != null &&\n $scope.command.enableAutoHealing === false;\n };\n\n this.setAutoHealingPolicy = function (autoHealingPolicy) {\n $scope.command.autoHealingPolicy = autoHealingPolicy;\n };\n\n this.onEnableAutoScalingChange = function () {\n // Prevent empty auto-scaling policies from being overwritten by those of their ancestors\n $scope.command.overwriteAncestorAutoScalingPolicy =\n $scope.command.autoscalingPolicy != null && $scope.command.enableAutoScaling === false;\n };\n\n this.setAutoScalingPolicy = function (autoScalingPolicy) {\n $scope.command.autoscalingPolicy = autoScalingPolicy;\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.specialInstanceProfiles = new Set(['custom', 'buildCustom']);\n\n // This function is called from within React, and without $apply, Angular does not know when it has been called.\n $scope.command.setCustomInstanceViewState = (customInstanceChoices) => {\n $scope.$apply(() => ($scope.command.viewState.customInstance = customInstanceChoices));\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n $scope.$on('$destroy', gceTagManager.reset);\n },\n ]);\n","import { has } from 'lodash';\n\nimport { TaskExecutor } from '@spinnaker/core';\nimport type { IGceServerGroup } from '../../../domain';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nexport class StatefulMIGService {\n public static markDiskStateful(applicationName: string, deviceName: string, serverGroup: IGceServerGroup) {\n return TaskExecutor.executeTask({\n application: applicationName,\n description: 'Mark disk as stateful',\n job: [\n {\n cloudProvider: 'gce',\n credentials: serverGroup.account,\n deviceName,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n type: 'setStatefulDisk',\n },\n ],\n });\n }\n\n public static statefullyUpdateBootDisk(applicationName: string, bootImage: string, serverGroup: IGceServerGroup) {\n return TaskExecutor.executeTask({\n application: applicationName,\n description: 'Statefully update boot disk image',\n job: [\n {\n bootImage,\n cloudProvider: 'gce',\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n type: 'statefullyUpdateBootImage',\n },\n ],\n });\n }\n\n public static isDiskStateful(deviceName: string, serverGroup: IGceServerGroup): boolean {\n return has(serverGroup, ['statefulPolicy', 'preservedState', 'disks', deviceName]);\n }\n\n public static statefulMigsEnabled(): boolean {\n return GCEProviderSettings.feature.statefulMigsEnabled;\n }\n}\n","import React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { ConfirmationModalService } from '@spinnaker/core';\n\nimport { StatefulMIGService } from './StatefulMIGService';\nimport type { IGceServerGroup } from '../../../domain';\n\ninterface IMarkDiskStatefulButtonProps {\n application: Application;\n deviceName: string;\n serverGroup: IGceServerGroup;\n}\n\nexport function MarkDiskStatefulButton({ application, deviceName, serverGroup }: IMarkDiskStatefulButtonProps) {\n function openConfirmationModal(): void {\n ConfirmationModalService.confirm({\n account: serverGroup.account,\n askForReason: true,\n buttonText: 'Mark as stateful',\n header: `Really mark disk ${deviceName} as stateful?`,\n submitMethod: () => {\n return StatefulMIGService.markDiskStateful(application.name, deviceName, serverGroup);\n },\n taskMonitorConfig: {\n application,\n title: 'Marking disk as stateful',\n },\n });\n }\n\n if (StatefulMIGService.isDiskStateful(deviceName, serverGroup)) {\n return <span> (Marked as Stateful)</span>;\n }\n\n return (\n <button className=\"btn-link\" onClick={() => openConfirmationModal()}>\n Mark as Stateful\n </button>\n );\n}\n","import React from 'react';\n\nimport type { Application, IModalComponentProps } from '@spinnaker/core';\nimport { FormikFormField, ReactModal, TaskMonitor, WizardModal, WizardPage } from '@spinnaker/core';\n\nimport { StatefulMIGService } from './StatefulMIGService';\nimport type { IGceServerGroup } from '../../../domain';\nimport type { IGceImage } from '../../../image';\nimport { GceImageReader, ImageSelect } from '../../../image';\n\ninterface IUpdateBootImageButtonProps {\n application: Application;\n bootImage: string;\n serverGroup: IGceServerGroup;\n}\n\nexport function UpdateBootImageButton(props: IUpdateBootImageButtonProps) {\n function openUpdateImageModal() {\n const componentProps = { ...props } as IUpdateBootImageModalProps;\n ReactModal.show(UpdateBootImageModal, componentProps, { dialogClassName: 'wizard-modal modal-lg' });\n }\n\n return (\n <button className=\"btn-link\" onClick={openUpdateImageModal}>\n Statefully Update\n </button>\n );\n}\n\ninterface IUpdateBootImageModalProps extends IModalComponentProps, IUpdateBootImageButtonProps {\n application: Application;\n serverGroup: IGceServerGroup;\n}\n\ninterface IUpdateBootImageModalState {\n availableImages: IGceImage[];\n taskMonitor: TaskMonitor;\n}\n\ninterface IUpdateBootImageModalFormValues {\n image: string;\n}\n\nclass UpdateBootImageModal extends React.Component<IUpdateBootImageModalProps, IUpdateBootImageModalState> {\n public constructor(props: IUpdateBootImageModalProps) {\n super(props);\n this.state = {\n availableImages: [],\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Updating Boot Image',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n }),\n };\n }\n\n public componentDidMount() {\n GceImageReader.findImages({\n account: this.props.serverGroup.account,\n provider: 'gce',\n q: '*',\n }).then((images) => {\n this.setState({ availableImages: images });\n });\n }\n\n private submit = (values: IUpdateBootImageModalFormValues): void => {\n this.state.taskMonitor.submit(() =>\n StatefulMIGService.statefullyUpdateBootDisk(this.props.application.name, values.image, this.props.serverGroup),\n );\n };\n\n public render() {\n return (\n <WizardModal<IUpdateBootImageModalFormValues>\n closeModal={this.submit}\n dismissModal={this.props.dismissModal}\n heading=\"Update Boot Disk Image\"\n initialValues={{ image: this.props.bootImage }}\n submitButtonLabel=\"Update Image\"\n taskMonitor={this.state.taskMonitor}\n render={({ formik, nextIdx, wizard }) => (\n <WizardPage\n label=\"Boot Image\"\n wizard={wizard}\n order={nextIdx()}\n render={() => (\n <FormikFormField\n input={(props) => (\n <div className=\"full-width\" style={{ height: '225px' }}>\n <ImageSelect\n availableImages={this.state.availableImages}\n selectedImage={props.value}\n selectImage={(imageName: string) => formik.setFieldValue('image', imageName)}\n />\n </div>\n )}\n label=\"Boot image name:\"\n name=\"image\"\n required={true}\n />\n )}\n />\n )}\n />\n );\n }\n}\n","import { module } from 'angular';\nimport { get, last } from 'lodash';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport type { Application } from '@spinnaker/core';\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceDisk, IGceServerGroup } from '../../domain';\nimport { MarkDiskStatefulButton } from './stateful/MarkDiskStatefulButton';\nimport { StatefulMIGService } from './stateful/StatefulMIGService';\nimport { UpdateBootImageButton } from './stateful/UpdateBootImageButton';\n\ninterface IServerGroupDiskDescriptionProps {\n application: Application;\n serverGroup: IGceServerGroup;\n}\n\nclass ServerGroupDiskDescriptions extends React.Component<IServerGroupDiskDescriptionProps> {\n public render() {\n const { application, serverGroup } = this.props;\n const disks: IGceDisk[] = get(serverGroup, 'launchConfig.instanceTemplate.properties.disks', []);\n const statefulOperationsEnabled: boolean = StatefulMIGService.statefulMigsEnabled();\n const canUpdateBootImage =\n statefulOperationsEnabled &&\n disks.some((disk) => StatefulMIGService.isDiskStateful(disk.deviceName, serverGroup));\n\n return disks.map((disk) => {\n if (disk.boot) {\n return (\n <React.Fragment key={disk.deviceName}>\n <dt>\n Boot Disk\n {canUpdateBootImage && (\n <UpdateBootImageButton\n application={application}\n bootImage={ServerGroupDiskDescriptions.getDiskImageName(disk)}\n serverGroup={serverGroup}\n />\n )}\n </dt>\n <dd>{ServerGroupDiskDescriptions.getDiskTypeLabel(disk)}</dd>\n <dd>{ServerGroupDiskDescriptions.getDiskImageLabel(disk)}</dd>\n </React.Fragment>\n );\n }\n return (\n <React.Fragment key={disk.deviceName}>\n <dt>\n Disk\n {statefulOperationsEnabled && (\n <MarkDiskStatefulButton\n application={application}\n deviceName={disk.deviceName}\n serverGroup={serverGroup}\n />\n )}\n </dt>\n <dd>{ServerGroupDiskDescriptions.getDiskTypeLabel(disk)}</dd>\n <dd>{ServerGroupDiskDescriptions.getDiskImageLabel(disk)}</dd>\n </React.Fragment>\n );\n });\n }\n\n private static translateDiskType = (disk: IGceDisk): string => {\n const diskType = disk.initializeParams.diskType;\n if (diskType === 'pd-ssd') {\n return 'Persistent SSD';\n } else if (diskType === 'local-ssd') {\n return 'Local SSD';\n } else {\n return 'Persistent Std';\n }\n };\n\n private static getDiskTypeLabel = (disk: IGceDisk): string => {\n return `${ServerGroupDiskDescriptions.translateDiskType(disk)}: ${disk.initializeParams.diskSizeGb}GB`;\n };\n\n private static getDiskImageLabel = (disk: IGceDisk): string => {\n return `Image: ${ServerGroupDiskDescriptions.getDiskImageName(disk)}`;\n };\n\n private static getDiskImageName = (disk: IGceDisk): string => {\n return last(get(disk, 'initializeParams.sourceImage', '').split('/'));\n };\n}\n\nexport const GCE_SERVER_GROUP_DISK_DESCRIPTIONS = 'spinnaker.gce.serverGroupDiskDescriptions';\nmodule(GCE_SERVER_GROUP_DISK_DESCRIPTIONS, []).component(\n 'gceServerGroupDiskDescriptions',\n react2angular(withErrorBoundary(ServerGroupDiskDescriptions, 'gceServerGroupDiskDescriptions'), [\n 'application',\n 'serverGroup',\n ]),\n);\n","import { module } from 'angular';\nimport { isEmpty } from 'lodash';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport {\n CheckboxInput,\n FormField,\n LayoutProvider,\n NumberInput,\n ReactSelectInput,\n withErrorBoundary,\n} from '@spinnaker/core';\n\nimport type { IGceAutoscalingPolicy, IGceScaleInControl } from '../../../../autoscalingPolicy';\nimport { GceAutoScalingFieldLayout } from '../../../../autoscalingPolicy';\n\nenum maxReplicasUnit {\n fixed = 'fixed',\n percent = 'percent',\n}\n\ninterface IGceScaleInControlsProps {\n policy: IGceAutoscalingPolicy;\n updatePolicy: (policy: IGceAutoscalingPolicy) => void;\n}\n\nconst defaultScaleInControl: IGceScaleInControl = {\n maxScaledInReplicas: {\n fixed: null,\n percent: 0,\n },\n timeWindowSec: 60,\n};\n\nfunction GceScaleInControls({ policy, updatePolicy }: IGceScaleInControlsProps) {\n function updateScaleInControl(scaleInControl: IGceScaleInControl) {\n const scaleInControlExist = Object.keys(scaleInControl).length;\n if (scaleInControlExist) {\n updatePolicy({\n ...policy,\n scaleInControl,\n });\n } else {\n const updatedPolicy: any = policy;\n delete updatedPolicy['scaleInControl'];\n updatePolicy({\n ...updatedPolicy,\n });\n }\n }\n\n function getMaxReplicasUnit(): maxReplicasUnit {\n if (Number.isInteger(policy.scaleInControl.maxScaledInReplicas.percent)) {\n return maxReplicasUnit.percent;\n }\n return maxReplicasUnit.fixed;\n }\n\n return (\n <LayoutProvider value={GceAutoScalingFieldLayout}>\n <div className=\"row\">\n <FormField\n input={(inputProps) => <CheckboxInput {...inputProps} />}\n label=\"Enable scale-in controls\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl(e.target.checked ? defaultScaleInControl : {});\n }}\n value={!isEmpty(policy.scaleInControl)}\n />\n </div>\n {!isEmpty(policy.scaleInControl) && (\n <>\n <div className=\"row\">\n <FormField\n input={(inputProps) => (\n <NumberInput\n {...inputProps}\n min={0}\n max={getMaxReplicasUnit() === maxReplicasUnit.percent ? 100 : null}\n />\n )}\n label=\"Max scaled-in replicas\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n maxScaledInReplicas: {\n [getMaxReplicasUnit()]: parseInt(e.target.value, 10),\n },\n });\n }}\n value={policy.scaleInControl.maxScaledInReplicas[getMaxReplicasUnit()]}\n />\n <FormField\n input={(inputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n stringOptions={[maxReplicasUnit.percent, maxReplicasUnit.fixed]}\n />\n )}\n label=\"\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n maxScaledInReplicas: {\n [e.target.value]: policy.scaleInControl.maxScaledInReplicas[getMaxReplicasUnit()],\n },\n });\n }}\n value={getMaxReplicasUnit()}\n />\n </div>\n <div className=\"row\">\n <FormField\n input={(inputProps) => <NumberInput {...inputProps} min={60} max={3600} />}\n label=\"Time window (seconds)\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n timeWindowSec: parseInt(e.target.value, 10),\n });\n }}\n value={policy.scaleInControl.timeWindowSec}\n />\n </div>\n </>\n )}\n </LayoutProvider>\n );\n}\n\nexport const GCE_SCALE_IN_CONTROLS = 'spinnaker.gce.scaleInControls';\nmodule(GCE_SCALE_IN_CONTROLS, []).component(\n 'gceScaleInControls',\n react2angular(withErrorBoundary(GceScaleInControls, 'gceScaleInControls'), ['policy', 'updatePolicy']),\n);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport type { Application, IServerGroup } from '@spinnaker/core';\n\nclass GceAddAutoHealingPolicyButtonCtrl implements IController {\n public application: Application;\n public serverGroup: IServerGroup;\n\n public static $inject = ['$uibModal'];\n constructor(private $uibModal: IModalService) {}\n\n public addAutoHealingPolicy(): void {\n this.$uibModal.open({\n templateUrl: require('./modal/upsertAutoHealingPolicy.modal.html'),\n controller: 'gceUpsertAutoHealingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'md',\n resolve: {\n serverGroup: () => this.serverGroup,\n application: () => this.application,\n },\n });\n }\n}\n\nconst gceAddAutoHealingPolicyButton: IComponentOptions = {\n bindings: {\n application: '<',\n serverGroup: '<',\n },\n template: '<a href ng-click=\"$ctrl.addAutoHealingPolicy()\">Create new autohealing policy</a>',\n controller: GceAddAutoHealingPolicyButtonCtrl,\n};\n\nexport const GCE_ADD_AUTOHEALING_POLICY_BUTTON = 'spinnaker.gce.addAutoHealingPolicyButton.component';\nmodule(GCE_ADD_AUTOHEALING_POLICY_BUTTON, []).component('gceAddAutoHealingPolicyButton', gceAddAutoHealingPolicyButton);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport { ConfirmationModalService } from '@spinnaker/core';\nimport type { IGceServerGroup } from '../../../domain/index';\n\nclass GceAutoHealingPolicyDetailsCtrl implements IController {\n public serverGroup: IGceServerGroup;\n public application: Application;\n\n public static $inject = ['$uibModal', 'gceAutoscalingPolicyWriter'];\n constructor(private $uibModal: IModalService, private gceAutoscalingPolicyWriter: any) {}\n\n public editPolicy(): void {\n this.$uibModal.open({\n templateUrl: require('./modal/upsertAutoHealingPolicy.modal.html'),\n controller: 'gceUpsertAutoHealingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'md',\n resolve: {\n application: () => this.application,\n serverGroup: () => this.serverGroup,\n },\n });\n }\n\n public deletePolicy(): void {\n const taskMonitor = {\n application: this.application,\n title: `Deleting autohealing policy for ${this.serverGroup.name}`,\n };\n\n ConfirmationModalService.confirm({\n header: `Really delete autohealer for ${this.serverGroup.name}?`,\n buttonText: 'Delete autohealer',\n account: this.serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: () => this.gceAutoscalingPolicyWriter.deleteAutoHealingPolicy(this.application, this.serverGroup),\n });\n }\n}\n\nconst gceAutoHealingPolicyDetails: IComponentOptions = {\n bindings: { serverGroup: '<', application: '<' },\n template: `\n <dt>\n Health Check\n <help-field key=\"gce.serverGroup.autoHealing\"></help-field>\n </dt>\n <dd>{{$ctrl.serverGroup.autoHealingPolicyHealthCheck}}</dd>\n <dt>\n Initial Delay\n <help-field key=\"gce.serverGroup.initialDelaySec\"></help-field>\n </dt>\n <dd>{{$ctrl.serverGroup.initialDelaySec}} seconds</dd>\n <dt ng-if=\"$ctrl.serverGroup.maxUnavailable\">\n Max Unavailable\n <help-field key=\"gce.serverGroup.maxUnavailable\"></help-field>\n </dt>\n <dd ng-if=\"$ctrl.serverGroup.maxUnavailable\">{{$ctrl.serverGroup.maxUnavailable}}</dd>\n <action-icons class=\"text-right\"\n edit=\"$ctrl.editPolicy()\"\n edit-info=\"Edit Policy\"\n destroy=\"$ctrl.deletePolicy()\"\n destroy-info=\"Delete Policy\">\n </action-icons>`,\n controller: GceAutoHealingPolicyDetailsCtrl,\n};\n\nexport const GCE_AUTOHEALING_POLICY_DETAILS = 'spinnaker.gce.autoHealingPolicyDetails.component';\nmodule(GCE_AUTOHEALING_POLICY_DETAILS, []).component('gceAutoHealingPolicyDetails', gceAutoHealingPolicyDetails);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { TaskExecutor } from '@spinnaker/core';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE =\n 'spinnaker.gce.serverGroup.details.scalingPolicy.write.service';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE, [])\n .factory('gceAutoscalingPolicyWriter', function () {\n function upsertAutoscalingPolicy(application, serverGroup, policy, params = {}) {\n const job = {\n type: 'upsertScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n autoscalingPolicy: policy,\n };\n angular.extend(job, params);\n\n return TaskExecutor.executeTask({\n application,\n description: 'Upsert scaling policy ' + serverGroup.name,\n job: [job],\n });\n }\n\n function deleteAutoscalingPolicy(application, serverGroup) {\n return TaskExecutor.executeTask({\n application,\n description: 'Delete scaling policy ' + serverGroup.name,\n job: [\n {\n type: 'deleteScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n },\n ],\n });\n }\n\n function upsertAutoHealingPolicy(application, serverGroup, policy, params = {}) {\n const job = {\n type: 'upsertScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n autoHealingPolicy: policy,\n };\n angular.extend(job, params);\n\n return TaskExecutor.executeTask({\n application,\n description: 'Upsert autohealing policy ' + serverGroup.name,\n job: [job],\n });\n }\n\n function deleteAutoHealingPolicy(application, serverGroup) {\n return TaskExecutor.executeTask({\n application,\n description: 'Delete autohealing policy ' + serverGroup.name,\n job: [\n {\n type: 'deleteScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n deleteAutoHealingPolicy: true,\n },\n ],\n });\n }\n\n return { upsertAutoscalingPolicy, deleteAutoscalingPolicy, upsertAutoHealingPolicy, deleteAutoHealingPolicy };\n });\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\nimport { cloneDeep } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\nimport { TaskMonitor } from '@spinnaker/core';\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport type { IGceAutoHealingPolicy, IGceServerGroup } from '../../../../domain/index';\nimport type { GceHealthCheckReader } from '../../../../healthCheck/healthCheck.read.service';\nimport { GCE_HEALTH_CHECK_READER } from '../../../../healthCheck/healthCheck.read.service';\nimport type { IGceHealthCheckOption } from '../../../../healthCheck/healthCheckUtils';\nimport { getHealthCheckOptions } from '../../../../healthCheck/healthCheckUtils';\n\nimport './upsertAutoHealingPolicy.modal.less';\n\nclass GceUpsertAutoHealingPolicyModalCtrl implements IController {\n public autoHealingPolicy: IGceAutoHealingPolicy;\n public taskMonitor: TaskMonitor;\n public healthChecks: IGceHealthCheckOption[];\n public action: 'Edit' | 'New';\n public isNew: boolean;\n public submitButtonLabel: string;\n\n public static $inject = [\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n 'gceHealthCheckReader',\n 'gceAutoscalingPolicyWriter',\n ];\n constructor(\n private $uibModalInstance: IModalServiceInstance,\n private application: Application,\n public serverGroup: IGceServerGroup,\n private gceHealthCheckReader: GceHealthCheckReader,\n private gceAutoscalingPolicyWriter: any,\n ) {\n this.initialize();\n }\n\n public submit(): void {\n const submitMethod = () => {\n return this.gceAutoscalingPolicyWriter.upsertAutoHealingPolicy(\n this.application,\n this.serverGroup,\n this.autoHealingPolicy,\n );\n };\n this.taskMonitor.submit(submitMethod);\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public setAutoHealingPolicy(autoHealingPolicy: IGceAutoHealingPolicy): void {\n this.autoHealingPolicy = autoHealingPolicy;\n }\n\n public onHealthCheckRefresh(): void {\n this.gceHealthCheckReader.listHealthChecks().then((healthChecks) => {\n const matchingHealthChecks = healthChecks.filter((hc) => hc.account === this.serverGroup.account);\n this.healthChecks = getHealthCheckOptions(matchingHealthChecks);\n });\n }\n\n private initialize(): void {\n this.onHealthCheckRefresh();\n this.action = this.serverGroup.autoHealingPolicy ? 'Edit' : 'New';\n this.isNew = !this.serverGroup.autoHealingPolicy;\n this.submitButtonLabel = this.isNew ? 'Create' : 'Update';\n if (!this.isNew) {\n this.autoHealingPolicy = cloneDeep(this.serverGroup.autoHealingPolicy);\n }\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: `${this.action} autohealing policy for ${this.serverGroup.name}`,\n modalInstance: this.$uibModalInstance,\n });\n }\n}\n\nexport const GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL = 'spinnaker.gce.upsertAutoHealingPolicy.modal.controller';\nmodule(GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL, [\n GCE_HEALTH_CHECK_READER,\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n]).controller('gceUpsertAutoHealingPolicyModalCtrl', GceUpsertAutoHealingPolicyModalCtrl);\n","'use strict';\n\nimport { module } from 'angular';\nimport { cloneDeep } from 'lodash';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE } from '../../../configure/serverGroup.configure.gce.module';\n\nimport './upsertAutoscalingPolicy.modal.less';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER =\n 'spinnaker.deck.gce.upsertAutoscalingPolicy.modal.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER, [\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n]).controller('gceUpsertAutoscalingPolicyModalCtrl', [\n 'policy',\n 'application',\n 'serverGroup',\n '$uibModalInstance',\n 'gceAutoscalingPolicyWriter',\n '$scope',\n function (policy, application, serverGroup, $uibModalInstance, gceAutoscalingPolicyWriter, $scope) {\n [this.action, this.isNew] = policy ? ['Edit', false] : ['New', true];\n this.policy = cloneDeep(policy || {});\n\n this.cancel = $uibModalInstance.dismiss;\n\n this.taskMonitor = new TaskMonitor({\n application: application,\n title: `${this.action} scaling policy for ${serverGroup.name}`,\n modalInstance: $uibModalInstance,\n });\n\n this.save = () => {\n const submitMethod = () =>\n gceAutoscalingPolicyWriter.upsertAutoscalingPolicy(application, serverGroup, this.policy);\n\n this.taskMonitor.submit(submitMethod);\n };\n\n this.updatePolicy = (updatedPolicy) => {\n $scope.$applyAsync(() => {\n this.policy = updatedPolicy;\n });\n };\n },\n]);\n","import { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER } from './modal/upsertAutoscalingPolicy.modal.controller';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT =\n 'spinnaker.gce.serverGroup.details.scalingPolicy.addButton';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER,\n]).component('gceAddAutoscalingPolicyButton', {\n bindings: {\n serverGroup: '=',\n application: '=',\n },\n template: '<a href ng-click=\"$ctrl.addAutoscalingPolicy()\">Create new scaling policy</a>',\n controller: [\n '$uibModal',\n function ($uibModal) {\n this.addAutoscalingPolicy = () => {\n $uibModal.open({\n templateUrl: require('./modal/upsertAutoscalingPolicy.modal.html'),\n controller: 'gceUpsertAutoscalingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n policy: () => undefined,\n serverGroup: () => this.serverGroup,\n application: () => this.application,\n },\n });\n };\n },\n ],\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { ConfirmationModalService, SETTINGS } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from './../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport { GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT } from '../../configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component';\nimport { GCEProviderSettings } from '../../../gce.settings';\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER } from './modal/upsertAutoscalingPolicy.modal.controller';\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE =\n 'spinnaker.gce.instance.details.scalingPolicy.directive';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER,\n GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT,\n]).component('gceAutoscalingPolicy', {\n bindings: {\n policy: '=',\n application: '=',\n serverGroup: '=',\n },\n templateUrl: require('./autoscalingPolicy.directive.html'),\n controller: [\n '$uibModal',\n 'gceAutoscalingPolicyWriter',\n function ($uibModal, gceAutoscalingPolicyWriter) {\n var scope = this;\n scope.$onInit = function () {\n const policy = scope.policy;\n\n policy.bases = [];\n\n if (policy.cpuUtilization) {\n const basis = {\n description: 'CPU Usage',\n helpKey: 'gce.serverGroup.autoscaling.targetCPUUsage',\n };\n\n if (policy.cpuUtilization.utilizationTarget) {\n basis.targets = [Math.round(policy.cpuUtilization.utilizationTarget * 100) + '%'];\n }\n\n policy.bases.push(basis);\n }\n\n if (policy.loadBalancingUtilization) {\n const basis = {\n description: 'HTTP Load Balancing Usage',\n helpKey: 'gce.serverGroup.autoscaling.targetHTTPLoadBalancingUsage',\n };\n\n if (policy.loadBalancingUtilization.utilizationTarget) {\n basis.targets = [Math.round(policy.loadBalancingUtilization.utilizationTarget * 100) + '%'];\n }\n\n policy.bases.push(basis);\n }\n\n if (policy.customMetricUtilizations) {\n const basis = {\n description: policy.customMetricUtilizations.length > 1 ? 'Monitoring Metrics' : 'Monitoring Metric',\n helpKey: 'gce.serverGroup.autoscaling.targetMetric',\n };\n\n if (policy.customMetricUtilizations.length > 0) {\n basis.targets = [];\n policy.customMetricUtilizations.forEach((metric) => {\n let target = metric.metric + ': ' + metric.utilizationTarget;\n\n if (metric.utilizationTargetType === 'DELTA_PER_SECOND') {\n target += '/sec';\n } else if (metric.utilizationTargetType === 'DELTA_PER_MINUTE') {\n target += '/min';\n }\n\n basis.targets.push(target);\n });\n }\n\n policy.bases.push(basis);\n }\n\n scope.scaleInControlsConfigured =\n policy.scaleInControl &&\n policy.scaleInControl.timeWindowSec &&\n policy.scaleInControl.maxScaledInReplicas &&\n (policy.scaleInControl.maxScaledInReplicas.percent || policy.scaleInControl.maxScaledInReplicas.fixed);\n\n if (scope.scaleInControlsConfigured) {\n scope.maxScaledInReplicasMessage = policy.scaleInControl.maxScaledInReplicas.percent\n ? `${policy.scaleInControl.maxScaledInReplicas.percent}%`\n : `${policy.scaleInControl.maxScaledInReplicas.fixed}`;\n\n scope.timeWindowSecMessage = `${policy.scaleInControl.timeWindowSec} seconds`;\n }\n\n scope.predictiveAutoscalingEnabled =\n GCEProviderSettings.feature.predictiveAutoscaling &&\n policy.cpuUtilization &&\n policy.cpuUtilization.predictiveMethod;\n\n scope.editPolicy = () => {\n $uibModal.open({\n templateUrl: require('./modal/upsertAutoscalingPolicy.modal.html'),\n controller: 'gceUpsertAutoscalingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n policy: () => scope.policy,\n application: () => scope.application,\n serverGroup: () => scope.serverGroup,\n },\n });\n };\n\n scope.deletePolicy = () => {\n const taskMonitor = {\n application: scope.application,\n title: `Deleting autoscaler for ${scope.serverGroup.name}`,\n };\n\n ConfirmationModalService.confirm({\n header: `Really delete autoscaler for ${scope.serverGroup.name}?`,\n buttonText: 'Delete autoscaler',\n account: scope.serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: () =>\n gceAutoscalingPolicyWriter.deleteAutoscalingPolicy(scope.application, scope.serverGroup),\n });\n };\n };\n },\n ],\n});\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_COMMON_FOOTER_DIRECTIVE = 'spinnaker.google.footer.directive';\nexport const name = GOOGLE_COMMON_FOOTER_DIRECTIVE; // for backwards compatibility\nangular.module(GOOGLE_COMMON_FOOTER_DIRECTIVE, []).directive('gceFooter', function () {\n return {\n restrict: 'E',\n templateUrl: require('./footer.directive.html'),\n scope: {},\n bindToController: {\n action: '&',\n isValid: '&',\n cancel: '&',\n account: '=?',\n verification: '=?',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../autoscalingPolicy/autoscalingPolicy.write.service';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT =\n 'spinnaker.deck.gce.serverGroup.details.resizeAutoscalingPolicy.component';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT, [\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n ])\n .component('gceResizeAutoscalingPolicy', {\n bindings: {\n serverGroup: '=',\n command: '=',\n formMethods: '=',\n application: '=',\n },\n templateUrl: require('./resizeAutoscalingPolicy.component.html'),\n controller: [\n '$scope',\n 'gceAutoscalingPolicyWriter',\n function ($scope, gceAutoscalingPolicyWriter) {\n // In Angular 1.7 Directive bindings were removed in the constructor, default values now must be instantiated within $onInit\n // See https://docs.angularjs.org/guide/migration#-compile- and https://docs.angularjs.org/guide/migration#migrate1.5to1.6-ng-services-$compile\n this.$onInit = () => {\n const newPolicyBounds = ['newMinNumReplicas', 'newMaxNumReplicas'];\n newPolicyBounds.forEach((prop) => (this.command[prop] = null));\n\n angular.extend(this.formMethods, {\n formIsValid: () =>\n _.every([\n _.chain(newPolicyBounds)\n .map((bound) => this.command[bound] !== null)\n .every()\n .value(),\n $scope.resizeAutoscalingPolicyForm.$valid,\n ]),\n submitMethod: () => {\n return gceAutoscalingPolicyWriter.upsertAutoscalingPolicy(\n this.application,\n this.serverGroup,\n {\n minNumReplicas: this.command.newMinNumReplicas,\n maxNumReplicas: this.command.newMaxNumReplicas,\n },\n {\n reason: this.command.reason,\n interestingHealthProviderNames: this.command.interestingHealthProviderNames,\n },\n );\n },\n });\n };\n },\n ],\n });\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { SERVER_GROUP_WRITER } from '@spinnaker/core';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT =\n 'spinnaker.google.serverGroup.details.resize.capacity.component';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT, [SERVER_GROUP_WRITER])\n .component('gceResizeCapacity', {\n bindings: {\n command: '=',\n application: '=',\n serverGroup: '=',\n formMethods: '=',\n },\n templateUrl: require('./resizeCapacity.component.html'),\n controller: [\n '$scope',\n 'serverGroupWriter',\n function ($scope, serverGroupWriter) {\n // In Angular 1.7 Directive bindings were removed in the constructor, default values now must be instantiated within $onInit\n // See https://docs.angularjs.org/guide/migration#-compile- and https://docs.angularjs.org/guide/migration#migrate1.5to1.6-ng-services-$compile\n this.$onInit = () => {\n this.command.newSize = null;\n\n angular.extend(this.formMethods, {\n formIsValid: () => _.every([this.command.newSize !== null, $scope.resizeCapacityForm.$valid]),\n submitMethod: () => {\n return serverGroupWriter.resizeServerGroup(this.serverGroup, this.application, {\n capacity: { min: this.command.newSize, max: this.command.newSize, desired: this.command.newSize },\n serverGroupName: this.serverGroup.name,\n targetSize: this.command.newSize,\n region: this.serverGroup.region,\n interestingHealthProviderNames: this.command.interestingHealthProviderNames,\n reason: this.command.reason,\n });\n },\n });\n };\n },\n ],\n });\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_COMMON_FOOTER_DIRECTIVE } from '../../../common/footer.directive';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT } from './resizeAutoscalingPolicy.component';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT } from './resizeCapacity.component';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER =\n 'spinnaker.google.serverGroup.details.resize.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER, [\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT,\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT,\n GOOGLE_COMMON_FOOTER_DIRECTIVE,\n]).controller('gceResizeServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n function ($scope, $uibModalInstance, application, serverGroup) {\n $scope.serverGroup = serverGroup;\n $scope.application = application;\n $scope.verification = {};\n $scope.command = {};\n $scope.formMethods = {};\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Google'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n if (!$scope.verification.verified) {\n return false;\n }\n return $scope.formMethods.formIsValid();\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Resizing ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.resize = function () {\n this.submitting = true;\n if (!this.isValid()) {\n return;\n }\n\n $scope.taskMonitor.submit($scope.formMethods.submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\nimport { GOOGLE_COMMON_FOOTER_DIRECTIVE } from '../../../common/footer.directive';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.google.serverGroup.details.rollback.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [\n SERVER_GROUP_WRITER,\n GOOGLE_COMMON_FOOTER_DIRECTIVE,\n]).controller('gceRollbackServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n 'disabledServerGroups',\n function ($scope, $uibModalInstance, serverGroupWriter, application, serverGroup, disabledServerGroups) {\n $scope.serverGroup = serverGroup;\n $scope.disabledServerGroups = disabledServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.verification = {};\n\n $scope.command = {\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n },\n };\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Google'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n\n return command.rollbackContext.restoreServerGroupName !== undefined;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Rollback ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.rollback = function () {\n this.submitting = true;\n if (!this.isValid()) {\n return;\n }\n\n const submitMethod = function () {\n return serverGroupWriter.rollbackServerGroup(serverGroup, application, $scope.command);\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n ClusterTargetBuilder,\n ConfirmationModalService,\n FirewallLabels,\n NetworkReader,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupTemplates,\n ServerGroupWarningMessageService,\n} from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT } from './autoscalingPolicy/addAutoscalingPolicyButton.component';\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE } from './autoscalingPolicy/autoscalingPolicy.directive';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport '../configure/serverGroup.configure.gce.module';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER } from './resize/resizeServerGroup.controller';\nimport { GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\n\nimport './serverGroupDetails.less';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER =\n 'spinnaker.serverGroup.details.gce.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n SERVER_GROUP_WRITER,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER,\n GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT,\n ])\n .controller('gceServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$templateCache',\n '$interpolate',\n 'app',\n 'serverGroup',\n 'gceServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $templateCache,\n $interpolate,\n app,\n serverGroup,\n gceServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n gceXpnNamingService,\n ) {\n this.state = {\n loading: true,\n };\n\n this.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n const extractServerGroupSummary = () => {\n let summary = _.find(app.serverGroups.data, (toCheck) => {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some((loadBalancer) => {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some((possibleServerGroup) => {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n return summary;\n };\n\n const autoClose = () => {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n };\n\n const cancelLoader = () => {\n this.state.loading = false;\n };\n\n const retrieveServerGroup = () => {\n const summary = extractServerGroupSummary();\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then((details) => {\n cancelLoader();\n\n angular.extend(details, summary);\n // it's possible the summary was not found because the clusters are still loading\n details.account = serverGroup.accountId;\n\n this.serverGroup = details;\n\n if (!_.isEmpty(this.serverGroup)) {\n if (details.securityGroups) {\n this.securityGroups = _.chain(details.securityGroups)\n .map((id) => {\n return (\n _.find(app.securityGroups.data, { accountName: serverGroup.accountId, region: 'global', id: id }) ||\n _.find(app.securityGroups.data, { accountName: serverGroup.accountId, region: 'global', name: id })\n );\n })\n .compact()\n .value();\n }\n\n this.serverGroup.zones.sort();\n\n const projectId = gceXpnNamingService.deriveProjectId(this.serverGroup.launchConfig.instanceTemplate);\n this.serverGroup.logsLink =\n 'https://console.developers.google.com/project/' +\n projectId +\n '/logs?advancedFilter=resource.type=(gce_instance_group_manager OR gce_instance OR gce_autoscaler)%0A\"' +\n this.serverGroup.name +\n '\"';\n\n this.serverGroup.network = getNetwork(projectId);\n retrieveSubnet(projectId);\n determineAssociatePublicIPAddress();\n\n findStartupScript();\n prepareAvailabilityPolicies();\n prepareShieldedVmConfig();\n prepareAutoHealingPolicy();\n prepareAuthScopes();\n prepareCurrentActions();\n augmentTagsWithHelp();\n configureEntityTagTargets();\n processLabels();\n } else {\n autoClose();\n }\n }, autoClose);\n };\n\n const findStartupScript = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.metadata.items')) {\n const metadataItems = this.serverGroup.launchConfig.instanceTemplate.properties.metadata.items;\n const startupScriptItem = _.find(metadataItems, (metadataItem) => {\n return metadataItem.key === 'startup-script';\n });\n\n if (startupScriptItem) {\n this.serverGroup.startupScript = startupScriptItem.value;\n }\n }\n };\n\n const prepareAvailabilityPolicies = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.scheduling')) {\n const scheduling = this.serverGroup.launchConfig.instanceTemplate.properties.scheduling;\n\n this.serverGroup.availabilityPolicies = {\n preemptibility: scheduling.preemptible ? 'On' : 'Off',\n automaticRestart: scheduling.automaticRestart ? 'On' : 'Off',\n onHostMaintenance: scheduling.onHostMaintenance === 'MIGRATE' ? 'Migrate' : 'Terminate',\n };\n }\n };\n\n const prepareShieldedVmConfig = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.shieldedVmConfig')) {\n const shieldedVmConfig = this.serverGroup.launchConfig.instanceTemplate.properties.shieldedVmConfig;\n\n this.serverGroup.shieldedVmConfig = {\n enableSecureBoot: shieldedVmConfig.enableSecureBoot ? 'On' : 'Off',\n enableVtpm: shieldedVmConfig.enableVtpm ? 'On' : 'Off',\n enableIntegrityMonitoring: shieldedVmConfig.enableIntegrityMonitoring ? 'On' : 'Off',\n };\n }\n };\n\n const prepareAutoHealingPolicy = () => {\n if (this.serverGroup.autoHealingPolicy) {\n const autoHealingPolicy = this.serverGroup.autoHealingPolicy;\n const healthCheckUrl = autoHealingPolicy.healthCheck;\n\n this.serverGroup.autoHealingPolicyHealthCheck = healthCheckUrl ? _.last(healthCheckUrl.split('/')) : null;\n this.serverGroup.initialDelaySec = autoHealingPolicy.initialDelaySec;\n\n if (autoHealingPolicy.maxUnavailable) {\n if (typeof autoHealingPolicy.maxUnavailable.percent === 'number') {\n this.serverGroup.maxUnavailable = autoHealingPolicy.maxUnavailable.percent + '%';\n } else {\n this.serverGroup.maxUnavailable = autoHealingPolicy.maxUnavailable.fixed + ' instances';\n }\n }\n }\n };\n\n const prepareAuthScopes = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.serviceAccounts')) {\n const serviceAccounts = this.serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts;\n if (serviceAccounts.length) {\n const serviceAccount = this.serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts[0];\n\n this.serverGroup.serviceAccountEmail = serviceAccount.email;\n this.serverGroup.authScopes = _.map(serviceAccount.scopes, (authScope) => {\n return authScope.replace('https://www.googleapis.com/auth/', '');\n });\n }\n }\n };\n\n const prepareCurrentActions = () => {\n if (this.serverGroup.currentActions) {\n this.serverGroup.currentActionsSummary = [];\n\n _.forOwn(this.serverGroup.currentActions, (value, key) => {\n if (key !== 'none' && value) {\n this.serverGroup.currentActionsSummary.push({ action: _.startCase(key), count: value });\n }\n });\n\n if (!this.serverGroup.currentActionsSummary.length) {\n delete this.serverGroup.currentActionsSummary;\n }\n }\n };\n\n const augmentTagsWithHelp = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.tags.items') && this.securityGroups) {\n const helpMap = {};\n\n this.serverGroup.launchConfig.instanceTemplate.properties.tags.items.forEach((tag) => {\n const securityGroupsMatches = _.filter(this.securityGroups, (securityGroup) =>\n _.includes(securityGroup.targetTags, tag),\n );\n const securityGroupMatchNames = _.map(securityGroupsMatches, 'name');\n\n if (!_.isEmpty(securityGroupMatchNames)) {\n const groupOrGroups = securityGroupMatchNames.length > 1 ? 'groups' : 'group';\n\n helpMap[tag] =\n 'This tag associates this server group with security ' +\n groupOrGroups +\n ' <em>' +\n securityGroupMatchNames.join(', ') +\n '</em>.';\n }\n });\n\n this.serverGroup.launchConfig.instanceTemplate.properties.tags.helpMap = helpMap;\n }\n };\n\n const processLabels = () => {\n if (!_.size(this.serverGroup.instanceTemplateLabels)) {\n delete this.serverGroup.instanceTemplateLabels;\n }\n };\n\n const getNetwork = (projectId) => {\n const networkUrl = _.get(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].network',\n );\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n };\n\n const retrieveSubnet = (projectId) => {\n NetworkReader.listNetworksByProvider('gce').then((networks) => {\n const autoCreateSubnets = _.chain(networks)\n .filter({ account: this.serverGroup.account, id: this.serverGroup.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n if (autoCreateSubnets) {\n this.serverGroup.subnet = '(Auto-select)';\n } else {\n const subnetUrl = _.get(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].subnetwork',\n );\n this.serverGroup.subnet = gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetUrl);\n }\n });\n };\n\n const determineAssociatePublicIPAddress = () => {\n this.serverGroup.associatePublicIPAddress = _.has(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].accessConfigs',\n );\n };\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = (params) => serverGroupWriter.destroyServerGroup(serverGroup, app, params);\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => serverGroupWriter.disableServerGroup(serverGroup, app, params);\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => serverGroupWriter.enableServerGroup(serverGroup, app, params);\n\n const confirmationModalParams = {\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.rollbackServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./rollback/rollbackServerGroup.html'),\n controller: 'gceRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => this.serverGroup,\n disabledServerGroups: () => {\n const cluster = _.find(app.clusters, {\n name: this.serverGroup.cluster,\n account: this.serverGroup.account,\n });\n return _.filter(cluster.serverGroups, { isDisabled: true, region: this.serverGroup.region });\n },\n application: () => app,\n },\n });\n };\n\n this.resizeServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./resize/resizeServerGroup.html'),\n controller: 'gceResizeServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => {\n return this.serverGroup;\n },\n application: () => {\n return app;\n },\n },\n });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'gceCloneServerGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n title: () => {\n return 'Clone ' + serverGroup.name;\n },\n application: () => {\n return app;\n },\n serverGroup: () => {\n return serverGroup;\n },\n serverGroupCommand: () => {\n return gceServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup);\n },\n },\n });\n };\n\n this.showStartupScript = () => {\n $scope.userDataModalTitle = 'Startup Script';\n $scope.serverGroup = { name: this.serverGroup.name };\n $scope.userData = this.serverGroup.startupScript;\n $uibModal.open({\n templateUrl: ServerGroupTemplates.userData,\n scope: $scope,\n });\n };\n\n this.buildJenkinsLink = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.buildInfoUrl) {\n return this.serverGroup.buildInfo.buildInfoUrl;\n } else if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.jenkins) {\n const jenkins = this.serverGroup.buildInfo.jenkins;\n return jenkins.host + 'job/' + jenkins.name + '/' + jenkins.number;\n }\n return null;\n };\n\n this.truncateCommitHash = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.commit) {\n return this.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n\n const configureEntityTagTargets = () => {\n this.entityTagTargets = ClusterTargetBuilder.buildClusterTargets(this.serverGroup);\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GCE_ADD_AUTOHEALING_POLICY_BUTTON } from './autoHealingPolicy/addAutoHealingPolicyButton.component';\nimport { GCE_AUTOHEALING_POLICY_DETAILS } from './autoHealingPolicy/autoHealingPolicy.component';\nimport { GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL } from './autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller';\nimport { GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER } from './serverGroupDetails.gce.controller';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE = 'spinnaker.serverGroup.details.gce';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE, [\n GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER,\n GCE_ADD_AUTOHEALING_POLICY_BUTTON,\n GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL,\n GCE_AUTOHEALING_POLICY_DETAILS,\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { NetworkReader } from '@spinnaker/core';\n\nexport const GOOGLE_SUBNET_SUBNET_RENDERER = 'spinnaker.gce.subnet.renderer';\nexport const name = GOOGLE_SUBNET_SUBNET_RENDERER; // for backwards compatibility\nmodule(GOOGLE_SUBNET_SUBNET_RENDERER, []).factory('gceSubnetRenderer', function () {\n let gceNetworks;\n\n NetworkReader.listNetworksByProvider('gce').then(function (networks) {\n gceNetworks = networks;\n });\n\n function render(serverGroup) {\n if (serverGroup.subnet) {\n return serverGroup.subnet;\n } else {\n const autoCreateSubnets = _.chain(gceNetworks)\n .filter({ account: serverGroup.account, name: serverGroup.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n return autoCreateSubnets ? '(Auto-select)' : '[none]';\n }\n }\n\n return {\n render: render,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ApplicationNameValidator, FirewallLabels } from '@spinnaker/core';\n\nexport const GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR = 'spinnaker.gce.validation.applicationName';\nexport const name = GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR; // for backwards compatibility\nmodule(GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR, [])\n .factory('gceApplicationNameValidator', function () {\n function validateSpecialCharacters(name, errors) {\n const pattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!pattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters or digits. No ' +\n 'special characters are allowed.',\n );\n }\n }\n\n function validateLength(name, warnings, errors) {\n // GCE resource names must comply with https://www.ietf.org/rfc/rfc1035.txt\n // [a-z]([-a-z0-9]*[a-z0-9])?\n const maxResourceNameLength = 63;\n\n // e.g. $appName-$stack-$detail-tp-1451531076528 and $appName-$stack-$detail-hc-1451531076528\n const loadBalancerNameSuffixLength = 17;\n const maxLengthForLoadBalancers = maxResourceNameLength - loadBalancerNameSuffixLength;\n\n // e.g. $appName-$stack-$detail-v000-abcd\n const instanceNameSuffixLength = 10;\n const maxLengthForServerGroups = maxResourceNameLength - instanceNameSuffixLength;\n\n if (name.length > maxResourceNameLength) {\n errors.push('The maximum length for an application in Google is 63 characters.');\n return;\n }\n\n if (name.length > maxLengthForLoadBalancers - 12) {\n if (name.length > maxLengthForLoadBalancers) {\n warnings.push(`You will not be able to create a Google load balancer for this application if the\n application's name is longer than ${maxLengthForLoadBalancers} characters (currently: ${name.length}\n characters).`);\n } else if (name.length >= maxLengthForLoadBalancers - 2) {\n warnings.push(\n 'With separators (\"-\"), you will not be able to include a stack and detail field for ' +\n 'Google load balancers.',\n );\n } else {\n const remaining = maxLengthForLoadBalancers - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google load balancers, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n\n if (name.length > maxLengthForServerGroups - 12) {\n if (name.length > maxLengthForServerGroups) {\n warnings.push(`You will not be able to create a Google server group for this application if the\n application's name is longer than ${maxLengthForServerGroups} characters (currently: ${name.length}\n characters).`);\n } else if (name.length >= maxLengthForServerGroups - 2) {\n warnings.push(\n 'With separators (\"-\"), you will not be able to include a stack and detail field for ' +\n 'Google server groups.',\n );\n } else {\n const remaining = maxLengthForServerGroups - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google server groups, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n\n if (name.length > maxResourceNameLength - 12) {\n if (name.length >= maxResourceNameLength - 2) {\n warnings.push(\n `With separators (\"-\"), you will not be able to include a stack and detail field for Google ${FirewallLabels.get(\n 'firewalls',\n )}.`,\n );\n } else {\n const remaining = maxResourceNameLength - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google ${FirewallLabels.get(\n 'firewalls',\n )}, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n }\n\n function validate(name) {\n const warnings = [];\n const errors = [];\n\n if (name && name.length) {\n validateSpecialCharacters(name, errors);\n validateLength(name, warnings, errors);\n }\n\n return {\n warnings: warnings,\n errors: errors,\n };\n }\n\n return {\n validate: validate,\n };\n })\n .run([\n 'gceApplicationNameValidator',\n function (gceApplicationNameValidator) {\n ApplicationNameValidator.registerValidator('gce', gceApplicationNameValidator);\n },\n ]);\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport { GCE_PREDICTIVE_AUTOSCALING } from './autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling';\nimport { GOOGLE_CACHE_CACHECONFIGURER_SERVICE } from './cache/cacheConfigurer.service';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from './common/xpnNaming.gce.service';\nimport './help/gce.help';\nimport { GceImageReader } from './image';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER } from './instance/custom/customInstance.filter';\nimport { GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE } from './instance/gceInstanceType.service';\nimport { GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER } from './instance/gceMultiInstanceTask.transformer';\nimport { IAP_INTERCEPTOR } from './interceptors/iap.interceptor';\nimport { GCE_LOAD_BALANCER_CHOICE_MODAL } from './loadBalancer/configure/choice/gceLoadBalancerChoice.modal';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER } from './loadBalancer/configure/http/createHttpLoadBalancer.controller';\nimport { GCE_INTERNAL_LOAD_BALANCER_CTRL } from './loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER } from './loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER } from './loadBalancer/configure/network/createLoadBalancer.controller';\nimport { GCE_SSL_LOAD_BALANCER_CTRL } from './loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller';\nimport { GCE_TCP_LOAD_BALANCER_CTRL } from './loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { LOAD_BALANCER_SET_TRANSFORMER } from './loadBalancer/loadBalancer.setTransformer';\nimport { GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport logo from './logo/gce.logo.png';\nimport { GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE } from './pipeline/stages/bake/gceBakeStage';\nimport { GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE } from './pipeline/stages/cloneServerGroup/gceCloneServerGroupStage';\nimport { GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/gceDestroyAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE } from './pipeline/stages/disableAsg/gceDisableAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE } from './pipeline/stages/disableCluster/gceDisableClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE } from './pipeline/stages/enableAsg/gceEnableAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE } from './pipeline/stages/findAmi/gceFindAmiStage';\nimport { GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE } from './pipeline/stages/findImageFromTags/gceFindImageFromTagsStage';\nimport { GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE } from './pipeline/stages/resizeAsg/gceResizeAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/gceScaleDownClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/gceShrinkClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE } from './pipeline/stages/tagImage/gceTagImageStage';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER } from './securityGroup/configure/createSecurityGroup.controller';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER } from './securityGroup/configure/editSecurityGroup.controller';\nimport { GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './securityGroup/details/securityGroupDetail.controller';\nimport { GOOGLE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE } from './serverGroup/configure/serverGroup.configure.gce.module';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER } from './serverGroup/configure/wizard/cloneServerGroup.gce.controller';\nimport { GCE_SERVER_GROUP_DISK_DESCRIPTIONS } from './serverGroup/details/ServerGroupDiskDescriptions';\nimport { GCE_SCALE_IN_CONTROLS } from './serverGroup/details/autoscalingPolicy/modal/GceScaleInControls';\nimport { GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE } from './serverGroup/details/serverGroup.details.gce.module';\nimport { GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { GOOGLE_SUBNET_SUBNET_RENDERER } from './subnet/subnet.renderer';\nimport { GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR } from './validation/applicationName.validator';\n\nimport './logo/gce.logo.less';\n\nexport const GOOGLE_MODULE = 'spinnaker.gce';\nmodule(GOOGLE_MODULE, [\n LOAD_BALANCER_SET_TRANSFORMER,\n GCE_INTERNAL_LOAD_BALANCER_CTRL,\n GCE_LOAD_BALANCER_CHOICE_MODAL,\n GCE_SSL_LOAD_BALANCER_CTRL,\n GCE_TCP_LOAD_BALANCER_CTRL,\n IAP_INTERCEPTOR,\n GCE_SERVER_GROUP_DISK_DESCRIPTIONS,\n GCE_SCALE_IN_CONTROLS,\n GCE_PREDICTIVE_AUTOSCALING,\n GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE,\n GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE,\n GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE,\n GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE,\n GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE,\n GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE,\n GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE,\n GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE,\n GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER,\n GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER,\n GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER,\n GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER,\n GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n GOOGLE_SECURITYGROUP_SECURITYGROUP_READER,\n GOOGLE_SUBNET_SUBNET_RENDERER,\n GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR,\n GOOGLE_CACHE_CACHECONFIGURER_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).config(() => {\n CloudProviderRegistry.registerProvider('gce', {\n name: 'Google',\n logo: {\n path: logo,\n },\n cache: {\n configurer: 'gceCacheConfigurer',\n },\n image: {\n reader: GceImageReader,\n },\n serverGroup: {\n transformer: 'gceServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'gceServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'gceCloneServerGroupCtrl',\n commandBuilder: 'gceServerGroupCommandBuilder',\n configurationService: 'gceServerGroupConfigurationService',\n },\n instance: {\n instanceTypeService: 'gceInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'gceInstanceDetailsCtrl',\n multiInstanceTaskTransformer: 'gceMultiInstanceTaskTransformer',\n customInstanceBuilderTemplateUrl: require('./serverGroup/configure/wizard/customInstance/customInstanceBuilder.html'),\n },\n loadBalancer: {\n transformer: 'gceLoadBalancerTransformer',\n setTransformer: 'gceLoadBalancerSetTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetails.html'),\n detailsController: 'gceLoadBalancerDetailsCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/choice/gceLoadBalancerChoice.modal.html'),\n createLoadBalancerController: 'gceLoadBalancerChoiceCtrl',\n },\n securityGroup: {\n transformer: 'gceSecurityGroupTransformer',\n reader: 'gceSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'gceSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'gceCreateSecurityGroupCtrl',\n },\n subnet: {\n renderer: 'gceSubnetRenderer',\n },\n snapshotsEnabled: true,\n applicationProviderFields: {\n templateUrl: require('./applicationProviderFields/gceFields.html'),\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('gce', ['custom', 'redblack']);\n"],"names":["_","ViewState","observableFrom"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}