qontract-reconcile 0.10.1rc1190__py3-none-any.whl → 0.10.1rc1192__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.1rc1190
3
+ Version: 0.10.1rc1192
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
@@ -72,7 +72,7 @@ reconcile/openshift_network_policies.py,sha256=DyjaeJvSFHmslbM8nyHCxpF9EtU2m-MJo
72
72
  reconcile/openshift_prometheus_rules.py,sha256=onowXab248zmHH8SbYDTc1W1bl7JiqRFU1xdTkZyLFg,1332
73
73
  reconcile/openshift_resourcequotas.py,sha256=yUi56PiOn3inMMfq_x_FEHmaW-reGipzoorjdar372g,2415
74
74
  reconcile/openshift_resources.py,sha256=I2nO_C37mG3rfyGrd4cGwN3mVseVGuTAHAyhFzLyqF4,1518
75
- reconcile/openshift_resources_base.py,sha256=1A5_699p0rdsMwRQRPzePEfjhhq5eB2Obwxx4Ibr8jA,41205
75
+ reconcile/openshift_resources_base.py,sha256=mNP-wCeodvBLX5ykntw12D0xcvC4nHIF65EEFt8ez-g,41485
76
76
  reconcile/openshift_rolebindings.py,sha256=9mlJ2FjWUoH-rsjtasreA_hV-K5Z_YR00qR_RR60OZM,6555
77
77
  reconcile/openshift_routes.py,sha256=fXvuPSjcjVw1X3j2EQvUAdbOepmIFdKk-M3qP8QzPiw,1075
78
78
  reconcile/openshift_saas_deploy.py,sha256=T1dvb9zajisaJNjbnR6-AZHU-itscHtr4oCqLj8KCK0,13037
@@ -818,7 +818,7 @@ reconcile/utils/runtime/sharding.py,sha256=r0ieUtNed7NvknSw6qQrCkKpVXE1shuHGnfFc
818
818
  reconcile/utils/saasherder/__init__.py,sha256=3U8plqMAPRE1kjwZ5YnIsYsggTf4_gS7flRUEuXVBAs,343
819
819
  reconcile/utils/saasherder/interfaces.py,sha256=C2wrw34OXypshVocAsPrVZsSHptgw4g9u7Haa2wulZQ,9087
820
820
  reconcile/utils/saasherder/models.py,sha256=z8ln03zi2a8cu716NcNUDHp8Dv1VcVbhqdWVxCl7x9A,10148
821
- reconcile/utils/saasherder/saasherder.py,sha256=t7dqcXj9FFULROG_gUmdoSNQOLKfhdlquzwxw710yOA,85358
821
+ reconcile/utils/saasherder/saasherder.py,sha256=120A33jOQefZfYUpeDzaeNR4-Twe5V5bsBSe0DoOCSo,86115
822
822
  reconcile/utils/terraform/__init__.py,sha256=zNbiyTWo35AT1sFTElL2j_AA0jJ_yWE_bfFn-nD2xik,250
823
823
  reconcile/utils/terraform/config.py,sha256=5UVrd563TMcvi4ooa5JvWVDW1I3bIWg484u79evfV_8,164
824
824
  reconcile/utils/terraform/config_client.py,sha256=gRL1rQ0AqvShei_rcGqC3HDYGskOFKE1nPrJyJE9yno,4676
@@ -882,8 +882,8 @@ tools/test/test_qontract_cli.py,sha256=iuzKbQ6ahinvjoQmQLBrG4shey0z-1rB6qCgS8T6d
882
882
  tools/test/test_saas_promotion_state.py,sha256=dy4kkSSAQ7bC0Xp2CociETGN-2aABEfL6FU5D9Jl00Y,6056
883
883
  tools/test/test_sd_app_sre_alert_report.py,sha256=v363r9zM7__0kR5K6mvJoGFcM9BvE33fWAayrqkpojA,2116
884
884
  tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
885
- qontract_reconcile-0.10.1rc1190.dist-info/METADATA,sha256=69iNqyU2r_9XepM9SB9pwV0I87hdxLq4lw8oTmeqabc,2213
886
- qontract_reconcile-0.10.1rc1190.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
887
- qontract_reconcile-0.10.1rc1190.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
888
- qontract_reconcile-0.10.1rc1190.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
889
- qontract_reconcile-0.10.1rc1190.dist-info/RECORD,,
885
+ qontract_reconcile-0.10.1rc1192.dist-info/METADATA,sha256=xvVSmRGPTAuwy6U0jB-TwMzTgaD5b8OZIP5Em_jdZlo,2213
886
+ qontract_reconcile-0.10.1rc1192.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
887
+ qontract_reconcile-0.10.1rc1192.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
888
+ qontract_reconcile-0.10.1rc1192.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
889
+ qontract_reconcile-0.10.1rc1192.dist-info/RECORD,,
@@ -34,6 +34,7 @@ import reconcile.openshift_base as ob
34
34
  import reconcile.utils.jinja2.utils as jinja2_utils
