qontract-reconcile 0.10.2.dev39__py3-none-any.whl → 0.10.2.dev40__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qontract-reconcile
3
- Version: 0.10.2.dev39
3
+ Version: 0.10.2.dev40
4
4
  Summary: Collection of tools to reconcile services with their desired state as defined in the app-interface DB.
5
5
  Project-URL: homepage, https://github.com/app-sre/qontract-reconcile
6
6
  Project-URL: repository, https://github.com/app-sre/qontract-reconcile
@@ -202,10 +202,10 @@ reconcile/external_resources/integration_secrets_sync.py,sha256=dX09O3r6KURziUYY
202
202
  reconcile/external_resources/manager.py,sha256=DtxjWx34WdPjPR5TzqV4mZpN_Gn20LcNTZHBbPxqzuQ,16953
203
203
  reconcile/external_resources/meta.py,sha256=noaytFzmShpzLA_ebGh7wuP45mOfHIOnnoUxivjDa1I,672
204
204
  reconcile/external_resources/metrics.py,sha256=KiBjMUaN_z0cSkF_7Ar_a8RiuiwVqjyMcVdISlxhzXE,3898
205
- reconcile/external_resources/model.py,sha256=EpgIgVRPUsyfHhgjHv_TLUKjzFiIQt0wUd30K0NJJpI,11826
206
- reconcile/external_resources/reconciler.py,sha256=K9QvbQCIOCuOHnPIxQE_P_jFtrkF3dGo8d_cCCh08Ys,8973
205
+ reconcile/external_resources/model.py,sha256=dxwiyI3J9xyLeue8_W9NJoap-CkKLMAoY0S0ml5-NbU,13450
206
+ reconcile/external_resources/reconciler.py,sha256=_bUzDGieSikDOLcLxCim2BsbOCtFZusJu4tz6baYk9o,9676
207
207
  reconcile/external_resources/secrets_sync.py,sha256=50fK4fzgSz-K8uy5_DQQWA_ju_rTDYAC2HRymgfY7TA,16344
208
- reconcile/external_resources/state.py,sha256=ye8yjMoCtTHSRhDH7skFLDIHIuYTjisWYCTJrwnmbEw,9565
208
+ reconcile/external_resources/state.py,sha256=gF3ACdl7YiUlbQ4uEGrD6i_Txxqr6mT9f8IFlTQ-8dY,13176
209
209
  reconcile/glitchtip/README.md,sha256=rfXT6jNP9khJW65jL7I2PgoxvxgcGGuJF8NpbzufEQ4,4335
210
210
  reconcile/glitchtip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
211
211
  reconcile/glitchtip/integration.py,sha256=vCyg8W4ZUGxjU8tB1Gkre_auSpzo83n05mmO8_-7al0,8263
@@ -215,7 +215,7 @@ reconcile/glitchtip_project_alerts/integration.py,sha256=BgMx-NyV9mTuv7Sotb2OioC
215
215
  reconcile/glitchtip_project_dsn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
216
  reconcile/glitchtip_project_dsn/integration.py,sha256=2iugub-kHYkHNK33n0v9_TeWonuxCPah_VkoTPvaajE,8077
217
217
  reconcile/gql_definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
218
- reconcile/gql_definitions/introspection.json,sha256=ErIjLKDbNw4SLyGXhp9iGmL1RSfT0U7gU1A3tsn1674,2217790
218
+ reconcile/gql_definitions/introspection.json,sha256=g-GShl6Gr0Q-XLLEp1BvSBJ7c513YzmjEZvynMhztBk,2219565
219
219
  reconcile/gql_definitions/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
220
220
  reconcile/gql_definitions/acs/acs_instances.py,sha256=L91WW9LbhJbBSrECqShQpFtjoBOsmNIYLRpMbx1io5o,2181
221
221
  reconcile/gql_definitions/acs/acs_policies.py,sha256=bN5i4mks10Z23KJSj7jqp966Osq2dps4d-sPH9gjxEA,7008
@@ -299,9 +299,11 @@ reconcile/gql_definitions/endpoints_discovery/__init__.py,sha256=47DEQpj8HBSa-_T
299
299
  reconcile/gql_definitions/endpoints_discovery/apps.py,sha256=aBWRAwDUJQ32ghJS4cPQcR9SNl20Fcwd3pxHDB3YJQY,3172
300
300
  reconcile/gql_definitions/external_resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
301
301
  reconcile/gql_definitions/external_resources/aws_accounts.py,sha256=XR69j9dpTQ0gv8y-AZN7AJ0dPvO-wbHscyCDgrax6Bk,2046
