blob: c8b6b790f0882065cfad37813eff158989f66e06 [file] [log] [blame]
syntax = "proto3";
option go_package = "source.monogon.dev/metropolis/node/core/curator/proto/private";
package metropolis.node.core.curator.proto.private;
import "metropolis/proto/common/common.proto";
// Node describes a single node's state in etcd. This is only ever visible to
// the curator, and fully managed by the curator.
//
// Serialized nodes are stored in /nodes/$id, where $id is the node's ID as
// calculated from its public key.
message Node {
// The node's public key.
bytes public_key = 1;
// Node's individual cluster part of the data partition encryption key. It
// is combined with the Node Unlock Key (NUK) kept within
// SealedConfiguration.
bytes cluster_unlock_key = 2;
// The node's state, as seen by the cluster. This state is persisted and
// represents the progress the node is making through registering into the
// cluster or joining the cluster.
metropolis.proto.common.NodeState fsm_state = 3;
// The node's intended roles when running.
metropolis.proto.common.NodeRoles roles = 4;
metropolis.proto.common.NodeStatus status = 5;
}
// Information about the cluster owner, currently the only Metropolis management
// entity, named 'owner' in public APIs.
//
// This is populated from NodeParameters.cluster_bootstrap.owner_public_key on
// cluster bootstrap.
//
// MVP: In the future, once we have implemented a manager/user entity system,
// this will be replaced by a proper per-user entry.
//
// Stored under /global/initial_owner (see curator.initialOwnerEtcdPath).
message InitialOwner {
// ED25519 public key of cluster owner.
bytes public_key = 1;
}
// A blob which needs to be provided by nodes registering into the cluster.
// Presenting this ticket on registration does not automatically grant access
// to arbitrary node registration. Instead it is used to guard the API surface
// of the Register RPC from potential denial of service attacks, and can be
// regenerated at any time in case it leaks.
//
// Stored under /global/register_ticket (see curator.registerTicketEtcdPath).
message RegisterTicket {
bytes opaque = 1;
}