diff --git a/crates/apollo_deployments/jsonnet/lib/layouts/consolidated.libsonnet b/crates/apollo_deployments/jsonnet/lib/layouts/consolidated.libsonnet new file mode 100644 index 00000000000..0d5ea699a10 --- /dev/null +++ b/crates/apollo_deployments/jsonnet/lib/layouts/consolidated.libsonnet @@ -0,0 +1,21 @@ +// Consolidated layout structure. +local catalog = import '../infra/catalog.libsonnet'; +{ + reactive:: catalog.reactive, + active:: catalog.active, + // A single-process node serves nothing remotely, so every hosted reactive component is local-only. + localOnly:: catalog.reactive, + + // Unused in this layout (no component is remote-served or consumed), kept for the descriptor + // contract; `derive` only dereferences them for remote / remote-enabled components. + ports:: {}, + serviceDns:: {}, + scale:: {}, + + services:: { + node: { + runs: catalog.reactive + catalog.active, + uses: [], + }, + }, +} diff --git a/crates/apollo_deployments/jsonnet/services/consolidated.jsonnet b/crates/apollo_deployments/jsonnet/services/consolidated.jsonnet new file mode 100644 index 00000000000..1f6742bc654 --- /dev/null +++ b/crates/apollo_deployments/jsonnet/services/consolidated.jsonnet @@ -0,0 +1,8 @@ +// Generates the `components` map for the consolidated layout. +local derive = import '../lib/infra/derive.libsonnet'; +local consolidated = import '../lib/layouts/consolidated.libsonnet'; + +{ + [service]: derive.infraFor(consolidated, service) + for service in std.objectFields(consolidated.services) +} diff --git a/crates/apollo_deployments/src/deployment_definitions_test.rs b/crates/apollo_deployments/src/deployment_definitions_test.rs index 4faf9396a80..647c24a9716 100644 --- a/crates/apollo_deployments/src/deployment_definitions_test.rs +++ b/crates/apollo_deployments/src/deployment_definitions_test.rs @@ -10,6 +10,7 @@ use strum::IntoEnumIterator; use tempfile::NamedTempFile; use crate::deployment_definitions::ComponentConfigInService; +use crate::deployments::consolidated::ConsolidatedNodeServiceName; use crate::deployments::hybrid::HybridNodeServiceName; use crate::jsonnet::assert_infra_matches_rust; use crate::service::NodeType; @@ -27,6 +28,16 @@ fn hybrid_infra_matches_rust() { assert_infra_matches_rust::(); } +/// Verifies the jsonnet consolidated infra config matches the Rust deployment definitions +/// (consolidated.rs). +#[test] +fn consolidated_infra_matches_rust() { + env::set_current_dir(resolve_project_relative_path("").unwrap()) + .expect("Couldn't set working dir."); + + assert_infra_matches_rust::(); +} + /// Test that the deployment file is up to date. #[test] fn deployment_files_are_up_to_date() {