dbt-platform-helper 12.2.4__py3-none-any.whl → 12.4.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.

Files changed (33) hide show
  1. dbt_platform_helper/COMMANDS.md +6 -1
  2. dbt_platform_helper/commands/codebase.py +9 -80
  3. dbt_platform_helper/commands/conduit.py +25 -45
  4. dbt_platform_helper/commands/config.py +4 -4
  5. dbt_platform_helper/commands/copilot.py +13 -15
  6. dbt_platform_helper/commands/database.py +17 -4
  7. dbt_platform_helper/commands/environment.py +3 -2
  8. dbt_platform_helper/commands/secrets.py +1 -1
  9. dbt_platform_helper/domain/codebase.py +81 -63
  10. dbt_platform_helper/domain/conduit.py +42 -93
  11. dbt_platform_helper/domain/database_copy.py +48 -42
  12. dbt_platform_helper/domain/maintenance_page.py +8 -8
  13. dbt_platform_helper/platform_exception.py +5 -0
  14. dbt_platform_helper/providers/aws.py +32 -0
  15. dbt_platform_helper/providers/cloudformation.py +129 -100
  16. dbt_platform_helper/providers/copilot.py +33 -16
  17. dbt_platform_helper/providers/ecs.py +97 -74
  18. dbt_platform_helper/providers/load_balancers.py +11 -5
  19. dbt_platform_helper/providers/secrets.py +100 -59
  20. dbt_platform_helper/providers/validation.py +19 -0
  21. dbt_platform_helper/utils/application.py +14 -2
  22. dbt_platform_helper/utils/arn_parser.py +1 -1
  23. dbt_platform_helper/utils/aws.py +38 -12
  24. dbt_platform_helper/utils/git.py +2 -2
  25. dbt_platform_helper/utils/validation.py +57 -18
  26. dbt_platform_helper/utils/versioning.py +8 -8
  27. {dbt_platform_helper-12.2.4.dist-info → dbt_platform_helper-12.4.0.dist-info}/METADATA +1 -1
  28. {dbt_platform_helper-12.2.4.dist-info → dbt_platform_helper-12.4.0.dist-info}/RECORD +31 -30
  29. dbt_platform_helper/addons-template-map.yml +0 -29
  30. dbt_platform_helper/exceptions.py +0 -81
  31. {dbt_platform_helper-12.2.4.dist-info → dbt_platform_helper-12.4.0.dist-info}/LICENSE +0 -0
  32. {dbt_platform_helper-12.2.4.dist-info → dbt_platform_helper-12.4.0.dist-info}/WHEEL +0 -0
  33. {dbt_platform_helper-12.2.4.dist-info → dbt_platform_helper-12.4.0.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import os
3
+ import time
3
4
  import urllib.parse
4
5
  from configparser import ConfigParser
5
6
  from pathlib import Path
@@ -12,10 +13,12 @@ import click
12
13
  import yaml
13
14
  from boto3 import Session
14
15
 
15
- from dbt_platform_helper.exceptions import AWSException
16
- from dbt_platform_helper.exceptions import CopilotCodebaseNotFoundError
17
- from dbt_platform_helper.exceptions import ImageNotFoundError
18
- from dbt_platform_helper.exceptions import ValidationException
16
+ from dbt_platform_helper.platform_exception import PlatformException
17
+ from dbt_platform_helper.providers.aws import AWSException
18
+ from dbt_platform_helper.providers.aws import CopilotCodebaseNotFoundException
19
+ from dbt_platform_helper.providers.aws import ImageNotFoundException
20
+ from dbt_platform_helper.providers.aws import LogGroupNotFoundException
21
+ from dbt_platform_helper.providers.validation import ValidationException
19
22
  from dbt_platform_helper.utils.files import cache_refresh_required
20
23
  from dbt_platform_helper.utils.files import read_supported_versions_from_cache
21
24
  from dbt_platform_helper.utils.files import write_to_cache
@@ -93,7 +96,7 @@ def _log_account_info(account_name: list, account_id: str) -> None:
93
96
  )
94
97
 
95
98
 
96
- class NoProfileForAccountIdError(Exception):
99
+ class NoProfileForAccountIdException(PlatformException):
97
100
  def __init__(self, account_id):
98
101
  super().__init__(f"No profile found for account {account_id}")
99
102
 
@@ -108,7 +111,7 @@ def get_profile_name_from_account_id(account_id: str):
108
111
  if account_id == found_account_id:
109
112
  return section.removeprefix("profile ")
110
113
 
111
- raise NoProfileForAccountIdError(account_id)
114
+ raise NoProfileForAccountIdException(account_id)
112
115
 
113
116
 
114
117
  def get_ssm_secret_names(app, env):
