Deployment Layer#

Deployment Layer is the place where the rubber hits the road, where abstract types (components and links) get converted into specific deployments and development environments. While Design Layer is mostly theoretical, Deployment Layer is about generating configuration files, YAML, Terraform scripts, or calling Cloud APIs directly.

Deployment Layer consists of two sublayers

  1. Deployment Provider Implementations

  2. Deployment Object as a list of selected Deployment Provider Implementations that will be used for a particular deployment.

Deployment Provider Implementations#

Deployment Provider Implementations uses two kinds of objects: a Bond, and a Provider.

Bond#

A Bond object provides an additional separation from components and links to providers. Components and links connect to bonds, not directly to provider interfaces. The purpose of Bond is to hide the specifics of different provider implementations from components and links. This way, one Provider implementation can have multiple Bond implementations targetted to different components or links.

For example, there might be a new implementation for the PostgreSQL RDS instance on AWS. Then, someone else who already has a PostgreSQL component in their arsenal can write a new Bond class that connects the existing PostgreSQL component with the aforementioned new PostgreSQL provider without altering any of these two. The same goes in the other direction too, when you create a new component, you can create new Bond classes that connect with existing providers. Or when you need to create a different configuration for the existing components, links, and providers. For example, you can have a separate Bond that creates only private S3 buckets.

Bonds help you avoid changing components, links, and providers when you need to establish a new connection between the two, or when you need to establish a different kind of provider configuration.

Provider#

A Provider object implements specific cloud provider or tool integration. It might be generating YAML files, or it might be using Cloud API directly. It exposes an interface that is used by Bond objects.

Deployment Object#

Created by executing torque deployment create CLI command and serves the purpose of tying together a DAG with bonds and providers so that Torque Framework can execute build and apply commands on the DAG.

A deployment object is essentially a list of bonds and providers to be used during build and apply command execution.