mirror of
https://github.com/ceph/ceph
synced 2025-03-11 02:39:05 +00:00
rgw/qa: Add separate task for cloudtier tests
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
This commit is contained in:
parent
d0ac12dc38
commit
f846f6ff02
@ -1,6 +1,25 @@
|
||||
tasks:
|
||||
- install:
|
||||
- ceph:
|
||||
- rgw:
|
||||
storage classes: LUKEWARM, FROZEN
|
||||
client.0:
|
||||
port: 8000
|
||||
client.1:
|
||||
port: 8001
|
||||
- rgw-cloudtier:
|
||||
client.0:
|
||||
# cloudtier storage class params
|
||||
cloud_storage_class: CLOUDTIER
|
||||
cloud_client: client.1
|
||||
cloud_regular_storage_class: LUKEWARM
|
||||
cloud_target_storage_class: FROZEN
|
||||
cloud_retain_head_object: "true"
|
||||
cloud_target_path: "teuthology"
|
||||
cloudtier_user:
|
||||
# cloud-user creds to be created on cloud-client
|
||||
cloud_secret: "abcefgh"
|
||||
cloud_access_key: "12345678"
|
||||
- s3tests:
|
||||
client.0:
|
||||
force-repo: https://github.com/soumyakoduri/s3-tests.git
|
||||
@ -11,21 +30,3 @@ tasks:
|
||||
extra_attrs: ["cloud_transition"]
|
||||
lc_debug_interval: 10
|
||||
cloudtier_tests: True
|
||||
- rgw:
|
||||
storage classes: LUKEWARM, FROZEN
|
||||
client.0:
|
||||
port: 8000
|
||||
cloudtier:
|
||||
# cloudtier storage class params
|
||||
cloud_storage_class: CLOUDTIER
|
||||
cloud_client: client.1
|
||||
cloud_regular_storage_class: LUKEWARM
|
||||
cloud_target_storage_class: FROZEN
|
||||
cloud_retain_head_object: "true"
|
||||
cloud_target_path: "teuthology"
|
||||
cloudtier_user:
|
||||
# cloud-user creds to be created on cloud-client
|
||||
cloud_secret: "abcefgh"
|
||||
cloud_access_key: "12345678"
|
||||
client.1:
|
||||
port: 8001
|
||||
|
@ -201,59 +201,6 @@ def start_rgw(ctx, config, clients):
|
||||
exit_on_first_error=False
|
||||
)
|
||||
|
||||
cloudtier_config = client_config.get('cloudtier')
|
||||
if cloudtier_config is not None:
|
||||
log.info('client %s - cloudtier config is -----------------%s ', client, cloudtier_config)
|
||||
# configuring cloudtier
|
||||
|
||||
cloud_client = cloudtier_config.get('cloud_client')
|
||||
cloud_storage_class = cloudtier_config.get('cloud_storage_class')
|
||||
cloud_target_path = cloudtier_config.get('cloud_target_path')
|
||||
cloud_target_storage_class = cloudtier_config.get('cloud_target_storage_class')
|
||||
cloud_regular_storage_class = cloudtier_config.get('cloud_regular_storage_class')
|
||||
cloud_retain_head_object = cloudtier_config.get('cloud_retain_head_object')
|
||||
|
||||
cloudtier_user = client_config.get('cloudtier_user')
|
||||
cloud_access_key = cloudtier_user.get('cloud_access_key')
|
||||
cloud_secret = cloudtier_user.get('cloud_secret')
|
||||
|
||||
# XXX: the 'default' zone and zonegroup aren't created until we run RGWRados::init_complete().
|
||||
# issue a 'radosgw-admin user list' command to trigger this
|
||||
rgwadmin(ctx, client, cmd=['user', 'list'], check_status=True)
|
||||
|
||||
endpoint = ctx.rgw.role_endpoints[cloud_client]
|
||||
|
||||
# create cloudtier storage class
|
||||
tier_config_params = "endpoint=" + endpoint.url() + \
|
||||
",access_key=" + cloud_access_key + \
|
||||
",secret=" + cloud_secret + \
|
||||
",retain_head_object=" + cloud_retain_head_object
|
||||
|
||||
if (cloud_target_path != None):
|
||||
tier_config_params += ",target_path=" + cloud_target_path
|
||||
if (cloud_target_storage_class != None):
|
||||
tier_config_params += ",target_storage_class=" + cloud_target_storage_class
|
||||
|
||||
log.info('Configuring cloud-s3 tier storage class type = %s', cloud_storage_class)
|
||||
|
||||
rgwadmin(ctx, client,
|
||||
cmd=['zonegroup', 'placement', 'add',
|
||||
'--rgw-zone', 'default',
|
||||
'--placement-id', 'default-placement',
|
||||
'--storage-class', cloud_storage_class,
|
||||
'--tier-type', 'cloud-s3',
|
||||
'--tier-config', tier_config_params],
|
||||
check_status=True)
|
||||
|
||||
## create cloudtier user with the access keys given on the cloud client
|
||||
rgwadmin(ctx, cloud_client,
|
||||
cmd=['user', 'create', '--uid', 'cloud-tier-user',
|
||||
'--display-name', 'CLOUD TIER USER',
|
||||
'--access-key', cloud_access_key,
|
||||
'--secret', cloud_secret,
|
||||
'--caps', 'user-policy=*'],
|
||||
check_status=True)
|
||||
|
||||
run_cmd = list(cmd_prefix)
|
||||
run_cmd.extend(rgw_cmd)
|
||||
|
||||
@ -460,6 +407,7 @@ def task(ctx, config):
|
||||
teuthology.deep_merge(config, overrides.get('rgw', {}))
|
||||
|
||||
ctx.rgw = argparse.Namespace()
|
||||
ctx.rgw_cloudtier = None
|
||||
|
||||
ctx.rgw.ec_data_pool = bool(config.pop('ec-data-pool', False))
|
||||
ctx.rgw.erasure_code_profile = config.pop('erasure_code_profile', {})
|
||||
|
126
qa/tasks/rgw_cloudtier.py
Normal file
126
qa/tasks/rgw_cloudtier.py
Normal file
@ -0,0 +1,126 @@
|
||||
"""
|
||||
rgw_cloudtier configuration routines
|
||||
"""
|
||||
import argparse
|
||||
import contextlib
|
||||
import logging
|
||||
|
||||
from teuthology.orchestra import run
|
||||
from teuthology import misc as teuthology
|
||||
from teuthology import contextutil
|
||||
from teuthology.exceptions import ConfigError
|
||||
from tasks.util import get_remote_for_role
|
||||
from tasks.util.rgw import rgwadmin, wait_for_radosgw
|
||||
from teuthology.task import Task
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class RGWCloudTier(Task):
|
||||
"""
|
||||
Configure CloudTier storage class.
|
||||
|
||||
To configure cloudtiering on any client::
|
||||
|
||||
tasks:
|
||||
- ceph:
|
||||
- rgw:
|
||||
- rgw-cloudtier:
|
||||
client.0:
|
||||
cloud_storage_class:
|
||||
cloud_client:
|
||||
cloud_regular_storage_class:
|
||||
cloud_target_storage_class:
|
||||
cloud_retain_head_object:
|
||||
cloud_target_path:
|
||||
cloudtier_user:
|
||||
cloud_secret:
|
||||
cloud_access_key:
|
||||
|
||||
"""
|
||||
def __init__(self, ctx, config):
|
||||
super(RGWCloudTier, self).__init__(ctx, config)
|
||||
|
||||
def setup(self):
|
||||
super(RGWCloudTier, self).setup()
|
||||
|
||||
overrides = self.ctx.config.get('overrides', {})
|
||||
teuthology.deep_merge(self.config, overrides.get('rgw-cloudtier', {}))
|
||||
|
||||
if not self.ctx.rgw:
|
||||
raise ConfigError('rgw-cloudtier must run after the rgw task')
|
||||
|
||||
self.ctx.rgw_cloudtier = argparse.Namespace()
|
||||
self.ctx.rgw_cloudtier.config = self.config
|
||||
|
||||
log.info('Configuring rgw cloudtier ...')
|
||||
clients = self.config.keys() # http://tracker.ceph.com/issues/20417
|
||||
for client in clients:
|
||||
client_config = self.config.get(client)
|
||||
if client_config is None:
|
||||
client_config = {}
|
||||
|
||||
if client_config is not None:
|
||||
log.info('client %s - cloudtier config is -----------------%s ', client, client_config)
|
||||
# configuring cloudtier
|
||||
|
||||
cloud_client = client_config.get('cloud_client')
|
||||
cloud_storage_class = client_config.get('cloud_storage_class')
|
||||
cloud_target_path = client_config.get('cloud_target_path')
|
||||
cloud_target_storage_class = client_config.get('cloud_target_storage_class')
|
||||
cloud_regular_storage_class = client_config.get('cloud_regular_storage_class')
|
||||
cloud_retain_head_object = client_config.get('cloud_retain_head_object')
|
||||
|
||||
cloudtier_user = client_config.get('cloudtier_user')
|
||||
cloud_access_key = cloudtier_user.get('cloud_access_key')
|
||||
cloud_secret = cloudtier_user.get('cloud_secret')
|
||||
|
||||
# XXX: the 'default' zone and zonegroup aren't created until we run RGWRados::init_complete().
|
||||
# issue a 'radosgw-admin user list' command to trigger this
|
||||
rgwadmin(self.ctx, client, cmd=['user', 'list'], check_status=True)
|
||||
|
||||
endpoint = self.ctx.rgw.role_endpoints[cloud_client]
|
||||
|
||||
# create cloudtier storage class
|
||||
tier_config_params = "endpoint=" + endpoint.url() + \
|
||||
",access_key=" + cloud_access_key + \
|
||||
",secret=" + cloud_secret + \
|
||||
",retain_head_object=" + cloud_retain_head_object
|
||||
|
||||
if (cloud_target_path != None):
|
||||
tier_config_params += ",target_path=" + cloud_target_path
|
||||
if (cloud_target_storage_class != None):
|
||||
tier_config_params += ",target_storage_class=" + cloud_target_storage_class
|
||||
|
||||
log.info('Configuring cloud-s3 tier storage class type = %s', cloud_storage_class)
|
||||
|
||||
rgwadmin(self.ctx, client,
|
||||
cmd=['zonegroup', 'placement', 'add',
|
||||
'--rgw-zone', 'default',
|
||||
'--placement-id', 'default-placement',
|
||||
'--storage-class', cloud_storage_class,
|
||||
'--tier-type', 'cloud-s3',
|
||||
'--tier-config', tier_config_params],
|
||||
check_status=True)
|
||||
|
||||
## create cloudtier user with the access keys given on the cloud client
|
||||
rgwadmin(self.ctx, cloud_client,
|
||||
cmd=['user', 'create', '--uid', 'cloud-tier-user',
|
||||
'--display-name', 'CLOUD TIER USER',
|
||||
'--access-key', cloud_access_key,
|
||||
'--secret', cloud_secret,
|
||||
'--caps', 'user-policy=*'],
|
||||
check_status=True)
|
||||
|
||||
log.info('Finished Configuring rgw cloudtier ...')
|
||||
|
||||
cluster_name, daemon_type, client_id = teuthology.split_role(client)
|
||||
client_with_id = daemon_type + '.' + client_id
|
||||
client_with_cluster = cluster_name + '.' + client_with_id
|
||||
self.ctx.daemons.get_daemon('rgw', client_with_id, cluster_name).restart()
|
||||
log.info('restarted rgw daemon ...')
|
||||
|
||||
(remote,) = self.ctx.cluster.only(client).remotes.keys()
|
||||
wait_for_radosgw(endpoint.url(), remote)
|
||||
|
||||
|
||||
task = RGWCloudTier
|
@ -364,22 +364,24 @@ def configure(ctx, config):
|
||||
if lc_debug_interval:
|
||||
s3tests_conf['s3 main']['lc_debug_interval'] = lc_debug_interval
|
||||
|
||||
client_rgw_config = ctx.rgw.config.get(client)
|
||||
if client_rgw_config:
|
||||
cloudtier_config = client_rgw_config.get('cloudtier')
|
||||
if cloudtier_config:
|
||||
log.info('Before ctx.rgw_clouudtier %s ...', ctx.rgw_cloudtier)
|
||||
if ctx.rgw_cloudtier is not None:
|
||||
log.info(' ctx.rgw_cloudtier config is %s ...', ctx.rgw_cloudtier.config)
|
||||
client_rgw_config = ctx.rgw_cloudtier.config.get(client)
|
||||
if client_rgw_config:
|
||||
log.info(' ctx.rgw_cloudtier config is %s ...', client_rgw_config)
|
||||
cloudtier_user = client_rgw_config.get('cloudtier_user')
|
||||
cloud_client = cloudtier_config.get('cloud_client')
|
||||
cloud_client = client_rgw_config.get('cloud_client')
|
||||
endpoint = ctx.rgw.role_endpoints.get(cloud_client)
|
||||
s3tests_conf['s3 cloud']['host'] = endpoint.dns_name
|
||||
s3tests_conf['s3 cloud']['port'] = endpoint.port
|
||||
s3tests_conf['s3 cloud']['access_key'] = cloudtier_user.get('cloud_access_key')
|
||||
s3tests_conf['s3 cloud']['secret_key'] = cloudtier_user.get('cloud_secret')
|
||||
s3tests_conf['s3 cloud']['cloud_storage_class'] = cloudtier_config.get('cloud_storage_class')
|
||||
s3tests_conf['s3 cloud']['storage_class'] = cloudtier_config.get('cloud_regular_storage_class')
|
||||
s3tests_conf['s3 cloud']['retain_head_object'] = cloudtier_config.get('cloud_retain_head_object')
|
||||
cloud_target_path = cloudtier_config.get('cloud_target_path')
|
||||
cloud_target_storage_class = cloudtier_config.get('cloud_target_storage_class')
|
||||
s3tests_conf['s3 cloud']['cloud_storage_class'] = client_rgw_config.get('cloud_storage_class')
|
||||
s3tests_conf['s3 cloud']['storage_class'] = client_rgw_config.get('cloud_regular_storage_class')
|
||||
s3tests_conf['s3 cloud']['retain_head_object'] = client_rgw_config.get('cloud_retain_head_object')
|
||||
cloud_target_path = client_rgw_config.get('cloud_target_path')
|
||||
cloud_target_storage_class = client_rgw_config.get('cloud_target_storage_class')
|
||||
if (cloud_target_path != None):
|
||||
s3tests_conf['s3 cloud']['target_path'] = cloud_target_path
|
||||
if (cloud_target_storage_class != None):
|
||||
|
Loading…
Reference in New Issue
Block a user