[et-mgmt-tools] [patch] virt-convert add disk signature into virt-image format export

Joey Boggs jboggs at redhat.com
Fri Oct 3 15:32:16 UTC 2008


>   
>> diff -r 58a909b4f71c virt-convert
>> --- a/virt-convert	Mon Sep 22 11:32:11 2008 -0400
>> +++ b/virt-convert	Wed Oct 01 17:12:45 2008 -0400
>> @@ -64,6 +64,8 @@
>>      opts.add_option("", "--os-variant", type="string", dest="os_variant",
>>                        action="callback", callback=cli.check_before_store,
>>                        help=("The OS variant for fully virtualized guests, e.g. 'fedora6', 'rhel5', 'solaris10', 'win2k', 'vista'"))
>> +    opts.add_option("", "--checksum", action="store_true", dest="checksum",
>> +                    help=("Generate a checksum for a virt-image guest"))
>>      opts.add_option("", "--noapic", action="store_true", dest="noapic",
>>          help=("Disables APIC for fully virtualized guest (overrides value in os-type/os-variant db)"), default=False)
>>      opts.add_option("", "--noacpi", action="store_true", dest="noacpi",
>> @@ -184,6 +186,9 @@
>>  
>>      unixname = vmdef.name.replace(" ", "-")
>>  
>> +    if options.checksum:
>> +        vmdef.checksum = "yes"
>> +
>>     
>
> Rather than use a string yes/no, why not just call
> the variable 'use_checksum' and have it as a bool
> value?
>
> We probably also want to add an option like 
> checksum_type, since it really isn't a simple
> yes/no option. If no type is specified, we can
> just whatever we deem is a sensible default.
> This can be worked out later though.
>
>   
I'll make that change for use_checksum. Would that mean we're only 
generating 1 checksum by default?
>
>> +
>> +        if vm.checksum == "yes":
>> +            md5checksum = None
>> +            shachecksum = None
>> +
>> +            storage.append("""<disk file="%s" use="system" format="%s">\n""" % (path, type))
>> +            
>> +            try:
>> +                import hashlib
>> +                m1 = hashlib.md5(path)
>> +                m2 = hashlib.sha256(path)
>> +            except:
>> +                import md5
>> +                m1 = md5.new(path)
>> +                m2 = None
>> +
>> +            f = open(path,"r")
>> +            while 1:
>> +                chunk = f.read(65536)
>> +                if not chunk:
>> +                    break
>> +                m1.update(chunk)
>> +
>> +                if m2:
>> +                   m2.update(chunk)
>> +
>>     
>
> I tested the above, and it generates different checksums than
> the cli utils (md5sum, sha256sum). Problem seems to be that
> you initialize the hash with the file's pathname. Is that
> intentional?
>
> We should probably match the output of the cli utils, so
> let's make sure the hashes match for both small and large
> files to be sure we aren't missing anything.
>
>   
I just discovered that this morning when working on the 
appliance-creator portions of this and just removed the filename out of 
the hash.




More information about the et-mgmt-tools mailing list