From 84e82b2686ee5431e68239702697fdcf9bf8853c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Duffeck?= Date: Tue, 18 May 2021 09:40:24 +0200 Subject: [PATCH] Integrate the owncloudsql storage driver --- storage/pkg/command/drivers.go | 15 ++++ storage/pkg/command/storagehome.go | 1 + storage/pkg/command/storageusers.go | 1 + storage/pkg/config/config.go | 15 ++++ storage/pkg/flagset/driverowncloudsql.go | 97 ++++++++++++++++++++++++ storage/pkg/flagset/storagehome.go | 1 + storage/pkg/flagset/storageusers.go | 1 + storage/templates/CONFIGURATION.tmpl | 4 + 8 files changed, 135 insertions(+) create mode 100644 storage/pkg/flagset/driverowncloudsql.go diff --git a/storage/pkg/command/drivers.go b/storage/pkg/command/drivers.go index 0ab35aa89a..e97bf7edae 100644 --- a/storage/pkg/command/drivers.go +++ b/storage/pkg/command/drivers.go @@ -85,6 +85,21 @@ func drivers(cfg *config.Config) map[string]interface{} { "scan": cfg.Reva.Storages.OwnCloud.Scan, "userprovidersvc": cfg.Reva.Users.Endpoint, }, + "owncloudsql": map[string]interface{}{ + "datadirectory": cfg.Reva.Storages.OwnCloudSql.Root, + "upload_info_dir": cfg.Reva.Storages.OwnCloudSql.UploadInfoDir, + "sharedirectory": cfg.Reva.Storages.OwnCloudSql.ShareFolder, + "user_layout": cfg.Reva.Storages.OwnCloudSql.UserLayout, + "redis": cfg.Reva.Storages.OwnCloudSql.Redis, + "enable_home": cfg.Reva.Storages.OwnCloudSql.EnableHome, + "scan": cfg.Reva.Storages.OwnCloudSql.Scan, + "dbusername": cfg.Reva.Storages.OwnCloudSql.DBUsername, + "dbpassword": cfg.Reva.Storages.OwnCloudSql.DBPassword, + "dbhost": cfg.Reva.Storages.OwnCloudSql.DBHost, + "dbport": cfg.Reva.Storages.OwnCloudSql.DBPort, + "dbname": cfg.Reva.Storages.OwnCloudSql.DBName, + "userprovidersvc": cfg.Reva.Users.Endpoint, + }, "ocis": map[string]interface{}{ "root": cfg.Reva.Storages.Common.Root, "enable_home": cfg.Reva.Storages.Common.EnableHome, diff --git a/storage/pkg/command/storagehome.go b/storage/pkg/command/storagehome.go index 3eb886f060..a81457d21f 100644 --- a/storage/pkg/command/storagehome.go +++ b/storage/pkg/command/storagehome.go @@ -49,6 +49,7 @@ func StorageHome(cfg *config.Config) *cli.Command { cfg.Reva.Storages.EOS.EnableHome = true cfg.Reva.Storages.Local.EnableHome = true cfg.Reva.Storages.OwnCloud.EnableHome = true + cfg.Reva.Storages.OwnCloudSql.EnableHome = true cfg.Reva.Storages.S3.EnableHome = true cfg.Reva.Storages.S3NG.EnableHome = true } diff --git a/storage/pkg/command/storageusers.go b/storage/pkg/command/storageusers.go index e39df93cd0..7b96bf432c 100644 --- a/storage/pkg/command/storageusers.go +++ b/storage/pkg/command/storageusers.go @@ -49,6 +49,7 @@ func StorageUsers(cfg *config.Config) *cli.Command { cfg.Reva.Storages.EOS.EnableHome = true cfg.Reva.Storages.Local.EnableHome = true cfg.Reva.Storages.OwnCloud.EnableHome = true + cfg.Reva.Storages.OwnCloudSql.EnableHome = true cfg.Reva.Storages.S3.EnableHome = true cfg.Reva.Storages.S3NG.EnableHome = true } diff --git a/storage/pkg/config/config.go b/storage/pkg/config/config.go index 0ca9b1c9d6..2878e815da 100644 --- a/storage/pkg/config/config.go +++ b/storage/pkg/config/config.go @@ -163,6 +163,7 @@ type StorageConfig struct { EOS DriverEOS Local DriverCommon OwnCloud DriverOwnCloud + OwnCloudSql DriverOwnCloudSql S3 DriverS3 S3NG DriverS3NG Common DriverCommon @@ -258,6 +259,20 @@ type DriverOwnCloud struct { Scan bool } +// DriverOwnCloudSql defines the available ownCloudSql storage driver configuration. +type DriverOwnCloudSql struct { + DriverCommon + + UploadInfoDir string + Redis string + Scan bool + DBUsername string + DBPassword string + DBHost string + DBPort int + DBName string +} + // DriverS3 defines the available S3 storage driver configuration. type DriverS3 struct { DriverCommon diff --git a/storage/pkg/flagset/driverowncloudsql.go b/storage/pkg/flagset/driverowncloudsql.go new file mode 100644 index 0000000000..9cf2337933 --- /dev/null +++ b/storage/pkg/flagset/driverowncloudsql.go @@ -0,0 +1,97 @@ +package flagset + +import ( + "github.com/micro/cli/v2" + "github.com/owncloud/ocis/ocis-pkg/flags" + "github.com/owncloud/ocis/storage/pkg/config" +) + +// DriverOwnCloudSqlWithConfig applies cfg to the root flagset +func DriverOwnCloudSqlWithConfig(cfg *config.Config) []cli.Flag { + return []cli.Flag{ + &cli.StringFlag{ + Name: "storage-owncloudsql-datadir", + Value: flags.OverrideDefaultString(cfg.Reva.Storages.OwnCloudSql.Root, "/var/tmp/ocis/storage/owncloud"), + Usage: "the path to the owncloudsql data directory", + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_DATADIR"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.Root, + }, + &cli.StringFlag{ + Name: "storage-owncloudsql-uploadinfo-dir", + Value: flags.OverrideDefaultString(cfg.Reva.Storages.OwnCloudSql.UploadInfoDir, "/var/tmp/ocis/storage/uploadinfo"), + Usage: "the path to the tus upload info directory", + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_UPLOADINFO_DIR"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.UploadInfoDir, + }, + &cli.StringFlag{ + Name: "storage-owncloudsql-share-folder", + Value: flags.OverrideDefaultString(cfg.Reva.Storages.OwnCloudSql.ShareFolder, "/Shares"), + Usage: "name of the shares folder", + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_SHARE_FOLDER"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.ShareFolder, + }, + &cli.BoolFlag{ + Name: "storage-owncloudsql-scan", + Value: flags.OverrideDefaultBool(cfg.Reva.Storages.OwnCloudSql.Scan, true), + Usage: "scan files on startup to add fileids", + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_SCAN"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.Scan, + }, + &cli.StringFlag{ + Name: "storage-owncloudsql-redis", + Value: flags.OverrideDefaultString(cfg.Reva.Storages.OwnCloudSql.Redis, ":6379"), + Usage: "the address of the redis server", + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_REDIS_ADDR"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.Redis, + }, + &cli.BoolFlag{ + Name: "storage-owncloudsql-enable-home", + Value: flags.OverrideDefaultBool(cfg.Reva.Storages.OwnCloudSql.EnableHome, false), + Usage: "enable the creation of home storages", + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_ENABLE_HOME"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.EnableHome, + }, + &cli.StringFlag{ + Name: "storage-owncloudsql-layout", + Value: flags.OverrideDefaultString(cfg.Reva.Storages.OwnCloudSql.UserLayout, "{{.Username}}"), + Usage: `"layout of the users home dir path on disk, in addition to {{.Username}}, {{.Mail}}, {{.Id.OpaqueId}}, {{.Id.Idp}} also supports prefixing dirs: "{{substr 0 1 .Username}}/{{.Username}}" will turn "Einstein" into "Ei/Einstein" `, + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_LAYOUT"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.UserLayout, + }, + &cli.StringFlag{ + Name: "storage-owncloudsql-dbusername", + Value: flags.OverrideDefaultString(cfg.Reva.Storages.OwnCloudSql.DBUsername, "owncloud"), + Usage: `"username for accessing the database" `, + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_DBUSERNAME"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.DBUsername, + }, + &cli.StringFlag{ + Name: "storage-owncloudsql-dbpassword", + Value: flags.OverrideDefaultString(cfg.Reva.Storages.OwnCloudSql.DBPassword, "owncloud"), + Usage: `"password for accessing the database" `, + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_DBPASSWORD"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.DBPassword, + }, + &cli.StringFlag{ + Name: "storage-owncloudsql-dbhost", + Value: cfg.Reva.Storages.OwnCloudSql.DBHost, + Usage: `"the database hostname or IP address" `, + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_DBHOST"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.DBHost, + }, + &cli.IntFlag{ + Name: "storage-owncloudsql-dbport", + Value: flags.OverrideDefaultInt(cfg.Reva.Storages.OwnCloudSql.DBPort, 3306), + Usage: `"port the database listens on" `, + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_DBPORT"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.DBPort, + }, + &cli.StringFlag{ + Name: "storage-owncloudsql-dbname", + Value: flags.OverrideDefaultString(cfg.Reva.Storages.OwnCloudSql.DBName, "owncloud"), + Usage: `"the database name" `, + EnvVars: []string{"STORAGE_DRIVER_OWNCLOUDSQL_DBNAME"}, + Destination: &cfg.Reva.Storages.OwnCloudSql.DBName, + }, + } +} diff --git a/storage/pkg/flagset/storagehome.go b/storage/pkg/flagset/storagehome.go index 1536795865..905cd78ba6 100644 --- a/storage/pkg/flagset/storagehome.go +++ b/storage/pkg/flagset/storagehome.go @@ -155,6 +155,7 @@ func StorageHomeWithConfig(cfg *config.Config) []cli.Flag { flags = append(flags, DriverEOSWithConfig(cfg)...) flags = append(flags, DriverLocalWithConfig(cfg)...) flags = append(flags, DriverOwnCloudWithConfig(cfg)...) + flags = append(flags, DriverOwnCloudSqlWithConfig(cfg)...) flags = append(flags, DriverOCISWithConfig(cfg)...) flags = append(flags, DriverS3NGWithConfig(cfg)...) diff --git a/storage/pkg/flagset/storageusers.go b/storage/pkg/flagset/storageusers.go index eaf18cd184..6f6860c55e 100644 --- a/storage/pkg/flagset/storageusers.go +++ b/storage/pkg/flagset/storageusers.go @@ -145,6 +145,7 @@ func StorageUsersWithConfig(cfg *config.Config) []cli.Flag { flags = append(flags, DriverEOSWithConfig(cfg)...) flags = append(flags, DriverLocalWithConfig(cfg)...) flags = append(flags, DriverOwnCloudWithConfig(cfg)...) + flags = append(flags, DriverOwnCloudSqlWithConfig(cfg)...) flags = append(flags, DriverOCISWithConfig(cfg)...) flags = append(flags, DriverS3NGWithConfig(cfg)...) diff --git a/storage/templates/CONFIGURATION.tmpl b/storage/templates/CONFIGURATION.tmpl index dc807606e5..59b2244fe9 100644 --- a/storage/templates/CONFIGURATION.tmpl +++ b/storage/templates/CONFIGURATION.tmpl @@ -110,6 +110,10 @@ Example: Set the home and users Storage Provider to `ocis` {{ template "option" (list .Options "DriverOwnCloudWithConfig") -}} +### ownCloudSql Driver + +{{ template "option" (list .Options "DriverOwnCloudSqlWithConfig") -}} + ### Ocis Driver {{ template "option" (list .Options "DriverOCISWithConfig") -}}