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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qontract-reconcile
3
- Version: 0.10.1rc174
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
@@ -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=bGrXxo1DHixi09JuHBtf2DatDGIdUbjfga2wtjysVQo,15190
181
- reconcile/gql_definitions/common/saas_target_namespaces.py,sha256=wdrsA4POEiuE9FHFuZN4BqgG6nEEH5MYsZec7nwda5c,2634
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=RJEsksPlDvSyy0kztszw5PFFZnvN7TQVDAAqsZ5otR8,2156
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=86ffYbbN0Xng8CTiXf3yR_3VD8qyqRpVTByJFycdXp0,4899
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=5td8aFU1v0V7_I1r1U3b39AsrDvzNeVrCAVSP_CffHg,8935
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=rOtB2fo7RWst4qMf3nfdHo1Qo6KAplN3gqQRE8wSiqI,81246
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.1rc174.dist-info/METADATA,sha256=YdtzuZVFXXRkB_7Zbf2F4uRshHSGFmpHTQ-J7ei1nis,2320
613
- qontract_reconcile-0.10.1rc174.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
614
- qontract_reconcile-0.10.1rc174.dist-info/entry_points.txt,sha256=Af70EWPJxsTiCNF6gA-pWdw1A0Heqn-PZF-oBc5NmiU,302
615
- qontract_reconcile-0.10.1rc174.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
616
- qontract_reconcile-0.10.1rc174.dist-info/RECORD,,
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
- users {
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 UserV1(ConfiguredBaseModel):
495
- org_username: str = Field(..., alias="org_username")
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[RoleV1]] = Field(..., alias="selfServiceRoles")
537
+ self_service_roles: Optional[list[SaasFileV2_RoleV1]] = Field(
538
+ ..., alias="selfServiceRoles"
539
+ )
543
540
 
544
541
 
545
542
  class SaasFilesQueryData(ConfiguredBaseModel):
@@ -75,6 +75,9 @@ fragment SaasTargetNamespace on Namespace_v1 {
75
75
  name
76
76
  }
77
77
  labels
78
+ selfServiceRoles {
79
+ name
80
+ }
78
81
  }
79
82
  cluster {
80
83
  ...OcConnectionCluster
@@ -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
- @property
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
- saas_file_owners = [
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"saas file {saas_file.name} has no owners: {saas_file.path}"
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