syntax = "proto3";
package cloud.bmaas.server.api;
option go_package = "source.monogon.dev/cloud/bmaas/server/api";

import "metropolis/proto/api/configuration.proto";
import "cloud/agent/api/hwreport.proto";

// 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 performed 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 {
  cloud.agent.api.Node report = 1;
  // List of human-readable warnings which occurred during hardware report
  // generation.
  repeated string warning = 2;
}

// OSInstallationReport is submitted from the agent to the BMDB server after
// successful OS installation.
message OSInstallationReport {
  // generation must be set to the same value as 'generation' in the
  // OSInstallation request which triggered the OS installation
  int64 generation = 1;

  // Success is set by the agent when the installation request has been
  // successfully fulfilled. It is currently empty but is specified as a
  // message to allow it to be expanded in the future.
  message Success {}
  // Error is set by the agent when the installation request could not be
  // fulfilled due to an error.
  message Error {
    // A human-readable message of what went wrong.
    string error = 1;
  }
  oneof result {
    Success success = 2;
    Error error = 3;
  }
}

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;
  // Optional installation report sent to be upserted to this machine. An agent
  // should submit one after it successfully installed an operating system for
  // a given OSInstallationRequest.
  OSInstallationReport installation_report = 3;
}

message MetropolisInstallationRequest {
  // An HTTPS URL to a Metropolis bundle containing the OS to install.
  string bundle_url = 1;
  // Node parameters to be supplied to the new node. Note that network_config
  // is automatically filled out if coming from the takeover.
  metropolis.proto.api.NodeParameters node_parameters = 2;
  // Name of the block device to be used as the root device for the install.
  // A list of block devices can be taken from the node hardware report.
  string root_device = 3;
}

// OSInstallationRequest is provided to the agent by the BMDB server, from
// a responding BMDB tag, when an OS installation request is pending.
message OSInstallationRequest {
  // generation is the 'version' of the OS installation request, and will always
  // be incremented within the BMDB when a new OS installation request is
  // submitted. The agent must pipe this through to the OSInstallationReport to
  // let the rest of the system know which OS installation request it actually
  // fulfilled.
  int64 generation = 1;
  // Selects which operating system installation flow is used.
  oneof type {
    MetropolisInstallationRequest metropolis = 2;
  }
}

message AgentHeartbeatResponse {
  // If set, the control plane is requesting the installation of an operating
  // system.
  OSInstallationRequest installation_request = 1;
}