diff --git a/api/src/main/java/org/apache/cloudstack/storage/object/BucketApiService.java b/api/src/main/java/org/apache/cloudstack/storage/object/BucketApiService.java index e27ef308d7f2..3dceab33403b 100644 --- a/api/src/main/java/org/apache/cloudstack/storage/object/BucketApiService.java +++ b/api/src/main/java/org/apache/cloudstack/storage/object/BucketApiService.java @@ -75,6 +75,14 @@ public interface BucketApiService { ConfigKey.Scope.Global, null); + ConfigKey ObjectStorePresignedUrlExpirySeconds = new ConfigKey("Advanced", Long.class, + "objectstore.presigned.url.expiry.seconds", + "86400", + "The expiry time, in seconds, for object store presigned URLs generated by the UI.", + true, + ConfigKey.Scope.Global, + null); + /** * Creates the database object for a Bucket based on the given criteria * diff --git a/plugins/storage/object/ceph/src/main/java/org/apache/cloudstack/storage/datastore/driver/CephObjectStoreDriverImpl.java b/plugins/storage/object/ceph/src/main/java/org/apache/cloudstack/storage/datastore/driver/CephObjectStoreDriverImpl.java index 87983a4a1c41..32ab4b2d3e36 100644 --- a/plugins/storage/object/ceph/src/main/java/org/apache/cloudstack/storage/datastore/driver/CephObjectStoreDriverImpl.java +++ b/plugins/storage/object/ceph/src/main/java/org/apache/cloudstack/storage/datastore/driver/CephObjectStoreDriverImpl.java @@ -138,7 +138,7 @@ public Bucket createBucket(Bucket bucket, boolean objectLock) { .withAllowedHeaders(Arrays.asList("*")) .withAllowedOrigins(Arrays.asList("*")) .withMaxAgeSeconds(3000) - .withExposedHeaders(Arrays.asList("x-amz-server-side-encryption", "x-amz-request-id", "x-amz-id-2")); + .withExposedHeaders(Arrays.asList("ETag", "x-amz-server-side-encryption", "x-amz-request-id", "x-amz-id-2")); List rules = new ArrayList(); rules.add(rule); diff --git a/server/src/main/java/org/apache/cloudstack/storage/object/BucketApiServiceImpl.java b/server/src/main/java/org/apache/cloudstack/storage/object/BucketApiServiceImpl.java index 563320e61968..ef35e153ec67 100644 --- a/server/src/main/java/org/apache/cloudstack/storage/object/BucketApiServiceImpl.java +++ b/server/src/main/java/org/apache/cloudstack/storage/object/BucketApiServiceImpl.java @@ -108,7 +108,8 @@ public ConfigKey[] getConfigKeys() { DefaultMaxProjectBuckets, DefaultMaxProjectObjectStorage, DefaultMaxDomainBuckets, - DefaultMaxDomainObjectStorage + DefaultMaxDomainObjectStorage, + ObjectStorePresignedUrlExpirySeconds }; } diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 1530e6129308..fefb8933571a 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -2386,6 +2386,7 @@ "label.token.for.dashboard.login": "Token for dashboard login can be retrieved using following command", "label.tools": "Tools", "label.total": "Total", +"label.total.allocated.capacity": "Total allocated capacity", "label.total.network": "Total Networks", "label.total.vms": "Total Instances", "label.total.volume": "Total volumes", @@ -2467,7 +2468,7 @@ "label.upgrade.router.newer.template": "Upgrade router to use newer Template", "label.upgrading": "Upgrading", "label.upload": "Upload", -"label.upload.description": "Path to upload objects at", +"label.upload.description": "Path to upload objects at. If left empty, objects are uploaded to the root path.", "label.upload.path": "Upload path", "label.upload.icon": "Upload icon", "label.upload.iso.from.local": "Upload ISO from local", @@ -2500,6 +2501,7 @@ "label.use.kubectl.access.cluster": "kubectl and kubeconfig file to access cluster", "label.use.local.timezone": "Use local timezone", "label.used": "Used", +"label.used.capacity": "Used capacity", "label.usehttps": "Use HTTPS", "label.usenewdiskoffering": "Replace disk offering?", "label.user": "User", diff --git a/ui/public/locales/ko_KR.json b/ui/public/locales/ko_KR.json index 2fdf024cd66c..9aea9efdd825 100644 --- a/ui/public/locales/ko_KR.json +++ b/ui/public/locales/ko_KR.json @@ -2383,6 +2383,7 @@ "label.token.for.dashboard.login": "\ub300\uc2dc\ubcf4\ub4dc \ub85c\uadf8\uc778\uc744 \uc704\ud55c \ud1a0\ud070\uc740 \ub2e4\uc74c \uba85\ub839\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac80\uc0c9 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "label.tools": "\ub3c4\uad6c", "label.total": "\uc804\uccb4", +"label.total.allocated.capacity": "\ucd1d \ud560\ub2f9 \uc6a9\ub7c9", "label.total.network": "\uc804\uccb4 \ub124\ud2b8\uc6cc\ud06c", "label.total.vms": "\uc804\uccb4 VM", "label.total.volume": "\uc804\uccb4 \ubcfc\ub968", @@ -2464,7 +2465,7 @@ "label.upgrade.router.newer.template": "\ucd5c\uc2e0 \ud15c\ud50c\ub9bf\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ub77c\uc6b0\ud130 \uc5c5\uadf8\ub808\uc774\ub4dc", "label.upgrading": "\uc5c5\uadf8\ub808\uc774\ub4dc\uc911", "label.upload": "\uc5c5\ub85c\ub4dc", -"label.upload.description": "Object\ub97c \uc5c5\ub85c\ub4dc\ud560 \uacbd\ub85c", +"label.upload.description": "Object\ub97c \uc5c5\ub85c\ub4dc\ud560 \uacbd\ub85c(\ubbf8\uc785\ub825\uc2dc \ucd5c\uc0c1\uc704 \uacbd\ub85c\uc5d0 \uc5c5\ub85c\ub4dc \ub429\ub2c8\ub2e4)", "label.upload.path": "\uc5c5\ub85c\ub4dc \uacbd\ub85c", "label.upload.icon": "\uc544\uc774\ucf58 \uc5c5\ub85c\ub4dc", "label.upload.iso.from.local": "\ub85c\uceec\uc5d0\uc11c ISO \uc5c5\ub85c\ub4dc", @@ -2497,6 +2498,7 @@ "label.use.kubectl.access.cluster": "\ud074\ub7ec\uc2a4\ud130\uc5d0 \uc561\uc138\uc2a4\ud558\uae30\uc704\ud55c kubectl \ubc0f kubeconfig \ud30c\uc77c", "label.use.local.timezone": "\ub85c\uceec \uc2dc\uac04\ub300 \uc0ac\uc6a9", "label.used": "\uc0ac\uc6a9\ub428", +"label.used.capacity": "\uc0ac\uc6a9\ub41c \uc6a9\ub7c9", "label.usehttps": "HTTPS \uc0ac\uc6a9", "label.usenewdiskoffering": "\ub514\uc2a4\ud06c \uc624\ud37c\ub9c1\uc744 \ubcc0\uacbd\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", "label.user": "\uc0ac\uc6a9\uc790", @@ -2698,6 +2700,7 @@ "label.bucket.update": "\ubc84\ud0b7 \uc5c5\ub370\uc774\ud2b8", "label.bucket.delete": "\ubc84\ud0b7 \uc0ad\uc81c", "label.quotagb": "\ud560\ub2f9\ub7c9(GB)", +"label.quotagib": "\ud560\ub2f9\ub7c9(GiB)", "label.encryption": "\uc554\ud638\ud654", "label.versioning": "\ubc84\uc804 \uad00\ub9ac", "label.objectlocking": "\uac1d\uccb4 \uc7a0\uae08", diff --git a/ui/src/components/view/DetailsTab.vue b/ui/src/components/view/DetailsTab.vue index 1659bf76eeb4..18f347b43d3e 100644 --- a/ui/src/components/view/DetailsTab.vue +++ b/ui/src/components/view/DetailsTab.vue @@ -103,6 +103,11 @@ {{ convertKB(dataResource.size) }} +
+
+ {{ dataResource.quota }} GiB +
+
{{ parseFloat(dataResource.size / (1024.0 * 1024.0 * 1024.0)).toFixed(2) }} GiB diff --git a/ui/src/components/view/ObjectStoreBrowser.vue b/ui/src/components/view/ObjectStoreBrowser.vue index 531846a9da57..7745f36b7670 100644 --- a/ui/src/components/view/ObjectStoreBrowser.vue +++ b/ui/src/components/view/ObjectStoreBrowser.vue @@ -18,21 +18,26 @@