@spinnaker/google 2025.0.6 → 2025.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxdO,MAAM,kBAAkB,CAAC;AAChC,EAAE,OAAO,gBAAgB,CAAC,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE;AACpE,IAAI,OAAO,YAAY,CAAC,WAAW,CAAC;AACpC,MAAM,WAAW,EAAE,eAAe;AAClC,MAAM,WAAW,EAAE,uBAAuB;AAC1C,MAAM,GAAG,EAAE;AACX,QAAQ;AACR,UAAU,aAAa,EAAE,KAAK;AAC9B,UAAU,WAAW,EAAE,WAAW,CAAC,OAAO;AAC1C,UAAU,UAAU;AACpB,UAAU,MAAM,EAAE,WAAW,CAAC,MAAM;AACpC,UAAU,eAAe,EAAE,WAAW,CAAC,IAAI;AAC3C,UAAU,IAAI,EAAE,iBAAiB;AACjC,SAAS;AACT,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,wBAAwB,CAAC,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE;AAC3E,IAAI,OAAO,YAAY,CAAC,WAAW,CAAC;AACpC,MAAM,WAAW,EAAE,eAAe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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 = 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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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|