from time import gmtime, strftime
import boto3
from botocore.client import Config
+from botocore.exceptions import ClientError
import os
import subprocess
import json
self.endpoint_url = f'{protocol}://{host}:{port}'
# Create boto3 client and resource
+ # Use path-style addressing to match the old boto OrdinaryCallingFormat
self._s3_client = boto3.client(
's3',
endpoint_url=self.endpoint_url,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
- config=boto3.session.Config(retries={'max_attempts': self.num_retries})
+ config=Config(
+ retries={'max_attempts': self.num_retries},
+ s3={'addressing_style': 'path'}
+ )
)
self._s3_resource = boto3.resource(
's3',
endpoint_url=self.endpoint_url,
aws_access_key_id=aws_access_key_id,
- aws_secret_access_key=aws_secret_access_key
+ aws_secret_access_key=aws_secret_access_key,
+ config=Config(s3={'addressing_style': 'path'})
)
# For SSL connections
def create_bucket(self, bucket_name, **kwargs):
"""Create a bucket"""
- acl = kwargs.get('ACL', 'private')
try:
- self._s3_client.create_bucket(Bucket=bucket_name, ACL=acl)
+ self._s3_client.create_bucket(Bucket=bucket_name)
except ClientError as e:
# Bucket might already exist
if e.response['Error']['Code'] != 'BucketAlreadyOwnedByYou':
client = boto3.client('s3',
endpoint_url='http://'+conn.host+':'+str(conn.port),
aws_access_key_id=conn.aws_access_key_id,
- aws_secret_access_key=conn.aws_secret_access_key)
+ aws_secret_access_key=conn.aws_secret_access_key,
+ config=Config(s3={'addressing_style': 'path'}))
return client.put_object(Body='aaaaaaaaaaa', Bucket=bucket_name, Key=key, Tagging=tags)
def make_request(conn, method, resource, parameters=None, sign_parameters=False, extra_parameters=None):
client = boto3.client('s3',
endpoint_url='http://'+conn.host+':'+str(conn.port),
aws_access_key_id=conn.aws_access_key_id,
- aws_secret_access_key=conn.aws_secret_access_key)
+ aws_secret_access_key=conn.aws_secret_access_key,
+ config=Config(s3={'addressing_style': 'path'}))
objects = []
for key in client.list_objects(Bucket=bucket_name)['Contents']:
self.client = boto3.client('s3',
endpoint_url='http://'+conn.host+':'+str(conn.port),
aws_access_key_id=conn.aws_access_key_id,
- aws_secret_access_key=conn.aws_secret_access_key)
+ aws_secret_access_key=conn.aws_secret_access_key,
+ config=Config(s3={'addressing_style': 'path'}))
def send_request(self, method, parameters=None):
"""send request to radosgw"""
import io
import string
import sys
+from botocore.client import Config
from botocore.exceptions import ClientError
from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
from random import randint
client = boto3.client('s3',
endpoint_url='http://'+conn.host+':'+str(conn.port),
aws_access_key_id=conn.aws_access_key_id,
- aws_secret_access_key=conn.aws_secret_access_key)
+ aws_secret_access_key=conn.aws_secret_access_key,
+ config=Config(s3={'addressing_style': 'path'}))
yesterday = datetime.date.today() - datetime.timedelta(days=1)
response = client.put_bucket_lifecycle_configuration(Bucket=bucket_name,
LifecycleConfiguration={'Rules': rules_creator(yesterday, obj_prefix)}
aws_access_key_id=get_access_key(),
aws_secret_access_key=get_secret_key(),
endpoint_url=endpoint,
+ config=Config(s3={'addressing_style': 'path'})
)
bucket_name = gen_bucket_name()
default_num_shards = 11
rgw_client = f'client.rgw.{get_config_port()}'
if (old_num_shards != default_num_shards):
- set_rgw_config_option(rgw_client, 'rgw_bucket_persistent_notif_num_shards', old_num_shards)
+ set_rgw_config_option(rgw_client, 'rgw_bucket_persistent_notif_num_shards', old_num_shards, get_config_cluster())
bucket_name = gen_bucket_name()
bucket = conn.create_bucket(bucket_name)
create_object_and_verify_events(bucket, 'foo', topic_name, receiver, expected_keys, deletions=True)
## change config value for num_shards to new_num_shards
- set_rgw_config_option(rgw_client, 'rgw_bucket_persistent_notif_num_shards', new_num_shards)
+ set_rgw_config_option(rgw_client, 'rgw_bucket_persistent_notif_num_shards', new_num_shards, get_config_cluster())
## create objects in the bucket (async)
expected_keys = []
##revert config value for num_shards to default
if (new_num_shards != default_num_shards):
- set_rgw_config_option(rgw_client, 'rgw_bucket_persistent_notif_num_shards', default_num_shards)
+ set_rgw_config_option(rgw_client, 'rgw_bucket_persistent_notif_num_shards', default_num_shards, get_config_cluster())
def create_object_and_verify_events(bucket, key_name, topic_name, receiver, expected_keys, deletions=False):