blob: c08c767073c1f14f647decd0ab18fd82a4472394 [file] [log] [blame]
syntax = "proto3";
package cloud.bmaas.server.api;
option go_package = "source.monogon.dev/cloud/bmaas/server/api";
// AgentCallback runs on the BMDB Server and exposes a gRPC interface to agents
// running on machines. These APIs are served over TLS using component-style
// server certificates, but clients are authenticated using ephemeral
// certificates proving ownership of an agent keypair.
service AgentCallback {
// Heartbeat is called by agents repeatedly to upload a hardware report, signal
// liveness and retrieve actions to be prformed on a host.
//
// This isn't a streaming RPC as the current server implementation actually
// isn't reactive, so it would have to do its own inner polling to create
// a stream of updates. To keep things simple, we instead let the agent decide
// on the cadence of updates it wants to keep up with.
rpc Heartbeat(AgentHeartbeatRequest) returns (AgentHeartbeatResponse);
}
message AgentHardwareReport {
// TODO(lorenz): implement
}
message AgentHeartbeatRequest {
// MachineID that this agent represents. Technically not necessary since
// keypairs between agents should be unique, but this provides an extra layer
// of protection against programming bugs.
string machine_id = 1;
// Optional hardware report to be upserted for this machine. An agent should
// submit one at least once after it's started, as early as it can.
AgentHardwareReport hardware_report = 2;
}
message AgentHeartbeatResponse {
// Agent actions (like install, reboot, etc) go here.
}