@@ -340,6 +343,7 @@ def get_load_balancer_configuration(
340
343
 
341
344
 
342
345
  def get_postgres_connection_data_updated_with_master_secret(session, parameter_name, secret_arn):
346
+ # Todo: This is pretty much the same as dbt_platform_helper.providers.secrets.Secrets.get_postgres_connection_data_updated_with_master_secret
343
347
  ssm_client = session.client("ssm")
344
348
  secrets_manager_client = session.client("secretsmanager")
345
349
  response = ssm_client.get_parameter(Name=parameter_name, WithDecryption=True)
@@ -414,7 +418,7 @@ def get_connection_string(
414
418
  app: str,
415
419
  env: str,
416
420
  db_identifier: str,
417
- connection_data_fn=get_postgres_connection_data_updated_with_master_secret,
421
+ connection_data=get_postgres_connection_data_updated_with_master_secret,
418
422
  ) -> str:
419
423
  addon_name = db_identifier.split(f"{app}-{env}-", 1)[1]
420
424
  normalised_addon_name = addon_name.replace("-", "_").upper()
@@ -426,7 +430,7 @@ def get_connection_string(
426
430
  Name=master_secret_name, WithDecryption=True
427
431
  )["Parameter"]["Value"]
428
432
 
429
- conn = connection_data_fn(session, connection_string_parameter, master_secret_arn)
433
+ conn = connection_data(session, connection_string_parameter, master_secret_arn)
430
434
 
431
435
  return f"postgres://{conn['username']}:{conn['password']}@{conn['host']}:{conn['port']}/{conn['dbname']}"
432
436
 
@@ -485,8 +489,10 @@ def start_build_extraction(codebuild_client, build_options):
485
489
  return response["build"]["arn"]
486
490
 
487
491
 
492
+ # Todo: This should probably be in the AWS Copilot provider
488
493
  def check_codebase_exists(session: Session, application, codebase: str):
489
494
  try:
495
+ # Todo: Can this leverage dbt_platform_helper.providers.secrets.Secrets.get_connection_secret_arn?
490
496
  ssm_client = session.client("ssm")
491
497
  json.loads(
492
498
  ssm_client.get_parameter(
@@ -499,7 +505,7 @@ def check_codebase_exists(session: Session, application, codebase: str):
499
505
  ssm_client.exceptions.ParameterNotFound,
500
506
  json.JSONDecodeError,
501
507
  ):
502
- raise CopilotCodebaseNotFoundError
508
+ raise CopilotCodebaseNotFoundException(codebase)
503
509
 
504
510
 
505
511
  def check_image_exists(session, application, codebase, commit):
@@ -513,7 +519,7 @@ def check_image_exists(session, application, codebase, commit):
513
519
  ecr_client.exceptions.RepositoryNotFoundException,
514
520
  ecr_client.exceptions.ImageNotFoundException,
515
521
  ):
516
- raise ImageNotFoundError
522
+ raise ImageNotFoundException(commit)
517
523
 
518
524
 
519
525
  def get_build_url_from_arn(build_arn: str) -> str:
@@ -525,7 +531,7 @@ def get_build_url_from_arn(build_arn: str) -> str:
525
531
  )
526
532
 
527
533
 
528
- def list_latest_images(ecr_client, ecr_repository_name, codebase_repository, echo_fn):
534
+ def list_latest_images(ecr_client, ecr_repository_name, codebase_repository, echo):
529
535
  paginator = ecr_client.get_paginator("describe_images")
