qontract-reconcile 0.10.1rc174__py3-none-any.whl → 0.10.1rc175__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.1rc174.dist-info → qontract_reconcile-0.10.1rc175.dist-info}/METADATA +1 -1
- {qontract_reconcile-0.10.1rc174.dist-info → qontract_reconcile-0.10.1rc175.dist-info}/RECORD +11 -11
- reconcile/gql_definitions/common/saas_files.py +17 -20
- reconcile/gql_definitions/common/saas_target_namespaces.py +3 -0
- reconcile/gql_definitions/fragments/saas_target_namespace.py +5 -0
- reconcile/test/test_saasherder_allowed_secret_paths.py +1 -4
- reconcile/utils/saasherder/interfaces.py +5 -16
- reconcile/utils/saasherder/saasherder.py +2 -7
- {qontract_reconcile-0.10.1rc174.dist-info → qontract_reconcile-0.10.1rc175.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.1rc174.dist-info → qontract_reconcile-0.10.1rc175.dist-info}/entry_points.txt +0 -0
- {qontract_reconcile-0.10.1rc174.dist-info → qontract_reconcile-0.10.1rc175.dist-info}/top_level.txt +0 -0
{qontract_reconcile-0.10.1rc174.dist-info → qontract_reconcile-0.10.1rc175.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: qontract-reconcile
|
3
|
-
Version: 0.10.
|
3
|
+
Version: 0.10.1rc175
|
4
4
|
Summary: Collection of tools to reconcile services with their desired state as defined in the app-interface DB.
|
5
5
|
Home-page: https://github.com/app-sre/qontract-reconcile
|
6
6
|
Author: Red Hat App-SRE Team
|
{qontract_reconcile-0.10.1rc174.dist-info → qontract_reconcile-0.10.1rc175.dist-info}/RECORD
RENAMED
@@ -177,8 +177,8 @@ reconcile/gql_definitions/common/ocm_environments.py,sha256=yV4UVjdnNmqbR5trQCOA
|
|
177
177
|
reconcile/gql_definitions/common/pagerduty_instances.py,sha256=8NBHKRXg_OKG9NsJv6FOj8UVFcjkdJg-9E16ZqZIRPQ,2006
|
178
178
|
reconcile/gql_definitions/common/pgp_reencryption_settings.py,sha256=tS68-tBBd7BJYmfTjtdTlxpABF3f_z9eJdtaKnyZc0Q,2305
|
179
179
|
reconcile/gql_definitions/common/pipeline_providers.py,sha256=khAU9bbLNHbP6O3yeKRitU0A6umBnV-pSvi80wfMNu0,9311
|
180
|
-
reconcile/gql_definitions/common/saas_files.py,sha256=
|
181
|
-
reconcile/gql_definitions/common/saas_target_namespaces.py,sha256=
|
180
|
+
reconcile/gql_definitions/common/saas_files.py,sha256=fpqUB5m5eF1D9p7YPVBpSDvwPkBMKFKklLOX_S-3BuI,15029
|
181
|
+
reconcile/gql_definitions/common/saas_target_namespaces.py,sha256=m5QWGQsATyqkkyiSZOGX7QpKGKsT0tb2gzMiKUmVZuc,2674
|
182
182
|
reconcile/gql_definitions/common/saasherder_settings.py,sha256=jxrFr03NmiwV3uegKCxQgB5iveC2IaGZIoguXoiNMgs,1797
|
183
183
|
reconcile/gql_definitions/common/smtp_client_settings.py,sha256=Pb8VgTGFqCh4_rI0BOHoXuicfdNyol1kIN8NLONHaxI,2252
|
184
184
|
reconcile/gql_definitions/common/users.py,sha256=C5EvC5gNBHqWuY4tvOG5oZUiFV4eognyu-KjBRsIkMM,1685
|
@@ -194,7 +194,7 @@ reconcile/gql_definitions/fragments/oc_connection_cluster.py,sha256=L8v52wkcHpnF
|
|
194
194
|
reconcile/gql_definitions/fragments/ocm_environment.py,sha256=DOfBY4fb02UF5R3ZxtwHBTlxhPYOOBJaqGeENElX7oc,1037
|
195
195
|
reconcile/gql_definitions/fragments/resource_requirements.py,sha256=p7bMDzeIMr008A_4skrZjXAwVXA4PtO2rX93iGBYqvk,732
|
196
196
|
reconcile/gql_definitions/fragments/resource_values.py,sha256=DS3KqzgjT_wJ36SWPZ9HyNXOBNvbhhGnh06IMQmrFXQ,746
|
197
|
-
reconcile/gql_definitions/fragments/saas_target_namespace.py,sha256=
|
197
|
+
reconcile/gql_definitions/fragments/saas_target_namespace.py,sha256=MoStxN1XmAk1JUVWkVpvVFhWnl5s6bvQhkgoSj5SDBs,2320
|
198
198
|
reconcile/gql_definitions/fragments/terraform_state.py,sha256=mh7ra7xX2jrWCjoWVZ6Z2fsUgZ_EXgzv4sh07jkAhKQ,1042
|
199
199
|
reconcile/gql_definitions/fragments/upgrade_policy.py,sha256=73VyC3kbkZ_g3aXmhD016a0axoJxKlIJSGmcue1A2Ow,1077
|
200
200
|
reconcile/gql_definitions/fragments/user.py,sha256=6RVsHZVHjOrZKcH8rWGQG9V1OtPpACSZ3wNwca3H8pA,943
|
@@ -360,7 +360,7 @@ reconcile/test/test_queries.py,sha256=SpH3RmNpBjEr_ne3VjAMCgKK8RE1z1zo7bypkT5uoO
|
|
360
360
|
reconcile/test/test_repo_owners.py,sha256=uRYMLbMmh-9usF0TerabZTZV-Z1CS4I6ybT-LQqCLe8,1423
|
361
361
|
reconcile/test/test_requests_sender.py,sha256=7fd9C2kEFS0-CYtlsif66N1kO9c44pzuBPAJKR9igqU,5385
|
362
362
|
reconcile/test/test_saasherder.py,sha256=LPRKvuu5hjIVSMQ7_u0BtY2gdGUNy4N-FHiqT08atLY,37484
|
363
|
-
reconcile/test/test_saasherder_allowed_secret_paths.py,sha256=
|
363
|
+
reconcile/test/test_saasherder_allowed_secret_paths.py,sha256=FmNkc1dEHhTQ5TM_PLCrWCj9QV0VhoLcbcDsiim5gaM,4807
|
364
364
|
reconcile/test/test_secret_reader.py,sha256=kz7nzcPjvA08cytnvcA_PMA98AEyqJWsESkYeRn5xCk,4994
|
365
365
|
reconcile/test/test_slack_base.py,sha256=gpbWOLNxMMX6fyAbs1JakhLTnwfedb3f7WpUae4tQZE,5060
|
366
366
|
reconcile/test/test_slack_usergroups.py,sha256=O2CNs2t1kNdAG_NqUhf5yr4K0Q-9ZLuXdQ4G_kYxatw,23647
|
@@ -581,9 +581,9 @@ reconcile/utils/runtime/meta.py,sha256=X44HzyXIBprf3zcsGr2XLCgoeFkz6r3U2nlFXM1H7
|
|
581
581
|
reconcile/utils/runtime/runner.py,sha256=72cc-I6yXyPov8UCLHpyERRy1eiMLpGite2roO0yUlo,7979
|
582
582
|
reconcile/utils/runtime/sharding.py,sha256=gGmfYFeplEbjSBQIGAue2uj83-EOI6caaK63i_kcjfk,13626
|
583
583
|
reconcile/utils/saasherder/__init__.py,sha256=J3MBZBFa5YmhqYm08QsjBXz8mFcVOCiOCkyIcw41t7E,343
|
584
|
-
reconcile/utils/saasherder/interfaces.py,sha256=
|
584
|
+
reconcile/utils/saasherder/interfaces.py,sha256=J3Q-cS0l5Xf_5FjZW23C7Q_ATRKn51vBtU_0F1K506Y,8754
|
585
585
|
reconcile/utils/saasherder/models.py,sha256=R_6Gx71GnK_eWBG1onBbHfHwkektecKGmMTttbKe33E,4725
|
586
|
-
reconcile/utils/saasherder/saasherder.py,sha256=
|
586
|
+
reconcile/utils/saasherder/saasherder.py,sha256=V_VIyrDMbaJ1WLqKMhXvvWZWImeKv4v8N8T7mfUEzLc,81091
|
587
587
|
reconcile/utils/terraform/__init__.py,sha256=zNbiyTWo35AT1sFTElL2j_AA0jJ_yWE_bfFn-nD2xik,250
|
588
588
|
reconcile/utils/terraform/config.py,sha256=5UVrd563TMcvi4ooa5JvWVDW1I3bIWg484u79evfV_8,164
|
589
589
|
reconcile/utils/terraform/config_client.py,sha256=t4novdX7GeYPMYms97C_BBtLmt0M8CJCmCT7QHENwxg,4687
|
@@ -609,8 +609,8 @@ tools/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
609
609
|
tools/test/test_qontract_cli.py,sha256=awwTHEc2DWlykuqGIYM0WOBoSL0KRnOraCLk3C7izis,1401
|
610
610
|
tools/test/test_sd_app_sre_alert_report.py,sha256=JeLhgzpKCPgLvptwg_4ZvJHLVWKNG1T5845HXTkMBxA,1826
|
611
611
|
tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
|
612
|
-
qontract_reconcile-0.10.
|
613
|
-
qontract_reconcile-0.10.
|
614
|
-
qontract_reconcile-0.10.
|
615
|
-
qontract_reconcile-0.10.
|
616
|
-
qontract_reconcile-0.10.
|
612
|
+
qontract_reconcile-0.10.1rc175.dist-info/METADATA,sha256=hIn9NPTRVv7ikfB-EKs1hBs3NeCNLIZiBaghvDuh5rU,2320
|
613
|
+
qontract_reconcile-0.10.1rc175.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
614
|
+
qontract_reconcile-0.10.1rc175.dist-info/entry_points.txt,sha256=Af70EWPJxsTiCNF6gA-pWdw1A0Heqn-PZF-oBc5NmiU,302
|
615
|
+
qontract_reconcile-0.10.1rc175.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
|
616
|
+
qontract_reconcile-0.10.1rc175.dist-info/RECORD,,
|
@@ -79,6 +79,9 @@ fragment SaasTargetNamespace on Namespace_v1 {
|
|
79
79
|
name
|
80
80
|
}
|
81
81
|
labels
|
82
|
+
selfServiceRoles {
|
83
|
+
name
|
84
|
+
}
|
82
85
|
}
|
83
86
|
cluster {
|
84
87
|
...OcConnectionCluster
|
@@ -104,6 +107,9 @@ query SaasFiles {
|
|
104
107
|
parentApp {
|
105
108
|
name
|
106
109
|
}
|
110
|
+
selfServiceRoles {
|
111
|
+
name
|
112
|
+
}
|
107
113
|
}
|
108
114
|
pipelinesProvider {
|
109
115
|
name
|
@@ -255,13 +261,7 @@ query SaasFiles {
|
|
255
261
|
}
|
256
262
|
}
|
257
263
|
selfServiceRoles {
|
258
|
-
|
259
|
-
org_username
|
260
|
-
tag_on_merge_requests
|
261
|
-
}
|
262
|
-
bots {
|
263
|
-
org_username
|
264
|
-
}
|
264
|
+
name
|
265
265
|
}
|
266
266
|
}
|
267
267
|
}
|
@@ -278,9 +278,14 @@ class AppV1_AppV1(ConfiguredBaseModel):
|
|
278
278
|
name: str = Field(..., alias="name")
|
279
279
|
|
280
280
|
|
281
|
+
class RoleV1(ConfiguredBaseModel):
|
282
|
+
name: str = Field(..., alias="name")
|
283
|
+
|
284
|
+
|
281
285
|
class AppV1(ConfiguredBaseModel):
|
282
286
|
name: str = Field(..., alias="name")
|
283
287
|
parent_app: Optional[AppV1_AppV1] = Field(..., alias="parentApp")
|
288
|
+
self_service_roles: Optional[list[RoleV1]] = Field(..., alias="selfServiceRoles")
|
284
289
|
|
285
290
|
|
286
291
|
class PipelinesProviderV1(ConfiguredBaseModel):
|
@@ -491,18 +496,8 @@ class SaasResourceTemplateV2(ConfiguredBaseModel):
|
|
491
496
|
targets: list[SaasResourceTemplateTargetV2] = Field(..., alias="targets")
|
492
497
|
|
493
498
|
|
494
|
-
class
|
495
|
-
|
496
|
-
tag_on_merge_requests: Optional[bool] = Field(..., alias="tag_on_merge_requests")
|
497
|
-
|
498
|
-
|
499
|
-
class BotV1(ConfiguredBaseModel):
|
500
|
-
org_username: Optional[str] = Field(..., alias="org_username")
|
501
|
-
|
502
|
-
|
503
|
-
class RoleV1(ConfiguredBaseModel):
|
504
|
-
users: list[UserV1] = Field(..., alias="users")
|
505
|
-
bots: list[BotV1] = Field(..., alias="bots")
|
499
|
+
class SaasFileV2_RoleV1(ConfiguredBaseModel):
|
500
|
+
name: str = Field(..., alias="name")
|
506
501
|
|
507
502
|
|
508
503
|
class SaasFileV2(ConfiguredBaseModel):
|
@@ -539,7 +534,9 @@ class SaasFileV2(ConfiguredBaseModel):
|
|
539
534
|
resource_templates: list[SaasResourceTemplateV2] = Field(
|
540
535
|
..., alias="resourceTemplates"
|
541
536
|
)
|
542
|
-
self_service_roles: Optional[list[
|
537
|
+
self_service_roles: Optional[list[SaasFileV2_RoleV1]] = Field(
|
538
|
+
..., alias="selfServiceRoles"
|
539
|
+
)
|
543
540
|
|
544
541
|
|
545
542
|
class SaasFilesQueryData(ConfiguredBaseModel):
|
@@ -47,10 +47,15 @@ class AppV1_AppV1(ConfiguredBaseModel):
|
|
47
47
|
name: str = Field(..., alias="name")
|
48
48
|
|
49
49
|
|
50
|
+
class RoleV1(ConfiguredBaseModel):
|
51
|
+
name: str = Field(..., alias="name")
|
52
|
+
|
53
|
+
|
50
54
|
class AppV1(ConfiguredBaseModel):
|
51
55
|
name: str = Field(..., alias="name")
|
52
56
|
parent_app: Optional[AppV1_AppV1] = Field(..., alias="parentApp")
|
53
57
|
labels: Optional[Json] = Field(..., alias="labels")
|
58
|
+
self_service_roles: Optional[list[RoleV1]] = Field(..., alias="selfServiceRoles")
|
54
59
|
|
55
60
|
|
56
61
|
class NamespaceSkupperSiteConfigV1(ConfiguredBaseModel):
|
@@ -41,7 +41,7 @@ def test_saasherder_allowed_secret_paths(
|
|
41
41
|
"name": "a1",
|
42
42
|
"managedResourceTypes": [],
|
43
43
|
"allowedSecretParameterPaths": [allowed_secret_parameter_path],
|
44
|
-
"app": {"name": "app1"},
|
44
|
+
"app": {"name": "app1", "selfServiceRoles": [{"name": "test"}]},
|
45
45
|
"pipelinesProvider": {
|
46
46
|
"name": "tekton-app-sre-pipelines-appsres03ue1",
|
47
47
|
"provider": "tekton",
|
@@ -106,9 +106,6 @@ def test_saasherder_allowed_secret_paths(
|
|
106
106
|
],
|
107
107
|
},
|
108
108
|
],
|
109
|
-
"selfServiceRoles": [
|
110
|
-
{"users": [{"org_username": "theirname"}], "bots": []}
|
111
|
-
],
|
112
109
|
},
|
113
110
|
)
|
114
111
|
]
|
@@ -58,6 +58,10 @@ class SaasApp(Protocol):
|
|
58
58
|
def parent_app(self) -> Optional[SaasParentApp]:
|
59
59
|
...
|
60
60
|
|
61
|
+
@property
|
62
|
+
def self_service_roles(self) -> Optional[Sequence[SaasRole]]:
|
63
|
+
...
|
64
|
+
|
61
65
|
|
62
66
|
class SaasPipelinesProvider(Protocol):
|
63
67
|
name: str
|
@@ -360,23 +364,8 @@ class SaasResourceTemplate(HasParameters, HasSecretParameters, Protocol):
|
|
360
364
|
...
|
361
365
|
|
362
366
|
|
363
|
-
class SaasUser(Protocol):
|
364
|
-
org_username: str
|
365
|
-
tag_on_merge_requests: Optional[bool]
|
366
|
-
|
367
|
-
|
368
|
-
class SaasBot(Protocol):
|
369
|
-
org_username: Optional[str]
|
370
|
-
|
371
|
-
|
372
367
|
class SaasRole(Protocol):
|
373
|
-
|
374
|
-
def users(self) -> Sequence[SaasUser]:
|
375
|
-
...
|
376
|
-
|
377
|
-
@property
|
378
|
-
def bots(self) -> Sequence[SaasBot]:
|
379
|
-
...
|
368
|
+
name: str
|
380
369
|
|
381
370
|
|
382
371
|
SaasPipelinesProviders = Union[SaasPipelinesProviderTekton, SaasPipelinesProvider]
|
@@ -256,14 +256,9 @@ class SaasHerder: # pylint: disable=too-many-public-methods
|
|
256
256
|
saas_file_name_path_map.setdefault(saas_file.name, [])
|
257
257
|
saas_file_name_path_map[saas_file.name].append(saas_file.path)
|
258
258
|
|
259
|
-
|
260
|
-
u.org_username
|
261
|
-
for r in saas_file.self_service_roles or []
|
262
|
-
for u in list(r.users) + list(r.bots)
|
263
|
-
]
|
264
|
-
if not saas_file_owners:
|
259
|
+
if not saas_file.app.self_service_roles:
|
265
260
|
logging.error(
|
266
|
-
f"
|
261
|
+
f"app {saas_file.app.name} has no self-service roles (saas file {saas_file.name})"
|
267
262
|
)
|
268
263
|
self.valid = False
|
269
264
|
|
File without changes
|
File without changes
|
{qontract_reconcile-0.10.1rc174.dist-info → qontract_reconcile-0.10.1rc175.dist-info}/top_level.txt
RENAMED
File without changes
|