| // 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_certificate is the DER-encoded x509 CA of the cluster that the | 
 |         // node should expect when contacting nodes in cluster_directory and | 
 |         // attempting to register into a cluster. It can be retrieved by | 
 |         // an operator from a running cluster via Management.GetClusterInfo. | 
 |         bytes ca_certificate = 3; | 
 |     } | 
 |     oneof cluster { | 
 |         ClusterBootstrap cluster_bootstrap = 1; | 
 |         ClusterRegister cluster_register = 2; | 
 |     } | 
 | } |