[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