Skip to content

Commit

Permalink
Fix multiple s3clients in wave (#554)
Browse files Browse the repository at this point in the history
* added ObjectStorageOperationsFactory

Signed-off-by: munishchouhan <[email protected]>

* fixed error

Signed-off-by: munishchouhan <[email protected]>

* added name for AwsS3Configuration

Signed-off-by: munishchouhan <[email protected]>

* updated s3 client name

Signed-off-by: munishchouhan <[email protected]>

* Update src/main/groovy/io/seqera/wave/service/aws/ObjectStorageOperationsFactory.groovy [ci skip]

* Update src/main/groovy/io/seqera/wave/service/aws/ObjectStorageOperationsFactory.groovy

Co-authored-by: Paolo Di Tommaso <[email protected]>

---------

Signed-off-by: munishchouhan <[email protected]>
Co-authored-by: Paolo Di Tommaso <[email protected]>
  • Loading branch information
munishchouhan and pditommaso authored Jul 8, 2024
1 parent 8282a49 commit 4568950
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* Wave, containers provisioning service
* Copyright (c) 2024, Seqera Labs
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

package io.seqera.wave.service.aws

import groovy.transform.CompileStatic
import groovy.util.logging.Slf4j
import io.micronaut.context.annotation.Factory
import io.micronaut.context.annotation.Value
import io.micronaut.objectstorage.InputStreamMapper
import io.micronaut.objectstorage.ObjectStorageOperations
import io.micronaut.objectstorage.aws.AwsS3Configuration
import io.micronaut.objectstorage.aws.AwsS3Operations
import jakarta.inject.Named
import jakarta.inject.Singleton
import software.amazon.awssdk.services.s3.S3Client
/**
* Factory implementation for ObjectStorageOperations
*
* @author Munish Chouhan <[email protected]>
*/
@Factory
@CompileStatic
@Slf4j
class ObjectStorageOperationsFactory {

@Value('${wave.build.logs.bucket}')
String storageBucket

@Singleton
@Named("build-logs")
ObjectStorageOperations<?, ?, ?> awsStorageOperations(@Named("DefaultS3Client") S3Client s3Client, InputStreamMapper inputStreamMapper) {
AwsS3Configuration configuration = new AwsS3Configuration('build-logs')
configuration.setBucket(storageBucket)
return new AwsS3Operations(configuration, s3Client, inputStreamMapper)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,19 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

package io.seqera.wave.service.blob.impl
package io.seqera.wave.service.aws

import groovy.transform.CompileStatic
import groovy.util.logging.Slf4j
import io.micronaut.context.annotation.Factory
import io.micronaut.context.annotation.Requires
import io.micronaut.context.annotation.Value
import io.seqera.wave.configuration.BlobCacheConfig
import jakarta.inject.Inject
import jakarta.inject.Named
import jakarta.inject.Singleton
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider
import software.amazon.awssdk.regions.Region
import software.amazon.awssdk.services.s3.S3Client
Expand All @@ -38,13 +40,16 @@ import software.amazon.awssdk.services.s3.S3Client
@Factory
@CompileStatic
@Slf4j
@Requires(property = 'wave.blobCache.enabled', value = 'true')
class S3ClientFactory {

@Inject
private BlobCacheConfig blobConfig

@Value('${aws.region}')
private String awsRegion;

@Singleton
@Requires(property = 'wave.blobCache.enabled', value = 'true')
@Named('BlobS3Client')
S3Client cloudflareS3Client() {
final creds = AwsBasicCredentials.create(blobConfig.storageAccessKey, blobConfig.storageSecretKey)
Expand All @@ -59,4 +64,13 @@ class S3ClientFactory {
log.info("Creating S3 client with configuration: $builder")
return builder.build()
}

@Singleton
@Named('DefaultS3Client')
S3Client defaultS3Client() {
return S3Client.builder()
.region(Region.of(awsRegion))
.credentialsProvider(DefaultCredentialsProvider.create())
.build()
}
}

0 comments on commit 4568950

Please sign in to comment.