302
- reconcile/gql_definitions/external_resources/external_resources_modules.py,sha256=cbbvGq1Te9DP8XiFg3bp4Y0q6LxpGYov8ugcROPyPLI,2647
303
- reconcile/gql_definitions/external_resources/external_resources_namespaces.py,sha256=dW7RrIA9gAJS7AHQwHggsJXhlSVnX0jV1c4W9e7a7Jc,45393
304
- reconcile/gql_definitions/external_resources/external_resources_settings.py,sha256=K8m9EKlfIVGP2KyqTduo7MMSKFjVC3yk5ZfO9hgdA7A,3192
302
+ reconcile/gql_definitions/external_resources/external_resources_modules.py,sha256=JViHtDWEBwjStBUo_bUdm_sxdpjCHcoATeFvwFRLQpU,3009
303
+ reconcile/gql_definitions/external_resources/external_resources_namespaces.py,sha256=-0Q48lfH-fxAvwqYfXbLQ1aP7bFFh1BRQIYPnF7W9ZI,43067
304
+ reconcile/gql_definitions/external_resources/external_resources_settings.py,sha256=WBkJqnoyYCe1Vimwbp_Pa0RdyTdmWNf6oEWyA749QzA,3589
305
+ reconcile/gql_definitions/external_resources/fragments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
306
+ reconcile/gql_definitions/external_resources/fragments/external_resources_module_overrides.py,sha256=T_qWCRtzU8F9frebBXG9TkeQdrKGt3R9YinSngPoFqM,1262
305
307
  reconcile/gql_definitions/fragments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
306
308
  reconcile/gql_definitions/fragments/aus_organization.py,sha256=uBKbTuBa3CZmTXR5HOcGhRcu2U9kM93KbYmoWTxcpB0,4767
307
309
  reconcile/gql_definitions/fragments/aws_account_common.py,sha256=3-7ZAP6GSff7Z2Syz2VQCLY4IySqBOSVmceaRiVNQpw,2385
@@ -773,7 +775,7 @@ tools/saas_promotion_state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
773
775
  tools/saas_promotion_state/saas_promotion_state.py,sha256=UfwwRLS5Ya4_Nh1w5n1dvoYtchQvYE9yj1VANt2IKqI,3925
774
776
  tools/sre_checkpoints/__init__.py,sha256=CDaDaywJnmRCLyl_NCcvxi-Zc0hTi_3OdwKiFOyS39I,145
775
777
  tools/sre_checkpoints/util.py,sha256=zEDbGr18ZeHNQwW8pUsr2JRjuXIPz--WAGJxZo9sv_Y,894
776
- qontract_reconcile-0.10.2.dev39.dist-info/METADATA,sha256=qNWXDceNJDCX6MHXiNnvS4CYUjAhGUt88jYj9js7f0A,24665
777
- qontract_reconcile-0.10.2.dev39.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
778
- qontract_reconcile-0.10.2.dev39.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
779
- qontract_reconcile-0.10.2.dev39.dist-info/RECORD,,
778
+ qontract_reconcile-0.10.2.dev40.dist-info/METADATA,sha256=HqfCumriHpBqayb84v68akimmifp5FDN5X7yAz7hsnY,24665
779
+ qontract_reconcile-0.10.2.dev40.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
780
+ qontract_reconcile-0.10.2.dev40.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
781
+ qontract_reconcile-0.10.2.dev40.dist-info/RECORD,,
@@ -18,7 +18,6 @@ from reconcile.gql_definitions.external_resources.external_resources_modules imp
18
18
  ExternalResourcesModuleV1,
19
19
  )
