~ubuntu-branches/ubuntu/raring/nova/raring-proposed

« back to all changes in this revision

Viewing changes to nova/virt/powervm/blockdev.py

  • Committer: Package Import Robot
  • Author(s): Adam Gandelman
  • Date: 2013-08-09 10:12:27 UTC
  • mfrom: (1.1.74)
  • Revision ID: package-import@ubuntu.com-20130809101227-4n60fzcgra8dzk3d
Tags: 1:2013.1.3-0ubuntu1
* Resynchronize with stable/grizzly (89c7ee4) (LP: #1210447):
  - [8e6edd2] Bump stable/grizzly next version to 2013.1.3
  - [61fc529] attach quantum security group to an existing vm failed
    LP: 1189059
  - [60774bd] nova-compute fails to start if quantum is down LP: 1186357
  - [8e6d4b6] asymmetric routes in nova network with external gateway and
    routing_source_ip LP: 1182143
  - [8849413] Failed VM's not set to error state on exception LP: 1182056
  - [ef10eee] Double healing of info_cache with cells LP: 1180304
  - [7422d83] Can't log into  VM after powervm is resized LP: 1169848
  - [49ab0e8] stack trace when instance_actions extension can not find
    instance in GET LP: 1182867
  - [e71247c] nova service-list returns illegal result with non db service
    heartbeat LP: 1168861
  - [3f60606] Volume IO usage gets reset to 0 after a reboot / crash
    LP: 1169097
  - [19c443b] unused method  list_interfaces in vmware driver can be removed
    LP: 1187251
  - [a8dab9f] No cleanup done when file transfer fails with powervm driver
    LP: 1173017
  - [fc98015] nova consoleauth depends on Conductor Service LP: 1186123
  - [1066418] VMware drivers are no longer passing quantum port-id to
    vCenter LP: 1183452
  - [b92075c] nova net-list fails on empty list with Quantum backend
    LP: 1189976
  - [3ba31f2] Create VM with no networks with Quantum Gives SecurityGroups
    Exception LP: 1191044
  - [89150b2] Periodic ValueErrors when using qpid LP: 1185465
  - [0e0d615] Libvirt pre-Grizzly instances cannot be block migrated
    LP: 1185588
  - [27960ef] ZMQ ipc socket file is created using un-sanitized network
    input LP: 1122763
  - [265b868] cannot block migrate old style instances libvirt complains
    LP: 1175286
  - [008a68a] code logical error exists in vmwareapi vif.py  LP: 1177635
  - [378c045] Instance IP addresses are re-used even when previous instance
    could not be powered off LP: 1180178
  - [48ddffe] Reboot of compute node breaks VMs with volumes LP: 1188326
  - [f427f01] Missing dashes from console-log LP: 1194032
  - [78ebf1a] network-create returns an internal error when network
    conflicts LP: 1158075
  - [767c850] Instance nics are reorder after reboot LP: 1187092
  - [0b45996] instance directory naming update to use uuid  LP: 1186944
  - [06cfad5] Disassociate failed dhcp fixed ip in deallocate_for_instance()
    method LP: 1180766
  - [cbcdfc5] Allow confirm_resize action on an instance in 'deleting'
    status LP: 1189391
  - [2563c44] aggregate_get_by_host returns aggregates from other hosts
    LP: 1201277
  - [109f3a9] nova libvirt driver requires iscsi initiator name regardless
    of using it in volume drivers LP: 1007084
  - [7f1c336] Host is always set to None in get_instance_nw_info(...)
    LP: 1194178
  - [1cf30a3] nova boot with colume should fail if the volume is already
    attached to another instance LP: 1166770
  - [9cb9361] Aggregate metadata filtering by key returns unrelated metadata
    LP: 1201283
  - [a61872b] Need clean up  ftp transfer faiure  in powervm driver
    LP: 1188884
  - [91bcd15] Race can cause soft deleted instance to be erased by mistake
    LP: 1186243
  - [c57fded] Nova fails to create a security group rule if ::0/0 is used as
    cidr LP: 1199943
  - [c698dd3] VMwareESXDriver and VMwareVCDriver report incorrect stat
    LP: 1180779
  - [e572faf] novnc fails when amqp_rpc_single_reply_queue=True LP: 1193031
  - [34ddd27] eventlet.monkey_patch() for spice and vnc proxy
  - [864837f] hypervisor_hostname not updated on evacuate LP: 1198284
  - [756a772] libvirt migrate/resize on shared storage can cause data loss
    LP: 1177247
  - [889b215] nova live-migration of volume-backed VM fails because of image
    is None LP: 1199811
  - [60712a4] VNC console does not work with VCDriver LP: 1178369
  - [e0aa0f5] metadata service throws error 500 when compute_driver is not
    set LP: 1184641
  - [340d337] Instance IP addresses are re-used even when previous instance
    could not be powered off LP: 1180178
  - [8247dc8] Resource limit circumvention in Nova private flavors
    (CVE-2013-2256) LP: 1194093
  - [bd7e467] Denial of Service in Nova network source security groups
    (CVE-2013-4185) LP: 1184041
  - [c3fddb7] Resize a VM when a volume is attached fails LP: 1190364
  - [01edbaa] Hyper-V versions before 2012 are not properly recognized
    LP: 1203059
  - [b18818a] driver libvirt doesn't honor vif quota LP: 1185030
  - [798984d] config drive not visible to windows LP: 1155842
  - [d18ceb1] nova live-migration failed due to exception.MigrationError
    LP: 1171526
  - [1934dbc] vmware Hyper for nova vnc console url parameters error
    LP: 1172177
  - [89c7ee4] [OSSA 2013-023] Potential unsafe XML usage (CVE-2013-4179,
    CVE-2013-4202) LP: 1190229
* debian/rules: Clean new setuptools-git cruft.
* debian/control: Update Vcs fields.

Show diffs side-by-side

added added

removed removed

Lines of Context:
380
380
        output = self.run_vios_command_as_root(cmd)
381
381
        return output[0]
382
382
 
 
383
    def _checksum_local_file(self, source_path):
 
384
        """Calculate local file checksum.
 
385
 
 
386
        :param source_path: source file path
 
387
        :returns: string -- the md5sum of local file
 
388
        """
 
389
        with open(source_path, 'r') as img_file:
 
390
            hasher = hashlib.md5()
 
391
            block_size = 0x10000
 
392
            buf = img_file.read(block_size)
 
393
            while len(buf) > 0:
 
394
                hasher.update(buf)
 
395
                buf = img_file.read(block_size)
 
396
            source_cksum = hasher.hexdigest()
 
397
        return source_cksum
 
398
 
383
399
    def _copy_image_file(self, source_path, remote_path, decompress=False):
384
400
        """Copy file to VIOS, decompress it, and return its new size and name.
385
401
 
389
405
                           if False (default), just copies the file
390
406
        """
391
407
        # Calculate source image checksum
392
 
        hasher = hashlib.md5()
393
 
        block_size = 0x10000
394
 
        img_file = file(source_path, 'r')
395
 
        buf = img_file.read(block_size)
396
 
        while len(buf) > 0:
397
 
            hasher.update(buf)
398
 
            buf = img_file.read(block_size)
399
 
        source_cksum = hasher.hexdigest()
 
408
        source_cksum = self._checksum_local_file(source_path)
400
409
 
401
410
        comp_path = os.path.join(remote_path, os.path.basename(source_path))
402
411
        if comp_path.endswith(".gz"):
414
423
 
415
424
        # If the image does not exist already
416
425
        if not output:
417
 
            # Copy file to IVM
418
 
            common.ftp_put_command(self.connection_data, source_path,
419
 
                                   remote_path)
 
426
            try:
 
427
                # Copy file to IVM
 
428
                common.ftp_put_command(self.connection_data, source_path,
 
429
                                       remote_path)
 
430
            except exception.PowerVMFTPTransferFailed:
 
431
                with excutils.save_and_reraise_exception():
 
432
                    cmd = "/usr/bin/rm -f %s" % final_path
 
433
                    self.run_vios_command_as_root(cmd)
420
434
 
421
435
            # Verify image file checksums match
422
436
            output = self._md5sum_remote_file(final_path)
423
437
            if not output:
424
438
                LOG.error(_("Unable to get checksum"))
425
 
                raise exception.PowerVMFileTransferFailed()
 
439
                # Cleanup inconsistent remote file
 
440
                cmd = "/usr/bin/rm -f %s" % final_path
 
441
                self.run_vios_command_as_root(cmd)
 
442
 
 
443
                raise exception.PowerVMFileTransferFailed(file_path=final_path)
426
444
            if source_cksum != output.split(' ')[0]:
427
445
                LOG.error(_("Image checksums do not match"))
428
 
                raise exception.PowerVMFileTransferFailed()
 
446
                # Cleanup inconsistent remote file
 
447
                cmd = "/usr/bin/rm -f %s" % final_path
 
448
                self.run_vios_command_as_root(cmd)
 
449
 
 
450
                raise exception.PowerVMFileTransferFailed(file_path=final_path)
429
451
 
430
452
            if decompress:
431
453
                # Unzip the image
505
527
                               local_file_path)
506
528
 
507
529
        # Calculate copied image checksum
508
 
        with open(local_file_path, 'r') as image_file:
509
 
            hasher = hashlib.md5()
510
 
            block_size = 0x10000
511
 
            buf = image_file.read(block_size)
512
 
            while len(buf) > 0:
513
 
                hasher.update(buf)
514
 
                buf = image_file.read(block_size)
515
 
            dest_chksum = hasher.hexdigest()
 
530
        dest_chksum = self._checksum_local_file(local_file_path)
516
531
 
517
532
        # do comparison
518
533
        if source_chksum and dest_chksum != source_chksum:
519
534
            LOG.error(_("Image checksums do not match"))
520
 
            raise exception.PowerVMFileTransferFailed()
 
535
            raise exception.PowerVMFileTransferFailed(
 
536
                                      file_path=local_file_path)
521
537
 
522
538
        # Cleanup transferred remote file
523
539
        cmd = "/usr/bin/rm -f %s" % copy_from_path