def _build_member_links(rs_id, member_doc): server_id = member_doc['server_id'] member_id = member_doc['_id'] member_links = [ replica_set_link('get-replica-set-member-info', rs_id, member_id), replica_set_link('delete-replica-set-member', rs_id, member_id), replica_set_link('update-replica-set-member-config', rs_id, member_id), server_link('get-server-info', server_id=server_id) ] return member_links
def rs_create(): logger.debug("rs_create()") data = get_json(request.body) data = preset_merge(data, 'replica_sets') 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', 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 _build_member_parent_links(rs_id, rel_self=None): return [ replica_set_link(rel, rs_id, self_rel=(rel == rel_self)) for rel in ( 'get-replica-set-primary', 'get-replica-set-info', 'get-replica-set-members', 'get-replica-set-secondaries', 'get-replica-set-arbiters', 'get-replica-set-hidden-members', 'get-replica-set-passive-members', 'get-replica-set-servers' ) ]
def _build_member_parent_links(rs_id, rel_self=None): return [ replica_set_link(rel, rs_id, self_rel=(rel == rel_self)) for rel in ('get-replica-set-primary', 'get-replica-set-info', 'get-replica-set-members', 'get-replica-set-secondaries', 'get-replica-set-arbiters', 'get-replica-set-hidden-members', 'get-replica-set-passive-members', 'get-replica-set-servers') ]
def _rs_create(params): rs_id = ReplicaSets().create(params) result = ReplicaSets().info(rs_id) result['links'] = all_replica_set_links(rs_id) # Add GET link to corresponding Server resource. 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 result
def _rs_create(params): rs_id = ReplicaSets().create(params) result = ReplicaSets().info(rs_id) result['links'] = all_replica_set_links(rs_id) # Add GET link to corresponding Server resource. 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 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 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 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 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 host_create_by_id(host_id): data = get_json(request.body) data = preset_merge(data, 'servers') data['id'] = host_id result = _host_create(data) result['links'].extend([ base_link('service'), base_link('get-releases'), server_link('get-servers'), server_link('add-server'), server_link('add-server-by-id', host_id, self_rel=True), replica_set_link('get-replica-sets'), sharded_cluster_link('get-sharded-clusters') ]) return send_result(200, result)
def sh_create_by_id(cluster_id): logger.debug("sh_create()") data = get_json(request.body) data = preset_merge(data, 'sharded_clusters') data['id'] = cluster_id result = _sh_create(data) result['links'].extend([ sharded_cluster_link('add-sharded-cluster-by-id', cluster_id, self_rel=True), base_link('service'), base_link('get-releases'), sharded_cluster_link('get-sharded-clusters'), sharded_cluster_link('add-sharded-cluster'), replica_set_link('get-replica-sets'), server_link('get-servers') ]) return send_result(200, result)
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 _server_or_rs_link(shard_doc): resource_id = shard_doc['_id'] if shard_doc.get('isReplicaSet'): return replica_set_link('get-replica-set-info', resource_id) return server_link('get-server-info', resource_id)