diff --git a/README.md b/README.md index e834acce..10939678 100644 --- a/README.md +++ b/README.md @@ -249,11 +249,10 @@ and how it advertises itself to a Cryostat server instance. Properties that requ - [ ] `cryostat.agent.harvester.max-size-b` [`long`]: the JFR `maxsize` setting, specified in bytes, to apply to periodic uploads during the application lifecycle. Defaults to `0`, which means `unlimited`. - [ ] `cryostat.agent.smart-trigger.definitions` [`String[]`]: a comma-separated list of Smart Trigger definitions to load at startup. Defaults to the empty string: no Smart Triggers. - [ ] `cryostat.agent.smart-trigger.evaluation.period-ms` [`long`]: the length of time between Smart Trigger evaluations. Default `1000`. -- [ ] `cryostat.agent.kubernetes.callback.scheme` [`String`]: A Kubernetes-specific override for the scheme portion of the `cryostat.agent.callback` URL (e.g. `https`). -- [ ] `cryostat.agent.kubernetes.callback.pod.name` [`String`]: A Kubernetes-specific override for the host portion of the `cryostat.agent.callback` URL. If this pod is resolvable using its name as a host name, that will be used in the callback URL. -- [ ] `cryostat.agent.kubernetes.callback.ip` [`String`]: A Kubernetes-specific override for the host portion of the `cryostat.agent.callback` URL. If this pod is resolvable using the dashed IPv4 address (e.g. 1-2-3-4) as a host name, that will be used in the callback URL. -- [ ] `cryostat.agent.kubernetes.callback.domain` [`String`]: A Kubernetes-specific override for the domain portion of the `cryostat.agent.callback` URL. This will be appended to a resolvable host name to form the callback URL. -- [ ] `cryostat.agent.kubernetes.callback.port` [`int`]: A Kubernetes-specific override for the port portion of the `cryostat.agent.callback` URL. +- [ ] `cryostat.agent.callback.scheme` [`String`]: An override for the scheme portion of the `cryostat.agent.callback` URL (e.g. `https`). +- [ ] `cryostat.agent.callback.host-name` [`String[]`]: An override for the host portion of the `cryostat.agent.callback` URL. Supports multiple possible host names. The first host name to resolve when paired with `cryostat.agent.callback.domain-name` will be selected. Supports an optional CEL expression that can be used to transform a provided host name. Syntax: `` or `[cel-expression]`, the latter evaluates the following CEL expression and uses the result as a host name candidate: `''.cel-expression`. Example: `host1, hostx[replace("x"\\, "2")]`, the agent will try to resolve host1, followed by host2. +- [ ] `cryostat.agent.callback.domain-name` [`String`]: An override for the domain portion of the `cryostat.agent.callback` URL. This will be appended to a resolvable host name to form the callback URL. +- [ ] `cryostat.agent.callback.port` [`int`]: An override for the port portion of the `cryostat.agent.callback` URL. - [ ] `rht.insights.java.opt-out` [`boolean`]: for the Red Hat build of Cryostat, set this to true to disable data collection for Red Hat Insights. Defaults to `false`. Red Hat Insights data collection is always disabled for community builds of Cryostat. - [ ] `rht.insights.java.debug` [`boolean`]: for the Red Hat build of Cryostat, set this to true to enable debug logging for the Red Hat Insights Java Agent. Defaults to `false`. Red Hat Insights data collection is always disabled for community builds of Cryostat. diff --git a/src/main/java/io/cryostat/agent/ConfigModule.java b/src/main/java/io/cryostat/agent/ConfigModule.java index 5429b332..744ae960 100644 --- a/src/main/java/io/cryostat/agent/ConfigModule.java +++ b/src/main/java/io/cryostat/agent/ConfigModule.java @@ -53,6 +53,10 @@ import org.apache.http.client.utils.URIBuilder; import org.eclipse.microprofile.config.Config; import org.eclipse.microprofile.config.ConfigProvider; +import org.projectnessie.cel.extension.StringsLib; +import org.projectnessie.cel.tools.Script; +import org.projectnessie.cel.tools.ScriptException; +import org.projectnessie.cel.tools.ScriptHost; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -210,20 +214,20 @@ public abstract class ConfigModule { public static final String CRYOSTAT_AGENT_SMART_TRIGGER_EVALUATION_PERIOD_MS = "cryostat.agent.smart-trigger.evaluation.period-ms"; - public static final String CRYOSTAT_AGENT_KUBERNETES_CALLBACK_SCHEME = - "cryostat.agent.kubernetes.callback.scheme"; - public static final String CRYOSTAT_AGENT_KUBERNETES_CALLBACK_POD_NAME = - "cryostat.agent.kubernetes.callback.pod.name"; - public static final String CRYOSTAT_AGENT_KUBERNETES_CALLBACK_IP = - "cryostat.agent.kubernetes.callback.ip"; - public static final String CRYOSTAT_AGENT_KUBERNETES_CALLBACK_DOMAIN = - "cryostat.agent.kubernetes.callback.domain"; - public static final String CRYOSTAT_AGENT_KUBERNETES_CALLBACK_PORT = - "cryostat.agent.kubernetes.callback.port"; + public static final String CRYOSTAT_AGENT_CALLBACK_SCHEME = "cryostat.agent.callback.scheme"; + public static final String CRYOSTAT_AGENT_CALLBACK_HOST_NAME = + "cryostat.agent.callback.host-name"; + public static final String CRYOSTAT_AGENT_CALLBACK_DOMAIN_NAME = + "cryostat.agent.callback.domain-name"; + public static final String CRYOSTAT_AGENT_CALLBACK_PORT = "cryostat.agent.callback.port"; public static final String CRYOSTAT_AGENT_API_WRITES_ENABLED = "cryostat.agent.api.writes-enabled"; + private static final String HOST_SCRIPT_PATTERN_STRING = + "(?[A-Za-z0-9-.]+)(?:\\[(?