Skip to content

Commit

Permalink
Annotations (#51)
Browse files Browse the repository at this point in the history
  • Loading branch information
rachfop committed Jul 12, 2023
2 parents f4fc44d + ec4e8e2 commit 4732257
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 3 deletions.
103 changes: 103 additions & 0 deletions content/en/docs/annotations/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
---
title: "Annotations"
linkTitle: "Annotations"
weight: 5
description: >
This section covers annotations, which are used to provide additional metadata for resources.
---

One of the key features of Score is the ability to attach additional metadata to your resources using Annotations.

## How to use annotations

Use annotations to provide additional metadata for resources. Annotations are defined as a map with keys and values that provide additional information to a resource description.

To provide an annotation for a resource, specify the following:

```yml
resources:
your-resource:
metadata:
annotations:
your-annotation-key: your-annotation-value
```
The resource `your-resource` has a single annotation with the key `your-annotation-key` and the value `your-annotation-value`.

## Why use Annotations?

There are several reasons why you might want to use Annotations in your Score files:

- **Informational hints**: Annotations are used to provide additional information to anyone or anything interacting with your resources, defined in your Score file. This could be helpful instructions for developers, or hints to tools and systems about how to handle a certain resource.
- **Shared resources**: Annotations are used to provide additional information to anyone or anything interacting with your resources, defined in your Score file. This could be helpful instructions for developers, or hints to tools and systems about how to handle a certain resource.
- **System-specific info**: Some systems and tools that interact with your Score resources might require certain metadata to be present to operate correctly, such as shared resources. Annotations provide a flexible way to supply this metadata.

### Annotations example

The following is an example of using an annotation to provide additional metadata for a database service.

```yml
apiVersion: score.dev/v1b1
metadata:
name: hello-annotations
service:
ports:
www:
port: 80
targetPort: 8080
containers:
hello:
image: busybox
command:
- "/bin/echo"
args:
- "Hello Annotations"
resources:
db:
metadata:
annotations:
"my.org/version": "0.1"
type: postgres
properties:
host:
type: string
default: localhost
required: true
port:
default: 5432
```

### Shared resource example

The following is an example of using an annotation to provide additional metadata for a shared resource.

```yml
resources:
shared-db:
metadata:
annotations:
score.humanitec.io/resId: shared.postgres-db
type: postgres
properties:
host: localhost
port: 5432
```

In this example, a shared PostgreSQL database is defined with the name `shared-db`.
The annotation `score.humanitec.io/resId` is used to provide a unique identifier for this shared resource (`shared.postgres-db`).
This identifier is used by the Humanitec system to map and manage this shared resource across multiple services or applications.

{{% alert %}}
The type and properties of the resource would depend on the type of resource you are trying to define.
{{% /alert %}}

Now, any service or application that needs to use this shared resource can simply reference the identifier `shared.postgres-db`.

## Annotations vs. extension files

Annotations are used to provide additional metadata as a hint for the individual Score file instead of using the extensions file.

It is recommended to use annotations instead of [extension files]({{< relref "../extensions/_index.md" >}}), as annotations help ensure consistency across your environments and deployments, since your Workload information is stored in one file.
10 changes: 7 additions & 3 deletions content/en/docs/extensions/_index.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
---
title: "Manage extension files"
linkTitle: "Manage extensions"
weight: 4
weight: 6
description: >
Manage routes as resources, in your Humanitec applications.
---

{{% alert %}}

> It is recommned to use [annotations]({{< relref "../annotations/_index.md" >}} "Annotations") instead of extension files, as annotations help ensure consistency across your enviroments and deployments, since your Workload information is stored in one file.
> {{% /alert %}}
Score supports extension files.

## Overview

{{% alert %}}

> The `humanitec.score.yaml` extension is used by [`score-humantic` Score implementation (CLI)](https://github.com/score-spec/score-humanitec). This is an optional configuration specific for Humanitec's routes as a resource and services accounts.
{{% /alert %}}
> {{% /alert %}}
<!-- Routes Management in Applications -->

Expand Down
10 changes: 10 additions & 0 deletions content/en/docs/reference/score-spec-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ It is up to {{< glossary_tooltip text="Score implementation (CLI)" term_id="scor
```yaml
resources:
[resource-name]:
metadata: # optional
annotations: # optional
[annotation-name]: [value]
type: [resource-type]
properties: # optional
[property-name]:
Expand All @@ -87,6 +90,13 @@ resources:
- **Type**: string.
- **Constraints**: alphanumeric string.

**`metadata`**: an optional property that specifies additional resource metadata.

- **`Type`**: object.
- **`annotations`**: an optional property that specifies metadata annotations.
- **`Type`**: object.
- **`Constraints`**: alphanumeric string key-value pairs.

`resource-type`: specifies the resource in the target environment.

- **Type**: string.
Expand Down

0 comments on commit 4732257

Please sign in to comment.