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.
- dbt_platform_helper/commands/application.py +2 -4
- dbt_platform_helper/commands/codebase.py +1 -3
- dbt_platform_helper/commands/conduit.py +1 -3
- dbt_platform_helper/commands/config.py +14 -14
- dbt_platform_helper/commands/copilot.py +6 -4
- dbt_platform_helper/commands/environment.py +5 -5
- dbt_platform_helper/commands/generate.py +2 -3
- dbt_platform_helper/commands/notify.py +1 -3
- dbt_platform_helper/commands/pipeline.py +1 -3
- dbt_platform_helper/commands/secrets.py +1 -3
- dbt_platform_helper/commands/version.py +2 -2
- dbt_platform_helper/domain/codebase.py +10 -2
- dbt_platform_helper/domain/copilot.py +3 -0
- dbt_platform_helper/domain/maintenance_page.py +42 -15
- dbt_platform_helper/domain/pipelines.py +1 -1
- dbt_platform_helper/domain/terraform_environment.py +1 -1
- dbt_platform_helper/domain/versioning.py +125 -35
- dbt_platform_helper/providers/aws/interfaces.py +13 -0
- dbt_platform_helper/providers/aws/opensearch.py +23 -0
- dbt_platform_helper/providers/aws/redis.py +21 -0
- dbt_platform_helper/providers/cache.py +40 -4
- dbt_platform_helper/providers/config_validator.py +15 -14
- dbt_platform_helper/providers/copilot.py +1 -1
- dbt_platform_helper/providers/io.py +3 -0
- dbt_platform_helper/providers/kms.py +22 -0
- dbt_platform_helper/providers/load_balancers.py +26 -15
- dbt_platform_helper/providers/semantic_version.py +7 -4
- dbt_platform_helper/providers/version.py +21 -3
- dbt_platform_helper/providers/yaml_file.py +0 -1
- dbt_platform_helper/utils/aws.py +27 -4
- dbt_platform_helper/utils/files.py +0 -6
- dbt_platform_helper/utils/{versioning.py → tool_versioning.py} +11 -6
- {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/METADATA +1 -1
- {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/RECORD +38 -37
- dbt_platform_helper/providers/opensearch.py +0 -36
- dbt_platform_helper/providers/platform_helper_versioning.py +0 -107
- dbt_platform_helper/providers/redis.py +0 -34
- /dbt_platform_helper/providers/{aws.py → aws/exceptions.py} +0 -0
- {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/LICENSE +0 -0
- {dbt_platform_helper-13.1.2.dist-info → dbt_platform_helper-13.2.0.dist-info}/WHEEL +0 -0
- {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.
|
|
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 = "
|
|
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
|
|
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.
|
|
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 =
|
|
82
|
-
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.
|
|
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 =
|
|
113
|
+
generated_with_version = tool_versioning.get_template_generated_with_version(
|
|
114
114
|
str(template_file.resolve())
|
|
115
115
|
)
|
|
116
|
-
|
|
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 =
|
|
137
|
+
generated_with_version = tool_versioning.get_template_generated_with_version(
|
|
138
138
|
str(template_file.resolve())
|
|
139
139
|
)
|
|
140
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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":
|
|
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
|
-
|
|
271
|
+
self.__clean_up_maintenance_page_rules(listener_arn)
|
|
266
272
|
raise FailedToActivateMaintenancePageException(
|
|
267
|
-
app, env, f"{e}:\n {traceback.format_exc()}"
|
|
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
|
-
) ->
|
|
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
|
-
|
|
284
|
+
# keep track of rules deleted
|
|
285
|
+
deleted_rules = {"MaintenancePage": 0}
|
|
279
286
|
for name in ["MaintenancePage", "AllowedIps", "BypassIpFilter", "AllowedSourceIps"]:
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
4
|
+
from dbt_platform_helper.utils.tool_versioning import (
|
|
5
5
|
get_required_terraform_platform_modules_version,
|
|
6
6
|
)
|
|
7
7
|
|