@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
124 lines (106 loc) • 4.54 kB
JavaScript
;
import { module } from 'angular';
import ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';
import _ from 'lodash';
import { CloudProviderRegistry } from 'core/cloudProvider';
import { ProviderSelectionService } from 'core/cloudProvider/providerSelection/ProviderSelectionService';
import { SETTINGS } from 'core/config/settings';
import { MANAGED_RESOURCE_STATUS_INDICATOR } from 'core/managed';
import { SecurityGroupState } from 'core/state';
import { noop } from 'core/utils';
import { FirewallLabels } from './label/FirewallLabels';
export const CORE_SECURITYGROUP_ALLSECURITYGROUPSCTRL = 'spinnaker.core.securityGroup.all.controller';
export const name = CORE_SECURITYGROUP_ALLSECURITYGROUPSCTRL; // for backwards compatibility
module(CORE_SECURITYGROUP_ALLSECURITYGROUPSCTRL, [ANGULAR_UI_BOOTSTRAP, MANAGED_RESOURCE_STATUS_INDICATOR]).controller(
'AllSecurityGroupsCtrl',
[
'$scope',
'app',
'$uibModal',
'$timeout',
function ($scope, app, $uibModal, $timeout) {
this.$onInit = () => {
const groupsUpdatedSubscription = SecurityGroupState.filterService.groupsUpdatedStream.subscribe(() =>
groupsUpdated(),
);
SecurityGroupState.filterModel.activate();
this.initialized = false;
$scope.application = app;
$scope.sortFilter = SecurityGroupState.filterModel.sortFilter;
app.setActiveState(app.securityGroups);
$scope.$on('$destroy', () => {
app.setActiveState();
groupsUpdatedSubscription.unsubscribe();
});
app.securityGroups.onRefresh($scope, () => updateSecurityGroups());
app.securityGroups.ready().then(() => updateSecurityGroups());
};
this.groupingsTemplate = require('./groupings.html');
this.firewallLabel = FirewallLabels.get('Firewall');
const updateSecurityGroups = () => {
$scope.$evalAsync(() => {
SecurityGroupState.filterService.updateSecurityGroups(app);
groupsUpdated();
});
};
const groupsUpdated = () => {
$scope.$applyAsync(() => {
$scope.groups = SecurityGroupState.filterModel.groups;
$scope.tags = SecurityGroupState.filterModel.tags;
this.initialized = this.initialized || app.securityGroups.loaded;
});
};
this.clearFilters = function () {
SecurityGroupState.filterService.clearFilters();
updateSecurityGroups();
};
function createSecurityGroupProviderFilterFn(application, account, provider) {
const sgConfig = provider.securityGroup;
return (
sgConfig &&
(sgConfig.CreateSecurityGroupModal ||
(sgConfig.createSecurityGroupTemplateUrl && sgConfig.createSecurityGroupController))
);
}
this.createSecurityGroup = function createSecurityGroup() {
ProviderSelectionService.selectProvider(app, 'securityGroup', createSecurityGroupProviderFilterFn)
.then((selectedProvider) => {
const provider = CloudProviderRegistry.getValue(selectedProvider, 'securityGroup');
const defaultCredentials =
app.defaultCredentials[selectedProvider] || SETTINGS.providers[selectedProvider].defaults.account;
const defaultRegion =
app.defaultRegions[selectedProvider] || SETTINGS.providers[selectedProvider].defaults.region;
if (provider.CreateSecurityGroupModal) {
provider.CreateSecurityGroupModal.show({
credentials: defaultCredentials,
application: $scope.application,
isNew: true,
});
} else {
$uibModal.open({
templateUrl: provider.createSecurityGroupTemplateUrl,
controller: `${provider.createSecurityGroupController} as ctrl`,
size: 'lg',
resolve: {
securityGroup: () => {
return {
credentials: defaultCredentials,
subnet: 'none',
regions: [defaultRegion],
vpcId: null,
securityGroupIngress: [],
};
},
application: () => {
return app;
},
},
});
}
})
.catch(noop);
};
this.updateSecurityGroups = _.debounce(updateSecurityGroups, 200);
},
],
);