update functionality for the brain #2
26
src/data.rs
26
src/data.rs
@ -1,5 +1,5 @@
|
||||
#![allow(dead_code)]
|
||||
use crate::grpc::brain::{self as grpc, MeasurementArgs};
|
||||
use crate::grpc::brain::{self as grpc};
|
||||
use chrono::Utc;
|
||||
use dashmap::DashMap;
|
||||
use log::{debug, info, warn};
|
||||
@ -87,7 +87,6 @@ pub struct BrainData {
|
||||
daemon_deletevm_tx: DashMap<String, Sender<grpc::DeleteVmReq>>,
|
||||
daemon_newvm_tx: DashMap<String, Sender<grpc::NewVmReq>>,
|
||||
daemon_updatevm_tx: DashMap<String, Sender<grpc::UpdateVmReq>>,
|
||||
daemon_get_measurement_tx: DashMap<String, Sender<MeasurementArgs>>,
|
||||
}
|
||||
ghe0 marked this conversation as resolved
Outdated
|
||||
|
||||
#[derive(Debug)]
|
||||
@ -107,7 +106,6 @@ impl BrainData {
|
||||
daemon_deletevm_tx: DashMap::new(),
|
||||
daemon_newvm_tx: DashMap::new(),
|
||||
daemon_updatevm_tx: DashMap::new(),
|
||||
daemon_get_measurement_tx: DashMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -210,20 +208,28 @@ impl BrainData {
|
||||
}
|
||||
let mut public_ipv4 = String::new();
|
||||
let mut public_ipv6 = String::new();
|
||||
for ip in new_vm_resp.args.clone().unwrap_or(grpc::MeasurementArgs::default()).ips {
|
||||
let args = match new_vm_resp.args {
|
||||
Some(args) => args,
|
||||
None => {
|
||||
ghe0 marked this conversation as resolved
Outdated
ghe0
commented
If the daemon does not provide Measurement Args, the CLI can't execute the attestation. I believe we should not accept Also, this means the contract is broken so we need to discuss the cases. If the daemon does not provide Measurement Args, the CLI can't execute the attestation. I believe we should not accept `grpc::NewVmResp` that does not contain Args. This should be replaced with a NewVmResp that contains an error with the message "SNP Node did not provide measurement args"
Also, this means the contract is broken so we need to discuss the cases.
|
||||
log::error!("NewVmResp does not contain MeasurementArgs for {}", new_vm_resp.uuid);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
for ip in args.ips {
|
||||
if let Ok(ipv4_addr) = std::net::Ipv4Addr::from_str(&ip.address) {
|
||||
if !ipv4_addr.is_private() && !ipv4_addr.is_link_local() {
|
||||
public_ipv4 = ipv4_addr.to_string();
|
||||
}
|
||||
continue;
|
||||
if !ipv4_addr.is_private() && !ipv4_addr.is_link_local() {
|
||||
public_ipv4 = ipv4_addr.to_string();
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if let Ok(ipv6_addr) = std::net::Ipv6Addr::from_str(&ip.address) {
|
||||
public_ipv6 = ipv6_addr.to_string();
|
||||
public_ipv6 = ipv6_addr.to_string();
|
||||
}
|
||||
}
|
||||
let contract = Contract {
|
||||
uuid: new_vm_resp.uuid,
|
||||
exposed_ports: new_vm_resp.args.unwrap_or(grpc::MeasurementArgs::default()).exposed_ports,
|
||||
exposed_ports: args.exposed_ports,
|
||||
public_ipv4,
|
||||
public_ipv6,
|
||||
created_at: Utc::now().to_rfc3339(),
|
||||
|
Loading…
Reference in New Issue
Block a user
The services for MeasurementArgs out in the
brain.proto
. I see here two options:My suggestion is to go for option 1, since that allows this PR to be isolated to the upgrade. I believe we should add measurement args in the future, if we see it is really needed. It will not be hard to add an extra RPC service when we need it. At this point, it is noise.
He went with option one without dropping a comment. 10 points abstracted from Griffindor.