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());
        }


    }

Reply via email to