mirror of
https://github.com/rclone/rclone.git
synced 2025-04-16 16:18:52 +08:00
s3: add OVHcloud Object Storage provider
Co-Authored-By: Antonin Goude <antonin.goude@ovhcloud.com>
This commit is contained in:
parent
0b9671313b
commit
fa490208c2
@ -87,13 +87,14 @@ Rclone *("rsync for cloud storage")* is a command-line program to sync files and
|
||||
* Microsoft OneDrive [:page_facing_up:](https://rclone.org/onedrive/)
|
||||
* Minio [:page_facing_up:](https://rclone.org/s3/#minio)
|
||||
* Nextcloud [:page_facing_up:](https://rclone.org/webdav/#nextcloud)
|
||||
* OVH [:page_facing_up:](https://rclone.org/swift/)
|
||||
* Blomp Cloud Storage [:page_facing_up:](https://rclone.org/swift/)
|
||||
* OpenDrive [:page_facing_up:](https://rclone.org/opendrive/)
|
||||
* OpenStack Swift [:page_facing_up:](https://rclone.org/swift/)
|
||||
* Oracle Cloud Storage [:page_facing_up:](https://rclone.org/swift/)
|
||||
* Oracle Object Storage [:page_facing_up:](https://rclone.org/oracleobjectstorage/)
|
||||
* Outscale [:page_facing_up:](https://rclone.org/s3/#outscale)
|
||||
* OVHcloud Object Storage (Swift) [:page_facing_up:](https://rclone.org/swift/)
|
||||
* OVHcloud Object Storage (S3-compatible) [:page_facing_up:](https://rclone.org/s3/#ovhcloud)
|
||||
* ownCloud [:page_facing_up:](https://rclone.org/webdav/#owncloud)
|
||||
* pCloud [:page_facing_up:](https://rclone.org/pcloud/)
|
||||
* Petabox [:page_facing_up:](https://rclone.org/s3/#petabox)
|
||||
|
129
backend/s3/s3.go
129
backend/s3/s3.go
@ -140,6 +140,9 @@ var providerOption = fs.Option{
|
||||
}, {
|
||||
Value: "Outscale",
|
||||
Help: "OUTSCALE Object Storage (OOS)",
|
||||
}, {
|
||||
Value: "OVHcloud",
|
||||
Help: "OVHcloud Object Storage",
|
||||
}, {
|
||||
Value: "Petabox",
|
||||
Help: "Petabox Object Storage",
|
||||
@ -515,6 +518,59 @@ func init() {
|
||||
Value: "ap-northeast-1",
|
||||
Help: "Tokyo, Japan",
|
||||
}},
|
||||
}, {
|
||||
// References:
|
||||
// https://help.ovhcloud.com/csm/en-public-cloud-storage-s3-location?id=kb_article_view&sysparm_article=KB0047384
|
||||
// https://support.us.ovhcloud.com/hc/en-us/articles/10667991081107-Endpoints-and-Object-Storage-Geoavailability
|
||||
Name: "region",
|
||||
Help: "Region where your bucket will be created and your data stored.\n",
|
||||
Provider: "OVHcloud",
|
||||
Examples: []fs.OptionExample{{
|
||||
Value: "gra",
|
||||
Help: "Gravelines, France",
|
||||
}, {
|
||||
Value: "rbx",
|
||||
Help: "Roubaix, France",
|
||||
}, {
|
||||
Value: "sbg",
|
||||
Help: "Strasbourg, France",
|
||||
}, {
|
||||
Value: "eu-west-par",
|
||||
Help: "Paris, France (3AZ)",
|
||||
}, {
|
||||
Value: "de",
|
||||
Help: "Frankfurt, Germany",
|
||||
}, {
|
||||
Value: "uk",
|
||||
Help: "London, United Kingdom",
|
||||
}, {
|
||||
Value: "waw",
|
||||
Help: "Warsaw, Poland",
|
||||
}, {
|
||||
Value: "bhs",
|
||||
Help: "Beauharnois, Canada",
|
||||
}, {
|
||||
Value: "ca-east-tor",
|
||||
Help: "Toronto, Canada",
|
||||
}, {
|
||||
Value: "sgp",
|
||||
Help: "Singapore",
|
||||
}, {
|
||||
Value: "ap-southeast-syd",
|
||||
Help: "Sydney, Australia",
|
||||
}, {
|
||||
Value: "ap-south-mum",
|
||||
Help: "Mumbai, India",
|
||||
}, {
|
||||
Value: "us-east-va",
|
||||
Help: "Vint Hill, Virginia, USA",
|
||||
}, {
|
||||
Value: "us-west-or",
|
||||
Help: "Hillsboro, Oregon, USA",
|
||||
}, {
|
||||
Value: "rbx-archive",
|
||||
Help: "Roubaix, France (Cold Archive)",
|
||||
}},
|
||||
}, {
|
||||
Name: "region",
|
||||
Help: "Region where your bucket will be created and your data stored.\n",
|
||||
@ -567,7 +623,7 @@ func init() {
|
||||
}, {
|
||||
Name: "region",
|
||||
Help: "Region to connect to.\n\nLeave blank if you are using an S3 clone and you don't have a region.",
|
||||
Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,IONOS,Petabox,Liara,Linode,Magalu,Qiniu,RackCorp,Scaleway,Selectel,Storj,Synology,TencentCOS,HuaweiOBS,IDrive",
|
||||
Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,IONOS,Petabox,Liara,Linode,Magalu,OVHcloud,Qiniu,RackCorp,Scaleway,Selectel,Storj,Synology,TencentCOS,HuaweiOBS,IDrive",
|
||||
Examples: []fs.OptionExample{{
|
||||
Value: "",
|
||||
Help: "Use this if unsure.\nWill use v4 signatures and an empty region.",
|
||||
@ -1148,6 +1204,71 @@ func init() {
|
||||
Value: "obs.ru-northwest-2.myhuaweicloud.com",
|
||||
Help: "RU-Moscow2",
|
||||
}},
|
||||
}, {
|
||||
Name: "endpoint",
|
||||
Help: "Endpoint for OVHcloud Object Storage.",
|
||||
Provider: "OVHcloud",
|
||||
Examples: []fs.OptionExample{{
|
||||
Value: "s3.gra.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Gravelines, France",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.rbx.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Roubaix, France",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.sbg.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Strasbourg, France",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.eu-west-par.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Paris, France (3AZ)",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.de.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Frankfurt, Germany",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.uk.io.cloud.ovh.net",
|
||||
Help: "OVHcloud London, United Kingdom",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.waw.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Warsaw, Poland",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.bhs.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Beauharnois, Canada",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.ca-east-tor.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Toronto, Canada",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.sgp.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Singapore",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.ap-southeast-syd.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Sydney, Australia",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.ap-south-mum.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Mumbai, India",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.us-east-va.io.cloud.ovh.us",
|
||||
Help: "OVHcloud Vint Hill, Virginia, USA",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.us-west-or.io.cloud.ovh.us",
|
||||
Help: "OVHcloud Hillsboro, Oregon, USA",
|
||||
Provider: "OVHcloud",
|
||||
}, {
|
||||
Value: "s3.rbx-archive.io.cloud.ovh.net",
|
||||
Help: "OVHcloud Roubaix, France (Cold Archive)",
|
||||
Provider: "OVHcloud",
|
||||
}},
|
||||
}, {
|
||||
Name: "endpoint",
|
||||
Help: "Endpoint for Scaleway Object Storage.",
|
||||
@ -1377,7 +1498,7 @@ func init() {
|
||||
}, {
|
||||
Name: "endpoint",
|
||||
Help: "Endpoint for S3 API.\n\nRequired when using an S3 clone.",
|
||||
Provider: "!AWS,ArvanCloud,IBMCOS,IDrive,IONOS,TencentCOS,HuaweiOBS,Alibaba,ChinaMobile,GCS,Liara,Linode,Magalu,Scaleway,Selectel,StackPath,Storj,Synology,RackCorp,Qiniu,Petabox",
|
||||
Provider: "!AWS,ArvanCloud,IBMCOS,IDrive,IONOS,TencentCOS,HuaweiOBS,Alibaba,ChinaMobile,GCS,Liara,Linode,Magalu,OVHcloud,Scaleway,Selectel,StackPath,Storj,Synology,RackCorp,Qiniu,Petabox",
|
||||
Examples: []fs.OptionExample{{
|
||||
Value: "objects-us-east-1.dream.io",
|
||||
Help: "Dream Objects endpoint",
|
||||
@ -1908,7 +2029,7 @@ func init() {
|
||||
}, {
|
||||
Name: "location_constraint",
|
||||
Help: "Location constraint - must be set to match the Region.\n\nLeave blank if not sure. Used when creating buckets only.",
|
||||
Provider: "!AWS,Alibaba,ArvanCloud,HuaweiOBS,ChinaMobile,Cloudflare,IBMCOS,IDrive,IONOS,Leviia,Liara,Linode,Magalu,Outscale,Qiniu,RackCorp,Scaleway,Selectel,StackPath,Storj,TencentCOS,Petabox",
|
||||
Provider: "!AWS,Alibaba,ArvanCloud,HuaweiOBS,ChinaMobile,Cloudflare,IBMCOS,IDrive,IONOS,Leviia,Liara,Linode,Magalu,Outscale,OVHcloud,Qiniu,RackCorp,Scaleway,Selectel,StackPath,Storj,TencentCOS,Petabox",
|
||||
}, {
|
||||
Name: "acl",
|
||||
Help: `Canned ACL used when creating buckets and storing or copying objects.
|
||||
@ -3536,6 +3657,8 @@ func setQuirks(opt *Options) {
|
||||
useAlreadyExists = false // untested
|
||||
case "Outscale":
|
||||
virtualHostStyle = false
|
||||
case "OVHcloud":
|
||||
// No quirks
|
||||
case "RackCorp":
|
||||
// No quirks
|
||||
useMultipartEtag = false // untested
|
||||
|
@ -155,13 +155,14 @@ WebDAV or S3, that work out of the box.)
|
||||
{{< provider name="Microsoft OneDrive" home="https://onedrive.live.com/" config="/onedrive/" >}}
|
||||
{{< provider name="Minio" home="https://www.minio.io/" config="/s3/#minio" >}}
|
||||
{{< provider name="Nextcloud" home="https://nextcloud.com/" config="/webdav/#nextcloud" >}}
|
||||
{{< provider name="OVH" home="https://www.ovh.co.uk/public-cloud/storage/object-storage/" config="/swift/" >}}
|
||||
{{< provider name="Blomp Cloud Storage" home="https://rclone.org/swift/" config="/swift/" >}}
|
||||
{{< provider name="OpenDrive" home="https://www.opendrive.com/" config="/opendrive/" >}}
|
||||
{{< provider name="OpenStack Swift" home="https://docs.openstack.org/swift/latest/" config="/swift/" >}}
|
||||
{{< provider name="Oracle Cloud Storage Swift" home="https://docs.oracle.com/en-us/iaas/integration/doc/configure-object-storage.html" config="/swift/" >}}
|
||||
{{< provider name="Oracle Object Storage" home="https://www.oracle.com/cloud/storage/object-storage" config="/oracleobjectstorage/" >}}
|
||||
{{< provider name="Outscale" home="https://en.outscale.com/storage/outscale-object-storage/" config="/s3/#outscale" >}}
|
||||
{{< provider name="OVHcloud Object Storage (Swift)" home="https://www.ovhcloud.com/en/public-cloud/object-storage/" config="/swift/" >}}
|
||||
{{< provider name="OVHcloud Object Storage (S3-compatible)" home="https://www.ovhcloud.com/en/public-cloud/object-storage/" config="/s3/#ovhcloud" >}}
|
||||
{{< provider name="ownCloud" home="https://owncloud.org/" config="/webdav/#owncloud" >}}
|
||||
{{< provider name="pCloud" home="https://www.pcloud.com/" config="/pcloud/" >}}
|
||||
{{< provider name="Petabox" home="https://petabox.io/" config="/s3/#petabox" >}}
|
||||
|
@ -28,6 +28,7 @@ The S3 backend can be used with a number of different providers:
|
||||
{{< provider name="Magalu Object Storage" home="https://magalu.cloud/object-storage/" config="/s3/#magalu" >}}
|
||||
{{< provider name="Minio" home="https://www.minio.io/" config="/s3/#minio" >}}
|
||||
{{< provider name="Outscale" home="https://en.outscale.com/storage/outscale-object-storage/" config="/s3/#outscale" >}}
|
||||
{{< provider name="OVHcloud" home="https://www.ovhcloud.com/en/public-cloud/object-storage/" config="/s3/#ovhcloud" >}}
|
||||
{{< provider name="Petabox" home="https://petabox.io/" config="/s3/#petabox" >}}
|
||||
{{< provider name="Qiniu Cloud Object Storage (Kodo)" home="https://www.qiniu.com/en/products/kodo" config="/s3/#qiniu" >}}
|
||||
{{< provider name="RackCorp Object Storage" home="https://www.rackcorp.com/" config="/s3/#RackCorp" >}}
|
||||
@ -3537,6 +3538,206 @@ d) Delete this remote
|
||||
y/e/d> y
|
||||
```
|
||||
|
||||
### OVHcloud {#ovhcloud}
|
||||
|
||||
[OVHcloud Object Storage](https://www.ovhcloud.com/en-ie/public-cloud/object-storage/)
|
||||
is an S3-compatible general-purpose object storage platform available in all OVHcloud regions.
|
||||
To use the platform, you will need an access key and secret key. To know more about it and how
|
||||
to interact with the platform, take a look at the [documentation](https://ovh.to/8stqhuo).
|
||||
|
||||
Here is an example of making an OVHcloud Object Storage configuration with `rclone config`:
|
||||
|
||||
```
|
||||
No remotes found, make a new one?
|
||||
n) New remote
|
||||
s) Set configuration password
|
||||
q) Quit config
|
||||
n/s/q> n
|
||||
|
||||
Enter name for new remote.
|
||||
name> ovhcloud-rbx
|
||||
|
||||
Option Storage.
|
||||
Type of storage to configure.
|
||||
Choose a number from below, or type in your own value.
|
||||
[...]
|
||||
XX / Amazon S3 Compliant Storage Providers including AWS, Alibaba, ArvanCloud, Ceph, ChinaMobile, Cloudflare, DigitalOcean, Dreamhost, GCS, HuaweiOBS, IBMCOS, IDrive, IONOS, LyveCloud, Leviia, Liara, Linode, Magalu, Minio, Netease, Outscale, OVHcloud, Petabox, RackCorp, Rclone, Scaleway, SeaweedFS, Selectel, StackPath, Storj, Synology, TencentCOS, Wasabi, Qiniu and others
|
||||
\ (s3)
|
||||
[...]
|
||||
Storage> s3
|
||||
|
||||
Option provider.
|
||||
Choose your S3 provider.
|
||||
Choose a number from below, or type in your own value.
|
||||
Press Enter to leave empty.
|
||||
[...]
|
||||
XX / OVHcloud Object Storage
|
||||
\ (OVHcloud)
|
||||
[...]
|
||||
provider> OVHcloud
|
||||
|
||||
Option env_auth.
|
||||
Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars).
|
||||
Only applies if access_key_id and secret_access_key is blank.
|
||||
Choose a number from below, or type in your own boolean value (true or false).
|
||||
Press Enter for the default (false).
|
||||
1 / Enter AWS credentials in the next step.
|
||||
\ (false)
|
||||
2 / Get AWS credentials from the environment (env vars or IAM).
|
||||
\ (true)
|
||||
env_auth> 1
|
||||
|
||||
Option access_key_id.
|
||||
AWS Access Key ID.
|
||||
Leave blank for anonymous access or runtime credentials.
|
||||
Enter a value. Press Enter to leave empty.
|
||||
access_key_id> my_access
|
||||
|
||||
Option secret_access_key.
|
||||
AWS Secret Access Key (password).
|
||||
Leave blank for anonymous access or runtime credentials.
|
||||
Enter a value. Press Enter to leave empty.
|
||||
secret_access_key> my_secret
|
||||
|
||||
Option region.
|
||||
Region where your bucket will be created and your data stored.
|
||||
Choose a number from below, or type in your own value.
|
||||
Press Enter to leave empty.
|
||||
1 / Gravelines, France
|
||||
\ (gra)
|
||||
2 / Roubaix, France
|
||||
\ (rbx)
|
||||
3 / Strasbourg, France
|
||||
\ (sbg)
|
||||
4 / Paris, France (3AZ)
|
||||
\ (eu-west-par)
|
||||
5 / Frankfurt, Germany
|
||||
\ (de)
|
||||
6 / London, United Kingdom
|
||||
\ (uk)
|
||||
7 / Warsaw, Poland
|
||||
\ (waw)
|
||||
8 / Beauharnois, Canada
|
||||
\ (bhs)
|
||||
9 / Toronto, Canada
|
||||
\ (ca-east-tor)
|
||||
10 / Singapore
|
||||
\ (sgp)
|
||||
11 / Sydney, Australia
|
||||
\ (ap-southeast-syd)
|
||||
12 / Mumbai, India
|
||||
\ (ap-south-mum)
|
||||
13 / Vint Hill, Virginia, USA
|
||||
\ (us-east-va)
|
||||
14 / Hillsboro, Oregon, USA
|
||||
\ (us-west-or)
|
||||
15 / Roubaix, France (Cold Archive)
|
||||
\ (rbx-archive)
|
||||
region> 2
|
||||
|
||||
Option endpoint.
|
||||
Endpoint for OVHcloud Object Storage.
|
||||
Choose a number from below, or type in your own value.
|
||||
Press Enter to leave empty.
|
||||
1 / OVHcloud Gravelines, France
|
||||
\ (s3.gra.io.cloud.ovh.net)
|
||||
2 / OVHcloud Roubaix, France
|
||||
\ (s3.rbx.io.cloud.ovh.net)
|
||||
3 / OVHcloud Strasbourg, France
|
||||
\ (s3.sbg.io.cloud.ovh.net)
|
||||
4 / OVHcloud Paris, France (3AZ)
|
||||
\ (s3.eu-west-par.io.cloud.ovh.net)
|
||||
5 / OVHcloud Frankfurt, Germany
|
||||
\ (s3.de.io.cloud.ovh.net)
|
||||
6 / OVHcloud London, United Kingdom
|
||||
\ (s3.uk.io.cloud.ovh.net)
|
||||
7 / OVHcloud Warsaw, Poland
|
||||
\ (s3.waw.io.cloud.ovh.net)
|
||||
8 / OVHcloud Beauharnois, Canada
|
||||
\ (s3.bhs.io.cloud.ovh.net)
|
||||
9 / OVHcloud Toronto, Canada
|
||||
\ (s3.ca-east-tor.io.cloud.ovh.net)
|
||||
10 / OVHcloud Singapore
|
||||
\ (s3.sgp.io.cloud.ovh.net)
|
||||
11 / OVHcloud Sydney, Australia
|
||||
\ (s3.ap-southeast-syd.io.cloud.ovh.net)
|
||||
12 / OVHcloud Mumbai, India
|
||||
\ (s3.ap-south-mum.io.cloud.ovh.net)
|
||||
13 / OVHcloud Vint Hill, Virginia, USA
|
||||
\ (s3.us-east-va.io.cloud.ovh.us)
|
||||
14 / OVHcloud Hillsboro, Oregon, USA
|
||||
\ (s3.us-west-or.io.cloud.ovh.us)
|
||||
15 / OVHcloud Roubaix, France (Cold Archive)
|
||||
\ (s3.rbx-archive.io.cloud.ovh.net)
|
||||
endpoint> 2
|
||||
|
||||
Option acl.
|
||||
Canned ACL used when creating buckets and storing or copying objects.
|
||||
This ACL is used for creating objects and if bucket_acl isn't set, for creating buckets too.
|
||||
For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
|
||||
Note that this ACL is applied when server-side copying objects as S3
|
||||
doesn't copy the ACL from the source but rather writes a fresh one.
|
||||
If the acl is an empty string then no X-Amz-Acl: header is added and
|
||||
the default (private) will be used.
|
||||
Choose a number from below, or type in your own value.
|
||||
Press Enter to leave empty.
|
||||
/ Owner gets FULL_CONTROL.
|
||||
1 | No one else has access rights (default).
|
||||
\ (private)
|
||||
/ Owner gets FULL_CONTROL.
|
||||
2 | The AllUsers group gets READ access.
|
||||
\ (public-read)
|
||||
/ Owner gets FULL_CONTROL.
|
||||
3 | The AllUsers group gets READ and WRITE access.
|
||||
| Granting this on a bucket is generally not recommended.
|
||||
\ (public-read-write)
|
||||
/ Owner gets FULL_CONTROL.
|
||||
4 | The AuthenticatedUsers group gets READ access.
|
||||
\ (authenticated-read)
|
||||
/ Object owner gets FULL_CONTROL.
|
||||
5 | Bucket owner gets READ access.
|
||||
| If you specify this canned ACL when creating a bucket, Amazon S3 ignores it.
|
||||
\ (bucket-owner-read)
|
||||
/ Both the object owner and the bucket owner get FULL_CONTROL over the object.
|
||||
6 | If you specify this canned ACL when creating a bucket, Amazon S3 ignores it.
|
||||
\ (bucket-owner-full-control)
|
||||
acl> 1
|
||||
|
||||
Edit advanced config?
|
||||
y) Yes
|
||||
n) No (default)
|
||||
y/n> n
|
||||
|
||||
Configuration complete.
|
||||
Options:
|
||||
- type: s3
|
||||
- provider: OVHcloud
|
||||
- access_key_id: my_access
|
||||
- secret_access_key: my_secret
|
||||
- region: rbx
|
||||
- endpoint: s3.rbx.io.cloud.ovh.net
|
||||
- acl: private
|
||||
Keep this "ovhcloud-rbx" remote?
|
||||
y) Yes this is OK (default)
|
||||
e) Edit this remote
|
||||
d) Delete this remote
|
||||
y/e/d> y
|
||||
```
|
||||
|
||||
Your configuration file should now look like this:
|
||||
|
||||
```
|
||||
[ovhcloud-rbx]
|
||||
type = s3
|
||||
provider = OVHcloud
|
||||
access_key_id = my_access
|
||||
secret_access_key = my_secret
|
||||
region = rbx
|
||||
endpoint = s3.rbx.io.cloud.ovh.net
|
||||
acl = private
|
||||
```
|
||||
|
||||
|
||||
### Qiniu Cloud Object Storage (Kodo) {#qiniu}
|
||||
|
||||
[Qiniu Cloud Object Storage (Kodo)](https://www.qiniu.com/en/products/kodo), a completely independent-researched core technology which is proven by repeated customer experience has occupied absolute leading market leader position. Kodo can be widely applied to mass data management.
|
||||
|
@ -11,7 +11,7 @@ Commercial implementations of that being:
|
||||
|
||||
* [Rackspace Cloud Files](https://www.rackspace.com/cloud/files/)
|
||||
* [Memset Memstore](https://www.memset.com/cloud/storage/)
|
||||
* [OVH Object Storage](https://www.ovh.co.uk/public-cloud/storage/object-storage/)
|
||||
* [OVH Object Storage](https://www.ovhcloud.com/en/public-cloud/object-storage/)
|
||||
* [Oracle Cloud Storage](https://docs.oracle.com/en-us/iaas/integration/doc/configure-object-storage.html)
|
||||
* [Blomp Cloud Storage](https://www.blomp.com/cloud-storage/)
|
||||
* [IBM Bluemix Cloud ObjectStorage Swift](https://console.bluemix.net/docs/infrastructure/objectstorage-swift/index.html)
|
||||
|
Loading…
x
Reference in New Issue
Block a user