atlas-init 0.4.3__py3-none-any.whl → 0.4.4__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.
@@ -210,12 +210,12 @@ class Schema(BaseModelLocal):
210
210
 
211
211
 
212
212
  class Resource(BaseModelLocal):
213
- schema: Schema # pyright: ignore
213
+ local_schema: Schema = Field(alias="schema")
214
214
  name: SnakeCaseString
215
215
 
216
216
  @property
217
217
  def use_timeout(self) -> bool:
218
- return any(a.timeouts for a in self.schema.attributes)
218
+ return any(a.timeouts for a in self.local_schema.attributes)
219
219
 
220
220
 
221
221
  ResourceSchemaV3 = Resource
@@ -41,7 +41,7 @@ def schema_attributes(root: object) -> list[Attribute]:
41
41
 
42
42
  @schema_attributes.register
43
43
  def _resource_attributes(root: Resource) -> list[Attribute]:
44
- return root.schema.attributes
44
+ return root.local_schema.attributes
45
45
 
46
46
 
47
47
  @schema_attributes.register
@@ -7,11 +7,10 @@ from functools import cached_property
7
7
  from pathlib import Path
8
8
  from typing import Any, NamedTuple, TypeVar
9
9
 
10
- from model_lib import parse_payload
11
- from pydantic import ValidationError, field_validator, model_validator
12
- from pydantic_settings import BaseSettings, SettingsConfigDict
10
+ from model_lib import StaticSettings, parse_payload
11
+ from pydantic import BaseModel, ValidationError, field_validator
12
+ from zero_3rdparty import iter_utils
13
13
 
