@spinnaker/azure 0.0.0-main-2

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 (174) hide show
  1. package/CHANGELOG.md +873 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/azure.module.d.ts +3 -0
  4. package/dist/azure.settings.d.ts +8 -0
  5. package/dist/common/AzureModalFooter.d.ts +18 -0
  6. package/dist/help/azure.help.d.ts +1 -0
  7. package/dist/image/image.reader.d.ts +2 -0
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.js +6778 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/instance/azureInstanceType.service.d.ts +2 -0
  12. package/dist/instance/details/instance.details.controller.d.ts +2 -0
  13. package/dist/loadBalancer/configure/AzureLoadBalancerChoiceModal.d.ts +16 -0
  14. package/dist/loadBalancer/configure/createLoadBalancer.controller.d.ts +2 -0
  15. package/dist/loadBalancer/details/loadBalancerDetail.controller.d.ts +2 -0
  16. package/dist/loadBalancer/loadBalancer.transformer.d.ts +2 -0
  17. package/dist/pipeline/stages/bake/azureBakeStage.d.ts +2 -0
  18. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +2 -0
  19. package/dist/pipeline/stages/destroyAsg/azureDestroyAsgStage.d.ts +2 -0
  20. package/dist/pipeline/stages/disableAsg/azureDisableAsgStage.d.ts +2 -0
  21. package/dist/pipeline/stages/enableAsg/azureEnableAsgStage.d.ts +2 -0
  22. package/dist/securityGroup/clone/cloneSecurityGroup.controller.d.ts +2 -0
  23. package/dist/securityGroup/configure/CreateSecurityGroupCtrl.d.ts +2 -0
  24. package/dist/securityGroup/configure/EditSecurityGroupCtrl.d.ts +2 -0
  25. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +2 -0
  26. package/dist/securityGroup/securityGroup.reader.d.ts +2 -0
  27. package/dist/securityGroup/securityGroup.transformer.d.ts +2 -0
  28. package/dist/securityGroup/securityGroup.write.service.d.ts +2 -0
  29. package/dist/serverGroup/configure/serverGroup.configure.azure.module.d.ts +2 -0
  30. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +2 -0
  31. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +2 -0
  32. package/dist/serverGroup/configure/wizard/CloneServerGroup.azure.controller.d.ts +2 -0
  33. package/dist/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.d.ts +2 -0
  34. package/dist/serverGroup/configure/wizard/ServerGroupInstanceType.controller.d.ts +2 -0
  35. package/dist/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.d.ts +2 -0
  36. package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.d.ts +2 -0
  37. package/dist/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.d.ts +2 -0
  38. package/dist/serverGroup/configure/wizard/basicSettings/image.regional.filter.d.ts +2 -0
  39. package/dist/serverGroup/configure/wizard/capacity/capacitySelector.directive.d.ts +2 -0
  40. package/dist/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.d.ts +2 -0
  41. package/dist/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.d.ts +2 -0
  42. package/dist/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.d.ts +2 -0
  43. package/dist/serverGroup/configure/wizard/image/imageSettingsSelector.directive.d.ts +2 -0
  44. package/dist/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.d.ts +2 -0
  45. package/dist/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.d.ts +2 -0
  46. package/dist/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.d.ts +2 -0
  47. package/dist/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.d.ts +2 -0
  48. package/dist/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.d.ts +2 -0
  49. package/dist/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.d.ts +2 -0
  50. package/dist/serverGroup/configure/wizard/tags/tagsSelector.directive.d.ts +2 -0
  51. package/dist/serverGroup/configure/wizard/zones/zoneSelector.directive.d.ts +2 -0
  52. package/dist/serverGroup/details/rollback/RollbackServerGroupModal.d.ts +25 -0
  53. package/dist/serverGroup/details/serverGroup.details.module.d.ts +2 -0
  54. package/dist/serverGroup/details/serverGroupDetails.azure.controller.d.ts +2 -0
  55. package/dist/serverGroup/serverGroup.transformer.d.ts +2 -0
  56. package/dist/utility.d.ts +28 -0
  57. package/dist/validation/applicationName.validator.d.ts +2 -0
  58. package/package.json +43 -0
  59. package/src/azure.module.ts +95 -0
  60. package/src/azure.settings.ts +16 -0
  61. package/src/common/AzureModalFooter.tsx +43 -0
  62. package/src/help/azure.help.ts +60 -0
  63. package/src/image/image.reader.js +43 -0
  64. package/src/image/image.reader.spec.js +108 -0
  65. package/src/index.ts +1 -0
  66. package/src/instance/azureInstanceType.service.js +831 -0
  67. package/src/instance/azureInstanceType.service.spec.js +17 -0
  68. package/src/instance/details/instance.details.controller.js +371 -0
  69. package/src/instance/details/instance.details.controller.spec.js +129 -0
  70. package/src/instance/details/instanceDetails.html +43 -0
  71. package/src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx +101 -0
  72. package/src/loadBalancer/configure/advancedSettings.html +95 -0
  73. package/src/loadBalancer/configure/createLoadBalancer.controller.js +275 -0
  74. package/src/loadBalancer/configure/createLoadBalancer.controller.spec.js +39 -0
  75. package/src/loadBalancer/configure/createLoadBalancer.html +25 -0
  76. package/src/loadBalancer/configure/createLoadBalancerProperties.html +128 -0
  77. package/src/loadBalancer/configure/editLoadBalancer.html +26 -0
  78. package/src/loadBalancer/configure/healthCheck.html +74 -0
  79. package/src/loadBalancer/configure/listeners.html +50 -0
  80. package/src/loadBalancer/details/loadBalancerDetail.controller.js +181 -0
  81. package/src/loadBalancer/details/loadBalancerDetail.controller.spec.js +39 -0
  82. package/src/loadBalancer/details/loadBalancerDetail.html +128 -0
  83. package/src/loadBalancer/loadBalancer.transformer.js +109 -0
  84. package/src/logo/azure.icon.svg +196 -0
  85. package/src/logo/azure.logo.less +6 -0
  86. package/src/logo/logo_azure.png +0 -0
  87. package/src/pipeline/stages/bake/azureBakeStage.js +276 -0
  88. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +40 -0
  89. package/src/pipeline/stages/bake/bakeExecutionDetails.html +50 -0
  90. package/src/pipeline/stages/bake/bakeStage.html +187 -0
  91. package/src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js +73 -0
  92. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +9 -0
  93. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +1 -0
  94. package/src/pipeline/stages/disableAsg/azureDisableAsgStage.js +65 -0
  95. package/src/pipeline/stages/disableAsg/disableAsgStage.html +11 -0
  96. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +1 -0
  97. package/src/pipeline/stages/enableAsg/azureEnableAsgStage.js +70 -0
  98. package/src/pipeline/stages/enableAsg/enableAsgStage.html +11 -0
  99. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +1 -0
  100. package/src/securityGroup/clone/cloneSecurityGroup.controller.js +162 -0
  101. package/src/securityGroup/clone/cloneSecurityGroup.html +8 -0
  102. package/src/securityGroup/configure/CreateSecurityGroup.controller.spec.js +78 -0
  103. package/src/securityGroup/configure/CreateSecurityGroupCtrl.js +265 -0
  104. package/src/securityGroup/configure/EditSecurityGroupCtrl.js +222 -0
  105. package/src/securityGroup/configure/configSecurityGroup.mixin.controller.js +262 -0
  106. package/src/securityGroup/configure/createSecurityGroup.html +20 -0
  107. package/src/securityGroup/configure/createSecurityGroupIngress.html +75 -0
  108. package/src/securityGroup/configure/createSecurityGroupProperties.html +88 -0
  109. package/src/securityGroup/configure/editSecurityGroup.html +19 -0
  110. package/src/securityGroup/details/securityGroupDetail.controller.js +142 -0
  111. package/src/securityGroup/details/securityGroupDetail.html +78 -0
  112. package/src/securityGroup/securityGroup.reader.js +17 -0
  113. package/src/securityGroup/securityGroup.transformer.js +13 -0
  114. package/src/securityGroup/securityGroup.write.service.js +57 -0
  115. package/src/serverGroup/configure/serverGroup.configure.azure.module.js +47 -0
  116. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +175 -0
  117. package/src/serverGroup/configure/serverGroupConfiguration.service.js +357 -0
  118. package/src/serverGroup/configure/serverGroupConfiguration.service.spec.js +209 -0
  119. package/src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js +247 -0
  120. package/src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js +35 -0
  121. package/src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js +15 -0
  122. package/src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js +25 -0
  123. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +5 -0
  124. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html +138 -0
  125. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js +43 -0
  126. package/src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js +71 -0
  127. package/src/serverGroup/configure/wizard/basicSettings/basicSettings.html +131 -0
  128. package/src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js +15 -0
  129. package/src/serverGroup/configure/wizard/basicSettings/image.regional.filter.spec.js +42 -0
  130. package/src/serverGroup/configure/wizard/capacity/capacity.html +5 -0
  131. package/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.html +20 -0
  132. package/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js +21 -0
  133. package/src/serverGroup/configure/wizard/capacity/zones.html +5 -0
  134. package/src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js +38 -0
  135. package/src/serverGroup/configure/wizard/healthSettings/healthSettings.html +5 -0
  136. package/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.html +32 -0
  137. package/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js +22 -0
  138. package/src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js +34 -0
  139. package/src/serverGroup/configure/wizard/image/imageSettings.html +5 -0
  140. package/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.html +33 -0
  141. package/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js +22 -0
  142. package/src/serverGroup/configure/wizard/instanceArchetype.html +33 -0
  143. package/src/serverGroup/configure/wizard/instanceType/instanceType.html +10 -0
  144. package/src/serverGroup/configure/wizard/instanceType.html +33 -0
  145. package/src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js +137 -0
  146. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html +3 -0
  147. package/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.html +41 -0
  148. package/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js +22 -0
  149. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js +44 -0
  150. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.html +54 -0
  151. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js +19 -0
  152. package/src/serverGroup/configure/wizard/networkSettings/networkSettings.html +3 -0
  153. package/src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js +28 -0
  154. package/src/serverGroup/configure/wizard/securityGroup/securityGroups.html +3 -0
  155. package/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.html +40 -0
  156. package/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js +38 -0
  157. package/src/serverGroup/configure/wizard/serverGroupWizard.html +61 -0
  158. package/src/serverGroup/configure/wizard/tags/tags.html +5 -0
  159. package/src/serverGroup/configure/wizard/tags/tagsSelector.directive.html +16 -0
  160. package/src/serverGroup/configure/wizard/tags/tagsSelector.directive.js +30 -0
  161. package/src/serverGroup/configure/wizard/templateSelection.html +9 -0
  162. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.html +21 -0
  163. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.js +28 -0
  164. package/src/serverGroup/details/rollback/RollbackServerGroupModal.tsx +158 -0
  165. package/src/serverGroup/details/serverGroup.details.module.js +11 -0
  166. package/src/serverGroup/details/serverGroupDetails.azure.controller.js +260 -0
  167. package/src/serverGroup/details/serverGroupDetails.html +98 -0
  168. package/src/serverGroup/serverGroup.transformer.js +150 -0
  169. package/src/serverGroup/serverGroup.transformer.spec.js +256 -0
  170. package/src/subnet/subnetSelectField.directive.html +28 -0
  171. package/src/subnet/subnetSelectField.directive.js +35 -0
  172. package/src/utility.spec.ts +61 -0
  173. package/src/utility.ts +95 -0
  174. package/src/validation/applicationName.validator.js +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/utility.ts","../src/help/azure.help.ts","../src/image/image.reader.js","../src/instance/azureInstanceType.service.js","../src/instance/details/instance.details.controller.js","../src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx","../src/azure.settings.ts","../src/loadBalancer/loadBalancer.transformer.js","../src/loadBalancer/configure/createLoadBalancer.controller.js","../src/loadBalancer/details/loadBalancerDetail.controller.js","../src/logo/logo_azure.png","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/serverGroup/serverGroup.transformer.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/pipeline/stages/bake/azureBakeStage.js","../src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js","../src/pipeline/stages/disableAsg/azureDisableAsgStage.js","../src/pipeline/stages/enableAsg/azureEnableAsgStage.js","../src/securityGroup/securityGroup.write.service.js","../src/securityGroup/configure/CreateSecurityGroupCtrl.js","../src/securityGroup/configure/EditSecurityGroupCtrl.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js","../src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js","../src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js","../src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js","../src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js","../src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js","../src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js","../src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js","../src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js","../src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js","../src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js","../src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js","../src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js","../src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js","../src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js","../src/serverGroup/configure/wizard/tags/tagsSelector.directive.js","../src/serverGroup/configure/wizard/zones/zoneSelector.directive.js","../src/serverGroup/configure/serverGroup.configure.azure.module.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js","../src/common/AzureModalFooter.tsx","../src/serverGroup/details/rollback/RollbackServerGroupModal.tsx","../src/serverGroup/details/serverGroupDetails.azure.controller.js","../src/serverGroup/details/serverGroup.details.module.js","../src/validation/applicationName.validator.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/azure.module.ts"],"sourcesContent":["export interface ITagResult {\n isValid: boolean;\n error: TagError | null;\n errorMessage?: string;\n}\n\nexport enum TagError {\n TAG_NUMBER_EXCEED,\n TAG_KEY_LENGTH_EXCEED,\n TAG_VALUE_LENGTH_EXCEED,\n TAG_KEY_INVALID_CHARACTER,\n TAG_VALUE_INVALID_CHARACTER,\n TAG_OBJECT_UNDEFINED,\n}\n\nexport interface IAzureLoadBalancer {\n type: string;\n description: string;\n}\n\nexport const AzureLoadBalancerTypes: IAzureLoadBalancer[] = [\n {\n type: 'Azure Load Balancer',\n description: '',\n },\n {\n type: 'Azure Application Gateway',\n description: '',\n },\n];\n\nexport default class Utility {\n public static readonly TAG_LIMITATION: number = 8;\n public static readonly TAG_KEY_LENGTH_LIMITATION: number = 512;\n public static readonly TAG_VALUE_LENGTH_LIMITATION: number = 256;\n public static readonly TAG_INVALID_CHAR_REG_EXR: RegExp = /[<>%&\\\\?/]/;\n\n public static checkTags(tagsObject: { [s: string]: string }): ITagResult {\n if (!tagsObject) {\n return {\n isValid: false,\n error: TagError.TAG_OBJECT_UNDEFINED,\n errorMessage: 'instanceTags is not defined',\n };\n }\n const length: number = Object.keys(tagsObject).length;\n if (!(length >= 0 && length <= Utility.TAG_LIMITATION)) {\n return {\n isValid: false,\n error: TagError.TAG_NUMBER_EXCEED,\n errorMessage: `Number of tags exceeds the limit: ${Utility.TAG_LIMITATION}`,\n };\n }\n\n for (const [k, v] of Object.entries(tagsObject)) {\n if (k.length > Utility.TAG_KEY_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_LENGTH_EXCEED,\n errorMessage: `Length of Tag key: ${k} exceeds the limit: ${Utility.TAG_KEY_LENGTH_LIMITATION}`,\n };\n }\n if (v.length > Utility.TAG_VALUE_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_LENGTH_EXCEED,\n errorMessage: `Length of Tag value: ${v} exceeds the limit: ${Utility.TAG_VALUE_LENGTH_LIMITATION}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(k)) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag key: ${k}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(v)) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag value: ${v}`,\n };\n }\n }\n return {\n isValid: true,\n error: null,\n };\n }\n\n public static getLoadBalancerType(typeString: string): IAzureLoadBalancer | null {\n typeString = typeString.toLowerCase().split('_').join(' ');\n return AzureLoadBalancerTypes.find((lb: IAzureLoadBalancer) => lb.type.toLowerCase() === typeString) || null;\n }\n}\n","import { HelpContentsRegistry } from '@spinnaker/core';\nimport Utility from '../utility';\n\nconst helpContents: { [key: string]: string } = {\n 'azure.securityGroup.ingress.description': 'Friendly description of the rule you want to enable (limit 80 chars.)',\n 'azure.securityGroup.ingress.priority':\n \"Rules are processed in priority order; the lower the number, the higher the priority. We recommend leaving gaps between rules - 100, 200, 300, etc. - so that it's easier to add new rules without having to edit existing rules. There are several default rules that can be overridden with priority (65000, 65001 and 65500). For more information visit http://portal.azure.com.\",\n 'azure.securityGroup.ingress.source':\n \"The source filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the incoming traffic from a specific source IP address range (CIDR format) that will be allowed or denied by this rule.\",\n 'azure.securityGroup.ingress.sourcePortRange':\n 'The source port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which ports incoming traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.',\n 'azure.securityGroup.ingress.destination':\n \"The destination filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the outgoing traffic from a specific destination IP address range (CIDR format) that will be allowed or denied by this rule.\",\n 'azure.securityGroup.ingress.destinationPortRange':\n 'The destination port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which destination ports traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.',\n 'azure.securityGroup.ingress.direction': 'Specifies whether the rule is for inbound or outbound traffic.',\n 'azure.securityGroup.ingress.actions':\n 'To adjust the priority of a rule, move it up or down in the list of rules. Rules at the top of the list have the highest priority.',\n 'azure.securityGroup.ingress.destPortRanges':\n 'Provide a single port, such as 80; a port range, such as 1024-65535; or a comma-separated list of single ports and/or port ranges, such as 80,1024-65535. Provide an asterisk (*) to allow traffic on any port.',\n 'azure.securityGroup.ingress.sourceIPCIDRRanges':\n 'Provide an address range using CIDR notation, such as 192.168.99.0/24; an IP address, such as 192.168.99.0; or a comma-separated list of address ranges or IP addresses, such as 10.0.0.0/24,44.66.0.0/24',\n 'azure.serverGroup.imageName': '(Required) <b>Image</b> is the deployable Azure Machine Image.',\n 'azure.serverGroup.stack':\n '(Required) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.',\n 'azure.serverGroup.detail':\n '(Required) <b>Detail</b> is a naming component to help distinguish specifics of the server group.',\n 'azure.serverGroup.scriptLocation':\n 'The location of custom scripts separated by comma or semicolon to be downloaded on to each instance. A single script should be like: fileUri. Multiple scripts should be like fileUri1,fileUri2 or fileUri1;fileUri2',\n 'azure.serverGroup.commandToExecute':\n 'Command(s) to execute custom scripts provided during provisioning of an instance.',\n 'azure.serverGroup.customData': 'Script or metadata to be injected into each instances.',\n 'azure.serverGroup.customTags': `Custom tags on Virtual Machine Scale Set. Allow ${Utility.TAG_LIMITATION} tags at most.`,\n 'azure.serverGroup.enableInboundNAT':\n 'An Azure load balancer of the basic sku will be created with adding inbound NAT port-forwarding rules to facilitate loggin on VM instances. There is no charge for creating an Azure load balancer of the basic sku. This option is disabled if Availability Zones are set which require Standard Azure Load Balancer and an extra Network Security Group with correct inbound and outbound rules configured.',\n 'azure.serverGroup.lun':\n 'Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.',\n 'azure.serverGroup.diskSizeGB':\n 'Specifies the size of an empty data disk in gigabytes. This value cannot be larger than 1023 GB',\n 'azure.serverGroup.managedDisk.storageAccountType':\n 'You can choose between Azure managed disks types to support your workload or scenario.',\n 'azure.serverGroup.caching':\n 'Changing the default host caching policy can adversely impact the performance of your application. You should run performance tests to measure its impact. To improve the total IOPS/throughput, we recommend striping across multiple disks and using premium (SSD) disks.',\n 'azure.serverGroup.userAssignedIdentities':\n 'Allows your server to access Azure resources. Learn more here: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview',\n 'azure.loadBalancer.dnsName':\n 'If there is no custom DNS label specified, a default DNS name will be created. The default value will be \"GeneratedText.cloudapp.net\" for Azure Application Gateway or \"GeneratedText.[region].cloudapp.azure.com\" for Azure Load Balancer.',\n 'azure.loadBalancer.probes.probeInterval':\n 'Probe interval in seconds. This value is the time interval between two consecutive probes.',\n 'azure.loadBalancer.probes.timeout':\n 'Probe time-out in seconds. If a valid response is not received within this time-out period, the probe is marked as failed. Note that the time-out value should not be more than the Interval value.',\n 'azure.loadBalancer.probes.unhealthyThreshold':\n 'Probe retry count. The back-end server is marked down after the consecutive probe failure count reaches the unhealthy threshold.',\n 'azure.loadBalancer.loadBalancingRules.idleTimeout':\n 'Keep a TCP or HTTP connection open without relying on clients to send keep-alive messages.',\n 'azure.loadBalancer.loadBalancingRules.sessionPersistence':\n 'Session persistence specifies that traffic from a client should be handled by the same virtual machine in the backend pool for the duration of a session. \"None\" specifies that successive requests from the same client may be handled by any virtual machine. \"Client IP\" specifies that successive requests from the same client IP address will be handled by the same virtual machine. \"Client IP and protocol\" specifies that successive requests from the same client IP address and protocol combination will be handled by the same virtual machine.',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nexport const AZURE_IMAGE_IMAGE_READER = 'spinnaker.azure.image.reader';\nexport const name = AZURE_IMAGE_IMAGE_READER; // for backwards compatibility\nmodule(AZURE_IMAGE_IMAGE_READER, []).factory('azureImageReader', function () {\n function findImages(params) {\n return REST('/images/find')\n .query(params)\n .get()\n .then(\n function (results) {\n return results;\n },\n function () {\n return [];\n },\n );\n }\n\n function getImage(amiName, region, credentials) {\n return REST('/images')\n .path(credentials, region, amiName)\n .query({ provider: 'azure' })\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: findImages,\n getImage: getImage,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE = 'spinnaker.azure.instanceType.service';\nexport const name = AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE; // for backwards compatibility\nmodule(AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE, []).factory('azureInstanceTypeService', [\n '$q',\n function ($q) {\n const B = {\n type: 'B-series',\n description:\n 'The B-series burstable VMs are ideal for workloads that do not need the full performance of the CPU continuously, like web servers, small databases and development and test environments.',\n instanceTypes: [\n {\n name: 'Standard_B1ms',\n label: 'Standard_B1ms',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 4,\n },\n },\n {\n name: 'Standard_B1s',\n label: 'Standard_B1s',\n cpu: 1,\n memory: 1,\n storage: {\n type: 'SSD',\n count: 2,\n size: 2,\n },\n },\n {\n name: 'Standard_B2ms',\n label: 'Standard_B2ms',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_B2s',\n label: 'Standard_B2s',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 8,\n },\n },\n {\n name: 'Standard_B4ms',\n label: 'Standard_B4ms',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_B8ms',\n label: 'Standard_B8ms',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_B1ls',\n label: 'Standard_B1ls',\n cpu: 1,\n memory: 0.5,\n storage: {\n type: 'SSD',\n count: 2,\n size: 1,\n },\n },\n ],\n };\n\n const DSV3 = {\n type: 'Dsv3-series',\n description:\n 'The Dsv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2s_v3',\n label: 'Standard_D2s_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_D4s_v3',\n label: 'Standard_D4s_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_D8s_v3',\n label: 'Standard_D8s_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_D16s_v3',\n label: 'Standard_D16s_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 128,\n },\n },\n {\n name: 'Standard_D32s_v3',\n label: 'Standard_D32s_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 256,\n },\n },\n {\n name: 'Standard_D64s_v3',\n label: 'Standard_D64s_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 512,\n },\n },\n ],\n };\n\n const DV3 = {\n type: 'Dv3-series',\n description:\n 'The Dv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2_v3',\n label: 'Standard_D2_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D4_v3',\n label: 'Standard_D4_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D8_v3',\n label: 'Standard_D8_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D16_v3',\n label: 'Standard_D16_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D32_v3',\n label: 'Standard_D32_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 800,\n },\n },\n {\n name: 'Standard_D64_v3',\n label: 'Standard_D64_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 1600,\n },\n },\n ],\n };\n\n const DSV2 = {\n type: 'DSv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DS1_v2',\n label: 'Standard_DS1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 7,\n },\n },\n {\n name: 'Standard_DS2_v2',\n label: 'Standard_DS2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 14,\n },\n },\n {\n name: 'Standard_DS3_v2',\n label: 'Standard_DS3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 28,\n },\n },\n {\n name: 'Standard_DS4_v2',\n label: 'Standard_DS4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 56,\n },\n },\n {\n name: 'Standard_DS5_v2',\n label: 'Standard_DS5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 112,\n },\n },\n {\n name: 'Standard_DS11_v2',\n label: 'Standard_DS11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 28,\n },\n },\n {\n name: 'Standard_DS12_v2',\n label: 'Standard_DS12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 56,\n },\n },\n {\n name: 'Standard_DS13_v2',\n label: 'Standard_DS13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 112,\n },\n },\n {\n name: 'Standard_DS14_v2',\n label: 'Standard_DS14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 224,\n },\n },\n {\n name: 'Standard_DS15_v2',\n label: 'Standard_DS15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const DV2 = {\n type: 'Dv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_D1_v2',\n label: 'Standard_D1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D2_v2',\n label: 'Standard_D2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D3_v2',\n label: 'Standard_D3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D4_v2',\n label: 'Standard_D4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D5_v2',\n label: 'Standard_D5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D11_v2',\n label: 'Standard_D11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D12_v2',\n label: 'Standard_D12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D13_v2',\n label: 'Standard_D13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D14_v2',\n label: 'Standard_D14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D15_v2',\n label: 'Standard_D15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const AV2 = {\n type: 'Av2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_A1_v2',\n label: 'Standard_A1_v2',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 10,\n },\n },\n {\n name: 'Standard_A2m_v2',\n label: 'Standard_A2m_v2',\n cpu: 2,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A2_v2',\n label: 'Standard_A2_v2',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A4m_v2',\n label: 'Standard_A4m_v2',\n cpu: 4,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A4_v2',\n label: 'Standard_A4_v2',\n cpu: 4,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A8m_v2',\n label: 'Standard_A8m_v2',\n cpu: 8,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n {\n name: 'Standard_A8_v2',\n label: 'Standard_A8_v2',\n cpu: 8,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n ],\n };\n\n const DC = {\n type: 'DC-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DC2s',\n label: 'Standard_DC2s',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 2,\n size: 100,\n },\n },\n {\n name: 'Standard_DC4s',\n label: 'Standard_DC4s',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 200,\n },\n },\n ],\n };\n\n const FSV2 = {\n type: 'Fsv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F2s_v2',\n label: 'Standard_F2s_v2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F4s_v2',\n label: 'Standard_F4s_v2',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F8s_v2',\n label: 'Standard_F8s_v2',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F16s_v2',\n label: 'Standard_F16s_v2',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F32s_v2',\n label: 'Standard_F32s_v2',\n cpu: 32,\n memory: 64,\n storage: { type: 'SSD', count: 32, size: 256 },\n },\n {\n name: 'Standard_F64s_v2',\n label: 'Standard_F64s_v2',\n cpu: 64,\n memory: 128,\n storage: { type: 'SSD', count: 32, size: 512 },\n },\n {\n name: 'Standard_F72s_v2',\n label: 'Standard_F72s_v2',\n cpu: 72,\n memory: 144,\n storage: { type: 'SSD', count: 32, size: 576 },\n },\n ],\n };\n\n const FS = {\n type: 'Fs-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1s',\n label: 'Standard_F1s',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 4 },\n },\n {\n name: 'Standard_F2s',\n label: 'Standard_F2s',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 8 },\n },\n {\n name: 'Standard_F4s',\n label: 'Standard_F4s',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 16 },\n },\n {\n name: 'Standard_F8s',\n label: 'Standard_F8s',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 32 },\n },\n {\n name: 'Standard_F16s',\n label: 'Standard_F16s',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 64 },\n },\n ],\n };\n\n const F = {\n type: 'F-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1',\n label: 'Standard_F1',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F2',\n label: 'Standard_F2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F4',\n label: 'Standard_F4',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F8',\n label: 'Standard_F8',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F16',\n label: 'Standard_F16',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 256 },\n },\n ],\n };\n\n const categories = [\n {\n type: 'general',\n label: 'General Purpose',\n description:\n 'Balanced CPU-to-memory ratio. Ideal for testing and development, small to medium databases, and low to medium traffic web servers.',\n families: [B, DSV3, DV3, DSV2, DV2, AV2, DC],\n icon: 'hdd',\n },\n {\n type: 'compute',\n label: 'Compute Optimized',\n description:\n 'High CPU-to-memory ratio. Good for medium traffic web servers, network appliances, batch processes, and application servers.',\n families: [FSV2, FS, F],\n icon: 'hdd',\n },\n {\n type: 'custom',\n label: 'Custom Type',\n description: 'Select the instance type below.',\n families: [],\n icon: 'asterisk',\n },\n ];\n\n function calculateStorage(type) {\n if (!type || !type.storage) {\n return 0;\n }\n return type.storage.count * type.storage.size;\n }\n\n function buildStats(category) {\n const stats = {\n cpu: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n memory: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n storage: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n families: [],\n };\n\n if (category.families && category.families.length) {\n category.families.forEach(function (family) {\n stats.families.push(family.type);\n const cpuMin = _.minBy(family.instanceTypes, 'cpu').cpu || Number.MAX_VALUE;\n const cpuMax = _.maxBy(family.instanceTypes, 'cpu').cpu || -Number.MAX_VALUE;\n const memoryMin = _.minBy(family.instanceTypes, 'memory').memory || Number.MAX_VALUE;\n const memoryMax = _.maxBy(family.instanceTypes, 'memory').memory || -Number.MAX_VALUE;\n const storageMin = calculateStorage(_.minBy(family.instanceTypes, calculateStorage)) || Number.MAX_VALUE;\n const storageMax = calculateStorage(_.maxBy(family.instanceTypes, calculateStorage)) || -Number.MAX_VALUE;\n\n stats.cpu.min = Math.min(stats.cpu.min, cpuMin);\n stats.cpu.max = Math.max(stats.cpu.max, cpuMax);\n stats.memory.min = Math.min(stats.memory.min, memoryMin);\n stats.memory.max = Math.max(stats.memory.max, memoryMax);\n stats.storage.min = Math.min(stats.storage.min, storageMin);\n stats.storage.max = Math.max(stats.storage.max, storageMax);\n });\n }\n\n return stats;\n }\n\n function getCategories() {\n categories.map(function (category) {\n for (const family of category.families) {\n for (const inst of family.instanceTypes) {\n if (inst.costFactor == undefined) inst.costFactor = 0;\n }\n }\n category.stats = buildStats(category);\n });\n return $q.when(categories);\n }\n\n const getAllTypesByRegion = function getAllTypesByRegion() {\n return getCategories();\n };\n\n function getAvailableTypesForRegions(locationToInstanceTypesMap, selectedLocations) {\n // This function is only ever called with one location.\n const [location] = selectedLocations;\n return locationToInstanceTypesMap[location];\n }\n\n return {\n getCategories: getCategories,\n getAvailableTypesForRegions: getAvailableTypesForRegions,\n getAllTypesByRegion: getAllTypesByRegion,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n} from '@spinnaker/core';\n\nexport const AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.azure.instance.detail.controller';\nexport const name = AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'azureInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n '$q',\n function ($scope, $state, $uibModal, instance, app, $q) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('azure', 'instance.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n function extractHealthMetrics(instance, latest) {\n // do not backfill on standalone instances\n if (app.isStandalone) {\n instance.health = latest.health;\n }\n\n instance.health = instance.health || [];\n const displayableMetrics = instance.health.filter(function (metric) {\n return metric.type !== 'Azure' || metric.state !== 'Unknown';\n });\n // backfill details where applicable\n if (latest.health) {\n displayableMetrics.forEach(function (metric) {\n const detailsMatch = latest.health.filter(function (latestHealth) {\n return latestHealth.type === metric.type;\n });\n if (detailsMatch.length) {\n _.defaults(metric, detailsMatch[0]);\n }\n });\n }\n $scope.healthMetrics = displayableMetrics;\n }\n\n function retrieveInstance() {\n const extraData = {};\n let instanceSummary, loadBalancers, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n account = instance.account;\n region = instance.region;\n } else {\n app.serverGroups.data.some(function (serverGroup) {\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = serverGroup.loadBalancers;\n account = serverGroup.account;\n region = serverGroup.region;\n vpcId = serverGroup.vpcId;\n extraData.serverGroup = serverGroup.name;\n extraData.vpcId = serverGroup.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another app\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a disabled server group via a load balancer\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then(\n function (details) {\n $scope.state.loading = false;\n extractHealthMetrics(instanceSummary, details);\n $scope.instance = _.defaults(details, instanceSummary);\n $scope.instance.account = account;\n $scope.instance.region = region;\n $scope.instance.vpcId = vpcId;\n $scope.instance.loadBalancers = loadBalancers;\n const discoveryMetric = _.find($scope.healthMetrics, function (metric) {\n return metric.type === 'Discovery';\n });\n if (discoveryMetric && discoveryMetric.vipAddress) {\n const vipList = discoveryMetric.vipAddress;\n $scope.instance.vipAddress = vipList.includes(',') ? vipList.split(',') : [vipList];\n }\n $scope.baseIpAddress = details.publicDnsName || details.privateIpAddress;\n },\n function () {\n // When an instance is first starting up, we may not have the details cached in oort yet, but we still\n // want to let the user see what details we have\n $scope.state.loading = false;\n $state.go('^');\n },\n );\n }\n\n if (!instanceSummary) {\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.loading = false;\n }\n\n return $q.when(null);\n }\n\n this.canDeregisterFromLoadBalancer = function () {\n return $scope.instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n };\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n if (!instance.loadBalancers || !instance.loadBalancers.length) {\n return false;\n }\n const outOfService = instance.health.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const discoveryHealth = instance.health.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.terminateInstance = function terminateInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId,\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup + '?',\n buttonText: 'Terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rebootInstance = function rebootInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Rebooting ' + instance.instanceId,\n };\n\n const submitMethod = function () {\n return InstanceWriter.rebootInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithLoadBalancer = function registerInstanceWithLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.registerInstanceWithLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + loadBalancerNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromLoadBalancer = function deregisterInstanceFromLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.deregisterInstanceFromLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + loadBalancerNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really disable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Disable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.hasHealthState = function hasHealthState(healthProviderType, state) {\n const instance = $scope.instance;\n return instance.health.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n ],\n);\n","import React from 'react';\nimport { Button, Modal } from 'react-bootstrap';\n\nimport type { ILoadBalancerModalProps } from '@spinnaker/core';\nimport { CloudProviderRegistry, ModalClose, ModalInjector, noop, ReactModal } from '@spinnaker/core';\n\nimport type { IAzureLoadBalancer } from '../../utility';\nimport { AzureLoadBalancerTypes } from '../../utility';\n\nexport interface IAzureLoadBalancerChoiceModalState {\n choices: IAzureLoadBalancer[];\n selectedChoice: IAzureLoadBalancer;\n}\n\nexport class AzureLoadBalancerChoiceModal extends React.Component<\n ILoadBalancerModalProps,\n IAzureLoadBalancerChoiceModalState\n> {\n public static defaultProps: Partial<ILoadBalancerModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: ILoadBalancerModalProps): Promise<void> {\n return ReactModal.show(AzureLoadBalancerChoiceModal, {\n ...props,\n className: 'create-pipeline-modal-overflow-visible',\n });\n }\n\n constructor(props: ILoadBalancerModalProps) {\n super(props);\n this.state = {\n choices: AzureLoadBalancerTypes,\n selectedChoice: AzureLoadBalancerTypes[0],\n };\n }\n\n public choiceSelected(choice: IAzureLoadBalancer): void {\n this.setState({ selectedChoice: choice });\n }\n\n private choose = (): void => {\n this.close();\n const provider: any = CloudProviderRegistry.getValue('azure', 'loadBalancer');\n ModalInjector.modalService\n .open({\n templateUrl: provider.createLoadBalancerTemplateUrl,\n windowClass: 'modal-z-index',\n controller: `${provider.createLoadBalancerController} as ctrl`,\n size: 'lg',\n resolve: {\n application: () => this.props.app,\n loadBalancer: (): any => null,\n isNew: () => true,\n forPipelineConfig: () => false,\n loadBalancerType: () => this.state.selectedChoice,\n },\n })\n .result.catch(() => {});\n };\n\n public close = (reason?: any): void => {\n this.props.dismissModal(reason);\n };\n\n public render() {\n const { choices, selectedChoice } = this.state;\n\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Select Type of Load Balancer</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"modal-body\">\n <div className=\"card-choices\">\n {choices.map((choice) => (\n <div\n key={choice.type}\n className={`card ${selectedChoice === choice ? 'active' : ''}`}\n onClick={() => this.choiceSelected(choice)}\n >\n <h3 className=\"load-balancer-label\">{choice.type}</h3>\n <div>{choice.description}</div>\n </div>\n ))}\n </div>\n <div className=\"load-balancer-description\" />\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={this.choose}>\n Configure Load Balancer <span className=\"glyphicon glyphicon-chevron-right\" />\n </Button>\n </Modal.Footer>\n </>\n );\n }\n}\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IAzureProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n };\n}\n\nexport const AzureProviderSettings: IAzureProviderSettings = (SETTINGS.providers.azure as IAzureProviderSettings) || {\n defaults: {},\n};\nif (AzureProviderSettings) {\n AzureProviderSettings.resetToOriginal = SETTINGS.resetProvider('azure');\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AzureProviderSettings } from '../azure.settings';\n\nexport const AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER = 'spinnaker.azure.loadBalancer.transformer';\nexport const name = AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER, []).factory('azureLoadBalancerTransformer', [\n '$q',\n function ($q) {\n function normalizeLoadBalancer(loadBalancer) {\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 const activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups).map('instances').flatten().value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups).map('detachedInstances').flatten().value();\n return $q.resolve(loadBalancer);\n }\n\n function convertLoadBalancerForEditing(loadBalancer) {\n const toEdit = {\n region: loadBalancer.region,\n credentials: loadBalancer.account,\n name: loadBalancer.name,\n stack: loadBalancer.stack,\n detail: loadBalancer.detail,\n vnet: loadBalancer.vnet,\n subnet: loadBalancer.subnet,\n probes: [],\n loadBalancingRules: [],\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb;\n\n toEdit.securityGroups = elb.securityGroups;\n toEdit.vnet = elb.vnet;\n\n if (elb.loadBalancingRules) {\n toEdit.loadBalancingRules = elb.loadBalancingRules;\n }\n\n toEdit.probes = elb.probes;\n if (elb.dnsName && elb.dnsName !== 'dns-not-found') {\n toEdit.dnsName = elb.dnsName.split('.')[0];\n }\n }\n return toEdit;\n }\n\n function constructNewLoadBalancerTemplate(application) {\n const defaultCredentials = application.defaultCredentials.azure || AzureProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.azure || AzureProviderSettings.defaults.region;\n return {\n stack: '',\n detail: 'frontend',\n credentials: defaultCredentials,\n region: defaultRegion,\n cloudProvider: 'azure',\n vnet: null,\n subnet: null,\n probes: [\n {\n probeName: '',\n probeProtocol: 'HTTP',\n probePort: '80',\n probePath: '/',\n probeInterval: 30,\n unhealthyThreshold: 8,\n timeout: 120,\n },\n ],\n securityGroups: [],\n loadBalancingRules: [\n {\n ruleName: '',\n protocol: 'HTTP',\n externalPort: 80,\n backendPort: 80,\n probeName: '',\n persistence: 'None',\n idleTimeout: 4,\n },\n ],\n sku: 'Standard_v2',\n };\n }\n\n return {\n normalizeLoadBalancer: normalizeLoadBalancer,\n convertLoadBalancerForEditing: convertLoadBalancerForEditing,\n constructNewLoadBalancerTemplate: constructNewLoadBalancerTemplate,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LoadBalancerWriter, NameUtils, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from '../loadBalancer.transformer';\n\nexport const AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER =\n 'spinnaker.azure.loadBalancer.create.controller';\nexport const name = AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n]).controller('azureCreateLoadBalancerCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'azureLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n 'loadBalancerType',\n function (\n $scope,\n $uibModalInstance,\n $state,\n azureLoadBalancerTransformer,\n application,\n loadBalancer,\n isNew,\n loadBalancerType,\n ) {\n const ctrl = this;\n\n $scope.regions = [];\n\n $scope.pages = {\n location: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n healthCheck: require('./healthCheck.html'),\n advancedSettings: require('./advancedSettings.html'),\n };\n\n $scope.isNew = isNew;\n $scope.loadBalancerType = loadBalancerType.type;\n $scope.isALB = loadBalancerType.type === 'Azure Load Balancer';\n\n $scope.state = {\n accountsLoaded: false,\n submitting: false,\n };\n\n $scope.validSkus = ['Standard_v2', 'Standard_Small'];\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.loadBalancer.name,\n accountId: $scope.loadBalancer.credentials,\n region: $scope.loadBalancer.region,\n provider: 'azure',\n };\n\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: (isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function initializeCreateMode() {\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accountsLoaded = true;\n ctrl.accountUpdated();\n });\n }\n\n function initializeController() {\n if (loadBalancer) {\n $scope.loadBalancer = azureLoadBalancerTransformer.convertLoadBalancerForEditing(loadBalancer);\n if (isNew) {\n const nameParts = NameUtils.parseLoadBalancerName($scope.loadBalancer.name);\n $scope.loadBalancer.stack = nameParts.stack;\n $scope.loadBalancer.detail = nameParts.freeFormDetails;\n delete $scope.loadBalancer.name;\n }\n } else {\n $scope.loadBalancer = azureLoadBalancerTransformer.constructNewLoadBalancerTemplate(application);\n }\n if (isNew) {\n updateLoadBalancerNames();\n initializeCreateMode();\n }\n }\n\n function updateLoadBalancerNames() {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n\n const accountLoadBalancersByRegion = {};\n application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n application.getDataSource('loadBalancers').data.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancersByRegion[loadBalancer.region] =\n accountLoadBalancersByRegion[loadBalancer.region] || [];\n accountLoadBalancersByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n $scope.existingLoadBalancerNames = accountLoadBalancersByRegion[region] || [];\n });\n }\n\n initializeController();\n\n this.requiresHealthCheckPath = function () {\n return (\n $scope.loadBalancer.probes[0].probeProtocol && $scope.loadBalancer.probes[0].probeProtocol.indexOf('HTTP') === 0\n );\n };\n\n this.updateName = function () {\n $scope.loadBalancer.name = this.getName();\n };\n\n this.getName = function () {\n const elb = $scope.loadBalancer;\n const elbName = [application.name, elb.stack || '', elb.detail || ''].join('-');\n return _.trimEnd(elbName, '-');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.loadBalancer.credentials).then(function (regions) {\n $scope.regions = regions;\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n updateLoadBalancerNames();\n ctrl.updateName();\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n $scope.loadBalancer.selectedVnet = null;\n $scope.loadBalancer.vnet = null;\n $scope.loadBalancer.vnetResourceGroup = null;\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.loadBalancer.vnet = item.name;\n $scope.loadBalancer.vnetResourceGroup = item.resourceGroup;\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n if (device && device.type !== 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n ctrl.selectedSubnets.push(subnet);\n }\n });\n }\n };\n\n this.removeListener = function (index) {\n $scope.loadBalancer.loadBalancingRules.splice(index, 1);\n };\n\n this.addListener = function () {\n $scope.loadBalancer.loadBalancingRules.push({ protocol: 'HTTP' });\n };\n\n this.submit = function () {\n const descriptor = isNew ? 'Create' : 'Update';\n\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n clusterName: $scope.loadBalancer.clusterName,\n resourceGroupName: $scope.loadBalancer.clusterName,\n loadBalancerName: $scope.loadBalancer.name,\n };\n\n if ($scope.loadBalancer.selectedVnet) {\n $scope.loadBalancer.vnet = $scope.loadBalancer.selectedVnet.name;\n $scope.loadBalancer.vnetResourceGroup = $scope.loadBalancer.selectedVnet.resourceGroup;\n }\n\n if ($scope.loadBalancer.selectedSubnet) {\n $scope.loadBalancer.subnet = $scope.loadBalancer.selectedSubnet.name;\n }\n\n const name = $scope.loadBalancer.clusterName || $scope.loadBalancer.name;\n const probeName = name + '-probe';\n const ruleNameBase = name + '-rule';\n $scope.loadBalancer.type = 'upsertLoadBalancer';\n $scope.loadBalancer.loadBalancerType = $scope.loadBalancerType;\n if (!$scope.loadBalancer.vnet && !$scope.loadBalancer.subnetType) {\n $scope.loadBalancer.securityGroups = null;\n }\n\n $scope.loadBalancer.probes[0].probeName = probeName;\n\n $scope.loadBalancer.loadBalancingRules.forEach((rule, index) => {\n rule.ruleName = ruleNameBase + index;\n rule.probeName = probeName;\n });\n\n if ($scope.loadBalancer.probes[0].probeProtocol === 'TCP') {\n $scope.loadBalancer.probes[0].probePath = undefined;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer($scope.loadBalancer, application, descriptor, params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n LOAD_BALANCER_READ_SERVICE,\n LoadBalancerWriter,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\n\nexport const AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER =\n 'spinnaker.azure.loadBalancer.details.controller';\nexport const name = AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP,\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n LOAD_BALANCER_READ_SERVICE,\n ])\n .controller('azureLoadBalancerDetailsCtrl', [\n '$scope',\n '$state',\n '$exceptionHandler',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'securityGroupReader',\n 'loadBalancerReader',\n '$q',\n function (\n $scope,\n $state,\n $exceptionHandler,\n $uibModal,\n loadBalancer,\n app,\n securityGroupReader,\n loadBalancerReader,\n $q,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n function extractLoadBalancer() {\n $scope.loadBalancer = app.loadBalancers.data.filter(function (test) {\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 = loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n loadBalancer.region,\n loadBalancer.name,\n );\n\n return detailsLoader.then(function (details) {\n $scope.state.loading = false;\n const securityGroups = [];\n\n const filtered = details.filter(function (test) {\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(function (securityGroupId) {\n const match = securityGroupReader.getApplicationSecurityGroup(\n app,\n loadBalancer.accountId,\n loadBalancer.region,\n securityGroupId,\n );\n if (match) {\n securityGroups.push(match);\n }\n });\n $scope.securityGroups = _.sortBy(securityGroups, 'name');\n }\n\n if ($scope.loadBalancer.loadBalancerType && $scope.loadBalancer.loadBalancerType.includes('_')) {\n const type = $scope.loadBalancer.loadBalancerType;\n $scope.loadBalancer.loadBalancerType = type\n .split('_')\n .map((s) => {\n const ss = s.toLowerCase();\n return ss.substring(0, 1).toUpperCase() + ss.substring(1);\n })\n .join(' ');\n }\n }\n });\n }\n if (!$scope.loadBalancer) {\n $state.go('^');\n }\n\n return $q.when(null);\n }\n\n 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 (!$scope.$$destroyed) {\n app.onRefresh($scope, extractLoadBalancer);\n }\n });\n\n this.editLoadBalancer = function editLoadBalancer() {\n $uibModal.open({\n templateUrl: require('../configure/editLoadBalancer.html'),\n controller: 'azureCreateLoadBalancerCtrl as ctrl',\n size: 'lg',\n resolve: {\n application: function () {\n return app;\n },\n loadBalancer: function () {\n return angular.copy($scope.loadBalancer);\n },\n isNew: function () {\n return false;\n },\n loadBalancerType: function () {\n return { type: $scope.loadBalancer.loadBalancerType };\n },\n },\n });\n };\n\n this.deleteLoadBalancer = function deleteLoadBalancer() {\n if ($scope.loadBalancer.instances && $scope.loadBalancer.instances.length) {\n return;\n }\n\n const taskMonitor = {\n application: app,\n title: 'Deleting ' + loadBalancer.name,\n };\n\n const command = {\n cloudProvider: 'azure',\n loadBalancerName: $scope.loadBalancer.name,\n loadBalancerType: $scope.loadBalancer.loadBalancerType,\n credentials: $scope.loadBalancer.account,\n region: loadBalancer.region,\n appName: app.name,\n };\n\n const submitMethod = () => LoadBalancerWriter.deleteLoadBalancer(command, app);\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + loadBalancer.name + '?',\n buttonText: 'Delete ' + loadBalancer.name,\n account: loadBalancer.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n },\n ]);\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQYAAACrCAYAAACEwDK4AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABCZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI2MjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTcxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOS0wNS0wNlQxMjowNTozMTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjguMzwveG1wOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K8Qjg7wAAM9JJREFUeAHtnQeAFdX1/8/MvLa9L1tgF5Zl6UUUggoIggVLrCQYY42a/jPlb4rxr9EkvxhNIz9bEjUmllhRRFCxIKII0hVY2jaWLbC9vf5mft9z571lwd1lWfWXRM+FeW/ezJ07937uveeee+6ZWbIsazG2EpIgBITA554AywKWCSRC4XPfFgSAEDiCgMiEI3DIDyEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEh8B9DQPuPyWk0o+2WlRnyhYorW8O5++pb0irq2pIqu6y46uaAtau6tv6+L89Yf9akzF3/aeWS/AqBfycCjk8jM5ZljUa6FrZyTdPCvd0DcZJwvAhbLrZkbN158RMZXaGIsbcx4Cira3ej8ydWtoeza1u9haf8atXItkBkeER3pkYiRDpEm6FppBkaBci9zxHv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\"","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.azure.pipeline.stage.bake.executionDetails.controller';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'azureBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($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 || 'azure';\n $scope.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' &&\n SETTINGS.feature.roscoSelector($scope.stage.context));\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.azure.serverGroup.transformer';\nexport const name = AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER, []).factory('azureServerGroupTransformer', function () {\n function normalizeServerGroup(serverGroup) {\n return serverGroup;\n }\n\n function parseCustomScriptsSettings(command, configuration) {\n /*\n At the first time this wizard pops up, the type of command.customScriptsSettings.fileUris is String. As for the following\n occurrences of its pop up with this field unchanged, its type becomes an array. So here differentiate the two scenarios\n to assign the correct value to model.\n */\n if (Array.isArray(command.customScriptsSettings.fileUris)) {\n configuration.customScriptsSettings.fileUris = command.customScriptsSettings.fileUris;\n } else {\n const fileUrisTemp = command.customScriptsSettings.fileUris;\n if (fileUrisTemp.includes(',')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(',');\n } else if (fileUrisTemp.includes(';')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(';');\n } else {\n configuration.customScriptsSettings.fileUris = [fileUrisTemp];\n }\n\n configuration.customScriptsSettings.fileUris.forEach(function (v, index) {\n configuration.customScriptsSettings.fileUris[index] = v.trim();\n });\n }\n }\n\n function convertServerGroupCommandToDeployConfiguration(command) {\n let tempImage;\n\n if (command.viewState.mode === 'editPipeline' || command.viewState.mode === 'createPipeline') {\n tempImage = {\n imageName: '',\n isCustom: 'true',\n publisher: '',\n offer: '',\n sku: '',\n version: '',\n region: command.region,\n uri: '',\n ostype: '',\n };\n } else {\n tempImage = command.selectedImage;\n }\n\n const configuration = {\n name: command.application,\n cloudProvider: command.selectedProvider,\n application: command.application,\n stack: command.stack,\n strategy: command.strategy,\n rollback: {\n onFailure: command.rollback ? command.rollback.onFailure : null,\n },\n scaleDown: command.scaleDown,\n maxRemainingAsgs: command.maxRemainingAsgs,\n delayBeforeDisableSec: command.delayBeforeDisableSec,\n delayBeforeScaleDownSec: command.delayBeforeScaleDownSec,\n allowDeleteActive: command.strategy === 'redblack' ? true : null,\n allowScaleDownActive: command.strategy === 'redblack' ? true : null,\n detail: command.freeFormDetails,\n freeFormDetails: command.freeFormDetails,\n healthSettings: command.healthSettings,\n image: command.image,\n account: command.credentials,\n selectedProvider: 'azure',\n vnet: command.vnet,\n vnetResourceGroup: command.selectedVnet.resourceGroup,\n subnet: command.subnet,\n useSourceCapacity: false,\n capacity: {\n min: command.sku.capacity,\n max: command.sku.capacity,\n },\n credentials: command.credentials,\n region: command.region,\n securityGroupName: command.securityGroupName,\n loadBalancerName: command.loadBalancerName,\n loadBalancerType: command.loadBalancerType,\n user: '[anonymous]',\n upgradePolicy: 'Manual',\n type: 'createServerGroup',\n sku: {\n name: 'Standard_DS1_v2',\n tier: 'Standard',\n capacity: command.sku.capacity,\n },\n instanceTags: command.instanceTags,\n dataDisks: command.dataDisks,\n userAssignedIdentities: command.userAssignedIdentities,\n viewState: command.viewState,\n osConfig: {\n customData: command.osConfig ? command.osConfig.customData : null,\n },\n customScriptsSettings: {\n fileUris: null,\n commandToExecute: '',\n },\n zonesEnabled: command.zonesEnabled,\n zones: command.zonesEnabled ? command.zones : [],\n enableInboundNAT: command.enableInboundNAT,\n };\n\n if (command.image == null || command.image.isCustom == false) {\n configuration.image = tempImage;\n }\n\n if (typeof command.stack !== 'undefined') {\n configuration.name = configuration.name + '-' + command.stack;\n }\n if (typeof command.freeFormDetails !== 'undefined') {\n configuration.name = configuration.name + '-' + command.freeFormDetails;\n }\n\n if (typeof command.customScriptsSettings !== 'undefined') {\n configuration.customScriptsSettings.commandToExecute = command.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(command.customScriptsSettings.fileUris)) {\n parseCustomScriptsSettings(command, configuration);\n }\n }\n\n if (command.instanceType) {\n const vmsku = command.instanceType;\n configuration.instanceType = command.instanceType;\n configuration.sku.name = vmsku;\n configuration.sku.tier = vmsku.substring(0, vmsku.indexOf('_'));\n }\n\n // Default to an empty list of health provider names for now.\n configuration.interestingHealthProviderNames = [];\n\n return configuration;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration: convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup: normalizeServerGroup,\n parseCustomScriptsSettings: parseCustomScriptsSettings,\n };\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.azure.serverGroupCommandBuilder.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n ])\n .factory('azureServerGroupCommandBuilder', [\n '$q',\n 'azureImageReader',\n 'azureServerGroupTransformer',\n function ($q, azureImageReader, azureServerGroupTransformer) {\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultCredentials = defaults.account || application.defaultCredentials.azure;\n const defaultRegion = defaults.region || application.defaultRegions.azure;\n\n return azureImageReader.findImages({ provider: 'azure' }).then(function (images) {\n return {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n images,\n loadBalancers: [],\n selectedVnetSubnets: [],\n strategy: '',\n sku: {\n capacity: 1,\n },\n zonesEnabled: false,\n zones: [],\n instanceTags: {},\n dataDisks: [],\n selectedProvider: 'azure',\n viewState: {\n instanceProfile: 'custom',\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n loadBalancersConfigured: false,\n networkSettingsConfigured: false,\n securityGroupsConfigured: false,\n },\n enableInboundNAT: false,\n };\n });\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline() {\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n },\n });\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n\n const serverGroupName = NameUtils.parseServerGroupName(serverGroup.name);\n\n const command = {\n application: application.name,\n strategy: '',\n stack: serverGroupName.stack,\n freeFormDetails: serverGroupName.freeFormDetails,\n credentials: serverGroup.account,\n loadBalancers: serverGroup.loadBalancers,\n selectedSubnets: serverGroup.selectedVnetSubnets,\n selectedVnet: serverGroup.selectedVnet,\n securityGroups: serverGroup.securityGroups,\n loadBalancerName: serverGroup.loadBalancerName,\n loadBalancerType: serverGroup.loadBalancerType,\n securityGroupName: serverGroup.securityGroupName,\n region: serverGroup.region,\n vnet: serverGroup.vnet,\n vnetResourceGroup: serverGroup.vnetResourceGroup,\n subnet: serverGroup.subnet,\n zones: serverGroup.zones,\n zonesEnabled: serverGroup.zones && serverGroup.zones.length > 0,\n instanceTags: {},\n dataDisks: serverGroup.dataDisks,\n sku: serverGroup.sku,\n capacity: {\n min: serverGroup.capacity.min,\n max: serverGroup.capacity.max,\n desired: serverGroup.capacity.desired,\n },\n tags: [],\n instanceType: serverGroup.sku.name,\n selectedProvider: 'azure',\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n asgName: serverGroup.name,\n },\n viewState: {\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: false,\n listImplicitSecurityGroups: false,\n mode: mode,\n disableStrategySelection: true,\n },\n enableInboundNAT: serverGroup.enableInboundNAT,\n };\n\n if (typeof serverGroup.customScriptsSettings !== 'undefined') {\n command.customScriptsSettings = {};\n command.customScriptsSettings.commandToExecute = serverGroup.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(serverGroup.customScriptsSettings.fileUris)) {\n azureServerGroupTransformer.parseCustomScriptsSettings(serverGroup, command);\n }\n }\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = pipelineCluster.region;\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n const viewState = {\n disableImageSelection: true,\n useSimpleCapacity: true,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n instanceProfile: originalCluster.viewState.instanceProfile,\n instanceTypeDetails: originalCluster.viewState.instanceTypeDetails,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n viewState: viewState,\n };\n if (originalCluster.viewState.instanceTypeDetails) {\n viewOverrides.instanceType = originalCluster.viewState.instanceTypeDetails.name;\n }\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);\n\n return extendedCommand;\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n PipelineTemplates,\n Registry,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../../image/image.reader';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './../../../serverGroup/configure/serverGroupCommandBuilder.service';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE = 'spinnaker.azure.pipeline.stage.bakeStage';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE, [\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER,\n])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'azure',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'package' },\n { type: 'requiredField', fieldName: 'regions' },\n {\n type: 'upstreamVersionProvided',\n checkParentTriggers: true,\n getMessage: (labels) =>\n 'Bake stages should always have a stage or trigger preceding them that provides version information: ' +\n '<ul>' +\n labels.map((label) => `<li>${label}</li>`).join('') +\n '</ul>' +\n 'Otherwise, Spinnaker will bake and deploy the most-recently built package.',\n },\n ],\n restartable: true,\n });\n })\n .controller('azureBakeStageCtrl', [\n '$scope',\n '$q',\n 'azureImageReader',\n '$uibModal',\n function ($scope, $q, azureImageReader, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.regions = $scope.stage.regions || [];\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $q.all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n BakeryReader.getRegions('azure'),\n BakeryReader.getBaseOsOptions('azure'),\n BakeryReader.getBaseLabelOptions(),\n ]).then(function ([credentialsKeyedByAccount, regions, baseOsOptions, baseLabelOptions]) {\n $scope.accounts = Object.keys(credentialsKeyedByAccount);\n $scope.regions = regions;\n if ($scope.regions.length === 1) {\n $scope.stage.region = $scope.regions[0];\n } else if (!$scope.regions.includes($scope.stage.region)) {\n delete $scope.stage.region;\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n $scope.baseOsOptions = baseOsOptions.baseImages;\n\n $scope.baseLabelOptions = baseLabelOptions;\n $scope.osTypeOptions = ['linux', 'windows'];\n $scope.packageTypeOptions = ['DEB', 'RPM'];\n\n $scope.viewState.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage));\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n\n if ($scope.stage.managedImage != null) {\n $scope.managedImagesWasChosen = true;\n setManagedImages();\n }\n $scope.defaultImagesWasChosen = $scope.stage.baseOs != null;\n $scope.customImagesWasChosen = $scope.stage.publisher != null;\n });\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\n // Since the selector computes using stage as an input, it needs to be able to recompute roscoMode on updates\n if (typeof SETTINGS.feature.roscoSelector === 'function') {\n $scope.viewState.roscoMode = SETTINGS.feature.roscoSelector($scope.stage);\n }\n }\n\n function showAdvanced() {\n const stg = $scope.stage;\n return !!(\n stg.templateFileName ||\n (stg.extendedAttributes && _.size(stg.extendedAttributes) > 0) ||\n stg.varFileName\n );\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n function setManagedImages() {\n azureImageReader\n .findImages({ provider: 'azure', managedImages: true, account: $scope.stage.account })\n .then(function (images) {\n let managedImageOptions = [];\n for (let i in images) {\n let image = images[i];\n let newImage = {\n id: image.imageName,\n osType: image.ostype,\n name: image.imageName,\n };\n managedImageOptions.push(newImage);\n }\n $scope.managedImageOptions = managedImageOptions;\n })\n .catch(() => {});\n }\n\n function setRegions() {\n AccountService.getRegionsForAccount($scope.stage.account)\n .then(function (regions) {\n $scope.regions = regions.map((r) => r.name);\n })\n .catch(() => {});\n }\n\n this.addExtendedAttribute = function () {\n if (!$scope.stage.extendedAttributes) {\n $scope.stage.extendedAttributes = {};\n }\n $uibModal\n .open({\n templateUrl: PipelineTemplates.addExtendedAttributes,\n controller: 'bakeStageAddExtendedAttributeController',\n controllerAs: 'addExtendedAttribute',\n resolve: {\n extendedAttribute: function () {\n return {\n key: '',\n value: '',\n };\n },\n },\n })\n .result.then(function (extendedAttribute) {\n $scope.stage.extendedAttributes[extendedAttribute.key] = extendedAttribute.value;\n })\n .catch(() => {});\n };\n\n this.removeExtendedAttribute = function (key) {\n delete $scope.stage.extendedAttributes[key];\n };\n\n this.showTemplateFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.templateFileName;\n };\n\n this.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && _.size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n this.showVarFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.varFileName;\n };\n\n this.showDefaultImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = true;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.managedImage = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.showManagedImages = function () {\n setManagedImages();\n\n $scope.managedImagesWasChosen = true;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.osType = null;\n $scope.stage.baseOs = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.packageType = null;\n };\n\n this.showCustomImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = true;\n\n $scope.stage.baseOs = null;\n $scope.stage.managedImage = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.onChangeAccount = () => {\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n $scope.stage.managedImage = null;\n\n if ($scope.stage.account) {\n setRegions();\n }\n\n if ($scope.managedImagesWasChosen) {\n setManagedImages();\n }\n };\n\n $scope.onChangeManagedImage = () => {\n $scope.stage.packageType = null;\n const selectedManagedImage = _.find($scope.managedImageOptions, { id: $scope.stage.managedImage });\n $scope.stage.osType = selectedManagedImage.osType.toLowerCase();\n };\n\n this.onChangeOsType = function (e) {\n $scope.stage.packageType = null;\n };\n\n $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE = 'spinnaker.azure.pipeline.stage.destroyAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'azure',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDestroyAsgStageCtrl', [\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('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getAccountDetails(stage.credentials).then(function (details) {\n stage.regions = [details.org];\n // stage.regions = ['eastus', 'westus'];\n });\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n\n if (stage.credentials) {\n ctrl.accountUpdated();\n }\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.disableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'azure',\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('azureDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew && $scope.application.attributes.platformHealthOnly) {\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.enableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./enableAsgStage.html'),\n executionStepLabelUrl: require('./enableAsgStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureEnableAsgStageCtrl', [\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('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.reset = () => {\n ctrl.accountUpdated();\n ctrl.resetSelectedCluster();\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew) {\n // bypass the health check for now; will change this later to ['azureService'] and we will also add back the check for $scope.application.attributes.platformHealthOnly\n stage.interestingHealthProviderNames = [];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels, InfrastructureCaches, TaskExecutor } from '@spinnaker/core';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE = 'spinnaker.azure.securityGroup.write.service';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE, [UIROUTER_ANGULARJS]).factory(\n 'azureSecurityGroupWriter',\n function () {\n function upsertSecurityGroup(securityGroup, application, descriptor, params = {}) {\n params.securityGroupName = securityGroup.name;\n\n // We want to extend params with all attributes from securityGroup, but only if they don't already exist.\n _.assignWith(params, securityGroup, function (value, other) {\n return _.isUndefined(value) ? other : value;\n });\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `${descriptor} ${FirewallLabels.get('Firewall')}: ${name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n function deleteSecurityGroup(securityGroup, application, params = {}) {\n params.type = 'deleteSecurityGroup';\n params.securityGroupName = securityGroup.name;\n params.regions = [securityGroup.region];\n params.credentials = securityGroup.accountId;\n //params.cloudProvider = securityGroup.providerType;\n params.appName = application.name;\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `Delete ${FirewallLabels.get('Firewalls')}: ${securityGroup.name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n return {\n deleteSecurityGroup: deleteSecurityGroup,\n upsertSecurityGroup: upsertSecurityGroup,\n };\n },\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL = 'spinnaker.azure.securityGroup.create.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function ($scope, $uibModalInstance, $state, $controller, application, securityGroup, azureSecurityGroupWriter) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.regions = [];\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n const ctrl = this;\n $scope.isNew = true;\n $scope.state = {\n submitting: false,\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.regions[0],\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Creating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n $scope.securityGroup = securityGroup;\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.securityGroup.credentials;\n const region = $scope.securityGroup.region;\n $scope.securityGroup.selectedVnet = null;\n $scope.securityGroup.vnet = null;\n $scope.securityGroup.vnetResourceGroup = null;\n\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.securityGroup.vnet = item.name;\n $scope.securityGroup.vnetResourceGroup = item.resourceGroup;\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n ctrl.selectedSubnets.push(subnet);\n });\n }\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n vpcId: 'null',\n };\n\n if ($scope.securityGroup.selectedVnet) {\n $scope.securityGroup.vnet = $scope.securityGroup.selectedVnet.name;\n $scope.securityGroup.vnetResourceGroup = $scope.securityGroup.selectedVnet.resourceGroup;\n }\n\n if ($scope.securityGroup.selectedSubnet) {\n $scope.securityGroup.subnet = $scope.securityGroup.selectedSubnet.name;\n }\n\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create', params);\n });\n };\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length == 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n ctrl.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n ctrl.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n ctrl.protocolUpdated = function (ruleset, index) {\n ruleset[index].protocol = ruleset[index].protocolUI;\n };\n\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.securityGroup.securityRules = [];\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n CACHE_INITIALIZER_SERVICE,\n FirewallLabels,\n InfrastructureCaches,\n SECURITY_GROUP_READER,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL =\n 'spinnaker.azure.securityGroup.azure.edit.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n CACHE_INITIALIZER_SERVICE,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$exceptionHandler',\n '$state',\n 'securityGroupReader',\n 'cacheInitializer',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function (\n $scope,\n $uibModalInstance,\n $exceptionHandler,\n $state,\n securityGroupReader,\n cacheInitializer,\n application,\n securityGroup,\n azureSecurityGroupWriter,\n ) {\n $scope.pages = {\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n if (!_.isEmpty(rule.protocol)) {\n rule.protocolUI = rule.protocol.toLowerCase();\n }\n\n rule.destPortRanges = rule.destinationPortRangeModel;\n rule.sourceIPCIDRRanges = rule.sourceAddressPrefixModel;\n\n return rule;\n });\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.refreshSecurityGroups = function () {\n $scope.state.refreshingSecurityGroups = true;\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n initializeSecurityGroups().then(function () {\n $scope.state.refreshingSecurityGroups = false;\n });\n });\n };\n\n function initializeSecurityGroups() {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n const account = securityGroup.accountName;\n const region = securityGroup.region;\n const availableGroups = _.filter(securityGroups[account].azure[region], {\n /*vpcId: vpcId*/\n });\n $scope.availableSecurityGroups = _.map(availableGroups, 'name');\n });\n }\n\n this.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n this.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n this.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n this.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n this.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n this.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.taskMonitor.onTaskComplete = $uibModalInstance.dismiss;\n\n this.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: null,\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from '../configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER = 'spinnaker.azure.securityGroup.clone.controller';\nexport const name = AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n]).controller('azureCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n '$state',\n 'azureSecurityGroupWriter',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, $state, azureSecurityGroupWriter, securityGroup, application) {\n const ctrl = this;\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n const temp = rule.destinationPortRange.split('-');\n rule.startPort = Number(temp[0]);\n rule.endPort = Number(temp[1]);\n return rule;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '7001-7001',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n ctrl.portUpdated = function (ruleset, index) {\n ruleset[index].destinationPortRange = ruleset[index].startPort + '-' + ruleset[index].endPort;\n };\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: 'none',\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Clone', params);\n });\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { ConfirmationModalService, FirewallLabels, SECURITY_GROUP_READER } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.azure.securityGroup.azure.details.controller';\nexport const name = AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n ])\n .controller('azureSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'azureSecurityGroupWriter',\n 'securityGroupReader',\n '$uibModal',\n function ($scope, $state, resolvedSecurityGroup, app, azureSecurityGroupWriter, securityGroupReader, $uibModal) {\n const application = app;\n const securityGroup = resolvedSecurityGroup;\n\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n function extractSecurityGroup() {\n return securityGroupReader\n .getSecurityGroupDetails(\n application,\n securityGroup.accountId,\n securityGroup.provider,\n securityGroup.region,\n securityGroup.vpcId,\n securityGroup.name,\n )\n .then(\n function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n $scope.securityGroup = details;\n }\n },\n function () {\n fourOhFour();\n },\n );\n }\n\n function fourOhFour() {\n $state.go('^');\n }\n\n extractSecurityGroup().then(() => {\n // If the user navigates away from the view before the initial extractSecurityGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\n }\n });\n\n this.editInboundRules = function editInboundRules() {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'azureEditSecurityGroupCtrl as ctrl',\n resolve: {\n securityGroup: function () {\n return angular.copy($scope.securityGroup);\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'azureCloneSecurityGroupController as ctrl',\n resolve: {\n securityGroup: function () {\n const securityGroup = angular.copy($scope.securityGroup);\n if (securityGroup.region) {\n securityGroup.regions = [securityGroup.region];\n }\n return securityGroup;\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.deleteSecurityGroup = function deleteSecurityGroup() {\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n };\n\n const submitMethod = function () {\n $scope.securityGroup.type = 'deleteSecurityGroup';\n return azureSecurityGroupWriter.deleteSecurityGroup(securityGroup, application, {\n cloudProvider: 'azure',\n vpcId: $scope.securityGroup.vpcId,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + securityGroup.name + '?',\n buttonText: 'Delete ' + securityGroup.name,\n account: securityGroup.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n if (app.isStandalone) {\n // we still want the edit to refresh the firewall details when the modal closes\n app.securityGroups = {\n refresh: extractSecurityGroup,\n };\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.azure.securityGroup.reader';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('azureSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n //hack to get around securityGroupId not matching id in indexedSecurityGroups.\n const temp = securityGroupId.split('/');\n return indexedSecurityGroups[container.account][container.region][temp[temp.length - 1]];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.azure.securityGroup.transformer';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('azureSecurityGroupTransformer', function () {\n function normalizeSecurityGroup() {}\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceArchetype.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER, []).controller(\n 'azureInstanceArchetypeCtrl',\n [\n '$scope',\n 'instanceTypeService',\n 'modalWizardService',\n function ($scope, instanceTypeService, modalWizardService) {\n const wizard = modalWizardService.getWizard();\n\n $scope.$watch('command.viewState.instanceProfile', function () {\n if (!$scope.command.viewState.instanceProfile || $scope.command.viewState.instanceProfile === 'custom') {\n wizard.excludePage('instance-type');\n } else {\n wizard.includePage('instance-type');\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n\n $scope.$watch('command.viewState.instanceType', function (newVal) {\n if (newVal) {\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceType.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER, []).controller('azureInstanceTypeCtrl', [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('instance-type');\n modalWizardService.getWizard().markClean('instance-type');\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.advancedSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupAdvancedSettingsCtrl',\n [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('advanced');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n modalWizardService.getWizard().markClean('advanced');\n } else {\n modalWizardService.getWizard().markDirty('advanced');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.advancedSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupAdvancedSettingsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./advancedSettingsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'adv',\n controller: 'azureServerGroupAdvancedSettingsSelectorCtrl',\n };\n })\n .controller('azureServerGroupAdvancedSettingsSelectorCtrl', function () {\n this.addDataDisk = () => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n this.command.dataDisks = newDataDisks.concat([\n {\n lun: 0,\n managedDisk: {\n storageAccountType: 'Standard_LRS',\n },\n diskSizeGB: 1,\n caching: 'None',\n createOption: 'Empty',\n },\n ]);\n };\n\n this.removeDataDisk = (index) => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n newDataDisks.splice(index, 1);\n this.command.dataDisks = newDataDisks;\n };\n });\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER =\n 'spinnaker.azure.serverGroup.configure.basicSettings.image.filter';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER, []).filter('regional', function () {\n return function (input, selectedRegion) {\n return _.filter(input, function (image) {\n return image.region === selectedRegion || image.region === null;\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, ModalWizard } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER } from './image.regional.filter';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.basicSettings';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER,\n IMAGE_READER,\n ])\n .controller('azureServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n 'imageReader',\n function ($scope, $controller, $uibModalStack, $state, imageReader) {\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('basic-settings');\n ModalWizard.markComplete('basic-settings');\n } else {\n ModalWizard.markIncomplete('basic-settings');\n }\n });\n\n this.imageChanged = (image) => {\n $scope.command.imageName = image.imageName;\n $scope.command.selectedImage = image;\n ModalWizard.markClean('basic-settings');\n };\n\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: imageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n this.stackPattern = {\n test: function (stack) {\n const pattern = $scope.command.viewState.templatingEnabled ? /^([a-zA-Z0-9]*(\\${.+})*)*$/ : /^[a-zA-Z0-9]*$/;\n\n return pattern.test(stack);\n },\n };\n\n this.detailPattern = {\n test: function (detail) {\n const pattern = $scope.command.viewState.templatingEnabled\n ? /^([a-zA-Z0-9-]*(\\${.+})*)*$/\n : /^[a-zA-Z0-9-]*$/;\n\n return pattern.test(detail);\n },\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupCapacitySelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./capacitySelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'cap',\n controller: 'azureServerGroupCapacitySelectorCtrl',\n };\n })\n .controller('azureServerGroupCapacitySelectorCtrl', function () {});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.healthSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupHealthSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n if (typeof $scope.command.healthSettings === 'undefined') {\n $scope.command.healthSettings = {};\n }\n\n this.healthCheckProtocols = [\n { displayName: 'N/A', name: null },\n { displayName: 'HTTP', name: 'http' },\n { displayName: 'TCP', name: 'tcp' },\n ];\n\n this.requiresHealthCheckPath = function () {\n return $scope.command.healthSettings.protocol === 'http';\n };\n\n this.changeHealthCheckProtocol = function (newProtocol) {\n if (newProtocol == null) {\n $scope.command.healthSettings.protocol = null;\n $scope.command.healthSettings.port = null;\n $scope.command.healthSettings.requestPath = null;\n } else if (!this.requiresHealthCheckPath()) {\n $scope.command.healthSettings.requestPath = null;\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.healthSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupHealthSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./healthSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.imageSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupImageSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n this.clearImage = function () {\n if ($scope.command.image.isCustom == false) {\n $scope.command.image = { isCustom: false };\n } else {\n $scope.command.image.region = $scope.command.region;\n }\n };\n\n ModalWizard.markComplete('image-settings');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('image-settings');\n } else {\n ModalWizard.markDirty('image-settings');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.imageSettingsSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE, []).directive(\n 'azureServerGroupImageSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./imageSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches, LOAD_BALANCER_READ_SERVICE, ModalWizard, NetworkReader } from '@spinnaker/core';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER, [\n LOAD_BALANCER_READ_SERVICE,\n]).controller('azureServerGroupLoadBalancersCtrl', [\n '$scope',\n 'loadBalancerReader',\n function ($scope, loadBalancerReader) {\n ModalWizard.markClean('load-balancers');\n\n function loadVnetSubnets(item, type) {\n loadBalancerReader\n .getLoadBalancerDetails('azure', $scope.command.credentials, $scope.command.region, item)\n .then(function (LBs) {\n if (!LBs || LBs.length === 0) {\n // load the subnet and vnets without a load balancer\n const attachedVnet = $scope.command.selectedVnet;\n const attachedSubnet = $scope.command.selectedSubnet;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n if (subnet.name === attachedSubnet) {\n $scope.command.selectedSubnet = attachedSubnet;\n }\n }\n });\n }\n });\n }\n });\n } else if (LBs && LBs.length === 1) {\n const selectedLoadBalancer = LBs[0];\n const attachedVnet = $scope.command.selectedVnet;\n $scope.command.selectedVnet = null;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n }\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region &&\n ((type === 'Azure Application Gateway' && selectedVnet.name == selectedLoadBalancer.vnet) ||\n (type === 'Azure Load Balancer' && selectedVnet.name === attachedVnet.name))\n ) {\n $scope.command.selectedVnet = selectedVnet;\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n }\n });\n }\n });\n }\n });\n }\n });\n }\n\n if ($scope.command.credentials && $scope.command.region) {\n $scope.command.viewState.networkSettingsConfigured = true;\n $scope.command.selectedVnetSubnets = [];\n if ($scope.command.loadBalancerName !== null && typeof $scope.command.loadBalancerName !== 'undefined') {\n $scope.useLoadBalancer = true;\n }\n loadVnetSubnets($scope.command.loadBalancerName, $scope.command.loadBalancerType);\n }\n\n this.loadBalancerChanged = function (item) {\n $scope.command.viewState.networkSettingsConfigured = true;\n ModalWizard.markComplete('load-balancers');\n\n const loadBalancers = $scope.command.backingData.loadBalancers;\n let loadBalancerType = null;\n\n if (loadBalancers) {\n const loadBalancerToFind = loadBalancers.find((lb) => lb.name === item);\n if (loadBalancerToFind) {\n loadBalancerType = Utility.getLoadBalancerType(loadBalancerToFind.loadBalancerType).type;\n }\n }\n\n if (item === null) {\n $scope.command.loadBalancerName = null;\n }\n\n $scope.command.selectedVnetSubnets = [];\n $scope.command.loadBalancerType = loadBalancerType;\n InfrastructureCaches.clearCache('networks');\n loadVnetSubnets(item, loadBalancerType);\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupLoadBalancersSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupLoadBalancersSelector.directive.html'),\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.networkSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupNetworkSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('network-settings');\n\n $scope.command.selectedVnet = {\n name: $scope.command.vnet,\n };\n\n $scope.command.selectedSubnet = $scope.command.subnet;\n\n this.vnetChanged = function (item) {\n $scope.command.vnet = item;\n $scope.command.subnet = $scope.command.selectedSubnet = null;\n $scope.command.selectedVnetSubnets = item.subnets.map((s) => s.name);\n };\n\n this.networkSettingsChanged = function (item) {\n $scope.command.vnet = $scope.command.selectedVnet.name;\n $scope.command.subnet = item;\n ModalWizard.markComplete('network-settings');\n };\n\n this.getVnetName = function () {\n if ($scope.command.selectedVnet) {\n return $scope.command.selectedVnet.name;\n } else {\n return 'Virtual network was not selected';\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.networkSettings.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupNetworkSettingsSelector',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./ServerGroupNetworkSettingsSelector.directive.html'),\n };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.securityGroups.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER, []).controller(\n 'azureServerGroupSecurityGroupsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('security-groups');\n ModalWizard.markComplete('security-groups');\n\n $scope.command.selectedSecurityGroup = {\n id: $scope.command.securityGroupName,\n };\n\n this.securityGroupChanged = function (securityGroup) {\n $scope.command.securityGroupName = securityGroup.id;\n ModalWizard.markComplete('security-groups');\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { FirewallLabels, InfrastructureCaches } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.securityGroupSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupSecurityGroupsSelector',\n [\n 'azureServerGroupConfigurationService',\n function (azureServerGroupConfigurationService) {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupSecurityGroupsSelector.directive.html'),\n link: function (scope) {\n scope.firewallLabel = FirewallLabels.get('firewall');\n\n scope.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n scope.refreshSecurityGroups = function () {\n scope.refreshing = true;\n azureServerGroupConfigurationService.refreshSecurityGroups(scope.command).then(function () {\n scope.refreshing = false;\n });\n };\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.tags.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE, [])\n .directive('azureTagsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./tagsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'tagsSelectorCtrl',\n controller: 'TagsSelectorCtrl',\n };\n })\n .controller('TagsSelectorCtrl', [\n '$scope',\n function () {\n this.getTagResult = function () {\n return Utility.checkTags(this.command.instanceTags);\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.zone.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE, []).directive('azureZoneSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./zoneSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: [\n '$scope',\n function ($scope) {\n this.updateEnableInboundNAT = () => {\n if ($scope.vm.command.zonesEnabled) {\n $scope.vm.command.enableInboundNAT = false;\n }\n };\n },\n ],\n };\n});\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER } from './wizard/ServerGroupInstanceArchetype.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER } from './wizard/ServerGroupInstanceType.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER } from './wizard/advancedSettings/ServerGroupAdvancedSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER } from './wizard/basicSettings/ServerGroupBasicSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE } from './wizard/capacity/capacitySelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER } from './wizard/healthSettings/ServerGroupHealthSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE } from './wizard/healthSettings/healthSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER } from './wizard/image/ServerGroupImageSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE } from './wizard/image/imageSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER } from './wizard/loadBalancers/ServerGroupLoadBalancers.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE } from './wizard/loadBalancers/serverGroupLoadBalancersSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER } from './wizard/networkSettings/ServerGroupNetworkSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE } from './wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER } from './wizard/securityGroup/ServerGroupSecurityGroups.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE } from './wizard/securityGroup/serverGroupSecurityGroupsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE } from './wizard/tags/tagsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE = 'spinnaker.azure.serverGroup.configure';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE, [\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE,\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from '../../instance/azureInstanceType.service';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.azure.serverGroup.configure.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n ])\n .factory('azureServerGroupConfigurationService', [\n '$q',\n 'azureImageReader',\n 'securityGroupReader',\n 'cacheInitializer',\n 'loadBalancerReader',\n 'azureInstanceTypeService',\n function (\n $q,\n azureImageReader,\n securityGroupReader,\n cacheInitializer,\n loadBalancerReader,\n azureInstanceTypeService,\n ) {\n const dataDiskTypes = ['Standard_LRS', 'StandardSSD_LRS', 'Premium_LRS'];\n const dataDiskCachingTypes = ['None', 'ReadOnly', 'ReadWrite'];\n\n const healthCheckTypes = ['EC2', 'ELB'];\n const terminationPolicies = [\n 'OldestInstance',\n 'NewestInstance',\n 'OldestLaunchConfiguration',\n 'ClosestToNextInstanceHour',\n 'Default',\n ];\n\n function configureUpdateCommand(command) {\n command.backingData = {\n healthCheckTypes: angular.copy(healthCheckTypes),\n terminationPolicies: angular.copy(terminationPolicies),\n };\n }\n\n function configureCommand(application, command) {\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n securityGroupReader.loadSecurityGroups(),\n loadBalancerReader.loadLoadBalancers(application.name),\n ])\n .then(function ([credentialsKeyedByAccount, securityGroups, loadBalancers]) {\n command.backingData = {\n credentialsKeyedByAccount,\n securityGroups,\n loadBalancers,\n dataDiskTypes: angular.copy(dataDiskTypes),\n dataDiskCachingTypes: angular.copy(dataDiskCachingTypes),\n accounts: _.keys(credentialsKeyedByAccount),\n filtered: {},\n };\n attachEventHandlers(command);\n });\n }\n\n function configureInstanceTypes(command) {\n const result = {\n dirty: {},\n };\n if (command.region) {\n const results = [result.dirty];\n\n // results.push(configureCustomInstanceTypes(command).dirty);\n results.push(configureStandardInstanceTypes(command).dirty);\n\n angular.extend(...results);\n } else {\n command.backingData.filtered.instanceTypes = [];\n }\n return result;\n }\n\n function configureStandardInstanceTypes(command) {\n const c = command;\n const result = {\n dirty: {},\n };\n\n const locations = [c.region];\n const { credentialsKeyedByAccount } = c.backingData;\n const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];\n\n if (locations.every((l) => !l)) {\n return result;\n }\n\n const filtered = azureInstanceTypeService\n .getAvailableTypesForRegions(locationToInstanceTypesMap, locations)\n .map((type) => type.name);\n\n const instanceType = c.instanceType;\n if (_.every([instanceType, !_.startsWith(instanceType, 'custom'), !_.includes(filtered, instanceType)])) {\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n c.backingData.filtered.instanceTypes = filtered;\n return result;\n }\n\n function configureImages(command) {\n const result = {\n dirty: {},\n };\n let regionalImages = null;\n if (command.viewState.disableImageSelection) {\n return result;\n }\n if (command.region) {\n regionalImages = command.backingData.packageImages\n .filter(function (image) {\n return image.amis && image.amis[command.region];\n })\n .map(function (image) {\n return {\n imageName: image.imageName,\n ami: image.amis ? image.amis[command.region][0] : null,\n };\n });\n if (\n command.amiName &&\n !regionalImages.some(function (image) {\n return image.imageName === command.amiName;\n })\n ) {\n result.dirty.amiName = true;\n command.amiName = null;\n }\n } else {\n command.amiName = null;\n }\n command.backingData.filtered.images = regionalImages;\n return result;\n }\n\n function configureZones(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (!command.region) {\n return result;\n }\n let { regionsSupportZones, availabilityZones } = command.backingData.credentialsKeyedByAccount[\n command.credentials\n ];\n regionsSupportZones = regionsSupportZones || [];\n availabilityZones = availabilityZones || [];\n filteredData.zones = regionsSupportZones.includes(command.region) ? availabilityZones : [];\n\n return result;\n }\n\n function getRegionalSecurityGroups(command) {\n const newSecurityGroups = command.backingData.securityGroups[command.credentials] || {\n azure: {},\n };\n return _.chain(newSecurityGroups[command.region]).sortBy('name').value();\n }\n\n function configureSecurityGroupOptions(command) {\n const result = {\n dirty: {},\n };\n let currentOptions;\n if (command.backingData.filtered.securityGroups) {\n currentOptions = command.backingData.filtered.securityGroups;\n }\n const newRegionalSecurityGroups = getRegionalSecurityGroups(command);\n if (command.selectedSecurityGroup) {\n // one has not been previously selected. We are either configuring for the\n //first time or they changed regions or account\n command.selectedSecurityGroup = null;\n result.dirty.securityGroups = true;\n }\n if (currentOptions != newRegionalSecurityGroups) {\n command.backingData.filtered.securityGroups = newRegionalSecurityGroups;\n result.dirty.securityGroups = true;\n }\n\n if (command.backingData.filtered.securityGroups === []) {\n command.viewState.securityGroupsConfigured = false;\n } else {\n command.viewState.securityGroupsConfigured = true;\n }\n\n return result;\n }\n\n function refreshSecurityGroups(command, skipCommandReconfiguration) {\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n function getLoadBalancerNames(loadBalancers) {\n return _.chain(loadBalancers).map('name').uniq().value().sort();\n }\n\n function configureLoadBalancerOptions(command) {\n const result = {\n dirty: {},\n };\n const current = command.loadBalancers;\n const newLoadBalancers = getLoadBalancerNames(command.backingData.loadBalancers);\n\n if (current && command.loadBalancers) {\n const matched = _.intersection(newLoadBalancers, command.loadBalancers);\n const removed = _.xor(matched, current);\n command.loadBalancers = matched;\n if (removed.length) {\n result.dirty.loadBalancers = removed;\n }\n }\n command.backingData.filtered.loadBalancers = newLoadBalancers;\n return result;\n }\n\n function refreshLoadBalancers(command, skipCommandReconfiguration) {\n return loadBalancerReader.listLoadBalancers('azure').then(function (loadBalancers) {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n configureLoadBalancerOptions(command);\n }\n });\n }\n\n function configureLoadBalancers(command) {\n const result = {\n dirty: {},\n };\n const temp = command.backingData.loadBalancers;\n const filterlist = _.filter(temp, function (lb) {\n return lb.account === command.credentials && lb.region === command.region;\n });\n\n command.loadBalancers = getLoadBalancerNames(filterlist);\n command.viewState.loadBalancersConfigured = true;\n\n return result;\n }\n\n function attachEventHandlers(cmd) {\n cmd.regionChanged = function regionChanged(command, isInit = false) {\n const result = {\n dirty: {},\n };\n if (command.region && command.credentials) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n angular.extend(result.dirty, configureZones(command).dirty);\n }\n // reset previous set values\n if (!isInit) {\n command.loadBalancerName = null;\n command.loadBalancerType = null;\n command.vnet = null;\n command.vnetResourceGroup = null;\n command.subnet = null;\n command.selectedSubnet = null;\n command.selectedVnet = null;\n command.selectedVnetSubnets = [];\n command.viewState.networkSettingsConfigured = false;\n command.selectedSecurityGroup = null;\n command.securityGroupName = null;\n command.zonesEnabled = false;\n command.zones = [];\n }\n\n return result;\n };\n\n cmd.credentialsChanged = function credentialsChanged(command, isInit) {\n const result = {\n dirty: {},\n };\n const backingData = command.backingData;\n if (command.credentials) {\n const regionsForAccount = backingData.credentialsKeyedByAccount[command.credentials] || {\n regions: [],\n defaultKeyPair: null,\n };\n backingData.filtered.regions = regionsForAccount.regions;\n if (\n !_.chain(backingData.filtered.regions)\n .some({\n name: command.region,\n })\n .value()\n ) {\n command.region = null;\n result.dirty.region = true;\n } else {\n angular.extend(result.dirty, command.regionChanged(command, isInit).dirty);\n }\n if (command.region) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n }\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n } else {\n command.region = null;\n }\n return result;\n };\n }\n\n function refreshInstanceTypes(command) {\n return cacheInitializer.refreshCache('instanceTypes').then(function () {\n return azureInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {\n command.backingData.instanceTypes = instanceTypes;\n configureInstanceTypes(command);\n });\n });\n }\n\n return {\n configureUpdateCommand: configureUpdateCommand,\n configureCommand: configureCommand,\n configureImages: configureImages,\n configureSecurityGroupOptions: configureSecurityGroupOptions,\n configureLoadBalancerOptions: configureLoadBalancerOptions,\n refreshLoadBalancers: refreshLoadBalancers,\n refreshSecurityGroups: refreshSecurityGroups,\n getRegionalSecurityGroups: getRegionalSecurityGroups,\n refreshInstanceTypes: refreshInstanceTypes,\n configureZones: configureZones,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { FirewallLabels, ModalWizard, SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';\nimport Utility from '../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER =\n 'spinnaker.azure.cloneServerGroup.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n SERVER_GROUP_WRITER,\n]).controller('azureCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n 'serverGroupWriter',\n 'azureServerGroupConfigurationService',\n 'serverGroupCommand',\n 'application',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n serverGroupWriter,\n azureServerGroupConfigurationService,\n serverGroupCommand,\n application,\n title,\n ) {\n $scope.pages = {\n templateSelection: require('./templateSelection.html'),\n basicSettings: require('./basicSettings/basicSettings.html'),\n imageSettings: require('./image/imageSettings.html'),\n healthSettings: require('./healthSettings/healthSettings.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n networkSettings: require('./networkSettings/networkSettings.html'),\n securityGroups: require('./securityGroup/securityGroups.html'),\n instanceType: require('./instanceType/instanceType.html'),\n zones: require('./capacity/zones.html'),\n tags: require('./tags/tags.html'),\n advancedSettings: require('./advancedSettings/advancedSettings.html'),\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n $scope.command = serverGroupCommand;\n\n // Give regions an init value to prevent it being undefined. If so, the React component RegionSelectField would get \"undefined\" for property regions\n // and then be unmounted so that the region selector would be hidden.\n $scope.command.backingData = $scope.command.backingData || {};\n $scope.command.backingData.filtered = $scope.command.backingData.filtered || {};\n $scope.command.backingData.filtered.regions = $scope.command.backingData.filtered.regions || [];\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: [\n 'account, region, subnet, cluster name (stack, details)',\n 'load balancers',\n FirewallLabels.get('firewalls'),\n 'instance type',\n 'all fields on the Advanced Settings page',\n ],\n notCopied: [],\n additionalCopyText:\n 'If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group.',\n };\n\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'azure',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n azureServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'create') {\n serverGroupCommand.viewState.useAllImageSelection = true;\n }\n $scope.state.loaded = true;\n initializeWizardState();\n initializeSelectOptions();\n initializeWatches();\n });\n }\n\n function initializeWizardState() {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'editPipeline') {\n ModalWizard.markComplete('basic-settings');\n ModalWizard.markComplete('load-balancers');\n ModalWizard.markComplete('network-settings');\n ModalWizard.markComplete('security-groups');\n ModalWizard.markComplete('instance-type');\n ModalWizard.markComplete('zones');\n }\n }\n\n function initializeWatches() {\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged($scope.command, true));\n processCommandUpdateResult($scope.command.regionChanged($scope.command, true));\n }\n\n function createResultProcessor(method) {\n return function (newValue, oldValue) {\n if (newValue !== oldValue) {\n processCommandUpdateResult(method($scope.command));\n }\n };\n }\n\n function processCommandUpdateResult(result) {\n if (result.dirty.loadBalancers) {\n ModalWizard.markDirty('load-balancers');\n ModalWizard.markDirty('network-settings');\n }\n if (result.dirty.securityGroups) {\n ModalWizard.markDirty('security-groups');\n }\n if (result.dirty.instanceType) {\n ModalWizard.markDirty('instance-type');\n }\n if (result.dirty.zoneEnabled || result.dirty.zones) {\n ModalWizard.markDirty('zones');\n }\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 this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.toggleSuspendedProcess = function (process) {\n $scope.command.suspendedProcesses = $scope.command.suspendedProcesses || [];\n const processIndex = $scope.command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n $scope.command.suspendedProcesses.push(process);\n } else {\n $scope.command.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n this.processIsSuspended = function (process) {\n return $scope.command.suspendedProcesses.includes(process);\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n this.isValid = function () {\n return (\n $scope.command &&\n $scope.command.application &&\n $scope.command.credentials &&\n $scope.command.instanceType &&\n $scope.command.region &&\n (!$scope.command.zonesEnabled || $scope.command.zones.length !== 0) &&\n Utility.checkTags($scope.command.instanceTags).isValid\n );\n };\n },\n]);\n","import React from 'react';\n\nimport { UserVerification } from '@spinnaker/core';\n\nexport interface IAzureModalFooterProps {\n onSubmit: () => void;\n onCancel: () => void;\n isValid: boolean;\n account: string;\n}\n\nexport interface IAzureModalFooterState {\n verified: boolean;\n}\n\nexport class AzureModalFooter extends React.Component<IAzureModalFooterProps, IAzureModalFooterState> {\n constructor(props: any) {\n super(props);\n }\n\n public state = { verified: false };\n\n private handleVerification = (verified: boolean) => {\n this.setState({ verified });\n };\n\n public render() {\n const { onSubmit, onCancel, isValid, account } = this.props;\n const { verified } = this.state;\n\n return (\n <div className=\"modal-footer\">\n {<UserVerification expectedValue={account} onValidChange={this.handleVerification} />}\n <button className=\"btn btn-default\" onClick={onCancel}>\n Cancel\n </button>\n <button type=\"submit\" className=\"btn btn-primary\" onClick={onSubmit} disabled={!isValid || !verified}>\n Submit\n </button>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport Select from 'react-select';\n\nimport type { IModalComponentProps } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\n\nimport { AzureModalFooter } from '../../../common/AzureModalFooter';\n\nexport interface IAzureRollbackServerGroupModalProps extends IModalComponentProps {\n application: any;\n serverGroup: any;\n disabledServerGroups: any;\n}\n\nexport interface IAzureRollbackServerGroupModalState {\n taskMonitor: TaskMonitor;\n submitting: boolean;\n command: any;\n}\n\nexport class AzureRollbackServerGroupModal extends React.Component<\n IAzureRollbackServerGroupModalProps,\n IAzureRollbackServerGroupModalState\n> {\n public static defaultProps: Partial<IAzureRollbackServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: IAzureRollbackServerGroupModalProps) {\n const modalProps = {};\n return ReactModal.show(AzureRollbackServerGroupModal, props, modalProps);\n }\n\n constructor(props: IAzureRollbackServerGroupModalProps) {\n super(props);\n\n const { application, serverGroup } = props;\n\n this.state = {\n taskMonitor: new TaskMonitor({\n application: application,\n title: 'Rolling back your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n }),\n submitting: true,\n command: {\n interestingHealthProviderNames: [],\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n enableAndDisableOnly: true,\n },\n },\n };\n }\n\n private close = (args?: any) => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = () => {\n const { command, taskMonitor } = this.state;\n const { serverGroup, application } = this.props;\n\n taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.rollbackServerGroup(serverGroup, application, command);\n });\n };\n\n private filterServerGroups = (disabledServerGroups: any) => {\n const filteredDisabledServerGroups = disabledServerGroups\n .filter((disabledServerGroup: any) => disabledServerGroup.instanceCounts.total !== 0)\n .sort((a: any, b: any) => b.name.localeCompare(a.name));\n\n return filteredDisabledServerGroups;\n };\n\n private isValid = () => {\n const restoreServerGroupName = this.state.command.rollbackContext.restoreServerGroupName;\n return restoreServerGroupName !== undefined;\n };\n\n private handleServerGroupChange = (restoreServerGroupOption: any) => {\n const { disabledServerGroups } = this.props;\n const newCommand = { ...this.state.command };\n newCommand.rollbackContext.restoreServerGroupName = restoreServerGroupOption.value;\n const restoreServerGroup = this.filterServerGroups(disabledServerGroups).find(function (disabledServerGroup: any) {\n return disabledServerGroup.name === restoreServerGroupOption.value;\n });\n newCommand.targetSize = restoreServerGroup.capacity.max;\n this.setState({\n command: newCommand,\n });\n };\n\n private handleTaskReasonChange = (taskReason?: any) => {\n const newCommand = { ...this.state.command };\n newCommand.reason = taskReason;\n this.setState({\n command: newCommand,\n });\n };\n\n public render() {\n const { command, taskMonitor, submitting } = this.state;\n const { serverGroup, disabledServerGroups } = this.props;\n const isValidSG = this.isValid();\n const disabledServerGroupOptions = this.filterServerGroups(disabledServerGroups).map(\n (disabledServerGroup: any) => ({\n label: disabledServerGroup.name,\n value: disabledServerGroup.name,\n }),\n );\n\n return (\n <Modal onHide={this.close}>\n <TaskMonitorWrapper monitor={taskMonitor} />\n {submitting && (\n <form role=\"form\">\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Rollback {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"row\">\n <div className=\"col-sm-3 sm-label-right\">Restore to</div>\n <div className=\"col-sm-6\">\n <Select\n value={command.rollbackContext.restoreServerGroupName}\n onChange={this.handleServerGroupChange}\n options={disabledServerGroupOptions}\n />\n </div>\n </div>\n <TaskReason reason={command.taskReason} onChange={this.handleTaskReasonChange} />\n </Modal.Body>\n <AzureModalFooter\n onSubmit={this.submit}\n onCancel={this.close}\n isValid={isValidSG}\n account={serverGroup.account}\n />\n </form>\n )}\n </Modal>\n );\n }\n}\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n} from '@spinnaker/core';\n\nimport '../configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { AzureRollbackServerGroupModal } from './rollback/RollbackServerGroupModal';\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER =\n 'spinnaker.azure.serverGroup.details.controller';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n SERVER_GROUP_WRITER,\n ])\n .controller('azureServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$templateCache',\n 'app',\n 'serverGroup',\n 'azureServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n function (\n $scope,\n $state,\n $templateCache,\n app,\n serverGroup,\n azureServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n function extractServerGroupSummary() {\n let summary = _.find(app.serverGroups.data, function (toCheck) {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some(function (loadBalancer) {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some(function (possibleServerGroup) {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n if (!summary) {\n $state.go('^');\n }\n return summary;\n }\n\n function retrieveServerGroup() {\n const summary = extractServerGroupSummary();\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then(function (details) {\n cancelLoader();\n\n angular.extend(details, summary);\n details.account = serverGroup.accountId; // it's possible the summary was not found because the clusters are still loading\n\n $scope.serverGroup = details;\n\n if (!_.isEmpty($scope.serverGroup)) {\n $scope.image = details.image ? details.image : undefined;\n\n if (details.image && details.image.description) {\n const tags = details.image.description.split(', ');\n tags.forEach(function (tag) {\n const keyVal = tag.split('=');\n if (keyVal.length === 2 && keyVal[0] === 'ancestor_name') {\n details.image.baseImage = keyVal[1];\n }\n });\n }\n\n if (details.launchConfig && details.launchConfig.securityGroups) {\n $scope.securityGroups = _.chain(details.launchConfig.securityGroups)\n .map(function (id) {\n return (\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n id: id,\n }) ||\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n name: id,\n })\n );\n })\n .compact()\n .value();\n }\n } else {\n $state.go('^');\n }\n });\n }\n\n function cancelLoader() {\n $scope.state.loading = false;\n }\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = function destroyServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\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 confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = function disableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = () => serverGroupWriter.disableServerGroup(serverGroup, app);\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = function enableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.enableServerGroup(\n serverGroup,\n app,\n angular.extend(params, {\n interestingHealthProviderNames: [], // bypass the check for now; will change this later to ['azureService']\n }),\n );\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rollbackServerGroup = () => {\n const serverGroup = $scope.serverGroup;\n const cluster = _.find(app.clusters, { name: serverGroup.cluster, account: serverGroup.account });\n const disabledServerGroups = _.filter(cluster.serverGroups, { isDisabled: true, region: serverGroup.region });\n AzureRollbackServerGroupModal.show({ application: app, serverGroup, disabledServerGroups });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'azureCloneServerGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n title: () => 'Clone ' + serverGroup.name,\n application: () => app,\n serverGroupCommand: () =>\n azureServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup),\n },\n });\n };\n\n this.truncateCommitHash = function () {\n if ($scope.serverGroup && $scope.serverGroup.buildInfo && $scope.serverGroup.buildInfo.commit) {\n return $scope.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER } from './serverGroupDetails.azure.controller';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE = 'spinnaker.azure.serverGroup.details.azure';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE, [\n AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER,\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ApplicationNameValidator } from '@spinnaker/core';\n\nexport const AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR = 'spinnaker.azure.validation.applicationName';\nexport const name = AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR; // for backwards compatibility\nmodule(AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR, [])\n .factory('azureApplicationNameValidator', function () {\n function validateSpecialCharacters(name, errors) {\n const pattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!pattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters or digits. No ' +\n 'special characters are allowed.',\n );\n }\n }\n\n function validate(name) {\n const warnings = [];\n const errors = [];\n\n if (name && name.length) {\n validateSpecialCharacters(name, errors);\n }\n\n return {\n warnings: warnings,\n errors: errors,\n };\n }\n\n return {\n validate: validate,\n };\n })\n .run([\n 'azureApplicationNameValidator',\n function (azureApplicationNameValidator) {\n ApplicationNameValidator.registerValidator('azure', azureApplicationNameValidator);\n },\n ]);\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './help/azure.help';\nimport { AZURE_IMAGE_IMAGE_READER } from './image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from './instance/azureInstanceType.service';\nimport { AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { AzureLoadBalancerChoiceModal } from './loadBalancer/configure/AzureLoadBalancerChoiceModal';\nimport { AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER } from './loadBalancer/configure/createLoadBalancer.controller';\nimport { AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport logo from './logo/logo_azure.png';\nimport { AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE } from './pipeline/stages/bake/azureBakeStage';\nimport { AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/azureDestroyAsgStage';\nimport { AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE } from './pipeline/stages/disableAsg/azureDisableAsgStage';\nimport { AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE } from './pipeline/stages/enableAsg/azureEnableAsgStage';\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from './securityGroup/configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL } from './securityGroup/configure/EditSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './securityGroup/details/securityGroupDetail.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE } from './serverGroup/configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER } from './serverGroup/configure/wizard/CloneServerGroup.azure.controller';\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE } from './serverGroup/details/serverGroup.details.module';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR } from './validation/applicationName.validator';\n\nimport './logo/azure.logo.less';\n\nexport const AZURE_MODULE = 'spinnaker.azure';\nmodule(AZURE_MODULE, [\n AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE,\n AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE,\n AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER,\n AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER,\n AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n AZURE_SECURITYGROUP_SECURITYGROUP_READER,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR,\n]).config(function () {\n CloudProviderRegistry.registerProvider('azure', {\n name: 'Azure',\n logo: {\n path: logo,\n },\n image: {\n reader: 'azureImageReader',\n },\n serverGroup: {\n transformer: 'azureServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'azureServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'azureCloneServerGroupCtrl',\n commandBuilder: 'azureServerGroupCommandBuilder',\n configurationService: 'azureServerGroupConfigurationService',\n },\n instance: {\n instanceTypeService: 'azureInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'azureInstanceDetailsCtrl',\n },\n loadBalancer: {\n transformer: 'azureLoadBalancerTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetail.html'),\n detailsController: 'azureLoadBalancerDetailsCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/createLoadBalancer.html'),\n createLoadBalancerController: 'azureCreateLoadBalancerCtrl',\n CreateLoadBalancerModal: AzureLoadBalancerChoiceModal,\n },\n securityGroup: {\n transformer: 'azureSecurityGroupTransformer',\n reader: 'azureSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'azureSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'azureCreateSecurityGroupCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('azure', ['redblack']);\n"],"names":[],"mappings":"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"}