1313from threading import Thread
1414from argparse import Namespace
1515
16- AWS_S3_DEFAULT_BUCKET = " test"
16+ AWS_S3_DEFAULT_BUCKET = os . environ . get ( "AWS_S3_DEFAULT_BUCKET" , " test")
1717DOCKER_GW_IP = "172.17.0.1" # will override below if found
1818
1919myContainers = list ()
2525 DOCKER_GW_IP = network .attrs ["IPAM" ]["Config" ][0 ]["Gateway" ]
2626 break
2727
28- print (dockerClient .containers .list ())
29-
30- i = 0
31-
3228# # https://stackoverflow.com/a/53255955/1839099
3329# def fire_and_forget(f):
3430# def wrapped(*args, **kwargs):
@@ -159,19 +155,49 @@ def stop():
159155 return container , stop
160156
161157
162- _minioCache = None
163-
164-
165- def getMinio ():
166- global _minioCache
167- if _minioCache :
168- return Namespace (** _minioCache )
158+ _minioCache = {}
159+
160+
161+ def getMinio (id = "disposable" ):
162+ cached = _minioCache .get (id , None )
163+ if cached :
164+ return Namespace (** cached )
165+
166+ if id == "global" :
167+ endpoint_url = os .getenv ("AWS_S3_ENDPOINT_URL" )
168+ if endpoint_url :
169+ print ("Reusing existing global minio" )
170+ aws_access_key_id = os .getenv ("AWS_ACCESS_KEY_ID" )
171+ aws_secret_access_key = os .getenv ("AWS_SECRET_ACCESS_KEY" )
172+
173+ s3 = boto3 .client (
174+ "s3" ,
175+ endpoint_url = endpoint_url ,
176+ config = boto3 .session .Config (signature_version = "s3v4" ),
177+ aws_access_key_id = aws_access_key_id ,
178+ aws_secret_access_key = aws_secret_access_key ,
179+ aws_session_token = None ,
180+ # verify=False,
181+ )
182+ result = {
183+ # don't link to actual container, and don't rm it at end
184+ "container" : "global" ,
185+ "stop" : lambda x : x ,
186+ # "port": port,
187+ "endpoint_url" : endpoint_url ,
188+ "aws_access_key_id" : aws_access_key_id ,
189+ "aws_secret_access_key" : aws_secret_access_key ,
190+ "s3" : s3 ,
191+ }
192+ _minioCache .update ({id : result })
193+ return Namespace (** result )
194+ else :
195+ print ("Creating new global minio" )
169196
170197 port = get_free_port ()
171198
172199 def onstop ():
173- global _minioCache
174- _minioCache = None
200+ del _minioCache [id ]
175201
176202 container , stop = startContainer (
177203 "minio/minio" ,
@@ -194,12 +220,14 @@ def onstop():
194220 if response and response .status_code == 200 :
195221 break
196222
223+ aws_access_key_id = "minioadmin"
224+ aws_secret_access_key = "minioadmin"
197225 s3 = boto3 .client (
198226 "s3" ,
199227 endpoint_url = endpoint_url ,
200228 config = boto3 .session .Config (signature_version = "s3v4" ),
201- aws_access_key_id = "minioadmin" ,
202- aws_secret_access_key = "minioadmin" ,
229+ aws_access_key_id = aws_access_key_id ,
230+ aws_secret_access_key = aws_secret_access_key ,
203231 aws_session_token = None ,
204232 # verify=False,
205233 )
@@ -211,9 +239,11 @@ def onstop():
211239 "stop" : stop ,
212240 "port" : port ,
213241 "endpoint_url" : endpoint_url ,
242+ "aws_access_key_id" : aws_access_key_id ,
243+ "aws_secret_access_key" : aws_secret_access_key ,
214244 "s3" : s3 ,
215245 }
216- _minioCache = result
246+ _minioCache . update ({ id : result })
217247 return Namespace (** result )
218248
219249
@@ -245,10 +275,10 @@ def getDDA(
245275 if minio :
246276 environment .update (
247277 {
248- "AWS_ACCESS_KEY_ID" : "minioadmin" ,
249- "AWS_SECRET_ACCESS_KEY" : "minioadmin" ,
278+ "AWS_ACCESS_KEY_ID" : minio . aws_access_key_id ,
279+ "AWS_SECRET_ACCESS_KEY" : minio . aws_secret_access_key ,
250280 "AWS_DEFAULT_REGION" : "" ,
251- "AWS_S3_DEFAULT_BUCKET" : "test" ,
281+ "AWS_S3_DEFAULT_BUCKET" : AWS_S3_DEFAULT_BUCKET ,
252282 "AWS_S3_ENDPOINT_URL" : minio .endpoint_url ,
253283 }
254284 )
0 commit comments