Gestalt Meta

Gestalt Meta provides user definable state management for services through REST API. It serves as the hub for Gestalt functionality. Gestalt is a cloud native project built to assist cloud native development. The Meta service provides persistence and retrieval of IT resources. It also is the hub for functionality from the other services in Gestalt.

For instance, the Gestalt Security provides authentication for the other services, including Meta, ensuring the IT resources managed by Meta are done within a secure environment. Also lambdas served by the Gestalt Laser service are based on resources defined in Meta. This is what allows the configuration of lambdas to be persistent without the Gestalt Laser service needing to manage a database.

Gestalt Meta Overview

What are resources?

Resources are any entity with a name, description, unique identifier, a type, a parent, and a set of properties. Resources are relational and can also have links to other resources. Essentially resources are persistent entities with meta data.

Meta defines resource types for organizations, workspaces, environments, lambdas, entitlements, policies, etc. Everything is a resource. Resources are stored in a postgresql database.

Gestalt Meta - Resource Actions

Definitions

All system commands are defined in terms of resource-actions. The significance of an action is twofold. On one level it is simply a string indicating what verbs are valid to a given resource-type (action-tag). At another level an Action is a complex resource defining how Meta responds to verb invocations on a resource type, capturing the location and protocol for communication with external services when necessary (action-implementation).

Verb - a simple string label giving a name to "what can be done to/with a resource". Meta attaches special meaning to a small set of verbs such as create, view, update, and delete. It is up to type-designers to define and attach 'meaning' to other verbs their type will expose. Action Tag - a simple string consisting of {prefix}.{verb} - where prefix is a value assigned to each resource type to create unique action-names, and verb is a label. For instance lambda.create is an action-tag where lambda is the prefix and create is the verb.

Action Implementation - a Meta configuration resource modeling the specific function to call in response to receiving a request for action-tag. If the called function is external and asynchronous, the Action also captures the endpoint the function will call back on (where Meta can get responses from external functions).

{
  "action": "container.promote",
  "binding": {
    "send": {
    "id": "860b95c0-5743-43cc-bb5c-ed2e9f47cc51",
    "retry": "exponential",
    "timeoutMs": 5000
    },
    "receive": {
      "id": "45612ffe-e5dd-4987-9662-85da1ff2599b",
      "timeoutMs": 5000
    }
  }
}

Example action-implementation representation

Default Action Implementations

Meta provides default action-implementations for basic HTTP methods:

Method
GET
POST
PUT
PATCH
DELETE

Meta has system-defined actions/functions for each of these requests that may be applied to any resource.