dbt-platform-helper 15.8.0__py3-none-any.whl → 15.10.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of dbt-platform-helper might be problematic. Click here for more details.
- dbt_platform_helper/COMMANDS.md +41 -0
- dbt_platform_helper/commands/internal.py +23 -0
- dbt_platform_helper/constants.py +2 -2
- dbt_platform_helper/domain/maintenance_page.py +25 -3
- dbt_platform_helper/domain/pipelines.py +25 -8
- dbt_platform_helper/domain/service.py +61 -1
- dbt_platform_helper/entities/platform_config_schema.py +4 -2
- dbt_platform_helper/entities/service.py +1 -1
- dbt_platform_helper/providers/terraform_manifest.py +22 -7
- dbt_platform_helper/providers/yaml_file.py +27 -0
- dbt_platform_helper/templates/environment-pipelines/main.tf +2 -2
- {dbt_platform_helper-15.8.0.dist-info → dbt_platform_helper-15.10.0.dist-info}/METADATA +7 -15
- {dbt_platform_helper-15.8.0.dist-info → dbt_platform_helper-15.10.0.dist-info}/RECORD +17 -16
- {dbt_platform_helper-15.8.0.dist-info → dbt_platform_helper-15.10.0.dist-info}/WHEEL +1 -1
- platform_helper.py +2 -0
- {dbt_platform_helper-15.8.0.dist-info → dbt_platform_helper-15.10.0.dist-info}/entry_points.txt +0 -0
- {dbt_platform_helper-15.8.0.dist-info → dbt_platform_helper-15.10.0.dist-info/licenses}/LICENSE +0 -0
dbt_platform_helper/COMMANDS.md
CHANGED
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
- [platform-helper environment generate](#platform-helper-environment-generate)
|
|
23
23
|
- [platform-helper environment generate-terraform](#platform-helper-environment-generate-terraform)
|
|
24
24
|
- [platform-helper generate](#platform-helper-generate)
|
|
25
|
+
- [platform-helper internal](#platform-helper-internal)
|
|
26
|
+
- [platform-helper internal migrate-service-manifests](#platform-helper-internal-migrate-service-manifests)
|
|
25
27
|
- [platform-helper pipeline](#platform-helper-pipeline)
|
|
26
28
|
- [platform-helper pipeline generate](#platform-helper-pipeline-generate)
|
|
27
29
|
- [platform-helper secrets](#platform-helper-secrets)
|
|
@@ -65,6 +67,7 @@ platform-helper <command> [--version]
|
|
|
65
67
|
- [`database` ↪](#platform-helper-database)
|
|
66
68
|
- [`environment` ↪](#platform-helper-environment)
|
|
67
69
|
- [`generate` ↪](#platform-helper-generate)
|
|
70
|
+
- [`internal` ↪](#platform-helper-internal)
|
|
68
71
|
- [`notify` ↪](#platform-helper-notify)
|
|
69
72
|
- [`pipeline` ↪](#platform-helper-pipeline)
|
|
70
73
|
- [`secrets` ↪](#platform-helper-secrets)
|
|
@@ -539,6 +542,44 @@ platform-helper generate
|
|
|
539
542
|
|
|
540
543
|
## Options
|
|
541
544
|
|
|
545
|
+
- `--help <boolean>` _Defaults to False._
|
|
546
|
+
- Show this message and exit.
|
|
547
|
+
|
|
548
|
+
# platform-helper internal
|
|
549
|
+
|
|
550
|
+
[↩ Parent](#platform-helper)
|
|
551
|
+
|
|
552
|
+
Internal commands for use within pipelines or by Platform Team.
|
|
553
|
+
|
|
554
|
+
## Usage
|
|
555
|
+
|
|
556
|
+
```
|
|
557
|
+
platform-helper internal migrate-service-manifests
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
## Options
|
|
561
|
+
|
|
562
|
+
- `--help <boolean>` _Defaults to False._
|
|
563
|
+
- Show this message and exit.
|
|
564
|
+
|
|
565
|
+
## Commands
|
|
566
|
+
|
|
567
|
+
- [`migrate-service-manifests` ↪](#platform-helper-internal-migrate-service-manifests)
|
|
568
|
+
|
|
569
|
+
# platform-helper internal migrate-service-manifests
|
|
570
|
+
|
|
571
|
+
[↩ Parent](#platform-helper-internal)
|
|
572
|
+
|
|
573
|
+
Migrate copilot manifests to service manifests.
|
|
574
|
+
|
|
575
|
+
## Usage
|
|
576
|
+
|
|
577
|
+
```
|
|
578
|
+
platform-helper internal migrate-service-manifests
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
## Options
|
|
582
|
+
|
|
542
583
|
- `--help <boolean>` _Defaults to False._
|
|
543
584
|
- Show this message and exit.
|
|
544
585
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import click
|
|
2
|
+
|
|
3
|
+
from dbt_platform_helper.domain.service import ServiceManager
|
|
4
|
+
from dbt_platform_helper.platform_exception import PlatformException
|
|
5
|
+
from dbt_platform_helper.providers.io import ClickIOProvider
|
|
6
|
+
from dbt_platform_helper.utils.click import ClickDocOptGroup
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@click.group(cls=ClickDocOptGroup)
|
|
10
|
+
def internal():
|
|
11
|
+
"""Internal commands for use within pipelines or by Platform Team."""
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@internal.command()
|
|
15
|
+
def migrate_service_manifests():
|
|
16
|
+
"""Migrate copilot manifests to service manifests."""
|
|
17
|
+
click_io = ClickIOProvider()
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
service_manager = ServiceManager()
|
|
21
|
+
service_manager.migrate_copilot_manifests()
|
|
22
|
+
except PlatformException as error:
|
|
23
|
+
click_io.abort_with_error(str(error))
|
dbt_platform_helper/constants.py
CHANGED
|
@@ -16,8 +16,8 @@ TERRAFORM_ECS_SERVICE_MODULE_SOURCE_OVERRIDE_ENV_VAR = (
|
|
|
16
16
|
TERRAFORM_MODULE_SOURCE_TYPE_ENV_VAR = "TERRAFORM_MODULE_SOURCE_TYPE" # "LOCAL", "SSH", "OVERRIDE"
|
|
17
17
|
IMAGE_TAG_ENV_VAR = "IMAGE_TAG"
|
|
18
18
|
PLATFORM_HELPER_PACKAGE_NAME = "dbt-platform-helper"
|
|
19
|
-
SUPPORTED_TERRAFORM_VERSION = "~> 1.
|
|
20
|
-
SUPPORTED_AWS_PROVIDER_VERSION = "~>
|
|
19
|
+
SUPPORTED_TERRAFORM_VERSION = "~> 1.11"
|
|
20
|
+
SUPPORTED_AWS_PROVIDER_VERSION = "~> 6"
|
|
21
21
|
FIRST_UPGRADABLE_PLATFORM_HELPER_MAJOR_VERSION = 13
|
|
22
22
|
|
|
23
23
|
MERGED_TPM_PLATFORM_HELPER_VERSION = 14
|
|
@@ -199,7 +199,13 @@ class MaintenancePage:
|
|
|
199
199
|
"AllowedIps",
|
|
200
200
|
next(rule_priority),
|
|
201
201
|
service_conditions,
|
|
202
|
-
[
|
|
202
|
+
[
|
|
203
|
+
{"Key": "application", "Value": app},
|
|
204
|
+
{"Key": "environment", "Value": env},
|
|
205
|
+
{"Key": "reason", "Value": "MaintenancePage"},
|
|
206
|
+
{"Key": "managed-by", "Value": "DBT Platform"},
|
|
207
|
+
{"Key": "service", "Value": svc.name},
|
|
208
|
+
],
|
|
203
209
|
)
|
|
204
210
|
self.load_balancer.create_source_ip_rule(
|
|
205
211
|
listener_arn,
|
|
@@ -208,7 +214,13 @@ class MaintenancePage:
|
|
|
208
214
|
"AllowedSourceIps",
|
|
209
215
|
next(rule_priority),
|
|
210
216
|
service_conditions,
|
|
211
|
-
[
|
|
217
|
+
[
|
|
218
|
+
{"Key": "application", "Value": app},
|
|
219
|
+
{"Key": "environment", "Value": env},
|
|
220
|
+
{"Key": "reason", "Value": "MaintenancePage"},
|
|
221
|
+
{"Key": "managed-by", "Value": "DBT Platform"},
|
|
222
|
+
{"Key": "service", "Value": svc.name},
|
|
223
|
+
],
|
|
212
224
|
)
|
|
213
225
|
|
|
214
226
|
self.load_balancer.create_header_rule(
|
|
@@ -219,7 +231,13 @@ class MaintenancePage:
|
|
|
219
231
|
"BypassIpFilter",
|
|
220
232
|
next(rule_priority),
|
|
221
233
|
service_conditions,
|
|
222
|
-
[
|
|
234
|
+
[
|
|
235
|
+
{"Key": "application", "Value": app},
|
|
236
|
+
{"Key": "environment", "Value": env},
|
|
237
|
+
{"Key": "reason", "Value": "MaintenancePage"},
|
|
238
|
+
{"Key": "managed-by", "Value": "DBT Platform"},
|
|
239
|
+
{"Key": "service", "Value": svc.name},
|
|
240
|
+
],
|
|
223
241
|
)
|
|
224
242
|
|
|
225
243
|
# add to accumilating list of conditions for maintenace page rule
|
|
@@ -267,8 +285,12 @@ class MaintenancePage:
|
|
|
267
285
|
}
|
|
268
286
|
],
|
|
269
287
|
tags=[
|
|
288
|
+
{"Key": "application", "Value": app},
|
|
289
|
+
{"Key": "environment", "Value": env},
|
|
290
|
+
{"Key": "reason", "Value": "MaintenancePage"},
|
|
270
291
|
{"Key": "name", "Value": "MaintenancePage"},
|
|
271
292
|
{"Key": "type", "Value": template},
|
|
293
|
+
{"Key": "managed-by", "Value": "DBT Platform"},
|
|
272
294
|
],
|
|
273
295
|
)
|
|
274
296
|
except Exception as e:
|
|
@@ -54,6 +54,25 @@ class Pipelines:
|
|
|
54
54
|
or self.environment_variable_provider.get(PLATFORM_HELPER_VERSION_OVERRIDE_KEY)
|
|
55
55
|
)
|
|
56
56
|
|
|
57
|
+
def _map_environment_pipeline_accounts(self, platform_config) -> list[tuple[str, str]]:
|
|
58
|
+
environment_pipelines_config = platform_config[ENVIRONMENT_PIPELINES_KEY]
|
|
59
|
+
environment_config = platform_config["environments"]
|
|
60
|
+
|
|
61
|
+
account_id_lookup = {
|
|
62
|
+
env["accounts"]["deploy"]["name"]: env["accounts"]["deploy"]["id"]
|
|
63
|
+
for env in environment_config.values()
|
|
64
|
+
if env is not None and "accounts" in env and "deploy" in env["accounts"]
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
accounts = set()
|
|
68
|
+
|
|
69
|
+
for config in environment_pipelines_config.values():
|
|
70
|
+
account = config.get("account")
|
|
71
|
+
deploy_account_id = account_id_lookup.get(account)
|
|
72
|
+
accounts.add((account, deploy_account_id))
|
|
73
|
+
|
|
74
|
+
return list(accounts)
|
|
75
|
+
|
|
57
76
|
def generate(
|
|
58
77
|
self,
|
|
59
78
|
deploy_branch: str,
|
|
@@ -107,20 +126,16 @@ class Pipelines:
|
|
|
107
126
|
)
|
|
108
127
|
|
|
109
128
|
if has_environment_pipelines:
|
|
110
|
-
|
|
111
|
-
accounts = {
|
|
112
|
-
config.get("account")
|
|
113
|
-
for config in environment_pipelines.values()
|
|
114
|
-
if "account" in config
|
|
115
|
-
}
|
|
129
|
+
accounts = self._map_environment_pipeline_accounts(platform_config)
|
|
116
130
|
|
|
117
|
-
for
|
|
131
|
+
for account_name, account_id in accounts:
|
|
118
132
|
self._generate_terraform_environment_pipeline_manifest(
|
|
119
133
|
platform_config["application"],
|
|
120
134
|
deploy_repository,
|
|
121
|
-
|
|
135
|
+
account_name,
|
|
122
136
|
env_pipeline_module_source,
|
|
123
137
|
deploy_branch,
|
|
138
|
+
account_id,
|
|
124
139
|
)
|
|
125
140
|
|
|
126
141
|
if has_codebase_pipelines:
|
|
@@ -163,6 +178,7 @@ class Pipelines:
|
|
|
163
178
|
aws_account: str,
|
|
164
179
|
module_source: str,
|
|
165
180
|
deploy_branch: str,
|
|
181
|
+
aws_account_id: str,
|
|
166
182
|
):
|
|
167
183
|
env_pipeline_template = setup_templates().get_template("environment-pipelines/main.tf")
|
|
168
184
|
|
|
@@ -175,6 +191,7 @@ class Pipelines:
|
|
|
175
191
|
"deploy_branch": deploy_branch,
|
|
176
192
|
"terraform_version": SUPPORTED_TERRAFORM_VERSION,
|
|
177
193
|
"aws_provider_version": SUPPORTED_AWS_PROVIDER_VERSION,
|
|
194
|
+
"deploy_account_id": aws_account_id,
|
|
178
195
|
}
|
|
179
196
|
)
|
|
180
197
|
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from collections import OrderedDict
|
|
3
|
+
from copy import deepcopy
|
|
1
4
|
from datetime import datetime
|
|
2
5
|
from importlib.metadata import version
|
|
3
6
|
from pathlib import Path
|
|
4
7
|
|
|
5
8
|
from dbt_platform_helper.constants import IMAGE_TAG_ENV_VAR
|
|
9
|
+
from dbt_platform_helper.constants import PLATFORM_HELPER_PACKAGE_NAME
|
|
6
10
|
from dbt_platform_helper.constants import PLATFORM_HELPER_VERSION_OVERRIDE_KEY
|
|
7
11
|
from dbt_platform_helper.constants import SERVICE_CONFIG_FILE
|
|
8
12
|
from dbt_platform_helper.constants import SERVICE_DIRECTORY
|
|
@@ -21,15 +25,18 @@ from dbt_platform_helper.providers.config_validator import ConfigValidator
|
|
|
21
25
|
from dbt_platform_helper.providers.environment_variable import (
|
|
22
26
|
EnvironmentVariableProvider,
|
|
23
27
|
)
|
|
28
|
+
from dbt_platform_helper.providers.files import FileProvider
|
|
24
29
|
from dbt_platform_helper.providers.io import ClickIOProvider
|
|
25
30
|
from dbt_platform_helper.providers.terraform_manifest import TerraformManifestProvider
|
|
31
|
+
from dbt_platform_helper.providers.version import InstalledVersionProvider
|
|
26
32
|
from dbt_platform_helper.providers.yaml_file import YamlFileProvider
|
|
27
33
|
from dbt_platform_helper.utils.application import load_application
|
|
28
34
|
from dbt_platform_helper.utils.deep_merge import deep_merge
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
SERVICE_TYPES = ["Load Balanced Web Service", "Backend Service"]
|
|
31
37
|
|
|
32
38
|
|
|
39
|
+
# TODO add schema version to service config
|
|
33
40
|
class ServiceManager:
|
|
34
41
|
def __init__(
|
|
35
42
|
self,
|
|
@@ -41,6 +48,7 @@ class ServiceManager:
|
|
|
41
48
|
manifest_provider: TerraformManifestProvider = None,
|
|
42
49
|
platform_helper_version_override: str = None,
|
|
43
50
|
load_application=load_application,
|
|
51
|
+
installed_version_provider: InstalledVersionProvider = InstalledVersionProvider(),
|
|
44
52
|
):
|
|
45
53
|
|
|
46
54
|
self.file_provider = file_provider
|
|
@@ -56,6 +64,7 @@ class ServiceManager:
|
|
|
56
64
|
or self.environment_variable_provider.get(PLATFORM_HELPER_VERSION_OVERRIDE_KEY)
|
|
57
65
|
)
|
|
58
66
|
self.load_application = load_application
|
|
67
|
+
self.installed_version_provider = installed_version_provider
|
|
59
68
|
|
|
60
69
|
def generate(self, environments: list[str], services: list[str], image_tag_flag: str = None):
|
|
61
70
|
|
|
@@ -151,3 +160,54 @@ class ServiceManager:
|
|
|
151
160
|
config,
|
|
152
161
|
module_source_override,
|
|
153
162
|
)
|
|
163
|
+
|
|
164
|
+
def migrate_copilot_manifests(self) -> None:
|
|
165
|
+
service_directory = Path("services/")
|
|
166
|
+
service_directory.mkdir(parents=True, exist_ok=True)
|
|
167
|
+
|
|
168
|
+
for dirname, _, filenames in os.walk("copilot"):
|
|
169
|
+
if "manifest.yml" in filenames and "environments" not in dirname:
|
|
170
|
+
copilot_manifest = self.file_provider.load(f"{dirname}/manifest.yml")
|
|
171
|
+
service_manifest = OrderedDict(deepcopy(copilot_manifest))
|
|
172
|
+
|
|
173
|
+
if service_manifest["type"] not in SERVICE_TYPES:
|
|
174
|
+
continue
|
|
175
|
+
|
|
176
|
+
if "environments" in service_manifest:
|
|
177
|
+
for env in service_manifest["environments"]:
|
|
178
|
+
env_config = service_manifest["environments"][env]
|
|
179
|
+
if "http" in env_config:
|
|
180
|
+
if "alb" in env_config["http"]:
|
|
181
|
+
del env_config["http"]["alb"]
|
|
182
|
+
|
|
183
|
+
service_manifest = self.file_provider.find_and_replace(
|
|
184
|
+
service_manifest,
|
|
185
|
+
"${COPILOT_APPLICATION_NAME}",
|
|
186
|
+
"${PLATFORM_APPLICATION_NAME}",
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
service_manifest = self.file_provider.find_and_replace(
|
|
190
|
+
service_manifest,
|
|
191
|
+
"${COPILOT_ENVIRONMENT_NAME}",
|
|
192
|
+
"${PLATFORM_ENVIRONMENT_NAME}",
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
service_manifest = self.file_provider.remove_empty_keys(service_manifest)
|
|
196
|
+
|
|
197
|
+
service_path = service_directory / service_manifest["name"]
|
|
198
|
+
|
|
199
|
+
self.io.info(
|
|
200
|
+
FileProvider.mkfile(
|
|
201
|
+
service_path,
|
|
202
|
+
"service-config.yml",
|
|
203
|
+
"",
|
|
204
|
+
overwrite=True,
|
|
205
|
+
)
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
current_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
209
|
+
message = f"# Generated by platform-helper {self.installed_version_provider.get_semantic_version(PLATFORM_HELPER_PACKAGE_NAME)} / {current_date}.\n\n"
|
|
210
|
+
|
|
211
|
+
self.file_provider.write(
|
|
212
|
+
f"{service_path}/service-config.yml", dict(service_manifest), message
|
|
213
|
+
)
|
|
@@ -114,7 +114,6 @@ class PlatformConfigSchema:
|
|
|
114
114
|
Optional("default_waf"): str,
|
|
115
115
|
Optional("domain_prefix"): str,
|
|
116
116
|
Optional("enable_logging"): bool,
|
|
117
|
-
Optional("env_root"): str,
|
|
118
117
|
Optional("forwarded_values_forward"): str,
|
|
119
118
|
Optional("forwarded_values_headers"): [str],
|
|
120
119
|
Optional("forwarded_values_query_string"): bool,
|
|
@@ -293,6 +292,7 @@ class PlatformConfigSchema:
|
|
|
293
292
|
@staticmethod
|
|
294
293
|
def __postgres_schema() -> dict:
|
|
295
294
|
_valid_postgres_plans = Or(*plan_manager.get_plan_names("postgres"))
|
|
295
|
+
_valid_postgres_version = Or(int, float)
|
|
296
296
|
|
|
297
297
|
# TODO: DBTP-1943: Move to Postgres provider?
|
|
298
298
|
_valid_postgres_storage_types = Or("gp2", "gp3", "io1", "io2")
|
|
@@ -305,11 +305,13 @@ class PlatformConfigSchema:
|
|
|
305
305
|
|
|
306
306
|
return {
|
|
307
307
|
"type": "postgres",
|
|
308
|
-
"version":
|
|
308
|
+
Optional("version"): _valid_postgres_version,
|
|
309
309
|
Optional("deletion_policy"): PlatformConfigSchema.__valid_postgres_deletion_policy(),
|
|
310
310
|
Optional("environments"): {
|
|
311
311
|
PlatformConfigSchema.__valid_environment_name(): {
|
|
312
|
+
Optional("apply_immediately"): bool,
|
|
312
313
|
Optional("plan"): _valid_postgres_plans,
|
|
314
|
+
Optional("version"): (Or(int, float)),
|
|
313
315
|
Optional("volume_size"): PlatformConfigSchema.is_integer_between(20, 10000),
|
|
314
316
|
Optional("iops"): PlatformConfigSchema.is_integer_between(1000, 9950),
|
|
315
317
|
Optional("snapshot_id"): str,
|
|
@@ -30,6 +30,7 @@ class TerraformManifestProvider:
|
|
|
30
30
|
service_dir = f"terraform/services/{environment}/{config_object.name}"
|
|
31
31
|
platform_config = ConfigProvider.apply_environment_defaults(platform_config)
|
|
32
32
|
account = self._get_account_for_env(environment, platform_config)
|
|
33
|
+
deploy_to_account_id = self._get_account_id_for_account(account, platform_config)
|
|
33
34
|
state_key_suffix = f"{config_object.name}-{environment}"
|
|
34
35
|
|
|
35
36
|
terraform = {}
|
|
@@ -37,7 +38,7 @@ class TerraformManifestProvider:
|
|
|
37
38
|
|
|
38
39
|
self._add_service_locals(terraform, environment, image_tag)
|
|
39
40
|
|
|
40
|
-
self._add_provider(terraform, account)
|
|
41
|
+
self._add_provider(terraform, account, deploy_to_account_id)
|
|
41
42
|
self._add_backend(
|
|
42
43
|
terraform, platform_config, account, f"tfstate/services/{state_key_suffix}.tfstate"
|
|
43
44
|
)
|
|
@@ -54,11 +55,13 @@ class TerraformManifestProvider:
|
|
|
54
55
|
"application": '${local.platform_config["application"]}',
|
|
55
56
|
"environments": '${local.platform_config["environments"]}',
|
|
56
57
|
"env_config": '${{for name, config in local.environments: name => merge(lookup(local.environments, "*", {}), config)}}',
|
|
57
|
-
"service_config": '${yamldecode(templatefile("./service-config.yml", {
|
|
58
|
+
"service_config": '${yamldecode(templatefile("./service-config.yml", {PLATFORM_ENVIRONMENT_NAME = local.environment, IMAGE_TAG = local.image_tag}))}',
|
|
58
59
|
"raw_env_config": '${local.platform_config["environments"]}',
|
|
59
60
|
"combined_env_config": '${{for name, config in local.raw_env_config: name => merge(lookup(local.raw_env_config, "*", {}), config)}}',
|
|
60
61
|
"service_deployment_mode": '${lookup(local.combined_env_config[local.environment], "service-deployment-mode", "copilot")}',
|
|
61
62
|
"non_copilot_service_deployment_mode": '${local.service_deployment_mode == "dual-deploy-copilot-traffic" || local.service_deployment_mode == "dual-deploy-platform-traffic" || local.service_deployment_mode == "platform" ? 1 : 0}',
|
|
63
|
+
"custom_iam_policy_path": '${abspath(format("%s/../../../../services/%s/custom-iam-policy/%s.yml", path.module, local.service_config.name, local.environment))}',
|
|
64
|
+
"custom_iam_policy_json": "${fileexists(local.custom_iam_policy_path) ? jsonencode(yamldecode(file(local.custom_iam_policy_path))) : null}",
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
def _add_service_module(
|
|
@@ -76,6 +79,8 @@ class TerraformManifestProvider:
|
|
|
76
79
|
"environment": "${local.environment}",
|
|
77
80
|
"service_config": "${local.service_config}",
|
|
78
81
|
"env_config": "${local.env_config}",
|
|
82
|
+
"platform_extensions": '${local.platform_config["extensions"]}',
|
|
83
|
+
"custom_iam_policy_json": "${local.custom_iam_policy_json}",
|
|
79
84
|
}
|
|
80
85
|
}
|
|
81
86
|
|
|
@@ -88,12 +93,13 @@ class TerraformManifestProvider:
|
|
|
88
93
|
module_source: str,
|
|
89
94
|
):
|
|
90
95
|
default_account = self._get_account_for_env("*", platform_config)
|
|
96
|
+
deploy_to_account_id = self._get_account_id_for_account(default_account, platform_config)
|
|
91
97
|
state_key_suffix = f"{platform_config['application']}-codebase-pipelines"
|
|
92
98
|
|
|
93
99
|
terraform = {}
|
|
94
100
|
self._add_header(terraform)
|
|
95
101
|
self._add_codebase_pipeline_locals(terraform)
|
|
96
|
-
self._add_provider(terraform, default_account)
|
|
102
|
+
self._add_provider(terraform, default_account, deploy_to_account_id)
|
|
97
103
|
self._add_backend(
|
|
98
104
|
terraform,
|
|
99
105
|
platform_config,
|
|
@@ -142,6 +148,16 @@ class TerraformManifestProvider:
|
|
|
142
148
|
)
|
|
143
149
|
return account
|
|
144
150
|
|
|
151
|
+
@staticmethod
|
|
152
|
+
def _get_account_id_for_account(account_name, platform_config):
|
|
153
|
+
environment_config = platform_config["environments"]
|
|
154
|
+
account_id_lookup = {
|
|
155
|
+
env["accounts"]["deploy"]["name"]: env["accounts"]["deploy"]["id"]
|
|
156
|
+
for env in environment_config.values()
|
|
157
|
+
if env is not None and "accounts" in env and "deploy" in env["accounts"]
|
|
158
|
+
}
|
|
159
|
+
return account_id_lookup.get(account_name)
|
|
160
|
+
|
|
145
161
|
@staticmethod
|
|
146
162
|
def _add_header(terraform: dict):
|
|
147
163
|
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
@@ -160,12 +176,11 @@ class TerraformManifestProvider:
|
|
|
160
176
|
}
|
|
161
177
|
|
|
162
178
|
@staticmethod
|
|
163
|
-
def _add_provider(terraform: dict,
|
|
179
|
+
def _add_provider(terraform: dict, deploy_to_account: str, deploy_to_account_id: str):
|
|
164
180
|
terraform["provider"] = {"aws": {}}
|
|
165
181
|
terraform["provider"]["aws"]["region"] = "eu-west-2"
|
|
166
|
-
terraform["provider"]["aws"]["profile"] =
|
|
167
|
-
terraform["provider"]["aws"]["
|
|
168
|
-
terraform["provider"]["aws"]["shared_credentials_files"] = ["~/.aws/config"]
|
|
182
|
+
terraform["provider"]["aws"]["profile"] = deploy_to_account
|
|
183
|
+
terraform["provider"]["aws"]["allowed_account_ids"] = [deploy_to_account_id]
|
|
169
184
|
|
|
170
185
|
@staticmethod
|
|
171
186
|
def _add_backend(terraform: dict, platform_config: dict, account: str, state_key: str):
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from collections import OrderedDict
|
|
1
2
|
from pathlib import Path
|
|
2
3
|
|
|
3
4
|
import yaml
|
|
@@ -84,6 +85,32 @@ class YamlFileProvider:
|
|
|
84
85
|
if duplicate_keys:
|
|
85
86
|
raise DuplicateKeysException(",".join(duplicate_keys))
|
|
86
87
|
|
|
88
|
+
@staticmethod
|
|
89
|
+
def remove_empty_keys(config: (dict, OrderedDict)) -> (dict, OrderedDict):
|
|
90
|
+
cleaned = config.__class__()
|
|
91
|
+
|
|
92
|
+
for k, v in config.items():
|
|
93
|
+
if isinstance(v, (dict, OrderedDict)):
|
|
94
|
+
v = YamlFileProvider.remove_empty_keys(v)
|
|
95
|
+
if v not in ("", None, [], {}, ()):
|
|
96
|
+
cleaned[k] = v
|
|
97
|
+
|
|
98
|
+
return cleaned
|
|
99
|
+
|
|
100
|
+
@staticmethod
|
|
101
|
+
def find_and_replace(config, string: str, replacement: str):
|
|
102
|
+
if isinstance(config, (dict, OrderedDict)):
|
|
103
|
+
return {
|
|
104
|
+
k: YamlFileProvider.find_and_replace(v, string, replacement)
|
|
105
|
+
for k, v in config.items()
|
|
106
|
+
}
|
|
107
|
+
elif isinstance(config, list):
|
|
108
|
+
return [YamlFileProvider.find_and_replace(item, string, replacement) for item in config]
|
|
109
|
+
elif isinstance(config, str):
|
|
110
|
+
return config.replace(string, replacement)
|
|
111
|
+
else:
|
|
112
|
+
return replacement if config == string else config
|
|
113
|
+
|
|
87
114
|
|
|
88
115
|
def account_number_representer(dumper, data):
|
|
89
116
|
if data.isdigit():
|
|
@@ -10,10 +10,10 @@ locals {
|
|
|
10
10
|
provider "aws" {
|
|
11
11
|
region = "eu-west-2"
|
|
12
12
|
profile = "{{ aws_account }}"
|
|
13
|
-
|
|
14
|
-
shared_credentials_files = ["~/.aws/config"]
|
|
13
|
+
allowed_account_ids = ["{{ deploy_account_id }}"]
|
|
15
14
|
}
|
|
16
15
|
|
|
16
|
+
|
|
17
17
|
terraform {
|
|
18
18
|
required_version = "{{ terraform_version }}"
|
|
19
19
|
backend "s3" {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: dbt-platform-helper
|
|
3
|
-
Version: 15.
|
|
3
|
+
Version: 15.10.0
|
|
4
4
|
Summary: Set of tools to help transfer applications/services from GOV.UK PaaS to DBT PaaS augmenting AWS Copilot.
|
|
5
5
|
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Author: Department for Business and Trade Platform Team
|
|
7
8
|
Author-email: sre-team@digital.trade.gov.uk
|
|
8
9
|
Requires-Python: >3.9.1,<4.0
|
|
@@ -12,28 +13,19 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
12
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
14
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
17
|
Requires-Dist: Jinja2 (==3.1.6)
|
|
16
|
-
Requires-Dist: PyYAML (==6.0.2)
|
|
17
|
-
Requires-Dist: aiohttp (>=3.11.16,<4.0.0)
|
|
18
18
|
Requires-Dist: boto3 (>=1.35.2,<2.0.0)
|
|
19
|
-
Requires-Dist: boto3-stubs (>=1.26.148,<2.0.0)
|
|
20
19
|
Requires-Dist: botocore (>=1.34.85,<2.0.0)
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist: cfn-flip (==1.3.0)
|
|
23
|
-
Requires-Dist: cfn-lint (>=1.4.2,<2.0.0)
|
|
24
|
-
Requires-Dist: checkov (>=3.2.405,<4.0.0)
|
|
20
|
+
Requires-Dist: cfn-flip (>=1.3.0,<2.0.0)
|
|
25
21
|
Requires-Dist: click (>=8.1.3,<9.0.0)
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist: jinja2-simple-tags (>=0.5.0,<0.6.0)
|
|
28
|
-
Requires-Dist: jsonschema (>=4.17.0,<4.18.0)
|
|
29
|
-
Requires-Dist: mypy-boto3-codebuild (>=1.26.0.post1,<2.0.0)
|
|
22
|
+
Requires-Dist: jinja2-simple-tags (>=0.5,<0.7)
|
|
30
23
|
Requires-Dist: prettytable (>=3.9.0,<4.0.0)
|
|
31
24
|
Requires-Dist: psycopg2-binary (>=2.9.9,<3.0.0)
|
|
25
|
+
Requires-Dist: pydantic (>=2.11.7,<3.0.0)
|
|
32
26
|
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
|
33
27
|
Requires-Dist: schema (==0.7.5)
|
|
34
|
-
Requires-Dist: semver (>=3.0.2,<4.0.0)
|
|
35
28
|
Requires-Dist: slack-sdk (>=3.27.1,<4.0.0)
|
|
36
|
-
Requires-Dist: tomlkit (>=0.12.2,<0.14.0)
|
|
37
29
|
Requires-Dist: yamllint (>=1.35.1,<2.0.0)
|
|
38
30
|
Description-Content-Type: text/markdown
|
|
39
31
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
dbt_platform_helper/COMMANDS.md,sha256=
|
|
1
|
+
dbt_platform_helper/COMMANDS.md,sha256=LPF1aREzwiYsoCnWRyglezdvRfJfMy3M7IIzOkO9trI,26014
|
|
2
2
|
dbt_platform_helper/README.md,sha256=B0qN2_u_ASqqgkGDWY2iwNGZt_9tUgMb9XqtaTuzYjw,1530
|
|
3
3
|
dbt_platform_helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
dbt_platform_helper/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -10,12 +10,13 @@ dbt_platform_helper/commands/copilot.py,sha256=L9UUuqD62q0aFrTTEUla3A1WJBz-vFBfV
|
|
|
10
10
|
dbt_platform_helper/commands/database.py,sha256=2RJZEzaSqcNtDG1M2mZw-nB6agAd3GNAJsg2pjFF7vc,4407
|
|
11
11
|
dbt_platform_helper/commands/environment.py,sha256=zexiry6_dbOmD8w2lBrgdcFQKAG7XyJg9pvNtwtgPRk,3616
|
|
12
12
|
dbt_platform_helper/commands/generate.py,sha256=4M0ZiGN2w-bwgPMxeItFfT6vA7sOMjuceHEN7RAYkhc,735
|
|
13
|
+
dbt_platform_helper/commands/internal.py,sha256=IzPEyie6lmiNATQ3sYDvDgvqJz__Eaz-3VzUaUtzmNQ,730
|
|
13
14
|
dbt_platform_helper/commands/notify.py,sha256=DMXA0AHot6-7CMzmY0PXPMMBVnLgvQgXr6np6OnSQh4,3401
|
|
14
15
|
dbt_platform_helper/commands/pipeline.py,sha256=PGpDDmyReVa4gdpXDwJEsHN51f5MgTIbm2AibTkuWrE,2580
|
|
15
16
|
dbt_platform_helper/commands/secrets.py,sha256=AMwLCi7uxuMMfhDfGD8OcuIYMzU8q2VQXWxaiuztvzA,3296
|
|
16
17
|
dbt_platform_helper/commands/service.py,sha256=Lqo4vmNHxa0ofTWIYEpwKoyT1iqsTCkMjz3HeqSE4og,1702
|
|
17
18
|
dbt_platform_helper/commands/version.py,sha256=2GltWeeN7cqhVj9FhYWSbXSQSyNILHVNOeANGWtAllY,1097
|
|
18
|
-
dbt_platform_helper/constants.py,sha256=
|
|
19
|
+
dbt_platform_helper/constants.py,sha256=vIe6SyesBDtkjgRieT-Ui1ZLS_4c1YoqN7JE9qXt1uQ,1858
|
|
19
20
|
dbt_platform_helper/default-extensions.yml,sha256=SU1ZitskbuEBpvE7efc3s56eAUF11j70brhj_XrNMMo,493
|
|
20
21
|
dbt_platform_helper/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
22
|
dbt_platform_helper/domain/codebase.py,sha256=2hJoBiDB2ciOudT_YUR44XV0ZQPWUJld_UIuds4XOt8,12481
|
|
@@ -24,16 +25,16 @@ dbt_platform_helper/domain/config.py,sha256=Iyf-lV4YDD6BHH-RRaTvp-7qPS8BYeHM_SkS
|
|
|
24
25
|
dbt_platform_helper/domain/copilot.py,sha256=g8W2LaskyhOvtNoCoNbwucGTrfdAzj-AJ0J98tgLbhA,15138
|
|
25
26
|
dbt_platform_helper/domain/copilot_environment.py,sha256=fL3XJCOfO0BJRCrCoBPFCcshrQoX1FeSYNTziOEaH4A,9093
|
|
26
27
|
dbt_platform_helper/domain/database_copy.py,sha256=4A84xqj3c_VjYlXb81B8Kt8us8IcCQVVF6GyPAAmwyo,9638
|
|
27
|
-
dbt_platform_helper/domain/maintenance_page.py,sha256=
|
|
28
|
+
dbt_platform_helper/domain/maintenance_page.py,sha256=pTY_GXAMzqowdLCXM7BmsbsUeZ8oPO4mI8pUae66cjU,15786
|
|
28
29
|
dbt_platform_helper/domain/notify.py,sha256=_BWj5znDWtrSdJ5xzDBgnao4ukliBA5wiUZGobIDyiI,1894
|
|
29
|
-
dbt_platform_helper/domain/pipelines.py,sha256=
|
|
30
|
+
dbt_platform_helper/domain/pipelines.py,sha256=NrH9dl5Pzdds9TdWJmPZmgyBhHfcaN6byouBWI0W67s,8565
|
|
30
31
|
dbt_platform_helper/domain/plans.py,sha256=X5-jKGiJDVWn0CRH1k5aV74fTH0E41HqFQcCo5kB4hI,1160
|
|
31
|
-
dbt_platform_helper/domain/service.py,sha256=
|
|
32
|
+
dbt_platform_helper/domain/service.py,sha256=ByEXzGw_yr80b4FoI_TJEssB2oWcx_DAGFqOObD5mu4,9482
|
|
32
33
|
dbt_platform_helper/domain/terraform_environment.py,sha256=g9PSuZeVXgboGNDXU7OGMiRATd67NU8S92HUGri1fbo,2471
|
|
33
34
|
dbt_platform_helper/domain/versioning.py,sha256=pIL8VPAJHqX5kJBp3QIxII5vmUo4aIYW_U9u_KxUJd0,5494
|
|
34
|
-
dbt_platform_helper/entities/platform_config_schema.py,sha256=
|
|
35
|
+
dbt_platform_helper/entities/platform_config_schema.py,sha256=8j6OK_YpU_oXY9pJg4A1TjHvSX-T8rzSfHTHbvvSnis,27682
|
|
35
36
|
dbt_platform_helper/entities/semantic_version.py,sha256=VgQ6V6OgSaleuVmMB8Kl_yLoakXl2auapJTDbK00mfc,2679
|
|
36
|
-
dbt_platform_helper/entities/service.py,sha256=
|
|
37
|
+
dbt_platform_helper/entities/service.py,sha256=GExA0gOiKIcY3WX4vx_j9VSv6BAeRm9-tIUbs7YkyFI,4169
|
|
37
38
|
dbt_platform_helper/jinja2_tags.py,sha256=hKG6RS3zlxJHQ-Op9r2U2-MhWp4s3lZir4Ihe24ApJ0,540
|
|
38
39
|
dbt_platform_helper/platform_exception.py,sha256=HGfCYRD20REsynqMKmyZndTfdkMd5dLSIEB2qGGCeP8,244
|
|
39
40
|
dbt_platform_helper/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -61,12 +62,12 @@ dbt_platform_helper/providers/schema_migrations/schema_v0_to_v1_migration.py,sha
|
|
|
61
62
|
dbt_platform_helper/providers/schema_migrator.py,sha256=qk14k3hMz1av9VrxHyJw2OKJLQnCBv_ugOoxZr3tFXQ,2854
|
|
62
63
|
dbt_platform_helper/providers/secrets.py,sha256=mOTIrcRRxxV2tS40U8onAjWekfPS3NzCvvyCMjr_yrU,5327
|
|
63
64
|
dbt_platform_helper/providers/slack_channel_notifier.py,sha256=G8etEcaBQSNHg8BnyC5UPv6l3vUB14cYWjcaAQksaEk,2135
|
|
64
|
-
dbt_platform_helper/providers/terraform_manifest.py,sha256=
|
|
65
|
+
dbt_platform_helper/providers/terraform_manifest.py,sha256=SEdlylBIpe0qsQFEG0ttJeoE9BthkzJ7VGQOfgOoC3g,14274
|
|
65
66
|
dbt_platform_helper/providers/validation.py,sha256=i2g-Mrd4hy_fGIfGa6ZQy4vTJ40OM44Fe_XpEifGWxs,126
|
|
66
67
|
dbt_platform_helper/providers/version.py,sha256=QNGrV5nyJi0JysXowYUU4OrXGDn27WmFezlV8benpdY,4251
|
|
67
68
|
dbt_platform_helper/providers/version_status.py,sha256=qafnhZrEc9k1cvXJpvJhkGj6WtkzcsoQhqS_Y6JXy48,929
|
|
68
69
|
dbt_platform_helper/providers/vpc.py,sha256=KdgwyHv2RwNpq16Sa2FtWm7DMJlTNmsPbXkbMNMYiQo,4082
|
|
69
|
-
dbt_platform_helper/providers/yaml_file.py,sha256=
|
|
70
|
+
dbt_platform_helper/providers/yaml_file.py,sha256=pgSgC20_Se43HfMbpkTGyn4MkXkuA963t9djxxBoJnI,3902
|
|
70
71
|
dbt_platform_helper/templates/.copilot/config.yml,sha256=J_bA9sCtBdCPBRImpCBRnYvhQd4vpLYIXIU-lq9vbkA,158
|
|
71
72
|
dbt_platform_helper/templates/.copilot/image_build_run.sh,sha256=adYucYXEB-kAgZNjTQo0T6EIAY8sh_xCEvVhWKKQ8mw,164
|
|
72
73
|
dbt_platform_helper/templates/.copilot/phases/build.sh,sha256=umKXePcRvx4XyrRY0fAWIyYFtNjqBI2L8vIJk-V7C60,121
|
|
@@ -86,7 +87,7 @@ dbt_platform_helper/templates/create-codebuild-role.json,sha256=THJgIKi8rWwDzhg5
|
|
|
86
87
|
dbt_platform_helper/templates/custom-codebuild-role-policy.json,sha256=8xyCofilPhV1Yjt3OnQLcI2kZ35mk2c07GcqYrKxuoI,1180
|
|
87
88
|
dbt_platform_helper/templates/env/manifest.yml,sha256=VCEj_y3jdfnPYi6gmyrwiEqzHYjpaJDANbvswmkiLA0,802
|
|
88
89
|
dbt_platform_helper/templates/env/terraform-overrides/cfn.patches.yml,sha256=cFlg69fvi9kzpz13ZAeY1asseZ6TuUex-6s76jG3oL4,259
|
|
89
|
-
dbt_platform_helper/templates/environment-pipelines/main.tf,sha256=
|
|
90
|
+
dbt_platform_helper/templates/environment-pipelines/main.tf,sha256=iQQAHz_rE6ksgF8Yb_wXrVxgu8H0tenB8nsl43-RmOc,1787
|
|
90
91
|
dbt_platform_helper/templates/svc/maintenance_pages/default.html,sha256=OTZ-qwwSXu7PFbsgp4kppdm1lsg_iHK7FCFqhPnvrEs,741
|
|
91
92
|
dbt_platform_helper/templates/svc/maintenance_pages/dmas-migration.html,sha256=qvI6tHuI0UQbMBCuvPgK1a_zLANB6w7KVo9N5d8r-i0,829
|
|
92
93
|
dbt_platform_helper/templates/svc/maintenance_pages/migration.html,sha256=GiQsOiuaMFb7jG5_wU3V7BMcByHBl9fOBgrNf8quYlw,783
|
|
@@ -102,12 +103,12 @@ dbt_platform_helper/utils/git.py,sha256=9jyLhv37KKE6r-_hb3zvjhTbluA81kdrOdNeG6MB
|
|
|
102
103
|
dbt_platform_helper/utils/messages.py,sha256=nWA7BWLb7ND0WH5TejDN4OQUJSKYBxU4tyCzteCrfT0,142
|
|
103
104
|
dbt_platform_helper/utils/template.py,sha256=g-Db-0I6a6diOHkgK1nYA0IxJSO4TRrjqOvlyeOR32o,950
|
|
104
105
|
dbt_platform_helper/utils/validation.py,sha256=W5jKC2zp5Q7cJ0PT57GB-s9FkJXrNt1jmWojXRFymcY,1187
|
|
105
|
-
platform_helper.py,sha256=
|
|
106
|
+
platform_helper.py,sha256=APhyqhU6PYsuocg0fzPAwbUnqUxmoikYAlUIJSHsAnI,2175
|
|
106
107
|
terraform/elasticache-redis/plans.yml,sha256=efJfkLuLC_5TwhLb9DalKHOuZFO79y6iei6Dg_tqKjI,1831
|
|
107
108
|
terraform/opensearch/plans.yml,sha256=lQbUSNMGfvUeDMcGx8mSwzGQhMJU3EZ4J4tPzPKaq6c,1471
|
|
108
109
|
terraform/postgres/plans.yml,sha256=plwCklW1VB_tNJFyUduRMZx9UANgiWH_7TGLWUaUEus,2553
|
|
109
|
-
dbt_platform_helper-15.
|
|
110
|
-
dbt_platform_helper-15.
|
|
111
|
-
dbt_platform_helper-15.
|
|
112
|
-
dbt_platform_helper-15.
|
|
113
|
-
dbt_platform_helper-15.
|
|
110
|
+
dbt_platform_helper-15.10.0.dist-info/METADATA,sha256=pf68aOIRfj_5MxXS2W9aTBmNwrJKhaVUbd6BgJA4LWU,2802
|
|
111
|
+
dbt_platform_helper-15.10.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
112
|
+
dbt_platform_helper-15.10.0.dist-info/entry_points.txt,sha256=QhbY8F434A-onsg0-FsdMd2U6HKh6Q7yCFFZrGUh5-M,67
|
|
113
|
+
dbt_platform_helper-15.10.0.dist-info/licenses/LICENSE,sha256=dP79lN73--7LMApnankTGLqDbImXg8iYFqWgnExGkGk,1090
|
|
114
|
+
dbt_platform_helper-15.10.0.dist-info/RECORD,,
|
platform_helper.py
CHANGED
|
@@ -12,6 +12,7 @@ from dbt_platform_helper.commands.copilot import copilot as copilot_commands
|
|
|
12
12
|
from dbt_platform_helper.commands.database import database as database_commands
|
|
13
13
|
from dbt_platform_helper.commands.environment import environment as environment_commands
|
|
14
14
|
from dbt_platform_helper.commands.generate import generate as generate_commands
|
|
15
|
+
from dbt_platform_helper.commands.internal import internal as internal_commands
|
|
15
16
|
from dbt_platform_helper.commands.notify import notify as notify_commands
|
|
16
17
|
from dbt_platform_helper.commands.pipeline import pipeline as pipeline_commands
|
|
17
18
|
from dbt_platform_helper.commands.secrets import secrets as secrets_commands
|
|
@@ -36,6 +37,7 @@ platform_helper.add_command(config_commands)
|
|
|
36
37
|
platform_helper.add_command(copilot_commands)
|
|
37
38
|
platform_helper.add_command(environment_commands)
|
|
38
39
|
platform_helper.add_command(generate_commands)
|
|
40
|
+
platform_helper.add_command(internal_commands)
|
|
39
41
|
platform_helper.add_command(pipeline_commands)
|
|
40
42
|
platform_helper.add_command(secrets_commands)
|
|
41
43
|
platform_helper.add_command(service_commands)
|
{dbt_platform_helper-15.8.0.dist-info → dbt_platform_helper-15.10.0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{dbt_platform_helper-15.8.0.dist-info → dbt_platform_helper-15.10.0.dist-info/licenses}/LICENSE
RENAMED
|
File without changes
|