pub struct Execute {
pub shell: ExecuteShell,
pub script: Option<String>,
pub script_file: Option<String>,
pub script_object: Option<String>,
pub timeout: String,
pub run_as: RunAs,
pub cwd: Option<String>,
}Fields§
§shell: ExecuteShell§script: Option<String>Inline script body. Mutually exclusive with script_file
and script_object; exactly one of the three must be set
(enforced by Execute::validate_script_source at the
write-side parse boundaries — kanade job create and
POST /api/jobs).
Empty string is treated as unset so operators can swap
to a script_file: / script_object: alternative just by
commenting out the body, without having to also drop the
script: key entirely.
script_file: Option<String>Repo-local file path resolved by the operator-side CLI at
kanade job create time. The CLI reads the file, slots its
contents into script, and clears this field before
POSTing — so the backend / agents never see script_file
in stored manifests. SPEC §2.4.1.
Resolver lands in a follow-up PR
(yukimemi/kanade#210); today this field passes parse-time
validation but the operator-side CLI bails with “not yet
implemented” until the resolver ships, so manifests that
reach the backend with script_file set are treated as a
schema-bug.
script_object: Option<String>Object Store reference (<name>/<version>) into the
scripts bucket (OBJECT_SCRIPTS). Agents fetch the body
at Execute time via /api/script-objects/{name}/{version}
and cache it locally. SPEC §2.4.1.
Resolver lands in the same follow-up PR as script_file;
today this field passes parse-time validation but the
backend / agent exec paths bail with “not yet implemented”
when they see it.
timeout: Stringhumantime duration string (e.g. “30s”, “10m”). Script-intrinsic — represents how long this script reasonably takes to run.
run_as: RunAsToken + session combination the agent uses to launch the
script (v0.21). Default = RunAs::System (Session 0,
LocalSystem privileges, no GUI) — matches pre-v0.21 behavior.
cwd: Option<String>Working directory for the spawned child (v0.21.1). When
unset, the child inherits the agent’s cwd — on Windows that
means %SystemRoot%\System32 for the prod service, which is
almost never what operators actually want. Use an absolute
path; relative paths are passed through to the OS verbatim.
%PROGRAMDATA% works for run_as: system; for run_as: user
you’d want %USERPROFILE% (but expansion happens in the
shell, so write $env:USERPROFILE for PowerShell, or set
it via teravars before kanade job create).
Implementations§
Source§impl Execute
impl Execute
Sourcepub fn validate_script_source(&self) -> Result<(), String>
pub fn validate_script_source(&self) -> Result<(), String>
Enforce that exactly one of script / script_file /
script_object is set. Called at the write-side parse
boundaries (CLI kanade job create + backend
POST /api/jobs) so ambiguous YAML is rejected before it
reaches the JOBS KV. Read paths (projector, agent
scheduler, list endpoints) skip this check — they only ever
see what the write path already validated.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Execute
impl<'de> Deserialize<'de> for Execute
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for Execute
impl JsonSchema for Execute
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read more