From afea704b55d626164ad5ae147ece373f10ebdb5b Mon Sep 17 00:00:00 2001 From: evazion Date: Wed, 11 Dec 2019 01:44:23 -0600 Subject: [PATCH] storage manager: add rclone backend. --- app/logical/storage_manager/rclone.rb | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 app/logical/storage_manager/rclone.rb diff --git a/app/logical/storage_manager/rclone.rb b/app/logical/storage_manager/rclone.rb new file mode 100644 index 000000000..9e3cfb5f2 --- /dev/null +++ b/app/logical/storage_manager/rclone.rb @@ -0,0 +1,34 @@ +class StorageManager::Rclone < StorageManager + class Error < StandardError; end + attr_reader :remote, :bucket, :rclone_options + + def initialize(remote:, bucket:, rclone_options: {}, **options) + @remote = remote + @bucket = bucket + @rclone_options = rclone_options + super(**options) + end + + def store(file, path) + rclone "copyto", file.path, key(path) + end + + def delete(path) + rclone "delete", key(path) + end + + def open(path) + file = Tempfile.new(binmode: true) + rclone "copyto", key(path), file.path + file + end + + def rclone(*args) + success = system("rclone", *rclone_options, *args) + raise Error, "rclone #{$?}" if !success + end + + def key(path) + ":#{remote}:#{bucket}#{path}" + end +end