@spinnaker/oracle 2026.2.2 → 2026.3.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.
Files changed (138) hide show
  1. package/dist/image/image.reader.d.ts +4 -2
  2. package/dist/index.d.ts +3 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/instance/details/OracleInstanceDetails.d.ts +2 -0
  6. package/dist/loadBalancer/details/OracleLoadBalancerDetails.d.ts +10 -0
  7. package/dist/loadBalancer/loadBalancer.transformer.d.ts +4 -5
  8. package/dist/oracle.provider.d.ts +3 -0
  9. package/dist/pipeline/stages/bake/OracleBakeStageConfig.d.ts +50 -0
  10. package/dist/pipeline/stages/destroyAsg/OracleDestroyAsgStageConfig.d.ts +26 -0
  11. package/dist/pipeline/stages/disableAsg/OracleDisableAsgStageConfig.d.ts +26 -0
  12. package/dist/pipeline/stages/findAmi/OracleFindAmiStageConfig.d.ts +19 -0
  13. package/dist/pipeline/stages/findImageFromTags/OracleFindImageFromTagsStageConfig.d.ts +16 -0
  14. package/dist/pipeline/stages/resizeAsg/OracleResizeAsgStageConfig.d.ts +26 -0
  15. package/dist/pipeline/stages/scaleDownCluster/OracleScaleDownClusterStageConfig.d.ts +20 -0
  16. package/dist/pipeline/stages/shrinkCluster/OracleShrinkClusterStageConfig.d.ts +19 -0
  17. package/dist/securityGroup/details/OracleSecurityGroupDetails.d.ts +2 -0
  18. package/dist/securityGroup/securityGroup.reader.d.ts +3 -2
  19. package/dist/securityGroup/securityGroup.transformer.d.ts +3 -2
  20. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +41 -2
  21. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +8 -2
  22. package/dist/serverGroup/details/OracleServerGroupDetails.d.ts +6 -0
  23. package/dist/serverGroup/serverGroup.transformer.d.ts +4 -2
  24. package/package.json +5 -9
  25. package/src/image/image.reader.js +4 -13
  26. package/src/index.ts +4 -1
  27. package/src/instance/details/OracleInstanceDetails.tsx +21 -0
  28. package/src/loadBalancer/details/OracleLoadBalancerDetails.spec.tsx +48 -0
  29. package/src/loadBalancer/details/OracleLoadBalancerDetails.tsx +84 -0
  30. package/src/loadBalancer/loadBalancer.transformer.ts +5 -11
  31. package/src/oracle.provider.spec.ts +45 -0
  32. package/src/oracle.provider.ts +85 -0
  33. package/src/pipeline/stages/bake/OracleBakeStageConfig.tsx +325 -0
  34. package/src/pipeline/stages/destroyAsg/OracleDestroyAsgStageConfig.tsx +87 -0
  35. package/src/pipeline/stages/disableAsg/OracleDisableAsgStageConfig.tsx +105 -0
  36. package/src/pipeline/stages/findAmi/OracleFindAmiStageConfig.tsx +103 -0
  37. package/src/pipeline/stages/findImageFromTags/OracleFindImageFromTagsStageConfig.tsx +90 -0
  38. package/src/pipeline/stages/resizeAsg/OracleResizeAsgStageConfig.tsx +225 -0
  39. package/src/pipeline/stages/scaleDownCluster/OracleScaleDownClusterStageConfig.tsx +122 -0
  40. package/src/pipeline/stages/shrinkCluster/OracleShrinkClusterStageConfig.tsx +136 -0
  41. package/src/securityGroup/details/OracleSecurityGroupDetails.tsx +19 -0
  42. package/src/securityGroup/securityGroup.reader.js +3 -11
  43. package/src/securityGroup/securityGroup.transformer.js +8 -15
  44. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +71 -87
  45. package/src/serverGroup/configure/serverGroupConfiguration.service.js +210 -214
  46. package/src/serverGroup/details/OracleServerGroupDetails.spec.ts +47 -0
  47. package/src/serverGroup/details/OracleServerGroupDetails.tsx +106 -0
  48. package/src/serverGroup/serverGroup.transformer.js +11 -23
  49. package/dist/common/footer.component.d.ts +0 -2
  50. package/dist/instance/details/instance.details.controller.d.ts +0 -2
  51. package/dist/loadBalancer/configure/createLoadBalancer.controller.d.ts +0 -87
  52. package/dist/loadBalancer/details/loadBalancerDetail.controller.d.ts +0 -21
  53. package/dist/oracle.module.d.ts +0 -2
  54. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +0 -2
  55. package/dist/pipeline/stages/bake/ociBakeStage.d.ts +0 -2
  56. package/dist/pipeline/stages/destroyAsg/destroyAsgStage.d.ts +0 -2
  57. package/dist/pipeline/stages/disableAsg/disableAsgStage.d.ts +0 -2
  58. package/dist/pipeline/stages/findAmi/findAmiStage.d.ts +0 -2
  59. package/dist/pipeline/stages/findImageFromTags/oracleFindImageFromTagsStage.d.ts +0 -2
  60. package/dist/pipeline/stages/resizeAsg/resizeAsgStage.d.ts +0 -2
  61. package/dist/pipeline/stages/scaleDownCluster/scaleDownClusterStage.d.ts +0 -2
  62. package/dist/pipeline/stages/shrinkCluster/shrinkClusterStage.d.ts +0 -2
  63. package/dist/securityGroup/configure/createSecurityGroup.controller.d.ts +0 -2
  64. package/dist/serverGroup/configure/serverGroup.configure.module.d.ts +0 -2
  65. package/dist/serverGroup/configure/wizard/basicSettings/basicSettings.controller.d.ts +0 -2
  66. package/dist/serverGroup/configure/wizard/capacity/capacitySelector.component.d.ts +0 -2
  67. package/dist/serverGroup/configure/wizard/cloneServerGroup.controller.d.ts +0 -2
  68. package/dist/serverGroup/details/resize/resizeCapacity.component.d.ts +0 -2
  69. package/dist/serverGroup/details/resize/resizeServerGroup.controller.d.ts +0 -2
  70. package/dist/serverGroup/details/rollback/rollbackServerGroup.controller.d.ts +0 -2
  71. package/dist/serverGroup/details/serverGroupDetails.controller.d.ts +0 -2
  72. package/src/common/footer.component.html +0 -7
  73. package/src/common/footer.component.js +0 -18
  74. package/src/common/ocid/ocid.component.js +0 -15
  75. package/src/common/ocid/ocid.template.html +0 -10
  76. package/src/common/ocid/truncateOcid.filter.js +0 -14
  77. package/src/instance/details/instance.details.controller.js +0 -56
  78. package/src/instance/details/instanceDetails.html +0 -31
  79. package/src/loadBalancer/configure/backendSets.html +0 -67
  80. package/src/loadBalancer/configure/certificates.html +0 -63
  81. package/src/loadBalancer/configure/createLoadBalancer.controller.spec.ts +0 -201
  82. package/src/loadBalancer/configure/createLoadBalancer.controller.ts +0 -540
  83. package/src/loadBalancer/configure/createLoadBalancer.html +0 -25
  84. package/src/loadBalancer/configure/createLoadBalancerProperties.html +0 -167
  85. package/src/loadBalancer/configure/editLoadBalancer.html +0 -26
  86. package/src/loadBalancer/configure/listeners.html +0 -88
  87. package/src/loadBalancer/details/loadBalancerDetail.controller.spec.ts +0 -62
  88. package/src/loadBalancer/details/loadBalancerDetail.controller.ts +0 -163
  89. package/src/loadBalancer/details/loadBalancerDetail.html +0 -100
  90. package/src/oracle.module.ts +0 -94
  91. package/src/pipeline/disableAsg/disableAsgStage.html +0 -11
  92. package/src/pipeline/disableAsg/disableAsgStage.js +0 -62
  93. package/src/pipeline/disableAsg/disableAsgStepLabel.html +0 -1
  94. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +0 -38
  95. package/src/pipeline/stages/bake/bakeExecutionDetails.html +0 -52
  96. package/src/pipeline/stages/bake/bakeStage.html +0 -109
  97. package/src/pipeline/stages/bake/ociBakeStage.js +0 -147
  98. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +0 -9
  99. package/src/pipeline/stages/destroyAsg/destroyAsgStage.js +0 -64
  100. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +0 -1
  101. package/src/pipeline/stages/disableAsg/disableAsgStage.html +0 -11
  102. package/src/pipeline/stages/disableAsg/disableAsgStage.js +0 -63
  103. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +0 -1
  104. package/src/pipeline/stages/findAmi/findAmiStage.html +0 -20
  105. package/src/pipeline/stages/findAmi/findAmiStage.js +0 -82
  106. package/src/pipeline/stages/findImageFromTags/findImageFromTagsExecutionDetails.html +0 -44
  107. package/src/pipeline/stages/findImageFromTags/findImageFromTagsStage.html +0 -11
  108. package/src/pipeline/stages/findImageFromTags/oracleFindImageFromTagsStage.js +0 -36
  109. package/src/pipeline/stages/resizeAsg/resizeAsgStage.html +0 -89
  110. package/src/pipeline/stages/resizeAsg/resizeAsgStage.js +0 -101
  111. package/src/pipeline/stages/resizeAsg/resizeAsgStepLabel.html +0 -1
  112. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.html +0 -35
  113. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.js +0 -75
  114. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +0 -34
  115. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.js +0 -71
  116. package/src/securityGroup/configure/createSecurityGroup.controller.js +0 -19
  117. package/src/securityGroup/configure/createSecurityGroup.html +0 -19
  118. package/src/serverGroup/configure/serverGroup.configure.module.js +0 -15
  119. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +0 -13
  120. package/src/serverGroup/configure/wizard/basicSettings/basicSettings.controller.js +0 -35
  121. package/src/serverGroup/configure/wizard/basicSettings/basicSettings.html +0 -134
  122. package/src/serverGroup/configure/wizard/capacity/capacity.html +0 -7
  123. package/src/serverGroup/configure/wizard/capacity/capacitySelector.component.html +0 -13
  124. package/src/serverGroup/configure/wizard/capacity/capacitySelector.component.js +0 -17
  125. package/src/serverGroup/configure/wizard/cloneServerGroup.controller.js +0 -109
  126. package/src/serverGroup/configure/wizard/instanceType/instanceType.html +0 -29
  127. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html +0 -44
  128. package/src/serverGroup/configure/wizard/network/networkSettings.html +0 -15
  129. package/src/serverGroup/configure/wizard/serverGroupWizard.html +0 -40
  130. package/src/serverGroup/configure/wizard/templateSelection/templateSelection.html +0 -9
  131. package/src/serverGroup/details/resize/resizeCapacity.component.html +0 -36
  132. package/src/serverGroup/details/resize/resizeCapacity.component.js +0 -42
  133. package/src/serverGroup/details/resize/resizeServerGroup.controller.js +0 -62
  134. package/src/serverGroup/details/resize/resizeServerGroup.html +0 -33
  135. package/src/serverGroup/details/rollback/rollbackServerGroup.controller.js +0 -73
  136. package/src/serverGroup/details/rollback/rollbackServerGroup.html +0 -41
  137. package/src/serverGroup/details/serverGroupDetails.controller.js +0 -230
  138. package/src/serverGroup/details/serverGroupDetails.html +0 -94
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":["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","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","LoadBalancingPolicy","OracleProviderSettings","SETTINGS","providers","oracle","defaults","resetToOriginal","resetProvider","OracleDefaultProviderSettings","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","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","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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"}
1
+ {"version":3,"file":"index.js","sources":["../src/helpContents/oracleHelpContents.ts","../src/image/image.reader.js","../src/instance/details/OracleInstanceDetails.tsx","../src/loadBalancer/details/OracleLoadBalancerDetails.tsx","../src/domain/IOracleLoadBalancer.ts","../src/oracle.settings.ts","../src/loadBalancer/loadBalancer.transformer.ts","../src/pipeline/stages/bake/OracleBakeStageConfig.tsx","../src/pipeline/stages/destroyAsg/OracleDestroyAsgStageConfig.tsx","../src/pipeline/stages/disableAsg/OracleDisableAsgStageConfig.tsx","../src/pipeline/stages/findAmi/OracleFindAmiStageConfig.tsx","../src/pipeline/stages/findImageFromTags/OracleFindImageFromTagsStageConfig.tsx","../src/pipeline/stages/resizeAsg/OracleResizeAsgStageConfig.tsx","../src/pipeline/stages/scaleDownCluster/OracleScaleDownClusterStageConfig.tsx","../src/pipeline/stages/shrinkCluster/OracleShrinkClusterStageConfig.tsx","../src/securityGroup/details/OracleSecurityGroupDetails.tsx","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/details/OracleServerGroupDetails.tsx","../src/serverGroup/serverGroup.transformer.js","../src/oracle.provider.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 { REST } from '@spinnaker/core';\n\nexport class OracleImageReader {\n findImages(params) {\n return REST('/images/find')\n .query(params)\n .get()\n .catch(function () {\n return [];\n });\n }\n\n 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","import React from 'react';\nimport { CollapsibleSection, timestamp } from '@spinnaker/core';\n\nexport function OracleInstanceDetails({ instance }: any) {\n return (\n <CollapsibleSection heading=\"Instance Information\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Launched</dt>\n <dd>{instance.launchTime ? timestamp(instance.launchTime) : '(Unknown)'}</dd>\n <dt>In</dt>\n <dd>{instance.availabilityZone}</dd>\n <dt>Type</dt>\n <dd>{instance.instanceType}</dd>\n <dt>Server Group</dt>\n <dd>{instance.serverGroup}</dd>\n <dt>Network</dt>\n <dd>{instance.network}</dd>\n </dl>\n </CollapsibleSection>\n );\n}\n","import React, { useEffect } from 'react';\nimport { AccountTag, CollapsibleSection, useDataSource } from '@spinnaker/core';\n\nexport function useOracleLoadBalancerDetails({ app, loadBalancerParams, autoClose }: any) {\n const { data: loadBalancers, loaded, refresh, error: loadBalancersError } = useDataSource<any[]>(\n app.getDataSource('loadBalancers'),\n );\n const loading = !loaded;\n const loadBalancer = loading\n ? undefined\n : (loadBalancers || []).find(\n (test: any) =>\n test.name === loadBalancerParams.name &&\n test.region === loadBalancerParams.region &&\n test.account === loadBalancerParams.accountId,\n );\n\n useEffect(() => {\n if (!loading && !loadBalancersError && !loadBalancer) {\n autoClose();\n }\n }, [autoClose, loadBalancer, loadBalancersError, loading]);\n\n return {\n data: loadBalancer,\n loading,\n error: loadBalancersError || (!loading && !loadBalancer ? 'Load balancer not found' : undefined),\n refetch: refresh,\n };\n}\n\nfunction OracleLoadBalancerInformationSection({ loadBalancer }: any) {\n return (\n <CollapsibleSection heading=\"Load Balancer Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Created</dt>\n <dd>{loadBalancer.timeCreated}</dd>\n <dt>In</dt>\n <dd>\n <AccountTag account={loadBalancer.account} /> {loadBalancer.region}\n </dd>\n <dt>Subnets</dt>\n <dd>{(loadBalancer.subnets || []).map((subnet: any) => subnet.name).join(', ')}</dd>\n <dt>Public IP</dt>\n <dd>{(loadBalancer.ipAddresses || []).map((ip: any) => ip.ipAddress).join(', ')}</dd>\n </dl>\n </CollapsibleSection>\n );\n}\n\nfunction OracleLoadBalancerBackendSetsSection({ loadBalancer }: any) {\n return (\n <CollapsibleSection heading=\"Backend Sets\">\n {(Object.values(loadBalancer.backendSets || {}) as any[]).map((backendSet: any) => (\n <dl key={backendSet.name || backendSet.policy}>\n <dt>{backendSet.name}</dt>\n <dd>{backendSet.policy}</dd>\n <dd>Health Check: {backendSet.healthChecker?.urlPath}</dd>\n </dl>\n ))}\n </CollapsibleSection>\n );\n}\n\nfunction OracleLoadBalancerListenersSection({ loadBalancer }: any) {\n return (\n <CollapsibleSection heading=\"Listeners\">\n <dl>\n <dt>Listener - Backend Set</dt>\n {(Object.values(loadBalancer.listeners || {}) as any[]).map((listener: any) => (\n <dd key={`${listener.protocol}-${listener.port}`}>\n {listener.protocol}:{listener.port} - {listener.defaultBackendSetName}\n </dd>\n ))}\n </dl>\n </CollapsibleSection>\n );\n}\n\nexport const OracleLoadBalancerDetailsSections = [\n OracleLoadBalancerInformationSection,\n OracleLoadBalancerBackendSetsSection,\n OracleLoadBalancerListenersSection,\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 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): Promise<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 Promise.resolve(loadBalancer);\n }\n\n public convertLoadBalancerForEditing(loadBalancer: any): any {\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: any) => 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): any {\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","import React from 'react';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport {\n AccountService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n ExecutionDetailsTasks,\n HelpField,\n Registry,\n StageConfigField,\n} from '@spinnaker/core';\n\ninterface IBaseOsOption {\n id: string;\n shortDescription?: string;\n detailedDescription?: string;\n}\n\ninterface IOracleBakeStageState {\n accounts: IAccount[];\n baseOsOptions: IBaseOsOption[];\n extendedAttributeKey: string;\n extendedAttributeValue: string;\n loading: boolean;\n}\n\nfunction baseOsDescription(baseOsOption: IBaseOsOption): string {\n return baseOsOption.id + (baseOsOption.shortDescription ? ` (${baseOsOption.shortDescription})` : '');\n}\n\nexport class OracleBakeStageConfig extends React.Component<IStageConfigProps, IOracleBakeStageState> {\n private mounted = false;\n\n public state: IOracleBakeStageState = {\n accounts: [],\n baseOsOptions: [],\n extendedAttributeKey: '',\n extendedAttributeValue: '',\n loading: true,\n };\n\n public componentDidMount(): void {\n this.mounted = true;\n const stage = this.props.stage as any;\n if (!stage.cloudProvider) {\n this.props.updateStageField({ cloudProvider: 'oracle', cloudProviderType: 'oracle' });\n }\n\n Promise.all([BakeryReader.getBaseOsOptions('oracle'), AccountService.listAccounts('oracle')]).then(\n ([baseOsOptions, accounts]) => {\n if (!this.mounted) {\n return;\n }\n\n const changes: Record<string, any> = {};\n if (!stage.user) {\n changes.user = AuthenticationService.getAuthenticatedUser()?.name;\n }\n if (!stage.upgrade) {\n changes.upgrade = true;\n }\n if (!stage.baseOs && baseOsOptions.baseImages.length > 0) {\n changes.baseOs = baseOsOptions.baseImages[0].id;\n }\n if (Object.keys(changes).length) {\n this.props.updateStageField(changes);\n }\n\n if (stage.accountName) {\n this.loadRegionForAccount(stage.accountName);\n }\n\n this.setState({ accounts, baseOsOptions: baseOsOptions.baseImages, loading: false });\n },\n );\n }\n\n public componentWillUnmount(): void {\n this.mounted = false;\n }\n\n private loadRegionForAccount(accountName: string): void {\n AccountService.getRegionsForAccount(accountName).then((regions) => {\n if (this.mounted && Array.isArray(regions) && regions.length) {\n this.props.updateStageField({ region: regions[0].name });\n }\n });\n }\n\n private accountChanged = (accountName: string): void => {\n this.props.updateStageField({ accountName });\n this.loadRegionForAccount(accountName);\n };\n\n private updateExtendedAttribute(key: string, value: string): void {\n const stage = this.props.stage as any;\n this.props.updateStageField({ extendedAttributes: { ...(stage.extendedAttributes || {}), [key]: value } });\n }\n\n private removeExtendedAttribute(key: string): void {\n const stage = this.props.stage as any;\n const extendedAttributes = { ...(stage.extendedAttributes || {}) };\n delete extendedAttributes[key];\n this.props.updateStageField({ extendedAttributes });\n }\n\n private addExtendedAttribute = (): void => {\n const key = this.state.extendedAttributeKey.trim();\n if (!key) {\n return;\n }\n this.updateExtendedAttribute(key, this.state.extendedAttributeValue);\n this.setState({ extendedAttributeKey: '', extendedAttributeValue: '' });\n };\n\n public render() {\n if (this.state.loading) {\n return <div className=\"horizontal center middle\">Loading...</div>;\n }\n\n const stage = this.props.stage as any;\n const extendedAttributes = stage.extendedAttributes || {};\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Oracle Account\" helpKey=\"oracle.pipeline.config.bake.account_name\">\n <select\n className=\"form-control input-sm\"\n onChange={(event) => this.accountChanged(event.target.value)}\n value={stage.accountName || ''}\n >\n <option value=\"\" />\n {this.state.accounts.map((account) => (\n <option key={account.name} value={account.name}>\n {account.name}\n </option>\n ))}\n </select>\n </StageConfigField>\n <StageConfigField label=\"Region\" helpKey=\"oracle.pipeline.config.bake.regions\">\n <input className=\"form-control input-sm\" readOnly={true} value={stage.region || ''} />\n </StageConfigField>\n <StageConfigField label=\"Base Image\" helpKey=\"oracle.pipeline.config.bake.baseOsOption\">\n {this.state.baseOsOptions.map((baseImage) => (\n <div className=\"radio\" key={baseImage.id}>\n <label>\n <input\n checked={stage.baseOs === baseImage.id}\n onChange={() => this.props.updateStageField({ baseOs: baseImage.id })}\n type=\"radio\"\n />\n {baseOsDescription(baseImage)} <HelpField content={baseImage.detailedDescription} />\n </label>\n </div>\n ))}\n </StageConfigField>\n <StageConfigField label=\"Image Name\" helpKey=\"oracle.pipeline.config.bake.image_name\">\n <input\n className=\"form-control input-sm\"\n onChange={(event) => this.props.updateStageField({ amiName: event.target.value })}\n value={stage.amiName || ''}\n />\n </StageConfigField>\n <StageConfigField label=\"Package\" helpKey=\"oracle.pipeline.config.bake.package\">\n <input\n className=\"form-control input-sm\"\n onChange={(event) => this.props.updateStageField({ package: event.target.value })}\n value={stage.package || ''}\n />\n </StageConfigField>\n <StageConfigField label=\"Rebake\" helpKey=\"execution.forceRebake\">\n <div className=\"checkbox\" style={{ marginBottom: 0 }}>\n <label>\n <input\n checked={!!stage.rebake}\n onChange={(event) => this.props.updateStageField({ rebake: event.target.checked })}\n type=\"checkbox\"\n />\n Rebake image without regard to the status of any existing bake\n </label>\n </div>\n </StageConfigField>\n <div className=\"form-group\">\n <div className=\"col-md-9 col-md-offset-1\">\n <div className=\"checkbox\">\n <label>\n <input\n checked={!!stage.showAdvancedOptions}\n onChange={(event) => this.props.updateStageField({ showAdvancedOptions: event.target.checked })}\n type=\"checkbox\"\n />\n <strong>Show Advanced Options</strong>\n </label>\n </div>\n </div>\n </div>\n {stage.showAdvancedOptions && (\n <>\n <StageConfigField label=\"Template File Name\" helpKey=\"pipeline.config.bake.templateFileName\">\n <input\n className=\"form-control input-sm\"\n onChange={(event) => this.props.updateStageField({ templateFileName: event.target.value })}\n value={stage.templateFileName || ''}\n />\n </StageConfigField>\n <StageConfigField label=\"Var File Name\" helpKey=\"pipeline.config.bake.varFileName\">\n <input\n className=\"form-control input-sm\"\n onChange={(event) => this.props.updateStageField({ varFileName: event.target.value })}\n value={stage.varFileName || ''}\n />\n </StageConfigField>\n <StageConfigField label=\"Extended Attributes\" helpKey=\"pipeline.config.bake.extendedAttributes\">\n <table className=\"table table-condensed packed\">\n <thead>\n <tr>\n <th style={{ width: '40%' }}>Key</th>\n <th style={{ width: '60%' }}>Value</th>\n <th className=\"text-right\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {Object.keys(extendedAttributes).map((key) => (\n <tr key={key}>\n <td>\n <strong className=\"small\">{key}</strong>\n </td>\n <td>\n <input\n className=\"form-control input-sm\"\n onChange={(event) => this.updateExtendedAttribute(key, event.target.value)}\n value={extendedAttributes[key]}\n />\n </td>\n <td className=\"text-right\">\n <a\n className=\"small\"\n href=\"\"\n onClick={(event) => {\n event.preventDefault();\n this.removeExtendedAttribute(key);\n }}\n >\n Remove\n </a>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <tr>\n <td>\n <input\n className=\"form-control input-sm\"\n onChange={(event) => this.setState({ extendedAttributeKey: event.target.value })}\n placeholder=\"Key\"\n value={this.state.extendedAttributeKey}\n />\n </td>\n <td>\n <input\n className=\"form-control input-sm\"\n onChange={(event) => this.setState({ extendedAttributeValue: event.target.value })}\n placeholder=\"Value\"\n value={this.state.extendedAttributeValue}\n />\n </td>\n <td className=\"text-right\">\n <button\n className=\"btn btn-block btn-sm add-new\"\n onClick={this.addExtendedAttribute}\n type=\"button\"\n >\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add Extended Attribute\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </StageConfigField>\n <StageConfigField label=\"Upgrade\" helpKey=\"oracle.pipeline.config.bake.upgrade\">\n <label className=\"checkbox-inline\">\n <input\n checked={!!stage.upgrade}\n onChange={(event) => this.props.updateStageField({ upgrade: event.target.checked })}\n type=\"checkbox\"\n />\n Perform a package manager upgrade before proceeding with the package installation\n </label>\n </StageConfigField>\n </>\n )}\n </div>\n );\n }\n}\n\nexport const oracleBakeStage = {\n key: 'bake',\n provides: 'bake',\n cloudProvider: 'oracle',\n label: 'Bake',\n description: 'Bakes an image',\n component: OracleBakeStageConfig,\n executionDetailsSections: [ExecutionDetailsTasks],\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\nexport function registerOracleBakeStage() {\n Registry.pipeline.registerStage(oracleBakeStage);\n}\n\nregisterOracleBakeStage();\n","import React, { useEffect, useState } from 'react';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport {\n AccountRegionClusterSelector,\n AccountService,\n Registry,\n StageConfigField,\n StageConstants,\n TargetSelect,\n} from '@spinnaker/core';\n\nexport function OracleDestroyAsgStageConfig(props: IStageConfigProps) {\n const { application, pipeline, stage, stageFieldUpdated, updateStageField } = props;\n const [accounts, setAccounts] = useState<IAccount[]>([]);\n\n useEffect(() => {\n const changes: Record<string, any> = {};\n if (stage.cloudProvider !== 'oracle') {\n changes.cloudProvider = 'oracle';\n }\n if (!stage.credentials && application.defaultCredentials?.oracle) {\n changes.credentials = application.defaultCredentials.oracle;\n }\n if (!stage.regions?.length && application.defaultRegions?.oracle) {\n changes.regions = [application.defaultRegions.oracle];\n }\n if (!stage.target) {\n changes.target = StageConstants.TARGET_LIST[0].val;\n }\n if (Object.keys(changes).length) {\n updateStageField(changes);\n }\n }, []);\n\n useEffect(() => {\n let active = true;\n AccountService.listAccounts('oracle').then((loadedAccounts) => active && setAccounts(loadedAccounts));\n return () => {\n active = false;\n };\n }, []);\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n component={stage}\n onComponentUpdate={stageFieldUpdated}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect\n model={{ target: stage.target }}\n onChange={(target: string) => updateStageField({ target })}\n options={StageConstants.TARGET_LIST}\n />\n </StageConfigField>\n </div>\n );\n}\n\nexport const oracleDestroyAsgStage = {\n key: 'destroyServerGroup',\n provides: 'destroyServerGroup',\n cloudProvider: 'oracle',\n component: OracleDestroyAsgStageConfig,\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\nexport function registerOracleDestroyAsgStage() {\n Registry.pipeline.registerStage(oracleDestroyAsgStage);\n}\n\nregisterOracleDestroyAsgStage();\n","import React, { useEffect, useState } from 'react';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport {\n AccountRegionClusterSelector,\n AccountService,\n PlatformHealthOverride,\n Registry,\n StageConfigField,\n StageConstants,\n TargetSelect,\n} from '@spinnaker/core';\n\nexport function OracleDisableAsgStageConfig(props: IStageConfigProps) {\n const { application, pipeline, stage, stageFieldUpdated, updateStageField } = props;\n const [accounts, setAccounts] = useState<IAccount[]>([]);\n\n useEffect(() => {\n const changes: Record<string, any> = {};\n if (stage.cloudProvider !== 'oracle') {\n changes.cloudProvider = 'oracle';\n }\n if (!stage.credentials && application.defaultCredentials?.oracle) {\n changes.credentials = application.defaultCredentials.oracle;\n }\n if (!stage.regions?.length && application.defaultRegions?.oracle) {\n changes.regions = [application.defaultRegions.oracle];\n }\n if (!stage.target) {\n changes.target = StageConstants.TARGET_LIST[0].val;\n }\n if (\n stage.isNew &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly &&\n stage.interestingHealthProviderNames === undefined\n ) {\n changes.interestingHealthProviderNames = ['Oracle'];\n }\n if (Object.keys(changes).length) {\n updateStageField(changes);\n }\n }, []);\n\n useEffect(() => {\n let active = true;\n AccountService.listAccounts('oracle').then((loadedAccounts) => active && setAccounts(loadedAccounts));\n return () => {\n active = false;\n };\n }, []);\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n component={stage}\n onComponentUpdate={stageFieldUpdated}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect\n model={{ target: stage.target }}\n onChange={(target: string) => updateStageField({ target })}\n options={StageConstants.TARGET_LIST}\n />\n </StageConfigField>\n {application.attributes.platformHealthOnlyShowOverride && (\n <StageConfigField label=\"Task Completion\">\n <PlatformHealthOverride\n interestingHealthProviderNames={stage.interestingHealthProviderNames || []}\n onChange={(interestingHealthProviderNames) => updateStageField({ interestingHealthProviderNames })}\n platformHealthType=\"Oracle\"\n />\n </StageConfigField>\n )}\n </div>\n );\n}\n\nexport const oracleDisableAsgStage = {\n key: 'disableServerGroup',\n provides: 'disableServerGroup',\n cloudProvider: 'oracle',\n component: OracleDisableAsgStageConfig,\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\nexport function registerOracleDisableAsgStage() {\n Registry.pipeline.registerStage(oracleDisableAsgStage);\n}\n\nregisterOracleDisableAsgStage();\n","import React, { useEffect, useState } from 'react';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport { AccountRegionClusterSelector, AccountService, Registry, StageConfigField } from '@spinnaker/core';\n\nconst 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 { label: 'Newest', val: 'NEWEST', description: 'When multiple server groups exist, prefer the newest' },\n { label: 'Oldest', val: 'OLDEST', description: 'When multiple server groups exist, prefer the oldest' },\n { label: 'Fail', val: 'FAIL', description: 'When multiple server groups exist, fail' },\n];\n\nexport function OracleFindAmiStageConfig(props: IStageConfigProps) {\n const { application, stage, stageFieldUpdated, updateStageField } = props;\n const [accounts, setAccounts] = useState<IAccount[]>([]);\n\n useEffect(() => {\n const changes: Record<string, any> = {};\n if (stage.cloudProvider !== 'oracle') {\n changes.cloudProvider = 'oracle';\n }\n if (!stage.credentials && application.defaultCredentials?.oracle) {\n changes.credentials = application.defaultCredentials.oracle;\n }\n if (!stage.regions?.length && application.defaultRegions?.oracle) {\n changes.regions = [application.defaultRegions.oracle];\n }\n if (!stage.selectionStrategy) {\n changes.selectionStrategy = selectionStrategies[0].val;\n }\n if (stage.onlyEnabled === undefined) {\n changes.onlyEnabled = true;\n }\n if (Object.keys(changes).length) {\n updateStageField(changes);\n }\n }, []);\n\n useEffect(() => {\n let active = true;\n AccountService.listAccounts('oracle').then((loadedAccounts) => active && setAccounts(loadedAccounts));\n return () => {\n active = false;\n };\n }, []);\n\n return (\n <div className=\"form-horizontal\">\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n component={stage}\n onComponentUpdate={stageFieldUpdated}\n />\n <StageConfigField label=\"Server Group Selection\">\n <select\n className=\"form-control input-sm\"\n onChange={(event) => updateStageField({ selectionStrategy: event.target.value })}\n value={stage.selectionStrategy || selectionStrategies[0].val}\n >\n {selectionStrategies.map((strategy) => (\n <option key={strategy.val} title={strategy.description} value={strategy.val}>\n {strategy.label}\n </option>\n ))}\n </select>\n </StageConfigField>\n <StageConfigField label=\"Server Group Filters\">\n <label className=\"checkbox-inline\">\n <input\n checked={stage.onlyEnabled !== false}\n onChange={(event) => updateStageField({ onlyEnabled: event.target.checked })}\n type=\"checkbox\"\n />\n Only consider enabled Server Groups\n </label>\n </StageConfigField>\n </div>\n );\n}\n\nexport const oracleFindAmiStage = {\n key: 'findImage',\n provides: 'findImage',\n cloudProvider: 'oracle',\n component: OracleFindAmiStageConfig,\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\nexport function registerOracleFindAmiStage() {\n Registry.pipeline.registerStage(oracleFindAmiStage);\n}\n\nregisterOracleFindAmiStage();\n","import React, { useEffect, useState } from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport {\n BakeryReader,\n ChecklistInput,\n ExecutionDetailsTasks,\n MapEditor,\n Registry,\n StageConfigField,\n} from '@spinnaker/core';\n\nexport function OracleFindImageFromTagsStageConfig({ pipeline, stage, updateStageField }: IStageConfigProps) {\n const [regions, setRegions] = useState<string[]>([]);\n\n useEffect(() => {\n const changes: Record<string, any> = {};\n if (stage.cloudProvider !== 'oracle') {\n changes.cloudProvider = 'oracle';\n }\n if (!stage.packageName) {\n changes.packageName = '*';\n }\n if (!stage.tags) {\n changes.tags = {};\n }\n if (!stage.regions) {\n changes.regions = [];\n }\n if (Object.keys(changes).length) {\n updateStageField(changes);\n }\n }, []);\n\n useEffect(() => {\n let active = true;\n BakeryReader.getRegions('oracle').then((loadedRegions) => active && setRegions(loadedRegions));\n return () => {\n active = false;\n };\n }, []);\n\n return (\n <div className=\"form-horizontal\">\n <StageConfigField label=\"Regions\">\n <ChecklistInput\n inline={true}\n name=\"regions\"\n onChange={(event: any) => updateStageField({ regions: event.target.value })}\n showSelectAll={true}\n stringOptions={regions}\n value={stage.regions || []}\n />\n </StageConfigField>\n <StageConfigField label=\"Pattern\">\n <input\n className=\"form-control input-sm\"\n onChange={(event) => updateStageField({ packageName: event.target.value })}\n value={stage.packageName || ''}\n />\n </StageConfigField>\n <StageConfigField label=\"Tags\">\n <MapEditor\n allowEmpty={true}\n model={stage.tags || {}}\n onChange={(tags) => updateStageField({ tags })}\n pipeline={pipeline}\n />\n </StageConfigField>\n </div>\n );\n}\n\nexport const oracleFindImageFromTagsStage = {\n key: 'findImageFromTags',\n provides: 'findImageFromTags',\n cloudProvider: 'oracle',\n component: OracleFindImageFromTagsStageConfig,\n executionDetailsSections: [ExecutionDetailsTasks],\n validators: [\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'packageName' },\n ],\n};\n\nexport function registerOracleFindImageFromTagsStage() {\n Registry.pipeline.registerStage(oracleFindImageFromTagsStage);\n}\n\nregisterOracleFindImageFromTagsStage();\n","import React, { useEffect, useState } from 'react';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport {\n AccountRegionClusterSelector,\n AccountService,\n PlatformHealthOverride,\n Registry,\n StageConfigField,\n StageConstants,\n TargetSelect,\n} from '@spinnaker/core';\n\nconst 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\nconst resizeTypes = [\n { label: 'Percentage', val: 'pct' },\n { label: 'Incremental', val: 'incr' },\n];\n\nexport function OracleResizeAsgStageConfig(props: IStageConfigProps) {\n const { application, pipeline, stage, stageFieldUpdated, updateStageField } = props;\n const [accounts, setAccounts] = useState<IAccount[]>([]);\n\n useEffect(() => {\n const changes: Record<string, any> = {};\n if (stage.cloudProvider !== 'oracle') {\n changes.cloudProvider = 'oracle';\n changes.cloudProviderType = 'oracle';\n }\n if (!stage.credentials && application.defaultCredentials?.oracle) {\n changes.credentials = application.defaultCredentials.oracle;\n }\n if (!stage.regions?.length && application.defaultRegions?.oracle) {\n changes.regions = [application.defaultRegions.oracle];\n }\n if (!stage.target) {\n changes.target = StageConstants.TARGET_LIST[0].val;\n }\n if (!stage.action) {\n changes.action = stage.resizeType === 'exact' ? 'scale_exact' : scaleActions[0].val;\n }\n if (!stage.resizeType) {\n changes.resizeType = resizeTypes[0].val;\n }\n if (!stage.capacity) {\n changes.capacity = {};\n }\n if (Object.keys(changes).length) {\n updateStageField(changes);\n }\n }, []);\n\n useEffect(() => {\n let active = true;\n AccountService.listAccounts('oracle').then((loadedAccounts) => active && setAccounts(loadedAccounts));\n return () => {\n active = false;\n };\n }, []);\n\n const updateResizeType = (action: string, resizeType = stage.resizeType || resizeTypes[0].val) => {\n if (action === 'scale_exact') {\n updateStageField({ action, resizeType: 'exact', scaleNum: undefined, scalePct: undefined });\n return;\n }\n const nextResizeType = resizeType === 'incr' ? 'incr' : 'pct';\n const changes: Record<string, any> = { action, capacity: {}, resizeType: nextResizeType };\n if (nextResizeType === 'pct') {\n changes.scaleNum = undefined;\n } else {\n changes.scalePct = undefined;\n changes.scaleNum = stage.scaleNum || 0;\n }\n updateStageField(changes);\n };\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n component={stage}\n onComponentUpdate={stageFieldUpdated}\n />\n )}\n <StageConfigField label=\"Target\">\n <TargetSelect\n model={{ target: stage.target }}\n onChange={(target: string) => updateStageField({ target })}\n options={StageConstants.TARGET_LIST}\n />\n </StageConfigField>\n <StageConfigField label=\"Action\" helpKey=\"pipeline.config.resizeAsg.action\">\n <select\n className=\"form-control input-sm\"\n onChange={(event) => updateResizeType(event.target.value)}\n value={stage.action || scaleActions[0].val}\n >\n {scaleActions.map((action) => (\n <option key={action.val} value={action.val}>\n {action.label}\n </option>\n ))}\n </select>\n </StageConfigField>\n {stage.action !== 'scale_exact' && (\n <>\n <StageConfigField label={stage.action === 'scale_to_cluster' ? 'Additional Capacity' : 'Type'}>\n <select\n className=\"form-control input-sm\"\n onChange={(event) => updateResizeType(stage.action, event.target.value)}\n value={stage.resizeType || resizeTypes[0].val}\n >\n {resizeTypes.map((type) => (\n <option key={type.val} value={type.val}>\n {type.label}\n </option>\n ))}\n </select>\n </StageConfigField>\n {stage.resizeType === 'pct' && (\n <StageConfigField label=\"Resize Percentage\">\n <input\n className=\"form-control input-sm\"\n min={0}\n onChange={(event) => updateStageField({ scalePct: Number(event.target.value) })}\n type=\"number\"\n value={stage.scalePct ?? ''}\n />\n <div>\n <em className=\"subinput-note\">\n This is the percentage by which the target server group's capacity will be increased\n </em>\n </div>\n </StageConfigField>\n )}\n {stage.resizeType === 'incr' && (\n <StageConfigField label=\"Resize-by Amount\">\n <input\n className=\"form-control input-sm\"\n min={0}\n onChange={(event) => updateStageField({ scaleNum: Number(event.target.value) })}\n type=\"number\"\n value={stage.scaleNum ?? ''}\n />\n <div>\n <em className=\"subinput-note\">\n This is the exact amount by which the target server group's capacity will be increased\n </em>\n </div>\n </StageConfigField>\n )}\n </>\n )}\n {stage.action === 'scale_exact' && (\n <>\n <StageConfigField label=\"\">\n <div className=\"row small\">\n <div className=\"col-md-3\">Min</div>\n <div className=\"col-md-3\">Max</div>\n <div className=\"col-md-3\">Desired</div>\n </div>\n </StageConfigField>\n <StageConfigField label=\"Match Capacity\">\n <div className=\"row\">\n {(['min', 'max', 'desired'] as const).map((field) => (\n <div className=\"col-md-3\" key={field}>\n <input\n className=\"form-control input-sm\"\n onChange={(event) =>\n updateStageField({ capacity: { ...stage.capacity, [field]: Number(event.target.value) } })\n }\n type=\"number\"\n value={stage.capacity?.[field] ?? ''}\n />\n </div>\n ))}\n </div>\n </StageConfigField>\n </>\n )}\n {application.attributes.platformHealthOnlyShowOverride && (\n <StageConfigField label=\"Task Completion\">\n <PlatformHealthOverride\n interestingHealthProviderNames={stage.interestingHealthProviderNames || []}\n onChange={(interestingHealthProviderNames) => updateStageField({ interestingHealthProviderNames })}\n platformHealthType=\"Oracle\"\n />\n </StageConfigField>\n )}\n </div>\n );\n}\n\nexport const oracleResizeAsgStage = {\n key: 'resizeServerGroup',\n provides: 'resizeServerGroup',\n cloudProvider: 'oracle',\n component: OracleResizeAsgStageConfig,\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\nexport function registerOracleResizeAsgStage() {\n Registry.pipeline.registerStage(oracleResizeAsgStage);\n}\n\nregisterOracleResizeAsgStage();\n","import React, { useEffect, useState } from 'react';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport { AccountRegionClusterSelector, AccountService, Registry, StageConfigField } from '@spinnaker/core';\n\nfunction pluralize(str: string, val: number): string {\n return val === 1 ? str : `${str}s`;\n}\n\nexport function OracleScaleDownClusterStageConfig(props: IStageConfigProps) {\n const { application, pipeline, stage, stageFieldUpdated, updateStageField } = props;\n const [accounts, setAccounts] = useState<IAccount[]>([]);\n\n useEffect(() => {\n const changes: Record<string, any> = {};\n if (stage.cloudProvider !== 'oracle') {\n changes.cloudProvider = 'oracle';\n }\n if (!stage.credentials && application.defaultCredentials?.oracle) {\n changes.credentials = application.defaultCredentials.oracle;\n }\n if (!stage.regions?.length && application.defaultRegions?.oracle) {\n changes.regions = [application.defaultRegions.oracle];\n }\n if (stage.remainingFullSizeServerGroups === undefined) {\n changes.remainingFullSizeServerGroups = 1;\n }\n if (stage.allowScaleDownActive === undefined) {\n changes.allowScaleDownActive = false;\n }\n if (stage.preferLargerOverNewer === undefined) {\n changes.preferLargerOverNewer = 'false';\n }\n if (Object.keys(changes).length) {\n updateStageField(changes);\n }\n }, []);\n\n useEffect(() => {\n let active = true;\n AccountService.listAccounts('oracle').then((loadedAccounts) => active && setAccounts(loadedAccounts));\n return () => {\n active = false;\n };\n }, []);\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n component={stage}\n onComponentUpdate={stageFieldUpdated}\n />\n )}\n <StageConfigField label=\"Scale Down Options\">\n <div className=\"form-inline\">\n <p>\n Keep the{' '}\n <input\n className=\"form-control input-sm\"\n min={0}\n onChange={(event) => updateStageField({ remainingFullSizeServerGroups: Number(event.target.value) })}\n required\n style={{ width: 50 }}\n type=\"number\"\n value={stage.remainingFullSizeServerGroups ?? ''}\n />{' '}\n <select\n className=\"form-control input-sm\"\n onChange={(event) => updateStageField({ preferLargerOverNewer: event.target.value })}\n style={{ width: 100 }}\n value={stage.preferLargerOverNewer ?? 'false'}\n >\n <option value=\"true\">largest</option>\n <option value=\"false\">newest</option>\n </select>{' '}\n {pluralize('server group', stage.remainingFullSizeServerGroups)} at current size.\n </p>\n <p>The remaining server groups will be scaled down to zero instances.</p>\n </div>\n </StageConfigField>\n <div className=\"form-group\">\n <div className=\"col-md-offset-3 col-md-6 checkbox\">\n <label>\n <input\n checked={!!stage.allowScaleDownActive}\n onChange={(event) => updateStageField({ allowScaleDownActive: event.target.checked })}\n type=\"checkbox\"\n />\n Allow scale down of active server groups\n </label>\n </div>\n </div>\n </div>\n );\n}\n\nexport const oracleScaleDownClusterStage = {\n key: 'scaleDownCluster',\n provides: 'scaleDownCluster',\n cloudProvider: 'oracle',\n component: OracleScaleDownClusterStageConfig,\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\nexport function registerOracleScaleDownClusterStage() {\n Registry.pipeline.registerStage(oracleScaleDownClusterStage);\n}\n\nregisterOracleScaleDownClusterStage();\n","import React, { useEffect, useState } from 'react';\n\nimport type { IAccount, IStageConfigProps } from '@spinnaker/core';\nimport {\n AccountRegionClusterSelector,\n AccountService,\n PlatformHealthOverride,\n Registry,\n StageConfigField,\n} from '@spinnaker/core';\n\nfunction pluralize(str: string, val: number): string {\n return val === 1 ? str : `${str}s`;\n}\n\nexport function OracleShrinkClusterStageConfig(props: IStageConfigProps) {\n const { application, pipeline, stage, stageFieldUpdated, updateStageField } = props;\n const [accounts, setAccounts] = useState<IAccount[]>([]);\n\n useEffect(() => {\n const changes: Record<string, any> = {};\n if (stage.cloudProvider !== 'oracle') {\n changes.cloudProvider = 'oracle';\n }\n if (!stage.credentials && application.defaultCredentials?.oracle) {\n changes.credentials = application.defaultCredentials.oracle;\n }\n if (!stage.regions?.length && application.defaultRegions?.oracle) {\n changes.regions = [application.defaultRegions.oracle];\n }\n if (stage.shrinkToSize === undefined) {\n changes.shrinkToSize = 1;\n }\n if (stage.allowDeleteActive === undefined) {\n changes.allowDeleteActive = false;\n }\n if (stage.retainLargerOverNewer === undefined) {\n changes.retainLargerOverNewer = 'false';\n }\n if (\n stage.isNew &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly &&\n stage.interestingHealthProviderNames === undefined\n ) {\n changes.interestingHealthProviderNames = ['Oracle'];\n }\n if (Object.keys(changes).length) {\n updateStageField(changes);\n }\n }, []);\n\n useEffect(() => {\n let active = true;\n AccountService.listAccounts('oracle').then((loadedAccounts) => active && setAccounts(loadedAccounts));\n return () => {\n active = false;\n };\n }, []);\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n accounts={accounts}\n application={application}\n component={stage}\n onComponentUpdate={stageFieldUpdated}\n />\n )}\n <StageConfigField label=\"Shrink Options\">\n <div className=\"form-inline\">\n Shrink to{' '}\n <input\n className=\"form-control input-sm\"\n min={0}\n onChange={(event) => updateStageField({ shrinkToSize: Number(event.target.value) })}\n required\n style={{ width: 50 }}\n type=\"number\"\n value={stage.shrinkToSize ?? ''}\n />{' '}\n {pluralize('server group', stage.shrinkToSize)}, keeping the{' '}\n <select\n className=\"form-control input-sm\"\n onChange={(event) => updateStageField({ retainLargerOverNewer: event.target.value })}\n value={stage.retainLargerOverNewer ?? 'false'}\n >\n <option value=\"true\">largest</option>\n <option value=\"false\">newest</option>\n </select>\n </div>\n </StageConfigField>\n <div className=\"form-group\">\n <div className=\"col-md-offset-3 col-md-6 checkbox\">\n <label>\n <input\n checked={!!stage.allowDeleteActive}\n onChange={(event) => updateStageField({ allowDeleteActive: event.target.checked })}\n type=\"checkbox\"\n />\n Allow deletion of active server groups\n </label>\n </div>\n </div>\n {application.attributes.platformHealthOnlyShowOverride && (\n <StageConfigField label=\"Task Completion\">\n <PlatformHealthOverride\n interestingHealthProviderNames={stage.interestingHealthProviderNames || []}\n onChange={(interestingHealthProviderNames) => updateStageField({ interestingHealthProviderNames })}\n platformHealthType=\"Oracle\"\n />\n </StageConfigField>\n )}\n </div>\n );\n}\n\nexport const oracleShrinkClusterStage = {\n key: 'shrinkCluster',\n provides: 'shrinkCluster',\n cloudProvider: 'oracle',\n component: OracleShrinkClusterStageConfig,\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\nexport function registerOracleShrinkClusterStage() {\n Registry.pipeline.registerStage(oracleShrinkClusterStage);\n}\n\nregisterOracleShrinkClusterStage();\n","import React from 'react';\nimport { CollapsibleSection } from '@spinnaker/core';\n\nexport function OracleSecurityGroupDetails({ resolvedSecurityGroup }: any) {\n return (\n <CollapsibleSection heading=\"Security Group Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Name</dt>\n <dd>{resolvedSecurityGroup.name}</dd>\n <dt>Account</dt>\n <dd>{resolvedSecurityGroup.accountId}</dd>\n <dt>Region</dt>\n <dd>{resolvedSecurityGroup.region}</dd>\n <dt>VCN</dt>\n <dd>{resolvedSecurityGroup.vpcId}</dd>\n </dl>\n </CollapsibleSection>\n );\n}\n","'use strict';\n\nexport class OracleSecurityGroupReader {\n resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n return indexedSecurityGroups[container.account][container.region][securityGroupId];\n }\n}\n","'use strict';\n\nimport _ from 'lodash';\n\nimport { NetworkReader } from '@spinnaker/core';\n\nexport class OracleSecurityGroupTransformer {\n normalizeSecurityGroup(securityGroup) {\n return NetworkReader.listNetworksByProvider(provider).then(_.partial(addVcnNameToSecurityGroup, securityGroup));\n }\n}\n\nconst provider = 'oracle';\n\nfunction addVcnNameToSecurityGroup(securityGroup, vcns) {\n const match = vcns.find((vcn) => vcn.id === securityGroup.network);\n securityGroup.vpcName = match ? match.name : '';\n}\n","'use strict';\n\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\n\nimport { OracleProviderSettings } from '../../oracle.settings';\n\nconst oracle = 'oracle';\n\nexport class OracleServerGroupCommandBuilder {\n 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 Promise.resolve(command);\n }\n\n 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 Promise.resolve(command);\n }\n\n buildServerGroupCommandFromPipeline(application, originalCluster) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const commandDefaults = { account: pipelineCluster.account, region: pipelineCluster.region };\n return this.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 _.assign({}, command, pipelineCluster, viewOverrides);\n });\n }\n\n buildNewServerGroupCommandForPipeline() {\n return Promise.resolve({\n viewState: {\n requiresTemplateSelection: true,\n },\n });\n }\n}\n","'use strict';\n\nimport _ from 'lodash';\n\nimport { AccountService, NetworkReader, SubnetReader } from '@spinnaker/core';\n\nimport { OracleImageReader } from '../../image/image.reader';\nimport { OracleProviderSettings } from '../../oracle.settings';\n\nconst oracle = 'oracle';\n\nexport class OracleServerGroupConfigurationService {\n static requiresDeckRuntimeServices = true;\n\n constructor(_promiseService, runtimeServices) {\n this.oracleImageReader = new OracleImageReader();\n this.securityGroupReader = runtimeServices.securityGroupReader;\n }\n\n configureCommand(application, command) {\n const oracleImageReader = this.oracleImageReader;\n const securityGroupReader = this.securityGroupReader;\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 {\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 Promise.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 ]).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}\n","import React from 'react';\nimport { EMPTY, from as observableFrom } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport {\n AccountTag,\n CollapsibleSection,\n ConfirmationModalService,\n ServerGroupReader,\n timestamp,\n useDeckRuntimeServices,\n} from '@spinnaker/core';\n\nimport { OracleImageReader } from '../../image/image.reader';\n\nexport function oracleServerGroupDetailsGetter(props: any, autoClose: () => void) {\n const { app, serverGroup } = props;\n return observableFrom(\n ServerGroupReader.getServerGroup(app.name, serverGroup.accountId, serverGroup.region, serverGroup.name).then(\n async (details: any) => {\n details.account = serverGroup.accountId;\n const imageReader = new OracleImageReader();\n const image = await imageReader\n .getImage(details.launchConfig?.imageId, details.region, details.account)\n .catch(() => undefined);\n details.image = image || { id: details.launchConfig?.imageId, name: details.launchConfig?.imageId };\n return details;\n },\n ),\n ).pipe(\n catchError(() => {\n autoClose();\n return EMPTY;\n }),\n );\n}\n\nexport function OracleServerGroupActions({ app, serverGroup }: any) {\n const { serverGroupWriter } = useDeckRuntimeServices();\n const destroyServerGroup = () => {\n ConfirmationModalService.confirm({\n header: `Really destroy ${serverGroup.name}?`,\n buttonText: `Destroy ${serverGroup.name}`,\n account: serverGroup.account,\n taskMonitorConfig: { application: app, title: `Destroying ${serverGroup.name}` },\n submitMethod: () => serverGroupWriter.destroyServerGroup(serverGroup, app),\n });\n };\n\n return (\n <div className=\"actions\">\n <button className=\"btn btn-sm btn-primary\" onClick={destroyServerGroup} type=\"button\">\n Destroy Server Group\n </button>\n </div>\n );\n}\n\nexport function OracleServerGroupInformationSection({ serverGroup }: any) {\n return (\n <CollapsibleSection heading=\"Server Group Information\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Created</dt>\n <dd>{timestamp(serverGroup.createdTime)}</dd>\n <dt>In</dt>\n <dd>\n <AccountTag account={serverGroup.account} /> {serverGroup.region}\n </dd>\n <dt>Avail Domain</dt>\n <dd>{serverGroup.zone || serverGroup.launchConfig?.availabilityDomain}</dd>\n </dl>\n </CollapsibleSection>\n );\n}\n\nexport function OracleServerGroupSizeSection({ serverGroup }: any) {\n return (\n <CollapsibleSection heading=\"Size\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Desired</dt>\n <dd>{serverGroup.capacity?.desired}</dd>\n <dt>Current</dt>\n <dd>{serverGroup.instances?.length || 0}</dd>\n </dl>\n </CollapsibleSection>\n );\n}\n\nexport function OracleServerGroupLaunchConfigSection({ serverGroup }: any) {\n return (\n <CollapsibleSection heading=\"Launch Configuration\">\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Name</dt>\n <dd>{serverGroup.name}</dd>\n <dt>Image</dt>\n <dd>{serverGroup.image?.name}</dd>\n <dt>Instance Type</dt>\n <dd>{serverGroup.launchConfig?.shape}</dd>\n <dt>VCN</dt>\n <dd>{serverGroup.launchConfig?.vpcId}</dd>\n <dt>Subnet</dt>\n <dd>{serverGroup.launchConfig?.subnetId}</dd>\n </dl>\n </CollapsibleSection>\n );\n}\n","'use strict';\n\nimport _ from 'lodash';\n\nconst PROVIDER = 'oracle';\n\nexport class OracleServerGroupTransformer {\n normalizeServerGroup(serverGroup) {\n return Promise.resolve(serverGroup);\n }\n\n convertServerGroupCommandToDeployConfiguration(base) {\n const command = _.defaults({ backingData: [], viewState: [] }, base);\n command.cloudProvider = PROVIDER;\n return command;\n }\n}\n","import type React from 'react';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './helpContents/oracleHelpContents';\nimport { OracleImageReader } from './image/image.reader';\nimport { OracleInstanceDetails } from './instance/details/OracleInstanceDetails';\nimport {\n OracleLoadBalancerDetailsSections,\n useOracleLoadBalancerDetails,\n} from './loadBalancer/details/OracleLoadBalancerDetails';\nimport { OracleLoadBalancerTransformer } from './loadBalancer/loadBalancer.transformer';\nimport { registerOracleBakeStage } from './pipeline/stages/bake/OracleBakeStageConfig';\nimport { registerOracleDestroyAsgStage } from './pipeline/stages/destroyAsg/OracleDestroyAsgStageConfig';\nimport { registerOracleDisableAsgStage } from './pipeline/stages/disableAsg/OracleDisableAsgStageConfig';\nimport { registerOracleFindAmiStage } from './pipeline/stages/findAmi/OracleFindAmiStageConfig';\nimport { registerOracleFindImageFromTagsStage } from './pipeline/stages/findImageFromTags/OracleFindImageFromTagsStageConfig';\nimport { registerOracleResizeAsgStage } from './pipeline/stages/resizeAsg/OracleResizeAsgStageConfig';\nimport { registerOracleScaleDownClusterStage } from './pipeline/stages/scaleDownCluster/OracleScaleDownClusterStageConfig';\nimport { registerOracleShrinkClusterStage } from './pipeline/stages/shrinkCluster/OracleShrinkClusterStageConfig';\nimport { OracleSecurityGroupDetails } from './securityGroup/details/OracleSecurityGroupDetails';\nimport { OracleSecurityGroupReader } from './securityGroup/securityGroup.reader';\nimport { OracleSecurityGroupTransformer } from './securityGroup/securityGroup.transformer';\nimport { OracleServerGroupCommandBuilder } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { OracleServerGroupConfigurationService } from './serverGroup/configure/serverGroupConfiguration.service';\nimport {\n OracleServerGroupActions,\n oracleServerGroupDetailsGetter,\n OracleServerGroupInformationSection,\n OracleServerGroupLaunchConfigSection,\n OracleServerGroupSizeSection,\n} from './serverGroup/details/OracleServerGroupDetails';\nimport { OracleServerGroupTransformer } from './serverGroup/serverGroup.transformer';\n\nexport function registerOracleProvider(): void {\n CloudProviderRegistry.registerProvider('oracle', {\n name: 'Oracle',\n image: {\n reader: OracleImageReader,\n },\n loadBalancer: {\n transformer: OracleLoadBalancerTransformer,\n useDetailsHook: useOracleLoadBalancerDetails,\n detailsActions: function OracleLoadBalancerActions(): React.ReactElement | null {\n return null;\n },\n detailsSections: OracleLoadBalancerDetailsSections,\n },\n serverGroup: {\n transformer: OracleServerGroupTransformer,\n detailsActions: OracleServerGroupActions,\n detailsGetter: oracleServerGroupDetailsGetter,\n detailsSections: [\n OracleServerGroupInformationSection,\n OracleServerGroupSizeSection,\n OracleServerGroupLaunchConfigSection,\n ],\n // Oracle does not provide a create or clone modal.\n commandBuilder: OracleServerGroupCommandBuilder,\n configurationService: OracleServerGroupConfigurationService,\n },\n instance: {\n details: OracleInstanceDetails,\n },\n securityGroup: {\n reader: OracleSecurityGroupReader,\n transformer: OracleSecurityGroupTransformer,\n details: OracleSecurityGroupDetails,\n },\n });\n}\n\nexport function registerOraclePipelineStages(): void {\n registerOracleBakeStage();\n registerOracleDestroyAsgStage();\n registerOracleDisableAsgStage();\n registerOracleFindAmiStage();\n registerOracleFindImageFromTagsStage();\n registerOracleResizeAsgStage();\n registerOracleScaleDownClusterStage();\n registerOracleShrinkClusterStage();\n}\n\nregisterOracleProvider();\nDeploymentStrategyRegistry.registerProvider('oracle', []);\n"],"names":["key","value","forEach","entry","HelpContentsRegistry","register","OracleImageReader","findImages","params","REST","query","get","catch","getImage","imageId","region","credentials","path","provider","then","results","length","OracleInstanceDetails","instance","React","createElement","CollapsibleSection","heading","defaultExpanded","className","launchTime","timestamp","availabilityZone","instanceType","serverGroup","network","useOracleLoadBalancerDetails","app","loadBalancerParams","autoClose","data","loadBalancers","loaded","refresh","error","loadBalancersError","useDataSource","getDataSource","loading","loadBalancer","find","test","name","account","accountId","useEffect","refetch","OracleLoadBalancerDetailsSections","timeCreated","AccountTag","subnets","map","subnet","join","ipAddresses","ip","ipAddress","Object","values","backendSets","backendSet","_a","policy","healthChecker","urlPath","listeners","listener","protocol","port","defaultBackendSetName","LoadBalancingPolicy","OracleProviderSettings","SETTINGS","providers","oracle","defaults","resetToOriginal","resetProvider","OracleDefaultProviderSettings","bakeryRegions","OracleLoadBalancerTransformer","normalizeLoadBalancer","Promise","resolve","convertLoadBalancerForEditing","keys","lis","isSsl","sslConfiguration","cloudProvider","shape","isPrivate","subnetIds","id","certificates","hostnames","freeformTags","loadBalancerType","type","securityGroups","vpcId","subnetTypeMap","constructNewLoadBalancerTemplate","application","defaultCredentials","defaultRegions","constructNewListenerTemplate","constructNewBackendSetTemplate","ROUND_ROBIN","backends","isNew","constructNewSSLConfiguration","certificateName","verifyDepth","verifyPeerCertificates","constructNewCertificateTemplate","publicCertificate","caCertificate","privateKey","passphrase","OracleBakeStageConfig","Component","constructor","super","arguments","this","mounted","state","accounts","baseOsOptions","extendedAttributeKey","extendedAttributeValue","accountChanged","accountName","props","updateStageField","loadRegionForAccount","addExtendedAttribute","trim","updateExtendedAttribute","setState","componentDidMount","stage","cloudProviderType","all","BakeryReader","getBaseOsOptions","AccountService","listAccounts","changes","user","AuthenticationService","getAuthenticatedUser","upgrade","baseOs","baseImages","componentWillUnmount","getRegionsForAccount","regions","Array","isArray","extendedAttributes","removeExtendedAttribute","render","StageConfigField","label","helpKey","onChange","event","target","readOnly","baseImage","checked","baseOsOption","shortDescription","HelpField","content","detailedDescription","amiName","package","style","marginBottom","rebake","showAdvancedOptions","Fragment","templateFileName","varFileName","width","href","onClick","preventDefault","placeholder","oracleBakeStage","provides","description","component","executionDetailsSections","ExecutionDetailsTasks","executionLabelComponent","BakeExecutionLabel","supportsCustomTimeout","validators","fieldName","fieldLabel","restartable","Registry","pipeline","registerStage","oracleDestroyAsgStage","stageFieldUpdated","setAccounts","useState","_b","_c","StageConstants","TARGET_LIST","val","active","loadedAccounts","strategy","AccountRegionClusterSelector","onComponentUpdate","TargetSelect","model","options","message","oracleDisableAsgStage","attributes","platformHealthOnlyShowOverride","platformHealthOnly","interestingHealthProviderNames","PlatformHealthOverride","platformHealthType","selectionStrategies","oracleFindAmiStage","selectionStrategy","onlyEnabled","title","oracleFindImageFromTagsStage","setRegions","packageName","tags","getRegions","loadedRegions","ChecklistInput","inline","showSelectAll","stringOptions","MapEditor","allowEmpty","scaleActions","resizeTypes","oracleResizeAsgStage","action","resizeType","capacity","updateResizeType","scaleNum","scalePct","nextResizeType","min","Number","field","oracleScaleDownClusterStage","remainingFullSizeServerGroups","allowScaleDownActive","preferLargerOverNewer","required","str","oracleShrinkClusterStage","shrinkToSize","allowDeleteActive","retainLargerOverNewer","OracleSecurityGroupDetails","resolvedSecurityGroup","OracleSecurityGroupReader","resolveIndexedSecurityGroup","indexedSecurityGroups","container","securityGroupId","OracleSecurityGroupTransformer","normalizeSecurityGroup","securityGroup","NetworkReader","listNetworksByProvider","_","partial","addVcnNameToSecurityGroup","vcns","match","vcn","vpcName","OracleServerGroupCommandBuilder","buildNewServerGroupCommand","defaultAccount","defaultRegion","command","desired","selectedProvider","viewState","mode","disableStrategySelection","buildServerGroupCommandFromExisting","serverGroupName","NameUtils","parseServerGroupName","launchConfig","stack","subnetId","availabilityDomain","sshAuthorizedKeys","buildServerGroupCommandFromPipeline","originalCluster","pipelineCluster","cloneDeep","commandDefaults","viewOverrides","disableImageSelection","submitButtonLabel","templatingEnabled","assign","buildNewServerGroupCommandForPipeline","requiresTemplateSelection","OracleServerGroupConfigurationService","_promiseService","runtimeServices","oracleImageReader","securityGroupReader","configureCommand","loadAndSelectRegions","backingData","selectedAccountDetails","credentialsKeyedByAccount","filtered","loadAvailabilityDomains","getAvailabilityZonesForAccountAndRegion","availDoms","availabilityDomains","av","loadLoadBalancers","filter","lb","getCredentialsKeyedByAccount","SubnetReader","listSubnetsByProvider","getAllSecurityGroups","networks","images","availDomains","zone","filterSubnets","vcnId","accountOnChange","regionOnChange","availabilityDomainOnChange","seclists","vpcOnChange","subnetOnChange","mySecGroups","secLists","securityListIds","sid","sgRef","getSecurityGroupDetails","sgd","push","findBackendSetsByLoadBalancerId","loadBalancerId","bsetArray","reduce","arr","bsetName","bset","findLoadBalListenersByBackendSetName","backendSetName","lisName","loadBalancerOnChange","backendSetOnChange","shapesMap","image","compatibleShapes","getShapes","shapes","allShapes","uniqBy","flatten","oracleServerGroupDetailsGetter","observableFrom","ServerGroupReader","getServerGroup","async","details","imageReader","pipe","catchError","EMPTY","OracleServerGroupActions","serverGroupWriter","useDeckRuntimeServices","ConfirmationModalService","confirm","header","buttonText","taskMonitorConfig","submitMethod","destroyServerGroup","OracleServerGroupInformationSection","createdTime","OracleServerGroupSizeSection","instances","OracleServerGroupLaunchConfigSection","_d","OracleServerGroupTransformer","normalizeServerGroup","convertServerGroupCommandToDeployConfiguration","base","CloudProviderRegistry","registerProvider","reader","transformer","useDetailsHook","detailsActions","detailsSections","detailsGetter","commandBuilder","configurationService","DeploymentStrategyRegistry"],"mappings":"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"}