Skip to content

Commit 8832afe

Browse files
authored
Merge pull request #57 from dbt-labs/deferral-envid
Allow deferring to env id
2 parents 48d21f7 + 41b3dd5 commit 8832afe

9 files changed

Lines changed: 42 additions & 6 deletions

File tree

example_jobs_file/jobs.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ jobs:
3232
job2:
3333
account_id: 43791
3434
dbt_version: null
35-
deferring_job_definition_id: 43791
35+
deferring_job_definition_id: null
36+
deferring_environment_id: 43791
3637
environment_id: 134459
3738
execute_steps:
3839
- dbt run-operation clone_all_production_schemas

example_jobs_file/jobs_with_anchors.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,18 @@ anchors:
88
hours: null
99
interval: 1
1010
type: every_hour
11+
ids_prod_env: &ids_prod_env
12+
account_id: 43791
13+
environment_id: 134459
14+
project_id: 176941
1115

1216
jobs:
1317
job1: &main_job # using parameters of a job as the anchor
14-
account_id: 43791
18+
<<: *ids_prod_env
1519
dbt_version: null
1620
deactivated: false
1721
deferring_job_definition_id: null
18-
environment_id: 134459
22+
deferring_environment_id: null
1923
execute_steps:
2024
- "dbt run --select model1+"
2125
- "dbt run --select model2+"
@@ -25,7 +29,6 @@ jobs:
2529
generate_docs: false
2630
generate_sources: true
2731
name: "My Job 1 with a new name"
28-
project_id: 176941
2932
run_generate_sources: true
3033
schedule:
3134
cron: "0 */2 * * *"
@@ -48,6 +51,7 @@ jobs:
4851
job2:
4952
<<: *main_job # << means that we take all the values from the first job but we then overwrite them
5053
deferring_job_definition_id: null
54+
deferring_environment_id: null
5155
execute_steps:
5256
- dbt run-operation clone_all_production_schemas
5357
- dbt compile

src/client/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def create_job(self, job: JobDefinition) -> JobDefinition:
8383

8484
if response.status_code >= 400:
8585
logger.error(response.json())
86+
return None
8687

8788
logger.success("Job created successfully.")
8889

src/main.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,24 @@ def validate(config, online):
268268
)
269269
online_check_issues = True
270270

271+
# In case deferral jobs are mentioned, check that they exist
272+
deferral_envs = set(
273+
[
274+
job.deferring_environment_id
275+
for job in defined_jobs
276+
if job.deferring_environment_id
277+
]
278+
)
279+
if deferral_envs:
280+
logger.info(f"Checking that Deferring Env IDs are valid")
281+
cloud_envs = dbt_cloud.get_environments()
282+
cloud_envs_ids = set([env["id"] for env in cloud_envs])
283+
if deferral_envs - cloud_envs_ids:
284+
logger.error(
285+
f"❌ The following deferral environment IDs are not valid: {deferral_envs - cloud_envs_ids}"
286+
)
287+
online_check_issues = True
288+
271289
if online_check_issues:
272290
# return an error to handle with bash/CI
273291
sys.exit(1)

src/schemas/job.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class JobDefinition(pydantic.BaseModel):
2121
settings: Settings
2222
execution: Execution = Execution()
2323
deferring_job_definition_id: Optional[int]
24+
deferring_environment_id: Optional[int]
2425
run_generate_sources: bool
2526
execute_steps: List[str]
2627
generate_docs: bool

src/schemas/load_job_schema.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@
127127
"title": "Deferring Job Definition Id",
128128
"type": ["integer", "null"]
129129
},
130+
"deferring_environment_id": {
131+
"title": "Deferring Environment Id",
132+
"type": ["integer", "null"]
133+
},
130134
"run_generate_sources": {
131135
"title": "Run Generate Sources",
132136
"type": "boolean"

tests/exporter/test_export.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def test_export_jobs_yml(capsys):
2626
execution:
2727
timeout_seconds: 0
2828
deferring_job_definition_id:
29+
deferring_environment_id:
2930
run_generate_sources: true
3031
execute_steps:
3132
- dbt source freshness
@@ -52,6 +53,7 @@ def test_export_jobs_yml(capsys):
5253
settings=Settings(threads=4, target_name="production"),
5354
execution=Execution(timeout_seconds=0),
5455
deferring_job_definition_id=None,
56+
deferring_environment_id=None,
5557
run_generate_sources=True,
5658
execute_steps=[
5759
"dbt source freshness",

tests/loader/jobs.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ jobs:
3030
job2:
3131
account_id: 43791
3232
dbt_version: null
33-
deferring_job_definition_id: 43791
33+
deferring_job_definition_id: null
34+
deferring_environment_id: 43791
3435
environment_id: 134459
3536
execute_steps:
3637
- dbt run-operation clone_all_production_schemas

tests/loader/test_loader.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def test_import_yml_no_anchor():
2828
"settings": {"threads": 4, "target_name": "production"},
2929
"execution": {"timeout_seconds": 0},
3030
"deferring_job_definition_id": None,
31+
"deferring_environment_id": None,
3132
"run_generate_sources": True,
3233
"execute_steps": [
3334
"dbt run --select model1+",
@@ -58,7 +59,8 @@ def test_import_yml_no_anchor():
5859
"name": "CI/CD run",
5960
"settings": {"threads": 4, "target_name": "TEST"},
6061
"execution": {"timeout_seconds": 0},
61-
"deferring_job_definition_id": 43791,
62+
"deferring_job_definition_id": None,
63+
"deferring_environment_id": 43791,
6264
"run_generate_sources": False,
6365
"execute_steps": [
6466
"dbt run-operation clone_all_production_schemas",
@@ -119,6 +121,7 @@ def test_import_yml_anchors():
119121
"settings": {"threads": 4, "target_name": "production"},
120122
"execution": {"timeout_seconds": 0},
121123
"deferring_job_definition_id": None,
124+
"deferring_environment_id": None,
122125
"run_generate_sources": True,
123126
"execute_steps": [
124127
"dbt run --select model1+",
@@ -151,6 +154,7 @@ def test_import_yml_anchors():
151154
"settings": {"threads": 4, "target_name": "TEST"},
152155
"execution": {"timeout_seconds": 0},
153156
"deferring_job_definition_id": None,
157+
"deferring_environment_id": None,
154158
"run_generate_sources": True,
155159
"execute_steps": [
156160
"dbt run-operation clone_all_production_schemas",

0 commit comments

Comments
 (0)