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):
|
2016-06-04 11:35:59 +02:00
|
|
|
description = 'Creating tarball with image'
|
|
|
|
phase = phases.image_registration
|
|
|
|
predecessors = [image.MoveImage]
|
2016-01-26 21:43:22 -02:00
|
|
|
|
2016-06-04 11:35:59 +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
|
|
|
|
2016-06-04 11:35:59 +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])
|
2016-02-19 19:21:28 -02:00
|
|
|
|
|
|
|
|
|
|
|
class UploadImageTarball(Task):
|
2016-06-04 11:35:59 +02:00
|
|
|
description = 'Uploading image tarball'
|
|
|
|
phase = phases.image_registration
|
|
|
|
predecessors = [CreateImageTarball]
|
2016-02-19 19:21:28 -02:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
@classmethod
|
|
|
|
def run(cls, info):
|
|
|
|
info._oracle['client'].file_path = info._oracle['tarball_path']
|
|
|
|
info._oracle['client'].upload_file()
|
2016-02-19 19:21:28 -02:00
|
|
|
|
|
|
|
|
|
|
|
class DownloadImageTarball(Task):
|
2016-06-04 11:35:59 +02:00
|
|
|
description = 'Downloading image tarball for integrity verification'
|
|
|
|
phase = phases.image_registration
|
|
|
|
predecessors = [UploadImageTarball]
|
2016-02-19 19:21:28 -02:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
@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()
|
2016-02-19 19:21:28 -02:00
|
|
|
|
|
|
|
|
|
|
|
class CompareImageTarballs(Task):
|
2016-06-04 11:35:59 +02:00
|
|
|
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)
|