瀏覽代碼

Use compute driver to get regions

cobbzilla/introduce_packer
Jonathan Cobb 4 年之前
父節點
當前提交
7c9def1ebb
共有 6 個文件被更改,包括 22 次插入9 次删除
  1. +0
    -2
      bubble-server/src/main/java/bubble/model/cloud/CloudService.java
  2. +15
    -2
      bubble-server/src/main/java/bubble/model/cloud/RegionalServiceDriver.java
  3. +4
    -2
      bubble-server/src/main/java/bubble/resources/cloud/CloudServiceRegionsResource.java
  4. +1
    -1
      bubble-server/src/main/java/bubble/resources/cloud/NetworksResource.java
  5. +1
    -1
      bubble-server/src/main/java/bubble/service/cloud/GeoService.java
  6. +1
    -1
      bubble-server/src/main/java/bubble/service/packer/PackerJob.java

+ 0
- 2
bubble-server/src/main/java/bubble/model/cloud/CloudService.java 查看文件

@@ -198,8 +198,6 @@ public class CloudService extends IdentifiableBaseParentEntity implements Accoun
return wireAndSetup(configuration);
}

@Transient @JsonIgnore public RegionalServiceDriver getRegionalDriver () { return (RegionalServiceDriver) getDriver(); }

@Transient @JsonIgnore public GeoLocateServiceDriver getGeoLocateDriver(BubbleConfiguration configuration) {
return (GeoLocateServiceDriver) wireAndSetup(configuration);
}


+ 15
- 2
bubble-server/src/main/java/bubble/model/cloud/RegionalServiceDriver.java 查看文件

@@ -6,23 +6,36 @@ package bubble.model.cloud;

import bubble.cloud.CloudRegion;
import bubble.cloud.CloudRegionRelative;
import bubble.server.BubbleConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import static java.util.Comparator.comparingDouble;
import static org.cobbzilla.util.daemon.ZillaRuntime.shortError;

public interface RegionalServiceDriver {

static List<CloudRegionRelative> findClosestRegions(List<CloudService> clouds,
Logger log = LoggerFactory.getLogger(RegionalServiceDriver.class);

static List<CloudRegionRelative> findClosestRegions(BubbleConfiguration configuration,
List<CloudService> clouds,
BubbleFootprint footprint,
double latitude,
double longitude) {

final List<CloudRegionRelative> allRegions = new ArrayList<>();
for (CloudService c : clouds) {
final List<CloudRegion> regions = c.getRegionalDriver().getRegions();
final List<CloudRegion> regions;
try {
regions = c.getComputeDriver(configuration).getRegions();
} catch (Exception e) {
log.warn("findClosestRegions: error fetching regions from "+c.getName()+"/"+c.getUuid()+": "+shortError(e), e);
continue;
}
if (regions != null) {
for (CloudRegion region : regions) {
if (footprint != null && !footprint.isAllowedCountry(region.getLocation().getCountry())) {


+ 4
- 2
bubble-server/src/main/java/bubble/resources/cloud/CloudServiceRegionsResource.java 查看文件

@@ -12,6 +12,7 @@ import bubble.dao.cloud.CloudServiceDAO;
import bubble.model.account.Account;
import bubble.model.cloud.BubbleFootprint;
import bubble.model.cloud.CloudService;
import bubble.server.BubbleConfiguration;
import bubble.service.cloud.GeoService;
import org.glassfish.grizzly.http.server.Request;
import org.glassfish.jersey.server.ContainerRequest;
@@ -38,6 +39,7 @@ public class CloudServiceRegionsResource {

public CloudServiceRegionsResource(Account account) { this.account = account; }

@Autowired private BubbleConfiguration configuration;
@Autowired private CloudServiceDAO cloudDAO;
@Autowired private BubbleFootprintDAO footprintDAO;
@Autowired private GeoService geoService;
@@ -77,13 +79,13 @@ public class CloudServiceRegionsResource {
if (footprint == null) return notFound(footprintId);
}

return ok(findClosestRegions(computeClouds(), footprint, loc.getLatitude(), loc.getLongitude()));
return ok(findClosestRegions(configuration, computeClouds(), footprint, loc.getLatitude(), loc.getLongitude()));
}

public List<CloudRegion> findRegions(List<CloudService> clouds, BubbleFootprint footprint) {
final List<CloudRegion> regions = new ArrayList<>();
for (CloudService cloud : clouds) {
for (CloudRegion region : cloud.getRegionalDriver().getRegions(footprint)) {
for (CloudRegion region : cloud.getComputeDriver(configuration).getRegions(footprint)) {
regions.add(region.setCloud(cloud.getUuid()));
}
}


+ 1
- 1
bubble-server/src/main/java/bubble/resources/cloud/NetworksResource.java 查看文件

@@ -148,7 +148,7 @@ public class NetworksResource extends AccountOwnedResource<BubbleNetwork, Bubble
final List<CloudService> clouds = cloudDAO.findByAccountAndType(caller.getUuid(), csType);

// find closest region
return ok(findClosestRegions(clouds, footprint, latitude, longitude));
return ok(findClosestRegions(configuration, clouds, footprint, latitude, longitude));
}




+ 1
- 1
bubble-server/src/main/java/bubble/service/cloud/GeoService.java 查看文件

@@ -224,7 +224,7 @@ public class GeoService {

// find all cloud services available to us
final List<CloudService> clouds = cloudDAO.findByAccountAndType(network.getAccount(), CloudServiceType.compute);
final List<CloudRegionRelative> closestRegions = findClosestRegions(clouds, footprint, latitude, longitude);
final List<CloudRegionRelative> closestRegions = findClosestRegions(configuration, clouds, footprint, latitude, longitude);
if (closestRegions.isEmpty()) throw invalidEx("err.cloudRegions.required");
return closestRegions;
}


+ 1
- 1
bubble-server/src/main/java/bubble/service/packer/PackerJob.java 查看文件

@@ -112,7 +112,7 @@ public class PackerJob implements Callable<List<PackerImage>> {

// determine lat/lon to find closest cloud region to perform build in
final GeoLocation here = geoService.locate(account.getUuid(), getExternalIp());
final List<CloudRegionRelative> closestRegions = findClosestRegions(new SingletonList<>(cloud), null, here.getLatitude(), here.getLongitude());
final List<CloudRegionRelative> closestRegions = findClosestRegions(configuration, new SingletonList<>(cloud), null, here.getLatitude(), here.getLongitude());
if (empty(closestRegions)) return die("writePackerImages: no closest region could be determined");
CloudRegionRelative buildRegion = closestRegions.get(0);
ctx.put(BUILD_REGION_VAR, buildRegion);


Loading…
取消
儲存