# Component template

Components are defined using a YAML manifest with the following structure:

```yaml
name: branin
description: The branin analytical function
componentType: function_branin
properties:
  hostname: function-server
```

and properties:

| Field           | Type   | Value restrictions                                                                                                                                                                                                                             | Is required | Default value   | Description                                                                                                                                                                 |
| --------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`          | string | <p>should match the following regexp:</p><p><code>^\[a-zA-Z]\[a-zA-Z0-9\_]\*$</code></p><p>that is only letters, number and underscores, no initial number of underscore</p><p>Notice: this should not match the name of another component</p> | TRUE        | <p><br><br></p> | The name of the component.                                                                                                                                                  |
| `description`   | string |                                                                                                                                                                                                                                                | TRUE        | <p><br><br></p> | A description to characterize the component.                                                                                                                                |
| `componentType` | string | notice: this should match the name of an existing component-type                                                                                                                                                                               | TRUE        | <p><br><br></p> | The name of the component-type that defines the type of the component.                                                                                                      |
| `properties`    | object |                                                                                                                                                                                                                                                | FALSE       | <p><br><br></p> | General custom properties of the component. These properties can be defined freely and usually have the purpose to expose information useful for configuring the component. |

### Examples

Example of a component for OpenJDK11:

```yaml
name: JVM_1
description: The first jvm of the system
componentType: java-openjdk-11
properties:
  hostname: ycsb1.dev.akamas.io
  username: ubuntu
```

Example of a component for the Linux operating system:

```yaml
name: os_1
description: The operating system of team 1
componentType: Ubuntu-20.04
properties:
  hostname: ycsb1.dev.akamas.io
  username: ubuntu
```
