def handle_erasure_pool(request, service): pool_name = request.get('name') erasure_profile = request.get('erasure-profile') quota = request.get('max-bytes') if erasure_profile is None: erasure_profile = "default-canonical" # Check for missing params if pool_name is None: msg = "Missing parameter. name is required for the pool" log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} # TODO: Default to 3/2 erasure coding. I believe this requires min 5 osds if not erasure_profile_exists(service=service, name=erasure_profile): # TODO: Fail and tell them to create the profile or default msg = ("erasure-profile {} does not exist. Please create it with: " "create-erasure-profile".format(erasure_profile)) log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} pool = ErasurePool(service=service, name=pool_name, erasure_code_profile=erasure_profile) # Ok make the erasure pool if not pool_exists(service=service, name=pool_name): log("Creating pool '%s' (erasure_profile=%s)" % (pool.name, erasure_profile), level=INFO) pool.create() # Set a quota if requested if quota is not None: set_pool_quota(service=service, pool_name=pool_name, max_bytes=quota)
def handle_erasure_pool(request, service): """Create a new erasure coded 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') erasure_profile = request.get('erasure-profile') max_bytes = request.get('max-bytes') max_objects = request.get('max-objects') weight = request.get('weight') group_name = request.get('group') allow_ec_overwrites = request.get('allow-ec-overwrites') if erasure_profile is None: erasure_profile = "default-canonical" app_name = request.get('app-name') # Check for missing params if pool_name is None: msg = "Missing parameter. name is required for the pool" 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) # TODO: Default to 3/2 erasure coding. I believe this requires min 5 osds if not erasure_profile_exists(service=service, name=erasure_profile): # TODO: Fail and tell them to create the profile or default msg = ("erasure-profile {} does not exist. Please create it with: " "create-erasure-profile".format(erasure_profile)) log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} pool = ErasurePool(service=service, name=pool_name, erasure_code_profile=erasure_profile, percent_data=weight, app_name=app_name, allow_ec_overwrites=allow_ec_overwrites) # Ok make the erasure pool if not pool_exists(service=service, name=pool_name): log("Creating pool '{}' (erasure_profile={})".format( pool.name, erasure_profile), level=INFO) pool.create() # Set a quota if requested if max_bytes or max_objects: set_pool_quota(service=service, pool_name=pool_name, max_bytes=max_bytes, max_objects=max_objects)
def handle_erasure_pool(request, service): pool_name = request.get('name') erasure_profile = request.get('erasure-profile') quota = request.get('max-bytes') if erasure_profile is None: erasure_profile = "default-canonical" # Check for missing params if pool_name is None: msg = "Missing parameter. name is required for the pool" log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} # TODO: Default to 3/2 erasure coding. I believe this requires min 5 osds if not erasure_profile_exists(service=service, name=erasure_profile): # TODO: Fail and tell them to create the profile or default msg = ("erasure-profile {} does not exist. Please create it with: " "create-erasure-profile".format(erasure_profile)) log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} pool = ErasurePool(service=service, name=pool_name, erasure_code_profile=erasure_profile) # Ok make the erasure pool if not pool_exists(service=service, name=pool_name): log("Creating pool '%s' (erasure_profile=%s)" % (pool.name, erasure_profile), level=INFO) pool.create() # Set a quota if requested if quota is not None: set_pool_quota(service=service, pool_name=pool_name, max_bytes=quota)
def handle_erasure_pool(request, service): """Create a new erasure coded 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') erasure_profile = request.get('erasure-profile') quota = request.get('max-bytes') weight = request.get('weight') group_name = request.get('group') if erasure_profile is None: erasure_profile = "default-canonical" app_name = request.get('app-name') # Check for missing params if pool_name is None: msg = "Missing parameter. name is required for the pool" 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) # TODO: Default to 3/2 erasure coding. I believe this requires min 5 osds if not erasure_profile_exists(service=service, name=erasure_profile): # TODO: Fail and tell them to create the profile or default msg = ("erasure-profile {} does not exist. Please create it with: " "create-erasure-profile".format(erasure_profile)) log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} pool = ErasurePool(service=service, name=pool_name, erasure_code_profile=erasure_profile, percent_data=weight, app_name=app_name) # Ok make the erasure pool if not pool_exists(service=service, name=pool_name): log("Creating pool '{}' (erasure_profile={})" .format(pool.name, erasure_profile), level=INFO) pool.create() # Set a quota if requested if quota is not None: set_pool_quota(service=service, pool_name=pool_name, max_bytes=quota)
def handle_erasure_pool(request, service): """Create a new erasure coded 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') erasure_profile = request.get('erasure-profile') group_name = request.get('group') if erasure_profile is None: erasure_profile = "default-canonical" 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) # TODO: Default to 3/2 erasure coding. I believe this requires min 5 osds if not erasure_profile_exists(service=service, name=erasure_profile): # TODO: Fail and tell them to create the profile or default msg = ("erasure-profile {} does not exist. Please create it with: " "create-erasure-profile".format(erasure_profile)) log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} try: pool = ErasurePool(service=service, op=request) except KeyError: msg = "Missing parameter." log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} # Ok make the erasure pool if not pool_exists(service=service, name=pool_name): log("Creating pool '{}' (erasure_profile={})" .format(pool.name, erasure_profile), level=INFO) pool.create() # Set/update properties that are allowed to change after pool creation. pool.update()