wip: prepare AWS EC2 Kubernetes provider

This commit is contained in:
Romaric Philogene
2022-04-21 22:05:38 +02:00
committed by Benjamin Chastanier
parent da2e465320
commit 6e7c8b9e60
10 changed files with 1437 additions and 1103 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@ use const_format::formatcp;
use qovery_engine::cloud_provider::aws::kubernetes::{Options, VpcQoveryNetworkMode};
use qovery_engine::cloud_provider::aws::regions::AwsRegion;
use qovery_engine::cloud_provider::aws::AWS;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::models::NodeGroups;
use qovery_engine::cloud_provider::qovery::EngineLocation::ClientSide;
use qovery_engine::cloud_provider::Kind::Aws;
@@ -60,16 +61,19 @@ pub fn aws_default_engine_config(context: &Context, logger: Box<dyn Logger>) ->
&context,
logger,
AWS_TEST_REGION.to_string().as_str(),
KKind::Eks,
AWS_KUBERNETES_VERSION.to_string(),
&ClusterDomain::Default,
None,
)
}
impl Cluster<AWS, Options> for AWS {
fn docker_cr_engine(
context: &Context,
logger: Box<dyn Logger>,
localisation: &str,
kubernetes_kind: KKind,
kubernetes_version: String,
cluster_domain: &ClusterDomain,
vpc_network_mode: Option<VpcQoveryNetworkMode>,
@@ -84,10 +88,11 @@ impl Cluster<AWS, Options> for AWS {
let cloud_provider: Arc<Box<dyn CloudProvider>> = Arc::new(AWS::cloud_provider(context));
let dns_provider: Arc<Box<dyn DnsProvider>> = Arc::new(dns_provider_cloudflare(context, cluster_domain));
let k = get_environment_test_kubernetes(
let kubernetes = get_environment_test_kubernetes(
Aws,
context,
cloud_provider.clone(),
kubernetes_kind,
dns_provider.clone(),
logger.clone(),
localisation,
@@ -101,7 +106,7 @@ impl Cluster<AWS, Options> for AWS {
container_registry,
cloud_provider,
dns_provider,
k,
kubernetes,
)
}

View File

@@ -20,17 +20,18 @@ use crate::utilities::{
FuncTestsSecrets,
};
use base64;
use qovery_engine::cloud_provider::aws::kubernetes::{VpcQoveryNetworkMode, EKS};
use qovery_engine::cloud_provider::aws::kubernetes::{VpcQoveryNetworkMode, EC2, EKS};
use qovery_engine::cloud_provider::aws::regions::{AwsRegion, AwsZones};
use qovery_engine::cloud_provider::aws::AWS;
use qovery_engine::cloud_provider::digitalocean::kubernetes::DOKS;
use qovery_engine::cloud_provider::digitalocean::DO;
use qovery_engine::cloud_provider::environment::Environment;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::kubernetes::Kubernetes;
use qovery_engine::cloud_provider::models::NodeGroups;
use qovery_engine::cloud_provider::scaleway::kubernetes::Kapsule;
use qovery_engine::cloud_provider::scaleway::Scaleway;
use qovery_engine::cloud_provider::{CloudProvider, Edge, Kind};
use qovery_engine::cloud_provider::{CloudProvider, Kind};
use qovery_engine::cmd::kubectl::kubernetes_get_all_hpas;
use qovery_engine::cmd::structs::SVCItem;
use qovery_engine::engine::EngineConfig;
@@ -62,6 +63,7 @@ pub trait Cluster<T, U> {
context: &Context,
logger: Box<dyn Logger>,
localisation: &str,
kubernetes_kind: KKind,
kubernetes_version: String,
cluster_domain: &ClusterDomain,
vpc_network_mode: Option<VpcQoveryNetworkMode>,
@@ -1136,14 +1138,14 @@ pub fn test_db(
Kind::Aws => (AWS_TEST_REGION.to_string(), AWS_KUBERNETES_VERSION.to_string()),
Kind::Do => (DO_TEST_REGION.to_string(), DO_KUBERNETES_VERSION.to_string()),
Kind::Scw => (SCW_TEST_ZONE.to_string(), SCW_KUBERNETES_VERSION.to_string()),
Kind::Edge(Edge::Aws) => (AWS_TEST_REGION.to_string(), AWS_K3S_VERSION.to_string()),
};
let engine_config = match provider_kind {
Kind::Aws | Kind::Edge(Edge::Aws) => AWS::docker_cr_engine(
Kind::Aws => AWS::docker_cr_engine(
&context,
logger.clone(),
localisation.as_str(),
KKind::Eks,
kubernetes_version.clone(),
&ClusterDomain::Default,
None,
@@ -1152,6 +1154,7 @@ pub fn test_db(
&context,
logger.clone(),
localisation.as_str(),
KKind::Doks,
kubernetes_version.clone(),
&ClusterDomain::Default,
None,
@@ -1160,6 +1163,7 @@ pub fn test_db(
&context,
logger.clone(),
localisation.as_str(),
KKind::ScwKapsule,
kubernetes_version.clone(),
&ClusterDomain::Default,
None,
@@ -1224,6 +1228,7 @@ pub fn test_db(
&context_for_delete,
logger.clone(),
localisation.as_str(),
KKind::Eks,
kubernetes_version,
&ClusterDomain::Default,
None,
@@ -1232,6 +1237,7 @@ pub fn test_db(
&context_for_delete,
logger.clone(),
localisation.as_str(),
KKind::Doks,
kubernetes_version,
&ClusterDomain::Default,
None,
@@ -1240,6 +1246,7 @@ pub fn test_db(
&context_for_delete,
logger.clone(),
localisation.as_str(),
KKind::ScwKapsule,
kubernetes_version,
&ClusterDomain::Default,
None,
@@ -1256,6 +1263,7 @@ pub fn get_environment_test_kubernetes<'a>(
provider_kind: Kind,
context: &Context,
cloud_provider: Arc<Box<dyn CloudProvider>>,
kubernetes_kind: KKind,
dns_provider: Arc<Box<dyn DnsProvider>>,
logger: Box<dyn Logger>,
localisation: &str,
@@ -1263,16 +1271,16 @@ pub fn get_environment_test_kubernetes<'a>(
vpc_network_mode: Option<VpcQoveryNetworkMode>,
) -> Box<dyn Kubernetes> {
let secrets = FuncTestsSecrets::new();
let k: Box<dyn Kubernetes>;
match provider_kind {
Kind::Aws => {
let kubernetes: Box<dyn Kubernetes> = match kubernetes_kind {
KKind::Eks => {
let region = AwsRegion::from_str(localisation).expect("AWS region not supported");
let mut options = AWS::kubernetes_cluster_options(secrets, None);
if vpc_network_mode.is_some() {
options.vpc_qovery_network_mode = vpc_network_mode.expect("No vpc network mode");
}
k = Box::new(
Box::new(
EKS::new(
context.clone(),
context.cluster_id(),
@@ -1288,11 +1296,35 @@ pub fn get_environment_test_kubernetes<'a>(
logger,
)
.unwrap(),
);
)
}
Kind::Do => {
KKind::Ec2 => {
let region = AwsRegion::from_str(localisation).expect("AWS region not supported");
let mut options = AWS::kubernetes_cluster_options(secrets, None);
if vpc_network_mode.is_some() {
options.vpc_qovery_network_mode = vpc_network_mode.expect("No vpc network mode");
}
Box::new(
EC2::new(
context.clone(),
context.cluster_id(),
uuid::Uuid::new_v4(),
format!("qovery-{}", context.cluster_id()).as_str(),
kubernetes_version,
region.clone(),
region.get_zones_to_string(),
cloud_provider,
dns_provider,
options,
logger,
)
.unwrap(),
)
}
KKind::Doks => {
let region = DoRegion::from_str(localisation).expect("DO region not supported");
k = Box::new(
Box::new(
DOKS::new(
context.clone(),
context.cluster_id().to_string(),
@@ -1307,11 +1339,11 @@ pub fn get_environment_test_kubernetes<'a>(
logger,
)
.unwrap(),
);
)
}
Kind::Scw => {
KKind::ScwKapsule => {
let zone = ScwZone::from_str(localisation).expect("SCW zone not supported");
k = Box::new(
Box::new(
Kapsule::new(
context.clone(),
context.cluster_id().to_string(),
@@ -1326,11 +1358,11 @@ pub fn get_environment_test_kubernetes<'a>(
logger,
)
.unwrap(),
);
)
}
}
};
return k;
return kubernetes;
}
pub fn get_cluster_test_kubernetes<'a>(
@@ -1419,6 +1451,7 @@ pub fn get_cluster_test_kubernetes<'a>(
pub fn cluster_test(
test_name: &str,
provider_kind: Kind,
kubernetes_kind: KKind,
context: Context,
logger: Box<dyn Logger>,
localisation: &str,
@@ -1441,6 +1474,7 @@ pub fn cluster_test(
&context,
logger.clone(),
localisation,
kubernetes_kind,
boot_version,
cluster_domain,
vpc_network_mode.clone(),
@@ -1449,6 +1483,7 @@ pub fn cluster_test(
&context,
logger.clone(),
localisation,
kubernetes_kind,
boot_version,
cluster_domain,
vpc_network_mode.clone(),
@@ -1457,6 +1492,7 @@ pub fn cluster_test(
&context,
logger.clone(),
localisation,
kubernetes_kind,
boot_version,
cluster_domain,
vpc_network_mode.clone(),
@@ -1547,6 +1583,7 @@ pub fn cluster_test(
&context,
logger.clone(),
localisation,
KKind::Eks,
upgrade_to_version,
cluster_domain,
vpc_network_mode.clone(),
@@ -1555,6 +1592,7 @@ pub fn cluster_test(
&context,
logger.clone(),
localisation,
KKind::Doks,
upgrade_to_version,
cluster_domain,
vpc_network_mode.clone(),
@@ -1563,6 +1601,7 @@ pub fn cluster_test(
&context,
logger.clone(),
localisation,
KKind::ScwKapsule,
upgrade_to_version,
cluster_domain,
vpc_network_mode.clone(),

View File

@@ -3,6 +3,7 @@ use qovery_engine::cloud_provider::aws::kubernetes::VpcQoveryNetworkMode;
use qovery_engine::cloud_provider::digitalocean::kubernetes::DoksOptions;
use qovery_engine::cloud_provider::digitalocean::network::vpc::VpcInitKind;
use qovery_engine::cloud_provider::digitalocean::DO;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::models::NodeGroups;
use qovery_engine::cloud_provider::{CloudProvider, TerraformStateCredentials};
use qovery_engine::container_registry::docr::DOCR;
@@ -13,6 +14,7 @@ use std::sync::Arc;
use crate::cloudflare::dns_provider_cloudflare;
use crate::common::{get_environment_test_kubernetes, Cluster, ClusterDomain};
use crate::utilities::{build_platform_local_docker, FuncTestsSecrets};
use qovery_engine::cloud_provider::kubernetes::Kind;
use qovery_engine::cloud_provider::qovery::EngineLocation;
use qovery_engine::cloud_provider::Kind::Do;
use qovery_engine::dns_provider::DnsProvider;
@@ -48,6 +50,7 @@ pub fn do_default_engine_config(context: &Context, logger: Box<dyn Logger>) -> E
&context,
logger,
DO_TEST_REGION.to_string().as_str(),
KKind::Doks,
DO_KUBERNETES_VERSION.to_string(),
&ClusterDomain::Default,
None,
@@ -59,6 +62,7 @@ impl Cluster<DO, DoksOptions> for DO {
context: &Context,
logger: Box<dyn Logger>,
localisation: &str,
kubernetes_kind: KKind,
kubernetes_version: String,
cluster_domain: &ClusterDomain,
vpc_network_mode: Option<VpcQoveryNetworkMode>,
@@ -76,6 +80,7 @@ impl Cluster<DO, DoksOptions> for DO {
Do,
context,
cloud_provider.clone(),
kubernetes_kind,
dns_provider.clone(),
logger.clone(),
localisation,

View File

@@ -1,28 +1,31 @@
use const_format::formatcp;
use qovery_engine::build_platform::Build;
use qovery_engine::cloud_provider::scaleway::kubernetes::KapsuleOptions;
use qovery_engine::cloud_provider::scaleway::Scaleway;
use qovery_engine::cloud_provider::{CloudProvider, TerraformStateCredentials};
use qovery_engine::container_registry::scaleway_container_registry::ScalewayCR;
use qovery_engine::engine::EngineConfig;
use qovery_engine::io_models::{Context, EnvironmentRequest, NoOpProgressListener};
use qovery_engine::object_storage::scaleway_object_storage::{BucketDeleteStrategy, ScalewayOS};
use std::sync::Arc;
use crate::cloudflare::dns_provider_cloudflare;
use crate::utilities::{build_platform_local_docker, generate_id, FuncTestsSecrets};
use const_format::formatcp;
use tracing::error;
use crate::common::{get_environment_test_kubernetes, Cluster, ClusterDomain};
use qovery_engine::build_platform::Build;
use qovery_engine::cloud_provider::aws::kubernetes::VpcQoveryNetworkMode;
use qovery_engine::cloud_provider::kubernetes::Kind;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::models::NodeGroups;
use qovery_engine::cloud_provider::qovery::EngineLocation;
use qovery_engine::cloud_provider::scaleway::kubernetes::KapsuleOptions;
use qovery_engine::cloud_provider::scaleway::Scaleway;
use qovery_engine::cloud_provider::Kind::Scw;
use qovery_engine::cloud_provider::{CloudProvider, TerraformStateCredentials};
use qovery_engine::container_registry::errors::ContainerRegistryError;
use qovery_engine::container_registry::scaleway_container_registry::ScalewayCR;
use qovery_engine::container_registry::ContainerRegistry;
use qovery_engine::dns_provider::DnsProvider;
use qovery_engine::engine::EngineConfig;
use qovery_engine::io_models::{Context, EnvironmentRequest, NoOpProgressListener};
use qovery_engine::logger::Logger;
use qovery_engine::models::scaleway::ScwZone;
use tracing::error;
use qovery_engine::object_storage::scaleway_object_storage::{BucketDeleteStrategy, ScalewayOS};
use crate::cloudflare::dns_provider_cloudflare;
use crate::common::{get_environment_test_kubernetes, Cluster, ClusterDomain};
use crate::utilities::{build_platform_local_docker, generate_id, FuncTestsSecrets};
pub const SCW_TEST_ZONE: ScwZone = ScwZone::Paris2;
pub const SCW_KUBERNETES_MAJOR_VERSION: u8 = 1;
@@ -69,6 +72,7 @@ pub fn scw_default_engine_config(context: &Context, logger: Box<dyn Logger>) ->
&context,
logger,
SCW_TEST_ZONE.to_string().as_str(),
KKind::ScwKapsule,
SCW_KUBERNETES_VERSION.to_string(),
&ClusterDomain::Default,
None,
@@ -80,6 +84,7 @@ impl Cluster<Scaleway, KapsuleOptions> for Scaleway {
context: &Context,
logger: Box<dyn Logger>,
localisation: &str,
kubernetes_kind: KKind,
kubernetes_version: String,
cluster_domain: &ClusterDomain,
vpc_network_mode: Option<VpcQoveryNetworkMode>,
@@ -98,6 +103,7 @@ impl Cluster<Scaleway, KapsuleOptions> for Scaleway {
Scw,
context,
cloud_provider.clone(),
Kind::ScwKapsule,
dns_provider.clone(),
logger.clone(),
localisation,

View File

@@ -1,14 +1,18 @@
extern crate test_utilities;
use self::test_utilities::aws::{AWS_KUBERNETES_MAJOR_VERSION, AWS_KUBERNETES_MINOR_VERSION};
use self::test_utilities::utilities::{context, engine_run_test, generate_cluster_id, generate_id, logger};
use std::str::FromStr;
use ::function_name::named;
use test_utilities::common::{cluster_test, ClusterDomain, ClusterTestType};
use qovery_engine::cloud_provider::aws::kubernetes::VpcQoveryNetworkMode;
use qovery_engine::cloud_provider::aws::kubernetes::VpcQoveryNetworkMode::{WithNatGateways, WithoutNatGateways};
use qovery_engine::cloud_provider::aws::regions::AwsRegion;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::Kind;
use std::str::FromStr;
use test_utilities::common::{cluster_test, ClusterDomain, ClusterTestType};
use self::test_utilities::aws::{AWS_KUBERNETES_MAJOR_VERSION, AWS_KUBERNETES_MINOR_VERSION};
use self::test_utilities::utilities::{context, engine_run_test, generate_cluster_id, generate_id, logger};
#[cfg(feature = "test-aws-infra")]
fn create_and_destroy_eks_cluster(
@@ -25,6 +29,7 @@ fn create_and_destroy_eks_cluster(
cluster_test(
test_name,
Kind::Aws,
KKind::Eks,
context(
generate_id().as_str(),
generate_cluster_id(region.to_string().as_str()).as_str(),

View File

@@ -1,6 +1,7 @@
use ::function_name::named;
use qovery_engine::cloud_provider::aws::kubernetes::VpcQoveryNetworkMode::WithNatGateways;
use qovery_engine::cloud_provider::aws::regions::AwsRegion;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::Kind;
use std::str::FromStr;
use test_utilities::aws::{AWS_KUBERNETES_MAJOR_VERSION, AWS_KUBERNETES_MINOR_VERSION};
@@ -38,6 +39,7 @@ fn create_upgrade_and_destroy_eks_cluster_with_env_in_eu_west_3() {
cluster_test(
function_name!(),
Kind::Aws,
KKind::Eks,
context.clone(),
logger(),
region,

View File

@@ -3,6 +3,8 @@ extern crate test_utilities;
use self::test_utilities::aws::{AWS_KUBERNETES_MAJOR_VERSION, AWS_KUBERNETES_MINOR_VERSION};
use self::test_utilities::utilities::{context, engine_run_test, generate_cluster_id, generate_id, logger};
use ::function_name::named;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::aws::kubernetes::VpcQoveryNetworkMode;
use qovery_engine::cloud_provider::aws::kubernetes::VpcQoveryNetworkMode::{WithNatGateways, WithoutNatGateways};
use qovery_engine::cloud_provider::aws::regions::AwsRegion;
@@ -27,6 +29,7 @@ fn create_and_destroy_edge_aws_cluster(
cluster_test(
test_name,
Kind::Aws,
KKind::Ec2,
context(
generate_id().as_str(),
generate_cluster_id(region.to_string().as_str()).as_str(),

View File

@@ -4,6 +4,8 @@ use self::test_utilities::scaleway::{SCW_KUBERNETES_MAJOR_VERSION, SCW_KUBERNETE
use self::test_utilities::utilities::{context, engine_run_test, generate_cluster_id, generate_id, logger};
use ::function_name::named;
use qovery_engine::cloud_provider::aws::kubernetes::VpcQoveryNetworkMode;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::Kind;
use qovery_engine::models::scaleway::ScwZone;
use test_utilities::common::{cluster_test, ClusterDomain, ClusterTestType};
@@ -21,6 +23,7 @@ fn create_and_destroy_kapsule_cluster(
cluster_test(
test_name,
Kind::Scw,
KKind::ScwKapsule,
context(generate_id().as_str(), generate_cluster_id(zone.as_str()).as_str()),
logger(),
zone.as_str(),

View File

@@ -1,7 +1,9 @@
use ::function_name::named;
use qovery_engine::cloud_provider::kubernetes::Kind as KKind;
use qovery_engine::cloud_provider::Kind;
use qovery_engine::models::scaleway::ScwZone;
use test_utilities::common::{cluster_test, ClusterDomain, ClusterTestType};
use test_utilities::scaleway::{SCW_KUBERNETES_MAJOR_VERSION, SCW_KUBERNETES_MINOR_VERSION};
use test_utilities::utilities::{context, engine_run_test, generate_cluster_id, generate_id, logger, FuncTestsSecrets};
@@ -32,6 +34,7 @@ fn create_and_destroy_kapsule_cluster_with_env_in_par_2() {
cluster_test(
function_name!(),
Kind::Scw,
KKind::ScwKapsule,
context.clone(),
logger,
zone.as_str(),