14
- from atlas_init.cloud.aws import AwsRegion
15
14
  from atlas_init.settings.config import (
16
15
  AtlasInitConfig,
17
16
  TestSuite,
@@ -19,12 +18,10 @@ from atlas_init.settings.config import (
19
18
  from atlas_init.settings.config import (
20
19
  active_suites as config_active_suites,
21
20
  )
22
- from atlas_init.settings.env_vars_generated import AtlasSettings
23
21
  from atlas_init.settings.path import (
24
- DEFAULT_CONFIG_PATH,
25
- DEFAULT_PROFILES_PATH,
26
- DEFAULT_SCHEMA_CONFIG_PATH,
27
- DEFAULT_TF_PATH,
22
+ DEFAULT_ATLAS_INIT_CONFIG_PATH,
23
+ DEFAULT_ATLAS_INIT_SCHEMA_CONFIG_PATH,
24
+ DEFAULT_TF_SRC_PATH,
28
25
  dump_dotenv,
29
26
  load_dotenv,
30
27
  repo_path_rel_path,
@@ -33,66 +30,59 @@ from atlas_init.settings.path import (
33
30
  logger = logging.getLogger(__name__)
34
31
  ENV_PREFIX = "ATLAS_INIT_"
35
32
  DEFAULT_PROFILE = "default"
33
+ DEFAULT_PROJECT_NAME = "atlas-init"
36
34
  ENV_S3_PROFILE_BUCKET = f"{ENV_PREFIX}S3_PROFILE_BUCKET"
37
35
  ENV_PROJECT_NAME = f"{ENV_PREFIX}PROJECT_NAME"
38
36
  ENV_PROFILE = f"{ENV_PREFIX}PROFILE"
39
- ENV_PROFILES_PATH = f"{ENV_PREFIX}PROFILES_PATH"
40
37
  ENV_TEST_SUITES = f"{ENV_PREFIX}TEST_SUITES"
41
38
  ENV_CLIPBOARD_COPY = f"{ENV_PREFIX}CLIPBOARD_COPY"
42
- REQUIRED_FIELDS = [
43
- "MONGODB_ATLAS_ORG_ID",
44
- "MONGODB_ATLAS_PRIVATE_KEY",
45
- "MONGODB_ATLAS_PUBLIC_KEY",
46
- ]
47
39
  FILENAME_ENV_MANUAL = ".env-manual"
48
40
  T = TypeVar("T")
49
41
 
50
42
 
51
- class ExternalSettings(AtlasSettings):
52
- model_config = SettingsConfigDict(env_prefix="", extra="ignore")
43
+ def read_from_env(env_key: str, default: str = "") -> str:
44
+ return next(
45
+ (os.environ[name] for name in [env_key, env_key.lower(), env_key.upper()] if name in os.environ),
46
+ default,
47
+ )
53
48
 
54
- TF_CLI_CONFIG_FILE: str = ""
55
- AWS_PROFILE: str = ""
56
- AWS_REGION: AwsRegion = "us-east-1"
57
- non_interactive: bool = False
58
49
 
59
- @property
60
- def realm_url(self) -> str:
61
- assert not self.is_mongodbgov_cloud, "realm_url is not supported for mongodbgov cloud"
62
- if "cloud-dev." in self.MONGODB_ATLAS_BASE_URL:
63
- return "https://services.cloud-dev.mongodb.com/"
64
- return "https://services.cloud.mongodb.com/"
50
+ class AtlasInitSettings(StaticSettings):
51
+ atlas_init_profile: str = DEFAULT_PROFILE # override this for different env, e.g. dev, prod
52
+ atlas_init_project_name: str = DEFAULT_PROJECT_NAME # used in the atlas cloud
53
+ atlas_init_config_path: Path = DEFAULT_ATLAS_INIT_CONFIG_PATH # /atlas_init.yaml
54
+ atlas_init_tf_src_path: Path = DEFAULT_TF_SRC_PATH # /tf directory of repo
55
+ atlas_init_tf_schema_config_path: Path = DEFAULT_ATLAS_INIT_SCHEMA_CONFIG_PATH # /terraform.yaml
56
+ atlas_init_schema_out_path: Path | None = None # override this for the generated schema
57
+
58
+ atlas_init_cfn_profile: str = ""
59
+ atlas_init_cfn_region: str = ""
60
+ atlas_init_cfn_use_kms_key: bool = False
61
+ atlas_init_cliboard_copy: str = ""
62
+ atlas_init_test_suites: str = ""
63
+ atlas_init_s3_profile_bucket: str = ""
64
+
65
+ non_interactive: bool = False
65
66
 
66
67
  @property
67
68
  def is_interactive(self) -> bool:
68
69
  return not self.non_interactive
69
70
 
70
71
  @property
71
- def is_mongodbgov_cloud(self) -> bool:
72
- return "mongodbgov" in self.MONGODB_ATLAS_BASE_URL
72
+ def profiles_path(self) -> Path:
73
+ return self.static_root / "profiles"
73
74
 
75
+ @property
76
+ def project_name(self) -> str:
77
+ return self.atlas_init_project_name
74
78
 
75
- def read_from_env(env_key: str, default: str = "") -> str:
76
- for name in [env_key, env_key.lower(), env_key.upper()]:
77
- if name in os.environ:
78
- return os.environ[name]
79
- return default
80
-
81
-
82
- class AtlasInitPaths(BaseSettings):
83
- model_config = SettingsConfigDict(env_prefix=ENV_PREFIX)
84
-
85
- profile: str = DEFAULT_PROFILE
86
- config_path: Path = DEFAULT_CONFIG_PATH
87
- tf_path: Path = DEFAULT_TF_PATH
88
- profiles_path: Path = DEFAULT_PROFILES_PATH
89
- tf_schema_config_path: Path = DEFAULT_SCHEMA_CONFIG_PATH
90
- schema_out_path: Path | None = None
91
- s3_profile_bucket: str = ""
79
+ @property
80
+ def profile(self) -> str:
81
+ return self.atlas_init_profile
92
82
 
93
83
  @property
94
84
  def schema_out_path_computed(self) -> Path:
95
- return self.schema_out_path or self.profile_dir / "schema"
85
+ return self.atlas_init_schema_out_path or self.static_root / "schema"
96
86
 
97
87
  @property
98
88
  def profile_dir(self) -> Path:
@@ -135,8 +125,24 @@ class AtlasInitPaths(BaseSettings):
135
125
  def tf_outputs_path(self) -> Path:
136
126
  return self.profile_dir / "tf_outputs.json"
137
127
 
138
- def load_env_vars(self, path: Path) -> dict[str, str]:
139
- return load_dotenv(path)
128
+ @property
129
+ def github_ci_run_logs(self) -> Path:
130
+ return self.cache_root / "github_ci_run_logs"
131
+
132
+ @property
133
+ def github_ci_summary_dir(self) -> Path:
134
+ return self.cache_root / "github_ci_summary"
135
+
136
+ @property
137
+ def go_test_logs_dir(self) -> Path:
138
+ return self.cache_root / "go_test_logs"
139
+
140
+ @property
141
+ def atlas_atlas_api_transformed_yaml(self) -> Path:
142
+ return self.cache_root / "atlas_api_transformed.yaml"
143
+
144
+ def cfn_region(self, default: str) -> str:
145
+ return self.atlas_init_cfn_region or default
140
146
 
141
147
  def load_env_vars_full(self) -> dict[str, str]:
142
148
  env_path = self.env_vars_vs_code
@@ -149,7 +155,7 @@ class AtlasInitPaths(BaseSettings):
149
155
 
150
156
  def env_vars_cls(self, t: type[T], *, path: Path | None = None) -> T:
151
157
  path = path or self.env_vars_vs_code
152
- env_vars = self.load_env_vars(path) if path.exists() else {}
158
+ env_vars = load_dotenv(path) if path.exists() else {}
153
159
  return t(**env_vars)
154
160
 
155
161
  def load_profile_manual_env_vars(self, *, skip_os_update: bool = False) -> dict[str, str]:
@@ -161,77 +167,25 @@ class AtlasInitPaths(BaseSettings):
161
167
  if new_updates := {k: v for k, v in manual_env_vars.items() if k not in os.environ}:
162
168
  logger.info(f"loading manual env-vars {','.join(new_updates)}")
163
169
  os.environ.update(new_updates)
164
- else:
165
- logger.warning(f"no {self.env_file_manual} exists")
166
170
  return manual_env_vars
167
171
 
168
172
  def include_extra_env_vars_in_vscode(self, extra_env_vars: dict[str, str]) -> None:
169
173
  extra_name = ", ".join(extra_env_vars.keys())
170
- original_env_vars = self.load_env_vars(self.env_vars_vs_code)
174
+ original_env_vars = load_dotenv(self.env_vars_vs_code)
171
175
  new_env_vars = original_env_vars | extra_env_vars
172
176
  dump_dotenv(self.env_vars_vs_code, new_env_vars)
173
177
  logger.info(f"done {self.env_vars_vs_code} updated with {extra_name} env-vars ✅")
174
178
 
175
-
176
- class EnvVarsCheck(NamedTuple):
177
- missing: list[str]
178
- ambiguous: list[str]
179
-
180
-
181
- class AtlasInitSettings(AtlasInitPaths, ExternalSettings):
182
- model_config = SettingsConfigDict(env_prefix=ENV_PREFIX)
183
-
184
- cfn_profile: str = ""
185
- cfn_region: str = ""
186
- cfn_use_kms_key: bool = False
187
- project_name: str = ""
188
-
189
- cliboard_copy: str = ""
190
- test_suites: str = ""
191
-
192
- @classmethod
193
- def check_env_vars(
194
- cls,
195
- profile: str = DEFAULT_PROFILE,
196
- required_env_vars: list[str] | None = None,
197
- ) -> EnvVarsCheck:
198
- required_env_vars = required_env_vars or []
199
- path_settings = AtlasInitPaths(profile=profile)
200
- manual_env_vars = path_settings.manual_env_vars
201
- ambiguous: list[str] = []
202
- for env_name, manual_value in manual_env_vars.items():
203
- env_value = read_from_env(env_name)
204
- if env_value and manual_value != env_value:
205
- ambiguous.append(env_name)
206
- missing_env_vars = sorted(
207
- env_name
208
- for env_name in REQUIRED_FIELDS + required_env_vars
209
- if read_from_env(env_name) == "" and env_name not in manual_env_vars
210
- )
211
- return EnvVarsCheck(missing=missing_env_vars, ambiguous=sorted(ambiguous))
212
-
213
- @classmethod
214
- def safe_settings(cls, profile: str, *, ext_settings: ExternalSettings | None = None) -> AtlasInitSettings:
215
- """side effect of loading manual env-vars and set profile"""
216
- os.environ[ENV_PROFILE] = profile
217
- AtlasInitPaths(profile=profile).load_profile_manual_env_vars()
218
- ext_settings = ext_settings or ExternalSettings() # type: ignore
219
- path_settings = AtlasInitPaths()
220
- return cls(**path_settings.model_dump(), **ext_settings.model_dump())
221
-
222
- @field_validator("test_suites", mode="after")
179
+ @field_validator(ENV_TEST_SUITES.lower(), mode="after")
223
180
  @classmethod
224
181
  def ensure_whitespace_replaced_with_commas(cls, value: str) -> str:
225
182
  return value.strip().replace(" ", ",")
226
183
 
227
- @model_validator(mode="after")
228
- def post_init(self):
229
- self.cfn_region = self.cfn_region or self.AWS_REGION
230
- return self
231
-
232
184
  @cached_property
233
185
  def config(self) -> AtlasInitConfig:
234
- config_path = Path(self.config_path) if self.config_path else DEFAULT_CONFIG_PATH
186
+ config_path = (
187
+ Path(self.atlas_init_config_path) if self.atlas_init_config_path else DEFAULT_ATLAS_INIT_CONFIG_PATH
188
+ )
235
189
  assert config_path.exists(), f"no config path found @ {config_path}"
236
190
  yaml_parsed = parse_payload(config_path)
237
191
  assert isinstance(yaml_parsed, dict), f"config must be a dictionary, got {yaml_parsed}"
@@ -239,30 +193,35 @@ class AtlasInitSettings(AtlasInitPaths, ExternalSettings):
239
193
 
240
194
  @property
241
195
  def test_suites_parsed(self) -> list[str]:
242
- return [t for t in self.test_suites.split(",") if t]
196
+ return [t for t in self.atlas_init_test_suites.split(",") if t]
243
197
 
244
- def tf_vars(self) -> dict[str, Any]:
198
+ def tf_vars(self, default_aws_region: str) -> dict[str, Any]:
245
199
  variables = {}
246
- if self.cfn_profile:
200
+ if self.atlas_init_cfn_profile:
247
201
  variables["cfn_config"] = {
248
- "profile": self.cfn_profile,
249
- "region": self.cfn_region,
250
- "use_kms_key": self.cfn_use_kms_key,
202
+ "profile": self.atlas_init_cfn_profile,
203
+ "region": self.atlas_init_cfn_region or default_aws_region,
204
+ "use_kms_key": self.atlas_init_cfn_use_kms_key,
251
205
  }
252
- if self.s3_profile_bucket:
206
+ if self.atlas_init_s3_profile_bucket:
253
207
  variables["use_aws_s3"] = True
254
208
  return variables
255
209
 
256
210
 
211
+ class EnvVarsCheck(NamedTuple):
212
+ missing: list[str]
213
+ ambiguous: list[str]
214
+
215
+ @property
216
+ def is_ok(self) -> bool:
217
+ return not self.missing and not self.ambiguous
218
+
219
+
257
220
  def active_suites(settings: AtlasInitSettings) -> list[TestSuite]: # type: ignore
258
221
  repo_path, cwd_rel_path = repo_path_rel_path()
259
222
  return config_active_suites(settings.config, repo_path, cwd_rel_path, settings.test_suites_parsed)
260
223
 
261
224
 
262
- _sentinel = object()
263
- PLACEHOLDER_VALUE = "PLACEHOLDER"
264
-
265
-
266
225
  class EnvVarsError(Exception):
267
226
  def __init__(self, missing: list[str], ambiguous: list[str]):
268
227
  self.missing = missing
@@ -273,31 +232,49 @@ class EnvVarsError(Exception):
273
232
  return f"missing: {self.missing}, ambiguous: {self.ambiguous}"
274
233
 
275
234
 
235
+ def collect_required_env_vars(settings_classes: list[type[BaseModel]]) -> list[str]:
236
+ cls_required_env_vars: dict[str, list[str]] = {}
237
+ for cls in settings_classes:
238
+ try:
239
+ cls()
240
+ except ValidationError as error:
241
+ cls_required_env_vars[cls.__name__] = [".".join(str(loc) for loc in e["loc"]) for e in error.errors()]
242
+ return list(iter_utils.flat_map(cls_required_env_vars.values()))
243
+
244
+
245
+ def detect_ambiguous_env_vars(manual_env_vars: dict[str, str]) -> list[str]:
246
+ ambiguous: list[str] = []
247
+ for env_name, manual_value in manual_env_vars.items():
248
+ env_value = read_from_env(env_name)
249
+ if env_value and manual_value != env_value:
250
+ ambiguous.append(env_name)
251
+ return ambiguous
252
+
253
+
254
+ def find_missing_env_vars(required_env_vars: list[str], manual_env_vars: dict[str, str]) -> list[str]:
255
+ return sorted(
256
+ env_name for env_name in required_env_vars if read_from_env(env_name) == "" and env_name not in manual_env_vars
257
+ )
258
+
259
+
276
260
  def init_settings(
277
- required_env_vars: list[str] | object = _sentinel,
278
- *,
279
- non_required: bool = False,
261
+ *settings_classes: type[BaseModel],
280
262
  ) -> AtlasInitSettings:
281
- if required_env_vars is _sentinel:
282
- required_env_vars = [ENV_PROJECT_NAME]
283
- if non_required:
284
- required_env_vars = []
285
- profile = os.getenv("ATLAS_INIT_PROFILE", DEFAULT_PROFILE)
286
- missing_env_vars, ambiguous_env_vars = AtlasInitSettings.check_env_vars(
287
- profile,
288
- required_env_vars=required_env_vars, # type: ignore
289
- )
290
- if missing_env_vars and not non_required:
291
- logger.warning(f"missing env_vars: {missing_env_vars}")
292
- if ambiguous_env_vars:
263
+ settings = AtlasInitSettings.from_env()
264
+ manual_env_vars = settings.manual_env_vars
265
+
266
+ required_env_vars = collect_required_env_vars(list(settings_classes))
267
+ ambiguous = detect_ambiguous_env_vars(manual_env_vars)
268
+ missing_env_vars = find_missing_env_vars(required_env_vars, manual_env_vars)
269
+
270
+ if ambiguous:
293
271
  logger.warning(
294
- f"amiguous env_vars: {ambiguous_env_vars} (specified both in cli/env & in .env-manual file with different values)"
272
+ f"ambiguous env_vars: {ambiguous} (specified both in cli/env & in .env-manual file with different values)"
295
273
  )
296
- ext_settings = None
297
- if non_required and missing_env_vars:
298
- placeholders = {k: PLACEHOLDER_VALUE for k in missing_env_vars}
299
- missing_env_vars = []
300
- ext_settings = ExternalSettings(**placeholders) # type: ignore
301
- if missing_env_vars or ambiguous_env_vars:
302
- raise EnvVarsError(missing_env_vars, ambiguous_env_vars)
303
- return AtlasInitSettings.safe_settings(profile, ext_settings=ext_settings)
274
+ if missing_env_vars or ambiguous:
275
+ raise EnvVarsError(missing_env_vars, ambiguous)
276
+
277
+ settings.load_profile_manual_env_vars()
278
+ for cls in settings_classes:
279
+ cls() # ensure any errors are raised
280
+ return AtlasInitSettings.from_env()
@@ -1,18 +1,55 @@
1
1
  import random
2
+ from typing import Self
2
3
 
3
- from pydantic import ConfigDict, Field
4
+ from pydantic import ConfigDict, Field, model_validator
4
5
  from pydantic_settings import BaseSettings
5
6
 
6
7
 
7
8
  class _EnvVarsGenerated(BaseSettings):
8
9
  model_config = ConfigDict(extra="ignore") # type: ignore
9
10
 
11
+ @classmethod
12
+ def from_env(cls) -> Self:
13
+ return cls()
14
+
10
15
 
11
16
  class AtlasSettings(_EnvVarsGenerated):
12
17
  MONGODB_ATLAS_ORG_ID: str
13
18
  MONGODB_ATLAS_PRIVATE_KEY: str
14
19
  MONGODB_ATLAS_PUBLIC_KEY: str
15
- MONGODB_ATLAS_BASE_URL: str = "https://cloud-dev.mongodb.com/"
20
+ MONGODB_ATLAS_BASE_URL: str
21
+
22
+ @property
23
+ def realm_url(self) -> str:
24
+ assert not self.is_mongodbgov_cloud, "realm_url is not supported for mongodbgov cloud"
25
+ if "cloud-dev." in self.MONGODB_ATLAS_BASE_URL:
26
+ return "https://services.cloud-dev.mongodb.com/"
27
+ return "https://services.cloud.mongodb.com/"
28
+
29
+ @property
30
+ def is_mongodbgov_cloud(self) -> bool:
31
+ return "mongodbgov" in self.MONGODB_ATLAS_BASE_URL
32
+
33
+
34
+ class AWSSettings(_EnvVarsGenerated):
35
+ AWS_REGION: str
36
+ AWS_PROFILE: str = ""
37
+ AWS_ACCESS_KEY_ID: str = ""
38
+ AWS_SECRET_ACCESS_KEY: str = ""
39
+
40
+ @model_validator(mode="after")
41
+ def ensure_credentials_are_given(self) -> Self:
42
+ assert self.AWS_PROFILE or (self.AWS_ACCESS_KEY_ID and self.AWS_SECRET_ACCESS_KEY), (
43
+ "Either AWS_PROFILE or both AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY must be provided"
44
+ )
45
+ assert not (self.AWS_PROFILE and (self.AWS_ACCESS_KEY_ID and self.AWS_SECRET_ACCESS_KEY)), (
46
+ "Either AWS_PROFILE or both AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY must be provided, not both"
47
+ )
48
+ return self
49
+
50
+
51
+ class TerraformSettings(_EnvVarsGenerated):
52
+ TF_CLI_CONFIG_FILE: str
16
53
 
17
54
 
18
55
  class RealmSettings(_EnvVarsGenerated):
@@ -24,11 +61,5 @@ class RealmSettings(_EnvVarsGenerated):
24
61
  RANDOM_INT_100K: str = Field(default_factory=lambda: str(random.randint(0, 100_000))) # noqa: S311 # not used for cryptographic purposes # nosec
25
62
 
26
63
 
27
- class EnvVarsGenerated(AtlasSettings):
64
+ class AtlasSettingsWithProject(AtlasSettings):
28
65
  MONGODB_ATLAS_PROJECT_ID: str
29
-
30
-
31
- class TFModuleCluster(_EnvVarsGenerated):
32
- MONGODB_ATLAS_CLUSTER_NAME: str
33
- MONGODB_ATLAS_CONTAINER_ID: str
34
- MONGODB_URL: str
@@ -0,0 +1,71 @@
1
+ from atlas_init.settings.env_vars_generated import _EnvVarsGenerated
2
+
3
+
4
+ class TFModuleAws_S3(_EnvVarsGenerated):
5
+ AWS_S3_BUCKET: str
6
+
7
+
8
+ class TFModuleAws_Vars(_EnvVarsGenerated):
9
+ AWS_ACCESS_KEY_ID: str
10
+ AWS_CUSTOMER_MASTER_KEY_ID: str
11
+ AWS_REGION: str
12
+ AWS_REGION_LOWERCASE: str
13
+ AWS_REGION_UPPERCASE: str
14
+ AWS_SECRET_ACCESS_KEY: str
15
+
16
+
17
+ class TFModuleAws_Vpc(_EnvVarsGenerated):
18
+ AWS_SECURITY_GROUP_ID: str
19
+ AWS_SUBNET_ID: str
20
+ AWS_VPC_CIDR_BLOCK: str
21
+ AWS_VPC_ID: str
22
+
23
+
24
+ class TFModuleCfn(_EnvVarsGenerated):
25
+ CFN_EXAMPLE_EXECUTION_ROLE: str
26
+ MONGODB_ATLAS_PRIVATE_API_KEY: str
27
+ MONGODB_ATLAS_PROFILE: str
28
+ MONGODB_ATLAS_PUBLIC_API_KEY: str
29
+ MONGODB_ATLAS_SECRET_PROFILE: str
30
+
31
+
32
+ class TFModuleCloud_Provider(_EnvVarsGenerated):
33
+ AWS_IAM_ROLE_ARN: str
34
+ IAM_ROLE_ID: str
35
+
36
+
37
+ class TFModuleCluster(_EnvVarsGenerated):
38
+ MONGODB_ATLAS_CLUSTER_NAME: str
39
+ MONGODB_ATLAS_CONTAINER_ID: str
40
+ MONGODB_URL: str
41
+
42
+
43
+ class TFModuleFederated_Vars(_EnvVarsGenerated):
44
+ MONGODB_ATLAS_FEDERATED_GROUP_ID: str
45
+ MONGODB_ATLAS_FEDERATED_IDP_ID: str
46
+ MONGODB_ATLAS_FEDERATED_ORG_ID: str
47
+ MONGODB_ATLAS_FEDERATED_SETTINGS_ASSOCIATED_DOMAIN: str
48
+ MONGODB_ATLAS_FEDERATION_SETTINGS_ID: str
49
+
50
+
51
+ class TFModuleProject_Extra(_EnvVarsGenerated):
52
+ MONGODB_ATLAS_ORG_API_KEY_ID: str
53
+ MONGODB_ATLAS_TEAMS_IDS: str
54
+ MONGODB_ATLAS_TEAM_ID: str
55
+
56
+
57
+ class TFModuleStream_Instance(_EnvVarsGenerated):
58
+ MONGODB_ATLAS_STREAM_INSTANCE_ID: str
59
+ MONGODB_ATLAS_STREAM_INSTANCE_NAME: str
60
+
61
+
62
+ class TFModuleVpc_Peering(_EnvVarsGenerated):
63
+ AWS_ACCOUNT_ID: str
64
+ AWS_REGION: str
65
+ AWS_VPC_CIDR_BLOCK: str
66
+ AWS_VPC_ID: str
67
+
68
+
69
+ class TFModuleVpc_Privatelink(_EnvVarsGenerated):
70
+ MONGODB_ATLAS_PRIVATE_ENDPOINT_DNS_NAME: str
71
+ MONGODB_ATLAS_PRIVATE_ENDPOINT_ID: str
@@ -13,7 +13,6 @@ logger = logging.getLogger(__name__)
13
13
  """WARNING these variables should only be used through the AtlasInitSettings, not directly"""
14
14
  if running_in_repo():
15
15
  ROOT_PATH = Path(__file__).parent.parent.parent # atlas_init REPO_PATH
16
- DEFAULT_PROFILES_PATH = ROOT_PATH / "profiles"
17
16
  else:
18
17
  ROOT_PATH = Path(__file__).parent.parent # site package install directory
19
18
  _default_profiles_path = os.environ.get("ATLAS_INIT_PROFILES_PATH")
@@ -21,14 +20,9 @@ else:
21
20
  _default_profiles_path = Path(user_data_dir("atlas_init")) / "profiles"
22
21
  warning_msg = f"os.environ['ATLAS_INIT_PROFILES_PATH'] is not set using default: {_default_profiles_path}"
23
22
  logger.warning(warning_msg)
24
- DEFAULT_PROFILES_PATH = Path(_default_profiles_path)
25
- DEFAULT_PROFILES_PATH.mkdir(exist_ok=True, parents=True)
26
- DEFAULT_TF_PATH = ROOT_PATH / "tf"
27
- DEFAULT_CONFIG_PATH = ROOT_PATH / "atlas_init.yaml"
28
- DEFAULT_SCHEMA_CONFIG_PATH = ROOT_PATH / "terraform.yaml"
29
- DEFAULT_GITHUB_CI_RUN_LOGS = ROOT_PATH / "github_ci_run_logs"
30
- DEFAULT_GITHUB_SUMMARY_DIR = ROOT_PATH / "github_ci_summary"
31
- DEFAULT_DOWNLOADS_DIR = ROOT_PATH / "downloads"
23
+ DEFAULT_TF_SRC_PATH = ROOT_PATH / "tf"
24
+ DEFAULT_ATLAS_INIT_CONFIG_PATH = ROOT_PATH / "atlas_init.yaml"
25
+ DEFAULT_ATLAS_INIT_SCHEMA_CONFIG_PATH = ROOT_PATH / "terraform.yaml"
32
26
 
33
27
 
34
28
  def load_dotenv(env_path: Path) -> dict[str, str]:
atlas_init/typer_app.py CHANGED
@@ -26,7 +26,7 @@ logger = logging.getLogger(__name__)
26
26
 
27
27
  def sync_on_done(return_value, s3_profile_bucket: str = "", use_clipboard: str = "", **kwargs):
28
28
  logger.info(f"sync_on_done return_value={return_value} and {kwargs}")
29
- settings = init_settings(non_required=True)
29
+ settings = init_settings()
30
30
  if s3_profile_bucket:
31
31
  logger.info(f"using s3 bucket for profile sync: {s3_profile_bucket}")
32
32
  upload_to_s3(settings.profile_dir, s3_profile_bucket)
@@ -110,9 +110,9 @@ def main(
110
110
  logger.info(f"in the app callback, log-level: {log_level}, command: {format_cmd(ctx)}")
111
111
  if s3_bucket := s3_profile_bucket:
112
112
  logger.info(f"using s3 bucket for profile sync: {s3_bucket}")
113
- settings = init_settings(non_required=True)
113
+ settings = init_settings()
114
114
  download_from_s3(settings.profile_dir, s3_bucket)
115
- settings = init_settings(required_env_vars=[])
115
+ settings = init_settings()
116
116
  if not show_secrets:
117
117
  # must happen after init_settings that might load some env-vars
118
118
  hide_secrets(handler, {**os.environ})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atlas-init
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Project-URL: Documentation, https://github.com/EspenAlbert/atlas-init#readme
5
5
  Project-URL: Issues, https://github.com/EspenAlbert/atlas-init/issues
6
6
  Project-URL: Source, https://github.com/EspenAlbert/atlas-init
@@ -20,7 +20,7 @@ Requires-Dist: mypy-boto3-cloudformation==1.37.22
20
20
  Requires-Dist: orjson==3.10.13
21
21
  Requires-Dist: pydantic-settings==2.7.1
22
22
  Requires-Dist: pygithub==2.6.1
23
- Requires-Dist: python-hcl2==6.1.0
23
+ Requires-Dist: python-hcl2==7.1.0
24
24
  Requires-Dist: requests==2.32.2
25
25
  Requires-Dist: rich==14.0.0
26
26
  Requires-Dist: stringcase==1.2.0