talos/api/storage/storage.proto
Andrey Smirnov 664fa36973
feat: implement user volumes
User volumes are identified by a short name which serves both
as a `/var/mnt` mount point and a partition label.

User volumes can be added and removed on the fly, and they are
automatically propagated into the `kubelet` mount namespace.

Also deprecate `.machine.disks`.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-04-11 20:27:39 +04:00

107 lines
3.1 KiB
Protocol Buffer

syntax = "proto3";
package storage;
option go_package = "github.com/siderolabs/talos/pkg/machinery/api/storage";
option java_package = "dev.talos.api.storage";
import "common/common.proto";
import "google/protobuf/empty.proto";
// StorageService represents the storage service.
service StorageService {
rpc Disks(google.protobuf.Empty) returns (DisksResponse);
// BlockDeviceWipe performs a wipe of the blockdevice (partition or disk).
//
// The method doesn't require a reboot, and it can only wipe blockdevices which are not
// being used as volumes at the moment.
// Wiping of volumes requires a different API.
rpc BlockDeviceWipe(BlockDeviceWipeRequest) returns (BlockDeviceWipeResponse);
}
// Disk represents a disk.
message Disk {
// Size indicates the disk size in bytes.
uint64 size = 1;
// Model idicates the disk model.
string model = 2;
// DeviceName indicates the disk name (e.g. `sda`).
string device_name = 3;
// Name as in `/sys/block/<dev>/device/name`.
string name = 4;
// Serial as in `/sys/block/<dev>/device/serial`.
string serial = 5;
// Modalias as in `/sys/block/<dev>/device/modalias`.
string modalias = 6;
// Uuid as in `/sys/block/<dev>/device/uuid`.
string uuid = 7;
// Wwid as in `/sys/block/<dev>/device/wwid`.
string wwid = 8;
enum DiskType {
UNKNOWN = 0;
SSD = 1;
HDD = 2;
NVME = 3;
SD = 4;
CD = 5;
}
// Type is a type of the disk: nvme, ssd, hdd, sd card.
DiskType type = 9;
// BusPath is the bus path of the disk.
string bus_path = 10;
// SystemDisk indicates that the disk is used as Talos system disk.
bool system_disk = 11;
// Subsystem is the symlink path in the `/sys/block/<dev>/subsystem`.
string subsystem = 12;
// Readonly specifies if the disk is read only.
bool readonly = 13;
}
// DisksResponse represents the response of the `Disks` RPC.
message Disks {
common.Metadata metadata = 1;
repeated Disk disks = 2;
}
message DisksResponse {
repeated Disks messages = 1;
}
// rpc BlockDeviceWipe
message BlockDeviceWipeRequest {
repeated BlockDeviceWipeDescriptor devices = 1;
}
// BlockDeviceWipeDescriptor represents a single block device to be wiped.
//
// The device can be either a full disk (e.g. vda) or a partition (vda5).
// The device should not be used in any of active volumes.
// The device should not be used as a secondary (e.g. part of LVM).
message BlockDeviceWipeDescriptor {
enum Method {
// Fast wipe - wipe only filesystem signatures.
FAST = 0;
// Zeroes wipe - wipe by overwriting with zeroes (might be slow depending on the disk size and available hardware features).
ZEROES = 1;
}
// Device name to wipe (e.g. sda or sda5).
//
// The name should be submitted without `/dev/` prefix.
string device = 1;
// Wipe method to use.
Method method = 2;
// Skip the volume in use check.
bool skip_volume_check = 3;
// Drop the partition (only applies if the device is a partition).
bool drop_partition = 4;
}
message BlockDeviceWipeResponse {
repeated BlockDeviceWipe messages = 1;
}
message BlockDeviceWipe {
common.Metadata metadata = 1;
}