def run(cls, info): loopback_backup_name = 'volume-{id}.{ext}.backup'.format(id=info.run_id, ext=info.volume.extension) destination = os.path.join(info.manifest.bootstrapper['workspace'], loopback_backup_name) def mk_snapshot(): copyfile(info.volume.image_path, destination) remount(info.volume, mk_snapshot) msg = 'A copy of the bootstrapped volume was created. Path: {path}'.format(path=destination) log.info(msg)
def run(cls, info): loopback_backup_name = 'volume-{id}.{ext}.backup'.format( id=info.run_id, ext=info.volume.extension) destination = os.path.join(info.manifest.bootstrapper['workspace'], loopback_backup_name) def mk_snapshot(): copyfile(info.volume.image_path, destination) remount(info.volume, mk_snapshot) msg = 'A copy of the bootstrapped volume was created. Path: {path}'.format( path=destination) log.info(msg)
def run(cls, info): def mk_snapshot(): return info.volume.snapshot() snapshot = remount(info.volume, mk_snapshot) msg = 'A snapshot of the bootstrapped volume was created. ID: {id}'.format( id=snapshot.id) log.info(msg)
def run(cls, info): from common.fs.loopbackvolume import LoopbackVolume from common.tools import log_check_call boot_dir = os.path.join(info.root, 'boot') grub_dir = os.path.join(boot_dir, 'grub') from common.fs import remount p_map = info.volume.partition_map def link_fn(): info.volume.link_dm_node() if isinstance(p_map, partitionmaps.none.NoPartitions): p_map.root.device_path = info.volume.device_path def unlink_fn(): info.volume.unlink_dm_node() if isinstance(p_map, partitionmaps.none.NoPartitions): p_map.root.device_path = info.volume.device_path # GRUB cannot deal with installing to loopback devices # so we fake a real harddisk with dmsetup. # Guide here: http://ebroder.net/2009/08/04/installing-grub-onto-a-disk-image/ if isinstance(info.volume, LoopbackVolume): remount(info.volume, link_fn) try: [device_path] = log_check_call(['readlink', '-f', info.volume.device_path]) device_map_path = os.path.join(grub_dir, 'device.map') partition_prefix = 'msdos' if isinstance(p_map, partitionmaps.gpt.GPTPartitionMap): partition_prefix = 'gpt' with open(device_map_path, 'w') as device_map: device_map.write('(hd0) {device_path}\n'.format(device_path=device_path)) if not isinstance(p_map, partitionmaps.none.NoPartitions): for idx, partition in enumerate(info.volume.partition_map.partitions): device_map.write('(hd0,{prefix}{idx}) {device_path}\n' .format(device_path=partition.device_path, prefix=partition_prefix, idx=idx + 1)) # Install grub log_check_call(['/usr/sbin/chroot', info.root, '/usr/sbin/grub-install', device_path]) log_check_call(['/usr/sbin/chroot', info.root, '/usr/sbin/update-grub']) except Exception as e: if isinstance(info.volume, LoopbackVolume): remount(info.volume, unlink_fn) raise e if isinstance(info.volume, LoopbackVolume): remount(info.volume, unlink_fn)
def run(cls, info): from common.fs.loopbackvolume import LoopbackVolume from common.tools import log_check_call boot_dir = os.path.join(info.root, 'boot') grub_dir = os.path.join(boot_dir, 'grub') from common.fs import remount p_map = info.volume.partition_map def link_fn(): info.volume.link_dm_node() if isinstance(p_map, partitionmaps.none.NoPartitions): p_map.root.device_path = info.volume.device_path def unlink_fn(): info.volume.unlink_dm_node() if isinstance(p_map, partitionmaps.none.NoPartitions): p_map.root.device_path = info.volume.device_path # GRUB cannot deal with installing to loopback devices # so we fake a real harddisk with dmsetup. # Guide here: http://ebroder.net/2009/08/04/installing-grub-onto-a-disk-image/ if isinstance(info.volume, LoopbackVolume): remount(info.volume, link_fn) try: [device_path] = log_check_call(['readlink', '-f', info.volume.device_path]) device_map_path = os.path.join(grub_dir, 'device.map') partition_prefix = 'msdos' if isinstance(p_map, partitionmaps.gpt.GPTPartitionMap): partition_prefix = 'gpt' with open(device_map_path, 'w') as device_map: device_map.write('(hd0) {device_path}\n'.format(device_path=device_path)) if not isinstance(p_map, partitionmaps.none.NoPartitions): for idx, partition in enumerate(info.volume.partition_map.partitions): device_map.write('(hd0,{prefix}{idx}) {device_path}\n' .format(device_path=partition.device_path, prefix=partition_prefix, idx=idx + 1)) # Install grub log_check_call(['chroot', info.root, 'grub-install', device_path]) log_check_call(['chroot', info.root, 'update-grub']) except Exception as e: if isinstance(info.volume, LoopbackVolume): remount(info.volume, unlink_fn) raise e if isinstance(info.volume, LoopbackVolume): remount(info.volume, unlink_fn)
def run(cls, info): def mk_snapshot(): return info.volume.snapshot() snapshot = remount(info.volume, mk_snapshot) msg = 'A snapshot of the bootstrapped volume was created. ID: {id}'.format(id=snapshot.id) log.info(msg)