2019-12-23 06:32:34 +03:00
|
|
|
# Mounts mount point
|
|
|
|
class Tasks::Mount < Task
|
2019-12-23 22:04:43 +03:00
|
|
|
attr_reader :source
|
|
|
|
attr_reader :mount_point
|
|
|
|
|
2019-12-23 22:47:01 +03:00
|
|
|
class ExistingMountTask < StandardError
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.normalize_mountpoint(path)
|
|
|
|
path = path.gsub(/\//, "/")
|
|
|
|
path.sub(/\/$/, "") unless path == "/"
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.register(mount_point, instance)
|
|
|
|
mount_point == normalize_mountpoint(mount_point)
|
|
|
|
@registry ||= {}
|
|
|
|
unless @registry[mount_point].nil? then
|
|
|
|
raise ExistingMountTask.new("Mount point task for '#{mount_point}' already exists.")
|
|
|
|
end
|
|
|
|
@registry[mount_point] = instance
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.registry()
|
|
|
|
@registry
|
|
|
|
end
|
|
|
|
|
2019-12-23 22:04:43 +03:00
|
|
|
def initialize(source, mount_point=nil, **named)
|
|
|
|
@named = named
|
|
|
|
if mount_point
|
|
|
|
@source = source
|
|
|
|
@mount_point = mount_point
|
|
|
|
add_dependency(:Files, source)
|
|
|
|
else
|
|
|
|
@source = named[:type]
|
|
|
|
@mount_point = source
|
|
|
|
end
|
2019-12-23 06:32:34 +03:00
|
|
|
add_dependency(:SingletonTask, :Environment)
|
2019-12-23 22:47:01 +03:00
|
|
|
self.class.register(@mount_point, self)
|
2019-12-23 06:32:34 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
def run()
|
2019-12-23 22:04:43 +03:00
|
|
|
FileUtils.mkdir_p(mount_point)
|
|
|
|
System.mount(source, mount_point, **@named)
|
|
|
|
end
|
|
|
|
|
|
|
|
def type
|
|
|
|
@named[:type]
|
2019-12-23 06:32:34 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
def name()
|
2019-12-23 22:04:43 +03:00
|
|
|
"#{super}(#{source}, #{mount_point}, #{@named.inspect})"
|
2019-12-23 06:32:34 +03:00
|
|
|
end
|
|
|
|
end
|
2019-12-23 22:47:01 +03:00
|
|
|
|
|
|
|
module Dependencies
|
|
|
|
class Mount < BaseDependency
|
|
|
|
def initialize(mount_point)
|
|
|
|
@mount_point = Tasks::Mount.normalize_mountpoint(mount_point)
|
|
|
|
end
|
|
|
|
|
|
|
|
def fulfilled?()
|
|
|
|
task = Tasks::Mount.registry[@mount_point]
|
|
|
|
task && task.ran
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|