13
13
# limitations under the License.
14
14
15
15
"""S3 helper functions for the MySQL charms."""
16
-
16
+ import base64
17
17
import logging
18
18
import tempfile
19
19
import time
31
31
32
32
# Increment this PATCH version before using `charmcraft publish-lib` or reset
33
33
# to 0 if you are raising the major API version
34
- LIBPATCH = 6
34
+ LIBPATCH = 7
35
35
36
36
# botocore/urllib3 clutter the logs when on debug
37
37
logging .getLogger ("botocore" ).setLevel (logging .WARNING )
@@ -52,13 +52,25 @@ def upload_content_to_s3(content: str, content_path: str, s3_parameters: Dict) -
52
52
"""
53
53
try :
54
54
logger .info (f"Uploading content to bucket={ s3_parameters ['bucket' ]} , path={ content_path } " )
55
+ ca_file = tempfile .NamedTemporaryFile ()
55
56
session = boto3 .session .Session (
56
57
aws_access_key_id = s3_parameters ["access-key" ],
57
58
aws_secret_access_key = s3_parameters ["secret-key" ],
58
59
region_name = s3_parameters ["region" ] or None ,
59
60
)
60
-
61
- s3 = session .resource ("s3" , endpoint_url = s3_parameters ["endpoint" ])
61
+ verif = True
62
+ ca_chain = s3_parameters .get ("tls-ca-chain" )
63
+ if ca_chain :
64
+ ca = "\n " .join ([base64 .b64decode (s ).decode () for s in ca_chain ])
65
+ ca_file .write (ca .encode ())
66
+ ca_file .flush ()
67
+ verif = ca_file .name
68
+
69
+ s3 = session .resource (
70
+ "s3" ,
71
+ endpoint_url = s3_parameters ["endpoint" ],
72
+ verify = verif ,
73
+ )
62
74
63
75
bucket = s3 .Bucket (s3_parameters ["bucket" ])
64
76
@@ -73,6 +85,8 @@ def upload_content_to_s3(content: str, content_path: str, s3_parameters: Dict) -
73
85
exc_info = e ,
74
86
)
75
87
return False
88
+ finally :
89
+ ca_file .close ()
76
90
77
91
return True
78
92
0 commit comments