530
536
  describe_images_response_iterator = paginator.paginate(
531
537
  repositoryName=ecr_repository_name,
@@ -550,8 +556,28 @@ def list_latest_images(ecr_client, ecr_repository_name, codebase_repository, ech
550
556
  continue
551
557
 
552
558
  commit_hash = commit_tag.replace("commit-", "")
553
- echo_fn(
559
+ echo(
554
560
  f" - https://github.com/{codebase_repository}/commit/{commit_hash} - published: {image['imagePushedAt']}"
555
561
  )
556
562
  except StopIteration:
557
563
  continue
564
+
565
+
566
+ def wait_for_log_group_to_exist(log_client, log_group_name, attempts=30):
567
+ current_attempts = 0
568
+ log_group_exists = False
569
+
570
+ while not log_group_exists and current_attempts < attempts:
571
+ current_attempts += 1
572
+
573
+ log_group_response = log_client.describe_log_groups(logGroupNamePrefix=log_group_name)
574
+ log_groups = log_group_response.get("logGroups", [])
575
+
576
+ for group in log_groups:
577
+ if group["logGroupName"] == log_group_name:
578
+ log_group_exists = True
579
+
580
+ time.sleep(1)
581
+
582
+ if not log_group_exists:
583
+ raise LogGroupNotFoundException(log_group_name)
@@ -2,7 +2,7 @@ import re
2
2
  import subprocess
3
3
 
4
4
 
5
- class CommitNotFoundError(Exception):
5
+ class CommitNotFoundException(Exception):
6
6
  pass
7
7
 
8
8
 
@@ -26,4 +26,4 @@ def check_if_commit_exists(commit):
26
26
  )
27
27
 
28
28
  if branches_containing_commit.stderr:
29
- raise CommitNotFoundError()
29
+ raise CommitNotFoundException()
@@ -104,13 +104,13 @@ def validate_addons(addons: dict):
104
104
  config={"extensions": addons},
105
105
  extension_type="redis",
106
106
  version_key="engine",
107
- get_supported_versions_fn=get_supported_redis_versions,
107
+ get_supported_versions=get_supported_redis_versions,
108
108
  )
109
109
  _validate_extension_supported_versions(
110
110
  config={"extensions": addons},
111
111
  extension_type="opensearch",
112
112
  version_key="engine",
113
- get_supported_versions_fn=get_supported_opensearch_versions,
113
+ get_supported_versions=get_supported_opensearch_versions,
114
114
  )
115
115
 
116
116
  return errors
@@ -210,7 +210,13 @@ RETENTION_POLICY = Or(
210
210
  },
211
211
  )
212
212
 
213
- DATABASE_COPY = {"from": ENV_NAME, "to": ENV_NAME}
213
+ DATABASE_COPY = {
214
+ "from": ENV_NAME,
215
+ "to": ENV_NAME,
216
+ Optional("from_account"): str,
217
+ Optional("to_account"): str,
218
+ Optional("pipeline"): {Optional("schedule"): str},
219
+ }
214
220
 
215
221
  POSTGRES_DEFINITION = {
216
222
  "type": "postgres",
@@ -280,9 +286,19 @@ EXTERNAL_ROLE_ACCESS = {
280
286
  "cyber_sign_off_by": dbt_email_address_regex("cyber_sign_off_by"),
281
287
  }
282
288
 
283
- EXTERNAL_ROLE_ACCESS_NAME = Regex(
284
- r"^([a-z][a-zA-Z0-9_-]*)$",
285
- error="External role access block name {} is invalid: names must only contain lowercase alphanumeric characters separated by hypen or underscore",
289
+ CROSS_ENVIRONMENT_SERVICE_ACCESS = {
290
+ "application": str,
291
+ "environment": ENV_NAME,
292
+ "account": str,
293
+ "service": str,
294
+ "read": bool,
295
+ "write": bool,
296
+ "cyber_sign_off_by": dbt_email_address_regex("cyber_sign_off_by"),
297
+ }
298
+
299
+ LOWER_ALPHANUMERIC = Regex(
300
+ r"^([a-z][a-zA-Z0-9_-]*|\*)$",
301
+ error="{} is invalid: must only contain lowercase alphanumeric characters separated by hyphen or underscore",
286
302
  )
287
303
 
288
304
  DATA_IMPORT = {
@@ -307,7 +323,10 @@ S3_BASE = {
307
323
  Optional("versioning"): bool,
308
324
  Optional("lifecycle_rules"): [LIFECYCLE_RULE],
309
325
  Optional("data_migration"): DATA_MIGRATION,
310
- Optional("external_role_access"): {EXTERNAL_ROLE_ACCESS_NAME: EXTERNAL_ROLE_ACCESS},
326
+ Optional("external_role_access"): {LOWER_ALPHANUMERIC: EXTERNAL_ROLE_ACCESS},
327
+ Optional("cross_environment_service_access"): {
328
+ LOWER_ALPHANUMERIC: CROSS_ENVIRONMENT_SERVICE_ACCESS
329
+ },
311
330
  },
312
331
  },
313
332
  }
@@ -558,18 +577,18 @@ def validate_platform_config(config):
558
577
  config=config,
559
578
  extension_type="redis",
560
579
  version_key="engine",
561
- get_supported_versions_fn=get_supported_redis_versions,
580
+ get_supported_versions=get_supported_redis_versions,
562
581
  )
563
582
  _validate_extension_supported_versions(
564
583
  config=config,
565
584
  extension_type="opensearch",
566
585
  version_key="engine",
567
- get_supported_versions_fn=get_supported_opensearch_versions,
586
+ get_supported_versions=get_supported_opensearch_versions,
568
587
  )
569
588
 
570
589
 
571
590
  def _validate_extension_supported_versions(
572
- config, extension_type, version_key, get_supported_versions_fn
591
+ config, extension_type, version_key, get_supported_versions
573
592
  ):