35
35
  from reconcile import queries
36
36
  from reconcile.change_owners.diff import IDENTIFIER_FIELD_NAME
37
+ from reconcile.external_resources.meta import SECRET_UPDATED_AT
37
38
  from reconcile.utils import (
38
39
  amtool,
39
40
  gql,
@@ -233,6 +234,9 @@ QONTRACT_INTEGRATION_VERSION = make_semver(1, 9, 2)
233
234
  QONTRACT_BASE64_SUFFIX = "_qb64"
234
235
  KUBERNETES_SECRET_DATA_KEY_RE = "^[-._a-zA-Z0-9]+$"
235
236
 
237
+ # Keys in vault secrets that do not need to land
238
+ # into K8S secrets.
239
+ VAULT_SECRETS_EXCLUDED_KEYS = {SECRET_UPDATED_AT}
236
240
  _log_lock = Lock()
237
241
 
238
242
 
@@ -401,7 +405,11 @@ def fetch_provider_vault_secret(
401
405
  ) -> OR:
402
406
  # get the fields from vault
403
407
  secret_reader = SecretReader(settings)
404
- raw_data = secret_reader.read_all({"path": path, "version": version})
408
+ raw_data = {
409
+ k: v
410
+ for k, v in secret_reader.read_all({"path": path, "version": version}).items()
411
+ if k not in VAULT_SECRETS_EXCLUDED_KEYS
412
+ }
405
413
 
406
414
  if validate_alertmanager_config:
407
415
  check_alertmanager_config(raw_data, path, alertmanager_config_key)
@@ -1112,29 +1112,54 @@ class SaasHerder: # pylint: disable=too-many-public-methods
1112
1112
  username, password = (
1113
1113
  base64.b64decode(auth["auth"]).decode("utf-8").split(":")
1114
1114
  )
1115
- with suppress(Exception):
1116
- return Image(
1117
- image,
1118
- username=username,
1119
- password=password,
1120
- auth_server=image_auth.auth_server,
1121
- timeout=REQUEST_TIMEOUT,
1122
- )
1115
+
1116
+ return SaasHerder._get_and_validate_image(
1117
+ full_image_path=image,
1118
+ username=username,
1119
+ password=password,
1120
+ auth_server=image_auth.auth_server,
1121
+ timeout=REQUEST_TIMEOUT,
1122
+ error_prefix=error_prefix,
1123
+ )
1123
1124
 
1124
1125
  # basic auth fallback for backwards compatibility
1126
+ return SaasHerder._get_and_validate_image(
1127
+ full_image_path=image,
1128
+ username=image_auth.username,
1129
+ password=image_auth.password,
1130
+ auth_server=image_auth.auth_server,
1131
+ timeout=REQUEST_TIMEOUT,
1132
+ error_prefix=error_prefix,
1133
+ )
1134
+
1135
+ @staticmethod
1136
+ def _get_and_validate_image(
1137
+ full_image_path: str,
1138
+ username: str | Any,
1139
+ password: str | Any,
1140
+ auth_server: str | Any,
1141
+ timeout: int,
1142
+ error_prefix: str,
1143
+ ) -> Image | None:
1125
1144
  try:
1126
- return Image(
1127
- image,
1128
- username=image_auth.username,
1129
- password=image_auth.password,
1130
- auth_server=image_auth.auth_server,
1131
- timeout=REQUEST_TIMEOUT,
1145
+ img = Image(
1146
+ full_image_path,
1147
+ username=username,
1148
+ password=password,
1149
+ auth_server=auth_server,
1150
+ timeout=timeout,
1132
1151
  )
1152
+ if img:
1153
+ return img
1154
+ else:
1155
+ logging.error(
1156
+ f"{error_prefix} Image : {full_image_path} does not exist"
1157
+ )
1133
1158
  except Exception as e:
1134
1159
  logging.error(
1135
- f"{error_prefix} Image is invalid: {image}. " + f"details: {e!s}"
1160
+ f"{error_prefix} Image is invalid: {full_image_path}. "
1161
+ + f"details: {e!s}"
1136
1162
  )
1137
-
1138
1163
  return None
1139
1164
 
1140
1165
  def _check_images(