pub struct TaskSpec { /* private fields */ }Expand description
Desired state for a task.
Use TaskSpec::builder to construct it.
Resource constructors validate the completed spec.
§Example
use solti_model::{EmbeddedSpec, RestartPolicy, TaskSpec, TaskWorkload};
let workload = TaskWorkload::Embedded(EmbeddedSpec::new("v1").unwrap());
let spec = TaskSpec::builder("daily-cleanup", workload, 5_000u64)
.restart(RestartPolicy::periodic(60_000))
.build()
.unwrap();
assert_eq!(spec.slot().as_str(), "daily-cleanup");
assert_eq!(spec.timeout().as_millis(), 5_000);Implementations§
Source§impl TaskSpec
impl TaskSpec
Sourcepub fn workload(&self) -> &TaskWorkload
pub fn workload(&self) -> &TaskWorkload
Workload desired state.
Sourcepub fn restart(&self) -> RestartPolicy
pub fn restart(&self) -> RestartPolicy
Restart policy applied after completion or failure.
Sourcepub fn backoff(&self) -> &BackoffPolicy
pub fn backoff(&self) -> &BackoffPolicy
Backoff configuration between restart attempts.
Sourcepub fn admission(&self) -> AdmissionPolicy
pub fn admission(&self) -> AdmissionPolicy
Admission policy for handling slot conflicts.
Sourcepub fn max_retries(&self) -> Option<NonZeroU32>
pub fn max_retries(&self) -> Option<NonZeroU32>
Maximum consecutive failure retries.
None means unlimited.
Zero is not representable.
Sourcepub fn runner_selector(&self) -> Option<&LabelSelector>
pub fn runner_selector(&self) -> Option<&LabelSelector>
Label selector for runner routing, if present.
Source§impl TaskSpec
impl TaskSpec
Sourcepub fn builder(
slot: impl AsRef<str>,
workload: TaskWorkload,
timeout: impl Into<u64>,
) -> TaskSpecBuilder
pub fn builder( slot: impl AsRef<str>, workload: TaskWorkload, timeout: impl Into<u64>, ) -> TaskSpecBuilder
Creates a builder with the required fields.
use solti_model::{TaskSpec, TaskWorkload, SubprocessSpec, SubprocessMode, RestartPolicy};
let spec = TaskSpec::builder(
"my-slot",
TaskWorkload::Subprocess(SubprocessSpec::new(
SubprocessMode::Command {
command: "echo".into(),
args: vec!["hello".into()],
},
Default::default(),
None,
Default::default(),
)),
5_000u64,
)
.restart(RestartPolicy::OnFailure)
.build()
.expect("valid spec");Source§impl TaskSpec
impl TaskSpec
Sourcepub fn with_runner_selector(self, sel: LabelSelector) -> Self
pub fn with_runner_selector(self, sel: LabelSelector) -> Self
Sets a runner selector on an existing spec.
This method does not validate sel.
Call Self::validate before using the result outside a validated resource.
§Example
use solti_model::{EmbeddedSpec, Labels, LabelSelector, TaskSpec, TaskWorkload};
let mut labels = Labels::new();
labels.insert("zone", "eu");
let workload = TaskWorkload::Embedded(EmbeddedSpec::new("v1").unwrap());
let spec = TaskSpec::builder("build", workload, 1_000u64)
.build()
.unwrap()
.with_runner_selector(LabelSelector::from_labels(labels));
assert!(spec.runner_selector().is_some());Sourcepub fn with_admission(self, admission: AdmissionPolicy) -> Self
pub fn with_admission(self, admission: AdmissionPolicy) -> Self
Sets the admission policy on an existing spec.
§Example
use solti_model::{AdmissionPolicy, EmbeddedSpec, TaskSpec, TaskWorkload};
let workload = TaskWorkload::Embedded(EmbeddedSpec::new("v1").unwrap());
let spec = TaskSpec::builder("agent", workload, 1_000u64)
.build()
.unwrap()
.with_admission(AdmissionPolicy::Replace);
assert_eq!(spec.admission(), AdmissionPolicy::Replace);Source§impl TaskSpec
impl TaskSpec
Sourcepub fn validate(&self) -> ModelResult<()>
pub fn validate(&self) -> ModelResult<()>
Validates the complete spec.
§Errors
Returns ModelError::Invalid when the slot, workload, backoff, or runner selector is invalid.
§Example
use solti_model::{
Flag, SubprocessMode, SubprocessSpec, TaskEnv, TaskSpec, TaskWorkload,
};
let spec = TaskSpec::builder(
"hello",
TaskWorkload::Subprocess(SubprocessSpec::new(
SubprocessMode::Command {
command: "echo".into(),
args: vec!["hello".into()],
},
TaskEnv::default(),
None,
Flag::enabled(),
)),
1_000u64,
)
.build()
.unwrap();
spec.validate().unwrap();Trait Implementations§
Source§impl<'de> Deserialize<'de> for TaskSpec
impl<'de> Deserialize<'de> for TaskSpec
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>,
impl Eq for TaskSpec
Source§impl JsonSchema for TaskSpec
impl JsonSchema for TaskSpec
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