@spinnaker/oracle 2025.4.0 → 2026.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -3633
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/helpContents/oracleHelpContents.ts","../src/image/image.reader.js","../src/instance/details/instance.details.controller.js","../src/domain/IOracleLoadBalancer.ts","../src/oracle.settings.ts","../src/loadBalancer/loadBalancer.transformer.ts","../src/loadBalancer/configure/createLoadBalancer.controller.ts","../src/loadBalancer/details/loadBalancerDetail.controller.ts","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/pipeline/stages/bake/ociBakeStage.js","../src/pipeline/stages/destroyAsg/destroyAsgStage.js","../src/pipeline/stages/disableAsg/disableAsgStage.js","../src/pipeline/stages/findAmi/findAmiStage.js","../src/pipeline/stages/findImageFromTags/oracleFindImageFromTagsStage.js","../src/pipeline/stages/resizeAsg/resizeAsgStage.js","../src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/shrinkClusterStage.js","../src/securityGroup/configure/createSecurityGroup.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/basicSettings/basicSettings.controller.js","../src/serverGroup/configure/wizard/capacity/capacitySelector.component.js","../src/serverGroup/configure/serverGroup.configure.module.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/wizard/cloneServerGroup.controller.js","../src/common/footer.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.controller.js","../src/serverGroup/serverGroup.transformer.js","../src/oracle.module.ts"],"sourcesContent":["import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents = [\n {\n key: 'oracle.serverGroup.stack',\n value: '(Optional) <b>Stack</b> Stack name',\n },\n {\n key: 'oracle.serverGroup.detail',\n value: '(Optional) <b>Detail</b> is a naming component to help distinguish specifics of the server group.',\n },\n {\n key: 'oracle.pipeline.config.bake.baseOsOption',\n value: '<p>The base image from which the image will be created.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.image_name',\n value: '<p>The base name of the image that will be created.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.package',\n value:\n '<p>The name of the package you want installed (without any version identifiers).</p>' +\n '<p>If there are multiple packages (space separated), then they will be installed in the order they are entered.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.upgrade',\n value:\n '<p>Perform a package manager upgrade before proceeding with the package installation.</p>' +\n '<p>For example: <i>yum update</i>.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.regions',\n value:\n '<p>The region in which the new image will be created.</p>' +\n '<p>NB: <i>Currently baked images are restricted to a single region</i>.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.user',\n value: '<p>The name of Oracle <i>user</i> that will be used during the baking process.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.account_name',\n value: '<p>The name of Oracle <i>account</i> that will be used during the baking process.</p>',\n },\n {\n key: 'oracle.serverGroup.sshAuthorizedKeys',\n value: '<p>The public SSH key for the default user on the instance.</p>',\n },\n];\n\nhelpContents.forEach((entry) => HelpContentsRegistry.register(entry.key, entry.value));\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nexport const ORACLE_IMAGE_IMAGE_READER = 'spinnaker.oracle.image.reader';\nexport const name = ORACLE_IMAGE_IMAGE_READER; // for backwards compatibility\nmodule(ORACLE_IMAGE_IMAGE_READER, []).factory('oracleImageReader', function () {\n function findImages(params) {\n return REST('/images/find')\n .query(params)\n .get()\n .catch(function () {\n return [];\n });\n }\n\n function getImage(imageId, region, credentials) {\n return REST('/images')\n .path(credentials, region, imageId)\n .query({ provider: 'oracle' })\n .get()\n .then(\n function (results) {\n return results && results.length ? results[0] : null;\n },\n function () {\n return null;\n },\n );\n }\n\n return {\n findImages,\n getImage,\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { InstanceReader } from '@spinnaker/core';\n\nexport const ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.oracle.instance.details.controller';\nexport const name = ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'oracleInstanceDetailsCtrl',\n [\n '$scope',\n '$q',\n 'app',\n 'instance',\n function ($scope, $q, app, instance) {\n $scope.application = app;\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n function retrieveInstance() {\n let instanceSummary, account, region;\n if (!$scope.application.serverGroups) {\n instanceSummary = {};\n account = instance.account;\n region = instance.region;\n } else {\n $scope.application.serverGroups.data.some((serverGroup) => {\n return serverGroup.instances.some((possibleInstance) => {\n if (possibleInstance.id === instance.instanceId || possibleInstance.name === instance.instanceId) {\n instanceSummary = possibleInstance;\n account = serverGroup.account;\n region = serverGroup.region;\n return true;\n }\n });\n });\n }\n\n $scope.instance = instanceSummary;\n InstanceReader.getInstanceDetails(account, region, instance.instanceId).then((instanceDetails) => {\n Object.assign($scope.instance, instanceDetails);\n });\n }\n },\n ],\n);\n","import type { ILoadBalancer, ILoadBalancerDeleteCommand, ILoadBalancerUpsertCommand, ISubnet } from '@spinnaker/core';\n\nexport type ListenerProtocol = 'HTTP' | 'HTTPS' | 'TCP' | 'SSL';\nexport enum LoadBalancingPolicy {\n ROUND_ROBIN = 'ROUND_ROBIN',\n IP_HASH = 'IP_HASH',\n LEAST_CONNECTIONS = 'LEAST_CONNECTIONS',\n}\n\nexport interface IOracleSubnet extends ISubnet {\n id: string;\n name: string;\n availabilityDomain: string;\n securityListIds: string[];\n vcnId: string;\n}\n\nexport interface IOracleLoadBalancer extends ILoadBalancer {\n shape: string; // required\n isPrivate: boolean; // required\n subnets: IOracleSubnet[]; // required 1 for private LB, 2 for public LB\n certificates?: { [name: string]: IOracleListenerCertificate };\n listeners?: { [name: string]: IOracleListener }; // not required to create LB, but useless without it\n hostnames?: IOracleHostname[];\n backendSets?: { [name: string]: IOracleBackEndSet }; // not required to create LB, but useless without it\n freeformTags?: { [tagName: string]: string };\n id?: string; // not required to create LB\n subnetTypeMap?: { [id: string]: 'AD' | 'Regional' };\n // TODO support path route sets\n}\n\n// This is created from loadBalancer/loadBalancer.states.ts\nexport interface ILoadBalancerDetails {\n name: string;\n accountId: string;\n region: string;\n vpcId: string;\n}\n\nexport interface IOracleListener {\n name: string;\n protocol: ListenerProtocol;\n port: number;\n defaultBackendSetName: string;\n isSsl: boolean;\n sslConfiguration?: IOracleListenerSSLConfiguration;\n hostnames?: IOracleHostname[];\n // TODO support pathRouteSets\n}\n\nexport interface IOracleListenerSSLConfiguration {\n certificateName: string;\n verifyDepth: number;\n verifyPeerCertificates: boolean;\n}\n\nexport interface IOracleHostname {\n name: string;\n hostname: string;\n}\n\nexport interface IOracleBackEndSet {\n name: string;\n policy: LoadBalancingPolicy;\n healthChecker: IOracleBackendSetHealthCheck;\n // TODO desagar sessionPersistenceConfiguration?: IOracleLoadBalancerSessionPersistenceConfiguration;\n backends: any[];\n isNew: boolean;\n}\n\nexport interface IOracleListenerCertificate {\n certificateName: string;\n publicCertificate: string;\n caCertificate: string;\n privateKey: string;\n passphrase: string;\n isNew: boolean;\n}\n\nexport interface IOracleBackendSetHealthCheck {\n urlPath: string; // required\n protocol: 'HTTP' | 'TCP';\n port: number;\n intervalMillis?: number;\n timeoutMillis?: number;\n retries?: number;\n returnCode?: number;\n responseBodyRegex?: string;\n}\n\n/**\n * IOracleLoadBalancerUpsertCommand is nearly identical to IOracleLoadBalancer -\n * Command objects are the shape of data sent to gate.\n */\nexport interface IOracleLoadBalancerUpsertCommand extends ILoadBalancerUpsertCommand {\n shape: string; // required\n isPrivate: boolean; // required\n subnetIds: string[]; // required 1 for private LB, 2 for public LB\n certificates?: { [name: string]: IOracleListenerCertificate };\n listeners?: { [name: string]: IOracleListener }; // not required to create LB, but useless without it\n hostnames?: IOracleHostname[];\n backendSets?: { [name: string]: IOracleBackEndSet }; // not required to create LB, but useless without it\n freeformTags?: { [tagName: string]: string };\n vpcId: string;\n subnetTypeMap?: { [id: string]: 'AD' | 'Regional' };\n}\n\nexport interface IOracleLoadBalancerDeleteCommand extends ILoadBalancerDeleteCommand {\n loadBalancerId: string;\n}\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IOracleProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n };\n}\n\nexport const OracleProviderSettings: IOracleProviderSettings = (SETTINGS.providers\n .oracle as IOracleProviderSettings) || { defaults: {} };\nif (OracleProviderSettings) {\n OracleProviderSettings.resetToOriginal = SETTINGS.resetProvider('oracle');\n}\n\nexport const OracleDefaultProviderSettings = {\n defaults: { account: 'DEFAULT', bakeryRegions: 'us-phoenix-1', region: 'us-phoenix-1' },\n};\n","import { module } from 'angular';\nimport { $q } from 'ngimport';\n\nimport type { Application } from '@spinnaker/core';\nimport type {\n IOracleBackEndSet,\n IOracleListener,\n IOracleListenerCertificate,\n IOracleListenerSSLConfiguration,\n IOracleLoadBalancer,\n IOracleLoadBalancerUpsertCommand,\n} from '../domain/IOracleLoadBalancer';\nimport { LoadBalancingPolicy } from '../domain/IOracleLoadBalancer';\nimport { OracleProviderSettings } from '../oracle.settings';\nimport { OracleDefaultProviderSettings } from '../oracle.settings';\n\nexport class OracleLoadBalancerTransformer {\n public normalizeLoadBalancer(loadBalancer: IOracleLoadBalancer): PromiseLike<IOracleLoadBalancer> {\n /*loadBalancer.serverGroups.forEach(function(serverGroup) {\n serverGroup.account = loadBalancer.account;\n serverGroup.region = loadBalancer.region;\n\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 var activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups)\n .map('instances')\n .flatten()\n .value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups)\n .map('detachedInstances')\n .flatten()\n .value();*/\n return $q.resolve(loadBalancer);\n }\n\n public convertLoadBalancerForEditing(loadBalancer: IOracleLoadBalancer): IOracleLoadBalancerUpsertCommand {\n if (loadBalancer.listeners) {\n Object.keys(loadBalancer.listeners).forEach((key) => {\n const lis = loadBalancer.listeners[key];\n lis.isSsl = !!lis.sslConfiguration; // use !! operator to get truthiness value\n });\n }\n const toEdit: IOracleLoadBalancerUpsertCommand = {\n name: loadBalancer.name,\n cloudProvider: loadBalancer.cloudProvider,\n credentials: loadBalancer.account,\n region: loadBalancer.region,\n shape: loadBalancer.shape,\n isPrivate: loadBalancer.isPrivate,\n subnetIds: loadBalancer.subnets.map((subnet) => subnet.id),\n certificates: loadBalancer.certificates,\n listeners: loadBalancer.listeners,\n hostnames: loadBalancer.hostnames,\n backendSets: loadBalancer.backendSets,\n freeformTags: loadBalancer.freeformTags,\n loadBalancerType: loadBalancer.type,\n securityGroups: loadBalancer.securityGroups,\n vpcId: loadBalancer.vpcId,\n subnetTypeMap: loadBalancer.subnetTypeMap,\n };\n return toEdit;\n }\n\n public constructNewLoadBalancerTemplate(application: Application): IOracleLoadBalancerUpsertCommand {\n const defaultCredentials =\n application.defaultCredentials.oracle ||\n (OracleProviderSettings.defaults\n ? OracleProviderSettings.defaults.account\n : OracleDefaultProviderSettings.defaults.account);\n const defaultRegion =\n application.defaultRegions.oracle ||\n (OracleProviderSettings.defaults\n ? OracleProviderSettings.defaults.region\n : OracleDefaultProviderSettings.defaults.region);\n return {\n name: undefined,\n cloudProvider: 'oracle',\n credentials: defaultCredentials,\n region: defaultRegion,\n shape: null,\n isPrivate: false,\n subnetIds: [],\n listeners: {},\n hostnames: [],\n backendSets: {},\n freeformTags: {},\n loadBalancerType: null,\n securityGroups: [],\n vpcId: null,\n subnetTypeMap: {},\n };\n }\n\n public constructNewListenerTemplate(): IOracleListener {\n return {\n name: 'HTTP_80',\n port: 80,\n protocol: 'HTTP',\n defaultBackendSetName: undefined,\n isSsl: false,\n };\n }\n\n public constructNewBackendSetTemplate(name: string): IOracleBackEndSet {\n return {\n name: name,\n policy: LoadBalancingPolicy.ROUND_ROBIN,\n healthChecker: { protocol: 'HTTP', port: 80, urlPath: '/' },\n backends: [],\n isNew: true,\n };\n }\n\n public constructNewSSLConfiguration(): IOracleListenerSSLConfiguration {\n return {\n certificateName: '',\n verifyDepth: 0,\n verifyPeerCertificates: false,\n };\n }\n\n public constructNewCertificateTemplate(name: string): IOracleListenerCertificate {\n return {\n certificateName: name,\n publicCertificate: undefined,\n caCertificate: undefined,\n privateKey: undefined,\n passphrase: undefined,\n isNew: true,\n };\n }\n}\n\nexport const ORACLE_LOAD_BALANCER_TRANSFORMER = 'spinnaker.oracle.loadBalancer.transformer';\nmodule(ORACLE_LOAD_BALANCER_TRANSFORMER, []).service('oracleLoadBalancerTransformer', OracleLoadBalancerTransformer);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport { cloneDeep, trimEnd } from 'lodash';\n\nimport type { Application, IAccountDetails, ILoadBalancer, INetwork, IRegion, ISubnet } from '@spinnaker/core';\nimport {\n AccountService,\n LoadBalancerWriter,\n NameUtils,\n NetworkReader,\n SubnetReader,\n TaskMonitor,\n} from '@spinnaker/core';\nimport type {\n IOracleBackEndSet,\n IOracleListener,\n IOracleListenerCertificate,\n IOracleLoadBalancer,\n IOracleSubnet,\n} from '../../domain/IOracleLoadBalancer';\nimport { LoadBalancingPolicy } from '../../domain/IOracleLoadBalancer';\n\nimport type { OracleLoadBalancerTransformer } from '../loadBalancer.transformer';\nimport { ORACLE_LOAD_BALANCER_TRANSFORMER } from '../loadBalancer.transformer';\n\nexport class OracleLoadBalancerController implements IController {\n public oracle = 'oracle';\n public shapes: string[] = ['100Mbps', '400Mbps', '8000Mbps']; // TODO desagar use listShapes to get this from clouddriver later\n public loadBalancingPolicies: string[] = Object.keys(LoadBalancingPolicy).map((k) => (LoadBalancingPolicy as any)[k]);\n public pages: { [key: string]: any } = {\n properties: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n backendSets: require('./backendSets.html'),\n certificates: require('./certificates.html'),\n };\n\n public state: { [key: string]: boolean } = {\n accountsLoaded: false,\n submitting: false,\n };\n\n public allVnets: INetwork[];\n public allSubnets: IOracleSubnet[];\n public filteredVnets: INetwork[];\n public filteredSubnets: ISubnet[];\n public filteredSubnetsByType: ISubnet[];\n public selectedVnet: INetwork;\n public selectedSubnets: IOracleSubnet[];\n public numSubnetsAllowed = 1;\n public listeners: IOracleListener[] = [];\n public backendSets: IOracleBackEndSet[] = [];\n public certificates: IOracleListenerCertificate[] = [];\n\n public static $inject = [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'oracleLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n ];\n constructor(\n private $scope: ng.IScope,\n private $uibModalInstance: IModalServiceInstance,\n private $state: StateService,\n private oracleLoadBalancerTransformer: OracleLoadBalancerTransformer,\n private application: Application,\n private loadBalancer: IOracleLoadBalancer,\n private isNew: boolean,\n ) {\n this.initializeController();\n }\n\n public onApplicationRefresh() {\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 newStateParams = {\n name: this.loadBalancer.name,\n accountId: this.loadBalancer.account,\n region: this.loadBalancer.region,\n provider: 'oracle',\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 public onTaskComplete() {\n this.application.loadBalancers.refresh();\n this.application.loadBalancers.onNextRefresh(this.$scope, this.onApplicationRefresh);\n }\n\n public initializeCreateMode() {\n AccountService.listAccounts(this.oracle).then((accounts: IAccountDetails[]) => {\n this.$scope.accounts = accounts; // TODO desagar does this need to be in $scope?\n this.state.accountsLoaded = true;\n this.$scope.state = this.state;\n this.accountUpdated();\n });\n this.loadVnets();\n this.loadSubnets();\n }\n\n private initControllerFromLoadBalancerCmd() {\n this.numSubnetsAllowed = this.calcNumSubnetsAllowed();\n if (this.$scope.loadBalancerCmd.listeners) {\n Object.keys(this.$scope.loadBalancerCmd.listeners).forEach((lis) => {\n this.listeners.push(this.$scope.loadBalancerCmd.listeners[lis]);\n });\n }\n if (this.$scope.loadBalancerCmd.backendSets) {\n Object.keys(this.$scope.loadBalancerCmd.backendSets).forEach((b) => {\n this.backendSets.push(this.$scope.loadBalancerCmd.backendSets[b]);\n });\n }\n if (this.$scope.loadBalancerCmd.certificates) {\n Object.keys(this.$scope.loadBalancerCmd.certificates).forEach((b) => {\n this.certificates.push(this.$scope.loadBalancerCmd.certificates[b]);\n });\n }\n }\n\n public initializeController() {\n if (this.loadBalancer) {\n this.$scope.loadBalancerCmd = this.oracleLoadBalancerTransformer.convertLoadBalancerForEditing(this.loadBalancer);\n this.initControllerFromLoadBalancerCmd();\n if (this.isNew) {\n const nameParts = NameUtils.parseLoadBalancerName(this.loadBalancer.name);\n this.$scope.loadBalancerCmd.stack = nameParts.stack;\n this.$scope.loadBalancerCmd.detail = nameParts.freeFormDetails;\n delete this.$scope.loadBalancerCmd.name;\n }\n } else {\n this.$scope.loadBalancerCmd = this.oracleLoadBalancerTransformer.constructNewLoadBalancerTemplate(\n this.application,\n );\n }\n this.$scope.prevBackendSetNames = [];\n this.$scope.prevCertNames = [];\n if (this.isNew) {\n this.updateName();\n this.updateLoadBalancerNames();\n this.initializeCreateMode();\n }\n this.$scope.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: this.onTaskComplete,\n });\n }\n\n public updateLoadBalancerNames() {\n const account = this.$scope.loadBalancerCmd.credentials;\n const region = this.$scope.loadBalancerCmd.region;\n\n const accountLoadBalancerNamesByRegion: { [key: string]: string[] } = {};\n this.application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n const loadBalancers: ILoadBalancer[] = this.application.loadBalancers.data;\n loadBalancers.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancerNamesByRegion[loadBalancer.region] =\n accountLoadBalancerNamesByRegion[loadBalancer.region] || [];\n accountLoadBalancerNamesByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n this.$scope.existingLoadBalancerNames = accountLoadBalancerNamesByRegion[region] || [];\n });\n }\n\n public validateBeforeSubmit() {\n return this.propertiesValid() && this.listenersValid();\n }\n\n /**\n * Used to prevent form submission if listeners are invalid\n * Currently it calls the two validations applicable to listeners.\n * @returns {boolean}\n */\n public listenersValid() {\n return this.listenersUniqueProtocolPort() && this.listenersBackendSetsExist() && this.listenersCertificatesExist();\n }\n\n /**\n * Used to prevent form submission if the properties section is invalid\n * Current the only validation is for subnet count.\n */\n public propertiesValid() {\n return this.selectedSubnets && this.selectedSubnets.length === this.calcNumSubnetsAllowed();\n }\n\n public listenersUniqueProtocolPort() {\n // validate that listeners have unique protocol/port combination\n const countsMap: { [key: string]: number } = {};\n this.listeners.reduce((counts, listener) => {\n const protocolPort = listener.protocol + '_' + listener.port;\n counts[protocolPort] = counts[protocolPort] ? counts[protocolPort] + 1 : 1;\n return counts;\n }, countsMap);\n // There should be no protocol/port combo in the countsMap with a count > 1\n return (\n Object.keys(countsMap).filter((key) => {\n return countsMap[key] > 1;\n }).length === 0\n );\n }\n\n public listenersBackendSetsExist() {\n // validate that the listeners' selected backend sets must exist. This is needed because Angular\n // does not clear the selected backendSet from the drop down if the backend set is deleted.\n const listenersWithNonExistentBackendSet: IOracleListener[] = this.listeners.filter(\n (listener) => !this.backendSets.find((backendSet) => backendSet.name === listener.defaultBackendSetName),\n );\n return listenersWithNonExistentBackendSet.length === 0;\n }\n\n public listenersCertificatesExist() {\n // validate that the listeners' selected certificate names exist. This is needed because Angular\n // does not clear the selected certificate from the drop down if the certificate is deleted.\n const listenersWithNonExistentCertificate: IOracleListener[] = this.listeners.filter(\n (listener) =>\n listener.sslConfiguration &&\n !this.certificates.find((cert) => cert.certificateName === listener.sslConfiguration.certificateName),\n );\n return listenersWithNonExistentCertificate.length === 0;\n }\n\n public updateName() {\n this.$scope.loadBalancerCmd.name = this.getName();\n }\n\n public getName() {\n const lb = this.$scope.loadBalancerCmd;\n const lbName = [this.application.name, lb.stack || '', lb.detail || ''].join('-');\n return trimEnd(lbName, '-');\n }\n\n public accountUpdated() {\n this.loadRegionsForAccount();\n }\n\n public regionUpdated() {\n this.updateLoadBalancerNames();\n this.updateVnets();\n }\n\n public loadRegionsForAccount() {\n AccountService.getRegionsForAccount(this.$scope.loadBalancerCmd.credentials).then((regions: IRegion[]) => {\n this.$scope.regions = regions; // TODO desagar does this need to be in $scope?\n if (regions.length === 1) {\n this.$scope.loadBalancerCmd.region = regions[0].name;\n this.regionUpdated();\n }\n });\n }\n\n public loadVnets() {\n NetworkReader.listNetworksByProvider(this.oracle).then((vnets: INetwork[]) => {\n this.allVnets = vnets || [];\n if (this.$scope.loadBalancerCmd.region) {\n this.updateVnets();\n }\n });\n }\n\n public loadSubnets() {\n SubnetReader.listSubnetsByProvider(this.oracle).then((subnets: IOracleSubnet[]) => {\n this.allSubnets = subnets || [];\n });\n }\n\n public updateVnets() {\n const account = this.$scope.loadBalancerCmd.credentials;\n const region = this.$scope.loadBalancerCmd.region;\n this.filteredVnets = this.allVnets.filter((vnet: INetwork) => {\n return vnet.account === account && vnet.region === region;\n });\n }\n\n public updateSubnets(network: INetwork) {\n this.selectedSubnets = [];\n this.$scope.loadBalancerCmd.subnetIds = [];\n this.filteredSubnets = this.allSubnets.filter((subnet: IOracleSubnet) => {\n return subnet.vcnId === network.id;\n });\n this.filteredSubnetsByType = cloneDeep(this.filteredSubnets);\n }\n\n public selectedVnetChanged(network: INetwork) {\n this.selectedVnet = network;\n this.$scope.loadBalancerCmd.vpcId = network.id;\n this.updateSubnets(network);\n }\n\n public selectedSubnetsChanged(selectedSubnet: IOracleSubnet) {\n if (selectedSubnet.availabilityDomain) {\n this.filteredSubnetsByType = this.filteredSubnets.filter((subnet: IOracleSubnet) => {\n return !!subnet.availabilityDomain;\n });\n } else {\n this.filteredSubnetsByType = [];\n }\n }\n\n public selectedSubnetRemoved() {\n if (this.selectedSubnets.length === 0) {\n this.filteredSubnetsByType = cloneDeep(this.filteredSubnets);\n }\n if (this.selectedSubnets.length === 1 && this.selectedSubnets[0].availabilityDomain) {\n this.filteredSubnetsByType = this.filteredSubnets.filter((subnet: IOracleSubnet) => {\n return !!subnet.availabilityDomain;\n });\n }\n }\n\n public isPrivateChanged() {\n this.numSubnetsAllowed = this.calcNumSubnetsAllowed();\n }\n\n public listenerIsSslChanged(listener: IOracleListener) {\n if (listener.isSsl) {\n listener.sslConfiguration = this.oracleLoadBalancerTransformer.constructNewSSLConfiguration();\n } else {\n listener.sslConfiguration = undefined;\n }\n }\n\n public calcNumSubnetsAllowed() {\n if (this.$scope.loadBalancerCmd.isPrivate) {\n return 1;\n }\n\n if (this.selectedSubnets && this.selectedSubnets.length === 1 && !this.selectedSubnets[0].availabilityDomain) {\n return 1;\n }\n\n return 2;\n }\n\n public getSubnetLimit() {}\n\n public removeListener(idx: number) {\n this.listeners.splice(idx, 1);\n }\n\n public addListener() {\n this.listeners.push(this.oracleLoadBalancerTransformer.constructNewListenerTemplate());\n }\n\n public removeBackendSet(idx: number) {\n const backendSet = this.backendSets[idx];\n this.backendSets.splice(idx, 1);\n this.$scope.prevBackendSetNames.splice(idx, 1);\n // Also clear the defaultBackendSetName field of any listeners who are using this backendSet\n this.listeners.forEach((lis) => {\n if (lis.defaultBackendSetName === backendSet.name) {\n lis.defaultBackendSetName = undefined;\n }\n });\n }\n\n public isBackendSetRemovable(idx: number): boolean {\n const backendSet = this.backendSets[idx];\n if (backendSet && backendSet.backends && backendSet.backends.length > 0) {\n return false;\n }\n let hasListener = false;\n this.listeners.forEach((lis) => {\n if (lis.defaultBackendSetName === backendSet.name) {\n hasListener = true;\n }\n });\n return !hasListener;\n }\n\n public addBackendSet() {\n const nameSuffix: number = this.backendSets.length + 1;\n const name: string = 'backendSet' + nameSuffix;\n this.$scope.prevBackendSetNames.push(name);\n this.backendSets.push(this.oracleLoadBalancerTransformer.constructNewBackendSetTemplate(name));\n }\n\n public backendSetNameChanged(idx: number) {\n const prevName = this.$scope.prevBackendSetNames && this.$scope.prevBackendSetNames[idx];\n if (prevName && prevName !== this.backendSets[idx].name) {\n this.listeners\n .filter((lis) => lis.defaultBackendSetName === prevName)\n .forEach((lis) => {\n lis.defaultBackendSetName = this.backendSets[idx].name;\n });\n }\n }\n\n public isCertRemovable(idx: number): boolean {\n const cert = this.certificates[idx];\n let hasListener = false;\n this.listeners.forEach((lis) => {\n if (lis.isSsl && lis.sslConfiguration && lis.sslConfiguration.certificateName === cert.certificateName) {\n hasListener = true;\n }\n });\n return !hasListener;\n }\n\n public removeCert(idx: number) {\n const cert = this.certificates[idx];\n this.certificates.splice(idx, 1);\n this.$scope.prevCertNames.splice(idx, 1);\n // Also clear the certificateName field of any listeners who are using this certificate\n this.listeners.forEach((lis) => {\n if (lis.sslConfiguration && lis.sslConfiguration.certificateName === cert.certificateName) {\n lis.sslConfiguration.certificateName = undefined;\n }\n });\n }\n\n public addCert() {\n const nameSuffix: number = this.certificates.length + 1;\n const name: string = 'certificate' + nameSuffix;\n this.$scope.prevCertNames.push(name);\n this.certificates.push(this.oracleLoadBalancerTransformer.constructNewCertificateTemplate(name));\n }\n\n public certNameChanged(idx: number) {\n const prevName = this.$scope.prevCertNames && this.$scope.prevCertNames[idx];\n if (prevName && prevName !== this.certificates[idx].certificateName) {\n this.listeners\n .filter((lis) => lis.sslConfiguration && lis.sslConfiguration.certificateName === prevName)\n .forEach((lis) => {\n lis.sslConfiguration.certificateName = this.certificates[idx].certificateName;\n });\n }\n }\n\n public submit() {\n const descriptor = this.isNew ? 'Create' : 'Update';\n\n this.$scope.taskMonitor.submit(() => {\n const params = {\n cloudProvider: 'oracle',\n application: this.application.name,\n clusterName: this.$scope.loadBalancerCmd.clusterName,\n resourceGroupName: this.$scope.loadBalancerCmd.clusterName,\n loadBalancerName: this.$scope.loadBalancerCmd.name,\n loadBalancerId: null as string,\n };\n if (this.loadBalancer && this.loadBalancer.id) {\n params.loadBalancerId = this.loadBalancer.id;\n }\n\n if (this.selectedVnet) {\n this.$scope.loadBalancerCmd.vpcId = this.selectedVnet.id;\n }\n\n if (this.selectedSubnets && this.selectedSubnets.length > 0) {\n this.$scope.loadBalancerCmd.subnetIds = this.selectedSubnets.map((subnet: IOracleSubnet) => {\n return subnet.id;\n });\n\n for (const subnet of this.selectedSubnets) {\n if (!this.$scope.loadBalancerCmd.subnetTypeMap) {\n this.$scope.loadBalancerCmd.subnetTypeMap = {\n [subnet.id]: !subnet.availabilityDomain ? 'Regional' : 'AD',\n };\n } else {\n this.$scope.loadBalancerCmd.subnetTypeMap[subnet.id] = !subnet.availabilityDomain ? 'Regional' : 'AD';\n }\n }\n }\n\n if (this.backendSets) {\n this.$scope.loadBalancerCmd.backendSets = this.backendSets.reduce(\n (backendSetsMap: { [name: string]: IOracleBackEndSet }, backendSet: IOracleBackEndSet) => {\n backendSetsMap[backendSet.name] = backendSet;\n return backendSetsMap;\n },\n {},\n );\n }\n\n if (this.listeners) {\n this.$scope.loadBalancerCmd.listeners = this.listeners.reduce(\n (listenersMap: { [name: string]: IOracleListener }, listener: IOracleListener) => {\n listener.name = listener.protocol + '_' + listener.port;\n listenersMap[listener.name] = listener;\n return listenersMap;\n },\n {},\n );\n }\n\n if (this.certificates) {\n this.$scope.loadBalancerCmd.certificates = this.certificates.reduce(\n (certMap: { [name: string]: IOracleListenerCertificate }, cert: IOracleListenerCertificate) => {\n certMap[cert.certificateName] = cert;\n if (!cert.isNew) {\n // existing certificate sends only the name\n certMap[cert.certificateName].publicCertificate = null;\n }\n return certMap;\n },\n {},\n );\n }\n\n this.$scope.loadBalancerCmd.type = 'upsertLoadBalancer';\n if (!this.$scope.loadBalancerCmd.vnet && !this.$scope.loadBalancerCmd.subnetType) {\n this.$scope.loadBalancerCmd.securityGroups = null;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer(this.$scope.loadBalancerCmd, this.application, descriptor, params);\n });\n }\n\n public cancel() {\n this.$uibModalInstance.dismiss();\n }\n}\n\nexport const ORACLE_LOAD_BALANCER_CREATE_CONTROLLER = 'spinnaker.oracle.loadBalancer.create.controller';\nmodule(ORACLE_LOAD_BALANCER_CREATE_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP as any,\n UIROUTER_ANGULARJS,\n ORACLE_LOAD_BALANCER_TRANSFORMER,\n]).controller('oracleCreateLoadBalancerCtrl', OracleLoadBalancerController);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IController } from 'angular';\nimport angular, { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport { sortBy } from 'lodash';\n\nimport type { Application, ISecurityGroup, LoadBalancerReader, SecurityGroupReader } from '@spinnaker/core';\nimport { ConfirmationModalService, FirewallLabels, LoadBalancerWriter } from '@spinnaker/core';\n\nimport { OracleLoadBalancerController } from '../configure/createLoadBalancer.controller';\nimport type { ILoadBalancerDetails, IOracleLoadBalancer } from '../../domain/IOracleLoadBalancer';\n\nexport class OracleLoadBalancerDetailController implements IController {\n public static $inject = [\n '$scope',\n '$state',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'securityGroupReader',\n 'loadBalancerReader',\n '$q',\n ];\n constructor(\n private $scope: ng.IScope,\n private $state: StateService,\n private $uibModal: IModalService,\n private loadBalancer: ILoadBalancerDetails,\n private app: Application,\n private securityGroupReader: SecurityGroupReader,\n private loadBalancerReader: LoadBalancerReader,\n private $q: angular.IQService,\n ) {\n $scope.state = {\n loading: true,\n };\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n const extractLoadBalancer = (): PromiseLike<any> => {\n $scope.loadBalancer = app.loadBalancers.data.filter((test: IOracleLoadBalancer) => {\n return (\n test.name === loadBalancer.name &&\n test.region === loadBalancer.region &&\n test.account === loadBalancer.accountId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n const detailsLoader = this.loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.cloudProvider,\n loadBalancer.accountId,\n loadBalancer.region,\n loadBalancer.name,\n );\n\n return detailsLoader.then((details) => {\n // ILoadBalancerSourceData\n $scope.state.loading = false;\n const securityGroups: ISecurityGroup[] = [];\n\n const filtered = details.filter((test: IOracleLoadBalancer) => {\n return test.name === loadBalancer.name;\n });\n\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n if ($scope.loadBalancer.elb.securityGroups) {\n $scope.loadBalancer.elb.securityGroups.forEach((securityGroupId: string) => {\n const match = this.securityGroupReader.getApplicationSecurityGroup(\n this.app,\n loadBalancer.accountId,\n loadBalancer.region,\n securityGroupId,\n );\n if (match) {\n securityGroups.push(match);\n }\n });\n this.$scope.securityGroups = sortBy(securityGroups, 'name');\n }\n }\n });\n }\n if (!this.$scope.loadBalancer) {\n this.$state.go('^');\n }\n\n return this.$q.when(null);\n };\n\n this.app\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 (!this.$scope.$$destroyed) {\n this.app.onRefresh($scope, extractLoadBalancer);\n }\n });\n }\n\n public editLoadBalancer() {\n this.$uibModal.open({\n templateUrl: require('../configure/editLoadBalancer.html'),\n controller: OracleLoadBalancerController,\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n application: () => {\n return this.app;\n },\n loadBalancer: () => {\n return angular.copy(this.$scope.loadBalancer);\n },\n isNew: () => {\n return false;\n },\n },\n });\n }\n\n public deleteLoadBalancer() {\n if (this.$scope.loadBalancer.instances && this.$scope.loadBalancer.instances.length) {\n return;\n }\n\n const taskMonitor = {\n application: this.app,\n title: 'Deleting ' + this.loadBalancer.name,\n };\n\n const command = {\n cloudProvider: 'oracle',\n loadBalancerName: this.$scope.loadBalancer.name,\n credentials: this.$scope.loadBalancer.account,\n region: this.loadBalancer.region,\n application: this.app.name,\n loadBalancerId: this.$scope.loadBalancer.id,\n };\n\n const submitMethod = () => LoadBalancerWriter.deleteLoadBalancer(command, this.app);\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + this.loadBalancer.name + '?',\n buttonText: 'Delete ' + this.loadBalancer.name,\n account: this.loadBalancer.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n }\n}\n\nexport const ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER = 'spinnaker.oracle.loadBalancerDetail.controller';\nmodule(ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP as any]).controller(\n 'oracleLoadBalancerDetailCtrl',\n OracleLoadBalancerDetailController,\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { EXECUTION_DETAILS_SECTION_SERVICE, SETTINGS } from '@spinnaker/core';\n\nexport const ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.oracle.pipeline.stage.bake.executionDetails.controller';\nexport const name = ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [\n EXECUTION_DETAILS_SECTION_SERVICE,\n UIROUTER_ANGULARJS,\n]).controller('oracleBakeExecutionDetailsCtrl', [\n '$log',\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($log, $scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'oracle';\n $scope.roscoMode = SETTINGS.feature.roscoMode;\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","'use strict';\n\nimport { module } from 'angular';\nimport { size } from 'lodash';\n\nimport {\n AccountService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n PipelineTemplates,\n Registry,\n} from '@spinnaker/core';\n\nimport { ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\n\nexport const ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE = 'spinnaker.oracle.pipeline.stage.bakeStage';\nexport const name = ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE, [ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'oracle',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'accountName' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'baseOs' },\n { type: 'requiredField', fieldName: 'upgrade' },\n { type: 'requiredField', fieldName: 'cloudProviderType' },\n { type: 'requiredField', fieldName: 'amiName', fieldLabel: 'Image Name' },\n ],\n restartable: true,\n });\n })\n .controller('oracleBakeStageCtrl', [\n '$scope',\n '$q',\n '$uibModal',\n function ($scope, $q, $uibModal) {\n const provider = 'oracle';\n\n if (!$scope.stage.cloudProvider) {\n $scope.stage.cloudProvider = provider;\n }\n\n if (!$scope.stage) {\n $scope.stage = {};\n }\n\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n function initialize() {\n $scope.viewState.providerSelected = true;\n\n $q.all([BakeryReader.getBaseOsOptions(provider), AccountService.listAccounts(provider)]).then(\n ([baseOsOptions, accounts]) => {\n if (baseOsOptions.baseImages.length > 0) {\n $scope.baseOsOptions = baseOsOptions;\n if (!$scope.stage.baseOs) {\n $scope.stage.baseOs = $scope.baseOsOptions.baseImages[0].id;\n }\n }\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n if (!$scope.stage.upgrade) {\n $scope.stage.upgrade = true;\n }\n\n $scope.accounts = accounts;\n\n if ($scope.stage.accountName) {\n AccountService.getRegionsForAccount($scope.stage.accountName).then(function (regions) {\n if (Array.isArray(regions) && regions.length != 0) {\n // there is exactly one region per account\n $scope.stage.region = regions[0].name;\n }\n });\n }\n\n $scope.viewState.loading = false;\n },\n );\n }\n\n this.getBaseOsDescription = function (baseOsOption) {\n return baseOsOption.id + (baseOsOption.shortDescription ? ' (' + baseOsOption.shortDescription + ')' : '');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.stage.accountName).then(function (regions) {\n if (Array.isArray(regions) && regions.length != 0) {\n // there is exactly one region per account\n $scope.stage.region = regions[0].name;\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.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n $scope.$watch('stage.accountName', $scope.accountUpdated);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE = 'spinnaker.oracle.pipeline.stage.destroyAsgStage';\nexport const name = ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'oracle',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\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('oracleDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n const provider = 'oracle';\n\n $scope.targets = StageConstants.TARGET_LIST;\n stage.regions = stage.regions || [];\n stage.cloudProvider = provider;\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n init();\n\n function init() {\n AccountService.listAccounts(provider).then((accounts) => {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n if (!stage.credentials && $scope.application.defaultCredentials.oracle) {\n stage.credentials = $scope.application.defaultCredentials.oracle;\n }\n\n if (!stage.regions.length && $scope.application.defaultRegions.oracle) {\n stage.regions.push($scope.application.defaultRegions.oracle);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE = 'spinnaker.oracle.pipeline.stage.disableAsgStage';\nexport const name = ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n cloudProvider: 'oracle',\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('oracleDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n const provider = 'oracle';\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts(provider).then((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 = provider;\n\n if (!stage.credentials && $scope.application.defaultCredentials.oracle) {\n stage.credentials = $scope.application.defaultCredentials.oracle;\n }\n\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.oracle);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE = 'spinnaker.oracle.pipeline.stage.findAmiStage';\nexport const name = ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE; // for backwards compatibility\nangular\n .module(ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImage',\n cloudProvider: 'oracle',\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('oracleFindAmiStageCtrl', [\n '$scope',\n ($scope) => {\n const provider = 'oracle';\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts(provider).then((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 = provider;\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.oracle) {\n stage.credentials = $scope.application.defaultCredentials.oracle;\n }\n\n if (!stage.regions.length && $scope.application.defaultRegions.oracle) {\n stage.regions.push($scope.application.defaultRegions.oracle);\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 ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE =\n 'spinnaker.oracle.pipeline.stage.findImageFromTagsStage';\nexport const name = ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'oracle',\n templateUrl: require('./findImageFromTagsStage.html'),\n executionDetailsUrl: require('./findImageFromTagsExecutionDetails.html'),\n executionConfigSections: ['findImageConfig', 'taskStatus'],\n validators: [\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'packageName' },\n ],\n });\n })\n .controller('oracleFindImageFromTagsStageCtrl', [\n '$scope',\n function ($scope) {\n $scope.stage.packageName = $scope.stage.packageName || '*';\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.regions = $scope.stage.regions || [];\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'oracle';\n\n BakeryReader.getRegions('oracle').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 ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE = 'spinnaker.oracle.pipeline.stage.resizeAsgStage';\nexport const name = ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n cloudProvider: 'oracle',\n templateUrl: require('./resizeAsgStage.html'),\n executionStepLabelUrl: require('./resizeAsgStepLabel.html'),\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('oracleResizeAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const provider = 'oracle';\n\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts(provider).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 { label: 'Scale Up', val: 'scale_up' },\n { label: 'Scale Down', val: 'scale_down' },\n { label: 'Scale to Cluster Size', val: 'scale_to_cluster' },\n { label: 'Scale to Exact Size', val: 'scale_exact' },\n ];\n\n $scope.resizeTypes = [\n { label: 'Percentage', val: 'pct' },\n { label: 'Incremental', val: 'incr' },\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\n if (!stage.action && stage.resizeType === 'exact') {\n stage.action = 'scale_exact';\n }\n\n stage.cloudProvider = provider;\n stage.cloudProviderType = provider;\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\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 ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE =\n 'spinnaker.oracle.pipeline.stage.scaleDownClusterStage';\nexport const name = ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'oracle',\n templateUrl: require('./scaleDownClusterStage.html'),\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('oracleScaleDownClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n const provider = 'oracle';\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts(provider).then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = provider;\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\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 if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n\n this.pluralize = function (str, val) {\n return val === 1 ? str : str + 's';\n };\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 ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE =\n 'spinnaker.core.pipeline.stage.oracle.shrinkClusterStage';\nexport const name = ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'oracle',\n templateUrl: require('./shrinkClusterStage.html'),\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('oracleShrinkClusterStageCtrl', [\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('oracle').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n\n stage.cloudProvider = 'oracle';\n\n if (!stage.credentials && $scope.application.defaultCredentials.oracle) {\n stage.credentials = $scope.application.defaultCredentials.oracle;\n }\n\n if (!stage.regions.length && $scope.application.defaultRegions.oracle) {\n stage.regions.push($scope.application.defaultRegions.oracle);\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 return val === 1 ? str : str + 's';\n };\n\n if (stage.retainLargerOverNewer === undefined) {\n stage.retainLargerOverNewer = 'false';\n }\n\n stage.retainLargerOverNewer = stage.retainLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { FirewallLabels } from '@spinnaker/core';\n\nexport const ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER =\n 'spinnaker.oracle.securityGroup.create.controller';\nexport const name = ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER, []).controller('oracleCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n function ($scope, $uibModalInstance) {\n this.cancel = () => {\n $uibModalInstance.dismiss();\n };\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ORACLE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.oracle.securityGroup.reader';\nexport const name = ORACLE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(ORACLE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('oracleSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n return indexedSecurityGroups[container.account][container.region][securityGroupId];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { NetworkReader } from '@spinnaker/core';\n\nexport const ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.oracle.securityGroup.transformer';\nexport const name = ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('oracleSecurityGroupTransformer', function () {\n const provider = 'oracle';\n\n function normalizeSecurityGroup(securityGroup) {\n return NetworkReader.listNetworksByProvider(provider).then(_.partial(addVcnNameToSecurityGroup, securityGroup));\n }\n\n function addVcnNameToSecurityGroup(securityGroup, vcns) {\n const matches = vcns.find((vcn) => vcn.id === securityGroup.network);\n securityGroup.vpcName = matches.length ? matches[0].name : '';\n }\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, NetworkReader, SECURITY_GROUP_READER, SubnetReader } from '@spinnaker/core';\nimport { OracleProviderSettings } from '../../oracle.settings';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.oracle.serverGroup.configure.configuration.service';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [SECURITY_GROUP_READER]).factory(\n 'oracleServerGroupConfigurationService',\n [\n '$q',\n 'oracleImageReader',\n 'securityGroupReader',\n function ($q, oracleImageReader, securityGroupReader) {\n const oracle = 'oracle';\n\n const getShapes = (image) => {\n if (!image || !image.compatibleShapes) {\n return [];\n }\n return image.compatibleShapes.map((shape) => {\n return { name: shape };\n });\n };\n\n const loadAndSelectRegions = (command, backingData) => {\n if (command.account) {\n const selectedAccountDetails = backingData.credentialsKeyedByAccount[command.account];\n if (!selectedAccountDetails) {\n return;\n }\n backingData.filtered.regions = _.map(selectedAccountDetails.regions, (region) => {\n return { name: region.name };\n });\n if (selectedAccountDetails) {\n command.region = selectedAccountDetails.region;\n }\n }\n };\n\n const loadAvailabilityDomains = (command) => {\n if (command.account && command.region) {\n AccountService.getAvailabilityZonesForAccountAndRegion(oracle, command.account, command.region).then(\n (availDoms) => {\n if (availDoms) {\n command.backingData.filtered.availabilityDomains = availDoms.map((av) => {\n return { name: av };\n });\n } else {\n command.backingData.filtered.availabilityDomains = [];\n command.availabilityDomain = null;\n }\n },\n );\n }\n };\n\n const loadLoadBalancers = (command) => {\n if (command.account && command.region) {\n command.backingData.filtered.loadBalancers = command.backingData.loadBalancers.filter(function (lb) {\n return lb.region === command.region && lb.account === command.account;\n });\n }\n };\n\n function configureCommand(application, command) {\n const defaults = command || {};\n const defaultCredentials =\n defaults.account || application.defaultCredentials.oracle || OracleProviderSettings.defaults.account;\n const defaultRegion =\n defaults.region || application.defaultRegions.oracle || OracleProviderSettings.defaults.region;\n\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount(oracle),\n NetworkReader.listNetworksByProvider(oracle),\n SubnetReader.listSubnetsByProvider(oracle),\n securityGroupReader.getAllSecurityGroups(),\n loadImages(),\n AccountService.getAvailabilityZonesForAccountAndRegion(oracle, defaultCredentials, defaultRegion),\n ])\n .then(function ([credentialsKeyedByAccount, networks, subnets, securityGroups, images, availDomains]) {\n const backingData = {\n credentialsKeyedByAccount,\n networks,\n subnets,\n securityGroups,\n images,\n availDomains,\n };\n\n backingData.accounts = _.keys(backingData.credentialsKeyedByAccount);\n backingData.filtered = {};\n loadAndSelectRegions(command, backingData);\n backingData.filtered.availabilityDomains = _.map(backingData.availDomains, function (zone) {\n return { name: zone };\n });\n\n backingData.filterSubnets = function () {\n if (command.vpcId && command.availabilityDomain) {\n return _.filter(backingData.subnets, {\n vcnId: command.vpcId,\n availabilityDomain: command.availabilityDomain,\n });\n }\n return backingData.subnets;\n };\n\n backingData.loadBalancers = application.loadBalancers.data;\n\n backingData.accountOnChange = function () {\n loadAndSelectRegions(command, command.backingData);\n loadAvailabilityDomains(command);\n loadLoadBalancers(command);\n };\n\n backingData.regionOnChange = function () {\n loadAvailabilityDomains(command);\n loadLoadBalancers(command);\n };\n\n backingData.availabilityDomainOnChange = function () {\n command.subnetId = null;\n backingData.seclists = null;\n };\n\n backingData.vpcOnChange = function () {\n command.subnetId = null;\n backingData.seclists = null;\n };\n\n backingData.subnetOnChange = function () {\n const subnet = _.find(backingData.subnets, { id: command.subnetId });\n const mySecGroups = backingData.securityGroups[command.account][oracle][command.region];\n const secLists = [];\n _.forEach(subnet.securityListIds, function (sid) {\n const sgRef = _.find(mySecGroups, { id: sid });\n securityGroupReader\n .getSecurityGroupDetails(\n command.application,\n command.account,\n oracle,\n command.region,\n command.vpcId,\n sgRef.name,\n )\n .then(function (sgd) {\n secLists.push(sgd);\n backingData.seclists = secLists;\n });\n });\n };\n\n backingData.findBackendSetsByLoadBalancerId = (loadBalancerId) => {\n const lb = backingData.filtered.loadBalancers.find((lb) => lb.id === loadBalancerId);\n if (lb && lb.backendSets) {\n //reduce the backendSets object to an array. The object is keyed by the backendSet name\n const bsetArray = [];\n Object.keys(lb.backendSets).reduce((arr, bsetName) => {\n const bset = lb.backendSets[bsetName];\n bset['name'] = bsetName;\n arr.push(bset);\n return arr;\n }, bsetArray);\n return bsetArray;\n } else {\n return [];\n }\n };\n\n backingData.findLoadBalListenersByBackendSetName = (loadBalancerId, backendSetName) => {\n const lb = backingData.filtered.loadBalancers.find((lb) => lb.id === loadBalancerId);\n if (lb && lb.listeners) {\n return Object.keys(lb.listeners)\n .filter((lisName) => lb.listeners[lisName].defaultBackendSetName === backendSetName)\n .map((lisName) => lb.listeners[lisName]);\n } else {\n return [];\n }\n };\n\n backingData.loadBalancerOnChange = () => {\n if (command.loadBalancerId) {\n backingData.filtered.backendSets = backingData.findBackendSetsByLoadBalancerId(command.loadBalancerId);\n } else {\n //no backend set name should be set if no load balancer id is set\n command.backendSetName = undefined;\n backingData.backendSetOnChange();\n backingData.filtered.backendSets = [];\n }\n };\n\n backingData.backendSetOnChange = () => {\n backingData.filtered.listeners =\n command.loadBalancerId && command.backendSetName\n ? backingData.findLoadBalListenersByBackendSetName(command.loadBalancerId, command.backendSetName)\n : [];\n };\n\n backingData.filtered.images = backingData.images;\n const shapesMap = {};\n _.forEach(backingData.filtered.images, (image) => {\n shapesMap[image.id] = getShapes(image);\n });\n backingData.filtered.shapes = shapesMap;\n backingData.filtered.allShapes = _.uniqBy(_.flatten(_.values(shapesMap)), 'name');\n command.backingData = backingData;\n if (command.account) {\n loadLoadBalancers(command);\n backingData.loadBalancerOnChange();\n backingData.backendSetOnChange();\n }\n });\n }\n\n function loadImages() {\n return oracleImageReader.findImages({ provider: oracle });\n }\n\n return {\n configureCommand: configureCommand,\n };\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';\n\nimport { IMAGE_READER } from '@spinnaker/core';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER =\n 'spinnaker.oracle.serverGroup.configure.wizard.basicSettings.controller';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n IMAGE_READER,\n ])\n .controller('oracleServerGroupBasicSettingsCtrl', [\n '$scope',\n '$state',\n '$uibModalStack',\n '$controller',\n 'imageReader',\n function ($scope, $state, $uibModalStack, $controller, imageReader) {\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: imageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT =\n 'spinnaker.oracle.serverGroup.configure.wizard.capacity.selector.component';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT; // for backwards compatibility\nangular\n .module(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT, [])\n .component('oracleServerGroupCapacitySelector', {\n templateUrl: require('./capacitySelector.component.html'),\n bindings: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n });\n","import { module } from 'angular';\n\nimport { ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\nimport { ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER } from './wizard/basicSettings/basicSettings.controller';\nimport { ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT } from './wizard/capacity/capacitySelector.component';\n\n('use strict');\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE = 'spinnaker.oracle.serverGroup.configure';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE, [\n ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER,\n ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT,\n ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\n\nimport { OracleProviderSettings } from '../../oracle.settings';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.oracle.serverGroupCommandBuilder.service';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [])\n .factory('oracleServerGroupCommandBuilder', [\n '$q',\n function ($q) {\n const oracle = 'oracle';\n\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultAccount = defaults.account || OracleProviderSettings.defaults.account;\n const defaultRegion = defaults.region || OracleProviderSettings.defaults.region;\n\n const command = {\n account: defaultAccount,\n application: application.name,\n capacity: {\n desired: 1,\n },\n region: defaultRegion,\n selectedProvider: oracle,\n viewState: {\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n },\n };\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n const serverGroupName = NameUtils.parseServerGroupName(serverGroup.name);\n\n const command = {\n account: serverGroup.account,\n application: application.name,\n shape: serverGroup.launchConfig.shape,\n strategy: '',\n stack: serverGroupName.stack,\n vpcId: serverGroup.launchConfig.vpcId,\n subnetId: serverGroup.launchConfig.subnetId,\n region: serverGroup.region,\n availabilityDomain: serverGroup.launchConfig.availabilityDomain,\n sshAuthorizedKeys: serverGroup.launchConfig.sshAuthorizedKeys,\n selectedProvider: oracle,\n capacity: {\n desired: serverGroup.capacity.desired,\n },\n viewState: {\n mode: mode,\n disableStrategySelection: true,\n },\n };\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const commandDefaults = { account: pipelineCluster.account, region: pipelineCluster.region };\n return buildNewServerGroupCommand(application, commandDefaults).then((command) => {\n const viewState = {\n disableImageSelection: true,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n templatingEnabled: true,\n };\n\n const viewOverrides = {\n viewState: viewState,\n };\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n return angular.extend({}, command, pipelineCluster, viewOverrides);\n });\n }\n\n function buildNewServerGroupCommandForPipeline() {\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n },\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { FirewallLabels, ModalWizard, TaskMonitor } from '@spinnaker/core';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER =\n 'spinnaker.oracle.serverGroup.configure.cloneServerGroup';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'oracleCloneServerGroupCtrl',\n [\n '$scope',\n '$uibModalInstance',\n '$q',\n 'application',\n 'serverGroupWriter',\n 'serverGroupCommand',\n 'oracleServerGroupConfigurationService',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n application,\n serverGroupWriter,\n serverGroupCommand,\n oracleServerGroupConfigurationService,\n title,\n ) {\n $scope.title = title;\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n $scope.command = serverGroupCommand;\n $scope.application = application;\n\n $scope.pages = {\n basicSettings: require('./basicSettings/basicSettings.html'),\n instanceType: require('./instanceType/instanceType.html'),\n capacity: require('./capacity/capacity.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n networkSettings: require('./network/networkSettings.html'),\n templateSelection: require('./templateSelection/templateSelection.html'),\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 $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n });\n\n function configureCommand() {\n oracleServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {\n $scope.state.loaded = true;\n });\n }\n\n this.isValid = function () {\n return $scope.command && $scope.form.$valid && ModalWizard.isComplete();\n };\n\n this.showSubmitButton = function () {\n return ModalWizard.allPagesVisited();\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.submit = function () {\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n $scope.taskMonitor.submit(function () {\n return serverGroupWriter.cloneServerGroup($scope.command, application);\n });\n };\n\n configureCommand();\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n },\n ],\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const ORACLE_COMMON_FOOTER_COMPONENT = 'spinnaker.oracle.footer.component';\nexport const name = ORACLE_COMMON_FOOTER_COMPONENT; // for backwards compatibility\nangular.module(ORACLE_COMMON_FOOTER_COMPONENT, []).component('oracleFooter', {\n templateUrl: require('./footer.component.html'),\n bindings: {\n action: '&',\n isValid: '&',\n cancel: '&',\n account: '=?',\n verification: '=?',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { SERVER_GROUP_WRITER } from '@spinnaker/core';\n\nexport const ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT =\n 'spinnaker.oracle.serverGroup.details.resize.capacity.component';\nexport const name = ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT; // for backwards compatibility\nangular\n .module(ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT, [SERVER_GROUP_WRITER])\n .component('oracleResizeCapacity', {\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 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","'use strict';\n\nimport { module } from 'angular';\n\nimport { TaskMonitor } from '@spinnaker/core';\nimport { ORACLE_COMMON_FOOTER_COMPONENT } from '../../../common/footer.component';\n\nimport { ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT } from './resizeCapacity.component';\n\nexport const ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER =\n 'spinnaker.oracle.serverGroup.details.resize.controller';\nexport const name = ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER, [\n ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT,\n ORACLE_COMMON_FOOTER_COMPONENT,\n]).controller('oracleResizeServerGroupCtrl', [\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 = ['Oracle'];\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 { ORACLE_COMMON_FOOTER_COMPONENT } from '../../../common/footer.component';\n\nexport const ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.oracle.serverGroup.details.rollback.controller';\nexport const name = ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [\n SERVER_GROUP_WRITER,\n ORACLE_COMMON_FOOTER_COMPONENT,\n]).controller('oracleRollbackServerGroupCtrl', [\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 = ['Oracle'];\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 { module } from 'angular';\n\nimport {\n ConfirmationModalService,\n NetworkReader,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { ORACLE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER } from './resize/resizeServerGroup.controller';\nimport { ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\n\nexport const ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER =\n 'spinnaker.oracle.serverGroup.details.controller';\nexport const name = ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SERVER_GROUP_WRITER,\n ORACLE_IMAGE_IMAGE_READER,\n ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER,\n ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n]).controller('oracleServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$uibModal',\n 'app',\n 'serverGroup',\n 'serverGroupWriter',\n 'oracleImageReader',\n function ($scope, $state, $uibModal, app, serverGroup, serverGroupWriter, oracleImageReader) {\n const provider = 'oracle';\n\n this.application = app;\n this.serverGroup = serverGroup;\n\n this.state = {\n loading: true,\n };\n\n /////////////////////////////////////////////////////////\n // Fetch data\n /////////////////////////////////////////////////////////\n\n const retrieveServerGroup = () => {\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then((details) => {\n cancelLoader();\n details.account = serverGroup.accountId;\n this.serverGroup = details;\n retrieveNetwork();\n retrieveSubnet();\n retrieveImage();\n });\n };\n\n const retrieveNetwork = () => {\n NetworkReader.listNetworksByProvider(provider).then((networks) => {\n this.serverGroup.network = _.chain(networks)\n .filter({ account: this.serverGroup.account, id: this.serverGroup.launchConfig.vpcId })\n .head()\n .value();\n });\n };\n\n const retrieveSubnet = () => {\n SubnetReader.getSubnetByIdAndProvider(this.serverGroup.launchConfig.subnetId, provider).then((subnet) => {\n this.serverGroup.subnet = subnet;\n });\n };\n\n const retrieveImage = () => {\n oracleImageReader\n .getImage(this.serverGroup.launchConfig.imageId, this.serverGroup.region, this.serverGroup.account)\n .then((image) => {\n if (!image) {\n image = { id: this.serverGroup.launchConfig.imageId, name: this.serverGroup.launchConfig.imageId };\n }\n this.serverGroup.image = image;\n });\n };\n\n ////////////////////////////////////////////////////////////\n // Actions. Triggered by server group details dropdown menu\n ////////////////////////////////////////////////////////////\n\n this.destroyServerGroup = function destroyServerGroup() {\n const serverGroup = this.serverGroup;\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: function () {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return serverGroupWriter.destroyServerGroup(serverGroup, app);\n };\n\n const stateParams = {\n name: serverGroup.name,\n account: serverGroup.account,\n region: serverGroup.region,\n };\n\n ConfirmationModalService.confirm({\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.resizeServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./resize/resizeServerGroup.html'),\n controller: 'oracleResizeServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => {\n return this.serverGroup;\n },\n application: () => {\n return app;\n },\n },\n });\n };\n\n this.rollbackServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./rollback/rollbackServerGroup.html'),\n controller: 'oracleRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => this.serverGroup,\n disabledServerGroups: () => {\n const sgSummary = _.find(app.serverGroups.data, {\n name: this.serverGroup.name,\n account: this.serverGroup.account,\n region: this.serverGroup.region,\n });\n const cluster = _.find(app.clusters, { name: sgSummary.cluster, account: this.serverGroup.account });\n return _.filter(cluster.serverGroups, { isDisabled: true, region: this.serverGroup.region });\n },\n application: () => app,\n },\n });\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: 'Oracle',\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 = ['Oracle'];\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: 'Oracle',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Oracle'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n const cancelLoader = () => {\n this.state.loading = false;\n };\n\n retrieveServerGroup().then(() => {\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport _ from 'lodash';\n\nexport const ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.oracle.serverGroup.transformer';\nexport const name = ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER, []).factory('oracleServerGroupTransformer', [\n '$q',\n function ($q) {\n const PROVIDER = 'oracle';\n\n function normalizeServerGroup(serverGroup) {\n return $q.when(serverGroup);\n }\n\n function convertServerGroupCommandToDeployConfiguration(base) {\n const command = _.defaults({ backingData: [], viewState: [] }, base);\n command.cloudProvider = PROVIDER;\n return command;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup,\n };\n },\n]);\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './helpContents/oracleHelpContents';\nimport { ORACLE_IMAGE_IMAGE_READER } from './image/image.reader';\nimport { ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { ORACLE_LOAD_BALANCER_CREATE_CONTROLLER } from './loadBalancer/configure/createLoadBalancer.controller';\nimport { ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { ORACLE_LOAD_BALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport { ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE } from './pipeline/stages/bake/ociBakeStage';\nimport { ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE } from './pipeline/stages/destroyAsg/destroyAsgStage';\nimport { ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE } from './pipeline/stages/disableAsg/disableAsgStage';\nimport { ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE } from './pipeline/stages/findAmi/findAmiStage';\nimport { ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE } from './pipeline/stages/findImageFromTags/oracleFindImageFromTagsStage';\nimport { ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE } from './pipeline/stages/resizeAsg/resizeAsgStage';\nimport { ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/scaleDownClusterStage';\nimport { ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/shrinkClusterStage';\nimport { ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER } from './securityGroup/configure/createSecurityGroup.controller';\nimport { ORACLE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE } from './serverGroup/configure/serverGroup.configure.module';\nimport { ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER } from './serverGroup/configure/wizard/cloneServerGroup.controller';\nimport { ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER } from './serverGroup/details/serverGroupDetails.controller';\nimport { ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\n\nexport const ORACLE_MODULE = 'spinnaker.oracle';\nmodule(ORACLE_MODULE, [\n // Pipeline\n ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE,\n ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE,\n ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE,\n ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE,\n ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE,\n ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE,\n ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE,\n ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE,\n\n // Load Balancers\n ORACLE_LOAD_BALANCER_TRANSFORMER,\n ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER,\n ORACLE_LOAD_BALANCER_CREATE_CONTROLLER,\n\n // Server Groups\n ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE,\n ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER,\n ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER,\n // Images\n ORACLE_IMAGE_IMAGE_READER,\n // Instances\n ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n // Firewalls\n ORACLE_SECURITYGROUP_SECURITYGROUP_READER,\n ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER,\n]).config(function () {\n CloudProviderRegistry.registerProvider('oracle', {\n name: 'Oracle',\n image: {\n reader: 'oracleImageReader',\n },\n loadBalancer: {\n transformer: 'oracleLoadBalancerTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetail.html'),\n detailsController: 'oracleLoadBalancerDetailCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/createLoadBalancer.html'),\n createLoadBalancerController: 'oracleCreateLoadBalancerCtrl',\n },\n serverGroup: {\n transformer: 'oracleServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'oracleServerGroupDetailsCtrl',\n commandBuilder: 'oracleServerGroupCommandBuilder',\n cloneServerGroupController: 'oracleCloneServerGroupCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n configurationService: 'oracleServerGroupConfigurationService',\n },\n instance: {\n detailsController: 'oracleInstanceDetailsCtrl',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n },\n securityGroup: {\n reader: 'oracleSecurityGroupReader',\n transformer: 'oracleSecurityGroupTransformer',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'oracleCreateSecurityGroupCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('oracle', []);\n"],"names":["angular","_"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/helpContents/oracleHelpContents.ts","../src/image/image.reader.js","../src/instance/details/instance.details.controller.js","../src/domain/IOracleLoadBalancer.ts","../src/oracle.settings.ts","../src/loadBalancer/loadBalancer.transformer.ts","../src/loadBalancer/configure/createLoadBalancer.controller.ts","../src/loadBalancer/details/loadBalancerDetail.controller.ts","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/pipeline/stages/bake/ociBakeStage.js","../src/pipeline/stages/destroyAsg/destroyAsgStage.js","../src/pipeline/stages/disableAsg/disableAsgStage.js","../src/pipeline/stages/findAmi/findAmiStage.js","../src/pipeline/stages/findImageFromTags/oracleFindImageFromTagsStage.js","../src/pipeline/stages/resizeAsg/resizeAsgStage.js","../src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/shrinkClusterStage.js","../src/securityGroup/configure/createSecurityGroup.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/basicSettings/basicSettings.controller.js","../src/serverGroup/configure/wizard/capacity/capacitySelector.component.js","../src/serverGroup/configure/serverGroup.configure.module.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/wizard/cloneServerGroup.controller.js","../src/common/footer.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.controller.js","../src/serverGroup/serverGroup.transformer.js","../src/oracle.module.ts"],"sourcesContent":["import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents = [\n {\n key: 'oracle.serverGroup.stack',\n value: '(Optional) <b>Stack</b> Stack name',\n },\n {\n key: 'oracle.serverGroup.detail',\n value: '(Optional) <b>Detail</b> is a naming component to help distinguish specifics of the server group.',\n },\n {\n key: 'oracle.pipeline.config.bake.baseOsOption',\n value: '<p>The base image from which the image will be created.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.image_name',\n value: '<p>The base name of the image that will be created.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.package',\n value:\n '<p>The name of the package you want installed (without any version identifiers).</p>' +\n '<p>If there are multiple packages (space separated), then they will be installed in the order they are entered.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.upgrade',\n value:\n '<p>Perform a package manager upgrade before proceeding with the package installation.</p>' +\n '<p>For example: <i>yum update</i>.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.regions',\n value:\n '<p>The region in which the new image will be created.</p>' +\n '<p>NB: <i>Currently baked images are restricted to a single region</i>.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.user',\n value: '<p>The name of Oracle <i>user</i> that will be used during the baking process.</p>',\n },\n {\n key: 'oracle.pipeline.config.bake.account_name',\n value: '<p>The name of Oracle <i>account</i> that will be used during the baking process.</p>',\n },\n {\n key: 'oracle.serverGroup.sshAuthorizedKeys',\n value: '<p>The public SSH key for the default user on the instance.</p>',\n },\n];\n\nhelpContents.forEach((entry) => HelpContentsRegistry.register(entry.key, entry.value));\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nexport const ORACLE_IMAGE_IMAGE_READER = 'spinnaker.oracle.image.reader';\nexport const name = ORACLE_IMAGE_IMAGE_READER; // for backwards compatibility\nmodule(ORACLE_IMAGE_IMAGE_READER, []).factory('oracleImageReader', function () {\n function findImages(params) {\n return REST('/images/find')\n .query(params)\n .get()\n .catch(function () {\n return [];\n });\n }\n\n function getImage(imageId, region, credentials) {\n return REST('/images')\n .path(credentials, region, imageId)\n .query({ provider: 'oracle' })\n .get()\n .then(\n function (results) {\n return results && results.length ? results[0] : null;\n },\n function () {\n return null;\n },\n );\n }\n\n return {\n findImages,\n getImage,\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { InstanceReader } from '@spinnaker/core';\n\nexport const ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.oracle.instance.details.controller';\nexport const name = ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'oracleInstanceDetailsCtrl',\n [\n '$scope',\n '$q',\n 'app',\n 'instance',\n function ($scope, $q, app, instance) {\n $scope.application = app;\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n function retrieveInstance() {\n let instanceSummary, account, region;\n if (!$scope.application.serverGroups) {\n instanceSummary = {};\n account = instance.account;\n region = instance.region;\n } else {\n $scope.application.serverGroups.data.some((serverGroup) => {\n return serverGroup.instances.some((possibleInstance) => {\n if (possibleInstance.id === instance.instanceId || possibleInstance.name === instance.instanceId) {\n instanceSummary = possibleInstance;\n account = serverGroup.account;\n region = serverGroup.region;\n return true;\n }\n });\n });\n }\n\n $scope.instance = instanceSummary;\n InstanceReader.getInstanceDetails(account, region, instance.instanceId).then((instanceDetails) => {\n Object.assign($scope.instance, instanceDetails);\n });\n }\n },\n ],\n);\n","import type { ILoadBalancer, ILoadBalancerDeleteCommand, ILoadBalancerUpsertCommand, ISubnet } from '@spinnaker/core';\n\nexport type ListenerProtocol = 'HTTP' | 'HTTPS' | 'TCP' | 'SSL';\nexport enum LoadBalancingPolicy {\n ROUND_ROBIN = 'ROUND_ROBIN',\n IP_HASH = 'IP_HASH',\n LEAST_CONNECTIONS = 'LEAST_CONNECTIONS',\n}\n\nexport interface IOracleSubnet extends ISubnet {\n id: string;\n name: string;\n availabilityDomain: string;\n securityListIds: string[];\n vcnId: string;\n}\n\nexport interface IOracleLoadBalancer extends ILoadBalancer {\n shape: string; // required\n isPrivate: boolean; // required\n subnets: IOracleSubnet[]; // required 1 for private LB, 2 for public LB\n certificates?: { [name: string]: IOracleListenerCertificate };\n listeners?: { [name: string]: IOracleListener }; // not required to create LB, but useless without it\n hostnames?: IOracleHostname[];\n backendSets?: { [name: string]: IOracleBackEndSet }; // not required to create LB, but useless without it\n freeformTags?: { [tagName: string]: string };\n id?: string; // not required to create LB\n subnetTypeMap?: { [id: string]: 'AD' | 'Regional' };\n // TODO support path route sets\n}\n\n// This is created from loadBalancer/loadBalancer.states.ts\nexport interface ILoadBalancerDetails {\n name: string;\n accountId: string;\n region: string;\n vpcId: string;\n}\n\nexport interface IOracleListener {\n name: string;\n protocol: ListenerProtocol;\n port: number;\n defaultBackendSetName: string;\n isSsl: boolean;\n sslConfiguration?: IOracleListenerSSLConfiguration;\n hostnames?: IOracleHostname[];\n // TODO support pathRouteSets\n}\n\nexport interface IOracleListenerSSLConfiguration {\n certificateName: string;\n verifyDepth: number;\n verifyPeerCertificates: boolean;\n}\n\nexport interface IOracleHostname {\n name: string;\n hostname: string;\n}\n\nexport interface IOracleBackEndSet {\n name: string;\n policy: LoadBalancingPolicy;\n healthChecker: IOracleBackendSetHealthCheck;\n // TODO desagar sessionPersistenceConfiguration?: IOracleLoadBalancerSessionPersistenceConfiguration;\n backends: any[];\n isNew: boolean;\n}\n\nexport interface IOracleListenerCertificate {\n certificateName: string;\n publicCertificate: string;\n caCertificate: string;\n privateKey: string;\n passphrase: string;\n isNew: boolean;\n}\n\nexport interface IOracleBackendSetHealthCheck {\n urlPath: string; // required\n protocol: 'HTTP' | 'TCP';\n port: number;\n intervalMillis?: number;\n timeoutMillis?: number;\n retries?: number;\n returnCode?: number;\n responseBodyRegex?: string;\n}\n\n/**\n * IOracleLoadBalancerUpsertCommand is nearly identical to IOracleLoadBalancer -\n * Command objects are the shape of data sent to gate.\n */\nexport interface IOracleLoadBalancerUpsertCommand extends ILoadBalancerUpsertCommand {\n shape: string; // required\n isPrivate: boolean; // required\n subnetIds: string[]; // required 1 for private LB, 2 for public LB\n certificates?: { [name: string]: IOracleListenerCertificate };\n listeners?: { [name: string]: IOracleListener }; // not required to create LB, but useless without it\n hostnames?: IOracleHostname[];\n backendSets?: { [name: string]: IOracleBackEndSet }; // not required to create LB, but useless without it\n freeformTags?: { [tagName: string]: string };\n vpcId: string;\n subnetTypeMap?: { [id: string]: 'AD' | 'Regional' };\n}\n\nexport interface IOracleLoadBalancerDeleteCommand extends ILoadBalancerDeleteCommand {\n loadBalancerId: string;\n}\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IOracleProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n };\n}\n\nexport const OracleProviderSettings: IOracleProviderSettings = (SETTINGS.providers\n .oracle as IOracleProviderSettings) || { defaults: {} };\nif (OracleProviderSettings) {\n OracleProviderSettings.resetToOriginal = SETTINGS.resetProvider('oracle');\n}\n\nexport const OracleDefaultProviderSettings = {\n defaults: { account: 'DEFAULT', bakeryRegions: 'us-phoenix-1', region: 'us-phoenix-1' },\n};\n","import { module } from 'angular';\nimport { $q } from 'ngimport';\n\nimport type { Application } from '@spinnaker/core';\nimport type {\n IOracleBackEndSet,\n IOracleListener,\n IOracleListenerCertificate,\n IOracleListenerSSLConfiguration,\n IOracleLoadBalancer,\n IOracleLoadBalancerUpsertCommand,\n} from '../domain/IOracleLoadBalancer';\nimport { LoadBalancingPolicy } from '../domain/IOracleLoadBalancer';\nimport { OracleProviderSettings } from '../oracle.settings';\nimport { OracleDefaultProviderSettings } from '../oracle.settings';\n\nexport class OracleLoadBalancerTransformer {\n public normalizeLoadBalancer(loadBalancer: IOracleLoadBalancer): PromiseLike<IOracleLoadBalancer> {\n /*loadBalancer.serverGroups.forEach(function(serverGroup) {\n serverGroup.account = loadBalancer.account;\n serverGroup.region = loadBalancer.region;\n\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 var activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups)\n .map('instances')\n .flatten()\n .value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups)\n .map('detachedInstances')\n .flatten()\n .value();*/\n return $q.resolve(loadBalancer);\n }\n\n public convertLoadBalancerForEditing(loadBalancer: IOracleLoadBalancer): IOracleLoadBalancerUpsertCommand {\n if (loadBalancer.listeners) {\n Object.keys(loadBalancer.listeners).forEach((key) => {\n const lis = loadBalancer.listeners[key];\n lis.isSsl = !!lis.sslConfiguration; // use !! operator to get truthiness value\n });\n }\n const toEdit: IOracleLoadBalancerUpsertCommand = {\n name: loadBalancer.name,\n cloudProvider: loadBalancer.cloudProvider,\n credentials: loadBalancer.account,\n region: loadBalancer.region,\n shape: loadBalancer.shape,\n isPrivate: loadBalancer.isPrivate,\n subnetIds: loadBalancer.subnets.map((subnet) => subnet.id),\n certificates: loadBalancer.certificates,\n listeners: loadBalancer.listeners,\n hostnames: loadBalancer.hostnames,\n backendSets: loadBalancer.backendSets,\n freeformTags: loadBalancer.freeformTags,\n loadBalancerType: loadBalancer.type,\n securityGroups: loadBalancer.securityGroups,\n vpcId: loadBalancer.vpcId,\n subnetTypeMap: loadBalancer.subnetTypeMap,\n };\n return toEdit;\n }\n\n public constructNewLoadBalancerTemplate(application: Application): IOracleLoadBalancerUpsertCommand {\n const defaultCredentials =\n application.defaultCredentials.oracle ||\n (OracleProviderSettings.defaults\n ? OracleProviderSettings.defaults.account\n : OracleDefaultProviderSettings.defaults.account);\n const defaultRegion =\n application.defaultRegions.oracle ||\n (OracleProviderSettings.defaults\n ? OracleProviderSettings.defaults.region\n : OracleDefaultProviderSettings.defaults.region);\n return {\n name: undefined,\n cloudProvider: 'oracle',\n credentials: defaultCredentials,\n region: defaultRegion,\n shape: null,\n isPrivate: false,\n subnetIds: [],\n listeners: {},\n hostnames: [],\n backendSets: {},\n freeformTags: {},\n loadBalancerType: null,\n securityGroups: [],\n vpcId: null,\n subnetTypeMap: {},\n };\n }\n\n public constructNewListenerTemplate(): IOracleListener {\n return {\n name: 'HTTP_80',\n port: 80,\n protocol: 'HTTP',\n defaultBackendSetName: undefined,\n isSsl: false,\n };\n }\n\n public constructNewBackendSetTemplate(name: string): IOracleBackEndSet {\n return {\n name: name,\n policy: LoadBalancingPolicy.ROUND_ROBIN,\n healthChecker: { protocol: 'HTTP', port: 80, urlPath: '/' },\n backends: [],\n isNew: true,\n };\n }\n\n public constructNewSSLConfiguration(): IOracleListenerSSLConfiguration {\n return {\n certificateName: '',\n verifyDepth: 0,\n verifyPeerCertificates: false,\n };\n }\n\n public constructNewCertificateTemplate(name: string): IOracleListenerCertificate {\n return {\n certificateName: name,\n publicCertificate: undefined,\n caCertificate: undefined,\n privateKey: undefined,\n passphrase: undefined,\n isNew: true,\n };\n }\n}\n\nexport const ORACLE_LOAD_BALANCER_TRANSFORMER = 'spinnaker.oracle.loadBalancer.transformer';\nmodule(ORACLE_LOAD_BALANCER_TRANSFORMER, []).service('oracleLoadBalancerTransformer', OracleLoadBalancerTransformer);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport { cloneDeep, trimEnd } from 'lodash';\n\nimport type { Application, IAccountDetails, ILoadBalancer, INetwork, IRegion, ISubnet } from '@spinnaker/core';\nimport {\n AccountService,\n LoadBalancerWriter,\n NameUtils,\n NetworkReader,\n SubnetReader,\n TaskMonitor,\n} from '@spinnaker/core';\nimport type {\n IOracleBackEndSet,\n IOracleListener,\n IOracleListenerCertificate,\n IOracleLoadBalancer,\n IOracleSubnet,\n} from '../../domain/IOracleLoadBalancer';\nimport { LoadBalancingPolicy } from '../../domain/IOracleLoadBalancer';\n\nimport type { OracleLoadBalancerTransformer } from '../loadBalancer.transformer';\nimport { ORACLE_LOAD_BALANCER_TRANSFORMER } from '../loadBalancer.transformer';\n\nexport class OracleLoadBalancerController implements IController {\n public oracle = 'oracle';\n public shapes: string[] = ['100Mbps', '400Mbps', '8000Mbps']; // TODO desagar use listShapes to get this from clouddriver later\n public loadBalancingPolicies: string[] = Object.keys(LoadBalancingPolicy).map((k) => (LoadBalancingPolicy as any)[k]);\n public pages: { [key: string]: any } = {\n properties: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n backendSets: require('./backendSets.html'),\n certificates: require('./certificates.html'),\n };\n\n public state: { [key: string]: boolean } = {\n accountsLoaded: false,\n submitting: false,\n };\n\n public allVnets: INetwork[];\n public allSubnets: IOracleSubnet[];\n public filteredVnets: INetwork[];\n public filteredSubnets: ISubnet[];\n public filteredSubnetsByType: ISubnet[];\n public selectedVnet: INetwork;\n public selectedSubnets: IOracleSubnet[];\n public numSubnetsAllowed = 1;\n public listeners: IOracleListener[] = [];\n public backendSets: IOracleBackEndSet[] = [];\n public certificates: IOracleListenerCertificate[] = [];\n\n public static $inject = [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'oracleLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n ];\n constructor(\n private $scope: ng.IScope,\n private $uibModalInstance: IModalServiceInstance,\n private $state: StateService,\n private oracleLoadBalancerTransformer: OracleLoadBalancerTransformer,\n private application: Application,\n private loadBalancer: IOracleLoadBalancer,\n private isNew: boolean,\n ) {\n this.initializeController();\n }\n\n public onApplicationRefresh() {\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 newStateParams = {\n name: this.loadBalancer.name,\n accountId: this.loadBalancer.account,\n region: this.loadBalancer.region,\n provider: 'oracle',\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 public onTaskComplete() {\n this.application.loadBalancers.refresh();\n this.application.loadBalancers.onNextRefresh(this.$scope, this.onApplicationRefresh);\n }\n\n public initializeCreateMode() {\n AccountService.listAccounts(this.oracle).then((accounts: IAccountDetails[]) => {\n this.$scope.accounts = accounts; // TODO desagar does this need to be in $scope?\n this.state.accountsLoaded = true;\n this.$scope.state = this.state;\n this.accountUpdated();\n });\n this.loadVnets();\n this.loadSubnets();\n }\n\n private initControllerFromLoadBalancerCmd() {\n this.numSubnetsAllowed = this.calcNumSubnetsAllowed();\n if (this.$scope.loadBalancerCmd.listeners) {\n Object.keys(this.$scope.loadBalancerCmd.listeners).forEach((lis) => {\n this.listeners.push(this.$scope.loadBalancerCmd.listeners[lis]);\n });\n }\n if (this.$scope.loadBalancerCmd.backendSets) {\n Object.keys(this.$scope.loadBalancerCmd.backendSets).forEach((b) => {\n this.backendSets.push(this.$scope.loadBalancerCmd.backendSets[b]);\n });\n }\n if (this.$scope.loadBalancerCmd.certificates) {\n Object.keys(this.$scope.loadBalancerCmd.certificates).forEach((b) => {\n this.certificates.push(this.$scope.loadBalancerCmd.certificates[b]);\n });\n }\n }\n\n public initializeController() {\n if (this.loadBalancer) {\n this.$scope.loadBalancerCmd = this.oracleLoadBalancerTransformer.convertLoadBalancerForEditing(this.loadBalancer);\n this.initControllerFromLoadBalancerCmd();\n if (this.isNew) {\n const nameParts = NameUtils.parseLoadBalancerName(this.loadBalancer.name);\n this.$scope.loadBalancerCmd.stack = nameParts.stack;\n this.$scope.loadBalancerCmd.detail = nameParts.freeFormDetails;\n delete this.$scope.loadBalancerCmd.name;\n }\n } else {\n this.$scope.loadBalancerCmd = this.oracleLoadBalancerTransformer.constructNewLoadBalancerTemplate(\n this.application,\n );\n }\n this.$scope.prevBackendSetNames = [];\n this.$scope.prevCertNames = [];\n if (this.isNew) {\n this.updateName();\n this.updateLoadBalancerNames();\n this.initializeCreateMode();\n }\n this.$scope.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: this.onTaskComplete,\n });\n }\n\n public updateLoadBalancerNames() {\n const account = this.$scope.loadBalancerCmd.credentials;\n const region = this.$scope.loadBalancerCmd.region;\n\n const accountLoadBalancerNamesByRegion: { [key: string]: string[] } = {};\n this.application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n const loadBalancers: ILoadBalancer[] = this.application.loadBalancers.data;\n loadBalancers.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancerNamesByRegion[loadBalancer.region] =\n accountLoadBalancerNamesByRegion[loadBalancer.region] || [];\n accountLoadBalancerNamesByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n this.$scope.existingLoadBalancerNames = accountLoadBalancerNamesByRegion[region] || [];\n });\n }\n\n public validateBeforeSubmit() {\n return this.propertiesValid() && this.listenersValid();\n }\n\n /**\n * Used to prevent form submission if listeners are invalid\n * Currently it calls the two validations applicable to listeners.\n * @returns {boolean}\n */\n public listenersValid() {\n return this.listenersUniqueProtocolPort() && this.listenersBackendSetsExist() && this.listenersCertificatesExist();\n }\n\n /**\n * Used to prevent form submission if the properties section is invalid\n * Current the only validation is for subnet count.\n */\n public propertiesValid() {\n return this.selectedSubnets && this.selectedSubnets.length === this.calcNumSubnetsAllowed();\n }\n\n public listenersUniqueProtocolPort() {\n // validate that listeners have unique protocol/port combination\n const countsMap: { [key: string]: number } = {};\n this.listeners.reduce((counts, listener) => {\n const protocolPort = listener.protocol + '_' + listener.port;\n counts[protocolPort] = counts[protocolPort] ? counts[protocolPort] + 1 : 1;\n return counts;\n }, countsMap);\n // There should be no protocol/port combo in the countsMap with a count > 1\n return (\n Object.keys(countsMap).filter((key) => {\n return countsMap[key] > 1;\n }).length === 0\n );\n }\n\n public listenersBackendSetsExist() {\n // validate that the listeners' selected backend sets must exist. This is needed because Angular\n // does not clear the selected backendSet from the drop down if the backend set is deleted.\n const listenersWithNonExistentBackendSet: IOracleListener[] = this.listeners.filter(\n (listener) => !this.backendSets.find((backendSet) => backendSet.name === listener.defaultBackendSetName),\n );\n return listenersWithNonExistentBackendSet.length === 0;\n }\n\n public listenersCertificatesExist() {\n // validate that the listeners' selected certificate names exist. This is needed because Angular\n // does not clear the selected certificate from the drop down if the certificate is deleted.\n const listenersWithNonExistentCertificate: IOracleListener[] = this.listeners.filter(\n (listener) =>\n listener.sslConfiguration &&\n !this.certificates.find((cert) => cert.certificateName === listener.sslConfiguration.certificateName),\n );\n return listenersWithNonExistentCertificate.length === 0;\n }\n\n public updateName() {\n this.$scope.loadBalancerCmd.name = this.getName();\n }\n\n public getName() {\n const lb = this.$scope.loadBalancerCmd;\n const lbName = [this.application.name, lb.stack || '', lb.detail || ''].join('-');\n return trimEnd(lbName, '-');\n }\n\n public accountUpdated() {\n this.loadRegionsForAccount();\n }\n\n public regionUpdated() {\n this.updateLoadBalancerNames();\n this.updateVnets();\n }\n\n public loadRegionsForAccount() {\n AccountService.getRegionsForAccount(this.$scope.loadBalancerCmd.credentials).then((regions: IRegion[]) => {\n this.$scope.regions = regions; // TODO desagar does this need to be in $scope?\n if (regions.length === 1) {\n this.$scope.loadBalancerCmd.region = regions[0].name;\n this.regionUpdated();\n }\n });\n }\n\n public loadVnets() {\n NetworkReader.listNetworksByProvider(this.oracle).then((vnets: INetwork[]) => {\n this.allVnets = vnets || [];\n if (this.$scope.loadBalancerCmd.region) {\n this.updateVnets();\n }\n });\n }\n\n public loadSubnets() {\n SubnetReader.listSubnetsByProvider(this.oracle).then((subnets: IOracleSubnet[]) => {\n this.allSubnets = subnets || [];\n });\n }\n\n public updateVnets() {\n const account = this.$scope.loadBalancerCmd.credentials;\n const region = this.$scope.loadBalancerCmd.region;\n this.filteredVnets = this.allVnets.filter((vnet: INetwork) => {\n return vnet.account === account && vnet.region === region;\n });\n }\n\n public updateSubnets(network: INetwork) {\n this.selectedSubnets = [];\n this.$scope.loadBalancerCmd.subnetIds = [];\n this.filteredSubnets = this.allSubnets.filter((subnet: IOracleSubnet) => {\n return subnet.vcnId === network.id;\n });\n this.filteredSubnetsByType = cloneDeep(this.filteredSubnets);\n }\n\n public selectedVnetChanged(network: INetwork) {\n this.selectedVnet = network;\n this.$scope.loadBalancerCmd.vpcId = network.id;\n this.updateSubnets(network);\n }\n\n public selectedSubnetsChanged(selectedSubnet: IOracleSubnet) {\n if (selectedSubnet.availabilityDomain) {\n this.filteredSubnetsByType = this.filteredSubnets.filter((subnet: IOracleSubnet) => {\n return !!subnet.availabilityDomain;\n });\n } else {\n this.filteredSubnetsByType = [];\n }\n }\n\n public selectedSubnetRemoved() {\n if (this.selectedSubnets.length === 0) {\n this.filteredSubnetsByType = cloneDeep(this.filteredSubnets);\n }\n if (this.selectedSubnets.length === 1 && this.selectedSubnets[0].availabilityDomain) {\n this.filteredSubnetsByType = this.filteredSubnets.filter((subnet: IOracleSubnet) => {\n return !!subnet.availabilityDomain;\n });\n }\n }\n\n public isPrivateChanged() {\n this.numSubnetsAllowed = this.calcNumSubnetsAllowed();\n }\n\n public listenerIsSslChanged(listener: IOracleListener) {\n if (listener.isSsl) {\n listener.sslConfiguration = this.oracleLoadBalancerTransformer.constructNewSSLConfiguration();\n } else {\n listener.sslConfiguration = undefined;\n }\n }\n\n public calcNumSubnetsAllowed() {\n if (this.$scope.loadBalancerCmd.isPrivate) {\n return 1;\n }\n\n if (this.selectedSubnets && this.selectedSubnets.length === 1 && !this.selectedSubnets[0].availabilityDomain) {\n return 1;\n }\n\n return 2;\n }\n\n public getSubnetLimit() {}\n\n public removeListener(idx: number) {\n this.listeners.splice(idx, 1);\n }\n\n public addListener() {\n this.listeners.push(this.oracleLoadBalancerTransformer.constructNewListenerTemplate());\n }\n\n public removeBackendSet(idx: number) {\n const backendSet = this.backendSets[idx];\n this.backendSets.splice(idx, 1);\n this.$scope.prevBackendSetNames.splice(idx, 1);\n // Also clear the defaultBackendSetName field of any listeners who are using this backendSet\n this.listeners.forEach((lis) => {\n if (lis.defaultBackendSetName === backendSet.name) {\n lis.defaultBackendSetName = undefined;\n }\n });\n }\n\n public isBackendSetRemovable(idx: number): boolean {\n const backendSet = this.backendSets[idx];\n if (backendSet && backendSet.backends && backendSet.backends.length > 0) {\n return false;\n }\n let hasListener = false;\n this.listeners.forEach((lis) => {\n if (lis.defaultBackendSetName === backendSet.name) {\n hasListener = true;\n }\n });\n return !hasListener;\n }\n\n public addBackendSet() {\n const nameSuffix: number = this.backendSets.length + 1;\n const name: string = 'backendSet' + nameSuffix;\n this.$scope.prevBackendSetNames.push(name);\n this.backendSets.push(this.oracleLoadBalancerTransformer.constructNewBackendSetTemplate(name));\n }\n\n public backendSetNameChanged(idx: number) {\n const prevName = this.$scope.prevBackendSetNames && this.$scope.prevBackendSetNames[idx];\n if (prevName && prevName !== this.backendSets[idx].name) {\n this.listeners\n .filter((lis) => lis.defaultBackendSetName === prevName)\n .forEach((lis) => {\n lis.defaultBackendSetName = this.backendSets[idx].name;\n });\n }\n }\n\n public isCertRemovable(idx: number): boolean {\n const cert = this.certificates[idx];\n let hasListener = false;\n this.listeners.forEach((lis) => {\n if (lis.isSsl && lis.sslConfiguration && lis.sslConfiguration.certificateName === cert.certificateName) {\n hasListener = true;\n }\n });\n return !hasListener;\n }\n\n public removeCert(idx: number) {\n const cert = this.certificates[idx];\n this.certificates.splice(idx, 1);\n this.$scope.prevCertNames.splice(idx, 1);\n // Also clear the certificateName field of any listeners who are using this certificate\n this.listeners.forEach((lis) => {\n if (lis.sslConfiguration && lis.sslConfiguration.certificateName === cert.certificateName) {\n lis.sslConfiguration.certificateName = undefined;\n }\n });\n }\n\n public addCert() {\n const nameSuffix: number = this.certificates.length + 1;\n const name: string = 'certificate' + nameSuffix;\n this.$scope.prevCertNames.push(name);\n this.certificates.push(this.oracleLoadBalancerTransformer.constructNewCertificateTemplate(name));\n }\n\n public certNameChanged(idx: number) {\n const prevName = this.$scope.prevCertNames && this.$scope.prevCertNames[idx];\n if (prevName && prevName !== this.certificates[idx].certificateName) {\n this.listeners\n .filter((lis) => lis.sslConfiguration && lis.sslConfiguration.certificateName === prevName)\n .forEach((lis) => {\n lis.sslConfiguration.certificateName = this.certificates[idx].certificateName;\n });\n }\n }\n\n public submit() {\n const descriptor = this.isNew ? 'Create' : 'Update';\n\n this.$scope.taskMonitor.submit(() => {\n const params = {\n cloudProvider: 'oracle',\n application: this.application.name,\n clusterName: this.$scope.loadBalancerCmd.clusterName,\n resourceGroupName: this.$scope.loadBalancerCmd.clusterName,\n loadBalancerName: this.$scope.loadBalancerCmd.name,\n loadBalancerId: null as string,\n };\n if (this.loadBalancer && this.loadBalancer.id) {\n params.loadBalancerId = this.loadBalancer.id;\n }\n\n if (this.selectedVnet) {\n this.$scope.loadBalancerCmd.vpcId = this.selectedVnet.id;\n }\n\n if (this.selectedSubnets && this.selectedSubnets.length > 0) {\n this.$scope.loadBalancerCmd.subnetIds = this.selectedSubnets.map((subnet: IOracleSubnet) => {\n return subnet.id;\n });\n\n for (const subnet of this.selectedSubnets) {\n if (!this.$scope.loadBalancerCmd.subnetTypeMap) {\n this.$scope.loadBalancerCmd.subnetTypeMap = {\n [subnet.id]: !subnet.availabilityDomain ? 'Regional' : 'AD',\n };\n } else {\n this.$scope.loadBalancerCmd.subnetTypeMap[subnet.id] = !subnet.availabilityDomain ? 'Regional' : 'AD';\n }\n }\n }\n\n if (this.backendSets) {\n this.$scope.loadBalancerCmd.backendSets = this.backendSets.reduce(\n (backendSetsMap: { [name: string]: IOracleBackEndSet }, backendSet: IOracleBackEndSet) => {\n backendSetsMap[backendSet.name] = backendSet;\n return backendSetsMap;\n },\n {},\n );\n }\n\n if (this.listeners) {\n this.$scope.loadBalancerCmd.listeners = this.listeners.reduce(\n (listenersMap: { [name: string]: IOracleListener }, listener: IOracleListener) => {\n listener.name = listener.protocol + '_' + listener.port;\n listenersMap[listener.name] = listener;\n return listenersMap;\n },\n {},\n );\n }\n\n if (this.certificates) {\n this.$scope.loadBalancerCmd.certificates = this.certificates.reduce(\n (certMap: { [name: string]: IOracleListenerCertificate }, cert: IOracleListenerCertificate) => {\n certMap[cert.certificateName] = cert;\n if (!cert.isNew) {\n // existing certificate sends only the name\n certMap[cert.certificateName].publicCertificate = null;\n }\n return certMap;\n },\n {},\n );\n }\n\n this.$scope.loadBalancerCmd.type = 'upsertLoadBalancer';\n if (!this.$scope.loadBalancerCmd.vnet && !this.$scope.loadBalancerCmd.subnetType) {\n this.$scope.loadBalancerCmd.securityGroups = null;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer(this.$scope.loadBalancerCmd, this.application, descriptor, params);\n });\n }\n\n public cancel() {\n this.$uibModalInstance.dismiss();\n }\n}\n\nexport const ORACLE_LOAD_BALANCER_CREATE_CONTROLLER = 'spinnaker.oracle.loadBalancer.create.controller';\nmodule(ORACLE_LOAD_BALANCER_CREATE_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP as any,\n UIROUTER_ANGULARJS,\n ORACLE_LOAD_BALANCER_TRANSFORMER,\n]).controller('oracleCreateLoadBalancerCtrl', OracleLoadBalancerController);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IController } from 'angular';\nimport angular, { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport { sortBy } from 'lodash';\n\nimport type { Application, ISecurityGroup, LoadBalancerReader, SecurityGroupReader } from '@spinnaker/core';\nimport { ConfirmationModalService, FirewallLabels, LoadBalancerWriter } from '@spinnaker/core';\n\nimport { OracleLoadBalancerController } from '../configure/createLoadBalancer.controller';\nimport type { ILoadBalancerDetails, IOracleLoadBalancer } from '../../domain/IOracleLoadBalancer';\n\nexport class OracleLoadBalancerDetailController implements IController {\n public static $inject = [\n '$scope',\n '$state',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'securityGroupReader',\n 'loadBalancerReader',\n '$q',\n ];\n constructor(\n private $scope: ng.IScope,\n private $state: StateService,\n private $uibModal: IModalService,\n private loadBalancer: ILoadBalancerDetails,\n private app: Application,\n private securityGroupReader: SecurityGroupReader,\n private loadBalancerReader: LoadBalancerReader,\n private $q: angular.IQService,\n ) {\n $scope.state = {\n loading: true,\n };\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n const extractLoadBalancer = (): PromiseLike<any> => {\n $scope.loadBalancer = app.loadBalancers.data.filter((test: IOracleLoadBalancer) => {\n return (\n test.name === loadBalancer.name &&\n test.region === loadBalancer.region &&\n test.account === loadBalancer.accountId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n const detailsLoader = this.loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.cloudProvider,\n loadBalancer.accountId,\n loadBalancer.region,\n loadBalancer.name,\n );\n\n return detailsLoader.then((details) => {\n // ILoadBalancerSourceData\n $scope.state.loading = false;\n const securityGroups: ISecurityGroup[] = [];\n\n const filtered = details.filter((test: IOracleLoadBalancer) => {\n return test.name === loadBalancer.name;\n });\n\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n if ($scope.loadBalancer.elb.securityGroups) {\n $scope.loadBalancer.elb.securityGroups.forEach((securityGroupId: string) => {\n const match = this.securityGroupReader.getApplicationSecurityGroup(\n this.app,\n loadBalancer.accountId,\n loadBalancer.region,\n securityGroupId,\n );\n if (match) {\n securityGroups.push(match);\n }\n });\n this.$scope.securityGroups = sortBy(securityGroups, 'name');\n }\n }\n });\n }\n if (!this.$scope.loadBalancer) {\n this.$state.go('^');\n }\n\n return this.$q.when(null);\n };\n\n this.app\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 (!this.$scope.$$destroyed) {\n this.app.onRefresh($scope, extractLoadBalancer);\n }\n });\n }\n\n public editLoadBalancer() {\n this.$uibModal.open({\n templateUrl: require('../configure/editLoadBalancer.html'),\n controller: OracleLoadBalancerController,\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n application: () => {\n return this.app;\n },\n loadBalancer: () => {\n return angular.copy(this.$scope.loadBalancer);\n },\n isNew: () => {\n return false;\n },\n },\n });\n }\n\n public deleteLoadBalancer() {\n if (this.$scope.loadBalancer.instances && this.$scope.loadBalancer.instances.length) {\n return;\n }\n\n const taskMonitor = {\n application: this.app,\n title: 'Deleting ' + this.loadBalancer.name,\n };\n\n const command = {\n cloudProvider: 'oracle',\n loadBalancerName: this.$scope.loadBalancer.name,\n credentials: this.$scope.loadBalancer.account,\n region: this.loadBalancer.region,\n application: this.app.name,\n loadBalancerId: this.$scope.loadBalancer.id,\n };\n\n const submitMethod = () => LoadBalancerWriter.deleteLoadBalancer(command, this.app);\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + this.loadBalancer.name + '?',\n buttonText: 'Delete ' + this.loadBalancer.name,\n account: this.loadBalancer.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n }\n}\n\nexport const ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER = 'spinnaker.oracle.loadBalancerDetail.controller';\nmodule(ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP as any]).controller(\n 'oracleLoadBalancerDetailCtrl',\n OracleLoadBalancerDetailController,\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { EXECUTION_DETAILS_SECTION_SERVICE, SETTINGS } from '@spinnaker/core';\n\nexport const ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.oracle.pipeline.stage.bake.executionDetails.controller';\nexport const name = ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [\n EXECUTION_DETAILS_SECTION_SERVICE,\n UIROUTER_ANGULARJS,\n]).controller('oracleBakeExecutionDetailsCtrl', [\n '$log',\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($log, $scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'oracle';\n $scope.roscoMode = SETTINGS.feature.roscoMode;\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","'use strict';\n\nimport { module } from 'angular';\nimport { size } from 'lodash';\n\nimport {\n AccountService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n PipelineTemplates,\n Registry,\n} from '@spinnaker/core';\n\nimport { ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\n\nexport const ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE = 'spinnaker.oracle.pipeline.stage.bakeStage';\nexport const name = ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE, [ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'oracle',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'accountName' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'baseOs' },\n { type: 'requiredField', fieldName: 'upgrade' },\n { type: 'requiredField', fieldName: 'cloudProviderType' },\n { type: 'requiredField', fieldName: 'amiName', fieldLabel: 'Image Name' },\n ],\n restartable: true,\n });\n })\n .controller('oracleBakeStageCtrl', [\n '$scope',\n '$q',\n '$uibModal',\n function ($scope, $q, $uibModal) {\n const provider = 'oracle';\n\n if (!$scope.stage.cloudProvider) {\n $scope.stage.cloudProvider = provider;\n }\n\n if (!$scope.stage) {\n $scope.stage = {};\n }\n\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n function initialize() {\n $scope.viewState.providerSelected = true;\n\n $q.all([BakeryReader.getBaseOsOptions(provider), AccountService.listAccounts(provider)]).then(\n ([baseOsOptions, accounts]) => {\n if (baseOsOptions.baseImages.length > 0) {\n $scope.baseOsOptions = baseOsOptions;\n if (!$scope.stage.baseOs) {\n $scope.stage.baseOs = $scope.baseOsOptions.baseImages[0].id;\n }\n }\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n if (!$scope.stage.upgrade) {\n $scope.stage.upgrade = true;\n }\n\n $scope.accounts = accounts;\n\n if ($scope.stage.accountName) {\n AccountService.getRegionsForAccount($scope.stage.accountName).then(function (regions) {\n if (Array.isArray(regions) && regions.length != 0) {\n // there is exactly one region per account\n $scope.stage.region = regions[0].name;\n }\n });\n }\n\n $scope.viewState.loading = false;\n },\n );\n }\n\n this.getBaseOsDescription = function (baseOsOption) {\n return baseOsOption.id + (baseOsOption.shortDescription ? ' (' + baseOsOption.shortDescription + ')' : '');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.stage.accountName).then(function (regions) {\n if (Array.isArray(regions) && regions.length != 0) {\n // there is exactly one region per account\n $scope.stage.region = regions[0].name;\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.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n $scope.$watch('stage.accountName', $scope.accountUpdated);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE = 'spinnaker.oracle.pipeline.stage.destroyAsgStage';\nexport const name = ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'oracle',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\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('oracleDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n const provider = 'oracle';\n\n $scope.targets = StageConstants.TARGET_LIST;\n stage.regions = stage.regions || [];\n stage.cloudProvider = provider;\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n init();\n\n function init() {\n AccountService.listAccounts(provider).then((accounts) => {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n if (!stage.credentials && $scope.application.defaultCredentials.oracle) {\n stage.credentials = $scope.application.defaultCredentials.oracle;\n }\n\n if (!stage.regions.length && $scope.application.defaultRegions.oracle) {\n stage.regions.push($scope.application.defaultRegions.oracle);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE = 'spinnaker.oracle.pipeline.stage.disableAsgStage';\nexport const name = ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n cloudProvider: 'oracle',\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('oracleDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n const provider = 'oracle';\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts(provider).then((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 = provider;\n\n if (!stage.credentials && $scope.application.defaultCredentials.oracle) {\n stage.credentials = $scope.application.defaultCredentials.oracle;\n }\n\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.oracle);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE = 'spinnaker.oracle.pipeline.stage.findAmiStage';\nexport const name = ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE; // for backwards compatibility\nangular\n .module(ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImage',\n cloudProvider: 'oracle',\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('oracleFindAmiStageCtrl', [\n '$scope',\n ($scope) => {\n const provider = 'oracle';\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts(provider).then((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 = provider;\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.oracle) {\n stage.credentials = $scope.application.defaultCredentials.oracle;\n }\n\n if (!stage.regions.length && $scope.application.defaultRegions.oracle) {\n stage.regions.push($scope.application.defaultRegions.oracle);\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 ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE =\n 'spinnaker.oracle.pipeline.stage.findImageFromTagsStage';\nexport const name = ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'oracle',\n templateUrl: require('./findImageFromTagsStage.html'),\n executionDetailsUrl: require('./findImageFromTagsExecutionDetails.html'),\n executionConfigSections: ['findImageConfig', 'taskStatus'],\n validators: [\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'packageName' },\n ],\n });\n })\n .controller('oracleFindImageFromTagsStageCtrl', [\n '$scope',\n function ($scope) {\n $scope.stage.packageName = $scope.stage.packageName || '*';\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.regions = $scope.stage.regions || [];\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'oracle';\n\n BakeryReader.getRegions('oracle').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 ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE = 'spinnaker.oracle.pipeline.stage.resizeAsgStage';\nexport const name = ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n cloudProvider: 'oracle',\n templateUrl: require('./resizeAsgStage.html'),\n executionStepLabelUrl: require('./resizeAsgStepLabel.html'),\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('oracleResizeAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const provider = 'oracle';\n\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts(provider).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 { label: 'Scale Up', val: 'scale_up' },\n { label: 'Scale Down', val: 'scale_down' },\n { label: 'Scale to Cluster Size', val: 'scale_to_cluster' },\n { label: 'Scale to Exact Size', val: 'scale_exact' },\n ];\n\n $scope.resizeTypes = [\n { label: 'Percentage', val: 'pct' },\n { label: 'Incremental', val: 'incr' },\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\n if (!stage.action && stage.resizeType === 'exact') {\n stage.action = 'scale_exact';\n }\n\n stage.cloudProvider = provider;\n stage.cloudProviderType = provider;\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\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 ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE =\n 'spinnaker.oracle.pipeline.stage.scaleDownClusterStage';\nexport const name = ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'oracle',\n templateUrl: require('./scaleDownClusterStage.html'),\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('oracleScaleDownClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n const provider = 'oracle';\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts(provider).then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = provider;\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\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 if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n\n this.pluralize = function (str, val) {\n return val === 1 ? str : str + 's';\n };\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 ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE =\n 'spinnaker.core.pipeline.stage.oracle.shrinkClusterStage';\nexport const name = ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'oracle',\n templateUrl: require('./shrinkClusterStage.html'),\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('oracleShrinkClusterStageCtrl', [\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('oracle').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n\n stage.cloudProvider = 'oracle';\n\n if (!stage.credentials && $scope.application.defaultCredentials.oracle) {\n stage.credentials = $scope.application.defaultCredentials.oracle;\n }\n\n if (!stage.regions.length && $scope.application.defaultRegions.oracle) {\n stage.regions.push($scope.application.defaultRegions.oracle);\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 return val === 1 ? str : str + 's';\n };\n\n if (stage.retainLargerOverNewer === undefined) {\n stage.retainLargerOverNewer = 'false';\n }\n\n stage.retainLargerOverNewer = stage.retainLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { FirewallLabels } from '@spinnaker/core';\n\nexport const ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER =\n 'spinnaker.oracle.securityGroup.create.controller';\nexport const name = ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER, []).controller('oracleCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n function ($scope, $uibModalInstance) {\n this.cancel = () => {\n $uibModalInstance.dismiss();\n };\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ORACLE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.oracle.securityGroup.reader';\nexport const name = ORACLE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(ORACLE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('oracleSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n return indexedSecurityGroups[container.account][container.region][securityGroupId];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { NetworkReader } from '@spinnaker/core';\n\nexport const ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.oracle.securityGroup.transformer';\nexport const name = ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('oracleSecurityGroupTransformer', function () {\n const provider = 'oracle';\n\n function normalizeSecurityGroup(securityGroup) {\n return NetworkReader.listNetworksByProvider(provider).then(_.partial(addVcnNameToSecurityGroup, securityGroup));\n }\n\n function addVcnNameToSecurityGroup(securityGroup, vcns) {\n const matches = vcns.find((vcn) => vcn.id === securityGroup.network);\n securityGroup.vpcName = matches.length ? matches[0].name : '';\n }\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, NetworkReader, SECURITY_GROUP_READER, SubnetReader } from '@spinnaker/core';\nimport { OracleProviderSettings } from '../../oracle.settings';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.oracle.serverGroup.configure.configuration.service';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [SECURITY_GROUP_READER]).factory(\n 'oracleServerGroupConfigurationService',\n [\n '$q',\n 'oracleImageReader',\n 'securityGroupReader',\n function ($q, oracleImageReader, securityGroupReader) {\n const oracle = 'oracle';\n\n const getShapes = (image) => {\n if (!image || !image.compatibleShapes) {\n return [];\n }\n return image.compatibleShapes.map((shape) => {\n return { name: shape };\n });\n };\n\n const loadAndSelectRegions = (command, backingData) => {\n if (command.account) {\n const selectedAccountDetails = backingData.credentialsKeyedByAccount[command.account];\n if (!selectedAccountDetails) {\n return;\n }\n backingData.filtered.regions = _.map(selectedAccountDetails.regions, (region) => {\n return { name: region.name };\n });\n if (selectedAccountDetails) {\n command.region = selectedAccountDetails.region;\n }\n }\n };\n\n const loadAvailabilityDomains = (command) => {\n if (command.account && command.region) {\n AccountService.getAvailabilityZonesForAccountAndRegion(oracle, command.account, command.region).then(\n (availDoms) => {\n if (availDoms) {\n command.backingData.filtered.availabilityDomains = availDoms.map((av) => {\n return { name: av };\n });\n } else {\n command.backingData.filtered.availabilityDomains = [];\n command.availabilityDomain = null;\n }\n },\n );\n }\n };\n\n const loadLoadBalancers = (command) => {\n if (command.account && command.region) {\n command.backingData.filtered.loadBalancers = command.backingData.loadBalancers.filter(function (lb) {\n return lb.region === command.region && lb.account === command.account;\n });\n }\n };\n\n function configureCommand(application, command) {\n const defaults = command || {};\n const defaultCredentials =\n defaults.account || application.defaultCredentials.oracle || OracleProviderSettings.defaults.account;\n const defaultRegion =\n defaults.region || application.defaultRegions.oracle || OracleProviderSettings.defaults.region;\n\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount(oracle),\n NetworkReader.listNetworksByProvider(oracle),\n SubnetReader.listSubnetsByProvider(oracle),\n securityGroupReader.getAllSecurityGroups(),\n loadImages(),\n AccountService.getAvailabilityZonesForAccountAndRegion(oracle, defaultCredentials, defaultRegion),\n ])\n .then(function ([credentialsKeyedByAccount, networks, subnets, securityGroups, images, availDomains]) {\n const backingData = {\n credentialsKeyedByAccount,\n networks,\n subnets,\n securityGroups,\n images,\n availDomains,\n };\n\n backingData.accounts = _.keys(backingData.credentialsKeyedByAccount);\n backingData.filtered = {};\n loadAndSelectRegions(command, backingData);\n backingData.filtered.availabilityDomains = _.map(backingData.availDomains, function (zone) {\n return { name: zone };\n });\n\n backingData.filterSubnets = function () {\n if (command.vpcId && command.availabilityDomain) {\n return _.filter(backingData.subnets, {\n vcnId: command.vpcId,\n availabilityDomain: command.availabilityDomain,\n });\n }\n return backingData.subnets;\n };\n\n backingData.loadBalancers = application.loadBalancers.data;\n\n backingData.accountOnChange = function () {\n loadAndSelectRegions(command, command.backingData);\n loadAvailabilityDomains(command);\n loadLoadBalancers(command);\n };\n\n backingData.regionOnChange = function () {\n loadAvailabilityDomains(command);\n loadLoadBalancers(command);\n };\n\n backingData.availabilityDomainOnChange = function () {\n command.subnetId = null;\n backingData.seclists = null;\n };\n\n backingData.vpcOnChange = function () {\n command.subnetId = null;\n backingData.seclists = null;\n };\n\n backingData.subnetOnChange = function () {\n const subnet = _.find(backingData.subnets, { id: command.subnetId });\n const mySecGroups = backingData.securityGroups[command.account][oracle][command.region];\n const secLists = [];\n _.forEach(subnet.securityListIds, function (sid) {\n const sgRef = _.find(mySecGroups, { id: sid });\n securityGroupReader\n .getSecurityGroupDetails(\n command.application,\n command.account,\n oracle,\n command.region,\n command.vpcId,\n sgRef.name,\n )\n .then(function (sgd) {\n secLists.push(sgd);\n backingData.seclists = secLists;\n });\n });\n };\n\n backingData.findBackendSetsByLoadBalancerId = (loadBalancerId) => {\n const lb = backingData.filtered.loadBalancers.find((lb) => lb.id === loadBalancerId);\n if (lb && lb.backendSets) {\n //reduce the backendSets object to an array. The object is keyed by the backendSet name\n const bsetArray = [];\n Object.keys(lb.backendSets).reduce((arr, bsetName) => {\n const bset = lb.backendSets[bsetName];\n bset['name'] = bsetName;\n arr.push(bset);\n return arr;\n }, bsetArray);\n return bsetArray;\n } else {\n return [];\n }\n };\n\n backingData.findLoadBalListenersByBackendSetName = (loadBalancerId, backendSetName) => {\n const lb = backingData.filtered.loadBalancers.find((lb) => lb.id === loadBalancerId);\n if (lb && lb.listeners) {\n return Object.keys(lb.listeners)\n .filter((lisName) => lb.listeners[lisName].defaultBackendSetName === backendSetName)\n .map((lisName) => lb.listeners[lisName]);\n } else {\n return [];\n }\n };\n\n backingData.loadBalancerOnChange = () => {\n if (command.loadBalancerId) {\n backingData.filtered.backendSets = backingData.findBackendSetsByLoadBalancerId(command.loadBalancerId);\n } else {\n //no backend set name should be set if no load balancer id is set\n command.backendSetName = undefined;\n backingData.backendSetOnChange();\n backingData.filtered.backendSets = [];\n }\n };\n\n backingData.backendSetOnChange = () => {\n backingData.filtered.listeners =\n command.loadBalancerId && command.backendSetName\n ? backingData.findLoadBalListenersByBackendSetName(command.loadBalancerId, command.backendSetName)\n : [];\n };\n\n backingData.filtered.images = backingData.images;\n const shapesMap = {};\n _.forEach(backingData.filtered.images, (image) => {\n shapesMap[image.id] = getShapes(image);\n });\n backingData.filtered.shapes = shapesMap;\n backingData.filtered.allShapes = _.uniqBy(_.flatten(_.values(shapesMap)), 'name');\n command.backingData = backingData;\n if (command.account) {\n loadLoadBalancers(command);\n backingData.loadBalancerOnChange();\n backingData.backendSetOnChange();\n }\n });\n }\n\n function loadImages() {\n return oracleImageReader.findImages({ provider: oracle });\n }\n\n return {\n configureCommand: configureCommand,\n };\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';\n\nimport { IMAGE_READER } from '@spinnaker/core';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER =\n 'spinnaker.oracle.serverGroup.configure.wizard.basicSettings.controller';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n IMAGE_READER,\n ])\n .controller('oracleServerGroupBasicSettingsCtrl', [\n '$scope',\n '$state',\n '$uibModalStack',\n '$controller',\n 'imageReader',\n function ($scope, $state, $uibModalStack, $controller, imageReader) {\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: imageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT =\n 'spinnaker.oracle.serverGroup.configure.wizard.capacity.selector.component';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT; // for backwards compatibility\nangular\n .module(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT, [])\n .component('oracleServerGroupCapacitySelector', {\n templateUrl: require('./capacitySelector.component.html'),\n bindings: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n });\n","import { module } from 'angular';\n\nimport { ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\nimport { ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER } from './wizard/basicSettings/basicSettings.controller';\nimport { ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT } from './wizard/capacity/capacitySelector.component';\n\n('use strict');\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE = 'spinnaker.oracle.serverGroup.configure';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE, [\n ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER,\n ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT,\n ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\n\nimport { OracleProviderSettings } from '../../oracle.settings';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.oracle.serverGroupCommandBuilder.service';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [])\n .factory('oracleServerGroupCommandBuilder', [\n '$q',\n function ($q) {\n const oracle = 'oracle';\n\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultAccount = defaults.account || OracleProviderSettings.defaults.account;\n const defaultRegion = defaults.region || OracleProviderSettings.defaults.region;\n\n const command = {\n account: defaultAccount,\n application: application.name,\n capacity: {\n desired: 1,\n },\n region: defaultRegion,\n selectedProvider: oracle,\n viewState: {\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n },\n };\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n const serverGroupName = NameUtils.parseServerGroupName(serverGroup.name);\n\n const command = {\n account: serverGroup.account,\n application: application.name,\n shape: serverGroup.launchConfig.shape,\n strategy: '',\n stack: serverGroupName.stack,\n vpcId: serverGroup.launchConfig.vpcId,\n subnetId: serverGroup.launchConfig.subnetId,\n region: serverGroup.region,\n availabilityDomain: serverGroup.launchConfig.availabilityDomain,\n sshAuthorizedKeys: serverGroup.launchConfig.sshAuthorizedKeys,\n selectedProvider: oracle,\n capacity: {\n desired: serverGroup.capacity.desired,\n },\n viewState: {\n mode: mode,\n disableStrategySelection: true,\n },\n };\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const commandDefaults = { account: pipelineCluster.account, region: pipelineCluster.region };\n return buildNewServerGroupCommand(application, commandDefaults).then((command) => {\n const viewState = {\n disableImageSelection: true,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n templatingEnabled: true,\n };\n\n const viewOverrides = {\n viewState: viewState,\n };\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n return angular.extend({}, command, pipelineCluster, viewOverrides);\n });\n }\n\n function buildNewServerGroupCommandForPipeline() {\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n },\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { FirewallLabels, ModalWizard, TaskMonitor } from '@spinnaker/core';\n\nexport const ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER =\n 'spinnaker.oracle.serverGroup.configure.cloneServerGroup';\nexport const name = ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'oracleCloneServerGroupCtrl',\n [\n '$scope',\n '$uibModalInstance',\n '$q',\n 'application',\n 'serverGroupWriter',\n 'serverGroupCommand',\n 'oracleServerGroupConfigurationService',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n application,\n serverGroupWriter,\n serverGroupCommand,\n oracleServerGroupConfigurationService,\n title,\n ) {\n $scope.title = title;\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n $scope.command = serverGroupCommand;\n $scope.application = application;\n\n $scope.pages = {\n basicSettings: require('./basicSettings/basicSettings.html'),\n instanceType: require('./instanceType/instanceType.html'),\n capacity: require('./capacity/capacity.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n networkSettings: require('./network/networkSettings.html'),\n templateSelection: require('./templateSelection/templateSelection.html'),\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 $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n });\n\n function configureCommand() {\n oracleServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {\n $scope.state.loaded = true;\n });\n }\n\n this.isValid = function () {\n return $scope.command && $scope.form.$valid && ModalWizard.isComplete();\n };\n\n this.showSubmitButton = function () {\n return ModalWizard.allPagesVisited();\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.submit = function () {\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n $scope.taskMonitor.submit(function () {\n return serverGroupWriter.cloneServerGroup($scope.command, application);\n });\n };\n\n configureCommand();\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n },\n ],\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const ORACLE_COMMON_FOOTER_COMPONENT = 'spinnaker.oracle.footer.component';\nexport const name = ORACLE_COMMON_FOOTER_COMPONENT; // for backwards compatibility\nangular.module(ORACLE_COMMON_FOOTER_COMPONENT, []).component('oracleFooter', {\n templateUrl: require('./footer.component.html'),\n bindings: {\n action: '&',\n isValid: '&',\n cancel: '&',\n account: '=?',\n verification: '=?',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { SERVER_GROUP_WRITER } from '@spinnaker/core';\n\nexport const ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT =\n 'spinnaker.oracle.serverGroup.details.resize.capacity.component';\nexport const name = ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT; // for backwards compatibility\nangular\n .module(ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT, [SERVER_GROUP_WRITER])\n .component('oracleResizeCapacity', {\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 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","'use strict';\n\nimport { module } from 'angular';\n\nimport { TaskMonitor } from '@spinnaker/core';\nimport { ORACLE_COMMON_FOOTER_COMPONENT } from '../../../common/footer.component';\n\nimport { ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT } from './resizeCapacity.component';\n\nexport const ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER =\n 'spinnaker.oracle.serverGroup.details.resize.controller';\nexport const name = ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER, [\n ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT,\n ORACLE_COMMON_FOOTER_COMPONENT,\n]).controller('oracleResizeServerGroupCtrl', [\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 = ['Oracle'];\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 { ORACLE_COMMON_FOOTER_COMPONENT } from '../../../common/footer.component';\n\nexport const ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.oracle.serverGroup.details.rollback.controller';\nexport const name = ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [\n SERVER_GROUP_WRITER,\n ORACLE_COMMON_FOOTER_COMPONENT,\n]).controller('oracleRollbackServerGroupCtrl', [\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 = ['Oracle'];\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 { module } from 'angular';\n\nimport {\n ConfirmationModalService,\n NetworkReader,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { ORACLE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER } from './resize/resizeServerGroup.controller';\nimport { ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\n\nexport const ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER =\n 'spinnaker.oracle.serverGroup.details.controller';\nexport const name = ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SERVER_GROUP_WRITER,\n ORACLE_IMAGE_IMAGE_READER,\n ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER,\n ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n]).controller('oracleServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$uibModal',\n 'app',\n 'serverGroup',\n 'serverGroupWriter',\n 'oracleImageReader',\n function ($scope, $state, $uibModal, app, serverGroup, serverGroupWriter, oracleImageReader) {\n const provider = 'oracle';\n\n this.application = app;\n this.serverGroup = serverGroup;\n\n this.state = {\n loading: true,\n };\n\n /////////////////////////////////////////////////////////\n // Fetch data\n /////////////////////////////////////////////////////////\n\n const retrieveServerGroup = () => {\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then((details) => {\n cancelLoader();\n details.account = serverGroup.accountId;\n this.serverGroup = details;\n retrieveNetwork();\n retrieveSubnet();\n retrieveImage();\n });\n };\n\n const retrieveNetwork = () => {\n NetworkReader.listNetworksByProvider(provider).then((networks) => {\n this.serverGroup.network = _.chain(networks)\n .filter({ account: this.serverGroup.account, id: this.serverGroup.launchConfig.vpcId })\n .head()\n .value();\n });\n };\n\n const retrieveSubnet = () => {\n SubnetReader.getSubnetByIdAndProvider(this.serverGroup.launchConfig.subnetId, provider).then((subnet) => {\n this.serverGroup.subnet = subnet;\n });\n };\n\n const retrieveImage = () => {\n oracleImageReader\n .getImage(this.serverGroup.launchConfig.imageId, this.serverGroup.region, this.serverGroup.account)\n .then((image) => {\n if (!image) {\n image = { id: this.serverGroup.launchConfig.imageId, name: this.serverGroup.launchConfig.imageId };\n }\n this.serverGroup.image = image;\n });\n };\n\n ////////////////////////////////////////////////////////////\n // Actions. Triggered by server group details dropdown menu\n ////////////////////////////////////////////////////////////\n\n this.destroyServerGroup = function destroyServerGroup() {\n const serverGroup = this.serverGroup;\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: function () {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return serverGroupWriter.destroyServerGroup(serverGroup, app);\n };\n\n const stateParams = {\n name: serverGroup.name,\n account: serverGroup.account,\n region: serverGroup.region,\n };\n\n ConfirmationModalService.confirm({\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.resizeServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./resize/resizeServerGroup.html'),\n controller: 'oracleResizeServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => {\n return this.serverGroup;\n },\n application: () => {\n return app;\n },\n },\n });\n };\n\n this.rollbackServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./rollback/rollbackServerGroup.html'),\n controller: 'oracleRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => this.serverGroup,\n disabledServerGroups: () => {\n const sgSummary = _.find(app.serverGroups.data, {\n name: this.serverGroup.name,\n account: this.serverGroup.account,\n region: this.serverGroup.region,\n });\n const cluster = _.find(app.clusters, { name: sgSummary.cluster, account: this.serverGroup.account });\n return _.filter(cluster.serverGroups, { isDisabled: true, region: this.serverGroup.region });\n },\n application: () => app,\n },\n });\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: 'Oracle',\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 = ['Oracle'];\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: 'Oracle',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Oracle'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n const cancelLoader = () => {\n this.state.loading = false;\n };\n\n retrieveServerGroup().then(() => {\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport _ from 'lodash';\n\nexport const ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.oracle.serverGroup.transformer';\nexport const name = ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER, []).factory('oracleServerGroupTransformer', [\n '$q',\n function ($q) {\n const PROVIDER = 'oracle';\n\n function normalizeServerGroup(serverGroup) {\n return $q.when(serverGroup);\n }\n\n function convertServerGroupCommandToDeployConfiguration(base) {\n const command = _.defaults({ backingData: [], viewState: [] }, base);\n command.cloudProvider = PROVIDER;\n return command;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup,\n };\n },\n]);\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './helpContents/oracleHelpContents';\nimport { ORACLE_IMAGE_IMAGE_READER } from './image/image.reader';\nimport { ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { ORACLE_LOAD_BALANCER_CREATE_CONTROLLER } from './loadBalancer/configure/createLoadBalancer.controller';\nimport { ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { ORACLE_LOAD_BALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport { ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE } from './pipeline/stages/bake/ociBakeStage';\nimport { ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE } from './pipeline/stages/destroyAsg/destroyAsgStage';\nimport { ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE } from './pipeline/stages/disableAsg/disableAsgStage';\nimport { ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE } from './pipeline/stages/findAmi/findAmiStage';\nimport { ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE } from './pipeline/stages/findImageFromTags/oracleFindImageFromTagsStage';\nimport { ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE } from './pipeline/stages/resizeAsg/resizeAsgStage';\nimport { ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/scaleDownClusterStage';\nimport { ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/shrinkClusterStage';\nimport { ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER } from './securityGroup/configure/createSecurityGroup.controller';\nimport { ORACLE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE } from './serverGroup/configure/serverGroup.configure.module';\nimport { ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER } from './serverGroup/configure/wizard/cloneServerGroup.controller';\nimport { ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER } from './serverGroup/details/serverGroupDetails.controller';\nimport { ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\n\nexport const ORACLE_MODULE = 'spinnaker.oracle';\nmodule(ORACLE_MODULE, [\n // Pipeline\n ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE,\n ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE,\n ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE,\n ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE,\n ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE,\n ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE,\n ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE,\n ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE,\n\n // Load Balancers\n ORACLE_LOAD_BALANCER_TRANSFORMER,\n ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER,\n ORACLE_LOAD_BALANCER_CREATE_CONTROLLER,\n\n // Server Groups\n ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE,\n ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER,\n ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER,\n // Images\n ORACLE_IMAGE_IMAGE_READER,\n // Instances\n ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n // Firewalls\n ORACLE_SECURITYGROUP_SECURITYGROUP_READER,\n ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER,\n]).config(function () {\n CloudProviderRegistry.registerProvider('oracle', {\n name: 'Oracle',\n image: {\n reader: 'oracleImageReader',\n },\n loadBalancer: {\n transformer: 'oracleLoadBalancerTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetail.html'),\n detailsController: 'oracleLoadBalancerDetailCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/createLoadBalancer.html'),\n createLoadBalancerController: 'oracleCreateLoadBalancerCtrl',\n },\n serverGroup: {\n transformer: 'oracleServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'oracleServerGroupDetailsCtrl',\n commandBuilder: 'oracleServerGroupCommandBuilder',\n cloneServerGroupController: 'oracleCloneServerGroupCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n configurationService: 'oracleServerGroupConfigurationService',\n },\n instance: {\n detailsController: 'oracleInstanceDetailsCtrl',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n },\n securityGroup: {\n reader: 'oracleSecurityGroupReader',\n transformer: 'oracleSecurityGroupTransformer',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'oracleCreateSecurityGroupCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('oracle', []);\n"],"names":["key","value","forEach","entry","HelpContentsRegistry","register","ORACLE_IMAGE_IMAGE_READER","module","factory","findImages","params","REST","query","get","catch","getImage","imageId","region","credentials","path","provider","then","results","length","ORACLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER","LoadBalancingPolicy","LoadBalancingPolicy2","UIROUTER_ANGULARJS","controller","$scope","$q","app","instance","application","retrieveInstance","instanceSummary","account","serverGroups","data","some","serverGroup","instances","possibleInstance","id","instanceId","name","InstanceReader","getInstanceDetails","instanceDetails","Object","assign","isStandalone","all","ready","$$destroyed","onRefresh","OracleProviderSettings","SETTINGS","providers","oracle","defaults","resetToOriginal","resetProvider","OracleDefaultProviderSettings","bakeryRegions","ORACLE_LOAD_BALANCER_TRANSFORMER","service","normalizeLoadBalancer","loadBalancer","resolve","convertLoadBalancerForEditing","listeners","keys","lis","isSsl","sslConfiguration","cloudProvider","shape","isPrivate","subnetIds","subnets","map","subnet","certificates","hostnames","backendSets","freeformTags","loadBalancerType","type","securityGroups","vpcId","subnetTypeMap","constructNewLoadBalancerTemplate","defaultCredentials","defaultRegions","constructNewListenerTemplate","port","protocol","defaultBackendSetName","constructNewBackendSetTemplate","policy","ROUND_ROBIN","healthChecker","urlPath","backends","isNew","constructNewSSLConfiguration","certificateName","verifyDepth","verifyPeerCertificates","constructNewCertificateTemplate","publicCertificate","caCertificate","privateKey","passphrase","OracleLoadBalancerController","constructor","$uibModalInstance","$state","oracleLoadBalancerTransformer","this","shapes","loadBalancingPolicies","k","pages","properties","state","accountsLoaded","submitting","numSubnetsAllowed","initializeController","onApplicationRefresh","close","newStateParams","accountId","includes","go","onTaskComplete","loadBalancers","refresh","onNextRefresh","initializeCreateMode","AccountService","listAccounts","accounts","accountUpdated","loadVnets","loadSubnets","initControllerFromLoadBalancerCmd","calcNumSubnetsAllowed","loadBalancerCmd","push","b","nameParts","NameUtils","parseLoadBalancerName","stack","detail","freeFormDetails","prevBackendSetNames","prevCertNames","updateName","updateLoadBalancerNames","taskMonitor","TaskMonitor","title","modalInstance","accountLoadBalancerNamesByRegion","getDataSource","existingLoadBalancerNames","validateBeforeSubmit","propertiesValid","listenersValid","listenersUniqueProtocolPort","listenersBackendSetsExist","listenersCertificatesExist","selectedSubnets","countsMap","reduce","counts","listener","protocolPort","filter","find","backendSet","cert","getName","lb","lbName","join","trimEnd","loadRegionsForAccount","regionUpdated","updateVnets","getRegionsForAccount","regions","NetworkReader","listNetworksByProvider","vnets","allVnets","SubnetReader","listSubnetsByProvider","allSubnets","filteredVnets","vnet","updateSubnets","network","filteredSubnets","vcnId","filteredSubnetsByType","cloneDeep","selectedVnetChanged","selectedVnet","selectedSubnetsChanged","selectedSubnet","availabilityDomain","selectedSubnetRemoved","isPrivateChanged","listenerIsSslChanged","getSubnetLimit","removeListener","idx","splice","addListener","removeBackendSet","isBackendSetRemovable","hasListener","addBackendSet","backendSetNameChanged","prevName","isCertRemovable","removeCert","addCert","certNameChanged","submit","descriptor","clusterName","resourceGroupName","loadBalancerName","loadBalancerId","backendSetsMap","listenersMap","certMap","subnetType","LoadBalancerWriter","upsertLoadBalancer","cancel","dismiss","$inject","ORACLE_LOAD_BALANCER_CREATE_CONTROLLER","ANGULAR_UI_BOOTSTRAP","OracleLoadBalancerDetailController","$uibModal","securityGroupReader","loadBalancerReader","loading","firewallsLabel","FirewallLabels","extractLoadBalancer","test","getLoadBalancerDetails","details","filtered","elb","securityGroupId","match","getApplicationSecurityGroup","sortBy","when","editLoadBalancer","open","templateUrl","controllerAs","size","angular","copy","deleteLoadBalancer","command","ConfirmationModalService","confirm","header","buttonText","taskMonitorConfig","submitMethod","ORACLE_LOAD_BALANCER_DETAIL_CONTROLLER","ORACLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER","EXECUTION_DETAILS_SECTION_SERVICE","$log","$stateParams","executionDetailsSectionService","$interpolate","configSections","initialized","detailsSection","stage","context","cloudProviderType","roscoMode","feature","bakeryDetailUrl","roscoDetailUrl","initialize","synchronizeSection","$on","ORACLE_PIPELINE_STAGES_BAKE_OCIBAKESTAGE","config","Registry","pipeline","registerStage","provides","label","description","executionDetailsUrl","executionLabelComponent","BakeExecutionLabel","supportsCustomTimeout","validators","fieldName","fieldLabel","restartable","extendedAttributes","user","AuthenticationService","getAuthenticatedUser","getBaseOsDescription","baseOsOption","shortDescription","accountName","Array","isArray","addExtendedAttribute","PipelineTemplates","addExtendedAttributes","extendedAttribute","result","removeExtendedAttribute","showExtendedAttributes","viewState","$watch","providerSelected","BakeryReader","getBaseOsOptions","baseOsOptions","baseImages","baseOs","upgrade","ORACLE_PIPELINE_STAGES_DESTROYASG_DESTROYASGSTAGE","executionStepLabelUrl","message","targets","StageConstants","TARGET_LIST","regionsLoaded","target","val","init","ORACLE_PIPELINE_STAGES_DISABLEASG_DISABLEASGSTAGE","gce","ORACLE_PIPELINE_STAGES_FINDAMI_FINDAMISTAGE","selectionStrategies","selectionStrategy","isUndefined","onlyEnabled","ORACLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ORACLEFINDIMAGEFROMTAGSSTAGE","executionConfigSections","packageName","tags","getRegions","ORACLE_PIPELINE_STAGES_RESIZEASG_RESIZEASGSTAGE","resizeTargets","scaleActions","resizeTypes","capacity","action","resizeType","updateResizeType","scalePct","scaleNum","ORACLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_SCALEDOWNCLUSTERSTAGE","strategy","remainingFullSizeServerGroups","allowScaleDownActive","preferLargerOverNewer","pluralize","str","toString","ORACLE_PIPELINE_STAGES_SHRINKCLUSTER_SHRINKCLUSTERSTAGE","shrinkToSize","allowDeleteActive","retainLargerOverNewer","ORACLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER","firewallLabel","ORACLE_SECURITYGROUP_SECURITYGROUP_READER","resolveIndexedSecurityGroup","indexedSecurityGroups","container","ORACLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER","addVcnNameToSecurityGroup","securityGroup","vcns","matches","vcn","vpcName","normalizeSecurityGroup","_","partial","ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE","SECURITY_GROUP_READER","oracleImageReader","loadAndSelectRegions","backingData","selectedAccountDetails","credentialsKeyedByAccount","loadAvailabilityDomains","getAvailabilityZonesForAccountAndRegion","availDoms","availabilityDomains","av","loadLoadBalancers","configureCommand","defaultRegion","getCredentialsKeyedByAccount","getAllSecurityGroups","networks","images","availDomains","zone","filterSubnets","accountOnChange","regionOnChange","availabilityDomainOnChange","subnetId","seclists","vpcOnChange","subnetOnChange","mySecGroups","secLists","securityListIds","sid","sgRef","getSecurityGroupDetails","sgd","findBackendSetsByLoadBalancerId","lb2","bsetArray","arr","bsetName","bset","findLoadBalListenersByBackendSetName","backendSetName","lisName","loadBalancerOnChange","backendSetOnChange","shapesMap","image","compatibleShapes","getShapes","allShapes","uniqBy","flatten","values","ORACLE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_BASICSETTINGS_CONTROLLER","IMAGE_READER","$uibModalStack","$controller","imageReader","extend","ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_COMPONENT","component","bindings","noop","ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_MODULE","ORACLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE","buildNewServerGroupCommand","defaultAccount","desired","selectedProvider","mode","disableStrategySelection","buildServerGroupCommandFromExisting","serverGroupName","parseServerGroupName","launchConfig","sshAuthorizedKeys","buildNewServerGroupCommandForPipeline","requiresTemplateSelection","buildServerGroupCommandFromPipeline","originalCluster","pipelineCluster","viewOverrides","disableImageSelection","submitButtonLabel","templatingEnabled","ORACLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_CONTROLLER","serverGroupWriter","serverGroupCommand","oracleServerGroupConfigurationService","loaded","basicSettings","instanceType","networkSettings","templateSelection","templateSelectionText","copied","notCopied","isValid","form","$valid","ModalWizard","isComplete","showSubmitButton","allPagesVisited","cloneServerGroup","templateSelected","ORACLE_COMMON_FOOTER_COMPONENT","verification","ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT","SERVER_GROUP_WRITER","formMethods","newSize","formIsValid","every","resizeCapacityForm","resizeServerGroup","min","max","targetSize","interestingHealthProviderNames","reason","ORACLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER","attributes","platformHealthOnlyShowOverride","platformHealthOnly","verified","resize","ORACLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER","disabledServerGroups","sort","a","localeCompare","rollbackType","rollbackContext","rollbackServerGroupName","restoreServerGroupName","rollback","rollbackServerGroup","ORACLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_CONTROLLER","retrieveServerGroup","ServerGroupReader","getServerGroup","cancelLoader","retrieveNetwork","retrieveSubnet","retrieveImage","chain","head","getSubnetByIdAndProvider","destroyServerGroup","serverGroup2","stateParams","sgSummary","cluster","clusters","isDisabled","disableServerGroup","confirmationModalParams","platformHealthType","askForReason","ServerGroupWarningMessageService","addDisableWarningMessage","enableServerGroup","ORACLE_SERVERGROUP_SERVERGROUP_TRANSFORMER","convertServerGroupCommandToDeployConfiguration","base","normalizeServerGroup","ORACLE_MODULE","CloudProviderRegistry","registerProvider","reader","transformer","detailsTemplateUrl","detailsController","createLoadBalancerTemplateUrl","createLoadBalancerController","commandBuilder","cloneServerGroupController","cloneServerGroupTemplateUrl","configurationService","createSecurityGroupTemplateUrl","createSecurityGroupController","DeploymentStrategyRegistry"],"mappings":"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"}
|