public ListBoxModel doFillSizeIdItems(@RelativePath("..") @QueryParameter String authToken) throws Exception { List<Size> availableSizes = DigitalOcean.getAvailableSizes(authToken); ListBoxModel model = new ListBoxModel(); for (Size size : availableSizes) { model.add(DigitalOcean.buildSizeLabel(size), size.getSlug()); } return model; }
public ListBoxModel doFillImageIdItems(@RelativePath("..") @QueryParameter String authToken) throws Exception { SortedMap<String, Image> availableImages = DigitalOcean.getAvailableImages(authToken); ListBoxModel model = new ListBoxModel(); for (Map.Entry<String, Image> entry : availableImages.entrySet()) { final Image image = entry.getValue(); // For non-snapshots, use the image ID instead of the slug (which isn't available anyway) // so that we can build images based upon backups. final String value = DigitalOcean.getImageIdentifier(image); model.add(entry.getKey(), value); } return model; }
public ListBoxModel doFillRegionIdItems(@RelativePath("..") @QueryParameter String authToken) throws Exception { List<Region> availableSizes = DigitalOcean.getAvailableRegions(authToken); ListBoxModel model = new ListBoxModel(); for (Region region : availableSizes) { model.add(region.getName(), region.getSlug()); } return model; }
private Connection connectToSsh(Computer computer, PrintStream logger) throws RequestUnsuccessfulException, DigitalOceanException { final long timeout = TimeUnit2.MINUTES.toMillis(computer.getCloud().getTimeoutMinutes()); final long startTime = System.currentTimeMillis(); final int sleepTime = 10; long waitTime; while ((waitTime = System.currentTimeMillis() - startTime) < timeout) { // Hack to fetch this each time through the loop to get the latest information. final Droplet droplet = DigitalOcean.getDroplet( computer.getCloud().getAuthToken(), computer.getNode().getDropletId()); if (isDropletStarting(droplet)) { logger.println( "Waiting for droplet to enter ACTIVE state. Sleeping " + sleepTime + " seconds."); } else { try { final String host = getIpAddress(computer); if (Strings.isNullOrEmpty(host) || "0.0.0.0".equals(host)) { logger.println( "No ip address yet, your host is most likely waiting for an ip address."); } else { int port = computer.getSshPort(); Connection conn = getDropletConnection(host, port, logger); if (conn != null) { return conn; } } } catch (IOException e) { // Ignore, we'll retry. } logger.println("Waiting for SSH to come up. Sleeping " + sleepTime + " seconds."); } sleep(sleepTime); } throw new RuntimeException( format( "Timed out after %d seconds of waiting for ssh to become available (max timeout configured is %s)", waitTime / 1000, timeout / 1000)); }
public Slave provision( String dropletName, String cloudName, String authToken, String privateKey, Integer sshKeyId, List<Droplet> droplets) throws IOException, RequestUnsuccessfulException, Descriptor.FormException { LOGGER.log(Level.INFO, "Provisioning slave..."); try { LOGGER.log( Level.INFO, "Starting to provision digital ocean droplet using image: " + imageId + " region: " + regionId + ", sizeId: " + sizeId); if (isInstanceCapReachedLocal(cloudName) || isInstanceCapReachedRemote(droplets, cloudName)) { throw new AssertionError(); } // create a new droplet Droplet droplet = new Droplet(); droplet.setName(dropletName); droplet.setSize(sizeId); droplet.setRegion(new Region(regionId)); droplet.setImage(DigitalOcean.newImage(imageId)); droplet.setKeys(newArrayList(new Key(sshKeyId))); if (!(userData == null || userData.trim().isEmpty())) { droplet.setUserData(userData); } LOGGER.log(Level.INFO, "Creating slave with new droplet " + dropletName); DigitalOceanClient apiClient = new DigitalOceanClient(authToken); Droplet createdDroplet = apiClient.createDroplet(droplet); return newSlave(cloudName, createdDroplet, privateKey); } catch (Exception e) { LOGGER.log(Level.WARNING, e.getMessage(), e); throw new AssertionError(); } }