574
593
  extensions = config.get("extensions", {})
575
594
  if not extensions:
@@ -581,7 +600,7 @@ def _validate_extension_supported_versions(
581
600
  if extension.get("type") == extension_type
582
601
  ]
583
602
 
584
- supported_extension_versions = get_supported_versions_fn()
603
+ supported_extension_versions = get_supported_versions()
585
604
  extensions_with_invalid_version = []
586
605
 
587
606
  for extension in extensions_for_type:
@@ -638,6 +657,9 @@ def validate_database_copy_section(config):
638
657
  from_env = section["from"]
639
658
  to_env = section["to"]
640
659
 
660
+ from_account = _get_env_deploy_account_info(config, from_env, "id")
661
+ to_account = _get_env_deploy_account_info(config, to_env, "id")
662
+
641
663
  if from_env == to_env:
642
664
  errors.append(
643
665
  f"database_copy 'to' and 'from' cannot be the same environment in extension '{extension_name}'."
@@ -658,10 +680,33 @@ def validate_database_copy_section(config):
658
680
  f"database_copy 'to' parameter must be a valid environment ({all_envs_string}) but was '{to_env}' in extension '{extension_name}'."
659
681
  )
660
682
 
683
+ if from_account != to_account:
684
+ if "from_account" not in section:
685
+ errors.append(
686
+ f"Environments '{from_env}' and '{to_env}' are in different AWS accounts. The 'from_account' parameter must be present."
687
+ )
688
+ elif section["from_account"] != from_account:
689
+ errors.append(
690
+ f"Incorrect value for 'from_account' for environment '{from_env}'"
691
+ )
692
+
693
+ if "to_account" not in section:
694
+ errors.append(
695
+ f"Environments '{from_env}' and '{to_env}' are in different AWS accounts. The 'to_account' parameter must be present."
696
+ )
697
+ elif section["to_account"] != to_account:
698
+ errors.append(f"Incorrect value for 'to_account' for environment '{to_env}'")
699
+
661
700
  if errors:
662
701
  abort_with_error("\n".join(errors))
663
702
 
664
703
 
704
+ def _get_env_deploy_account_info(config, env, key):
705
+ return (
706
+ config.get("environments", {}).get(env, {}).get("accounts", {}).get("deploy", {}).get(key)
707
+ )
708
+
709
+
665
710
  def _validate_environment_pipelines(config):
666
711
  bad_pipelines = {}
667
712
  for pipeline_name, pipeline in config.get("environment_pipelines", {}).items():
@@ -669,13 +714,7 @@ def _validate_environment_pipelines(config):
669
714
  pipeline_account = pipeline.get("account", None)
670
715
  if pipeline_account:
671
716
  for env in pipeline.get("environments", {}).keys():
672
- env_account = (
673
- config.get("environments", {})
674
- .get(env, {})
675
- .get("accounts", {})
676
- .get("deploy", {})
677
- .get("name")
678
- )
717
+ env_account = _get_env_deploy_account_info(config, env, "name")
679
718
  if not env_account == pipeline_account:
680
719
  bad_envs.append(env)
681
720
  if bad_envs:
@@ -13,9 +13,9 @@ import requests
13
13
 
14
14
  from dbt_platform_helper.constants import PLATFORM_CONFIG_FILE
15
15
  from dbt_platform_helper.constants import PLATFORM_HELPER_VERSION_FILE
16
- from dbt_platform_helper.exceptions import IncompatibleMajorVersion
17
- from dbt_platform_helper.exceptions import IncompatibleMinorVersion
18
- from dbt_platform_helper.exceptions import ValidationException
16
+ from dbt_platform_helper.providers.validation import IncompatibleMajorVersionException
17
+ from dbt_platform_helper.providers.validation import IncompatibleMinorVersionException
18
+ from dbt_platform_helper.providers.validation import ValidationException
19
19
  from dbt_platform_helper.utils.platform_config import load_unvalidated_config_file
20
20
 
21
21
  VersionTuple = Optional[Tuple[int, int, int]]
