Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Overview

The NDSLabs API is a RESTful interface to the NDSLabs system. The API is implemented via the NDSLabs API Server.

Key Concepts

  • Project:  A named configuration that relates an administrative user, likely represented by a client certificate, to a set of resource allocations (quotas), and re
    sources (namespace, pods/services, volumes, configurations).
  • Service definitionA specification of a logical "service" that includes a name, description, storage requirements, configuration options, and relationshi
    ps to other services. An NDSLabs "service" may be composed of multiple related containers.
  • Service library: A collection of service definitions and procedures for adding official/trusted as well as local/development services.
  • Service instance: An instance of a service configured and running in a project namespace.
  • Resource quota: A set of soft and hard limits assigned to a project (storage and compute).
  • Volume: A named, allocated storage resource that counts against the project quota and can be mounted by one or more services.

A Simple Use Case

Using the CLI for simplicity: a project administrator wants to add a set of services to their project configuration:

CommandWhat it doesResponse
list servicesLists the services in the service library that can be added to this project.

clowder

image-preview

list resourcesLists the storage resources available to this projectstorage quota: 1TB
get service clowderGets the service specification<spec>
add service clowderAdds the specified service to the projectOK
get config clowderGets the configuration options available for the service<config>
set config clowder smtp-host smtp.ncsa.illinois.eduSets a configuration option for the named servicesOK
create volume clowder-vol 10GBCreates and formats a volume named "clowder-vol"OK
attach clowder-vol clowderMakes the volume available to the serviceOK
start clowderStarts the service<status>
status clowderReturns the service status<status>
endpoint clowderReturns the service endpoint<endpoint>
add service image-previewAdds the specified service to the projectOK
link image-preview clowderLinks the specified services (in this case, by adding required rabbitmq)OK
start image-previewStarts the image preview service and updates the clowder service?<status>
stop servicesStops everything<status>
delete volume clowder-volRemoves the specified volumeOK
delete clowder image-previewRemoves the services from the projectOK

Entities

The following is a simple entity-relationship diagram intended to capture the entities, attributes, and relationships for the NDSLabs API.

Gliffy Diagram
namendslabs-api-server-erd
version3

Draft REST API

 

This is a first pass at a set of REST APIs that support the following workflows.  For actor definitions, see NDS Labs Use Cases.

...

Gliffy Diagram
namendslabs-api-server-v1

 

API Authentication

  • For the CLI, we could follow the Kubernetes API server authentication model using client certificates. They use openssl/easyrsa to sign client certificates where the common name is the username (or in our case, project namespace). 
  • This is not useful for the GUI, which might require user authentication. Perhaps we can pre-generate a password?