use std::sync::Arc;
use thiserror::Error;
use tracing::info;
use crate::application::command_handlers::configure::ConfigureCommandHandlerError;
use crate::application::command_handlers::ConfigureCommandHandler;
use crate::testing::e2e::context::TestContext;
pub fn run_configure_command(test_context: &mut TestContext) -> Result<(), ConfigureTaskError> {
info!("Configuring test infrastructure");
let env_name = test_context.environment.name();
let repository = test_context.create_repository();
let configure_command_handler =
ConfigureCommandHandler::new(Arc::clone(&test_context.services.clock), repository);
let configured_env = configure_command_handler
.execute(env_name, None)
.map_err(|source| ConfigureTaskError::ConfigurationFailed { source })?;
info!(
status = "complete",
environment = %configured_env.name(),
"Infrastructure configuration completed successfully"
);
test_context.update_from_configured(configured_env);
Ok(())
}
#[derive(Debug, Error)]
pub enum ConfigureTaskError {
#[error(
"Failed to configure infrastructure: {source}
Tip: Check Ansible logs for detailed playbook execution errors"
)]
ConfigurationFailed {
#[source]
source: ConfigureCommandHandlerError,
},
}
impl ConfigureTaskError {
#[must_use]
pub fn help(&self) -> &'static str {
match self {
Self::ConfigurationFailed { .. } => {
"Configuration Failed - Detailed Troubleshooting:
1. Check Ansible execution logs:
- Review Ansible output for specific task failures
- Look for permission or connectivity errors
2. Verify instance prerequisites:
- Ensure SSH connectivity is working
- Check that the instance OS is supported
- Verify Python is installed (required by Ansible)
3. Check Ansible inventory and playbooks:
- Verify inventory file has correct instance IP
- Ensure playbook files exist in the build directory
- Check variable substitutions in rendered templates
4. Common issues:
- SSH key permissions (should be 600)
- Firewall blocking Ansible connections
- Instance not fully initialized (cloud-init still running)
- Package repository connectivity issues
For more information, see docs/e2e-testing/."
}
}
}
}