@@ -0,0 +1,22 @@ | |||||
package bubble.cloud.compute; | |||||
import static bubble.service.packer.PackerJob.PACKER_IMAGE_PREFIX; | |||||
public abstract class PackerImageParserBase extends ListResourceParser<PackerImage> { | |||||
private String bubbleVersion; | |||||
private String jarSha; | |||||
public PackerImageParserBase(String bubbleVersion, String jarSha) { | |||||
this.bubbleVersion = bubbleVersion; | |||||
this.jarSha = jarSha; | |||||
} | |||||
public boolean isValidPackerImage(String name) { | |||||
if (!name.startsWith(PACKER_IMAGE_PREFIX)) return false; | |||||
if (!name.contains("_"+bubbleVersion+"_")) return false; | |||||
// if (!name.endsWith("_"+jarSha)) return false; | |||||
return true; | |||||
} | |||||
} |
@@ -258,7 +258,7 @@ public class DigitalOceanDriver extends ComputeServiceDriverBase { | |||||
} | } | ||||
@Override public List<PackerImage> getPackerImages() { | @Override public List<PackerImage> getPackerImages() { | ||||
final List<PackerImage> images = getResources(PACKER_IMAGES_URI, new DigitalOceanPackerImageParser(configuration.getJarSha())); | |||||
final List<PackerImage> images = getResources(PACKER_IMAGES_URI, new DigitalOceanPackerImageParser(configuration.getVersion(), configuration.getJarSha())); | |||||
return images == null ? Collections.emptyList() : images; | return images == null ? Collections.emptyList() : images; | ||||
} | } | ||||
@@ -1,34 +1,28 @@ | |||||
package bubble.cloud.compute.digitalocean; | package bubble.cloud.compute.digitalocean; | ||||
import bubble.cloud.CloudRegion; | import bubble.cloud.CloudRegion; | ||||
import bubble.cloud.compute.ListResourceParser; | |||||
import bubble.cloud.compute.PackerImage; | import bubble.cloud.compute.PackerImage; | ||||
import bubble.cloud.compute.PackerImageParserBase; | |||||
import com.fasterxml.jackson.databind.JsonNode; | import com.fasterxml.jackson.databind.JsonNode; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | import java.util.List; | ||||
import static bubble.service.packer.PackerJob.PACKER_IMAGE_PREFIX; | |||||
public class DigitalOceanPackerImageParser extends PackerImageParserBase { | |||||
public class DigitalOceanPackerImageParser extends ListResourceParser<PackerImage> { | |||||
private String jarSha; | |||||
public DigitalOceanPackerImageParser (String jarSha) { this.jarSha = jarSha; } | |||||
public DigitalOceanPackerImageParser (String bubbleVersion, String jarSha) { | |||||
super(bubbleVersion, jarSha); | |||||
} | |||||
@Override public boolean allowEmpty() { return true; } | @Override public boolean allowEmpty() { return true; } | ||||
@Override public PackerImage parse(JsonNode item) { | @Override public PackerImage parse(JsonNode item) { | ||||
final PackerImage image = new PackerImage(); | |||||
if (!item.has("name")) return null; | |||||
final String name = item.get("name").textValue(); | |||||
if (!isValidPackerImage(name)) return null; | |||||
final String name; | |||||
if (item.has("name")) { | |||||
name = item.get("name").textValue(); | |||||
if (!name.startsWith(PACKER_IMAGE_PREFIX)) return null; | |||||
if (!name.endsWith("_"+jarSha)) return null; | |||||
image.setName(name); | |||||
} | |||||
final PackerImage image = new PackerImage().setName(name); | |||||
if (item.has("id")) image.setId(item.get("id").textValue()); | if (item.has("id")) image.setId(item.get("id").textValue()); | ||||
@@ -398,7 +398,7 @@ public class VultrDriver extends ComputeServiceDriverBase { | |||||
} | } | ||||
@Override public List<PackerImage> getPackerImages() { | @Override public List<PackerImage> getPackerImages() { | ||||
final List<PackerImage> images = loadCloudResources(SNAPSHOT_URL, new VultrPackerImageParser(configuration.getJarSha())); | |||||
final List<PackerImage> images = loadCloudResources(SNAPSHOT_URL, new VultrPackerImageParser(configuration.getVersion(), configuration.getJarSha())); | |||||
return images == null ? Collections.emptyList() : images; | return images == null ? Collections.emptyList() : images; | ||||
} | } | ||||
@@ -1,17 +1,16 @@ | |||||
package bubble.cloud.compute.vultr; | package bubble.cloud.compute.vultr; | ||||
import bubble.cloud.compute.ListResourceParser; | |||||
import bubble.cloud.compute.PackerImage; | import bubble.cloud.compute.PackerImage; | ||||
import bubble.cloud.compute.PackerImageParserBase; | |||||
import com.fasterxml.jackson.databind.JsonNode; | import com.fasterxml.jackson.databind.JsonNode; | ||||
import static bubble.service.packer.PackerJob.PACKER_IMAGE_PREFIX; | |||||
import static org.cobbzilla.util.daemon.ZillaRuntime.die; | import static org.cobbzilla.util.daemon.ZillaRuntime.die; | ||||
public class VultrPackerImageParser extends ListResourceParser<PackerImage> { | |||||
public class VultrPackerImageParser extends PackerImageParserBase { | |||||
private String jarSha; | |||||
public VultrPackerImageParser(String jarSha) { this.jarSha = jarSha; } | |||||
public VultrPackerImageParser(String bubbleVersion, String jarSha) { | |||||
super(bubbleVersion, jarSha); | |||||
} | |||||
@Override public PackerImage parse(JsonNode item) { | @Override public PackerImage parse(JsonNode item) { | ||||
if (!item.has("SNAPSHOTID")) return die("parse: SNAPSHOTID not found"); | if (!item.has("SNAPSHOTID")) return die("parse: SNAPSHOTID not found"); | ||||
@@ -20,10 +19,10 @@ public class VultrPackerImageParser extends ListResourceParser<PackerImage> { | |||||
if (!item.has("status")) return die("parse: status not found"); | if (!item.has("status")) return die("parse: status not found"); | ||||
if (!item.get("status").textValue().equals("complete")) return null; | if (!item.get("status").textValue().equals("complete")) return null; | ||||
final String name = item.get("description").textValue(); | final String name = item.get("description").textValue(); | ||||
if (!name.startsWith(PACKER_IMAGE_PREFIX)) return null; | |||||
if (!name.endsWith("_"+jarSha)) return null; | |||||
if (!isValidPackerImage(name)) return null; | |||||
return new PackerImage() | return new PackerImage() | ||||
.setName(name) | .setName(name) | ||||
.setId(item.get("SNAPSHOTID").textValue()); | .setId(item.get("SNAPSHOTID").textValue()); | ||||
} | } | ||||
} | } |