20
20
  from reconcile.gql_definitions.external_resources.external_resources_namespaces import (
21
- ExternalResourcesModuleOverridesV1,
22
21
  NamespaceTerraformProviderResourceAWSV1,
23
22
  NamespaceTerraformResourceElastiCacheV1,
24
23
  NamespaceTerraformResourceKMSV1,
@@ -29,6 +28,10 @@ from reconcile.gql_definitions.external_resources.external_resources_namespaces
29
28
  from reconcile.gql_definitions.external_resources.external_resources_settings import (
30
29
  ExternalResourcesSettingsV1,
31
30
  )
31
+ from reconcile.gql_definitions.external_resources.fragments.external_resources_module_overrides import (
32
+ ExternalResourcesModuleOverrides,
33
+ )
34
+ from reconcile.gql_definitions.fragments.deplopy_resources import DeployResourcesFields
32
35
  from reconcile.utils.exceptions import FetchResourceError
33
36
  from reconcile.utils.external_resource_spec import (
34
37
  ExternalResourceSpec,
@@ -220,6 +223,38 @@ def load_module_inventory(
220
223
  })
221
224
 
222
225
 
226
+ class ResourcesSpec(BaseModel, frozen=True):
227
+ cpu: str | None = None
228
+ memory: str | None = None
229
+
230
+
231
+ class Resources(BaseModel, frozen=True):
232
+ """Hashable class to store module resources in reconciliations.
233
+ Default values are used as a fallback for existent objects that were
234
+ created without container resources, hence they don't have mem/cpu resources
235
+ in the ERv2 State. Eventually, all resources will have resources assignments
236
+ from the module spec, module_overrides, or app-interface settings.
237
+ """
238
+
239
+ requests: ResourcesSpec = ResourcesSpec()
240
+ limits: ResourcesSpec = ResourcesSpec()
241
+
242
+ @staticmethod
243
+ def from_deploy_resources_fields(fields: DeployResourcesFields) -> "Resources":
244
+ """Create Resource obect from GQL DeployResourcesFields.
245
+
246
+ DeployResourceFields can not be used directly as it not hashable."""
247
+ return Resources(
248
+ requests=ResourcesSpec(
249
+ cpu=fields.requests.cpu, memory=fields.requests.memory
250
+ ),
251
+ limits=ResourcesSpec(
252
+ cpu=fields.limits.cpu,
253
+ memory=fields.limits.memory,
254
+ ),
255
+ )
256
+
257
+
223
258
  class ExternalResourceModuleConfiguration(BaseModel, frozen=True):
224
259
  image: str = ""
225
260
  version: str = ""
@@ -227,6 +262,7 @@ class ExternalResourceModuleConfiguration(BaseModel, frozen=True):
227
262
  reconcile_timeout_minutes: int = -1000
228
263
  outputs_secret_image: str = ""
229
264
  outputs_secret_version: str = ""
265
+ resources: Resources = Resources()
230
266
 
231
267
  @property
232
268
  def image_version(self) -> str:
@@ -244,13 +280,14 @@ class ExternalResourceModuleConfiguration(BaseModel, frozen=True):
244
280
  ) -> "ExternalResourceModuleConfiguration":
245
281
  module_overrides = spec.metadata.get(
246
282
  "module_overrides"
247
- ) or ExternalResourcesModuleOverridesV1(
283
+ ) or ExternalResourcesModuleOverrides(
248
284
  module_type=None,
249
285
  image=None,
250
286
  version=None,
251
287
  reconcile_timeout_minutes=None,
252
288
  outputs_secret_image=None,
253
289
  outputs_secret_version=None,
290
+ resources=None,
254
291
  )
255
292
 
256
293
  return ExternalResourceModuleConfiguration(
@@ -265,6 +302,11 @@ class ExternalResourceModuleConfiguration(BaseModel, frozen=True):
265
302
  outputs_secret_version=module_overrides.outputs_secret_version
266
303
  or module.outputs_secret_version
267
304
  or settings.outputs_secret_version,
305
+ resources=Resources.from_deploy_resources_fields(
306
+ module_overrides.resources
307
+ or module.resources
308
+ or settings.module_default_resources
309
+ ),
268
310
  )
269
311
 
270
312
 
@@ -14,6 +14,7 @@ from kubernetes.client import (
14
14
  V1ObjectMeta,
15
15
  V1PodSpec,
16
16
  V1PodTemplateSpec,
17
+ V1ResourceRequirements,
17
18
  V1SecretVolumeSource,
18
19
  V1Volume,
19
20
  V1VolumeMount,
@@ -89,10 +90,19 @@ class ReconciliationK8sJob(K8sJob, BaseModel, frozen=True):
89
90
  }
90
91
 
91
92
  def job_spec(self) -> V1JobSpec:
