bootstrap-vz/bootstrapvz/providers/oracle/tasks/image.py

60 lines
1.9 KiB
Python
Raw Normal View History

2016-01-26 21:43:22 -02:00
from bootstrapvz.base import Task
from bootstrapvz.common import phases
from bootstrapvz.common.tasks import image
from bootstrapvz.common.tools import log_check_call
import os
class CreateImageTarball(Task):
description = 'Creating tarball with image'
phase = phases.image_registration
predecessors = [image.MoveImage]
2016-01-26 21:43:22 -02:00
@classmethod
def run(cls, info):
image_name = info.manifest.name.format(**info.manifest_vars)
filename = image_name + '.' + info.volume.extension
2016-01-26 21:43:22 -02:00
tarball_name = image_name + '.tar.gz'
tarball_path = os.path.join(info.manifest.bootstrapper['workspace'], tarball_name)
info._oracle['tarball_path'] = tarball_path
log_check_call(['tar', '--sparse', '-C', info.manifest.bootstrapper['workspace'],
'-caf', tarball_path, filename])
class UploadImageTarball(Task):
description = 'Uploading image tarball'
phase = phases.image_registration
predecessors = [CreateImageTarball]
@classmethod
def run(cls, info):
info._oracle['client'].file_path = info._oracle['tarball_path']
info._oracle['client'].upload_file()
class DownloadImageTarball(Task):
description = 'Downloading image tarball for integrity verification'
phase = phases.image_registration
predecessors = [UploadImageTarball]
@classmethod
def run(cls, info):
tmp_tarball_path = '{tarball_path}-{pid}.tmp'.format(
tarball_path=info._oracle['tarball_path'],
pid=os.getpid(),
)
info._oracle['client'].target_file_path = tmp_tarball_path
info._oracle['client'].download_file()
class CompareImageTarballs(Task):
description = 'Comparing uploaded and downloaded image tarballs hashes'
phase = phases.image_registration
predecessors = [DownloadImageTarball]
@classmethod
def run(cls, info):
info._oracle['client'].compare_files()
os.remove(info._oracle['client'].target_file_path)