pub struct RunCommandHandler { /* private fields */ }Expand description
RunCommandHandler orchestrates the stack execution workflow
The RunCommandHandler orchestrates the execution of the deployed software
stack on the target environment.
This command handler handles all steps required to run the stack:
- Load the environment from storage
- Validate the environment is in the correct state
- Start services via Ansible playbook
- Transition environment to
Runningstate
§Architecture
Follows the three-level architecture:
- Command (Level 1): This handler orchestrates the run workflow
- Step (Level 2):
StartServicesStep - Remote Action (Level 3): Ansible playbook executes on remote host
§State Management
The command handler integrates with the type-state pattern for environment lifecycle:
- Accepts environment in
Releasedstate - Transitions to
Environment<Running>on success - Transitions to
Environment<RunFailed>on error
State is persisted after each transition using the injected repository.
Implementations§
Source§impl RunCommandHandler
impl RunCommandHandler
Sourcepub fn new(
repository: Arc<dyn EnvironmentRepository>,
clock: Arc<dyn Clock>,
) -> Self
pub fn new( repository: Arc<dyn EnvironmentRepository>, clock: Arc<dyn Clock>, ) -> Self
Create a new RunCommandHandler
Sourcepub fn execute(
&self,
env_name: &EnvironmentName,
) -> Result<Environment<Running>, RunCommandHandlerError>
pub fn execute( &self, env_name: &EnvironmentName, ) -> Result<Environment<Running>, RunCommandHandlerError>
Auto Trait Implementations§
impl !RefUnwindSafe for RunCommandHandler
impl !Send for RunCommandHandler
impl !Sync for RunCommandHandler
impl !UnwindSafe for RunCommandHandler
impl Freeze for RunCommandHandler
impl Unpin for RunCommandHandler
impl UnsafeUnpin for RunCommandHandler
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request