bootstrap-vz/bootstrapvz/plugins/tmpfs_workspace/tasks.py

51 lines
1.5 KiB
Python
Raw Permalink Normal View History

from os import makedirs, rmdir
from bootstrapvz.base import Task
from bootstrapvz.common.tasks.workspace import CreateWorkspace, DeleteWorkspace
from bootstrapvz.common import phases
from bootstrapvz.common.tools import log_check_call
class CreateTmpFsWorkspace(Task):
description = 'Creating directory for tmpfs-based workspace'
phase = phases.preparation
@classmethod
def run(cls, info):
makedirs(info.workspace)
class MountTmpFsWorkspace(Task):
description = 'Mounting tmpfs-based workspace'
phase = phases.preparation
# CreateWorkspace is explicitly skipped (see the plugin's resolve_task function). Several other tasks
# depend on CreateWorkspace to put their own files inside the workspace. We position MountTmpFs before
# CreateWorkspace to leverage these dependencies. See also UnmountTmpFs/DeleteWorkspace below.
successors = [CreateWorkspace]
predecessors = [CreateTmpFsWorkspace]
@classmethod
def run(cls, info):
log_check_call(['mount', '--types', 'tmpfs', 'none', info.workspace])
class UnmountTmpFsWorkspace(Task):
description = 'Unmounting tmpfs-based workspace'
phase = phases.cleaning
predecessors = [DeleteWorkspace]
@classmethod
def run(cls, info):
log_check_call(['umount', info.workspace])
class DeleteTmpFsWorkspace(Task):
description = 'Deleting directory for tmpfs-based workspace'
phase = phases.cleaning
predecessors = [UnmountTmpFsWorkspace]
@classmethod
def run(cls, info):
rmdir(info.workspace)