qontract-reconcile 0.10.1rc1066__py3-none-any.whl → 0.10.1rc1067__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.1rc1066.dist-info → qontract_reconcile-0.10.1rc1067.dist-info}/METADATA +1 -1
- {qontract_reconcile-0.10.1rc1066.dist-info → qontract_reconcile-0.10.1rc1067.dist-info}/RECORD +9 -7
- reconcile/change_owners/change_log_tracking.py +20 -0
- reconcile/gql_definitions/common/apps.py +72 -0
- reconcile/typed_queries/apps.py +11 -0
- tools/qontract_cli.py +4 -2
- {qontract_reconcile-0.10.1rc1066.dist-info → qontract_reconcile-0.10.1rc1067.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.1rc1066.dist-info → qontract_reconcile-0.10.1rc1067.dist-info}/entry_points.txt +0 -0
- {qontract_reconcile-0.10.1rc1066.dist-info → qontract_reconcile-0.10.1rc1067.dist-info}/top_level.txt +0 -0
{qontract_reconcile-0.10.1rc1066.dist-info → qontract_reconcile-0.10.1rc1067.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.1rc1067
|
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.1rc1066.dist-info → qontract_reconcile-0.10.1rc1067.dist-info}/RECORD
RENAMED
@@ -161,7 +161,7 @@ reconcile/aws_version_sync/merge_request_manager/merge_request_manager.py,sha256
|
|
161
161
|
reconcile/change_owners/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
162
162
|
reconcile/change_owners/approver.py,sha256=Z3_11vnK2WNOxjEEXVDh0224-_-qbt9d6mBeVE-7fsc,2259
|
163
163
|
reconcile/change_owners/bundle.py,sha256=ZIlXRo6Z2raeWSCUqYsexBdol-q-r9kWJs5O_YPaEYk,5273
|
164
|
-
reconcile/change_owners/change_log_tracking.py,sha256=
|
164
|
+
reconcile/change_owners/change_log_tracking.py,sha256=V8J6Whi0F4tbm0KidGuOUuNfv3e6SgE0ddDHdx9JB9o,5158
|
165
165
|
reconcile/change_owners/change_owners.py,sha256=0HRJhDm0oW3uYJFgzynqA1gA0lbhalhSkmWOiQmr-NM,17062
|
166
166
|
reconcile/change_owners/change_types.py,sha256=TjVtvmkU0s8w2NA6qvWQccB6PwlCrChFySlsHLYZjpE,32027
|
167
167
|
reconcile/change_owners/changes.py,sha256=pa3cNAL-Xawh700ARJJQjY0p09NA1J2329RcE0F0MHM,17224
|
@@ -251,6 +251,7 @@ reconcile/gql_definitions/common/app_interface_repo_settings.py,sha256=rud0rz9NI
|
|
251
251
|
reconcile/gql_definitions/common/app_interface_state_settings.py,sha256=VXIK0Hmyv6GTShI86IGkjxyHGwufqUBAh617XKUAKaI,2507
|
252
252
|
reconcile/gql_definitions/common/app_interface_vault_settings.py,sha256=w8quvdG0cSq71ZyJokPPp7MyMpoDb6-HLQ3o9JHVGRQ,1771
|
253
253
|
reconcile/gql_definitions/common/app_quay_repos_escalation_policies.py,sha256=ckdoGse7O5uAWdZdNinkWicA2EflUb5pe8jWEBtflE8,3236
|
254
|
+
reconcile/gql_definitions/common/apps.py,sha256=lC7uZjyHAvJXhCDPJJ-dQJInBJkUCNZoe129XMa67wo,1868
|
254
255
|
reconcile/gql_definitions/common/aws_vpc_requests.py,sha256=2lpyy-QSfHPSTvV_zbnqzqUoFzVNl-CJDmoqd_zVSX4,2366
|
255
256
|
reconcile/gql_definitions/common/aws_vpcs.py,sha256=Dss9dQ3xagnz3Ltg1e9mtG2PAmQGBbUzKCmmzvuN28s,1892
|
256
257
|
reconcile/gql_definitions/common/clusters.py,sha256=Dr5AsSsTuqjAxkI9fU0fdiaP6u5qkmRpkkCcYDnU584,21868
|
@@ -604,6 +605,7 @@ reconcile/typed_queries/app_interface_repo_url.py,sha256=9fhgWihjWNYOmK65irBWw9j
|
|
604
605
|
reconcile/typed_queries/app_interface_state_settings.py,sha256=GdtxrjKs6JONthBzXJO66wHx80v3YyHvbZScj0XFM1Q,447
|
605
606
|
reconcile/typed_queries/app_interface_vault_settings.py,sha256=ffkKVDD5cukQWOorUIrGvpcVr3lCbUHRIz0HWX_h7gI,715
|
606
607
|
reconcile/typed_queries/app_quay_repos_escalation_policies.py,sha256=qpO9z9ev2RSH8sdZprLxhhrrbI0kvzmliSPfIVnfPbE,397
|
608
|
+
reconcile/typed_queries/apps.py,sha256=IzgDQnKnvGKvFsgfIkha935I1T24tAYEp_LwrLrwVgQ,339
|
607
609
|
reconcile/typed_queries/aws_vpc_requests.py,sha256=3LmBX9usfK8Uqr-pAux2oap01sXiMdGC_ihln6w4oV8,358
|
608
610
|
reconcile/typed_queries/aws_vpcs.py,sha256=Fd0QCwXOH46UHw3-Xo_1ghtGYgUVJDpKf5Q3r1GpJGI,339
|
609
611
|
reconcile/typed_queries/cloudflare.py,sha256=jOsqgCzMrjomPaIWc1isTcQAGONmMIJDTBcpmCheonA,308
|
@@ -837,7 +839,7 @@ tools/app_interface_metrics_exporter.py,sha256=zkwkxdAUAxjdc-pzx2_oJXG25fo0Fnyd5
|
|
837
839
|
tools/app_interface_reporter.py,sha256=oZPib4HPq0aZ2Zui1QGJGk6qQdfpeihujGDBnSdKyGE,17627
|
838
840
|
tools/glitchtip_access_reporter.py,sha256=oPBnk_YoDuljU3v0FaChzOwwnk4vap1xEE67QEjzdqs,2948
|
839
841
|
tools/glitchtip_access_revalidation.py,sha256=8kbBJk04mkq28kWoRDDkfCGIF3GRg3pJrFAh1sW0dbk,2821
|
840
|
-
tools/qontract_cli.py,sha256=
|
842
|
+
tools/qontract_cli.py,sha256=scWaC5D_s4s_F9z1bdxi2yCWk8UAmVIo-6u665Y6ikA,130526
|
841
843
|
tools/sd_app_sre_alert_report.py,sha256=e9vAdyenUz2f5c8-z-5WY0wv-SJ9aePKDH2r4IwB6pc,5063
|
842
844
|
tools/template_validation.py,sha256=qpKYaTgk0GOPGa2Ct5_5sKdwIHtCAKIBGzsMPuJU5fw,3371
|
843
845
|
tools/cli_commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -868,8 +870,8 @@ tools/test/test_qontract_cli.py,sha256=_D61RFGAN5x44CY1tYbouhlGXXABwYfxKSWSQx3Jr
|
|
868
870
|
tools/test/test_saas_promotion_state.py,sha256=dy4kkSSAQ7bC0Xp2CociETGN-2aABEfL6FU5D9Jl00Y,6056
|
869
871
|
tools/test/test_sd_app_sre_alert_report.py,sha256=v363r9zM7__0kR5K6mvJoGFcM9BvE33fWAayrqkpojA,2116
|
870
872
|
tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
|
871
|
-
qontract_reconcile-0.10.
|
872
|
-
qontract_reconcile-0.10.
|
873
|
-
qontract_reconcile-0.10.
|
874
|
-
qontract_reconcile-0.10.
|
875
|
-
qontract_reconcile-0.10.
|
873
|
+
qontract_reconcile-0.10.1rc1067.dist-info/METADATA,sha256=GzMBK4NWaoCkELds21CK4FUw7n6XnchzFSPOtm1FbSs,2213
|
874
|
+
qontract_reconcile-0.10.1rc1067.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
875
|
+
qontract_reconcile-0.10.1rc1067.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
|
876
|
+
qontract_reconcile-0.10.1rc1067.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
|
877
|
+
qontract_reconcile-0.10.1rc1067.dist-info/RECORD,,
|
@@ -9,6 +9,7 @@ from reconcile.change_owners.bundle import (
|
|
9
9
|
from reconcile.change_owners.change_owners import fetch_change_type_processors
|
10
10
|
from reconcile.change_owners.change_types import ChangeTypeContext
|
11
11
|
from reconcile.change_owners.changes import aggregate_file_moves, parse_bundle_changes
|
12
|
+
from reconcile.typed_queries.apps import get_apps
|
12
13
|
from reconcile.utils import gql
|
13
14
|
from reconcile.utils.defer import defer
|
14
15
|
from reconcile.utils.runtime.integration import (
|
@@ -26,6 +27,7 @@ class ChangeLogItem:
|
|
26
27
|
commit: str
|
27
28
|
change_types: list[str] = field(default_factory=list)
|
28
29
|
error: bool = False
|
30
|
+
apps: list[str] = field(default_factory=list)
|
29
31
|
|
30
32
|
|
31
33
|
@dataclass
|
@@ -55,6 +57,8 @@ class ChangeLogIntegration(QontractReconcileIntegration[ChangeLogIntegrationPara
|
|
55
57
|
)
|
56
58
|
if ctp.labels and "change_log_tracking" in ctp.labels
|
57
59
|
]
|
60
|
+
apps = get_apps()
|
61
|
+
app_name_by_path = {a.path: a.name for a in apps}
|
58
62
|
|
59
63
|
integration_state = init_state(
|
60
64
|
integration=self.name,
|
@@ -101,6 +105,22 @@ class ChangeLogIntegration(QontractReconcileIntegration[ChangeLogIntegrationPara
|
|
101
105
|
changes = aggregate_file_moves(parse_bundle_changes(diff))
|
102
106
|
for change in changes:
|
103
107
|
logging.debug(f"Processing change {change}")
|
108
|
+
change_versions = filter(None, [change.old, change.new])
|
109
|
+
match change.fileref.schema:
|
110
|
+
case "/app-sre/app-1.yml":
|
111
|
+
changed_apps = {c["name"] for c in change_versions}
|
112
|
+
change_log_item.apps.extend(changed_apps)
|
113
|
+
case "/app-sre/saas-file-2.yml" | "/openshift/namespace-1.yml":
|
114
|
+
changed_apps = {
|
115
|
+
name
|
116
|
+
for c in change_versions
|
117
|
+
if (name := app_name_by_path.get(c["app"]["$ref"]))
|
118
|
+
}
|
119
|
+
change_log_item.apps.extend(changed_apps)
|
120
|
+
|
121
|
+
# TODO(maorfr): switch apps to set
|
122
|
+
change_log_item.apps = list(set(change_log_item.apps))
|
123
|
+
|
104
124
|
for ctp in change_type_processors:
|
105
125
|
logging.info(f"Processing change type {ctp.name}")
|
106
126
|
ctx = ChangeTypeContext(
|
@@ -0,0 +1,72 @@
|
|
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
|
+
|
21
|
+
DEFINITION = """
|
22
|
+
query Apps {
|
23
|
+
apps: apps_v1 {
|
24
|
+
path
|
25
|
+
name
|
26
|
+
parentApp {
|
27
|
+
path
|
28
|
+
name
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
"""
|
33
|
+
|
34
|
+
|
35
|
+
class ConfiguredBaseModel(BaseModel):
|
36
|
+
class Config:
|
37
|
+
smart_union=True
|
38
|
+
extra=Extra.forbid
|
39
|
+
|
40
|
+
|
41
|
+
class AppV1_AppV1(ConfiguredBaseModel):
|
42
|
+
path: str = Field(..., alias="path")
|
43
|
+
name: str = Field(..., alias="name")
|
44
|
+
|
45
|
+
|
46
|
+
class AppV1(ConfiguredBaseModel):
|
47
|
+
path: str = Field(..., alias="path")
|
48
|
+
name: str = Field(..., alias="name")
|
49
|
+
parent_app: Optional[AppV1_AppV1] = Field(..., alias="parentApp")
|
50
|
+
|
51
|
+
|
52
|
+
class AppsQueryData(ConfiguredBaseModel):
|
53
|
+
apps: Optional[list[AppV1]] = Field(..., alias="apps")
|
54
|
+
|
55
|
+
|
56
|
+
def query(query_func: Callable, **kwargs: Any) -> AppsQueryData:
|
57
|
+
"""
|
58
|
+
This is a convenience function which queries and parses the data into
|
59
|
+
concrete types. It should be compatible with most GQL clients.
|
60
|
+
You do not have to use it to consume the generated data classes.
|
61
|
+
Alternatively, you can also mime and alternate the behavior
|
62
|
+
of this function in the caller.
|
63
|
+
|
64
|
+
Parameters:
|
65
|
+
query_func (Callable): Function which queries your GQL Server
|
66
|
+
kwargs: optional arguments that will be passed to the query function
|
67
|
+
|
68
|
+
Returns:
|
69
|
+
AppsQueryData: queried data parsed into generated classes
|
70
|
+
"""
|
71
|
+
raw_data: dict[Any, Any] = query_func(DEFINITION, **kwargs)
|
72
|
+
return AppsQueryData(**raw_data)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
from collections.abc import Callable
|
2
|
+
|
3
|
+
from reconcile.gql_definitions.common.apps import AppV1, query
|
4
|
+
from reconcile.utils import gql
|
5
|
+
|
6
|
+
|
7
|
+
def get_apps(query_func: Callable | None = None) -> list[AppV1]:
|
8
|
+
if not query_func:
|
9
|
+
gqlapi = gql.get_api()
|
10
|
+
query_func = gqlapi.query
|
11
|
+
return query(query_func=query_func).apps or []
|
tools/qontract_cli.py
CHANGED
@@ -48,6 +48,7 @@ from reconcile.aus.base import (
|
|
48
48
|
from reconcile.aus.models import OrganizationUpgradeSpec
|
49
49
|
from reconcile.change_owners.bundle import NoOpFileDiffResolver
|
50
50
|
from reconcile.change_owners.change_log_tracking import (
|
51
|
+
BUNDLE_DIFFS_OBJ,
|
51
52
|
ChangeLog,
|
52
53
|
ChangeLogIntegration,
|
53
54
|
ChangeLogIntegrationParams,
|
@@ -2893,7 +2894,7 @@ def change_log_tracking(ctx):
|
|
2893
2894
|
state = init_state(
|
2894
2895
|
integration=ChangeLogIntegration(ChangeLogIntegrationParams()).name
|
2895
2896
|
)
|
2896
|
-
change_log = ChangeLog(**state.get(
|
2897
|
+
change_log = ChangeLog(**state.get(BUNDLE_DIFFS_OBJ))
|
2897
2898
|
data: list[dict[str, str]] = []
|
2898
2899
|
for item in change_log.items:
|
2899
2900
|
change_log_item = ChangeLogItem(**item)
|
@@ -2905,12 +2906,13 @@ def change_log_tracking(ctx):
|
|
2905
2906
|
]
|
2906
2907
|
item = {
|
2907
2908
|
"commit": f"[{commit}]({repo_url}/commit/{commit})",
|
2909
|
+
"apps": ", ".join(change_log_item.apps),
|
2908
2910
|
"changes": ", ".join(covered_change_types_descriptions),
|
2909
2911
|
"error": change_log_item.error,
|
2910
2912
|
}
|
2911
2913
|
data.append(item)
|
2912
2914
|
|
2913
|
-
columns = ["commit", "changes", "error"]
|
2915
|
+
columns = ["commit", "apps", "changes", "error"]
|
2914
2916
|
print_output(ctx.obj["options"], data, columns)
|
2915
2917
|
|
2916
2918
|
|
{qontract_reconcile-0.10.1rc1066.dist-info → qontract_reconcile-0.10.1rc1067.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|