Skip to content

Commit

Permalink
fix(provider/cf): fetch services on a per-region basis
Browse files Browse the repository at this point in the history
Co-Authored-By: Stu Pollock <spollock@pivotal.io>
  • Loading branch information
2 people authored and jkschneider committed Oct 31, 2018
1 parent f22fecd commit c0842ad
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,56 +32,67 @@ module.exports = angular
.controller('CloudfoundryDeployServiceStageCtrl', function($scope) {
let stage = $scope.stage;
stage.action = 'deployService';
stage.cloudProvider = 'cloudfoundry';
stage.tags = stage.tags || [];

$scope.regions = $scope.regions || [];

$scope.state = {
accounts: false,
regionsLoaded: false,
};

$scope.tagName = '';

AccountService.listAccounts('cloudfoundry').then(function(accounts) {
$scope.accounts = accounts;
$scope.state.accounts = true;
});

AccountService.getRegionsForAccount($scope.stage.credentials).then(function(regions) {
$scope.regions = regions;
});
$scope.clearAndReloadRegions = () => {
$scope.regions = [];
$scope.servicePlans = [];
$scope.serviceNamesAndPlans = [];

if ($scope.stage.credentials) {
ServicesReader.getServices($scope.stage.credentials).then(function(services) {
$scope.serviceNamesAndPlans = services;
$scope.services = services.map(function(item) {
return item.name;
});
let service = $scope.serviceNamesAndPlans.find(it => it.name === $scope.stage.service) || { servicePlans: [] };
$scope.servicePlans = service.servicePlans.map(it => it.name);
AccountService.getRegionsForAccount($scope.stage.credentials).then(function(regions) {
$scope.regions = regions;
$scope.state.regionsLoaded = true;
});
}
};

$scope.clearAndReloadRegions();

stage.cloudProvider = 'cloudfoundry';
$scope.onAccountChange = () => {
$scope.stage.region = null;
$scope.state.regionsLoaded = false;
$scope.stage.service = null;
$scope.serviceNamesAndPlans = [];
$scope.clearAndReloadRegions();
};

AccountService.getRegionsForAccount($scope.stage.credentials).then(function(regions) {
$scope.regions = regions;
});
$scope.clearAndReloadServices = () => {
$scope.serviceNamesAndPlans = [];
$scope.servicePlans = [];
$scope.services = [];

ServicesReader.getServices($scope.stage.credentials).then(function(services) {
ServicesReader.getServices($scope.stage.credentials, $scope.stage.region).then(function(services) {
$scope.serviceNamesAndPlans = services;
$scope.services = services.map(function(item) {
return item.name;
});

$scope.onServiceChange();
});
};

$scope.onServiceChange = () => {
$scope.onRegionChange = () => {
$scope.stage.service = null;
$scope.stage.servicePlan = null;
$scope.clearAndReloadServices();
};

if ($scope.stage.region) {
$scope.clearAndReloadServices();
}

$scope.onServiceChange = () => {
let service = $scope.serviceNamesAndPlans.find(it => it.name === $scope.stage.service) || { servicePlans: [] };
$scope.servicePlans = service.servicePlans.map(it => it.name);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
field="region"
account="stage.credentials"
provider="cloudfoundry"
on-change="onRegionChange()"
regions="regions">
</region-select-field>
<stage-config-field label="Service">
Expand Down
3 changes: 2 additions & 1 deletion app/scripts/modules/core/src/services/ServicesReader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ import { API } from 'core/api/ApiService';
import { IService } from 'core/domain';

export class ServicesReader {
public static getServices(account: string): IPromise<IService[]> {
public static getServices(account: string, region: string): IPromise<IService[]> {
return API.one('servicebroker')
.one(account)
.all('services')
.withParams({
cloudProvider: 'cloudfoundry',
region: region,
})
.getList();
}
Expand Down

0 comments on commit c0842ad

Please sign in to comment.