93
+ assert self.reconciliation.module_configuration.resources is not None
92
94
  job_container = V1Container(
93
95
  name="job",
94
96
  image=self.reconciliation.module_configuration.image_version,
95
97
  image_pull_policy="Always",
98
+ resources=V1ResourceRequirements(
99
+ requests=self.reconciliation.module_configuration.resources.requests.dict(
100
+ exclude_none=True
101
+ ),
102
+ limits=self.reconciliation.module_configuration.resources.limits.dict(
103
+ exclude_none=True
104
+ ),
105
+ ),
96
106
  env=[
97
107
  V1EnvVar(
98
108
  name="DRY_RUN",
@@ -102,6 +112,12 @@ class ReconciliationK8sJob(K8sJob, BaseModel, frozen=True):
102
112
  name="ACTION",
103
113
  value=self.reconciliation.action.value,
104
114
  ),
115
+ V1EnvVar(
116
+ name="RECONCILE_TIMEOUT_MINUTES",
117
+ value=str(
118
+ self.reconciliation.module_configuration.reconcile_timeout_minutes
119
+ ),
120
+ ),
105
121
  ],
106
122
  volume_mounts=[
107
123
  V1VolumeMount(
@@ -11,6 +11,8 @@ from reconcile.external_resources.model import (
11
11
  ExternalResourceModuleConfiguration,
12
12
  Reconciliation,
13
13
  ReconciliationStatus,
14
+ Resources,
15
+ ResourcesSpec,
14
16
  ResourceStatus,
15
17
  )
16
18
  from reconcile.utils.aws_api_typed.api import AWSApi
@@ -73,10 +75,48 @@ class DynamoDBStateAdapter:
73
75
  MODCONF_VERSION = "version"
74
76
  MODCONF_DRIFT_MINS = "drift_detection_minutes"
75
77
  MODCONF_TIMEOUT_MINS = "timeout_minutes"
78
+ MODCONF_RESOURCES = "resources"
79
+ MODCONF_RESOURCES_REQUESTS = "requests"
80
+ MODCONF_RESOURCES_REQUESTS_CPU = "cpu"
81
+ MODCONF_RESOURCES_REQUESTS_MEMORY = "memory"
82
+ MODCONF_RESOURCES_LIMITS = "limits"
83
+ MODCONF_RESOURCES_LIMITS_CPU = "cpu"
84
+ MODCONF_RESOURCES_LIMITS_MEMORY = "memory"
76
85
 
77
86
  def _get_value(self, item: Mapping[str, Any], key: str, type: str = "S") -> Any:
87
+ if item[key][type] == "None":
88
+ return None
78
89
  return item[key][type]
79
90
 
91
+ def _build_resources(self, modconf: Mapping[str, Any]) -> Resources | None:
92
+ if self.MODCONF_RESOURCES not in modconf:
93
+ return Resources()
94
+ mc_resources = self._get_value(modconf, self.MODCONF_RESOURCES, type="M")
95
+ mc_resources_requests = self._get_value(
96
+ mc_resources, self.MODCONF_RESOURCES_REQUESTS, type="M"
97
+ )
98
+ mc_resources_limits = self._get_value(
99
+ mc_resources, self.MODCONF_RESOURCES_LIMITS, type="M"
100
+ )
101
+ return Resources(
102
+ requests=ResourcesSpec(
103
+ cpu=self._get_value(
104
+ mc_resources_requests, self.MODCONF_RESOURCES_REQUESTS_CPU
105
+ ),
106
+ memory=self._get_value(
107
+ mc_resources_requests, self.MODCONF_RESOURCES_REQUESTS_MEMORY
108
+ ),
109
+ ),
110
+ limits=ResourcesSpec(
111
+ cpu=self._get_value(
112
+ mc_resources_limits, self.MODCONF_RESOURCES_LIMITS_CPU
113
+ ),
114
+ memory=self._get_value(
115
+ mc_resources_limits, self.MODCONF_RESOURCES_LIMITS_MEMORY
116
+ ),
117
+ ),
118
+ )
119
+
80
120
  def deserialize(
81
121
  self,
82
122
  item: Mapping[str, Any],
@@ -116,6 +156,7 @@ class DynamoDBStateAdapter:
116
156
  reconcile_timeout_minutes=self._get_value(
117
157
  modconf, self.MODCONF_TIMEOUT_MINS, type="N"
118
158
  ),
159
+ resources=self._build_resources(modconf),
119
160
  ),
120
161
  )
121
162
 
@@ -164,7 +205,39 @@ class DynamoDBStateAdapter:
164
205
  state.reconciliation.module_configuration.reconcile_timeout_minutes
165
206
  )
166
207
  },
167
- }
208
+ self.MODCONF_RESOURCES: {
209
+ "M": {
210
+ self.MODCONF_RESOURCES_REQUESTS: {
211
+ "M": {
212
+ self.MODCONF_RESOURCES_REQUESTS_CPU: {
213
+ "S": str(
214
+ state.reconciliation.module_configuration.resources.requests.cpu
215
+ )
216
+ },
217
+ self.MODCONF_RESOURCES_REQUESTS_MEMORY: {
218
+ "S": str(
219
+ state.reconciliation.module_configuration.resources.requests.memory
220
+ )
221
+ },
222
+ }
223
+ },
224
+ self.MODCONF_RESOURCES_LIMITS: {
225
+ "M": {
226
+ self.MODCONF_RESOURCES_LIMITS_CPU: {
227
+ "S": str(
228
+ state.reconciliation.module_configuration.resources.limits.cpu
229
+ )
230
+ },
231
+ self.MODCONF_RESOURCES_LIMITS_MEMORY: {
232
+ "S": str(
233
+ state.reconciliation.module_configuration.resources.limits.memory
234
+ )
235
+ },
236
+ }
237
+ },
238
+ }
239
+ },
240
+ },
168
241
  },
