-
Notifications
You must be signed in to change notification settings - Fork 902
/
loadBalancerDetail.controller.js
119 lines (99 loc) · 4.2 KB
/
loadBalancerDetail.controller.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
'use strict';
import _ from 'lodash';
let angular = require('angular');
import {SECURITY_GROUP_READER} from 'core/securityGroup/securityGroupReader.service';
import {CONFIRMATION_MODAL_SERVICE} from 'core/confirmationModal/confirmationModal.service';
import {LOAD_BALANCER_READ_SERVICE} from 'core/loadBalancer/loadBalancer.read.service';
import {LOAD_BALANCER_WRITE_SERVICE} from 'core/loadBalancer/loadBalancer.write.service';
module.exports = angular.module('spinnaker.azure.loadBalancer.details.controller', [
require('angular-ui-router'),
SECURITY_GROUP_READER,
LOAD_BALANCER_WRITE_SERVICE,
LOAD_BALANCER_READ_SERVICE,
CONFIRMATION_MODAL_SERVICE,
require('core/presentation/collapsibleSection/collapsibleSection.directive.js'),
require('core/utils/selectOnDblClick.directive.js'),
])
.controller('azureLoadBalancerDetailsCtrl', function ($scope, $state, $exceptionHandler, $uibModal, loadBalancer, app,
securityGroupReader, confirmationModalService, loadBalancerWriter, loadBalancerReader, $q) {
$scope.state = {
loading: true
};
function extractLoadBalancer() {
$scope.loadBalancer = app.loadBalancers.data.filter(function (test) {
return test.name === loadBalancer.name && test.region === loadBalancer.region && test.account === loadBalancer.accountId;
})[0];
if ($scope.loadBalancer) {
var detailsLoader = loadBalancerReader.getLoadBalancerDetails($scope.loadBalancer.provider, loadBalancer.accountId, loadBalancer.region, loadBalancer.name);
return detailsLoader.then(function(details) {
$scope.state.loading = false;
var securityGroups = [];
var filtered = details.filter(function(test) {
return test.name === loadBalancer.name;
});
if (filtered.length) {
$scope.loadBalancer.elb = filtered[0];
$scope.loadBalancer.account = loadBalancer.accountId;
if($scope.loadBalancer.elb.securityGroups) {
$scope.loadBalancer.elb.securityGroups.forEach(function (securityGroupId) {
var match = securityGroupReader.getApplicationSecurityGroup(app, loadBalancer.accountId, loadBalancer.region, securityGroupId);
if (match) {
securityGroups.push(match);
}
});
$scope.securityGroups = _.sortBy(securityGroups, 'name');
}
}
});
}
if (!$scope.loadBalancer) {
$state.go('^');
}
return $q.when(null);
}
app.ready().then(extractLoadBalancer).then(() => {
// If the user navigates away from the view before the initial extractLoadBalancer call completes,
// do not bother subscribing to the refresh
if (!$scope.$$destroyed) {
app.onRefresh($scope, extractLoadBalancer);
}
});
this.editLoadBalancer = function editLoadBalancer() {
$uibModal.open({
templateUrl: require('../configure/editLoadBalancer.html'),
controller: 'azureCreateLoadBalancerCtrl as ctrl',
resolve: {
application: function() { return app; },
loadBalancer: function() { return angular.copy($scope.loadBalancer); },
isNew: function() { return false; }
}
});
};
this.deleteLoadBalancer = function deleteLoadBalancer() {
if ($scope.loadBalancer.instances && $scope.loadBalancer.instances.length) {
return;
}
var taskMonitor = {
application: app,
title: 'Deleting ' + loadBalancer.name,
};
const command = {
cloudProvider: 'azure',
loadBalancerName: $scope.loadBalancer.name,
credentials: $scope.loadBalancer.account,
region: loadBalancer.region,
appName: app.name
};
const submitMethod = () => loadBalancerWriter.deleteLoadBalancer(command, app);
confirmationModalService.confirm({
header: 'Really delete ' + loadBalancer.name + '?',
buttonText: 'Delete ' + loadBalancer.name,
provider: 'azure',
account: loadBalancer.accountId,
applicationName: app.name,
taskMonitorConfig: taskMonitor,
submitMethod: submitMethod
});
};
}
);