mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-19 13:41:13 +02:00
This PR introduces a new strategy for upgrades. Instead of attempting to zap the partition table, create a new one, and then format the partitions, this change will only update the `vmlinuz`, and `initramfs.xz` being used to boot. It introduces an A/B style upgrade process, which will allow for easy rollbacks. One deviation from our original intention with upgrades is that this change does not completely reset a node. It falls just short of that and does not reset the partition table. This forces us to keep the current partition scheme in mind as we make changes in the future, because an upgrade assumes a specific partition scheme. We can improve upgrades further in the future, but this will at least make them more dependable. Finally, one more feature in this PR is the ability to keep state. This enables single node clusters to upgrade since we keep the etcd data around. Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
274 lines
6.4 KiB
Protocol Buffer
274 lines
6.4 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package machine;
|
|
|
|
option go_package = "github.com/talos-systems/talos/api/machine";
|
|
option java_multiple_files = true;
|
|
option java_outer_classname = "MachineApi";
|
|
option java_package = "com.machine.api";
|
|
|
|
import "google/protobuf/empty.proto";
|
|
import "google/protobuf/timestamp.proto";
|
|
import "common/common.proto";
|
|
|
|
// The machine service definition.
|
|
service MachineService {
|
|
rpc Copy(CopyRequest) returns (stream common.Data);
|
|
rpc Kubeconfig(google.protobuf.Empty) returns (stream common.Data);
|
|
rpc List(ListRequest) returns (stream FileInfo);
|
|
rpc Logs(LogsRequest) returns (stream common.Data);
|
|
rpc Mounts(google.protobuf.Empty) returns (MountsResponse);
|
|
rpc Read(ReadRequest) returns (stream common.Data);
|
|
rpc Reboot(google.protobuf.Empty) returns (RebootResponse);
|
|
rpc Reset(ResetRequest) returns (ResetResponse);
|
|
rpc ServiceList(google.protobuf.Empty) returns (ServiceListResponse);
|
|
rpc ServiceRestart(ServiceRestartRequest) returns (ServiceRestartResponse);
|
|
rpc ServiceStart(ServiceStartRequest) returns (ServiceStartResponse);
|
|
rpc ServiceStop(ServiceStopRequest) returns (ServiceStopResponse);
|
|
rpc Shutdown(google.protobuf.Empty) returns (ShutdownResponse);
|
|
rpc Upgrade(UpgradeRequest) returns (UpgradeResponse);
|
|
|
|
rpc Start(StartRequest) returns (StartResponse) {
|
|
option deprecated = true;
|
|
};
|
|
rpc Stop(StopRequest) returns (StopResponse) {
|
|
option deprecated = true;
|
|
};
|
|
|
|
rpc Version(google.protobuf.Empty) returns (VersionResponse);
|
|
}
|
|
|
|
// rpc reboot
|
|
// The reboot message containing the reboot status.
|
|
message Reboot {
|
|
common.Metadata metadata = 1;
|
|
}
|
|
message RebootResponse {
|
|
repeated Reboot messages = 1;
|
|
}
|
|
|
|
// rpc reset
|
|
message ResetRequest {
|
|
bool graceful = 1;
|
|
bool reboot = 2;
|
|
}
|
|
|
|
// The reset message containing the restart status.
|
|
message Reset {
|
|
common.Metadata metadata = 1;
|
|
}
|
|
message ResetResponse {
|
|
repeated Reset messages = 1;
|
|
}
|
|
|
|
// rpc shutdown
|
|
// The messages message containing the shutdown status.
|
|
message Shutdown {
|
|
common.Metadata metadata = 1;
|
|
}
|
|
message ShutdownResponse {
|
|
repeated Shutdown messages = 1;
|
|
}
|
|
|
|
// rpc upgrade
|
|
message UpgradeRequest {
|
|
string image = 1;
|
|
bool preserve = 2;
|
|
}
|
|
|
|
message Upgrade {
|
|
common.Metadata metadata = 1;
|
|
string ack = 2;
|
|
}
|
|
message UpgradeResponse {
|
|
repeated Upgrade messages = 1;
|
|
}
|
|
|
|
// rpc servicelist
|
|
message ServiceList {
|
|
common.Metadata metadata = 1;
|
|
repeated ServiceInfo services = 2;
|
|
}
|
|
message ServiceListResponse {
|
|
repeated ServiceList messages = 1;
|
|
}
|
|
|
|
message ServiceInfo {
|
|
string id = 1;
|
|
string state = 2;
|
|
ServiceEvents events = 3;
|
|
ServiceHealth health = 4;
|
|
}
|
|
|
|
message ServiceEvents {
|
|
repeated ServiceEvent events = 1;
|
|
}
|
|
|
|
message ServiceEvent {
|
|
string msg = 1;
|
|
string state = 2;
|
|
google.protobuf.Timestamp ts = 3;
|
|
}
|
|
|
|
message ServiceHealth {
|
|
bool unknown = 1;
|
|
bool healthy = 2;
|
|
string last_message = 3;
|
|
google.protobuf.Timestamp last_change = 4;
|
|
}
|
|
|
|
// rpc servicestart
|
|
message ServiceStartRequest {
|
|
string id = 1;
|
|
}
|
|
|
|
message ServiceStart {
|
|
common.Metadata metadata = 1;
|
|
string resp = 2;
|
|
}
|
|
message ServiceStartResponse {
|
|
repeated ServiceStart messages = 1;
|
|
}
|
|
|
|
message ServiceStopRequest {
|
|
string id = 1;
|
|
}
|
|
|
|
message ServiceStop {
|
|
common.Metadata metadata = 1;
|
|
string resp = 2;
|
|
}
|
|
message ServiceStopResponse {
|
|
repeated ServiceStop messages = 1;
|
|
}
|
|
|
|
message ServiceRestartRequest {
|
|
string id = 1;
|
|
}
|
|
|
|
message ServiceRestart {
|
|
common.Metadata metadata = 1;
|
|
string resp = 2;
|
|
}
|
|
message ServiceRestartResponse {
|
|
repeated ServiceRestart messages = 1;
|
|
}
|
|
|
|
message StartRequest {
|
|
option deprecated = true;
|
|
string id = 1;
|
|
}
|
|
|
|
message StartResponse {
|
|
option deprecated = true;
|
|
string resp = 1;
|
|
}
|
|
|
|
message StopRequest {
|
|
option deprecated = true;
|
|
string id = 1;
|
|
}
|
|
|
|
message StopResponse {
|
|
option deprecated = true;
|
|
string resp = 1;
|
|
}
|
|
|
|
// CopyRequest describes a request to copy data out of Talos node
|
|
//
|
|
// Copy produces .tar.gz archive which is streamed back to the caller
|
|
message CopyRequest {
|
|
// Root path to start copying data out, it might be either a file or directory
|
|
string root_path = 1;
|
|
}
|
|
|
|
// ListRequest describes a request to list the contents of a directory
|
|
message ListRequest {
|
|
// Root indicates the root directory for the list. If not indicated, '/' is
|
|
// presumed.
|
|
string root = 1;
|
|
// Recurse indicates that subdirectories should be recursed.
|
|
bool recurse = 2;
|
|
// RecursionDepth indicates how many levels of subdirectories should be
|
|
// recursed. The default (0) indicates that no limit should be enforced.
|
|
int32 recursion_depth = 3;
|
|
}
|
|
|
|
// FileInfo describes a file or directory's information
|
|
message FileInfo {
|
|
common.Metadata metadata = 1;
|
|
// Name is the name (including prefixed path) of the file or directory
|
|
string name = 2;
|
|
// Size indicates the number of bytes contained within the file
|
|
int64 size = 3;
|
|
// Mode is the bitmap of UNIX mode/permission flags of the file
|
|
uint32 mode = 4;
|
|
// Modified indicates the UNIX timestamp at which the file was last modified
|
|
int64 modified = 5; // TODO: unix timestamp or include proto's Date type
|
|
// IsDir indicates that the file is a directory
|
|
bool is_dir = 6;
|
|
// Error describes any error encountered while trying to read the file
|
|
// information.
|
|
string error = 7;
|
|
// Link is filled with symlink target
|
|
string link = 8;
|
|
// RelativeName is the name of the file or directory relative to the RootPath
|
|
string relative_name = 9;
|
|
}
|
|
|
|
// The messages message containing the requested df stats.
|
|
message Mounts {
|
|
common.Metadata metadata = 1;
|
|
repeated MountStat stats = 2;
|
|
}
|
|
message MountsResponse {
|
|
repeated Mounts messages = 1;
|
|
}
|
|
|
|
// The messages message containing the requested processes.
|
|
message MountStat {
|
|
string filesystem = 1;
|
|
uint64 size = 2;
|
|
uint64 available = 3;
|
|
string mounted_on = 4;
|
|
}
|
|
|
|
message Version {
|
|
common.Metadata metadata = 1;
|
|
VersionInfo version = 2;
|
|
PlatformInfo platform = 3;
|
|
}
|
|
|
|
message VersionResponse {
|
|
repeated Version messages = 1;
|
|
}
|
|
|
|
message VersionInfo {
|
|
string tag = 1;
|
|
string sha = 2;
|
|
string built = 3;
|
|
string go_version = 4;
|
|
string os = 5;
|
|
string arch = 6;
|
|
}
|
|
|
|
message PlatformInfo {
|
|
string name = 1;
|
|
string mode = 2;
|
|
}
|
|
|
|
// rpc logs
|
|
// The request message containing the process name.
|
|
message LogsRequest {
|
|
string namespace = 1;
|
|
string id = 2;
|
|
// driver might be default "containerd" or "cri"
|
|
common.ContainerDriver driver = 3;
|
|
bool follow = 4;
|
|
int32 tail_lines = 5;
|
|
}
|
|
|
|
message ReadRequest {
|
|
string path = 1;
|
|
}
|