169
242
  }
170
243
  },
@@ -17,8 +17,21 @@ from pydantic import ( # noqa: F401 # pylint: disable=W0611
17
17
  Json,
18
18
  )
19
19
 
20
+ from reconcile.gql_definitions.fragments.deplopy_resources import DeployResourcesFields
21
+
20
22
 
21
23
  DEFINITION = """
24
+ fragment DeployResourcesFields on DeployResources_v1 {
25
+ requests {
26
+ cpu
27
+ memory
28
+ }
29
+ limits {
30
+ cpu
31
+ memory
32
+ }
33
+ }
34
+
22
35
  query ExternalResourcesModules {
23
36
  modules: external_resources_modules_v1 {
24
37
  provision_provider
@@ -31,6 +44,9 @@ query ExternalResourcesModules {
31
44
  outputs_secret_sync
32
45
  outputs_secret_image
33
46
  outputs_secret_version
47
+ resources {
48
+ ... DeployResourcesFields
49
+ }
34
50
  }
35
51
  }
36
52
  """
@@ -53,6 +69,7 @@ class ExternalResourcesModuleV1(ConfiguredBaseModel):
53
69
  outputs_secret_sync: bool = Field(..., alias="outputs_secret_sync")
54
70
  outputs_secret_image: Optional[str] = Field(..., alias="outputs_secret_image")
55
71
  outputs_secret_version: Optional[str] = Field(..., alias="outputs_secret_version")
72
+ resources: Optional[DeployResourcesFields] = Field(..., alias="resources")
56
73
 
57
74
 
58
75
  class ExternalResourcesModulesQueryData(ConfiguredBaseModel):
@@ -19,6 +19,7 @@ from pydantic import ( # noqa: F401 # pylint: disable=W0611
19
19
 
20
20
  from reconcile.gql_definitions.fragments.aws_vpc import AWSVPC
21
21
  from reconcile.gql_definitions.fragments.jumphost_common_fields import CommonJumphostFields
22
+ from reconcile.gql_definitions.external_resources.fragments.external_resources_module_overrides import ExternalResourcesModuleOverrides
22
23
  from reconcile.gql_definitions.fragments.vault_secret import VaultSecret
23
24
 
24
25
 
@@ -53,6 +54,29 @@ fragment CommonJumphostFields on ClusterJumpHost_v1 {
53
54
  }
54
55
  }
55
56
 
