mirror of
https://github.com/jlengrand/engine.git
synced 2026-03-10 08:11:21 +00:00
Refactor/avoid log issue on action (#491)
* refactor: reduce mistakes on logs for new providers + refactored AWS * refactor: refactor DO to avoid action log issue * refactor: refactor SCW to avoid action log issue
This commit is contained in:
@@ -25,6 +25,7 @@ futures = "0.3.15"
|
||||
timeout-readwrite = "0.3.1"
|
||||
lazy_static = "1.4.0"
|
||||
uuid = { version = "0.8", features = ["v4"] }
|
||||
function_name = "0.2.0"
|
||||
|
||||
# FIXME use https://crates.io/crates/blocking instead of runtime.rs
|
||||
|
||||
@@ -70,8 +71,6 @@ scaleway_api_rs = "=0.1.2"
|
||||
test-utilities = { path = "test_utilities" }
|
||||
tempdir = "0.3"
|
||||
tempfile = "3.2.0"
|
||||
uuid = { version = "0.8", features = ["v4"] }
|
||||
function_name = "0.2.0"
|
||||
maplit = "1.0.2"
|
||||
|
||||
[features]
|
||||
|
||||
@@ -9,13 +9,14 @@ use crate::cloud_provider::service::{
|
||||
scale_down_application, send_progress_on_long_task, Action, Application as CApplication, Create, Delete, Helm,
|
||||
Pause, Service, ServiceType, StatelessService,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{sanitize_name, validate_k8s_required_cpu_and_burstable};
|
||||
use crate::cloud_provider::utilities::{print_action, sanitize_name, validate_k8s_required_cpu_and_burstable};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl::ScalingKind::{Deployment, Statefulset};
|
||||
use crate::error::EngineErrorCause::Internal;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::{Context, Listen, Listener, Listeners, ListenersHelper};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct Application {
|
||||
context: Context,
|
||||
@@ -72,6 +73,14 @@ impl Application {
|
||||
fn is_stateful(&self) -> bool {
|
||||
!self.storage.is_empty()
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"aws"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"application"
|
||||
}
|
||||
}
|
||||
|
||||
impl crate::cloud_provider::service::Application for Application {
|
||||
@@ -265,9 +274,14 @@ impl Service for Application {
|
||||
}
|
||||
|
||||
impl Create for Application {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.application.on_create() called for {}", self.name());
|
||||
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_user_stateless_service(target, self)
|
||||
})
|
||||
@@ -277,8 +291,14 @@ impl Create for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.application.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateless_service_error(target, self)
|
||||
@@ -287,8 +307,14 @@ impl Create for Application {
|
||||
}
|
||||
|
||||
impl Pause for Application {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.application.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_application(
|
||||
@@ -304,16 +330,28 @@ impl Pause for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.application.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Application {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.application.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateless_service(target, self, false)
|
||||
@@ -324,8 +362,14 @@ impl Delete for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.application.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateless_service(target, self, true)
|
||||
|
||||
@@ -10,7 +10,7 @@ use crate::cloud_provider::service::{
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{
|
||||
generate_supported_version, get_self_hosted_mongodb_version, get_supported_version_to_use,
|
||||
generate_supported_version, get_self_hosted_mongodb_version, get_supported_version_to_use, print_action,
|
||||
};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
@@ -18,6 +18,7 @@ use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorScope, StringError};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct MongoDB {
|
||||
context: Context,
|
||||
@@ -68,6 +69,14 @@ impl MongoDB {
|
||||
fn matching_correct_version(&self, is_managed_services: bool) -> Result<String, EngineError> {
|
||||
check_service_version(get_mongodb_version(self.version(), is_managed_services), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"aws"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"mongodb"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for MongoDB {
|
||||
@@ -245,8 +254,14 @@ impl Terraform for MongoDB {
|
||||
}
|
||||
|
||||
impl Create for MongoDB {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.MongoDB.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -257,15 +272,27 @@ impl Create for MongoDB {
|
||||
self.check_domains(self.listeners.clone(), vec![self.fqdn.as_str()])
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.MongoDB.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for MongoDB {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.MongoDB.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -276,16 +303,28 @@ impl Pause for MongoDB {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.MongoDB.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for MongoDB {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.MongoDB.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -296,8 +335,14 @@ impl Delete for MongoDB {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.MongoDB.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ use crate::cloud_provider::service::{
|
||||
};
|
||||
use crate::cloud_provider::utilities::{
|
||||
generate_supported_version, get_self_hosted_mysql_version, get_supported_version_to_use, managed_db_name_sanitizer,
|
||||
print_action,
|
||||
};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
@@ -18,6 +19,7 @@ use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorCause, EngineErrorScope, StringError};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, DatabaseKind, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct MySQL {
|
||||
context: Context,
|
||||
@@ -68,6 +70,14 @@ impl MySQL {
|
||||
fn matching_correct_version(&self, is_managed_services: bool) -> Result<String, EngineError> {
|
||||
check_service_version(get_mysql_version(self.version(), is_managed_services), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"aws"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"mysql"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for MySQL {
|
||||
@@ -255,8 +265,14 @@ impl Terraform for MySQL {
|
||||
}
|
||||
|
||||
impl Create for MySQL {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.MySQL.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -267,16 +283,28 @@ impl Create for MySQL {
|
||||
self.check_domains(self.listeners.clone(), vec![self.fqdn.as_str()])
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.MySQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for MySQL {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.MySQL.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -287,15 +315,27 @@ impl Pause for MySQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.MySQL.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for MySQL {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.MySQL.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -306,8 +346,14 @@ impl Delete for MySQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.MySQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ use crate::cloud_provider::service::{
|
||||
};
|
||||
use crate::cloud_provider::utilities::{
|
||||
generate_supported_version, get_self_hosted_postgres_version, get_supported_version_to_use,
|
||||
managed_db_name_sanitizer,
|
||||
managed_db_name_sanitizer, print_action,
|
||||
};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
@@ -19,6 +19,7 @@ use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorScope, StringError};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct PostgreSQL {
|
||||
context: Context,
|
||||
@@ -69,6 +70,14 @@ impl PostgreSQL {
|
||||
fn matching_correct_version(&self, is_managed_services: bool) -> Result<String, EngineError> {
|
||||
check_service_version(get_postgres_version(self.version(), is_managed_services), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"aws"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"postgresql"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for PostgreSQL {
|
||||
@@ -243,8 +252,14 @@ impl Terraform for PostgreSQL {
|
||||
}
|
||||
|
||||
impl Create for PostgreSQL {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.PostgreSQL.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -255,16 +270,28 @@ impl Create for PostgreSQL {
|
||||
self.check_domains(self.listeners.clone(), vec![self.fqdn.as_str()])
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.PostgreSQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for PostgreSQL {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.PostgreSQL.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -275,16 +302,28 @@ impl Pause for PostgreSQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.PostgreSQL.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for PostgreSQL {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.PostgreSQL.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -295,8 +334,14 @@ impl Delete for PostgreSQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.PostgreSQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -9,13 +9,14 @@ use crate::cloud_provider::service::{
|
||||
DatabaseOptions, DatabaseType, Delete, Downgrade, Helm, Pause, Service, ServiceType, StatefulService, Terraform,
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_redis_version, get_supported_version_to_use};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_redis_version, get_supported_version_to_use, print_action};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorCause, EngineErrorScope, StringError};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct Redis {
|
||||
context: Context,
|
||||
@@ -66,6 +67,14 @@ impl Redis {
|
||||
fn matching_correct_version(&self, is_managed_services: bool) -> Result<String, EngineError> {
|
||||
check_service_version(get_redis_version(self.version(), is_managed_services), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"aws"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"redis"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for Redis {
|
||||
@@ -256,8 +265,14 @@ impl Terraform for Redis {
|
||||
}
|
||||
|
||||
impl Create for Redis {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.Redis.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -268,15 +283,27 @@ impl Create for Redis {
|
||||
self.check_domains(self.listeners.clone(), vec![self.fqdn.as_str()])
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.Redis.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for Redis {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.Redis.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -287,16 +314,28 @@ impl Pause for Redis {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.Redis.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Redis {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.Redis.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -307,8 +346,14 @@ impl Delete for Redis {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.Redis.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ use crate::cloud_provider::kubernetes::{
|
||||
};
|
||||
use crate::cloud_provider::models::{NodeGroups, NodeGroupsFormat};
|
||||
use crate::cloud_provider::qovery::EngineLocation;
|
||||
use crate::cloud_provider::utilities::print_action;
|
||||
use crate::cloud_provider::{kubernetes, CloudProvider};
|
||||
use crate::cmd;
|
||||
use crate::cmd::kubectl::{
|
||||
@@ -44,6 +45,7 @@ use crate::models::{
|
||||
use crate::object_storage::s3::S3;
|
||||
use crate::object_storage::ObjectStorage;
|
||||
use crate::string::terraform_list_format;
|
||||
use ::function_name::named;
|
||||
|
||||
pub mod helm_charts;
|
||||
pub mod node;
|
||||
@@ -1438,6 +1440,14 @@ impl<'a> EKS<'a> {
|
||||
// FIXME What should we do if something goes wrong while deleting the cluster?
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"aws"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"kubernetes"
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Kubernetes for EKS<'a> {
|
||||
@@ -1485,83 +1495,179 @@ impl<'a> Kubernetes for EKS<'a> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.create())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.create_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_upgrade(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_upgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.upgrade())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_upgrade_error(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_upgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.upgrade_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_downgrade(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_downgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.downgrade())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_downgrade_error(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_downgrade_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.downgrade_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Pause, || self.pause())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Pause, || self.pause_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Delete, || self.delete())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self) -> Result<(), EngineError> {
|
||||
info!("EKS.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Delete, || self.delete_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn deploy_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
info!("EKS.deploy_environment() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::deploy_environment(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn deploy_environment_error(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("EKS.deploy_environment_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::deploy_environment_error(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn pause_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
info!("EKS.pause_environment() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::pause_environment(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn pause_environment_error(&self, _environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("EKS.pause_environment_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn delete_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
info!("EKS.delete_environment() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::delete_environment(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn delete_environment_error(&self, _environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("EKS.delete_environment_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,11 +5,12 @@ use crate::cloud_provider::service::{
|
||||
default_tera_context, delete_router, deploy_stateless_service_error, send_progress_on_long_task, Action, Create,
|
||||
Delete, Helm, Pause, Router as RRouter, Service, ServiceType, StatelessService,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{check_cname_for, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{check_cname_for, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::error::{cast_simple_error_to_engine_error, EngineError, EngineErrorCause, EngineErrorScope};
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct Router {
|
||||
context: Context,
|
||||
@@ -44,6 +45,14 @@ impl Router {
|
||||
listeners,
|
||||
}
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"aws"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"router"
|
||||
}
|
||||
}
|
||||
|
||||
impl Service for Router {
|
||||
@@ -260,8 +269,14 @@ impl Listen for Router {
|
||||
impl StatelessService for Router {}
|
||||
|
||||
impl Create for Router {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.router.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
let kubernetes = target.kubernetes;
|
||||
let environment = target.environment;
|
||||
let workspace_dir = self.workspace_directory();
|
||||
@@ -329,8 +344,14 @@ impl Create for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.router.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateless_service_error(target, self)
|
||||
@@ -339,6 +360,7 @@ impl Create for Router {
|
||||
}
|
||||
|
||||
impl Pause for Router {
|
||||
#[named]
|
||||
fn on_pause(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.router.on_pause() called for {}, doing nothing", self.name());
|
||||
Ok(())
|
||||
@@ -348,15 +370,27 @@ impl Pause for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.router.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Router {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("AWS.router.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
delete_router(target, self, false)
|
||||
}
|
||||
|
||||
@@ -364,8 +398,14 @@ impl Delete for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("AWS.router.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
delete_router(target, self, true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,13 +9,14 @@ use crate::cloud_provider::service::{
|
||||
scale_down_application, send_progress_on_long_task, Action, Create, Delete, Helm, Pause, Service, ServiceType,
|
||||
StatelessService,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{sanitize_name, validate_k8s_required_cpu_and_burstable};
|
||||
use crate::cloud_provider::utilities::{print_action, sanitize_name, validate_k8s_required_cpu_and_burstable};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl::ScalingKind::{Deployment, Statefulset};
|
||||
use crate::error::EngineErrorCause::Internal;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::{Context, Listen, Listener, Listeners, ListenersHelper};
|
||||
use ::function_name::named;
|
||||
use std::fmt;
|
||||
use std::str::FromStr;
|
||||
|
||||
@@ -74,6 +75,14 @@ impl Application {
|
||||
fn is_stateful(&self) -> bool {
|
||||
self.storage.len() > 0
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"digitalocean"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"application"
|
||||
}
|
||||
}
|
||||
|
||||
impl crate::cloud_provider::service::Application for Application {
|
||||
@@ -266,31 +275,14 @@ impl Service for Application {
|
||||
}
|
||||
|
||||
impl Create for Application {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.application.on_create() called for {}", self.name);
|
||||
|
||||
// todo(pmavro): I don't get wy this is done here and not in hte
|
||||
// let (kubernetes, _) = match target {
|
||||
// DeploymentTarget::ManagedServices(k, env) => (*k, *env),
|
||||
// DeploymentTarget::SelfHosted(k, env) => (*k, *env),
|
||||
// };
|
||||
|
||||
// FIXME: remove downcast
|
||||
//let digitalocean = kubernetes.cloud_provider().as_any().downcast_ref::<DO>().unwrap();
|
||||
|
||||
// // retrieve the cluster uuid, useful to link DO registry to k8s cluster
|
||||
// let cluster_uuid_res = get_uuid_of_cluster_from_name(digitalocean.token.as_str(), kubernetes.name());
|
||||
//
|
||||
// match cluster_uuid_res {
|
||||
// // ensure DO registry is linked to k8s cluster
|
||||
// Ok(uuid) => {
|
||||
// match subscribe_kube_cluster_to_container_registry(digitalocean.token.as_str(), uuid.as_str()) {
|
||||
// Ok(_) => info!("Container registry is well linked with the Cluster"),
|
||||
// Err(e) => error!("Unable to link cluster to registry {:?}", e.message),
|
||||
// }
|
||||
// }
|
||||
// Err(e) => error!("Unable to get cluster uuid {:?}", e.message),
|
||||
// };
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_user_stateless_service(target, self)
|
||||
@@ -301,8 +293,14 @@ impl Create for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.application.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateless_service_error(target, self)
|
||||
@@ -311,8 +309,14 @@ impl Create for Application {
|
||||
}
|
||||
|
||||
impl Pause for Application {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.application.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_application(
|
||||
@@ -328,16 +332,28 @@ impl Pause for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.application.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Application {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.application.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateless_service(target, self, false)
|
||||
@@ -348,8 +364,14 @@ impl Delete for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.application.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateless_service(target, self, true)
|
||||
|
||||
@@ -6,13 +6,14 @@ use crate::cloud_provider::service::{
|
||||
DatabaseOptions, DatabaseType, Delete, Downgrade, Helm, Pause, Service, ServiceType, StatefulService, Terraform,
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_mongodb_version, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_mongodb_version, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct MongoDB {
|
||||
context: Context,
|
||||
@@ -63,6 +64,14 @@ impl MongoDB {
|
||||
fn matching_correct_version(&self) -> Result<String, EngineError> {
|
||||
check_service_version(get_self_hosted_mongodb_version(self.version().clone()), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"digitalocean"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"mongodb"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for MongoDB {
|
||||
@@ -229,8 +238,14 @@ impl Terraform for MongoDB {
|
||||
}
|
||||
|
||||
impl Create for MongoDB {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.MongoDB.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -241,15 +256,28 @@ impl Create for MongoDB {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.MongoDB.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for MongoDB {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.MongoDB.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -260,16 +288,28 @@ impl Pause for MongoDB {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.MongoDB.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for MongoDB {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.MongoDB.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -280,8 +320,15 @@ impl Delete for MongoDB {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.MongoDB.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,14 @@ use crate::cloud_provider::service::{
|
||||
DatabaseOptions, DatabaseType, Delete, Downgrade, Helm, Pause, Service, ServiceType, StatefulService, Terraform,
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_mysql_version, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_mysql_version, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct MySQL {
|
||||
context: Context,
|
||||
@@ -63,6 +64,14 @@ impl MySQL {
|
||||
fn matching_correct_version(&self) -> Result<String, EngineError> {
|
||||
check_service_version(get_self_hosted_mysql_version(self.version()), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"digitalocean"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"mysql"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for MySQL {
|
||||
@@ -229,8 +238,14 @@ impl Terraform for MySQL {
|
||||
}
|
||||
|
||||
impl Create for MySQL {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DIGITALOCEAN.MySQL.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(
|
||||
self,
|
||||
@@ -244,16 +259,28 @@ impl Create for MySQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DIGITALOCEAN.MySQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for MySQL {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DIGITALOCEAN.MySQL.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -264,16 +291,28 @@ impl Pause for MySQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.MySQL.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for MySQL {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DIGITALOCEAN.MySQL.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(
|
||||
self,
|
||||
@@ -286,8 +325,14 @@ impl Delete for MySQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DIGITALOCEAN.MySQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,14 @@ use crate::cloud_provider::service::{
|
||||
DatabaseOptions, DatabaseType, Delete, Downgrade, Helm, Pause, Service, ServiceType, StatefulService, Terraform,
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_postgres_version, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_postgres_version, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct PostgreSQL {
|
||||
context: Context,
|
||||
@@ -63,6 +64,14 @@ impl PostgreSQL {
|
||||
fn matching_correct_version(&self) -> Result<String, EngineError> {
|
||||
check_service_version(get_self_hosted_postgres_version(self.version()), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"digitalocean"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"postgresql"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for PostgreSQL {
|
||||
@@ -231,8 +240,14 @@ impl Terraform for PostgreSQL {
|
||||
}
|
||||
|
||||
impl Create for PostgreSQL {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.PostgreSQL.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(
|
||||
self,
|
||||
@@ -245,16 +260,28 @@ impl Create for PostgreSQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.PostgreSQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for PostgreSQL {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.PostgreSQL.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -265,16 +292,28 @@ impl Pause for PostgreSQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.PostgreSQL.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for PostgreSQL {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.PostgreSQL.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(
|
||||
self,
|
||||
@@ -287,8 +326,14 @@ impl Delete for PostgreSQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DIGITALOCEAN.PostgreSQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -6,13 +6,14 @@ use crate::cloud_provider::service::{
|
||||
DatabaseOptions, DatabaseType, Delete, Downgrade, Helm, Pause, Service, ServiceType, StatefulService, Terraform,
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_redis_version, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_redis_version, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct Redis {
|
||||
context: Context,
|
||||
@@ -63,6 +64,14 @@ impl Redis {
|
||||
fn matching_correct_version(&self) -> Result<String, EngineError> {
|
||||
check_service_version(get_self_hosted_redis_version(self.version()), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"digitalocean"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"redis"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for Redis {
|
||||
@@ -228,8 +237,14 @@ impl Terraform for Redis {
|
||||
}
|
||||
|
||||
impl Create for Redis {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.Redis.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(
|
||||
self,
|
||||
@@ -243,15 +258,27 @@ impl Create for Redis {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.Redis.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for Redis {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.Redis.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -262,15 +289,27 @@ impl Pause for Redis {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.Redis.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Redis {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.Redis.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(
|
||||
self,
|
||||
@@ -283,8 +322,14 @@ impl Delete for Redis {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.Redis.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ use crate::cloud_provider::helm::{deploy_charts_levels, ChartInfo, ChartSetValue
|
||||
use crate::cloud_provider::kubernetes::{send_progress_on_long_task, uninstall_cert_manager, Kind, Kubernetes};
|
||||
use crate::cloud_provider::models::NodeGroups;
|
||||
use crate::cloud_provider::qovery::EngineLocation;
|
||||
use crate::cloud_provider::utilities::print_action;
|
||||
use crate::cloud_provider::{kubernetes, CloudProvider};
|
||||
use crate::cmd::helm::{helm_exec_upgrade_with_chart_info, helm_upgrade_diff_with_chart_info};
|
||||
use crate::cmd::kubectl::{
|
||||
@@ -40,6 +41,7 @@ use crate::object_storage::spaces::Spaces;
|
||||
use crate::object_storage::ObjectStorage;
|
||||
use crate::string::terraform_list_format;
|
||||
use crate::{cmd, dns_provider};
|
||||
use ::function_name::named;
|
||||
use retry::delay::Fibonacci;
|
||||
use retry::Error::Operation;
|
||||
use retry::OperationResult;
|
||||
@@ -1082,6 +1084,14 @@ impl<'a> DOKS<'a> {
|
||||
fn delete_error(&self) -> Result<(), EngineError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"digitalocean"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"kubernetes"
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Kubernetes for DOKS<'a> {
|
||||
@@ -1129,83 +1139,179 @@ impl<'a> Kubernetes for DOKS<'a> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.create())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.create_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_upgrade(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_upgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.upgrade())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_upgrade_error(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_upgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.upgrade_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_downgrade(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_downgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.downgrade())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_downgrade_error(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_downgrade_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.downgrade_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Pause, || self.pause())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Pause, || self.pause_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Delete, || self.delete())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self) -> Result<(), EngineError> {
|
||||
info!("DOKS.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Delete, || self.delete_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn deploy_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
info!("DOKS.deploy_environment() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::deploy_environment(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn deploy_environment_error(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("DOKS.deploy_environment_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::deploy_environment_error(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn pause_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
info!("DOKS.pause_environment() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::pause_environment(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn pause_environment_error(&self, _environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("DOKS.pause_environment_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn delete_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
info!("DOKS.delete_environment() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::delete_environment(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn delete_environment_error(&self, _environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("DOKS.delete_environment_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,11 +5,12 @@ use crate::cloud_provider::service::{
|
||||
default_tera_context, delete_router, deploy_stateless_service_error, send_progress_on_long_task, Action, Create,
|
||||
Delete, Helm, Pause, Service, ServiceType, StatelessService,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{check_cname_for, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{check_cname_for, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::error::{cast_simple_error_to_engine_error, EngineError, EngineErrorCause, EngineErrorScope};
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct Router {
|
||||
context: Context,
|
||||
@@ -44,6 +45,14 @@ impl Router {
|
||||
listeners,
|
||||
}
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"digitalocean"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"router"
|
||||
}
|
||||
}
|
||||
|
||||
impl Service for Router {
|
||||
@@ -278,8 +287,14 @@ impl Listen for Router {
|
||||
impl StatelessService for Router {}
|
||||
|
||||
impl Create for Router {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DigitalOcean.router.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
let kubernetes = target.kubernetes;
|
||||
let environment = target.environment;
|
||||
|
||||
@@ -350,8 +365,14 @@ impl Create for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.router.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateless_service_error(target, self)
|
||||
@@ -360,8 +381,14 @@ impl Create for Router {
|
||||
}
|
||||
|
||||
impl Pause for Router {
|
||||
#[named]
|
||||
fn on_pause(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.router.on_pause() called for {}, doing nothing", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -369,15 +396,27 @@ impl Pause for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.router.on_pause_error() called for {}, doing nothing", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Router {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("DO.router.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
delete_router(target, self, false)
|
||||
}
|
||||
|
||||
@@ -385,8 +424,14 @@ impl Delete for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("DO.router.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
delete_router(target, self, true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,13 +12,14 @@ use crate::cloud_provider::service::{
|
||||
scale_down_application, send_progress_on_long_task, Action, Application as CApplication, Create, Delete, Helm,
|
||||
Pause, Service, ServiceType, StatelessService,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{sanitize_name, validate_k8s_required_cpu_and_burstable};
|
||||
use crate::cloud_provider::utilities::{print_action, sanitize_name, validate_k8s_required_cpu_and_burstable};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl::ScalingKind::{Deployment, Statefulset};
|
||||
use crate::error::EngineErrorCause::Internal;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::{Context, Listen, Listener, Listeners, ListenersHelper};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct Application {
|
||||
context: Context,
|
||||
@@ -75,6 +76,14 @@ impl Application {
|
||||
fn is_stateful(&self) -> bool {
|
||||
!self.storage.is_empty()
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"scaleway"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"application"
|
||||
}
|
||||
}
|
||||
|
||||
impl crate::cloud_provider::service::Application for Application {
|
||||
@@ -284,8 +293,14 @@ impl Service for Application {
|
||||
}
|
||||
|
||||
impl Create for Application {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.application.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_user_stateless_service(target, self)
|
||||
@@ -296,8 +311,14 @@ impl Create for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.application.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateless_service_error(target, self)
|
||||
@@ -306,8 +327,14 @@ impl Create for Application {
|
||||
}
|
||||
|
||||
impl Pause for Application {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.application.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_application(
|
||||
@@ -323,16 +350,28 @@ impl Pause for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.application.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Application {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.application.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateless_service(target, self, false)
|
||||
@@ -343,8 +382,14 @@ impl Delete for Application {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.application.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateless_service(target, self, true)
|
||||
|
||||
@@ -6,13 +6,14 @@ use crate::cloud_provider::service::{
|
||||
DatabaseOptions, DatabaseType, Delete, Downgrade, Helm, Pause, Service, ServiceType, StatefulService, Terraform,
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_mongodb_version, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_mongodb_version, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct MongoDB {
|
||||
context: Context,
|
||||
@@ -63,6 +64,14 @@ impl MongoDB {
|
||||
fn matching_correct_version(&self) -> Result<String, EngineError> {
|
||||
check_service_version(get_self_hosted_mongodb_version(self.version()), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"scaleway"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"mongodb"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for MongoDB {
|
||||
@@ -230,8 +239,14 @@ impl Terraform for MongoDB {
|
||||
}
|
||||
|
||||
impl Create for MongoDB {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.MongoDB.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -242,15 +257,27 @@ impl Create for MongoDB {
|
||||
self.check_domains(self.listeners.clone(), vec![self.fqdn.as_str()])
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.MongoDB.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for MongoDB {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.MongoDB.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -261,16 +288,28 @@ impl Pause for MongoDB {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.MongoDB.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for MongoDB {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.MongoDB.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -281,8 +320,14 @@ impl Delete for MongoDB {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.MongoDB.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ use crate::cloud_provider::service::{
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{
|
||||
get_self_hosted_mysql_version, get_supported_version_to_use, sanitize_name, VersionsNumber,
|
||||
get_self_hosted_mysql_version, get_supported_version_to_use, print_action, sanitize_name, VersionsNumber,
|
||||
};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
@@ -15,6 +15,7 @@ use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorCause, EngineErrorScope, StringError};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
|
||||
@@ -94,6 +95,14 @@ impl MySQL {
|
||||
|
||||
get_supported_version_to_use("RDB MySQL", supported_mysql_versions, requested_version)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"scaleway"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"mysql"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for MySQL {
|
||||
@@ -267,8 +276,14 @@ impl Terraform for MySQL {
|
||||
}
|
||||
|
||||
impl Create for MySQL {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.MySQL.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -279,16 +294,28 @@ impl Create for MySQL {
|
||||
self.check_domains(self.listeners.clone(), vec![self.fqdn.as_str()])
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.MySQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for MySQL {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.MySQL.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -299,16 +326,28 @@ impl Pause for MySQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.MySQL.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for MySQL {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.MySQL.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -319,8 +358,14 @@ impl Delete for MySQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.MySQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ use crate::cloud_provider::service::{
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{
|
||||
get_self_hosted_postgres_version, get_supported_version_to_use, sanitize_name, VersionsNumber,
|
||||
get_self_hosted_postgres_version, get_supported_version_to_use, print_action, sanitize_name, VersionsNumber,
|
||||
};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
@@ -15,6 +15,7 @@ use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorCause, EngineErrorScope, StringError};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
|
||||
@@ -103,6 +104,14 @@ impl PostgreSQL {
|
||||
|
||||
get_supported_version_to_use("RDB postgres", supported_postgres_versions, requested_version)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"scaleway"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"postgresql"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for PostgreSQL {
|
||||
@@ -276,8 +285,14 @@ impl Terraform for PostgreSQL {
|
||||
}
|
||||
|
||||
impl Create for PostgreSQL {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.PostgreSQL.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -288,16 +303,28 @@ impl Create for PostgreSQL {
|
||||
self.check_domains(self.listeners.clone(), vec![self.fqdn.as_str()])
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.PostgreSQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for PostgreSQL {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.PostgreSQL.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -308,16 +335,28 @@ impl Pause for PostgreSQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.PostgreSQL.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for PostgreSQL {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.PostgreSQL.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -328,8 +367,14 @@ impl Delete for PostgreSQL {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.MySQL.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,14 @@ use crate::cloud_provider::service::{
|
||||
DatabaseOptions, DatabaseType, Delete, Downgrade, Helm, Pause, Service, ServiceType, StatefulService, Terraform,
|
||||
Upgrade,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_redis_version, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{get_self_hosted_redis_version, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::cmd::kubectl;
|
||||
use crate::error::{EngineError, EngineErrorScope};
|
||||
use crate::models::DatabaseMode::MANAGED;
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct Redis {
|
||||
context: Context,
|
||||
@@ -63,6 +64,14 @@ impl Redis {
|
||||
fn matching_correct_version(&self) -> Result<String, EngineError> {
|
||||
check_service_version(get_self_hosted_redis_version(self.version()), self)
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"scaleway"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"redis"
|
||||
}
|
||||
}
|
||||
|
||||
impl StatefulService for Redis {
|
||||
@@ -229,8 +238,14 @@ impl Terraform for Redis {
|
||||
}
|
||||
|
||||
impl Create for Redis {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.Redis.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateful_service(target, self)
|
||||
@@ -241,15 +256,27 @@ impl Create for Redis {
|
||||
self.check_domains(self.listeners.clone(), vec![self.fqdn.as_str()])
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.Redis.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Pause for Redis {
|
||||
#[named]
|
||||
fn on_pause(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.Redis.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Pause, || {
|
||||
scale_down_database(target, self, 0)
|
||||
@@ -260,15 +287,27 @@ impl Pause for Redis {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.Redis.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Redis {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.Redis.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Delete, || {
|
||||
delete_stateful_service(target, self)
|
||||
@@ -279,8 +318,14 @@ impl Delete for Redis {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.Redis.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ use crate::cloud_provider::scaleway::application::Zone;
|
||||
use crate::cloud_provider::scaleway::kubernetes::helm_charts::{scw_helm_charts, ChartsConfigPrerequisites};
|
||||
use crate::cloud_provider::scaleway::kubernetes::node::ScwInstancesType;
|
||||
use crate::cloud_provider::scaleway::Scaleway;
|
||||
use crate::cloud_provider::utilities::print_action;
|
||||
use crate::cloud_provider::{kubernetes, CloudProvider};
|
||||
use crate::cmd::kubectl::{kubectl_exec_get_all_namespaces, kubectl_exec_get_events};
|
||||
use crate::cmd::structs::HelmChart;
|
||||
@@ -29,6 +30,7 @@ use crate::object_storage::scaleway_object_storage::{BucketDeleteStrategy, Scale
|
||||
use crate::object_storage::ObjectStorage;
|
||||
use crate::string::terraform_list_format;
|
||||
use crate::{cmd, dns_provider};
|
||||
use ::function_name::named;
|
||||
use retry::delay::Fibonacci;
|
||||
use retry::Error::Operation;
|
||||
use retry::OperationResult;
|
||||
@@ -921,6 +923,14 @@ impl<'a> Kapsule<'a> {
|
||||
// FIXME What should we do if something goes wrong while deleting the cluster?
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"scaleway"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"kubernetes"
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Kubernetes for Kapsule<'a> {
|
||||
@@ -968,83 +978,179 @@ impl<'a> Kubernetes for Kapsule<'a> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.create())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.create_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_upgrade(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_upgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.upgrade())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_upgrade_error(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_upgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.upgrade_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_downgrade(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_downgrade() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.downgrade())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_downgrade_error(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_downgrade_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Create, || self.downgrade_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Pause, || self.pause())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Pause, || self.pause_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Delete, || self.delete())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self) -> Result<(), EngineError> {
|
||||
info!("SCW.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
send_progress_on_long_task(self, Action::Delete, || self.delete_error())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn deploy_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
info!("SCW.deploy_environment() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::deploy_environment(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn deploy_environment_error(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("SCW.deploy_environment_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::deploy_environment_error(self, environment)
|
||||
}
|
||||
|
||||
fn pause_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("SCW.pause_environment() called for {}", self.name());
|
||||
kubernetes::pause_environment(self, environment)
|
||||
}
|
||||
|
||||
fn pause_environment_error(&self, _environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("SCW.pause_environment_error() called for {}", self.name());
|
||||
#[named]
|
||||
fn pause_environment(&self, _environment: &Environment) -> Result<(), EngineError> {
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn pause_environment_error(&self, _environment: &Environment) -> Result<(), EngineError> {
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn delete_environment(&self, environment: &Environment) -> Result<(), EngineError> {
|
||||
info!("SCW.delete_environment() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
kubernetes::delete_environment(self, environment)
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn delete_environment_error(&self, _environment: &Environment) -> Result<(), EngineError> {
|
||||
warn!("SCW.delete_environment_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,11 +5,12 @@ use crate::cloud_provider::service::{
|
||||
default_tera_context, delete_router, deploy_stateless_service_error, send_progress_on_long_task, Action, Create,
|
||||
Delete, Helm, Pause, Router as RRouter, Service, ServiceType, StatelessService,
|
||||
};
|
||||
use crate::cloud_provider::utilities::{check_cname_for, sanitize_name};
|
||||
use crate::cloud_provider::utilities::{check_cname_for, print_action, sanitize_name};
|
||||
use crate::cloud_provider::DeploymentTarget;
|
||||
use crate::cmd::helm::Timeout;
|
||||
use crate::error::{cast_simple_error_to_engine_error, EngineError, EngineErrorCause, EngineErrorScope};
|
||||
use crate::models::{Context, Listen, Listener, Listeners};
|
||||
use ::function_name::named;
|
||||
|
||||
pub struct Router {
|
||||
context: Context,
|
||||
@@ -44,6 +45,14 @@ impl Router {
|
||||
listeners,
|
||||
}
|
||||
}
|
||||
|
||||
fn cloud_provider_name(&self) -> &str {
|
||||
"scaleway"
|
||||
}
|
||||
|
||||
fn struct_name(&self) -> &str {
|
||||
"router"
|
||||
}
|
||||
}
|
||||
|
||||
impl Service for Router {
|
||||
@@ -224,8 +233,14 @@ impl Listen for Router {
|
||||
impl StatelessService for Router {}
|
||||
|
||||
impl Create for Router {
|
||||
#[named]
|
||||
fn on_create(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.router.on_create() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
let kubernetes = target.kubernetes;
|
||||
let environment = target.environment;
|
||||
|
||||
@@ -294,8 +309,14 @@ impl Create for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_create_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.router.on_create_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
|
||||
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
|
||||
deploy_stateless_service_error(target, self)
|
||||
@@ -304,8 +325,14 @@ impl Create for Router {
|
||||
}
|
||||
|
||||
impl Pause for Router {
|
||||
#[named]
|
||||
fn on_pause(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.router.on_pause() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -313,15 +340,27 @@ impl Pause for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_pause_error(&self, _target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.router.on_pause_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Delete for Router {
|
||||
#[named]
|
||||
fn on_delete(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
info!("SCW.router.on_delete() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
delete_router(target, self, false)
|
||||
}
|
||||
|
||||
@@ -329,8 +368,14 @@ impl Delete for Router {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[named]
|
||||
fn on_delete_error(&self, target: &DeploymentTarget) -> Result<(), EngineError> {
|
||||
warn!("SCW.router.on_delete_error() called for {}", self.name());
|
||||
print_action(
|
||||
self.cloud_provider_name(),
|
||||
self.struct_name(),
|
||||
function_name!(),
|
||||
self.name(),
|
||||
);
|
||||
delete_router(target, self, true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -559,6 +559,17 @@ pub fn validate_k8s_required_cpu_and_burstable(
|
||||
})
|
||||
}
|
||||
|
||||
pub fn print_action(cloud_provider_name: &str, struct_name: &str, fn_name: &str, item_name: &str) {
|
||||
let msg = format!(
|
||||
"{}.{}.{} called for {}",
|
||||
cloud_provider_name, struct_name, fn_name, item_name
|
||||
);
|
||||
match fn_name.contains("error") {
|
||||
true => warn!("{}", msg),
|
||||
false => info!("{}", msg),
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::cloud_provider::models::CpuLimits;
|
||||
|
||||
39
test_utilities/Cargo.lock
generated
39
test_utilities/Cargo.lock
generated
@@ -724,6 +724,26 @@ version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
|
||||
|
||||
[[package]]
|
||||
name = "function_name"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "88b2afa9b514dc3a75af6cf24d1914e1c7eb6f1b86de849147563548d5c0a0cd"
|
||||
dependencies = [
|
||||
"function_name-proc-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "function_name-proc-macro"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6790a8d356d2f65d7972181e866b92a50a87c27d6a48cbe9dbb8be13ca784c7d"
|
||||
dependencies = [
|
||||
"proc-macro-crate",
|
||||
"quote 0.6.13",
|
||||
"syn 0.15.44",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures"
|
||||
version = "0.1.30"
|
||||
@@ -1981,6 +2001,15 @@ version = "0.2.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-crate"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
|
||||
dependencies = [
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
@@ -2058,6 +2087,7 @@ dependencies = [
|
||||
"digitalocean",
|
||||
"dirs",
|
||||
"flate2",
|
||||
"function_name",
|
||||
"futures 0.3.15",
|
||||
"gethostname",
|
||||
"git2",
|
||||
@@ -3563,6 +3593,15 @@ dependencies = [
|
||||
"tokio 1.10.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tower-service"
|
||||
version = "0.3.0"
|
||||
|
||||
Reference in New Issue
Block a user