From a9a73769eff8b0af42ea31df2592e903aa81da35 Mon Sep 17 00:00:00 2001 From: Maria Kuklina Date: Thu, 12 Sep 2024 15:38:16 +0200 Subject: [PATCH 1/7] extend peer.identify with vm connection info --- crates/server-config/src/node_config.rs | 2 ++ nox/src/node.rs | 22 ++++++++++------- particle-builtins/src/identify.rs | 32 +++++++++++++++++++++++-- particle-builtins/src/lib.rs | 2 +- 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/crates/server-config/src/node_config.rs b/crates/server-config/src/node_config.rs index 0aa87966ab..dc6ae668ea 100644 --- a/crates/server-config/src/node_config.rs +++ b/crates/server-config/src/node_config.rs @@ -637,8 +637,10 @@ pub struct VmNetworkConfig { pub public_ip: Ipv4Addr, #[serde(default = "default_vm_ip")] pub vm_ip: Ipv4Addr, + // SSH port on the host machine to connect to the VM from outside #[serde(default = "default_host_ssh_port")] pub host_ssh_port: u16, + // SSH port inside the VM #[serde(default = "default_vm_ssh_port")] pub vm_ssh_port: u16, #[serde(default = "default_port_range_config")] diff --git a/nox/src/node.rs b/nox/src/node.rs index a8cae9c15a..a0ff38a81c 100644 --- a/nox/src/node.rs +++ b/nox/src/node.rs @@ -33,7 +33,6 @@ use libp2p::{ use libp2p_connection_limits::ConnectionLimits; use libp2p_metrics::{Metrics, Recorder}; use prometheus_client::registry::Registry; -use std::path::PathBuf; use std::process::exit; use std::sync::Arc; use std::{io, net::SocketAddr}; @@ -54,7 +53,7 @@ use core_distributor::CoreDistributor; use fluence_libp2p::build_transport; use health::HealthCheckRegistry; use particle_builtins::{ - Builtins, BuiltinsConfig, CustomService, NodeInfo, ParticleAppServicesConfig, + Builtins, BuiltinsConfig, CustomService, NodeInfo, ParticleAppServicesConfig, PortInfo, VmInfo, }; use particle_execution::ParticleFunctionStatic; use particle_protocol::ExtendedParticle; @@ -393,20 +392,25 @@ impl Node { ) .await; - let allowed_binaries = config + let allowed_effectors = config .allowed_effectors - .values() - .flat_map(|v| v.values().cloned().collect::>()) - .collect::>() - .into_iter() + .keys() + .map(|key| key.to_string()) .collect::<_>(); let node_info = NodeInfo { external_addresses: config.external_addresses(), node_version: env!("CARGO_PKG_VERSION"), air_version: air_interpreter_wasm::VERSION, spell_version: spell_version.clone(), - // TODO: remove - allowed_binaries, + allowed_effectors, + vm_info: config.node_config.vm.as_ref().map(|vm| VmInfo { + ip: vm.network.public_ip.to_string(), + default_ssh_port: vm.network.host_ssh_port, + forwarded_ports: vec![PortInfo::Range( + vm.network.port_range.start, + vm.network.port_range.end, + )], + }), }; if let Some(m) = metrics_registry.as_mut() { peer_metrics::add_info_metrics( diff --git a/particle-builtins/src/identify.rs b/particle-builtins/src/identify.rs index 669ea2c26c..f1d6f50cbb 100644 --- a/particle-builtins/src/identify.rs +++ b/particle-builtins/src/identify.rs @@ -18,7 +18,6 @@ */ use libp2p::core::Multiaddr; use serde::Serialize; -use std::path::PathBuf; #[derive(Serialize, Clone, Debug)] pub struct NodeInfo { @@ -26,5 +25,34 @@ pub struct NodeInfo { pub node_version: &'static str, pub air_version: &'static str, pub spell_version: String, - pub allowed_binaries: Vec, + pub allowed_effectors: Vec, + pub vm_info: Option, +} + +#[derive(Serialize, Clone, Debug)] +pub struct VmInfo { + // Public IP via which we can connect to the VM + pub ip: String, + // List of ports that are forwarded to the VM + pub forwarded_ports: Vec, + // Default SSH port to which to connect + pub default_ssh_port: u16, +} + +#[derive(Clone, Debug)] +pub enum PortInfo { + Port(u16), + Range(u16, u16), +} + +impl Serialize for PortInfo { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + PortInfo::Port(port) => serializer.serialize_u16(*port), + PortInfo::Range(start, end) => serializer.serialize_str(&format!("{}-{}", start, end)), + } + } } diff --git a/particle-builtins/src/lib.rs b/particle-builtins/src/lib.rs index 16627fefd5..9e76e4d671 100644 --- a/particle-builtins/src/lib.rs +++ b/particle-builtins/src/lib.rs @@ -33,7 +33,7 @@ )] pub use builtins::{Builtins, BuiltinsConfig, CustomService}; -pub use identify::NodeInfo; +pub use identify::{NodeInfo, PortInfo, VmInfo}; pub use outcome::{ok, wrap, wrap_unit}; pub use particle_services::ParticleAppServicesConfig; mod builtins; From a779dbaaecd873941f6dfb0f42f6375840464fe1 Mon Sep 17 00:00:00 2001 From: Maria Kuklina Date: Thu, 12 Sep 2024 16:34:08 +0200 Subject: [PATCH 2/7] fix serialization --- particle-builtins/src/identify.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/particle-builtins/src/identify.rs b/particle-builtins/src/identify.rs index f1d6f50cbb..8b17f2b240 100644 --- a/particle-builtins/src/identify.rs +++ b/particle-builtins/src/identify.rs @@ -26,9 +26,21 @@ pub struct NodeInfo { pub air_version: &'static str, pub spell_version: String, pub allowed_effectors: Vec, + // Note: this is Vec for Aqua's representation of an option + #[serde(serialize_with = "serialize_aqua_option")] pub vm_info: Option, } +fn serialize_aqua_option(value: &Option, serializer: S) -> Result +where + S: serde::Serializer, +{ + match value { + Some(vm_info) => serializer.collect_seq(&[vm_info]), + None => serializer.serialize_none(), + } +} + #[derive(Serialize, Clone, Debug)] pub struct VmInfo { // Public IP via which we can connect to the VM From d4e86b4703924f58daf80a81d40b82a346f10666 Mon Sep 17 00:00:00 2001 From: Maria Kuklina Date: Thu, 12 Sep 2024 16:59:24 +0200 Subject: [PATCH 3/7] temp update ci --- .github/workflows/e2e.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 918a9ae679..64b1b7d710 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -99,3 +99,4 @@ jobs: uses: fluencelabs/aqua/.github/workflows/tests.yml@main with: nox-image: "${{ needs.nox-snapshot.outputs.nox-image }}" + ref: update-peer-identify From ea4f52758b15498f56ad0e7ed56606f00922d463 Mon Sep 17 00:00:00 2001 From: Maria Kuklina Date: Thu, 12 Sep 2024 17:15:38 +0200 Subject: [PATCH 4/7] undo ci --- .github/workflows/e2e.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 64b1b7d710..918a9ae679 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -99,4 +99,3 @@ jobs: uses: fluencelabs/aqua/.github/workflows/tests.yml@main with: nox-image: "${{ needs.nox-snapshot.outputs.nox-image }}" - ref: update-peer-identify From c7d2dac9eeabd3200b7dc9e7dbf7dca12355a41a Mon Sep 17 00:00:00 2001 From: Maria Kuklina Date: Thu, 12 Sep 2024 17:45:06 +0200 Subject: [PATCH 5/7] try to fix aqua ci --- particle-builtins/src/identify.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/particle-builtins/src/identify.rs b/particle-builtins/src/identify.rs index 8b17f2b240..e4e05fcb9b 100644 --- a/particle-builtins/src/identify.rs +++ b/particle-builtins/src/identify.rs @@ -25,7 +25,7 @@ pub struct NodeInfo { pub node_version: &'static str, pub air_version: &'static str, pub spell_version: String, - pub allowed_effectors: Vec, + pub allowed_binaries: Vec, // Note: this is Vec for Aqua's representation of an option #[serde(serialize_with = "serialize_aqua_option")] pub vm_info: Option, From 87c7c2f24e7520ef5da9244725df5d0b1ac07013 Mon Sep 17 00:00:00 2001 From: Maria Kuklina Date: Thu, 12 Sep 2024 17:55:43 +0200 Subject: [PATCH 6/7] test ci --- nox/src/node.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nox/src/node.rs b/nox/src/node.rs index a0ff38a81c..bf6ff6c4e3 100644 --- a/nox/src/node.rs +++ b/nox/src/node.rs @@ -392,7 +392,7 @@ impl Node { ) .await; - let allowed_effectors = config + let allowed_binaries = config .allowed_effectors .keys() .map(|key| key.to_string()) @@ -402,7 +402,7 @@ impl Node { node_version: env!("CARGO_PKG_VERSION"), air_version: air_interpreter_wasm::VERSION, spell_version: spell_version.clone(), - allowed_effectors, + allowed_binaries, vm_info: config.node_config.vm.as_ref().map(|vm| VmInfo { ip: vm.network.public_ip.to_string(), default_ssh_port: vm.network.host_ssh_port, From 19b908595e00b4492598f9115763a67cd9e26405 Mon Sep 17 00:00:00 2001 From: Maria Kuklina Date: Thu, 12 Sep 2024 18:14:41 +0200 Subject: [PATCH 7/7] return allowed_binaries --- nox/src/node.rs | 7 +++++-- particle-builtins/src/identify.rs | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/nox/src/node.rs b/nox/src/node.rs index bf6ff6c4e3..1070389376 100644 --- a/nox/src/node.rs +++ b/nox/src/node.rs @@ -33,6 +33,7 @@ use libp2p::{ use libp2p_connection_limits::ConnectionLimits; use libp2p_metrics::{Metrics, Recorder}; use prometheus_client::registry::Registry; +use std::path::PathBuf; use std::process::exit; use std::sync::Arc; use std::{io, net::SocketAddr}; @@ -394,8 +395,10 @@ impl Node { let allowed_binaries = config .allowed_effectors - .keys() - .map(|key| key.to_string()) + .values() + .flat_map(|v| v.values().cloned().collect::>()) + .collect::>() + .into_iter() .collect::<_>(); let node_info = NodeInfo { external_addresses: config.external_addresses(), diff --git a/particle-builtins/src/identify.rs b/particle-builtins/src/identify.rs index e4e05fcb9b..f15e1bbb9b 100644 --- a/particle-builtins/src/identify.rs +++ b/particle-builtins/src/identify.rs @@ -18,6 +18,7 @@ */ use libp2p::core::Multiaddr; use serde::Serialize; +use std::path::PathBuf; #[derive(Serialize, Clone, Debug)] pub struct NodeInfo { @@ -25,7 +26,7 @@ pub struct NodeInfo { pub node_version: &'static str, pub air_version: &'static str, pub spell_version: String, - pub allowed_binaries: Vec, + pub allowed_binaries: Vec, // Note: this is Vec for Aqua's representation of an option #[serde(serialize_with = "serialize_aqua_option")] pub vm_info: Option,