I occasionally have some minor improvement that I need to make to whatever version of cloudstack we're currently running. This is almost always behind what is currently being developed, and I don't always feel like I have time to rebase/refactor it for master. I'm wondering if there are any individuals out there who are looking for ways to contribute that I can hand off these little projects to and mentor a bit. You get an easy project to get your feet wet and I get the improvements into master without using up time. :-) Maybe this sounds like laziness on my part, but it seemed like a good idea.
I can post a patch that works for one version, and you can rework it and test against master. Respond if you're interested, there may be others who have easy work to farm off as well. An example, I've made some improvements to the template downloader, when the first 1M of the template is pulled we attempt to verify that the image is actually what we think it is (qcow2 or vmdk or whatever) by looking at the data. Up until now we just check file extension. It also contains a new TemplateUtils class that has: + public static boolean isCorrectExtension(String path, String ext) { + if (path.toLowerCase().endsWith(ext) + || path.toLowerCase().endsWith(ext + ".gz") + || path.toLowerCase().endsWith(ext + ".bz2") + || path.toLowerCase().endsWith(ext + ".zip")) { + return true; + } + return false; + } Which can be used to clean up the likes of: private void checkFormat(String format, String url) { if((!url.toLowerCase().endsWith("vhd"))&&(!url.toLowerCase().endsWith("vhd.zip")) &&(!url.toLowerCase().endsWith("vhd.bz2"))&&(!url.toLowerCase().endsWith("vhd.gz")) &&(!url.toLowerCase().endsWith("qcow2"))&&(!url.toLowerCase().endsWith("qcow2.zip")) &&(!url.toLowerCase().endsWith("qcow2.bz2"))&&(!url.toLowerCase().endsWith("qcow2.gz")) &&(!url.toLowerCase().endsWith("ova"))&&(!url.toLowerCase().endsWith("ova.zip")) &&(!url.toLowerCase().endsWith("ova.bz2"))&&(!url.toLowerCase().endsWith("ova.gz")) &&(!url.toLowerCase().endsWith("tar"))&&(!url.toLowerCase().endsWith("tar.zip")) &&(!url.toLowerCase().endsWith("tar.bz2"))&&(!url.toLowerCase().endsWith("tar.gz")) &&(!url.toLowerCase().endsWith("vmdk")) && (!url.toLowerCase().endsWith("vmdk.gz")) &&(!url.toLowerCase().endsWith("vmdk.zip")) && (!url.toLowerCase().endsWith("vmdk.bz2")) && (!url.toLowerCase().endsWith("img")) &&(!url.toLowerCase().endsWith("img.gz")) && (!url.toLowerCase().endsWith("img.zip")) && (!url.toLowerCase().endsWith("img.bz2")) &&(!url.toLowerCase().endsWith("raw")) && (!url.toLowerCase().endsWith("raw.gz")) && (!url.toLowerCase().endsWith("raw.bz2")) &&(!url.toLowerCase().endsWith("raw.zip"))){ throw new InvalidParameterValueException("Please specify a valid " + format.toLowerCase()); } if ((format.equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith("vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz"))) || (format.equalsIgnoreCase("vhdx") && (!url.toLowerCase().endsWith("vhdx") && !url.toLowerCase().endsWith("vhdx.zip") && !url.toLowerCase().endsWith("vhdx.bz2") && !url.toLowerCase().endsWith("vhdx.gz"))) || (format.equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith("qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz"))) || (format.equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith("ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz"))) || (format.equalsIgnoreCase("tar") && (!url.toLowerCase().endsWith("tar") && !url.toLowerCase().endsWith("tar.zip") && !url.toLowerCase().endsWith("tar.bz2") && !url.toLowerCase().endsWith("tar.gz"))) || (format.equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith("img") && !url.toLowerCase().endsWith("img.zip") && !url.toLowerCase().endsWith("img.bz2") && !url.toLowerCase().endsWith("img.gz") && !url.toLowerCase().endsWith("raw") && !url.toLowerCase().endsWith("raw.bz2") && !url.toLowerCase().endsWith("raw.zip") && !url.toLowerCase().endsWith("raw.gz"))) || (format.equalsIgnoreCase("vmdk") && (!url.toLowerCase().endsWith("vmdk") && !url.toLowerCase().endsWith("vmdk.zip") && !url.toLowerCase().endsWith("vmdk.bz2") && !url.toLowerCase().endsWith("vmdk.gz"))) ) { throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + format.toLowerCase()); } }