def member_del(rs_id, member_id): logger.debug("member_del({rs_id}), {member_id}".format(**locals())) member_id = int(member_id) if rs_id not in ReplicaSets(): return send_result(404) result = ReplicaSets().member_del(rs_id, member_id) return send_result(204, result)
def routers(cluster_id): logger.debug("routers({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) router_docs = [] for router_info in ShardedClusters().routers(cluster_id): # Server id is the same as router id. server_id = router_info['id'] links = [ sharded_cluster_link('delete-router', cluster_id, router_id=server_id), server_link('get-server-info', server_id) ] router_info['links'] = links router_docs.append(router_info) result = { 'routers': router_docs, 'links': [ sharded_cluster_link('get-sharded-cluster-info', cluster_id), sharded_cluster_link('get-shards', cluster_id), sharded_cluster_link('get-configsvrs', cluster_id), sharded_cluster_link('get-routers', cluster_id, self_rel=True) ] } return send_result(200, result)
def shards(cluster_id): logger.debug("shards({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) shard_docs = [] for shard_info in ShardedClusters().members(cluster_id): shard_id = shard_info['id'] resource_id = shard_info['_id'] shard_info['links'] = [ sharded_cluster_link('get-shard-info', cluster_id, shard_id), sharded_cluster_link('delete-shard', cluster_id, shard_id), sharded_cluster_link('get-sharded-cluster-info', cluster_id), ] shard_info['links'].append(_server_or_rs_link(shard_info)) shard_docs.append(shard_info) result = { 'shards': shard_docs, 'links': [ sharded_cluster_link('get-sharded-cluster-info', cluster_id), sharded_cluster_link('get-shards', cluster_id, self_rel=True), sharded_cluster_link('get-configsvrs', cluster_id), sharded_cluster_link('get-routers', cluster_id) ] } return send_result(200, result)
def host_info(host_id): logger.debug("host_info({host_id})".format(**locals())) if host_id not in Servers(): return send_result(404) result = Servers().info(host_id) result['links'] = all_server_links(host_id, rel_to='get-server-info') result['links'].append(server_link('get-servers')) return send_result(200, result)
def member_info(rs_id, member_id): logger.debug("member_info({rs_id}, {member_id})".format(**locals())) member_id = int(member_id) if rs_id not in ReplicaSets(): return send_result(404) result = ReplicaSets().member_info(rs_id, member_id) result['links'] = _build_member_links(rs_id, result) result['links'].extend(_build_member_parent_links(rs_id)) return send_result(200, result)
def rs_member_primary(rs_id): logger.debug("rs_member_primary({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) result = ReplicaSets().primary(rs_id) result['links'] = _build_member_links(rs_id, result) result['links'].extend( _build_member_parent_links(rs_id, 'get-replica-set-primary')) return send_result(200, result)
def servers(rs_id): logger.debug("hosts({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) server_docs = [] for server_info in ReplicaSets().servers(rs_id): server_info['links'] = _build_member_links(rs_id, server_info) server_docs.append(server_info) result = { 'servers': server_docs, 'links': _build_member_parent_links(rs_id, 'get-replica-set-servers') } return send_result(200, result)
def arbiters(rs_id): logger.debug("arbiters({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) arbiter_docs = [] for arbiter_info in ReplicaSets().arbiters(rs_id): arbiter_info['links'] = _build_member_links(rs_id, arbiter_info) arbiter_docs.append(arbiter_info) result = { 'arbiters': arbiter_docs, 'links': _build_member_parent_links(rs_id, 'get-replica-set-arbiters') } return send_result(200, result)
def members(rs_id): logger.debug("members({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) member_docs = [] for member_info in ReplicaSets().members(rs_id): member_info['links'] = _build_member_links(rs_id, member_info) member_docs.append(member_info) result = { 'members': member_docs, 'links': _build_member_parent_links(rs_id, 'get-replica-set-members') } return send_result(200, result)
def member_add(rs_id): logger.debug("member_add({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) data = get_json(request.body) member_id = ReplicaSets().member_add(rs_id, data) result = ReplicaSets().member_info(rs_id, member_id) result['links'] = _build_member_links(rs_id, result) result['links'].extend( _build_member_parent_links(rs_id, 'add-replica-set-member')) result['links'].append( replica_set_link('add-replica-set-member', self_rel=True)) return send_result(200, result)
def rs_info(rs_id): logger.debug("rs_info({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) result = ReplicaSets().info(rs_id) result['links'] = all_replica_set_links(rs_id, 'get-replica-set-info') for member in result['members']: member['links'] = [ server_link('get-server-info', server_id=member['server_id']), replica_set_link( 'get-replica-set-member-info', rs_id, member['_id']) ] return send_result(200, result)
def member_update(rs_id, member_id): logger.debug("member_update({rs_id}, {member_id})".format(**locals())) member_id = int(member_id) if rs_id not in ReplicaSets(): return send_result(404) data = get_json(request.body) ReplicaSets().member_update(rs_id, member_id, data) result = ReplicaSets().member_info(rs_id, member_id) result['links'] = _build_member_links(rs_id, result) result['links'].extend(_build_member_parent_links(rs_id)) result['links'].append(replica_set_link( 'update-replica-set-member-config', rs_id, member_id, self_rel=True)) return send_result(200, result)
def rs_info(rs_id): logger.debug("rs_info({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) result = ReplicaSets().info(rs_id) result['links'] = all_replica_set_links(rs_id, 'get-replica-set-info') for member in result['members']: member['links'] = [ server_link('get-server-info', server_id=member['server_id']), replica_set_link('get-replica-set-member-info', rs_id, member['_id']) ] return send_result(200, result)
def sh_command(cluster_id): logger.debug("sh_command({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) command = get_json(request.body).get('action') if command is None: raise RequestError('Expected body with an {"action": ...}.') result = { 'command_result': ShardedClusters().command(cluster_id, command), 'links': all_sharded_cluster_links(cluster_id, rel_to='sharded-cluster-command') } return send_result(200, result)
def host_command(host_id): logger.debug("host_command({host_id})".format(**locals())) if host_id not in Servers(): return send_result(404) command = get_json(request.body).get('action') if command is None: raise RequestError('Expected body with an {"action": ...}.') result = { 'command_result': Servers().command(host_id, command), 'links': all_server_links(host_id, rel_to='server-command') } result['links'].append(server_link('get-servers')) return send_result(200, result)
def rs_command(rs_id): logger.debug("rs_command({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) command = get_json(request.body).get('action') if command is None: raise RequestError('Expected body with an {"action": ...}.') result = { 'command_result': ReplicaSets().command(rs_id, command), 'links': all_replica_set_links(rs_id, 'replica-set-command') } result['links'].append( replica_set_link('replica-set-command', self_rel=True)) return send_result(200, result)
def passives(rs_id): logger.debug("passives({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) passive_docs = [] for passive_info in ReplicaSets().passives(rs_id): passive_info['links'] = _build_member_links(rs_id, passive_info) passive_docs.append(passive_info) result = { 'passives': passive_docs, 'links': _build_member_parent_links( rs_id, 'get-replica-set-passive-members') } return send_result(200, result)
def hidden(rs_id): logger.debug("hidden({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) hidden_docs = [] for hidden_info in ReplicaSets().hidden(rs_id): hidden_info['links'] = _build_member_links(rs_id, hidden_info) hidden_docs.append(hidden_info) result = { 'hidden': hidden_docs, 'links': _build_member_parent_links( rs_id, 'get-replica-set-hidden-members') } return send_result(200, result)
def router_add(cluster_id): logger.debug("router_add({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) data = get_json(request.body) result = ShardedClusters().router_add(cluster_id, data) router_id = result['id'] result['links'] = [ server_link('get-server-info', router_id), sharded_cluster_link('add-router', cluster_id, self_rel=True), sharded_cluster_link('delete-router', cluster_id, router_id=router_id), sharded_cluster_link('get-sharded-cluster-info', cluster_id), sharded_cluster_link('get-routers', cluster_id), ] return send_result(200, result)
def base_uri(): logger.debug("base_uri()") data = { "service": "mongo-orchestration", "version": __version__, "links": all_base_links(rel_to='service') } return send_result(200, data)
def shard_add(cluster_id): logger.debug("shard_add({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) data = get_json(request.body) result = ShardedClusters().member_add(cluster_id, data) resource_id = result['_id'] shard_id = result['id'] result['links'] = [ sharded_cluster_link('get-shard-info', cluster_id, shard_id), sharded_cluster_link('delete-shard', cluster_id, shard_id), sharded_cluster_link('add-shard', cluster_id, self_rel=True), sharded_cluster_link('get-sharded-cluster-info', cluster_id), sharded_cluster_link('get-shards', cluster_id) ] result['links'].append(_server_or_rs_link(result)) return send_result(200, result)
def shard_info(cluster_id, shard_id): logger.debug("shard_info({cluster_id}, {shard_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) result = ShardedClusters().member_info(cluster_id, shard_id) resource_id = result['_id'] shard_id = result['id'] result['links'] = [ sharded_cluster_link( 'get-shard-info', cluster_id, shard_id, self_rel=True), sharded_cluster_link('delete-shard', cluster_id, shard_id), sharded_cluster_link('add-shard', cluster_id), sharded_cluster_link('get-sharded-cluster-info', cluster_id), sharded_cluster_link('get-shards', cluster_id) ] result['links'].append(_server_or_rs_link(result)) return send_result(200, result)
def info(cluster_id): logger.debug("info({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) result = ShardedClusters().info(cluster_id) result['links'] = all_sharded_cluster_links( cluster_id, rel_to='get-sharded-cluster-info') for router in result['routers']: router['links'] = [ server_link('get-server-info', server_id=router['id']) ] for cfg in result['configsvrs']: cfg['links'] = [server_link('get-server-info', server_id=cfg['id'])] for sh in result['shards']: sh['links'] = [ sharded_cluster_link('get-shard-info', cluster_id, sh['id']), _server_or_rs_link(sh) ] return send_result(200, result)
def configsvrs(cluster_id): logger.debug("configsvrs({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) config_docs = [] for config_info in ShardedClusters().configsvrs(cluster_id): server_id = config_info['id'] config_info['links'] = [server_link('get-server-info', server_id)] config_docs.append(config_info) result = { 'configsvrs': config_docs, 'links': [ sharded_cluster_link('get-sharded-cluster-info', cluster_id), sharded_cluster_link('get-shards', cluster_id), sharded_cluster_link('get-configsvrs', cluster_id, self_rel=True), sharded_cluster_link('get-routers', cluster_id) ] } return send_result(200, result)
def info(cluster_id): logger.debug("info({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) result = ShardedClusters().info(cluster_id) result['links'] = all_sharded_cluster_links( cluster_id, rel_to='get-sharded-cluster-info') for router in result['routers']: router['links'] = [ server_link('get-server-info', server_id=router['id']) ] for cfg in result['configsvrs']: cfg['links'] = [ server_link('get-server-info', server_id=cfg['id']) ] for sh in result['shards']: sh['links'] = [ sharded_cluster_link('get-shard-info', cluster_id, sh['id']), _server_or_rs_link(sh) ] return send_result(200, result)
def configsvrs(cluster_id): logger.debug("configsvrs({cluster_id})".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) config_docs = [] for config_info in ShardedClusters().configsvrs(cluster_id): server_id = config_info['id'] config_info['links'] = [ server_link('get-server-info', server_id) ] config_docs.append(config_info) result = { 'configsvrs': config_docs, 'links': [ sharded_cluster_link('get-sharded-cluster-info', cluster_id), sharded_cluster_link('get-shards', cluster_id), sharded_cluster_link('get-configsvrs', cluster_id, self_rel=True), sharded_cluster_link('get-routers', cluster_id) ] } return send_result(200, result)
def host_create(): data = get_json(request.body) data = preset_merge(data, 'servers') result = _host_create(data) result['links'].extend([ base_link('service'), base_link('get-releases'), server_link('get-servers'), server_link('add-server', self_rel=True), replica_set_link('get-replica-sets'), sharded_cluster_link('get-sharded-clusters') ]) return send_result(200, result)
def rs_create_by_id(rs_id): logger.debug("rs_create_by_id()") data = get_json(request.body) data = preset_merge(data, 'replica_sets') data['id'] = rs_id result = _rs_create(data) result['links'].extend([ base_link('service'), base_link('get-releases'), sharded_cluster_link('get-sharded-clusters'), replica_set_link('get-replica-sets'), replica_set_link('add-replica-set'), replica_set_link('add-replica-set-by-id', rs_id, self_rel=True), server_link('get-servers') ]) return send_result(200, result)
def rs_list(): logger.debug("rs_list()") replica_sets = [] for rs_id in ReplicaSets(): repl_info = {'id': rs_id} repl_info['links'] = all_replica_set_links(rs_id, 'get-replica-sets') replica_sets.append(repl_info) response = {'links': [ base_link('service'), base_link('get-releases'), sharded_cluster_link('get-sharded-clusters'), replica_set_link('get-replica-sets', self_rel=True), replica_set_link('add-replica-set'), server_link('get-servers') ]} response['replica_sets'] = replica_sets return send_result(200, response)
def host_list(): logger.debug("host_list()") servers = [] for server_id in Servers(): server_info = {'id': server_id} server_info['links'] = all_server_links( server_id, rel_to='get-servers') servers.append(server_info) response = {'links': [ base_link('service'), base_link('get-releases'), server_link('get-servers', self_rel=True), server_link('add-server'), replica_set_link('get-replica-sets'), sharded_cluster_link('get-sharded-clusters') ]} response['servers'] = servers return send_result(200, response)
def shard_del(cluster_id, shard_id): logger.debug("member_del({cluster_id}), {shard_id}".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) result = ShardedClusters().member_del(cluster_id, shard_id) return send_result(204, result)
def host_del(host_id): logger.debug("host_del({host_id})") if host_id not in Servers(): return send_result(404) Servers().remove(host_id) return send_result(204)
def releases_list(): response = { 'releases': Servers().releases, 'links': all_base_links(rel_to='get-releases') } return send_result(200, response)
def rs_del(rs_id): logger.debug("rs_del({rs_id})".format(**locals())) if rs_id not in ReplicaSets(): return send_result(404) result = ReplicaSets().remove(rs_id) return send_result(204, result)
def router_del(cluster_id, router_id): logger.debug("router_del({cluster_id}), {router_id}".format(**locals())) if cluster_id not in ShardedClusters(): return send_result(404) result = ShardedClusters().router_del(cluster_id, router_id) return send_result(204, result)