diff --git a/Cargo.lock b/Cargo.lock index 775f634162ba2..7466e5b6b9fbb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5589,6 +5589,7 @@ dependencies = [ "mz-orchestrator-tracing", "mz-ore", "mz-prof-http", + "mz-sql", "mz-tls-util", "prometheus", "rand", diff --git a/src/orchestratord/BUILD.bazel b/src/orchestratord/BUILD.bazel index 6bf76d2a1a130..b081d9ee5379d 100644 --- a/src/orchestratord/BUILD.bazel +++ b/src/orchestratord/BUILD.bazel @@ -41,6 +41,7 @@ rust_library( "//src/orchestrator-tracing:mz_orchestrator_tracing", "//src/ore:mz_ore", "//src/prof-http:mz_prof_http", + "//src/sql:mz_sql", "//src/tls-util:mz_tls_util", ] + all_crate_deps(normal = True), ) @@ -79,6 +80,7 @@ rust_test( "//src/orchestrator-tracing:mz_orchestrator_tracing", "//src/ore:mz_ore", "//src/prof-http:mz_prof_http", + "//src/sql:mz_sql", "//src/tls-util:mz_tls_util", ] + all_crate_deps( normal = True, @@ -99,6 +101,7 @@ rust_doc_test( "//src/orchestrator-tracing:mz_orchestrator_tracing", "//src/ore:mz_ore", "//src/prof-http:mz_prof_http", + "//src/sql:mz_sql", "//src/tls-util:mz_tls_util", ] + all_crate_deps( normal = True, @@ -133,6 +136,7 @@ rust_binary( "//src/orchestrator-tracing:mz_orchestrator_tracing", "//src/ore:mz_ore", "//src/prof-http:mz_prof_http", + "//src/sql:mz_sql", "//src/tls-util:mz_tls_util", ] + all_crate_deps(normal = True), ) diff --git a/src/orchestratord/Cargo.toml b/src/orchestratord/Cargo.toml index 0f26fa23f29cc..bb69e586c8f81 100644 --- a/src/orchestratord/Cargo.toml +++ b/src/orchestratord/Cargo.toml @@ -30,6 +30,7 @@ mz-ore = { path = "../ore" } mz-orchestrator-kubernetes = { path = "../orchestrator-kubernetes" } mz-orchestrator-tracing = { path = "../orchestrator-tracing" } mz-prof-http = { path = "../prof-http" } +mz-sql = { path = "../sql" } mz-tls-util = { path = "../tls-util" } prometheus = { version = "0.13.3", default-features = false } rand = "0.8.5" diff --git a/src/orchestratord/src/controller/materialize.rs b/src/orchestratord/src/controller/materialize.rs index 870a4d7343bcb..a1db4e033d842 100644 --- a/src/orchestratord/src/controller/materialize.rs +++ b/src/orchestratord/src/controller/materialize.rs @@ -23,6 +23,7 @@ use mz_cloud_resources::crd::materialize::v1alpha1::{Materialize, MaterializeSta use mz_orchestrator_kubernetes::KubernetesImagePullPolicy; use mz_orchestrator_tracing::TracingCliArgs; use mz_ore::{cast::CastFrom, cli::KeyValueArg, instrument}; +use mz_sql::catalog::CloudProvider; mod console; mod resources; @@ -127,37 +128,6 @@ pub struct Args { console_http_port: i32, } -#[derive(Debug, Eq, PartialEq, Clone, Copy)] -pub enum CloudProvider { - Aws, - Local, -} - -impl std::str::FromStr for CloudProvider { - type Err = String; - - fn from_str(value: &str) -> Result { - match value.to_lowercase().as_ref() { - "aws" => Ok(Self::Aws), - "local" => Ok(Self::Local), - _ => Err("invalid cloud provider".to_string()), - } - } -} - -impl std::fmt::Display for CloudProvider { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!( - f, - "{}", - match self { - Self::Aws => "aws", - Self::Local => "local", - } - ) - } -} - #[derive(clap::Parser)] pub struct AwsInfo { #[clap(long)] diff --git a/src/orchestratord/src/controller/materialize/resources.rs b/src/orchestratord/src/controller/materialize/resources.rs index ec966bc65ea7d..f7d7db24968c8 100644 --- a/src/orchestratord/src/controller/materialize/resources.rs +++ b/src/orchestratord/src/controller/materialize/resources.rs @@ -38,12 +38,13 @@ use serde::{Deserialize, Serialize}; use sha2::{Digest, Sha256}; use tracing::trace; -use super::{matching_image_from_environmentd_image_ref, CloudProvider}; +use super::matching_image_from_environmentd_image_ref; use crate::k8s::{apply_resource, delete_resource, get_resource}; use mz_cloud_resources::crd::materialize::v1alpha1::Materialize; use mz_environmentd::DeploymentStatus; use mz_orchestrator_tracing::TracingCliArgs; use mz_ore::instrument; +use mz_sql::catalog::CloudProvider; #[derive(Debug, Serialize)] pub struct Resources { diff --git a/src/sql/src/catalog.rs b/src/sql/src/catalog.rs index 39400c9ca1e63..0c7c4eab10ca0 100644 --- a/src/sql/src/catalog.rs +++ b/src/sql/src/catalog.rs @@ -1200,6 +1200,12 @@ pub enum CloudProvider { Cloudtest, /// Amazon Web Services. Aws, + /// Google Cloud Platform + Gcp, + /// Microsoft Azure + Azure, + /// Other generic cloud provider + Generic, } impl fmt::Display for CloudProvider { @@ -1210,6 +1216,9 @@ impl fmt::Display for CloudProvider { CloudProvider::MzCompose => f.write_str("mzcompose"), CloudProvider::Cloudtest => f.write_str("cloudtest"), CloudProvider::Aws => f.write_str("aws"), + CloudProvider::Gcp => f.write_str("gcp"), + CloudProvider::Azure => f.write_str("azure"), + CloudProvider::Generic => f.write_str("generic"), } } } @@ -1218,12 +1227,15 @@ impl FromStr for CloudProvider { type Err = InvalidCloudProviderError; fn from_str(s: &str) -> Result { - match s { + match s.to_lowercase().as_ref() { "local" => Ok(CloudProvider::Local), "docker" => Ok(CloudProvider::Docker), "mzcompose" => Ok(CloudProvider::MzCompose), "cloudtest" => Ok(CloudProvider::Cloudtest), "aws" => Ok(CloudProvider::Aws), + "gcp" => Ok(CloudProvider::Gcp), + "azure" => Ok(CloudProvider::Azure), + "generic" => Ok(CloudProvider::Generic), _ => Err(InvalidCloudProviderError), } } @@ -1784,6 +1796,33 @@ mod tests { ordinal: 0, }), ), + ( + "gcp-us-central1-1497a3b7-a455-4fc4-8752-b44a94b5f90a-0", + Ok(EnvironmentId { + cloud_provider: CloudProvider::Gcp, + cloud_provider_region: "us-central1".into(), + organization_id: "1497a3b7-a455-4fc4-8752-b44a94b5f90a".parse().unwrap(), + ordinal: 0, + }), + ), + ( + "azure-australiaeast-1497a3b7-a455-4fc4-8752-b44a94b5f90a-0", + Ok(EnvironmentId { + cloud_provider: CloudProvider::Azure, + cloud_provider_region: "australiaeast".into(), + organization_id: "1497a3b7-a455-4fc4-8752-b44a94b5f90a".parse().unwrap(), + ordinal: 0, + }), + ), + ( + "generic-moon-station-11-darkside-1497a3b7-a455-4fc4-8752-b44a94b5f90a-0", + Ok(EnvironmentId { + cloud_provider: CloudProvider::Generic, + cloud_provider_region: "moon-station-11-darkside".into(), + organization_id: "1497a3b7-a455-4fc4-8752-b44a94b5f90a".parse().unwrap(), + ordinal: 0, + }), + ), ("", Err(InvalidEnvironmentIdError)), ( "local-az1-1497a3b7-a455-4fc4-8752-b44a94b5f90a-123456789",