Entities

At the core of Rely.io is its software catalog. Each entity within this catalog can be represented as a JSON file, which we refer to as an entity descriptor.

Entity ID

Throughout our documentation, you'll encounter references to the "entity ID." This unique identifier is essential in Rely.io for establishing relationships between entities and retrieving information. It's crucial to note that the entity ID must be globally unique across all entities.

An entity ID is usually the very first field in the entity's descriptor.

Entity Descriptor

Regardless of whether you're using UI editing or GitOps to manage your entities, the definitions are backed by JSON files. Each file is a fully compliant OpenAPI 3 spec file, with our own specific extensions.

You can still use Rely even if you don't use OpenAPI/Swagger.

We use the OpenAPI specification as a foundation for entity and blueprint data. Since it's an open standard with official support for extensions, we can expand it to serve as an entity or blueprint descriptor specification. This approach allows for optional use of actual OpenAPI fields.

All entities have three other metadata fields besides the entity id:

  • Name: A user-friendly display name.

  • Blueprint ID: A reference to the entity's type.

  • Description (Optional): A concise overview of the entity for further context.

An entity descriptor also contains all relevant data that makes up the entity itself which might envolve:

  • Properties: The defining characteristics and attributes of an entity.

  • Relations: These indicate how the entity is connected to or interacts with other entities within Rely.

  • Sources: These specify where the entity's data originates from in the case of automated integrations with external systems via Rely's plugins.

Example Service Entity

{
  "id": "advertising",
  "blueprintId": "service",
  "title": "Advertising",
  "description": "A Helm chart for deploying a Python app for advertising purposes",
  "properties": {
    "tier": "Customer Facing",
    "readme": "https://github.com/rely.io/demo-ads/-/blob/master/README.md?ref_type=heads",
    "on-call": "tim-cook@gmail.com",
    "version": "0.1.5",
    "language": "Python",
    "lifecycle": "Production",
    "repo-link": "https://github.com/rely/ads",
    "code-owners": [
      "elon-musk@gmail.com",
      "bill-gates@gmail.com",
      "daniel-ek@gmail.com",
      "sheryl-sandberg@gmail.com",
      "reed-hastings@gmail.com"
    ],
    "handles-pii": false,
    "monitor-links": [
      "https://grafana.com",
      "https://prometheus.com",
      "https://datadog.com"
    ],
    "quality_gate_status": "Passed",
    "unit-tests-coverage": 87,
    "communication-method": "GraphQL"
  },
  "relations": {
    "team": {
      "value": "marketing-and-advertising-team"
    },
    "internal-dependencies": {
      "value": [
        "anomaly-detector",
        "load-generator",
        "purchase-processor"
      ]
    },
    "running-instances": {
      "value": [
        "ads-staging",
        "ads-security",
        "ads-dev",
        "ads-sandbox",
        "ads-production"
      ]
    },
    "GitlabRepository": {
      "value": "adversiting"
    },
  },
  "sources": {
    "automation.rely.gitlab.v1.repository-to-service.gitlab.v1.repository.adversiting": {
      "type": "automation",
      "config": {
        "automationId": "rely.gitlab.v1.repository-to-service",
        "blueprintId": "gitlab.v1.repository",
        "entityId": "adversiting",
        "fields": [
          "title",
          "description",
          "properties/readme",
          "properties/language",
          "properties/repo-link",
          "relations/GitlabRepository"
        ]
      },
      "activeMappings": {
        "title": null,
        "description": null,
        "properties/readme": null,
        "properties/language": null,
        "properties/repo-link": null,
        "relations/GitlabRepository": null
      }
    },
}

Learn More

Last updated