ChangelogRelease notes for v2.18

V2.18.0

CLI

  • New: Run jobs and services without a Polyaxonfile using polyaxon run with --image, --cmd, --env, --cpu, --memory, --gpu, and --port/--ports.
  • New: Start sandbox services with polyaxon run --sandbox, using inline options, a Polyaxonfile without a runtime (for example only plugins), or an existing service Polyaxonfile.
  • New: Pass the same inline options as keyword arguments to RunClient.create, create_from_polyaxonfile, create_from_url, create_from_hub, and SandboxClient.create, sync and async: image, cmd, env, cpu, memory, gpu, and ports.
  • New: Add --strict-params and --no-strict-params to polyaxon run and polyaxon check, and strict_params to check_polyaxonfile. These set the operation policy without relaxing a strict component or changing preset precedence.
  • Enhancement: Warn when a Polyaxonfile supplies version. The field is now optional and no longer selects a validation schema.
  • Fix: Issue with Kubernetes Python client 37 breaks Polyaxonfile validation with strict Pydantic models.
  • Fix: SandboxClient.create() without content builds the same service as polyaxon run --sandbox and leaves tmux and ssh unset, so presets can enable them. Older servers rejected its request with "The Polyaxonfile version must be specified".
  • Fix: Send string params passed to the Python SDK as given, like -P values. They were read as Python literals before the declared types were known, so "1e3" for a str input arrived as "1000.0" and JSON text as a dict. See Compatibility.

Core

  • New: Add root execution shortcuts to Polyaxonfiles, including container, cmd, env, resources, ports, environment, init, connections, sidecars, and volumes.
  • Enhancement: Accept undeclared params as context values by default, with or without declared IO. Add strictParams to components and operations for opt-in undeclared-name validation.
  • Enhancement: Accept components, operations, and compiled operations without version. Preserve supplied values through parsing, compilation, and run storage.
  • Fix: Record resolved context params alongside declared inputs in Run.inputs, including runs with no declared inputs. Declared outputs keep their existing recording behavior.
  • Fix: Handle null-valued params serialized as empty dictionaries without failing scheduler compilation with Cannot read config_value: {}.
  • Fix: Retain strictParams on control-plane workflow parents for child validation, but omit it from resolved specs sent to agents for backward compatibility.
  • Fix: Keep Ray rayStartParams values as strings during compilation. Values that look like numbers, such as num-cpus: "0", failed run compilation.
  • Fix: Keep items in container command and args lists as written. Values that looked like Python literals were rewritten, and 0, 0.0 and False, including templated params, were dropped.
  • Fix: Keep values and options of text-typed inputs and outputs (str, path, image, uuid, List[str], or isList with those types) as written during compilation. Values that looked like Python literals were converted, such as "0" to 0, List[str] values with numeric-looking items failed compilation, and escaped Jinja was erased.
  • Fix: Random search over boolean choice values created runs with None instead of true/false.

Operator

  • Fix: Record job status changes that only appear on the pod, such as recovering from a startup warning to Running. Job pod events were mapped to a resource name that does not exist and were ignored.
  • Fix: Report service pod warnings, such as ImagePullBackOff, within seconds instead of after the Deployment progress deadline (10 minutes by default).
  • Fix: Map Dask scheduler and worker pod events to their cluster. Dask pods are owned by Deployments, so their events were ignored.
  • Fix: Fail operations whose container image name can't be parsed (InvalidImageName). Kubernetes never fails these pods, so runs stayed in Warning with ContainersNotReady until stopped.
  • Fix: Report image pull retries as ImagePullBackOff. The status alternated with ContainersNotReady and hid the registry error.
  • Fix: Report jobs as Running only once the main container starts. A job whose pod was still pending was recorded as running.
  • Fix: Handle culling for services that have no status condition yet. The reconcile panicked and was retried until a condition was recorded.
  • Fix: Respect false and 0 in operator boolean settings that default to enabled, such as POLYAXON_SET_AGENT. They were ignored.
  • Fix: Refresh condition messages while the reason stays the same. A warning kept the first message Kubernetes reported, such as an empty containers with unready status: list.
  • Fix: Record the time of each operator status condition. Every condition in a run's status history showed the time of the first one.
  • Fix: Report the main container's failure reason, such as OOMKilled or Error, for jobs that exhaust their retries instead of BackoffLimitExceeded.
  • Fix: Report Dask clusters that can't create their scheduler or worker pods, for example over quota, as Warning with the Kubernetes error instead of Running.
  • Fix: Report Dask clusters as Running only once the scheduler starts. The Dask operator reports Running as soon as the scheduler Service exists.
  • Fix: Report Dask scheduler pod warnings, such as ImagePullBackOff, while the scheduler is not running. The cluster stayed Starting without a reason.
  • Fix: Enforce termination.timeout for Dask and Ray cluster runs. The operator ignored it.
  • Fix: Cull and complete services that set termination.timeout. Culling and main container exits could be skipped while the service was within its timeout.
  • Enhancement: Stop caching Kubernetes Events and remove unused field indexes and pod watches. The operator no longer needs get, list and watch permissions on events.

Deployment

  • Fix: Enable only the TFJob, PyTorchJob and MPIJob schemes in the training operator chart. The training operator crash-looped because it enabled every scheme, including ones whose CRDs the chart no longer installs.

UI

  • Enhancement: Improve auto-rendering of inputs/outputs in tables.

Commercial

  • Fix: Return 404 for malformed integration UUIDs on commercial endpoints, including agent endpoints, instead of failing during request handling.

Compatibility

Undeclared param names, including typos, are now accepted by default. Set strictParams: true to retain undeclared-name checks. In strict mode, explicitly allow extra context values with contextOnly: true. An explicit contextOnly: false requires a matching IO declaration in either mode. Declared IO types, constraints, and required-value validation still apply.

Use CLI and server versions that support the 2.18 policy and compatible SDKs when submitting strictParams. Older CLI and server validators may reject the new field or undeclared params. Agents do not need to support strictParams; the control plane resolves it before dispatch.

Python SDK params are sent as given: strings are no longer read as Python literals. Declared input and output types still convert them during compilation, for example "0" for an int input becomes 0. Pass native values where you relied on the old reading:

  • An untyped "0" stays a string until IO parsing, so operation conditions such as {{ n == 0 }} are false.
  • Nested strings such as {"k": "0"} no longer match numeric options of dict or list inputs.
  • Python-repr strings such as "{'a': 1}" fail validation. JSON strings and native dicts work.
  • A JSON-string dict replaces a dict param from the Polyaxonfile instead of merging into it. Native dicts still merge.

Text-typed inputs and outputs keep None as the text "None", including value: None in YAML, -P x=None, and templates rendering a null value. Use YAML null, omit the param, or pass None from the SDK.

Older CLI and server versions require version: 1.1. Keep it when targeting those versions. V2.18 accepts versioned and versionless Polyaxonfiles. This includes SandboxClient.create(): on older servers, pass content with version: 1.1.

See the params reference for examples and component/operation precedence.