@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,78 @@
1
+ 'use strict';
2
+ import { mockHttpClient } from 'core/api/mock/jasmine';
3
+ import { AccountService, SECURITY_GROUP_READER } from '@spinnaker/core';
4
+
5
+ describe('Controller: Azure.CreateSecurityGroup', function () {
6
+ beforeEach(window.module(SECURITY_GROUP_READER, require('./CreateSecurityGroupCtrl').name));
7
+
8
+ describe('filtering', function () {
9
+ // Initialize the controller and a mock scope
10
+ beforeEach(
11
+ window.inject(function ($controller, $rootScope, $q, securityGroupReader, azureSecurityGroupWriter) {
12
+ this.$scope = $rootScope.$new();
13
+ this.$q = $q;
14
+ this.securityGroupReader = securityGroupReader;
15
+ this.securityGroupWriter = azureSecurityGroupWriter;
16
+
17
+ spyOn(AccountService, 'listAccounts').and.returnValue($q.when(['prod', 'test']));
18
+
19
+ spyOn(AccountService, 'getRegionsForAccount').and.returnValue($q.when(['us-east-1', 'us-west-1']));
20
+
21
+ spyOn(this.securityGroupReader, 'getAllSecurityGroups').and.returnValue(
22
+ $q.when({
23
+ prod: {
24
+ azure: {
25
+ 'us-east-1': [
26
+ { name: 'group1', vpcId: null, id: '1' },
27
+ { name: 'group2', vpcId: null, id: '2' },
28
+ { name: 'group3', vpcId: 'vpc1-pe', id: '3' },
29
+ ],
30
+ 'us-west-1': [
31
+ { name: 'group1', vpcId: null, id: '1' },
32
+ { name: 'group3', vpcId: 'vpc2-pw', id: '3' },
33
+ ],
34
+ },
35
+ },
36
+ test: {
37
+ azure: {
38
+ 'us-east-1': [
39
+ { name: 'group1', vpcId: null, id: '1' },
40
+ { name: 'group2', vpcId: 'vpc1-te', id: '2' },
41
+ { name: 'group3', vpcId: 'vpc1-te', id: '3' },
42
+ { name: 'group4', vpcId: 'vpc2-te', id: '4' },
43
+ ],
44
+ 'us-west-1': [
45
+ { name: 'group1', vpcId: null, id: '1' },
46
+ { name: 'group3', vpcId: 'vpc1-tw', id: '3' },
47
+ { name: 'group3', vpcId: 'vpc2-tw', id: '3' },
48
+ { name: 'group5', vpcId: 'vpc2-tw', id: '5' },
49
+ ],
50
+ },
51
+ },
52
+ }),
53
+ );
54
+
55
+ this.initializeCtrl = function () {
56
+ this.ctrl = $controller('azureCreateSecurityGroupCtrl', {
57
+ $scope: this.$scope,
58
+ $uibModalInstance: { result: this.$q.when(null) },
59
+ securityGroupReader: this.securityGroupReader,
60
+ securityGroupWriter: this.securityGroupWriter,
61
+ application: {},
62
+ securityGroup: { regions: [], securityGroupIngress: [] },
63
+ });
64
+
65
+ this.$scope.$digest();
66
+ };
67
+ }),
68
+ );
69
+
70
+ it('initializes with no firewalls available for ingress permissions', async function () {
71
+ const http = mockHttpClient();
72
+ http.expectGET('/networks').respond(200, []);
73
+ this.initializeCtrl();
74
+ await http.flush();
75
+ expect(this.$scope.securityGroup.securityRules.length).toBe(0);
76
+ });
77
+ });
78
+ });
@@ -0,0 +1,265 @@
1
+ 'use strict';
2
+
3
+ import UIROUTER_ANGULARJS from '@uirouter/angularjs';
4
+ import { module } from 'angular';
5
+ import _ from 'lodash';
6
+
7
+ import { AccountService, FirewallLabels, NetworkReader, TaskMonitor } from '@spinnaker/core';
8
+
9
+ import { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';
10
+
11
+ export const AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL = 'spinnaker.azure.securityGroup.create.controller';
12
+ export const name = AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL; // for backwards compatibility
13
+ module(AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL, [
14
+ UIROUTER_ANGULARJS,
15
+ AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,
16
+ ]).controller('azureCreateSecurityGroupCtrl', [
17
+ '$scope',
18
+ '$uibModalInstance',
19
+ '$state',
20
+ '$controller',
21
+ 'application',
22
+ 'securityGroup',
23
+ 'azureSecurityGroupWriter',
24
+ function ($scope, $uibModalInstance, $state, $controller, application, securityGroup, azureSecurityGroupWriter) {
25
+ $scope.pages = {
26
+ location: require('./createSecurityGroupProperties.html'),
27
+ ingress: require('./createSecurityGroupIngress.html'),
28
+ };
29
+
30
+ $scope.regions = [];
31
+
32
+ $scope.firewallLabel = FirewallLabels.get('Firewall');
33
+
34
+ const ctrl = this;
35
+ $scope.isNew = true;
36
+ $scope.state = {
37
+ submitting: false,
38
+ infiniteScroll: {
39
+ numToAdd: 20,
40
+ currentItems: 20,
41
+ },
42
+ };
43
+
44
+ AccountService.listAccounts('azure').then(function (accounts) {
45
+ $scope.accounts = accounts;
46
+ ctrl.accountUpdated();
47
+ });
48
+
49
+ ctrl.addMoreItems = function () {
50
+ $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;
51
+ };
52
+
53
+ function onApplicationRefresh() {
54
+ // If the user has already closed the modal, do not navigate to the new details view
55
+ if ($scope.$$destroyed) {
56
+ return;
57
+ }
58
+ $uibModalInstance.close();
59
+ const newStateParams = {
60
+ name: $scope.securityGroup.name,
61
+ accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,
62
+ region: $scope.securityGroup.regions[0],
63
+ provider: 'azure',
64
+ };
65
+ if (!$state.includes('**.firewallDetails')) {
66
+ $state.go('.firewallDetails', newStateParams);
67
+ } else {
68
+ $state.go('^.firewallDetails', newStateParams);
69
+ }
70
+ }
71
+
72
+ function onTaskComplete() {
73
+ application.securityGroups.refresh();
74
+ application.securityGroups.onNextRefresh($scope, onApplicationRefresh);
75
+ }
76
+
77
+ $scope.taskMonitor = new TaskMonitor({
78
+ application: application,
79
+ title: `Creating your ${FirewallLabels.get('firewall')}`,
80
+ modalInstance: $uibModalInstance,
81
+ onTaskComplete: onTaskComplete,
82
+ });
83
+
84
+ $scope.securityGroup = securityGroup;
85
+
86
+ ctrl.accountUpdated = function () {
87
+ AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {
88
+ $scope.regions = regions;
89
+ $scope.securityGroup.regions = regions;
90
+ ctrl.updateName();
91
+ ctrl.regionUpdated();
92
+ });
93
+ };
94
+
95
+ this.regionUpdated = function () {
96
+ ctrl.vnetUpdated();
97
+ };
98
+
99
+ this.vnetUpdated = function () {
100
+ const account = $scope.securityGroup.credentials;
101
+ const region = $scope.securityGroup.region;
102
+ $scope.securityGroup.selectedVnet = null;
103
+ $scope.securityGroup.vnet = null;
104
+ $scope.securityGroup.vnetResourceGroup = null;
105
+
106
+ ctrl.selectedVnets = [];
107
+
108
+ NetworkReader.listNetworks().then(function (vnets) {
109
+ if (vnets.azure) {
110
+ vnets.azure.forEach((vnet) => {
111
+ if (vnet.account === account && vnet.region === region) {
112
+ ctrl.selectedVnets.push(vnet);
113
+ }
114
+ });
115
+ }
116
+ });
117
+
118
+ ctrl.subnetUpdated();
119
+ };
120
+
121
+ this.subnetUpdated = function () {
122
+ $scope.securityGroup.selectedSubnet = null;
123
+ $scope.securityGroup.subnet = null;
124
+ ctrl.selectedSubnets = [];
125
+ };
126
+
127
+ this.selectedVnetChanged = function (item) {
128
+ $scope.securityGroup.vnet = item.name;
129
+ $scope.securityGroup.vnetResourceGroup = item.resourceGroup;
130
+ $scope.securityGroup.selectedSubnet = null;
131
+ $scope.securityGroup.subnet = null;
132
+ ctrl.selectedSubnets = [];
133
+ if (item.subnets) {
134
+ item.subnets.map(function (subnet) {
135
+ ctrl.selectedSubnets.push(subnet);
136
+ });
137
+ }
138
+ };
139
+
140
+ ctrl.cancel = function () {
141
+ $uibModalInstance.dismiss();
142
+ };
143
+
144
+ ctrl.updateName = function () {
145
+ const securityGroup = $scope.securityGroup;
146
+ let name = application.name;
147
+ if (securityGroup.detail) {
148
+ name += '-' + securityGroup.detail;
149
+ }
150
+ securityGroup.name = name;
151
+ $scope.namePreview = name;
152
+ };
153
+
154
+ ctrl.upsert = function () {
155
+ $scope.taskMonitor.submit(function () {
156
+ const params = {
157
+ cloudProvider: 'azure',
158
+ appName: application.name,
159
+ region: $scope.securityGroup.region,
160
+ vpcId: 'null',
161
+ };
162
+
163
+ if ($scope.securityGroup.selectedVnet) {
164
+ $scope.securityGroup.vnet = $scope.securityGroup.selectedVnet.name;
165
+ $scope.securityGroup.vnetResourceGroup = $scope.securityGroup.selectedVnet.resourceGroup;
166
+ }
167
+
168
+ if ($scope.securityGroup.selectedSubnet) {
169
+ $scope.securityGroup.subnet = $scope.securityGroup.selectedSubnet.name;
170
+ }
171
+
172
+ $scope.securityGroup.type = 'upsertSecurityGroup';
173
+
174
+ return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create', params);
175
+ });
176
+ };
177
+
178
+ ctrl.addRule = function (ruleset) {
179
+ ruleset.push({
180
+ name: $scope.securityGroup.name + '-Rule' + ruleset.length,
181
+ priority: ruleset.length == 0 ? 100 : 100 * (ruleset.length + 1),
182
+ protocolUI: 'tcp',
183
+ protocol: 'tcp',
184
+ access: 'Allow',
185
+ direction: 'InBound',
186
+ sourceAddressPrefix: '*',
187
+ sourceAddressPrefixes: [],
188
+ sourcePortRange: '*',
189
+ destinationAddressPrefix: '*',
190
+ destinationPortRange: '*',
191
+ destinationPortRanges: [],
192
+ destPortRanges: '*',
193
+ sourceIPCIDRRanges: '*',
194
+ });
195
+ };
196
+
197
+ ctrl.portUpdated = function (ruleset, index) {
198
+ if (!_.isEmpty(ruleset[index].destPortRanges)) {
199
+ const ruleRanges = ruleset[index].destPortRanges.split(',');
200
+
201
+ if (ruleRanges.length > 1) {
202
+ ruleset[index].destinationPortRanges = [];
203
+ ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));
204
+
205
+ // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.
206
+ ruleset[index].destinationPortRange = null;
207
+ } else {
208
+ ruleset[index].destinationPortRange = ruleset[index].destPortRanges;
209
+
210
+ // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.
211
+ ruleset[index].destinationPortRanges = [];
212
+ }
213
+ }
214
+ };
215
+
216
+ ctrl.sourceIPCIDRUpdated = function (ruleset, index) {
217
+ if (!_.isEmpty(ruleset[index].destPortRanges)) {
218
+ const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');
219
+ if (ruleRanges.length > 1) {
220
+ ruleset[index].sourceAddressPrefixes = [];
221
+ ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));
222
+
223
+ // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation
224
+ ruleset[index].sourceAddressPrefix = null;
225
+ } else {
226
+ ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;
227
+
228
+ // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.
229
+ ruleset[index].sourceAddressPrefixes = [];
230
+ }
231
+ }
232
+ };
233
+
234
+ ctrl.protocolUpdated = function (ruleset, index) {
235
+ ruleset[index].protocol = ruleset[index].protocolUI;
236
+ };
237
+
238
+ ctrl.removeRule = function (ruleset, index) {
239
+ ruleset.splice(index, 1);
240
+ };
241
+
242
+ ctrl.moveUp = function (ruleset, index) {
243
+ if (index === 0) return;
244
+ swapRules(ruleset, index, index - 1);
245
+ };
246
+ ctrl.moveDown = function (ruleset, index) {
247
+ if (index === ruleset.length - 1) return;
248
+ swapRules(ruleset, index, index + 1);
249
+ };
250
+
251
+ function swapRules(ruleset, a, b) {
252
+ const temp = ruleset[b];
253
+ const priorityA = ruleset[a].priority;
254
+ const priorityB = ruleset[b].priority;
255
+ //swap elements
256
+ ruleset[b] = ruleset[a];
257
+ ruleset[a] = temp;
258
+ //swap priorities
259
+ ruleset[a].priority = priorityA;
260
+ ruleset[b].priority = priorityB;
261
+ }
262
+
263
+ $scope.securityGroup.securityRules = [];
264
+ },
265
+ ]);
@@ -0,0 +1,222 @@
1
+ 'use strict';
2
+
3
+ import UIROUTER_ANGULARJS from '@uirouter/angularjs';
4
+ import { module } from 'angular';
5
+ import _ from 'lodash';
6
+
7
+ import {
8
+ CACHE_INITIALIZER_SERVICE,
9
+ FirewallLabels,
10
+ InfrastructureCaches,
11
+ SECURITY_GROUP_READER,
12
+ TaskMonitor,
13
+ } from '@spinnaker/core';
14
+
15
+ import { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';
16
+
17
+ export const AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL =
18
+ 'spinnaker.azure.securityGroup.azure.edit.controller';
19
+ export const name = AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL; // for backwards compatibility
20
+ module(AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL, [
21
+ UIROUTER_ANGULARJS,
22
+ CACHE_INITIALIZER_SERVICE,
23
+ SECURITY_GROUP_READER,
24
+ AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,
25
+ ]).controller('azureEditSecurityGroupCtrl', [
26
+ '$scope',
27
+ '$uibModalInstance',
28
+ '$exceptionHandler',
29
+ '$state',
30
+ 'securityGroupReader',
31
+ 'cacheInitializer',
32
+ 'application',
33
+ 'securityGroup',
34
+ 'azureSecurityGroupWriter',
35
+ function (
36
+ $scope,
37
+ $uibModalInstance,
38
+ $exceptionHandler,
39
+ $state,
40
+ securityGroupReader,
41
+ cacheInitializer,
42
+ application,
43
+ securityGroup,
44
+ azureSecurityGroupWriter,
45
+ ) {
46
+ $scope.pages = {
47
+ ingress: require('./createSecurityGroupIngress.html'),
48
+ };
49
+
50
+ securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {
51
+ if (!_.isEmpty(rule.protocol)) {
52
+ rule.protocolUI = rule.protocol.toLowerCase();
53
+ }
54
+
55
+ rule.destPortRanges = rule.destinationPortRangeModel;
56
+ rule.sourceIPCIDRRanges = rule.sourceAddressPrefixModel;
57
+
58
+ return rule;
59
+ });
60
+
61
+ $scope.securityGroup = securityGroup;
62
+
63
+ $scope.state = {
64
+ refreshingSecurityGroups: false,
65
+ };
66
+
67
+ $scope.taskMonitor = new TaskMonitor({
68
+ application: application,
69
+ title: `Updating your ${FirewallLabels.get('firewall')}`,
70
+ modalInstance: $uibModalInstance,
71
+ onTaskComplete: onTaskComplete,
72
+ });
73
+
74
+ this.getSecurityGroupRefreshTime = function () {
75
+ return InfrastructureCaches.get('securityGroups').getStats().ageMax;
76
+ };
77
+
78
+ this.refreshSecurityGroups = function () {
79
+ $scope.state.refreshingSecurityGroups = true;
80
+ return cacheInitializer.refreshCache('securityGroups').then(function () {
81
+ initializeSecurityGroups().then(function () {
82
+ $scope.state.refreshingSecurityGroups = false;
83
+ });
84
+ });
85
+ };
86
+
87
+ function initializeSecurityGroups() {
88
+ return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {
89
+ const account = securityGroup.accountName;
90
+ const region = securityGroup.region;
91
+ const availableGroups = _.filter(securityGroups[account].azure[region], {
92
+ /*vpcId: vpcId*/
93
+ });
94
+ $scope.availableSecurityGroups = _.map(availableGroups, 'name');
95
+ });
96
+ }
97
+
98
+ this.addRule = function (ruleset) {
99
+ ruleset.push({
100
+ name: $scope.securityGroup.name + '-Rule' + ruleset.length,
101
+ priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),
102
+ protocolUI: 'tcp',
103
+ access: 'Allow',
104
+ direction: 'InBound',
105
+ sourceAddressPrefix: '*',
106
+ sourceAddressPrefixes: [],
107
+ sourcePortRange: '*',
108
+ destinationAddressPrefix: '*',
109
+ destinationPortRange: '*',
110
+ destinationPortRanges: [],
111
+ destPortRanges: '*',
112
+ sourceIPCIDRRanges: '*',
113
+ });
114
+ };
115
+
116
+ function onApplicationRefresh() {
117
+ // If the user has already closed the modal, do not navigate to the new details view
118
+ if ($scope.$$destroyed) {
119
+ return;
120
+ }
121
+ $uibModalInstance.close();
122
+ const newStateParams = {
123
+ name: $scope.securityGroup.name,
124
+ accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,
125
+ region: $scope.securityGroup.region,
126
+ provider: 'azure',
127
+ };
128
+ if (!$state.includes('**.firewallDetails')) {
129
+ $state.go('.firewallDetails', newStateParams);
130
+ } else {
131
+ $state.go('^.firewallDetails', newStateParams);
132
+ }
133
+ }
134
+
135
+ function onTaskComplete() {
136
+ application.securityGroups.refresh();
137
+ application.securityGroups.onNextRefresh($scope, onApplicationRefresh);
138
+ }
139
+
140
+ this.portUpdated = function (ruleset, index) {
141
+ if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {
142
+ const ruleRanges = ruleset[index].destPortRanges.split(',');
143
+ if (ruleRanges.length > 1) {
144
+ ruleset[index].destinationPortRanges = [];
145
+ ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));
146
+
147
+ // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.
148
+ ruleset[index].destinationPortRange = null;
149
+ } else {
150
+ ruleset[index].destinationPortRange = ruleset[index].destPortRanges;
151
+
152
+ // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.
153
+ ruleset[index].destinationPortRanges = [];
154
+ }
155
+ }
156
+ };
157
+
158
+ this.sourceIPCIDRUpdated = function (ruleset, index) {
159
+ if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {
160
+ const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');
161
+ if (ruleRanges.length > 1) {
162
+ ruleset[index].sourceAddressPrefixes = [];
163
+ ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));
164
+
165
+ // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation
166
+ ruleset[index].sourceAddressPrefix = null;
167
+ } else {
168
+ ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;
169
+
170
+ // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.
171
+ ruleset[index].sourceAddressPrefixes = [];
172
+ }
173
+ }
174
+ };
175
+
176
+ this.removeRule = function (ruleset, index) {
177
+ ruleset.splice(index, 1);
178
+ };
179
+
180
+ this.moveUp = function (ruleset, index) {
181
+ if (index === 0) return;
182
+ swapRules(ruleset, index, index - 1);
183
+ };
184
+ this.moveDown = function (ruleset, index) {
185
+ if (index === ruleset.length - 1) return;
186
+ swapRules(ruleset, index, index + 1);
187
+ };
188
+
189
+ function swapRules(ruleset, a, b) {
190
+ const temp = ruleset[b];
191
+ const priorityA = ruleset[a].priority;
192
+ const priorityB = ruleset[b].priority;
193
+ //swap elements
194
+ ruleset[b] = ruleset[a];
195
+ ruleset[a] = temp;
196
+ //swap priorities
197
+ ruleset[a].priority = priorityA;
198
+ ruleset[b].priority = priorityB;
199
+ }
200
+
201
+ $scope.taskMonitor.onTaskComplete = $uibModalInstance.dismiss;
202
+
203
+ this.upsert = function () {
204
+ $scope.taskMonitor.submit(function () {
205
+ const params = {
206
+ cloudProvider: 'azure',
207
+ appName: application.name,
208
+ region: $scope.securityGroup.region,
209
+ subnet: null,
210
+ vpcId: 'null',
211
+ };
212
+ $scope.securityGroup.type = 'upsertSecurityGroup';
213
+
214
+ return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', params);
215
+ });
216
+ };
217
+
218
+ this.cancel = function () {
219
+ $uibModalInstance.dismiss();
220
+ };
221
+ },
222
+ ]);