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()