[Thincrust-devel] [PATCH] Moved the real logic into a global method called convert. This makes the cli tool very small, and should make tool integration easier

Bryan Kearney bkearney at redhat.com
Thu Nov 20 17:00:22 UTC 2008


---
 ec2convert/ec2config.py |   55 ++++++++++++++++++++++++++++++++++-
 ec2convert/fs.py        |    6 ++--
 tools/ec2-converter     |   73 +++++++++++-----------------------------------
 3 files changed, 75 insertions(+), 59 deletions(-)

diff --git a/ec2convert/ec2config.py b/ec2convert/ec2config.py
index 35a7ceb..cf53f93 100644
--- a/ec2convert/ec2config.py
+++ b/ec2convert/ec2config.py
@@ -20,8 +20,12 @@
 import os
 import sys
 import logging
+import random
+import shutil
+import ec2convert.rpmcheck as rpmcheck
+import ec2convert.fs as fs
     
-class ec2_modify:
+class EC2Config():
     
     def makedev(self,tmpdir):
         os.popen("/sbin/MAKEDEV -d %s/dev -x console" % tmpdir)
@@ -132,3 +136,52 @@ class ec2_modify:
         else:
             logging.error("Kernel download error!")
 
+
+def convert(imagefile, inputtype, tmpdirectory, checkrpms, checkssh, newimagepath):
+    tmpdir = tmpdirectory + "/ec2-convert-" + (''.join(random.sample('123567890abcdefghijklmnopqrstuvwxyz', 8)))
+    tmpimage = tmpdir + "-tmpimage"
+    newimage = tmpimage + "/ec2-diskimage.img"
+
+    if inputtype == "loopbackfs":
+        fsutil = fs.LoopbackFSImage()
+
+    elif inputtype == "diskimage":
+        fsutil = fs.LoopBackDiskImage()
+
+    elif options.inputtype == "directory":
+        fsutil = fs.DirectoryImage()
+       
+    else:
+        logging.error("No input type was provided")
+        return False
+
+    os.mkdir(tmpdir)
+    os.mkdir(tmpimage)
+
+    if inputtype =="diskimage" or inputtype == "loopbackfs":
+        logging.info("Copying %s to %s" % (imagefile,tmpimage))
+        shutil.copy(imagefile,newimage)
+
+    fsutil.setup_fs(imagefile,tmpdir)
+
+    if checkrpms:
+       rpmcheck.checkpkgs(tmpdir)
+
+    config = EC2Config()
+    config.makedev(tmpdir)
+    config.fstab(tmpdir)
+    config.rclocal_config(tmpdir)
+
+    if checkssh:
+       config.ssh_config(tmpdir)
+
+    config.eth0_config(tmpdir)
+    config.ami_tools(tmpdir)
+    config.kernel_modules(tmpdir)
+    fsutil.unmount(tmpdir)
+
+    shutil.move(newimage,newimagepath) 
+    
+    fsutil.cleanup(tmpdir)    
+    
+    return True
diff --git a/ec2convert/fs.py b/ec2convert/fs.py
index 79e15f1..e09b05b 100644
--- a/ec2convert/fs.py
+++ b/ec2convert/fs.py
@@ -24,7 +24,7 @@ import sys
 import shutil
 import time
  
-class loopbackdisk_image(): 
+class LoopBackDiskImage(): 
 
     def setup_fs(self,imagefile,tmpdir):
             loop_devices = [] 
@@ -105,7 +105,7 @@ class loopbackdisk_image():
         os.system("rm -rf %s/*" % tmpdir)
         return
 
-class directory_image(): 
+class DirectoryImage(): 
 
     def setup_fs(self,imagefile,tmpdir):
             tmproot = tmpdir + "-tmproot"
@@ -145,7 +145,7 @@ class directory_image():
         return
 
         
-class loopbackfs_image():
+class LoopbackFSImage():
     
     def setup_fs(self,imagefile,tmpdir):
         logging.debug("Mounting %s to %s" % (imagefile,tmpdir))
diff --git a/tools/ec2-converter b/tools/ec2-converter
index 96524f9..81fe770 100755
--- a/tools/ec2-converter
+++ b/tools/ec2-converter
@@ -19,14 +19,10 @@
 
 import os
 import sys
-import shutil
 import optparse
 import logging
 import imgcreate
-import random
 import ec2convert.ec2config as ec2config
-import ec2convert.rpmcheck as rpmcheck
-import ec2convert.fs as fs
 import time
     
 class Usage(Exception):
@@ -88,63 +84,30 @@ def main():
         logging.error("Imagefile required to convert")
         return 1
     
-    imagefile = options.imagefile
-    tmpdir = options.tmpdir + "/ec2-convert-" + (''.join(random.sample('123567890abcdefghijklmnopqrstuvwxyz', 8)))
-    tmpimage = tmpdir + "-tmpimage"
-    newimage = tmpimage + "/ec2-diskimage.img"
-
-    if options.inputtype == "loopbackfs":
-        fsutil = fs.loopbackfs_image()
-
-    elif options.inputtype == "diskimage":
-        fsutil = fs.loopbackdisk_image()
-
-    elif options.inputtype == "directory":
-        fsutil = fs.directory_image()
-       
-    else:
+    if not options.inputtype:
         logging.error("--inputtype must be defined")
-        sys.exit(1)
-
-    os.mkdir(tmpdir)
-    os.mkdir(tmpimage)
-
-    if options.inputtype =="diskimage" or options.inputtype == "loopbackfs":
-        logging.info("Copying %s to %s" % (imagefile,tmpimage))
-        shutil.copy(imagefile,newimage)
-
-    fsutil.setup_fs(imagefile,tmpdir)
-
-    if options.rpmcheck == "yes":
-       rpmcheck.checkpkgs(tmpdir)
-
-    config = ec2config.ec2_modify()
-    config.makedev(tmpdir)
-    config.fstab(tmpdir)
-    config.rclocal_config(tmpdir)
-
-    if options.ssh == "yes":
-       config.ssh_config(tmpdir)
-
-    config.eth0_config(tmpdir)
-    config.ami_tools(tmpdir)
-    config.kernel_modules(tmpdir)
-    fsutil.unmount(tmpdir)
-
+        return 1        
+        
     if options.imagename:
         imagename = options.imagename
-        shutil.move(newimage,imagename)
     else:
         suffix = time.strftime("%Y%m%d%H%M") + ".img"
-        imagename = "ec2-" + suffix
-        shutil.move(newimage,imagename)    
+        imagename = "ec2-" + suffix    
+        
+    rpmcheck = options.rpmcheck == "yes"
+    sshcheck = options.ssh == "yes"
     
-    fsutil.cleanup(tmpdir)    
-            
-    print >> sys.stdout, "\n\nEC2 Image created as %s" % imagename
-    print >> sys.stdout, "\n\nYou now need to bundle and upload the image to EC2 using the EC2 tools"
-    print >> sys.stdout, "Available at:  http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm\n"
-    return 0
+    success = ec2config.convert(options.imagefile, options.inputtype, \
+                    options.tmpdir, rpmcheck, sshcheck, imagename)
+    
+    if success:            
+        print >> sys.stdout, "\n\nEC2 Image created as %s" % imagename
+        print >> sys.stdout, "\n\nYou now need to bundle and upload the image to EC2 using the EC2 tools"
+        print >> sys.stdout, "Available at:  http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm\n"
+        return 0
+    else:
+        print >> sys.stdout, "\n Conversion failed"
+        return 1
 
 if __name__ == "__main__":
     sys.exit(main())
-- 
1.5.6.5




More information about the Thincrust-devel mailing list