mirror of https://github.com/dotnet/tye.git
1 changed files with 256 additions and 1 deletions
@ -1 +1,256 @@ |
|||||
TODO |
# tye.yaml schema |
||||
|
|
||||
|
`tye.yaml` is the configuration file format for `tye`. This document describes briefly the set of supported configuration settings and elements. |
||||
|
|
||||
|
We also provide a JSON Schema which can be used by certain editors for completion and validation. See instructions [here](/src/schema/README.md). |
||||
|
|
||||
|
### Example |
||||
|
|
||||
|
```yaml |
||||
|
name: myapplication |
||||
|
services: |
||||
|
- name: backend |
||||
|
project: backend/backend.csproj |
||||
|
bindings: |
||||
|
- port: 7000 |
||||
|
- name: frontend |
||||
|
project: frontend/frontend.csproj |
||||
|
replicas: 2 |
||||
|
bindings: |
||||
|
- port: 8000 |
||||
|
- name: worker |
||||
|
project: worker/worker.csproj |
||||
|
- name: rabbit |
||||
|
dockerImage: rabbitmq:3-management |
||||
|
bindings: |
||||
|
- port: 5672 |
||||
|
protocol: rabbitmq |
||||
|
``` |
||||
|
|
||||
|
### Terms |
||||
|
|
||||
|
**application**: The *whole* application, (usually) includes multiple services. Maps conceptually to a `tye.yaml` or a `.sln`. |
||||
|
|
||||
|
**service**: An individual project, container, or process. Part of an appliction. |
||||
|
|
||||
|
**project**: A kind of service, specified by a buildable and runnable .NET project. |
||||
|
|
||||
|
**container**: A kind of service that can be run locally using tye by launching a container using Docker. |
||||
|
|
||||
|
**executable**: A kind of service that the can be run locally using an arbitrary command-line. |
||||
|
|
||||
|
## Root Element Properties |
||||
|
|
||||
|
### Root Element Example |
||||
|
|
||||
|
```yaml |
||||
|
name: myapplication |
||||
|
registry: exampleuser |
||||
|
services: |
||||
|
``` |
||||
|
|
||||
|
### Root Properties |
||||
|
|
||||
|
#### `name` (string) *required* |
||||
|
|
||||
|
Configures the name of the application. This will appear in some Kubernetes labels right now, but not many other places. |
||||
|
|
||||
|
#### `registry` (string) |
||||
|
|
||||
|
Allows storing the name of the container registry in configuration. This is used when building and deploying images for two purposes: |
||||
|
|
||||
|
- Determining how to tag the images |
||||
|
- Determining where to push the images |
||||
|
|
||||
|
The registry could be a DockerHub username (`exampleuser`) or the hostname of a container registry (`example.azureci.io`). |
||||
|
|
||||
|
If this is not specified in configuration, interactive deployments will prompt for it. |
||||
|
|
||||
|
#### `services` (`Service[]`) *required* |
||||
|
|
||||
|
Specifies the list of services. Applications must have at least one service. |
||||
|
|
||||
|
## Service |
||||
|
|
||||
|
`Service` elements appear in a list within the `services` root property. |
||||
|
|
||||
|
Services must be one of the following kind: |
||||
|
|
||||
|
- project |
||||
|
- container |
||||
|
- executable |
||||
|
- external |
||||
|
|
||||
|
The kind will be inferred based on the properties that are set. Right now there is very little error checking or validation to help enforce this. |
||||
|
|
||||
|
### Service Example |
||||
|
|
||||
|
```yaml |
||||
|
name: myapplication |
||||
|
|
||||
|
# services appear under this property |
||||
|
services: |
||||
|
# a project service |
||||
|
- name: backend |
||||
|
project: backend/backend.csproj |
||||
|
bindings: |
||||
|
- port: 7000 |
||||
|
# a container service |
||||
|
- name: rabbit |
||||
|
dockerImage: rabbitmq:3-management |
||||
|
bindings: |
||||
|
- port: 5672 |
||||
|
protocol: rabbitmq |
||||
|
``` |
||||
|
|
||||
|
### Service Properties |
||||
|
|
||||
|
#### `name` (string) *required* |
||||
|
|
||||
|
The service name. Each service must have a name, and it must be a legal DNS name: (`a-z` + `_`). |
||||
|
|
||||
|
#### `project` (string) |
||||
|
|
||||
|
The relative path from `tye.yaml` to a `.csproj` or `.fsproj`. |
||||
|
|
||||
|
Including a `project` entry marks the service as a *project*: |
||||
|
|
||||
|
- It will build and run locally using the .NET project during development. |
||||
|
- It will be packaged and deployed during deployments. |
||||
|
|
||||
|
#### `dockerImage` (string) |
||||
|
|
||||
|
The name and optional tag of an image that can be run using Docker. |
||||
|
|
||||
|
Including `dockerImage` marks the service as a *container*: |
||||
|
|
||||
|
- It will pulled and run locally using Docker during development. |
||||
|
- It will not be deployed during deployment. |
||||
|
|
||||
|
#### `executable` (string) |
||||
|
|
||||
|
The path (or filename) of an executable to launch. |
||||
|
|
||||
|
Including `executable` marks the service as an *executable*: |
||||
|
|
||||
|
- It will run locally during development. |
||||
|
- It will not be deployed during deployment. |
||||
|
|
||||
|
#### `external` (bool) |
||||
|
|
||||
|
Including `external: true` marks the service as *external*: |
||||
|
|
||||
|
- It will not run anything locally during development. |
||||
|
- It will not be deployed during deployment. |
||||
|
|
||||
|
External services are useful to provide bindings without any run or deployment behavior. |
||||
|
|
||||
|
#### `env` (`EnvironmentVariable[]`) |
||||
|
|
||||
|
A list of environment variable mappings for the service. Does not apply when the service is external. |
||||
|
|
||||
|
#### `args` (string) |
||||
|
|
||||
|
Command-line arguments to use when launching the service. Does not apply when the service is external. |
||||
|
|
||||
|
#### `replicas` (integrer) |
||||
|
|
||||
|
The number of replicas to create. Does not apply when the service is external. |
||||
|
|
||||
|
#### `build` (bool) |
||||
|
|
||||
|
Whether to build the project. Defaults to `true`. Only applies when the service is a project. |
||||
|
|
||||
|
#### `workingDirectory` (string) |
||||
|
|
||||
|
The working directory to use when launching. Only applies when the service is an executable. |
||||
|
|
||||
|
#### `bindings` (`Binding[]`) |
||||
|
|
||||
|
A list of bindings *exposed* by the service. Bindings represent protocols *provided* by a service. |
||||
|
|
||||
|
## Environment Variables |
||||
|
|
||||
|
`EnvironmentVariable` elements appear in a list inside the `env` property of a `Service`. |
||||
|
|
||||
|
### Environment Varible Example |
||||
|
|
||||
|
```yaml |
||||
|
name: myapplication |
||||
|
services: |
||||
|
- name: backend |
||||
|
project: backend/backend.csproj |
||||
|
|
||||
|
# environment variables appear here |
||||
|
env: |
||||
|
- name: SOME_KEY |
||||
|
value: SOME_VALUE |
||||
|
``` |
||||
|
|
||||
|
### Environment Variable Properties |
||||
|
|
||||
|
#### `name` (string) *required* |
||||
|
|
||||
|
The name of the environment variable. |
||||
|
|
||||
|
#### `value` (string) *required* |
||||
|
|
||||
|
The value of the environment variable. |
||||
|
|
||||
|
## Bindings |
||||
|
|
||||
|
`Binding` elements appear in a list inside the `bindings` property of a `Service`. |
||||
|
|
||||
|
Bindings represent protocols *exposed* by a service. How bindings are specified can affect both: |
||||
|
|
||||
|
- How a project is run. |
||||
|
- How [service discovery](/docs/service_discovery.md) is performed. |
||||
|
|
||||
|
Bindings should either provide: |
||||
|
|
||||
|
- A `connectionString` |
||||
|
- A `protocol` and `port` |
||||
|
- A `protocol` and `autoAssignPort: true` |
||||
|
|
||||
|
### Binding Example |
||||
|
|
||||
|
```yaml |
||||
|
name: myapplication |
||||
|
- name: rabbit |
||||
|
dockerImage: rabbitmq:3-management |
||||
|
|
||||
|
# bindings appear here |
||||
|
bindings: |
||||
|
- port: 5672 |
||||
|
protocol: rabbitmq |
||||
|
``` |
||||
|
|
||||
|
### Binding Properties |
||||
|
|
||||
|
#### `name` (string) |
||||
|
|
||||
|
The name of the binding. Binding names are optional and should be omitted when a service contains a single binding. If a service provides two or more bindings, then they all must have names. |
||||
|
|
||||
|
Names are part of the [service discovery](/docs/service_discovery.md) protocol. |
||||
|
|
||||
|
#### `connectionString` (string) |
||||
|
|
||||
|
The connection string of the binding. Connection strings should be used when connecting to the binding requires additional information besides a URL. [Service discovery](/docs/service_discovery.md) treats connection string as a single opaque value and will ignore other properties like `port`. |
||||
|
|
||||
|
As an example, connecting to a hosted redis using authentication requires a URL as well as username and password. Using a connection string is typical for databases or anything that requires authentication. |
||||
|
|
||||
|
#### `protocol` (string) |
||||
|
|
||||
|
Specifies the protocol used by the binding. The protocol is used in [service discovery](/docs/service_discovery.md) to construct a URL. It's safe to omit the `protocol` when it's not needed to connect to the service. As an example, connecting to redis without authentication only requires a hostname and port. |
||||
|
|
||||
|
#### `host` (string) |
||||
|
|
||||
|
Specifies the hostname used by the binding. The protocol is used in [service discovery](/docs/service_discovery.md) to construct a URL. It's safe to omit the `host` when localhost should be used for local development. |
||||
|
|
||||
|
#### `port` (string) |
||||
|
|
||||
|
Specifies the protocol used by the binding. The port is used in [service discovery](/docs/service_discovery.md) to construct a URL. |
||||
|
|
||||
|
#### `autoAssignPort` (bool) |
||||
|
|
||||
|
Specifies that the port should be assigned randomly. Defaults to `false`. This is currently only useful for projects - where the tye host will automatically infer bindings with `autoAssignPort: true` |
||||
Loading…
Reference in new issue