@@ -198,13 +198,13 @@ def validate_version_compatibility(
198
198
  if (app_major == 0 and check_major == 0) and (
199
199
  app_minor != check_minor or app_patch != check_patch
200
200
  ):
201
- raise IncompatibleMajorVersion(app_version_as_string, check_version_as_string)
201
+ raise IncompatibleMajorVersionException(app_version_as_string, check_version_as_string)
202
202
 
203
203
  if app_major != check_major:
204
- raise IncompatibleMajorVersion(app_version_as_string, check_version_as_string)
204
+ raise IncompatibleMajorVersionException(app_version_as_string, check_version_as_string)
205
205
 
206
206
  if app_minor != check_minor:
207
- raise IncompatibleMinorVersion(app_version_as_string, check_version_as_string)
207
+ raise IncompatibleMinorVersionException(app_version_as_string, check_version_as_string)
208
208
 
209
209
 
210
210
  def check_version_on_file_compatibility(
@@ -248,9 +248,9 @@ def check_platform_helper_version_needs_update():
248
248
  )
249
249
  try:
250
250
  validate_version_compatibility(local_version, latest_release)
251
- except IncompatibleMajorVersion:
251
+ except IncompatibleMajorVersionException:
252
252
  click.secho(message, fg="red")
253
- except IncompatibleMinorVersion:
253
+ except IncompatibleMinorVersionException:
254
254
  click.secho(message, fg="yellow")
255
255
 
256
256
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dbt-platform-helper
3
- Version: 12.2.4
3
+ Version: 12.4.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
6
  Author: Department for Business and Trade Platform Team
@@ -1,36 +1,37 @@
1
- dbt_platform_helper/COMMANDS.md,sha256=V75r1y9dSDz6s9pshHh79SzEH9MeLMQF3N7KnOOe1YU,21824
1
+ dbt_platform_helper/COMMANDS.md,sha256=6VGkyKa_AB1adSlyhWIKrfDckq2n-xxqnBbBpgO5bnc,22207
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/addon-plans.yml,sha256=O46a_ODsGG9KXmQY_1XbSGqrpSaHSLDe-SdROzHx8Go,4545
5
- dbt_platform_helper/addons-template-map.yml,sha256=kYv_ZoZGWNeNBCnR_9wSeLhJuWOTHx-vn7ub74MgGb4,546
6
5
  dbt_platform_helper/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
6
  dbt_platform_helper/commands/application.py,sha256=eVwCaYuwBlk0zx0xfA6fW7b-S1pl8gkyT1lHKeeh2R0,10147
8
- dbt_platform_helper/commands/codebase.py,sha256=3PCqkcY4Eh9Mi0is_Jtit98mu-hnUD8FiasVelC0EMk,5315
9
- dbt_platform_helper/commands/conduit.py,sha256=nOfyqZoF0Q3uYicTwfMXf4FGYC7cR1du-PeitSt1jx4,3163
10
- dbt_platform_helper/commands/config.py,sha256=NOHea7OAjrl6XHlW6HMLn0m0T5lFPyNH3HXoyCOWsJk,12070
11
- dbt_platform_helper/commands/copilot.py,sha256=i7FLSF-p9P5JQ36e_V8THXxdXG_g1hI7fHxemxQG82A,12927
12
- dbt_platform_helper/commands/database.py,sha256=_HnuOxlfVIFGkDotGv0SGb6oWrnm517FSvLv0aGcLJQ,3542
13
- dbt_platform_helper/commands/environment.py,sha256=-j-PYLHlrMH4F-DLhCCF3AYKP5z-Tzw7E8SbjMsMPnE,9209
7
+ dbt_platform_helper/commands/codebase.py,sha256=KB8irKyFtb6pKn5cQ0MmTywGW7Vd8SSbWjT2mRnh3JA,2270
8
+ dbt_platform_helper/commands/conduit.py,sha256=KqRWiirl5Xl7qcJXOAsirbTLlV1XquOjddsopuj0Kp4,2272
9
+ dbt_platform_helper/commands/config.py,sha256=LKHPBR0xCPiX_oR2Gtl0_KO9WqABNDF5w_dI7WRxhWk,12117
10
+ dbt_platform_helper/commands/copilot.py,sha256=XizScFxONNB3RLecRfEgCv--TwQ1j2rCUKGCx0nPq4I,12883
11
+ dbt_platform_helper/commands/database.py,sha256=aG3zcMHL5PE96b7LSAu0FGCbgcycQej3AGRcd-bpXUo,4115
12
+ dbt_platform_helper/commands/environment.py,sha256=VNIzuCM6RT-jVMk3Km0d88NEhrkTEWNqscEypVwLSWU,9294
14
13
  dbt_platform_helper/commands/generate.py,sha256=YLCPb-xcPapGcsLn-7d1Am7BpGp5l0iecIDTOdNGjHk,722
15
14
  dbt_platform_helper/commands/notify.py,sha256=kVJ0s78QMiaEWPVKu_bbMko4DW2uJy2fu8-HNJsglyk,3748
16
15
  dbt_platform_helper/commands/pipeline.py,sha256=_52bDSDa8DoyOA4VFxFJhwaiKCPHKqPtK2LWDLFaKlA,9452
17
- dbt_platform_helper/commands/secrets.py,sha256=zLDSlui4RzBPsgnGgCeEMbfE34NgMDC-k6s0ffMtCT0,3891
16
+ dbt_platform_helper/commands/secrets.py,sha256=QjF9xUChioIr_P0fzqwyEcqLvcN-RNZmNFFlaUPVU9o,3994
18
17
  dbt_platform_helper/commands/version.py,sha256=XVfSd53TDti4cceBqTmRfq_yZnvxs14RbrOjNJHW75U,1444
19
18
  dbt_platform_helper/constants.py,sha256=HVaaO7hlQB41GrBBxcgk7hHie9tKbeYhJc-cRyYuIE0,453
20
19
  dbt_platform_helper/default-extensions.yml,sha256=SU1ZitskbuEBpvE7efc3s56eAUF11j70brhj_XrNMMo,493
21
20
  dbt_platform_helper/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- dbt_platform_helper/domain/codebase.py,sha256=_Qx6WZs-16C3Ax0gEbbtPBbl0MNmuxm2Vd42bpc8AZs,9420
23
- dbt_platform_helper/domain/conduit.py,sha256=nzkeFCRwEuI5QK092H50l6o2CDD4ZuCuTXLDDmsTNd4,7207
24
- dbt_platform_helper/domain/database_copy.py,sha256=QUw8XeUzcKccu4U33b9AKSOwCuGsONIzdmInlOzsmA4,8525
25
- dbt_platform_helper/domain/maintenance_page.py,sha256=NFHN_J0NthhJ1YkcOTJ8c0R8y33TrDZq3ka2fmMRM1g,15708
26
- dbt_platform_helper/exceptions.py,sha256=LMkYMBwtKGIooamJ-2p0snKkP9iqTNenvqdkIUzudU4,1438
21
+ dbt_platform_helper/domain/codebase.py,sha256=vs25ytD0iKwfuX-EoYHwG6qiZAmfvKyQiYT9BeWZ_s4,9688
22
+ dbt_platform_helper/domain/conduit.py,sha256=mvjDzxh-SCUCY5qGL73kG8TT7YqeQR8XtNcHx26SW2w,4344
23
+ dbt_platform_helper/domain/database_copy.py,sha256=m25FA6DkF_yG3lVcbxBEleYxwHA85hQrB5fFeIg6adM,8988
24
+ dbt_platform_helper/domain/maintenance_page.py,sha256=JN1ksJ9viZ8SjPkO48y_GqrqTgR5B3T1aiye0XlUp4I,15740
27
25
  dbt_platform_helper/jinja2_tags.py,sha256=jFyN_Sxmko1GSfvrqRIGQ80CCW8EwlCV3su0ahJPfoE,541
26
+ dbt_platform_helper/platform_exception.py,sha256=bheZV9lqGvrCVTNT92349dVntNDEDWTEwciZgC83WzE,187
28
27
  dbt_platform_helper/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- dbt_platform_helper/providers/cloudformation.py,sha256=wIfgfRl4eTdQfLBU6qIS_Q_US0TY3fEo5E-_GxDS_Gk,3981
30
- dbt_platform_helper/providers/copilot.py,sha256=gEVaEnIcxFV418FitQTXU9MWtRv6Sb5TF7DNtYI49Ng,4662
31
- dbt_platform_helper/providers/ecs.py,sha256=cH9z4gyj6mOhOCr85X2PtMRkUiUQ24ST9dxySChQEXQ,2570
32
- dbt_platform_helper/providers/load_balancers.py,sha256=e1SPrWbBWq95paSVd3Y5yORIrHAZxcVabBYDjPyUTsU,1430
33
- dbt_platform_helper/providers/secrets.py,sha256=9mZ3SfWguqUyd2s_yoOFEKxqqq6sls_ss_839Lo38bg,3122
28
+ dbt_platform_helper/providers/aws.py,sha256=KHgySe6cwEw1wePjw6DL7uSyZRk3DN_Aqqi8KnRoB3M,1208
29
+ dbt_platform_helper/providers/cloudformation.py,sha256=YmeofMMxh9hzhU4Osa1vR41s18jNXzsZdEfpQUk1Lc4,4976
30
+ dbt_platform_helper/providers/copilot.py,sha256=2BkQXn17GC1oGfCSCXXapTqT5OEhpEBeNkQ33g-U6wU,5245
31
+ dbt_platform_helper/providers/ecs.py,sha256=XlQHYhZiLGrqR-1ZWMagGH2R2Hy7mCP6676eZL3YbNQ,3842
32
+ dbt_platform_helper/providers/load_balancers.py,sha256=0tPkuQ_jWfan44HrBA5EMLqrZaYQl-Lw5PavZ1a1iag,1615
33
+ dbt_platform_helper/providers/secrets.py,sha256=6cYIR15dLdHmqxtWQpM6R71e0_Xgsg9V291HBG-0LV0,5272
34
+ dbt_platform_helper/providers/validation.py,sha256=d_YzJZVjGNO65pXcPIcFc9I-FRCESeEC7GvUzP8n-As,596
34
35
  dbt_platform_helper/templates/.copilot/config.yml,sha256=J_bA9sCtBdCPBRImpCBRnYvhQd4vpLYIXIU-lq9vbkA,158
35
36
  dbt_platform_helper/templates/.copilot/image_build_run.sh,sha256=adYucYXEB-kAgZNjTQo0T6EIAY8sh_xCEvVhWKKQ8mw,164
36
37
  dbt_platform_helper/templates/.copilot/phases/build.sh,sha256=umKXePcRvx4XyrRY0fAWIyYFtNjqBI2L8vIJk-V7C60,121
@@ -72,22 +73,22 @@ dbt_platform_helper/templates/svc/manifest-backend.yml,sha256=aAD9ndkbXnF7JBAKS2
72
73
  dbt_platform_helper/templates/svc/manifest-public.yml,sha256=6NHVR_onBu5hbwynLrB6roDRce7JcylSc0qeYvzlPdI,3664
73
74
  dbt_platform_helper/templates/svc/overrides/cfn.patches.yml,sha256=W7-d017akuUq9kda64DQxazavcRcCPDjaAik6t1EZqM,742
74
75
  dbt_platform_helper/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- dbt_platform_helper/utils/application.py,sha256=C-t8LIFqE-rrVBNqWEGRtCd6uOt41Y2t0z9_SEZm7oE,4127
76
- dbt_platform_helper/utils/arn_parser.py,sha256=1jY0elpAe4YL3ulrrCf1YiKmjI-7YXz4gJASqkIFHTc,1294
77
- dbt_platform_helper/utils/aws.py,sha256=Vs92jcQOJt8aL3xfnfUVX6AiQ2hRfYsf3n6eBsXjbi0,18627
76
+ dbt_platform_helper/utils/application.py,sha256=ugY3nbUHRNFvJgaD4446EdSvIyILEN6ouuuk7eoyXe8,4538
77
+ dbt_platform_helper/utils/arn_parser.py,sha256=BaXzIxSOLdFmP_IfAxRq-0j-0Re1iCN7L4j2Zi5-CRQ,1304
78
+ dbt_platform_helper/utils/aws.py,sha256=sO5EHTbjzOYc0aPmpRupbcACwIBCHz8YUZfqz0vXydI,19771
78
79
  dbt_platform_helper/utils/click.py,sha256=Fx4y4bbve1zypvog_sgK7tJtCocmzheoEFLBRv1lfdM,2943
79
80
  dbt_platform_helper/utils/cloudfoundry.py,sha256=GnQ4fVLnDfOdNSrsJjI6ElZHqpgwINeoPn77cUH2UFY,484
80
81
  dbt_platform_helper/utils/files.py,sha256=pa5uwwrEFIAgXZUyH2KEr2Yiu6bKuV4EMlhn9BcUMsY,5296
81
- dbt_platform_helper/utils/git.py,sha256=aI7pCst5hm4XACiubsTpGJV1UEBLnxLpUGXu4h4hofM,696
82
+ dbt_platform_helper/utils/git.py,sha256=7JGZMaI8-cU6-GjXIXjOlsYfKu_RppLOGyAicBd4n_8,704
82
83
  dbt_platform_helper/utils/manifests.py,sha256=ji3UYHCxq9tTpkm4MlRa2y0-JOYYqq1pWZ2h_zpj0UU,507
83
84
  dbt_platform_helper/utils/messages.py,sha256=aLx6s9utt__IqlDdeIYq4n82ERwludu2Zfqy0Q2t-x8,115
84
85
  dbt_platform_helper/utils/platform_config.py,sha256=2RfIxBAT5fv7WR4YuP3yomUK7sKZFL77xevuHnUALdg,676
85
86
  dbt_platform_helper/utils/template.py,sha256=raRx4QUCVJtKfvJK08Egg6gwWcs3r3V4nPWcJW4xNhA,574
86
- dbt_platform_helper/utils/validation.py,sha256=-Fb5Q7oZ9Jt8JJrXUva62J1MGHzLz0lqt7aQqA9-mY0,29176
87
- dbt_platform_helper/utils/versioning.py,sha256=IBxdocJ8ZyJib38d1ja87tTuFE0iJ4npaDcAHQAKQ58,10825
87
+ dbt_platform_helper/utils/validation.py,sha256=ANGIA3k2_ATyZsPs7iqnXMNVjZC6o-rIbONxO9QZ8JU,30701
88
+ dbt_platform_helper/utils/versioning.py,sha256=rLCofLHPXoyc3v9ArDKcjW902p-UX6GCn8n7cjg5I-U,10918
88
89
  platform_helper.py,sha256=bly3JkwbfwnWTZSZziu40dbgzQItsK-DIMMvL6ArFDY,1893
89
- dbt_platform_helper-12.2.4.dist-info/LICENSE,sha256=dP79lN73--7LMApnankTGLqDbImXg8iYFqWgnExGkGk,1090
90
- dbt_platform_helper-12.2.4.dist-info/METADATA,sha256=xZDA6nXtJA-spyCciuX6Fm-ySz2L6-Ulwm4E-ZuZDug,3212
91
- dbt_platform_helper-12.2.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
92
- dbt_platform_helper-12.2.4.dist-info/entry_points.txt,sha256=QhbY8F434A-onsg0-FsdMd2U6HKh6Q7yCFFZrGUh5-M,67
93
- dbt_platform_helper-12.2.4.dist-info/RECORD,,
90
+ dbt_platform_helper-12.4.0.dist-info/LICENSE,sha256=dP79lN73--7LMApnankTGLqDbImXg8iYFqWgnExGkGk,1090
91
+ dbt_platform_helper-12.4.0.dist-info/METADATA,sha256=UuLXRBbntAkchMbR3jEaD2FCze0dH-3i54tIcpG49mo,3212
92
+ dbt_platform_helper-12.4.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
93
+ dbt_platform_helper-12.4.0.dist-info/entry_points.txt,sha256=QhbY8F434A-onsg0-FsdMd2U6HKh6Q7yCFFZrGUh5-M,67
94
+ dbt_platform_helper-12.4.0.dist-info/RECORD,,
@@ -1,29 +0,0 @@
1
- # This file maps addon types to svc level templates
2
-
3
- # explanation:
4
-
5
- # {addons-type}:
6
- # svc:
7
- # - template: path/to/template.yml
8
-
9
- redis: {}
10
- postgres: {}
11
- opensearch: {}
12
- s3:
13
- svc:
14
- - template: addons/svc/s3-policy.yml
15
- s3-policy:
16
- svc:
17
- - template: addons/svc/s3-policy.yml
18
- appconfig-ipfilter:
19
- svc:
20
- - template: addons/svc/appconfig-ipfilter.yml
21
- subscription-filter:
22
- svc:
23
- - template: addons/svc/subscription-filter.yml
24
- monitoring: {}
25
- vpc: {}
26
- alb: {}
27
- prometheus-policy:
28
- svc:
29
- - template: addons/svc/prometheus-policy.yml
@@ -1,81 +0,0 @@
1
- class ValidationException(Exception):
2
- pass
3
-
4
-
5
- class AWSException(Exception):
6
- pass
7
-
8
-
9
- class IncompatibleMajorVersion(ValidationException):
10
- def __init__(self, app_version: str, check_version: str):
11
- super().__init__()
12
- self.app_version = app_version
13
- self.check_version = check_version
14
-
15
-
16
- class IncompatibleMinorVersion(ValidationException):
17
- def __init__(self, app_version: str, check_version: str):
18
- super().__init__()
19
- self.app_version = app_version
20
- self.check_version = check_version
21
-
22
-
23
- class NoClusterError(AWSException):
24
- pass
25
-
26
-
27
- class CreateTaskTimeoutError(AWSException):
28
- pass
29
-
30
-
31
- class ParameterNotFoundError(AWSException):
32
- pass
33
-
34
-
35
- class AddonNotFoundError(AWSException):
36
- pass
37
-
38
-
39
- class InvalidAddonTypeError(AWSException):
40
- def __init__(self, addon_type):
41
- self.addon_type = addon_type
42
-
43
-
44
- class AddonTypeMissingFromConfigError(AWSException):
45
- pass
46
-
47
-
48
- class CopilotCodebaseNotFoundError(Exception):
49
- pass
50
-
51
-
52
- class NotInCodeBaseRepositoryError(Exception):
53
- pass
54
-
55
-
56
- class NoCopilotCodebasesFoundError(Exception):
57
- pass
58
-
59
-
60
- class ImageNotFoundError(Exception):
61
- pass
62
-
63
-
64
- class ApplicationDeploymentNotTriggered(Exception):
65
- pass
66
-
67
-
68
- class ApplicationNotFoundError(Exception):
69
- pass
70
-
71
-
72
- class ApplicationEnvironmentNotFoundError(Exception):
73
- pass
74
-
75
-
76
- class SecretNotFoundError(AWSException):
77
- pass
78
-
79
-
80
- class ECSAgentNotRunning(AWSException):
81
- pass