diff --git a/pom.xml b/pom.xml
index 8b261bf..d18c260 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,7 +42,7 @@
UTF-8
UTF-8
- 2.6
+ 2.7-SNAPSHOT
3.0.0
3.8
@@ -51,6 +51,17 @@
false
+
+
+
+ io.quarkus.platform
+ quarkus-amazon-services-bom
+ 3.6.4
+ pom
+ import
+
+
+
io.quarkus
@@ -145,6 +156,14 @@
indy-security
${indysecurity.verison}
+
+ io.quarkiverse.amazonservices
+ quarkus-amazon-s3
+
+
+ software.amazon.awssdk
+ url-connection-client
+
diff --git a/src/main/java/org/commonjava/service/storage/config/StorageServiceConfig.java b/src/main/java/org/commonjava/service/storage/config/StorageServiceConfig.java
index 7ff3304..6c57624 100644
--- a/src/main/java/org/commonjava/service/storage/config/StorageServiceConfig.java
+++ b/src/main/java/org/commonjava/service/storage/config/StorageServiceConfig.java
@@ -17,9 +17,10 @@
import io.quarkus.runtime.Startup;
import io.smallrye.config.ConfigMapping;
+import io.smallrye.config.WithDefault;
import io.smallrye.config.WithName;
-
import jakarta.enterprise.context.ApplicationScoped;
+
import java.io.File;
@Startup
@@ -27,6 +28,10 @@
@ApplicationScoped
public interface StorageServiceConfig
{
+ String STORAGE_S3 = "s3";
+
+ String STORAGE_NFS = "nfs";
+
@WithName( "baseDir" )
File baseDir();
@@ -35,4 +40,12 @@ public interface StorageServiceConfig
@WithName( "removableFilesystemPattern" )
String removableFilesystemPattern();
+
+ @WithName( "type" )
+ @WithDefault( STORAGE_NFS )
+ String type();
+
+ @WithName( "bucket.name" )
+ @WithDefault( "" )
+ String bucketName();
}
diff --git a/src/main/java/org/commonjava/service/storage/core/FileManagerProducer.java b/src/main/java/org/commonjava/service/storage/core/FileManagerProducer.java
index 3bc0fc0..63deec0 100644
--- a/src/main/java/org/commonjava/service/storage/core/FileManagerProducer.java
+++ b/src/main/java/org/commonjava/service/storage/core/FileManagerProducer.java
@@ -21,9 +21,11 @@
import org.commonjava.storage.pathmapped.config.PathMappedStorageConfig;
import org.commonjava.storage.pathmapped.core.FileBasedPhysicalStore;
import org.commonjava.storage.pathmapped.core.PathMappedFileManager;
+import org.commonjava.storage.pathmapped.core.S3PhysicalStore;
import org.commonjava.storage.pathmapped.pathdb.datastax.CassandraPathDB;
import org.commonjava.storage.pathmapped.spi.PathDB;
import org.commonjava.storage.pathmapped.spi.PhysicalStore;
+import software.amazon.awssdk.services.s3.S3Client;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
@@ -42,6 +44,9 @@ public class FileManagerProducer
@Inject
StorageServiceConfig storageConfig;
+ @Inject
+ S3Client s3Client;
+
@Produces
public PathMappedFileManager getFileManager()
{
@@ -55,10 +60,19 @@ public PathMappedFileManager getFileManager()
PathMappedStorageConfig config = new DefaultPathMappedStorageConfig( props );
PathDB pathDB = new CassandraPathDB( config );
- PhysicalStore physicalStore = new FileBasedPhysicalStore( storageConfig.baseDir() );
+ PhysicalStore physicalStore;
+ String storageType = storageConfig.type();
+
+ if ( StorageServiceConfig.STORAGE_S3.equals( storageType ) )
+ {
+ physicalStore = new FileBasedPhysicalStore( storageConfig.baseDir() );
+ }
+ else
+ {
+ physicalStore = new S3PhysicalStore( s3Client, storageConfig.bucketName() );
+ }
- PathMappedFileManager fileManager = new PathMappedFileManager( config, pathDB, physicalStore );
- return fileManager;
+ return new PathMappedFileManager( config, pathDB, physicalStore );
}
}
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index a739dc8..641ee06 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -53,6 +53,9 @@ quarkus:
max-backup-index: 5
max-file-size: 10M
+ devservices:
+ enabled: false
+
swagger-ui:
always-include: true
@@ -67,6 +70,9 @@ storage:
baseDir: "/tmp"
readonly: false
removableFilesystemPattern: ".+:(remote|group):.+"
+ type: s3
+ bucket:
+ name: test
"%dev":
quarkus: