blob: 62d5094b40c45c87e1d109c3260eb327b9e0dc46 [file] [log] [blame]
// Copyright 2020 The Monogon Project Authors.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package metropolis.proto.api;
option go_package = "source.monogon.dev/metropolis/proto/api";
import "metropolis/proto/common/common.proto";
// NodeParameters is the data with which a Node is set booted. It contains the
// configuration required for a node to either bootstrap a new cluster, or
// register into an existing one.
// It is serialized into a proto message and supplied to Metropolis in an
// implementation-specific way (currently: either on ESP partition or via qemu
// fw_cfg).
message NodeParameters {
// ClusterBootstrap configures the node to attempt to create a new cluster
// from scratch. Further nodes can become part of the cluster by being
// configured with ClusterRegister, which should contain data retrieved from
// the newly bootstrapped cluster by its operator.
message ClusterBootstrap {
// owner_public_key is a raw Ed25519 public whose corresponding private
// key can be used to prove ownership of the cluster and retrieve
// management credentials for the cluster via an AAA.Escrow call.
bytes owner_public_key = 1;
}
// ClusterRegister configures the node to attempt to register into an
// existing cluster, ie. contact an existing running cluster and become
// its member.
message ClusterRegister {
// cluster_directory is a directory (mapping of names into IP addresses
// and public keys) of existing nodes in the cluster. It's used as the
// initial contact point of the already running cluster that the node
// should register into. It can be retrieved by an operator from
// a running cluster via Management.GetClusterInfo.
metropolis.proto.common.ClusterDirectory cluster_directory = 1;
// register_ticket is the opaque Register Ticket required from a node to
// begin registering it into a cluster. It can be retrieved by an
// operator from a running cluster via Management.GetRegisterTicket.
bytes register_ticket = 2;
// ca_public_key is the public key of the CA of the cluster that the
// node should expect when contacting nodes in cluster_directory and
// attempting to register into a cluster.
bytes ca_public_key = 3;
}
oneof cluster {
ClusterBootstrap cluster_bootstrap = 1;
ClusterRegister cluster_register = 2;
}
}