dbt-platform-helper 13.1.2__py3-none-any.whl → 13.2.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 (41) hide show
  1. dbt_platform_helper/commands/application.py +2 -4
  2. dbt_platform_helper/commands/codebase.py +1 -3
  3. dbt_platform_helper/commands/conduit.py +1 -3
  4. dbt_platform_helper/commands/config.py +14 -14
  5. dbt_platform_helper/commands/copilot.py +6 -4
  6. dbt_platform_helper/commands/environment.py +5 -5
  7. dbt_platform_helper/commands/generate.py +2 -3
  8. dbt_platform_helper/commands/notify.py +1 -3
  9. dbt_platform_helper/commands/pipeline.py +1 -3
  10. dbt_platform_helper/commands/secrets.py +1 -3
  11. dbt_platform_helper/commands/version.py +2 -2
  12. dbt_platform_helper/domain/codebase.py +10 -2
  13. dbt_platform_helper/domain/copilot.py +3 -0
  14. dbt_platform_helper/domain/maintenance_page.py +42 -15
  15. dbt_platform_helper/domain/pipelines.py +1 -1
  16. dbt_platform_helper/domain/terraform_environment.py +1 -1
  17. dbt_platform_helper/domain/versioning.py +125 -35
  18. dbt_platform_helper/providers/aws/interfaces.py +13 -0
  19. dbt_platform_helper/providers/aws/opensearch.py +23 -0
  20. dbt_platform_helper/providers/aws/redis.py +21 -0
  21. dbt_platform_helper/providers/cache.py +40 -4
  22. dbt_platform_helper/providers/config_validator.py +15 -14
  23. dbt_platform_helper/providers/copilot.py +1 -1
  24. dbt_platform_helper/providers/io.py +3 -0
  25. dbt_platform_helper/providers/kms.py +22 -0
  26. dbt_platform_helper/providers/load_balancers.py +26 -15
  27. dbt_platform_helper/providers/semantic_version.py +7 -4
  28. dbt_platform_helper/providers/version.py +21 -3
  29. dbt_platform_helper/providers/yaml_file.py +0 -1
  30. dbt_platform_helper/utils/aws.py +27 -4
  31. dbt_platform_helper/utils/files.py +0 -6
  32. dbt_platform_helper/utils/{versioning.py → tool_versioning.py} +11 -6
  33. {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/METADATA +1 -1
  34. {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/RECORD +38 -37
  35. dbt_platform_helper/providers/opensearch.py +0 -36
  36. dbt_platform_helper/providers/platform_helper_versioning.py +0 -107
  37. dbt_platform_helper/providers/redis.py +0 -34
  38. /dbt_platform_helper/providers/{aws.py → aws/exceptions.py} +0 -0
  39. {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/LICENSE +0 -0
  40. {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/WHEEL +0 -0
  41. {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/entry_points.txt +0 -0
@@ -10,9 +10,7 @@ from datetime import timedelta
10
10
  import click
11
11
  from prettytable import PrettyTable
12
12
 
13
- from dbt_platform_helper.providers.platform_helper_versioning import (
14
- PlatformHelperVersioning,
15
- )
13
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
16
14
  from dbt_platform_helper.utils.application import load_application
17
15
  from dbt_platform_helper.utils.click import ClickDocOptGroup
18
16
 
@@ -141,7 +139,7 @@ def container_stats(env, app, storage, network):
141
139
  storage_write = field[6]["value"]
142
140
  network_read = field[7]["value"]
143
141
  network_write = field[8]["value"]
144
- cpu = "%.1f%%" % float(field[9]["value"])
142
+ cpu = f"{float(field[9]['value']):.1f}%"
145
143
  memory = f"{field[10]['value']}M"
146
144
 
147
145
  # Nothing to compare to at start.
@@ -1,11 +1,9 @@
1
1
  import click
2
2
 
3
3
  from dbt_platform_helper.domain.codebase import Codebase
4
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
4
5
  from dbt_platform_helper.platform_exception import PlatformException
5
6
  from dbt_platform_helper.providers.io import ClickIOProvider
6
- from dbt_platform_helper.providers.platform_helper_versioning import (
7
- PlatformHelperVersioning,
8
- )
9
7
  from dbt_platform_helper.utils.click import ClickDocOptGroup
10
8
 
11
9
 
@@ -1,13 +1,11 @@
1
1
  import click
2
2
 
3
3
  from dbt_platform_helper.domain.conduit import Conduit
4
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
4
5
  from dbt_platform_helper.platform_exception import PlatformException
5
6
  from dbt_platform_helper.providers.cloudformation import CloudFormation
6
7
  from dbt_platform_helper.providers.ecs import ECS
7
8
  from dbt_platform_helper.providers.io import ClickIOProvider
8
- from dbt_platform_helper.providers.platform_helper_versioning import (
9
- PlatformHelperVersioning,
10
- )
11
9
  from dbt_platform_helper.providers.secrets import Secrets
12
10
  from dbt_platform_helper.utils.application import load_application
13
11
  from dbt_platform_helper.utils.click import ClickDocOptCommand
@@ -14,9 +14,9 @@ from dbt_platform_helper.providers.semantic_version import (
14
14
  IncompatibleMajorVersionException,
15
15
  )
16
16
  from dbt_platform_helper.providers.validation import ValidationException
17
- from dbt_platform_helper.utils import versioning
17
+ from dbt_platform_helper.utils import tool_versioning
18
18
  from dbt_platform_helper.utils.click import ClickDocOptGroup
19
- from dbt_platform_helper.utils.versioning import get_platform_helper_version_status
19
+ from dbt_platform_helper.utils.tool_versioning import get_platform_helper_version_status
20
20
 
21
21
  yes = "\033[92m✔\033[0m"
22
22
  no = "\033[91m✖\033[0m"
@@ -78,12 +78,12 @@ def deployment():
78
78
  compatible = True
79
79
  platform_helper_version_status = get_platform_helper_version_status()
80
80
  ClickIOProvider().process_messages(platform_helper_version_status.validate())
81
- copilot_versions = versioning.get_copilot_versions()
82
- aws_versions = versioning.get_aws_versions()
81
+ copilot_versions = tool_versioning.get_copilot_versions()
82
+ aws_versions = tool_versioning.get_aws_versions()
83
83
  _check_tool_versions(platform_helper_version_status, copilot_versions, aws_versions)
84
84
  click.secho("Checking addons templates versions...", fg="blue")
85
85
 
86
- local_version = platform_helper_version_status.local
86
+ local_version = platform_helper_version_status.installed
87
87
  latest_release = platform_helper_version_status.latest
88
88
  addons_templates_table = PrettyTable()
89
89
  addons_templates_table.field_names = [
@@ -110,10 +110,10 @@ def deployment():
110
110
  latest_compatible_symbol = yes
111
111
 
112
112
  try:
113
- generated_with_version = versioning.get_template_generated_with_version(
113
+ generated_with_version = tool_versioning.get_template_generated_with_version(
114
114
  str(template_file.resolve())
115
115
  )
116
- versioning.validate_template_version(local_version, str(template_file.resolve()))
116
+ tool_versioning.validate_template_version(local_version, str(template_file.resolve()))
117
117
  except IncompatibleMajorVersionException:
118
118
  local_compatible_symbol = no
119
119
  compatible = False
@@ -134,10 +134,10 @@ def deployment():
134
134
  ]
135
135
 
136
136
  try:
137
- generated_with_version = versioning.get_template_generated_with_version(
137
+ generated_with_version = tool_versioning.get_template_generated_with_version(
138
138
  str(template_file.resolve())
139
139
  )
140
- versioning.validate_template_version(latest_release, str(template_file.resolve()))
140
+ tool_versioning.validate_template_version(latest_release, str(template_file.resolve()))
141
141
  except IncompatibleMajorVersionException:
142
142
  latest_compatible_symbol = no
143
143
  compatible = False
@@ -164,14 +164,14 @@ def _check_tool_versions(platform_helper_versions, copilot_versions, aws_version
164
164
  click.secho("Checking tooling versions...", fg="blue")
165
165
  recommendations = {}
166
166
 
167
- local_copilot_version = copilot_versions.local
167
+ local_copilot_version = copilot_versions.installed
168
168
  copilot_latest_release = copilot_versions.latest
169
169
  if local_copilot_version is None:
170
170
  recommendations["install-copilot"] = (
171
171
  "Install AWS Copilot https://aws.github.io/copilot-cli/"
172
172
  )
173
173
 
174
- if aws_versions.local is None:
174
+ if aws_versions.installed is None:
175
175
  recommendations["install-aws"] = "Install AWS CLI https://aws.amazon.com/cli/"
176
176
 
177
177
  tool_versions_table = PrettyTable()
@@ -186,7 +186,7 @@ def _check_tool_versions(platform_helper_versions, copilot_versions, aws_version
186
186
  tool_versions_table.add_row(
187
187
  [
188
188
  "aws",
189
- str(aws_versions.local),
189
+ str(aws_versions.installed),
190
190
  str(aws_versions.latest),
191
191
  no if aws_versions.is_outdated() else yes,
192
192
  ]
@@ -194,7 +194,7 @@ def _check_tool_versions(platform_helper_versions, copilot_versions, aws_version
194
194
  tool_versions_table.add_row(
195
195
  [
196
196
  "copilot",
197
- str(copilot_versions.local),
197
+ str(copilot_versions.installed),
198
198
  str(copilot_versions.latest),
199
199
  no if copilot_versions.is_outdated() else yes,
200
200
  ]
@@ -202,7 +202,7 @@ def _check_tool_versions(platform_helper_versions, copilot_versions, aws_version
202
202
  tool_versions_table.add_row(
203
203
  [
204
204
  "dbt-platform-helper",
205
- str(platform_helper_versions.local),
205
+ str(platform_helper_versions.installed),
206
206
  str(platform_helper_versions.latest),
207
207
  no if platform_helper_versions.is_outdated() else yes,
208
208
  ]
@@ -4,13 +4,13 @@ import click
4
4
 
5
5
  from dbt_platform_helper.domain.copilot import Copilot
6
6
  from dbt_platform_helper.domain.copilot_environment import CopilotTemplating
7
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
7
8
  from dbt_platform_helper.providers.config import ConfigProvider
8
9
  from dbt_platform_helper.providers.config_validator import ConfigValidator
9
10
  from dbt_platform_helper.providers.files import FileProvider
10
11
  from dbt_platform_helper.providers.io import ClickIOProvider
11
- from dbt_platform_helper.providers.platform_helper_versioning import (
12
- PlatformHelperVersioning,
13
- )
12
+ from dbt_platform_helper.providers.kms import KMSProvider
13
+ from dbt_platform_helper.utils.aws import get_aws_session_or_abort
14
14
  from dbt_platform_helper.utils.click import ClickDocOptGroup
15
15
 
16
16
  # TODOs
@@ -27,7 +27,9 @@ def copilot():
27
27
  def make_addons():
28
28
  """Generate addons CloudFormation for each environment."""
29
29
  try:
30
+ session = get_aws_session_or_abort()
30
31
  config_provider = ConfigProvider(ConfigValidator())
31
- Copilot(config_provider, FileProvider(), CopilotTemplating()).make_addons()
32
+ kms_provider = KMSProvider(session.client("kms"))
33
+ Copilot(config_provider, FileProvider(), CopilotTemplating(), kms_provider).make_addons()
32
34
  except Exception as err:
33
35
  ClickIOProvider().abort_with_error(str(err))
@@ -4,14 +4,12 @@ from dbt_platform_helper.constants import DEFAULT_TERRAFORM_PLATFORM_MODULES_VER
4
4
  from dbt_platform_helper.domain.copilot_environment import CopilotEnvironment
5
5
  from dbt_platform_helper.domain.maintenance_page import MaintenancePage
6
6
  from dbt_platform_helper.domain.terraform_environment import TerraformEnvironment
7
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
7
8
  from dbt_platform_helper.platform_exception import PlatformException
8
9
  from dbt_platform_helper.providers.cloudformation import CloudFormation
9
10
  from dbt_platform_helper.providers.config import ConfigProvider
10
11
  from dbt_platform_helper.providers.config_validator import ConfigValidator
11
12
  from dbt_platform_helper.providers.io import ClickIOProvider
12
- from dbt_platform_helper.providers.platform_helper_versioning import (
13
- PlatformHelperVersioning,
14
- )
15
13
  from dbt_platform_helper.providers.vpc import VpcProvider
16
14
  from dbt_platform_helper.utils.application import load_application
17
15
  from dbt_platform_helper.utils.aws import get_aws_session_or_abort
@@ -94,9 +92,11 @@ def generate(name):
94
92
  help=f"Override the default version of terraform-platform-modules. (Default version is '{DEFAULT_TERRAFORM_PLATFORM_MODULES_VERSION}').",
95
93
  )
96
94
  def generate_terraform(name, terraform_platform_modules_version):
97
-
95
+ click_io = ClickIOProvider()
98
96
  try:
97
+ # TODO = pass the session to ConfigValidator
98
+ get_aws_session_or_abort()
99
99
  config_provider = ConfigProvider(ConfigValidator())
100
100
  TerraformEnvironment(config_provider).generate(name, terraform_platform_modules_version)
101
101
  except PlatformException as err:
102
- ClickIOProvider().abort_with_error(str(err))
102
+ click_io.abort_with_error(str(err))
@@ -3,7 +3,7 @@ import click
3
3
 
4
4
  from dbt_platform_helper.commands.copilot import make_addons
5
5
  from dbt_platform_helper.commands.pipeline import generate as pipeline_generate
6
- from dbt_platform_helper.domain.versioning import RequiredVersion
6
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
7
7
  from dbt_platform_helper.utils.click import ClickDocOptCommand
8
8
 
9
9
 
@@ -16,7 +16,6 @@ def generate(ctx: click.Context):
16
16
 
17
17
  Wraps pipeline generate and make-addons.
18
18
  """
19
-
20
- RequiredVersion().check_platform_helper_version_mismatch()
19
+ PlatformHelperVersioning().check_platform_helper_version_mismatch()
21
20
  ctx.invoke(pipeline_generate)
22
21
  ctx.invoke(make_addons)
@@ -2,9 +2,7 @@ import click
2
2
  from slack_sdk import WebClient
3
3
  from slack_sdk.models import blocks
4
4
 
5
- from dbt_platform_helper.providers.platform_helper_versioning import (
6
- PlatformHelperVersioning,
7
- )
5
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
8
6
  from dbt_platform_helper.utils.arn_parser import ARN
9
7
  from dbt_platform_helper.utils.click import ClickDocOptGroup
10
8
 
@@ -3,13 +3,11 @@ import click
3
3
 
4
4
  from dbt_platform_helper.constants import DEFAULT_TERRAFORM_PLATFORM_MODULES_VERSION
5
5
  from dbt_platform_helper.domain.pipelines import Pipelines
6
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
6
7
  from dbt_platform_helper.providers.config import ConfigProvider
7
8
  from dbt_platform_helper.providers.config_validator import ConfigValidator
8
9
  from dbt_platform_helper.providers.ecr import ECRProvider
9
10
  from dbt_platform_helper.providers.io import ClickIOProvider
10
- from dbt_platform_helper.providers.platform_helper_versioning import (
11
- PlatformHelperVersioning,
12
- )
13
11
  from dbt_platform_helper.providers.terraform_manifest import TerraformManifestProvider
14
12
  from dbt_platform_helper.utils.aws import get_codestar_connection_arn
15
13
  from dbt_platform_helper.utils.click import ClickDocOptGroup
@@ -6,9 +6,7 @@ import click
6
6
  from botocore.exceptions import ClientError
7
7
  from cloudfoundry_client.client import CloudFoundryClient
8
8
 
9
- from dbt_platform_helper.providers.platform_helper_versioning import (
10
- PlatformHelperVersioning,
11
- )
9
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
12
10
  from dbt_platform_helper.utils.application import get_application_name
13
11
  from dbt_platform_helper.utils.aws import SSM_BASE_PATH
14
12
  from dbt_platform_helper.utils.aws import get_aws_session_or_abort
@@ -1,6 +1,6 @@
1
1
  import click
2
2
 
3
- from dbt_platform_helper.domain.versioning import RequiredVersion
3
+ from dbt_platform_helper.domain.versioning import PlatformHelperVersioning
4
4
  from dbt_platform_helper.platform_exception import PlatformException
5
5
  from dbt_platform_helper.providers.io import ClickIOProvider
6
6
  from dbt_platform_helper.utils.click import ClickDocOptGroup
@@ -32,6 +32,6 @@ def get_platform_helper_for_project(pipeline):
32
32
  - Fall back on the version in the deprecated '.platform-helper-version' file
33
33
  """
34
34
  try:
35
- RequiredVersion().get_required_version(pipeline)
35
+ PlatformHelperVersioning().get_required_version(pipeline)
36
36
  except PlatformException as err:
37
37
  ClickIOProvider().abort_with_error(str(err))
@@ -20,6 +20,8 @@ from dbt_platform_helper.utils.aws import check_image_exists
20
20
  from dbt_platform_helper.utils.aws import get_aws_session_or_abort
21
21
  from dbt_platform_helper.utils.aws import get_build_url_from_arn
22
22
  from dbt_platform_helper.utils.aws import get_build_url_from_pipeline_execution_id
23
+ from dbt_platform_helper.utils.aws import get_image_build_project
24
+ from dbt_platform_helper.utils.aws import get_manual_release_pipeline
23
25
  from dbt_platform_helper.utils.aws import list_latest_images
24
26
  from dbt_platform_helper.utils.aws import start_build_extraction
25
27
  from dbt_platform_helper.utils.aws import start_pipeline_and_return_execution_id
@@ -34,6 +36,8 @@ class Codebase:
34
36
  load_application: Callable[[str], Application] = load_application,
35
37
  get_aws_session_or_abort: Callable[[str], Session] = get_aws_session_or_abort,
36
38
  check_image_exists: Callable[[str], str] = check_image_exists,
39
+ get_image_build_project: Callable[[str], str] = get_image_build_project,
40
+ get_manual_release_pipeline: Callable[[str], str] = get_manual_release_pipeline,
37
41
  get_build_url_from_arn: Callable[[str], str] = get_build_url_from_arn,
38
42
  get_build_url_from_pipeline_execution_id: Callable[
39
43
  [str], str
@@ -50,6 +54,8 @@ class Codebase:
50
54
  self.load_application = load_application
51
55
  self.get_aws_session_or_abort = get_aws_session_or_abort
52
56
  self.check_image_exists = check_image_exists
57
+ self.get_image_build_project = get_image_build_project
58
+ self.get_manual_release_pipeline = get_manual_release_pipeline
53
59
  self.get_build_url_from_arn = get_build_url_from_arn
54
60
  self.get_build_url_from_pipeline_execution_id = get_build_url_from_pipeline_execution_id
55
61
  self.list_latest_images = list_latest_images
@@ -126,12 +132,13 @@ class Codebase:
126
132
  self.check_if_commit_exists(commit)
127
133
 
128
134
  codebuild_client = session.client("codebuild")
135
+ project_name = self.get_image_build_project(codebuild_client, app, codebase)
129
136
  build_url = self.__start_build_with_confirmation(
130
137
  codebuild_client,
131
138
  self.get_build_url_from_arn,
132
139
  f'You are about to build "{app}" for "{codebase}" with commit "{commit}". Do you want to continue?',
133
140
  {
134
- "projectName": f"{app}-{codebase}-codebase-pipeline-image-build",
141
+ "projectName": project_name,
135
142
  "artifactsOverride": {"type": "NO_ARTIFACTS"},
136
143
  "sourceVersion": commit,
137
144
  },
@@ -154,9 +161,10 @@ class Codebase:
154
161
 
155
162
  self.check_image_exists(session, application, codebase, commit)
156
163
 
157
- pipeline_name = f"{app}-{codebase}-manual-release-pipeline"
158
164
  codepipeline_client = session.client("codepipeline")
159
165
 
166
+ pipeline_name = self.get_manual_release_pipeline(codepipeline_client, app, codebase)
167
+
160
168
  build_url = self.__start_pipeline_execution_with_confirmation(
161
169
  codepipeline_client,
162
170
  self.get_build_url_from_pipeline_execution_id,
@@ -13,6 +13,7 @@ from dbt_platform_helper.constants import PLATFORM_CONFIG_FILE
13
13
  from dbt_platform_helper.domain.copilot_environment import CopilotTemplating
14
14
  from dbt_platform_helper.providers.config import ConfigProvider
15
15
  from dbt_platform_helper.providers.files import FileProvider
16
+ from dbt_platform_helper.providers.kms import KMSProvider
16
17
  from dbt_platform_helper.utils.application import get_application_name
17
18
  from dbt_platform_helper.utils.application import load_application
18
19
  from dbt_platform_helper.utils.aws import get_aws_session_or_abort
@@ -43,10 +44,12 @@ class Copilot:
43
44
  config_provider: ConfigProvider,
44
45
  file_provider: FileProvider,
45
46
  copilot_templating: CopilotTemplating,
47
+ kms_provider: KMSProvider,
46
48
  ):
47
49
  self.config_provider = config_provider
48
50
  self.file_provider = file_provider
49
51
  self.copilot_templating = copilot_templating
52
+ self.kms_provider = kms_provider
50
53
 
51
54
  def list_copilot_local_environments(self):
52
55
  return [
@@ -38,20 +38,14 @@ class FailedToActivateMaintenancePageException(MaintenancePageException):
38
38
  application_name: str,
39
39
  env: str,
40
40
  original_exception: Exception,
41
- rolled_back_rules: dict[str, bool] = {},
42
41
  ):
43
42
  super().__init__(
44
43
  f"Maintenance page failed to activate for the {application_name} application in environment {env}."
45
44
  )
46
45
  self.orginal_exception = original_exception
47
- self.rolled_back_rules = rolled_back_rules
48
46
 
49
47
  def __str__(self):
50
- return (
51
- f"{super().__str__()}\n"
52
- f"Rolled-back rules: {self.rolled_back_rules }\n"
53
- f"Original exception: {self.orginal_exception}"
54
- )
48
+ return f"{super().__str__()}\n" f"Original exception: {self.orginal_exception}"
55
49
 
56
50
 
57
51
  # TODO should this be in its own provider, inside the VPC one, what logic is this sepcific too?
@@ -187,6 +181,15 @@ class MaintenancePage:
187
181
  listener_arn, target_group_arn
188
182
  )
189
183
 
184
+ self.io.debug(
185
+ f"""
186
+ #----------------------------------------------------------#
187
+ # Creating listener rules for service {svc.name.ljust(21, " ")}#
188
+ #----------------------------------------------------------#
189
+
190
+ """,
191
+ )
192
+
190
193
  for ip in allowed_ips:
191
194
  self.load_balancer.create_header_rule(
192
195
  listener_arn,
@@ -196,6 +199,7 @@ class MaintenancePage:
196
199
  "AllowedIps",
197
200
  next(rule_priority),
198
201
  service_conditions,
202
+ [{"Key": "service", "Value": svc.name}],
199
203
  )
200
204
  self.load_balancer.create_source_ip_rule(
201
205
  listener_arn,
@@ -204,6 +208,7 @@ class MaintenancePage:
204
208
  "AllowedSourceIps",
205
209
  next(rule_priority),
206
210
  service_conditions,
211
+ [{"Key": "service", "Value": svc.name}],
207
212
  )
208
213
 
209
214
  self.load_balancer.create_header_rule(
@@ -214,6 +219,7 @@ class MaintenancePage:
214
219
  "BypassIpFilter",
215
220
  next(rule_priority),
216
221
  service_conditions,
222
+ [{"Key": "service", "Value": svc.name}],
217
223
  )
218
224
 
219
225
  # add to accumilating list of conditions for maintenace page rule
@@ -262,27 +268,48 @@ class MaintenancePage:
262
268
  ],
263
269
  )
264
270
  except Exception as e:
265
- deleted_rules = self.__clean_up_maintenance_page_rules(listener_arn)
271
+ self.__clean_up_maintenance_page_rules(listener_arn)
266
272
  raise FailedToActivateMaintenancePageException(
267
- app, env, f"{e}:\n {traceback.format_exc()}", deleted_rules
273
+ app, env, f"{e}:\n {traceback.format_exc()}"
268
274
  )
269
275
 
270
276
  def __clean_up_maintenance_page_rules(
271
277
  self, listener_arn: str, fail_when_not_deleted: bool = False
272
- ) -> dict[str, bool]:
278
+ ) -> None:
273
279
 
274
280
  tag_descriptions = self.load_balancer.get_rules_tag_descriptions_by_listener_arn(
275
281
  listener_arn
276
282
  )
277
283
 
278
- deletes = {}
284
+ # keep track of rules deleted
285
+ deleted_rules = {"MaintenancePage": 0}
279
286
  for name in ["MaintenancePage", "AllowedIps", "BypassIpFilter", "AllowedSourceIps"]:
280
- deleted = self.load_balancer.delete_listener_rule_by_tags(tag_descriptions, name)
281
- deletes[name] = bool(deleted)
282
- if fail_when_not_deleted and name == "MaintenancePage" and not deleted:
287
+ deleted_list = self.load_balancer.delete_listener_rule_by_tags(tag_descriptions, name)
288
+
289
+ # track the rules deleted grouped by service
290
+ for deleted_rule in deleted_list:
291
+ tags = {t["Key"]: t["Value"] for t in deleted_rule["Tags"]}
292
+ if "service" in tags:
293
+ if tags["service"] not in deleted_rules:
294
+ deleted_rules[tags["service"]] = {
295
+ "AllowedIps": 0,
296
+ "BypassIpFilter": 0,
297
+ "AllowedSourceIps": 0,
298
+ }
299
+ deleted_rules[tags["service"]][name] += 1
300
+ elif tags.get("name") == "MaintenancePage":
301
+ deleted_rules["MaintenancePage"] += 1
302
+
303
+ if (
304
+ fail_when_not_deleted
305
+ and name == "MaintenancePage"
306
+ and deleted_rules["MaintenancePage"] == 0
307
+ ):
283
308
  raise ListenerRuleNotFoundException()
284
309
 
285
- return deletes
310
+ self.io.warn(
311
+ f"Rules deleted by type and grouped by service: {deleted_rules}",
312
+ )
286
313
 
287
314
  def __remove_maintenance_page(self, listener_arn: str) -> dict[str, bool]:
288
315
  self.__clean_up_maintenance_page_rules(listener_arn, True)
@@ -14,7 +14,7 @@ from dbt_platform_helper.providers.io import ClickIOProvider
14
14
  from dbt_platform_helper.providers.terraform_manifest import TerraformManifestProvider
15
15
  from dbt_platform_helper.utils.application import get_application_name
16
16
  from dbt_platform_helper.utils.template import setup_templates
17
- from dbt_platform_helper.utils.versioning import (
17
+ from dbt_platform_helper.utils.tool_versioning import (
18
18
  get_required_terraform_platform_modules_version,
19
19
  )
20
20
 
@@ -1,7 +1,7 @@
1
1
  from dbt_platform_helper.platform_exception import PlatformException
2
2
  from dbt_platform_helper.providers.io import ClickIOProvider
3
3
  from dbt_platform_helper.providers.terraform_manifest import TerraformManifestProvider
4
- from dbt_platform_helper.utils.versioning import (
4
+ from dbt_platform_helper.utils.tool_versioning import (
5
5
  get_required_terraform_platform_modules_version,
6
6
  )
7
7