if ssl_cert:
if isinstance(ssl_cert, list):
ssl_cert = '\n'.join(ssl_cert)
- deps.append(f'ssl-cert:{str(utils.md5_hash(ssl_cert))}')
+ deps.append(f'ssl-cert:{utils.config_hash(ssl_cert)}')
return sorted(deps)
ssl_cert_key = getattr(ingress_spec, attr, None)
if ssl_cert_key:
assert isinstance(ssl_cert_key, str)
- deps.append(f'ssl-cert-key:{str(utils.md5_hash(ssl_cert_key))}')
+ deps.append(f'ssl-cert-key:{utils.config_hash(ssl_cert_key)}')
backend_spec = mgr.spec_store[ingress_spec.backend_service].spec
if backend_spec.service_type == 'nfs':
hosts = get_placement_hosts(spec, mgr.cache.get_schedulable_hosts(), mgr.cache.get_draining_hosts())
# in case security is enabled we have to reconfig when prom user/pass changes
prometheus_user, prometheus_password = mgr._get_prometheus_credentials()
if security_enabled and prometheus_user and prometheus_password:
- deps.append(f'cred:{utils.md5_hash(prometheus_user + prometheus_password)}')
+ deps.append(f'cred:{utils.config_hash(prometheus_user + prometheus_password)}')
# adding a dependency for mgmt-gateway because the usage of url_prefix relies on its presence.
# another dependency is added for oauth-proxy as Grafana login is delegated to this service when enabled.
if security_enabled:
alertmanager_user, alertmanager_password = mgr._get_alertmanager_credentials()
if alertmanager_user and alertmanager_password:
- alertmgr_cred_hash = f'cred:{utils.md5_hash(alertmanager_user + alertmanager_password)}'
+ alertmgr_cred_hash = f'cred:{utils.config_hash(alertmanager_user + alertmanager_password)}'
deps.append(alertmgr_cred_hash)
if not mgmt_gw_enabled:
alertmanager_user, alertmanager_password = mgr._get_alertmanager_credentials()
prometheus_user, prometheus_password = mgr._get_prometheus_credentials()
if prometheus_user and prometheus_password:
- deps.append(f'prom-cred:{utils.md5_hash(prometheus_user + prometheus_password)}')
+ deps.append(f'prom-cred:{utils.config_hash(prometheus_user + prometheus_password)}')
if alertmanager_user and alertmanager_password:
- deps.append(f'alert-cred:{utils.md5_hash(alertmanager_user + alertmanager_password)}')
+ deps.append(f'alert-cred:{utils.config_hash(alertmanager_user + alertmanager_password)}')
# Adding other services as deps (with corresponding justification):
# mgmt-gateway : url_prefix depends on the existence of mgmt-gateway
nfs_spec = cast(NFSServiceSpec, spec)
# add dependency of tls fields
if (spec.ssl and spec.ssl_cert and spec.ssl_key and spec.ssl_ca_cert):
- deps.append(f'ssl_cert: {str(utils.md5_hash(spec.ssl_cert))}')
- deps.append(f'ssl_key: {str(utils.md5_hash(spec.ssl_key))}')
- deps.append(f'ssl_ca_cert: {str(utils.md5_hash(spec.ssl_ca_cert))}')
+ deps.append(f'ssl_cert: {utils.config_hash(spec.ssl_cert)}')
+ deps.append(f'ssl_key: {utils.config_hash(spec.ssl_key)}')
+ deps.append(f'ssl_ca_cert: {utils.config_hash(spec.ssl_ca_cert)}')
deps.append(f'tls_ktls: {nfs_spec.tls_ktls}')
deps.append(f'tls_debug: {nfs_spec.tls_debug}')
deps.append(f'tls_min_version: {nfs_spec.tls_min_version}')
return r
-def md5_hash(input_value: str) -> str:
- input_str = str(input_value).encode('utf-8')
- hash_object = hashlib.md5(input_str)
- return hash_object.hexdigest()
+def config_hash(input_value: str) -> str:
+ """
+ Short stable digest for config/dependency change detection.
+ Uses SHA-256 so this works on FIPS-enabled systems (MD5 may be blocked).
+ """
+ input_str = input_value.encode('utf-8')
+ return hashlib.sha256(input_str).hexdigest()[:8]
def get_node_proxy_status_value(data: Any, key: str, lower: bool = False) -> str: