def create_pool(): pool_name = action_get("name") pool_type = action_get("pool-type") percent_data = action_get("percent-data") or 10 app_name = action_get("app-name") or 'unknown' try: if pool_type == "replicated": replicas = action_get("replicas") replicated_pool = ReplicatedPool( name=pool_name, service='admin', replicas=replicas, app_name=app_name, percent_data=float(percent_data), ) replicated_pool.create() elif pool_type == "erasure": crush_profile_name = action_get("erasure-profile-name") erasure_pool = ErasurePool( name=pool_name, erasure_code_profile=crush_profile_name, service='admin', app_name=app_name, percent_data=float(percent_data), ) erasure_pool.create() else: log("Unknown pool type of {}. Only erasure or replicated is " "allowed".format(pool_type)) action_fail("Unknown pool type of {}. Only erasure or replicated " "is allowed".format(pool_type)) except CalledProcessError as e: action_fail("Pool creation failed because of a failed process. " "Ret Code: {} Message: {}".format(e.returncode, str(e)))
def handle_replicated_pool(request, service): pool_name = request.get('name') replicas = request.get('replicas') quota = request.get('max-bytes') # Optional params pg_num = request.get('pg_num') if pg_num: # Cap pg_num to max allowed just in case. osds = get_osds(service) if osds: pg_num = min(pg_num, (len(osds) * 100 // replicas)) # Check for missing params if pool_name is None or replicas is None: msg = "Missing parameter. name and replicas are required" log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} pool = ReplicatedPool(service=service, name=pool_name, replicas=replicas, pg_num=pg_num) if not pool_exists(service=service, name=pool_name): log("Creating pool '%s' (replicas=%s)" % (pool.name, replicas), level=INFO) pool.create() else: log("Pool '%s' already exists - skipping create" % pool.name, level=DEBUG) # Set a quota if requested if quota is not None: set_pool_quota(service=service, pool_name=pool_name, max_bytes=quota)
def handle_replicated_pool(request, service): """Create a new replicated pool. :param request: dict of request operations and params. :param service: The ceph client to run the command under. :returns: dict. exit-code and reason if not 0. """ pool_name = request.get('name') replicas = request.get('replicas') quota = request.get('max-bytes') weight = request.get('weight') group_name = request.get('group') # Optional params pg_num = request.get('pg_num') if pg_num: # Cap pg_num to max allowed just in case. osds = get_osds(service) if osds: pg_num = min(pg_num, (len(osds) * 100 // replicas)) app_name = request.get('app-name') # Check for missing params if pool_name is None or replicas is None: msg = "Missing parameter. name and replicas are required" log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} if group_name: group_namespace = request.get('group-namespace') # Add the pool to the group named "group_name" add_pool_to_group(pool=pool_name, group=group_name, namespace=group_namespace) kwargs = {} if pg_num: kwargs['pg_num'] = pg_num if weight: kwargs['percent_data'] = weight if replicas: kwargs['replicas'] = replicas if app_name: kwargs['app_name'] = app_name pool = ReplicatedPool(service=service, name=pool_name, **kwargs) if not pool_exists(service=service, name=pool_name): log("Creating pool '{}' (replicas={})".format(pool.name, replicas), level=INFO) pool.create() else: log("Pool '{}' already exists - skipping create".format(pool.name), level=DEBUG) # Set a quota if requested if quota is not None: set_pool_quota(service=service, pool_name=pool_name, max_bytes=quota)
def handle_replicated_pool(request, service): """Create a new replicated pool. :param request: dict of request operations and params. :param service: The ceph client to run the command under. :returns: dict. exit-code and reason if not 0. """ pool_name = request.get('name') group_name = request.get('group') # Optional params # NOTE: Check this against the handling in the Pool classes, reconcile and # remove. pg_num = request.get('pg_num') replicas = request.get('replicas') if pg_num: # Cap pg_num to max allowed just in case. osds = get_osds(service) if osds: pg_num = min(pg_num, (len(osds) * 100 // replicas)) request.update({'pg_num': pg_num}) if group_name: group_namespace = request.get('group-namespace') # Add the pool to the group named "group_name" add_pool_to_group(pool=pool_name, group=group_name, namespace=group_namespace) try: pool = ReplicatedPool(service=service, op=request) except KeyError: msg = "Missing parameter." log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} if not pool_exists(service=service, name=pool_name): log("Creating pool '{}' (replicas={})".format(pool.name, replicas), level=INFO) pool.create() else: log("Pool '{}' already exists - skipping create".format(pool.name), level=DEBUG) # Set/update properties that are allowed to change after pool creation. pool.update()