@@ -5,6 +5,7 @@ use crate::encore::parser::meta::v1 as meta;
5
5
use crate :: encore:: runtime:: v1 as pb;
6
6
use crate :: names:: EncoreName ;
7
7
use crate :: objects:: { gcs, noop, s3, BucketImpl , ClusterImpl } ;
8
+ use crate :: secrets;
8
9
use crate :: trace:: Tracer ;
9
10
10
11
use super :: Bucket ;
@@ -17,8 +18,13 @@ pub struct Manager {
17
18
}
18
19
19
20
impl Manager {
20
- pub fn new ( tracer : Tracer , clusters : Vec < pb:: BucketCluster > , md : & meta:: Data ) -> Self {
21
- let bucket_cfg = make_cfg_maps ( clusters, md) ;
21
+ pub fn new (
22
+ secrets : & secrets:: Manager ,
23
+ tracer : Tracer ,
24
+ clusters : Vec < pb:: BucketCluster > ,
25
+ md : & meta:: Data ,
26
+ ) -> Self {
27
+ let bucket_cfg = make_cfg_maps ( secrets, clusters, md) ;
22
28
23
29
Self {
24
30
tracer,
@@ -54,13 +60,20 @@ impl Manager {
54
60
}
55
61
56
62
fn make_cfg_maps (
63
+ secrets : & secrets:: Manager ,
57
64
clusters : Vec < pb:: BucketCluster > ,
58
65
_md : & meta:: Data ,
59
66
) -> HashMap < EncoreName , ( Arc < dyn ClusterImpl > , pb:: Bucket ) > {
60
67
let mut bucket_map = HashMap :: new ( ) ;
61
68
62
69
for cluster_cfg in clusters {
63
- let cluster = new_cluster ( & cluster_cfg) ;
70
+ let cluster = match cluster_cfg. provider {
71
+ Some ( provider) => new_cluster ( secrets, provider) ,
72
+ None => {
73
+ log:: error!( "missing bucket cluster provider: {}" , cluster_cfg. rid) ;
74
+ Arc :: new ( noop:: Cluster )
75
+ }
76
+ } ;
64
77
65
78
for bucket_cfg in cluster_cfg. buckets {
66
79
bucket_map. insert (
@@ -73,14 +86,18 @@ fn make_cfg_maps(
73
86
bucket_map
74
87
}
75
88
76
- fn new_cluster ( cluster : & pb:: BucketCluster ) -> Arc < dyn ClusterImpl > {
77
- let Some ( provider) = & cluster. provider else {
78
- log:: error!( "missing bucket cluster provider: {}" , cluster. rid) ;
79
- return Arc :: new ( noop:: Cluster ) ;
80
- } ;
81
-
89
+ fn new_cluster (
90
+ secrets : & secrets:: Manager ,
91
+ provider : pb:: bucket_cluster:: Provider ,
92
+ ) -> Arc < dyn ClusterImpl > {
82
93
match provider {
83
- pb:: bucket_cluster:: Provider :: S3 ( s3cfg) => Arc :: new ( s3:: Cluster :: new ( s3cfg) ) ,
94
+ pb:: bucket_cluster:: Provider :: S3 ( s3cfg) => {
95
+ let secret_access_key = s3cfg
96
+ . secret_access_key
97
+ . as_ref ( )
98
+ . map ( |k| secrets. load ( k. clone ( ) ) ) ;
99
+ Arc :: new ( s3:: Cluster :: new ( s3cfg, secret_access_key) )
100
+ }
84
101
pb:: bucket_cluster:: Provider :: Gcs ( gcscfg) => Arc :: new ( gcs:: Cluster :: new ( gcscfg. clone ( ) ) ) ,
85
102
}
86
103
}
0 commit comments