Organizing Specifications
Optimus supports two ways to deploy specifications
- REST/GRPC
- Optimus CLI deploy command
When using Optimus CLI to deploy, either manually or from a CI pipeline, it is advised to use a version control system like git. Here is a simple directory structure that can be used as a template for jobs and datastore resources, assuming there are 2 namespaces in a project.
.
├── optimus.yaml
├── README.md
├── namespace-1
│ ├── jobs
| │ ├── job1
| │ ├── job2
| │ └── this.yaml
│ └── resources
| ├── bigquery
│ │ ├── table1
│ │ ├── table2
| | └── this.yaml
│ └── postgres
│ └── table1
└── namespace-2
└── jobs
└── resources
You might have also noticed there are this.yaml
files being used in some directories. This file is used to share a
single set of configurations across multiple sub-directories. For example, if you create a file at
/namespace-1/jobs/this.yaml, then all subdirectories inside /namespaces-1/jobs will inherit this config as defaults.
If the same config is specified in subdirectory, then subdirectory will override the parent defaults.
For example a this.yaml in /namespace-1/jobs
version: 1
schedule:
interval: @daily
task:
name: bq2bq
config:
BQ_SERVICE_ACCOUNT: "{{.secret.BQ_SERVICE_ACCOUNT}}"
behavior:
depends_on_past: false
retry:
count: 1
delay: 5s
and a job.yaml in /namespace-1/jobs/job1
name: sample_replace
owner: optimus@example.io
schedule:
start_date: "2020-09-25"
interval: 0 10 * * *
behavior:
depends_on_past: true
task:
name: bq2bq
config:
project: project_name
dataset: project_dataset
table: sample_replace
load_method: REPLACE
window:
size: 48h
offset: 24h
will result in final computed job.yaml during deployment as
version: 1
name: sample_replace
owner: optimus@example.io
schedule:
start_date: "2020-10-06"
interval: 0 10 * * *
behavior:
depends_on_past: true
retry:
count: 1
delay: 5s
task:
name: bq2bq
config:
project: project_name
dataset: project_dataset
table: sample_replace
load_method: REPLACE
BQ_SERVICE_ACCOUNT: "{{.secret.BQ_SERVICE_ACCOUNT}}"
window:
size: 48h
offset: 24h