qontract-reconcile 0.10.2.dev45__py3-none-any.whl → 0.10.2.dev47__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.
- {qontract_reconcile-0.10.2.dev45.dist-info → qontract_reconcile-0.10.2.dev47.dist-info}/METADATA +1 -1
- {qontract_reconcile-0.10.2.dev45.dist-info → qontract_reconcile-0.10.2.dev47.dist-info}/RECORD +14 -12
- reconcile/external_resources/aws.py +9 -5
- reconcile/external_resources/model.py +44 -2
- reconcile/external_resources/reconciler.py +10 -0
- reconcile/external_resources/state.py +74 -1
- reconcile/gql_definitions/external_resources/external_resources_modules.py +17 -0
- reconcile/gql_definitions/external_resources/external_resources_namespaces.py +32 -64
- reconcile/gql_definitions/external_resources/external_resources_settings.py +17 -0
- reconcile/gql_definitions/external_resources/fragments/__init__.py +0 -0
- reconcile/gql_definitions/external_resources/fragments/external_resources_module_overrides.py +36 -0
- reconcile/gql_definitions/introspection.json +40 -0
- {qontract_reconcile-0.10.2.dev45.dist-info → qontract_reconcile-0.10.2.dev47.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.2.dev45.dist-info → qontract_reconcile-0.10.2.dev47.dist-info}/entry_points.txt +0 -0
{qontract_reconcile-0.10.2.dev45.dist-info → qontract_reconcile-0.10.2.dev47.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: qontract-reconcile
|
3
|
-
Version: 0.10.2.
|
3
|
+
Version: 0.10.2.dev47
|
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
|
{qontract_reconcile-0.10.2.dev45.dist-info → qontract_reconcile-0.10.2.dev47.dist-info}/RECORD
RENAMED
@@ -195,17 +195,17 @@ reconcile/endpoints_discovery/integration.py,sha256=fzy5tv4c_6WoAZGGBNJ276NVNB1O
|
|
195
195
|
reconcile/endpoints_discovery/merge_request.py,sha256=_yLb4tnvoZMCko8rta2C_CvOInJa9pa3HzSmHNtjgGU,2978
|
196
196
|
reconcile/endpoints_discovery/merge_request_manager.py,sha256=wUMsumxv8RnWaRattax4HfoRlhtVzmgro3GiJJ1C4Vc,6392
|
197
197
|
reconcile/external_resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
198
|
-
reconcile/external_resources/aws.py,sha256=
|
198
|
+
reconcile/external_resources/aws.py,sha256=wzN3GHxyqVa4Lqqg5HdogqNW2RM532t0ZiKaQeVGOL4,10968
|
199
199
|
reconcile/external_resources/factories.py,sha256=C0QHT0soEv6z99-ELAAE19S5MaMHhV0t1fSiQn0Coc4,5970
|
200
200
|
reconcile/external_resources/integration.py,sha256=JF38M7R0Z4ADUTx57TZqSZH9k_xpPlbAxQAcGyIISuM,6925
|
201
201
|
reconcile/external_resources/integration_secrets_sync.py,sha256=dX09O3r6KURziUYYfiki10orNjOGVma-XojhVqd0ww4,1667
|
202
202
|
reconcile/external_resources/manager.py,sha256=ZagwLn6YQ1XmgmMN3qpuDzQsQxa4VOYl-IQPZBwCDqM,17103
|
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=
|
206
|
-
reconcile/external_resources/reconciler.py,sha256=
|
205
|
+
reconcile/external_resources/model.py,sha256=dxwiyI3J9xyLeue8_W9NJoap-CkKLMAoY0S0ml5-NbU,13450
|
206
|
+
reconcile/external_resources/reconciler.py,sha256=PK00cyMfBZLHH0W7w2bNomgAy85SotIVXbCBkGPSJdM,9432
|
207
207
|
reconcile/external_resources/secrets_sync.py,sha256=50fK4fzgSz-K8uy5_DQQWA_ju_rTDYAC2HRymgfY7TA,16344
|
208
|
-
reconcile/external_resources/state.py,sha256=
|
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=
|
218
|
+
reconcile/gql_definitions/introspection.json,sha256=jAWK0rPdJY39eevr2NWgD8lqbJew_m5BIhyEMbb_3lo,2236885
|
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=
|
303
|
-
reconcile/gql_definitions/external_resources/external_resources_namespaces.py,sha256
|
304
|
-
reconcile/gql_definitions/external_resources/external_resources_settings.py,sha256=
|
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.
|
777
|
-
qontract_reconcile-0.10.2.
|
778
|
-
qontract_reconcile-0.10.2.
|
779
|
-
qontract_reconcile-0.10.2.
|
778
|
+
qontract_reconcile-0.10.2.dev47.dist-info/METADATA,sha256=agItqhZULSNiqVJbcuimv3FQ_kbEzyI5OrqMFIC5s3s,24665
|
779
|
+
qontract_reconcile-0.10.2.dev47.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
780
|
+
qontract_reconcile-0.10.2.dev47.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
|
781
|
+
qontract_reconcile-0.10.2.dev47.dist-info/RECORD,,
|
@@ -122,7 +122,8 @@ class AWSElasticacheFactory(AWSDefaultResourceFactory):
|
|
122
122
|
|
123
123
|
|
124
124
|
class AWSRdsFactory(AWSDefaultResourceFactory):
|
125
|
-
TIMEOUT_RE = re.compile(r"
|
125
|
+
TIMEOUT_RE = re.compile(r"^(?:(\d+)h)?\s*(?:(\d+)m)?$")
|
126
|
+
TIMEOUT_UNITS = units = {"h": "hours", "m": "minutes"}
|
126
127
|
|
127
128
|
def _get_source_db_spec(
|
128
129
|
self, provisioner: str, identifier: str
|
@@ -188,11 +189,14 @@ class AWSRdsFactory(AWSDefaultResourceFactory):
|
|
188
189
|
self,
|
189
190
|
timeout: str,
|
190
191
|
) -> int:
|
191
|
-
if not re.
|
192
|
+
if not (match := re.fullmatch(AWSRdsFactory.TIMEOUT_RE, timeout)):
|
192
193
|
raise ValueError(
|
193
|
-
f"Invalid RDS instance timeout format: {timeout}. Specify
|
194
|
+
f"Invalid RDS instance timeout format: {timeout}. Specify a duration using 'h' and 'm' only. E.g. 2h30m"
|
194
195
|
)
|
195
|
-
|
196
|
+
|
197
|
+
hours = int(match.group(1)) if match.group(1) else 0
|
198
|
+
minutes = int(match.group(2)) if match.group(2) else 0
|
199
|
+
return hours * 60 + minutes
|
196
200
|
|
197
201
|
def _validate_timeouts(
|
198
202
|
self,
|
@@ -218,7 +222,7 @@ class AWSRdsFactory(AWSDefaultResourceFactory):
|
|
218
222
|
timeout_minutes = self._get_timeout_minutes(timeout)
|
219
223
|
if timeout_minutes >= module_conf.reconcile_timeout_minutes:
|
220
224
|
raise ValueError(
|
221
|
-
f"RDS instance {option} timeout value {timeout_minutes} must be lower than the module reconcile_timeout_minutes value {module_conf.reconcile_timeout_minutes}."
|
225
|
+
f"RDS instance {option} timeout value {timeout_minutes} (minutes) must be lower than the module reconcile_timeout_minutes value {module_conf.reconcile_timeout_minutes}."
|
222
226
|
)
|
223
227
|
|
224
228
|
def validate(
|
@@ -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
|
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",
|
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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[
|
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[
|
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[
|
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[
|
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):
|
File without changes
|
@@ -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")
|
@@ -33879,6 +33879,22 @@
|
|
33879
33879
|
},
|
33880
33880
|
"isDeprecated": false,
|
33881
33881
|
"deprecationReason": null
|
33882
|
+
},
|
33883
|
+
{
|
33884
|
+
"name": "module_default_resources",
|
33885
|
+
"description": null,
|
33886
|
+
"args": [],
|
33887
|
+
"type": {
|
33888
|
+
"kind": "NON_NULL",
|
33889
|
+
"name": null,
|
33890
|
+
"ofType": {
|
33891
|
+
"kind": "OBJECT",
|
33892
|
+
"name": "DeployResources_v1",
|
33893
|
+
"ofType": null
|
33894
|
+
}
|
33895
|
+
},
|
33896
|
+
"isDeprecated": false,
|
33897
|
+
"deprecationReason": null
|
33882
33898
|
}
|
33883
33899
|
],
|
33884
33900
|
"inputFields": null,
|
@@ -34080,6 +34096,18 @@
|
|
34080
34096
|
},
|
34081
34097
|
"isDeprecated": false,
|
34082
34098
|
"deprecationReason": null
|
34099
|
+
},
|
34100
|
+
{
|
34101
|
+
"name": "resources",
|
34102
|
+
"description": null,
|
34103
|
+
"args": [],
|
34104
|
+
"type": {
|
34105
|
+
"kind": "OBJECT",
|
34106
|
+
"name": "DeployResources_v1",
|
34107
|
+
"ofType": null
|
34108
|
+
},
|
34109
|
+
"isDeprecated": false,
|
34110
|
+
"deprecationReason": null
|
34083
34111
|
}
|
34084
34112
|
],
|
34085
34113
|
"inputFields": null,
|
@@ -43321,6 +43349,18 @@
|
|
43321
43349
|
},
|
43322
43350
|
"isDeprecated": false,
|
43323
43351
|
"deprecationReason": null
|
43352
|
+
},
|
43353
|
+
{
|
43354
|
+
"name": "resources",
|
43355
|
+
"description": null,
|
43356
|
+
"args": [],
|
43357
|
+
"type": {
|
43358
|
+
"kind": "OBJECT",
|
43359
|
+
"name": "DeployResources_v1",
|
43360
|
+
"ofType": null
|
43361
|
+
},
|
43362
|
+
"isDeprecated": false,
|
43363
|
+
"deprecationReason": null
|
43324
43364
|
}
|
43325
43365
|
],
|
43326
43366
|
"inputFields": null,
|
{qontract_reconcile-0.10.2.dev45.dist-info → qontract_reconcile-0.10.2.dev47.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|