57
+ fragment DeployResourcesFields on DeployResources_v1 {
58
+ requests {
59
+ cpu
60
+ memory
61
+ }
62
+ limits {
63
+ cpu
64
+ memory
65
+ }
66
+ }
67
+
68
+ fragment ExternalResourcesModuleOverrides on ExternalResourcesModuleOverrides_v1 {
69
+ module_type
70
+ image
71
+ version
72
+ reconcile_timeout_minutes
73
+ outputs_secret_image
74
+ outputs_secret_version
75
+ resources {
76
+ ... DeployResourcesFields
77
+ }
78
+ }
79
+
56
80
  fragment VaultSecret on VaultSecret_v1 {
57
81
  path
58
82
  field
@@ -111,12 +135,7 @@ query ExternalResourcesNamespaces {
111
135
  managed_by_erv2
112
136
  delete
113
137
  module_overrides {
114
- module_type
115
- image
116
- version
117
- reconcile_timeout_minutes
118
- outputs_secret_image
119
- outputs_secret_version
138
+ ... ExternalResourcesModuleOverrides
120
139
  }
121
140
  }
122
141
  ... on NamespaceTerraformResourceS3_v1 {
@@ -149,12 +168,7 @@ query ExternalResourcesNamespaces {
149
168
  managed_by_erv2
150
169
  delete
151
170
  module_overrides {
152
- module_type
153
- image
154
- version
155
- reconcile_timeout_minutes
156
- outputs_secret_image
157
- outputs_secret_version
171
+ ... ExternalResourcesModuleOverrides
158
172
  }
159
173
  }
160
174
  ... on NamespaceTerraformResourceServiceAccount_v1 {
@@ -275,12 +289,7 @@ query ExternalResourcesNamespaces {
275
289
  managed_by_erv2
276
290
  delete
277
291
  module_overrides {
278
- module_type
279
- image
280
- version
281
- reconcile_timeout_minutes
282
- outputs_secret_image
283
- outputs_secret_version
292
+ ... ExternalResourcesModuleOverrides
284
293
  }
285
294
  }
286
295
  ... on NamespaceTerraformResourceElasticSearch_v1 {
@@ -492,12 +501,7 @@ query ExternalResourcesNamespaces {
492
501
  managed_by_erv2
493
502
  delete
494
503
  module_overrides {
495
- module_type
496
- image
497
- version
498
- reconcile_timeout_minutes
499
- outputs_secret_image
500
- outputs_secret_version
504
+ ... ExternalResourcesModuleOverrides
501
505
  }
502
506
  }
503
507
  }
@@ -576,15 +580,6 @@ class AWSRDSDataClassificationV1(ConfiguredBaseModel):
576
580
  loss_impact: Optional[str] = Field(..., alias="loss_impact")
577
581
 
578
582
 
579
- class ExternalResourcesModuleOverridesV1(ConfiguredBaseModel):
580
- module_type: Optional[str] = Field(..., alias="module_type")
581
- image: Optional[str] = Field(..., alias="image")
582
- version: Optional[str] = Field(..., alias="version")
583
- reconcile_timeout_minutes: Optional[int] = Field(..., alias="reconcile_timeout_minutes")
584
- outputs_secret_image: Optional[str] = Field(..., alias="outputs_secret_image")
585
- outputs_secret_version: Optional[str] = Field(..., alias="outputs_secret_version")
586
-
587
-
588
583
  class NamespaceTerraformResourceRDSV1(NamespaceTerraformResourceAWSV1):
589
584
  region: Optional[str] = Field(..., alias="region")
590
585
  identifier: str = Field(..., alias="identifier")
@@ -604,7 +599,7 @@ class NamespaceTerraformResourceRDSV1(NamespaceTerraformResourceAWSV1):
604
599
  data_classification: Optional[AWSRDSDataClassificationV1] = Field(..., alias="data_classification")
605
600
  managed_by_erv2: Optional[bool] = Field(..., alias="managed_by_erv2")
606
601
  delete: Optional[bool] = Field(..., alias="delete")
607
- module_overrides: Optional[ExternalResourcesModuleOverridesV1] = Field(..., alias="module_overrides")
602
+ module_overrides: Optional[ExternalResourcesModuleOverrides] = Field(..., alias="module_overrides")
608
603
 
609
604
 
610
605
  class AWSS3EventNotificationV1(ConfiguredBaseModel):
@@ -629,15 +624,6 @@ class NamespaceTerraformResourceS3V1(NamespaceTerraformResourceAWSV1):
629
624
  annotations: Optional[str] = Field(..., alias="annotations")
630
625
 
631
626
 
632
- class NamespaceTerraformResourceElastiCacheV1_ExternalResourcesModuleOverridesV1(ConfiguredBaseModel):
633
- module_type: Optional[str] = Field(..., alias="module_type")
634
- image: Optional[str] = Field(..., alias="image")
635
- version: Optional[str] = Field(..., alias="version")
636
- reconcile_timeout_minutes: Optional[int] = Field(..., alias="reconcile_timeout_minutes")
637
- outputs_secret_image: Optional[str] = Field(..., alias="outputs_secret_image")
638
- outputs_secret_version: Optional[str] = Field(..., alias="outputs_secret_version")
639
-
640
-
641
627
  class NamespaceTerraformResourceElastiCacheV1(NamespaceTerraformResourceAWSV1):
642
628
  identifier: str = Field(..., alias="identifier")
643
629
  defaults: str = Field(..., alias="defaults")
@@ -648,7 +634,7 @@ class NamespaceTerraformResourceElastiCacheV1(NamespaceTerraformResourceAWSV1):
648
634
  annotations: Optional[str] = Field(..., alias="annotations")
649
635
  managed_by_erv2: Optional[bool] = Field(..., alias="managed_by_erv2")
650
636
  delete: Optional[bool] = Field(..., alias="delete")
651
- module_overrides: Optional[NamespaceTerraformResourceElastiCacheV1_ExternalResourcesModuleOverridesV1] = Field(..., alias="module_overrides")
637
+ module_overrides: Optional[ExternalResourcesModuleOverrides] = Field(..., alias="module_overrides")
652
638
 
653
639
 
654
640
  class ClusterV1(ConfiguredBaseModel):
@@ -784,15 +770,6 @@ class NamespaceTerraformResourceCloudWatchV1(NamespaceTerraformResourceAWSV1):
784
770
  annotations: Optional[str] = Field(..., alias="annotations")
785
771
 
786
772
 
787
- class NamespaceTerraformResourceKMSV1_ExternalResourcesModuleOverridesV1(ConfiguredBaseModel):
788
- module_type: Optional[str] = Field(..., alias="module_type")
789
- image: Optional[str] = Field(..., alias="image")
790
- version: Optional[str] = Field(..., alias="version")
791
- reconcile_timeout_minutes: Optional[int] = Field(..., alias="reconcile_timeout_minutes")
792
- outputs_secret_image: Optional[str] = Field(..., alias="outputs_secret_image")
793
- outputs_secret_version: Optional[str] = Field(..., alias="outputs_secret_version")
794
-
795
-
796
773
  class NamespaceTerraformResourceKMSV1(NamespaceTerraformResourceAWSV1):
797
774
  region: Optional[str] = Field(..., alias="region")
798
775
  identifier: str = Field(..., alias="identifier")
@@ -802,7 +779,7 @@ class NamespaceTerraformResourceKMSV1(NamespaceTerraformResourceAWSV1):
802
779
  annotations: Optional[str] = Field(..., alias="annotations")
803
780
  managed_by_erv2: Optional[bool] = Field(..., alias="managed_by_erv2")
804
781
  delete: Optional[bool] = Field(..., alias="delete")
805
- module_overrides: Optional[NamespaceTerraformResourceKMSV1_ExternalResourcesModuleOverridesV1] = Field(..., alias="module_overrides")
782
+ module_overrides: Optional[ExternalResourcesModuleOverrides] = Field(..., alias="module_overrides")
806
783
 
807
784
 
808
785
  class NamespaceTerraformResourceElasticSearchV1(NamespaceTerraformResourceAWSV1):
@@ -1044,15 +1021,6 @@ class MskSecretParametersV1(ConfiguredBaseModel):
1044
1021
  secret: VaultSecret = Field(..., alias="secret")
1045
1022
 
1046
1023
 
1047
- class NamespaceTerraformResourceMskV1_ExternalResourcesModuleOverridesV1(ConfiguredBaseModel):
1048
- module_type: Optional[str] = Field(..., alias="module_type")
1049
- image: Optional[str] = Field(..., alias="image")
1050
- version: Optional[str] = Field(..., alias="version")
1051
- reconcile_timeout_minutes: Optional[int] = Field(..., alias="reconcile_timeout_minutes")
1052
- outputs_secret_image: Optional[str] = Field(..., alias="outputs_secret_image")
1053
- outputs_secret_version: Optional[str] = Field(..., alias="outputs_secret_version")
1054
-
1055
-
1056
1024
  class NamespaceTerraformResourceMskV1(NamespaceTerraformResourceAWSV1):
1057
1025
  region: Optional[str] = Field(..., alias="region")
1058
1026
  identifier: str = Field(..., alias="identifier")
@@ -1062,7 +1030,7 @@ class NamespaceTerraformResourceMskV1(NamespaceTerraformResourceAWSV1):
1062
1030
  users: Optional[list[MskSecretParametersV1]] = Field(..., alias="users")
1063
1031
  managed_by_erv2: Optional[bool] = Field(..., alias="managed_by_erv2")
1064
1032
  delete: Optional[bool] = Field(..., alias="delete")
1065
- module_overrides: Optional[NamespaceTerraformResourceMskV1_ExternalResourcesModuleOverridesV1] = Field(..., alias="module_overrides")
1033
+ module_overrides: Optional[ExternalResourcesModuleOverrides] = Field(..., alias="module_overrides")
1066
1034
 
1067
1035
 
1068
1036
  class NamespaceTerraformProviderResourceAWSV1(NamespaceExternalResourceV1):
@@ -17,8 +17,21 @@ from pydantic import ( # noqa: F401 # pylint: disable=W0611
17
17
  Json,
18
18
  )
19
19
 
20
+ from reconcile.gql_definitions.fragments.deplopy_resources import DeployResourcesFields
21
+
20
22
 
21
23
  DEFINITION = """
24
+ fragment DeployResourcesFields on DeployResources_v1 {
25
+ requests {
26
+ cpu
27
+ memory
28
+ }
29
+ limits {
30
+ cpu
31
+ memory
32
+ }
33
+ }
34
+
22
35
  query ExternalResourcesSettings {
23
36
  settings: external_resources_settings_v1 {
24
37
  state_dynamodb_account {
@@ -38,6 +51,9 @@ query ExternalResourcesSettings {
38
51
  vault_secrets_path
39
52
  outputs_secret_image
40
53
  outputs_secret_version
54
+ module_default_resources {
55
+ ... DeployResourcesFields
56
+ }
41
57
  }
42
58
  }
43
59
  """
@@ -73,6 +89,7 @@ class ExternalResourcesSettingsV1(ConfiguredBaseModel):
73
89
  vault_secrets_path: str = Field(..., alias="vault_secrets_path")
74
90
  outputs_secret_image: str = Field(..., alias="outputs_secret_image")
75
91
  outputs_secret_version: str = Field(..., alias="outputs_secret_version")
92
+ module_default_resources: DeployResourcesFields = Field(..., alias="module_default_resources")
76
93
 
77
94
 
78
95
  class ExternalResourcesSettingsQueryData(ConfiguredBaseModel):
@@ -0,0 +1,36 @@
1
+ """
2
+ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY!
3
+ """
4
+ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611
5
+ from datetime import datetime # noqa: F401 # pylint: disable=W0611
6
+ from enum import Enum # noqa: F401 # pylint: disable=W0611
7
+ from typing import ( # noqa: F401 # pylint: disable=W0611
8
+ Any,
9
+ Optional,
10
+ Union,
11
+ )
12
+
13
+ from pydantic import ( # noqa: F401 # pylint: disable=W0611
14
+ BaseModel,
15
+ Extra,
16
+ Field,
17
+ Json,
18
+ )
19
+
20
+ from reconcile.gql_definitions.fragments.deplopy_resources import DeployResourcesFields
21
+
22
+
23
+ class ConfiguredBaseModel(BaseModel):
24
+ class Config:
25
+ smart_union=True
26
+ extra=Extra.forbid
27
+
28
+
29
+ class ExternalResourcesModuleOverrides(ConfiguredBaseModel):
30
+ module_type: Optional[str] = Field(..., alias="module_type")
31
+ image: Optional[str] = Field(..., alias="image")
32
+ version: Optional[str] = Field(..., alias="version")
33
+ reconcile_timeout_minutes: Optional[int] = Field(..., alias="reconcile_timeout_minutes")
34
+ outputs_secret_image: Optional[str] = Field(..., alias="outputs_secret_image")
35
+ outputs_secret_version: Optional[str] = Field(..., alias="outputs_secret_version")
36
+ resources: Optional[DeployResourcesFields] = Field(..., alias="resources")
@@ -33803,6 +33803,22 @@
33803
33803
  },
33804
33804
  "isDeprecated": false,
33805
33805
  "deprecationReason": null
33806
+ },
33807
+ {
33808
+ "name": "module_default_resources",
33809
+ "description": null,
33810
+ "args": [],
33811
+ "type": {
33812
+ "kind": "NON_NULL",
33813
+ "name": null,
33814
+ "ofType": {
33815
+ "kind": "OBJECT",
33816
+ "name": "DeployResources_v1",
33817
+ "ofType": null
33818
+ }
33819
+ },
33820
+ "isDeprecated": false,
33821
+ "deprecationReason": null
33806
33822
  }
33807
33823
  ],
33808
33824
  "inputFields": null,
@@ -34004,6 +34020,18 @@
34004
34020
  },
34005
34021
  "isDeprecated": false,
34006
34022
  "deprecationReason": null
34023
+ },
34024
+ {
34025
+ "name": "resources",
34026
+ "description": null,
34027
+ "args": [],
34028
+ "type": {
34029
+ "kind": "OBJECT",
34030
+ "name": "DeployResources_v1",
34031
+ "ofType": null
34032
+ },
34033
+ "isDeprecated": false,
34034
+ "deprecationReason": null
34007
34035
  }
34008
34036
  ],
34009
34037
  "inputFields": null,
@@ -42927,6 +42955,18 @@
42927
42955
  },
42928
42956
  "isDeprecated": false,
42929
42957
  "deprecationReason": null
42958
+ },
42959
+ {
42960
+ "name": "resources",
42961
+ "description": null,
42962
+ "args": [],
42963
+ "type": {
42964
+ "kind": "OBJECT",
42965
+ "name": "DeployResources_v1",
42966
+ "ofType": null
42967
+ },
42968
+ "isDeprecated": false,
42969
+ "deprecationReason": null
42930
42970
  }
42931
42971
  ],
42932
42972
  "inputFields": null,