photoncloud-monorepo/plasmavmc/proto/plasmavmc.proto
centra a7ec7e2158 Add T026 practical test + k8shost to flake + workspace files
- Created T026-practical-test task.yaml for MVP smoke testing
- Added k8shost-server to flake.nix (packages, apps, overlays)
- Staged all workspace directories for nix flake build
- Updated flake.nix shellHook to include k8shost

Resolves: T026.S1 blocker (R8 - nix submodule visibility)
2025-12-09 06:07:50 +09:00

490 lines
10 KiB
Protocol Buffer

syntax = "proto3";
package plasmavmc.v1;
option go_package = "plasmavmc/v1;plasmavmcv1";
// ============================================================================
// VM Service
// ============================================================================
service VmService {
// Lifecycle
rpc CreateVm(CreateVmRequest) returns (VirtualMachine);
rpc GetVm(GetVmRequest) returns (VirtualMachine);
rpc ListVms(ListVmsRequest) returns (ListVmsResponse);
rpc UpdateVm(UpdateVmRequest) returns (VirtualMachine);
rpc DeleteVm(DeleteVmRequest) returns (Empty);
// Power operations
rpc StartVm(StartVmRequest) returns (VirtualMachine);
rpc StopVm(StopVmRequest) returns (VirtualMachine);
rpc RebootVm(RebootVmRequest) returns (VirtualMachine);
rpc ResetVm(ResetVmRequest) returns (VirtualMachine);
// Disk operations
rpc AttachDisk(AttachDiskRequest) returns (VirtualMachine);
rpc DetachDisk(DetachDiskRequest) returns (VirtualMachine);
// Network operations
rpc AttachNic(AttachNicRequest) returns (VirtualMachine);
rpc DetachNic(DetachNicRequest) returns (VirtualMachine);
// Events
rpc WatchVm(WatchVmRequest) returns (stream VmEvent);
}
// ============================================================================
// Image Service
// ============================================================================
service ImageService {
rpc CreateImage(CreateImageRequest) returns (Image);
rpc GetImage(GetImageRequest) returns (Image);
rpc ListImages(ListImagesRequest) returns (ListImagesResponse);
rpc UpdateImage(UpdateImageRequest) returns (Image);
rpc DeleteImage(DeleteImageRequest) returns (Empty);
}
// ============================================================================
// Node Service
// ============================================================================
service NodeService {
rpc ListNodes(ListNodesRequest) returns (ListNodesResponse);
rpc GetNode(GetNodeRequest) returns (Node);
rpc CordonNode(CordonNodeRequest) returns (Node);
rpc UncordonNode(UncordonNodeRequest) returns (Node);
rpc DrainNode(DrainNodeRequest) returns (Node);
}
// ============================================================================
// Common Messages
// ============================================================================
message Empty {}
// ============================================================================
// VM Messages
// ============================================================================
message VirtualMachine {
string id = 1;
string name = 2;
string org_id = 3;
string project_id = 4;
VmState state = 5;
VmSpec spec = 6;
VmStatus status = 7;
string node_id = 8;
HypervisorType hypervisor = 9;
int64 created_at = 10;
int64 updated_at = 11;
string created_by = 12;
map<string, string> metadata = 13;
map<string, string> labels = 14;
}
enum VmState {
VM_STATE_UNSPECIFIED = 0;
VM_STATE_PENDING = 1;
VM_STATE_CREATING = 2;
VM_STATE_STOPPED = 3;
VM_STATE_STARTING = 4;
VM_STATE_RUNNING = 5;
VM_STATE_STOPPING = 6;
VM_STATE_MIGRATING = 7;
VM_STATE_ERROR = 8;
VM_STATE_FAILED = 9;
VM_STATE_DELETED = 10;
}
enum HypervisorType {
HYPERVISOR_TYPE_UNSPECIFIED = 0;
HYPERVISOR_TYPE_KVM = 1;
HYPERVISOR_TYPE_FIRECRACKER = 2;
HYPERVISOR_TYPE_MVISOR = 3;
}
message VmSpec {
CpuSpec cpu = 1;
MemorySpec memory = 2;
repeated DiskSpec disks = 3;
repeated NetworkSpec network = 4;
BootSpec boot = 5;
SecuritySpec security = 6;
}
message CpuSpec {
uint32 vcpus = 1;
uint32 cores_per_socket = 2;
uint32 sockets = 3;
string cpu_model = 4;
}
message MemorySpec {
uint64 size_mib = 1;
bool hugepages = 2;
}
message DiskSpec {
string id = 1;
DiskSource source = 2;
uint64 size_gib = 3;
DiskBus bus = 4;
DiskCache cache = 5;
uint32 boot_index = 6;
}
message DiskSource {
oneof source {
string image_id = 1;
string volume_id = 2;
bool blank = 3;
}
}
enum DiskBus {
DISK_BUS_UNSPECIFIED = 0;
DISK_BUS_VIRTIO = 1;
DISK_BUS_SCSI = 2;
DISK_BUS_IDE = 3;
DISK_BUS_SATA = 4;
}
enum DiskCache {
DISK_CACHE_UNSPECIFIED = 0;
DISK_CACHE_NONE = 1;
DISK_CACHE_WRITEBACK = 2;
DISK_CACHE_WRITETHROUGH = 3;
}
message NetworkSpec {
string id = 1;
string network_id = 2;
string mac_address = 3;
string ip_address = 4;
NicModel model = 5;
repeated string security_groups = 6;
string port_id = 7; // NovaNET port ID for OVN integration
string subnet_id = 8; // NovaNET subnet ID for OVN integration
}
enum NicModel {
NIC_MODEL_UNSPECIFIED = 0;
NIC_MODEL_VIRTIO_NET = 1;
NIC_MODEL_E1000 = 2;
}
message BootSpec {
string kernel = 1;
string initrd = 2;
string cmdline = 3;
}
message SecuritySpec {
bool secure_boot = 1;
bool tpm = 2;
}
message VmStatus {
VmState actual_state = 1;
uint32 host_pid = 2;
int64 started_at = 3;
repeated string ip_addresses = 4;
ResourceUsage resource_usage = 5;
string last_error = 6;
}
message ResourceUsage {
double cpu_percent = 1;
uint64 memory_used_mib = 2;
uint64 disk_read_bytes = 3;
uint64 disk_write_bytes = 4;
uint64 network_rx_bytes = 5;
uint64 network_tx_bytes = 6;
}
// VM Service Requests
message CreateVmRequest {
string name = 1;
string org_id = 2;
string project_id = 3;
VmSpec spec = 4;
HypervisorType hypervisor = 5;
map<string, string> metadata = 6;
map<string, string> labels = 7;
}
message GetVmRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
}
message ListVmsRequest {
string org_id = 1;
string project_id = 2;
int32 page_size = 3;
string page_token = 4;
string filter = 5;
}
message ListVmsResponse {
repeated VirtualMachine vms = 1;
string next_page_token = 2;
}
message UpdateVmRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
VmSpec spec = 4;
map<string, string> metadata = 5;
map<string, string> labels = 6;
}
message DeleteVmRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
bool force = 4;
}
message StartVmRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
}
message StopVmRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
bool force = 4;
uint32 timeout_seconds = 5;
}
message RebootVmRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
}
message ResetVmRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
}
message AttachDiskRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
DiskSpec disk = 4;
}
message DetachDiskRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
string disk_id = 4;
}
message AttachNicRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
NetworkSpec nic = 4;
}
message DetachNicRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
string nic_id = 4;
}
message WatchVmRequest {
string org_id = 1;
string project_id = 2;
string vm_id = 3;
}
message VmEvent {
string vm_id = 1;
VmEventType event_type = 2;
VirtualMachine vm = 3;
int64 timestamp = 4;
}
enum VmEventType {
VM_EVENT_TYPE_UNSPECIFIED = 0;
VM_EVENT_TYPE_CREATED = 1;
VM_EVENT_TYPE_UPDATED = 2;
VM_EVENT_TYPE_DELETED = 3;
VM_EVENT_TYPE_STATE_CHANGED = 4;
}
// ============================================================================
// Image Messages
// ============================================================================
message Image {
string id = 1;
string name = 2;
string org_id = 3;
Visibility visibility = 4;
ImageFormat format = 5;
uint64 size_bytes = 6;
string checksum = 7;
OsType os_type = 8;
string os_version = 9;
Architecture architecture = 10;
uint32 min_disk_gib = 11;
uint32 min_memory_mib = 12;
ImageStatus status = 13;
int64 created_at = 14;
int64 updated_at = 15;
map<string, string> metadata = 16;
}
enum Visibility {
VISIBILITY_UNSPECIFIED = 0;
VISIBILITY_PUBLIC = 1;
VISIBILITY_PRIVATE = 2;
VISIBILITY_SHARED = 3;
}
enum ImageFormat {
IMAGE_FORMAT_UNSPECIFIED = 0;
IMAGE_FORMAT_RAW = 1;
IMAGE_FORMAT_QCOW2 = 2;
IMAGE_FORMAT_VMDK = 3;
IMAGE_FORMAT_VHD = 4;
}
enum OsType {
OS_TYPE_UNSPECIFIED = 0;
OS_TYPE_LINUX = 1;
OS_TYPE_WINDOWS = 2;
OS_TYPE_BSD = 3;
}
enum Architecture {
ARCHITECTURE_UNSPECIFIED = 0;
ARCHITECTURE_X86_64 = 1;
ARCHITECTURE_AARCH64 = 2;
}
enum ImageStatus {
IMAGE_STATUS_UNSPECIFIED = 0;
IMAGE_STATUS_PENDING = 1;
IMAGE_STATUS_UPLOADING = 2;
IMAGE_STATUS_AVAILABLE = 3;
IMAGE_STATUS_ERROR = 4;
}
message CreateImageRequest {
string name = 1;
string org_id = 2;
Visibility visibility = 3;
ImageFormat format = 4;
OsType os_type = 5;
string os_version = 6;
Architecture architecture = 7;
uint32 min_disk_gib = 8;
uint32 min_memory_mib = 9;
map<string, string> metadata = 10;
string source_url = 11;
}
message GetImageRequest {
string org_id = 1;
string image_id = 2;
}
message ListImagesRequest {
string org_id = 1;
int32 page_size = 2;
string page_token = 3;
bool include_public = 4;
}
message ListImagesResponse {
repeated Image images = 1;
string next_page_token = 2;
}
message UpdateImageRequest {
string org_id = 1;
string image_id = 2;
string name = 3;
Visibility visibility = 4;
map<string, string> metadata = 5;
}
message DeleteImageRequest {
string org_id = 1;
string image_id = 2;
}
// ============================================================================
// Node Messages
// ============================================================================
message Node {
string id = 1;
string name = 2;
NodeState state = 3;
NodeCapacity capacity = 4;
NodeCapacity allocatable = 5;
NodeCapacity allocated = 6;
repeated HypervisorType hypervisors = 7;
map<string, string> labels = 8;
string agent_version = 9;
int64 last_heartbeat = 10;
}
enum NodeState {
NODE_STATE_UNSPECIFIED = 0;
NODE_STATE_READY = 1;
NODE_STATE_NOT_READY = 2;
NODE_STATE_CORDONED = 3;
NODE_STATE_DRAINING = 4;
NODE_STATE_MAINTENANCE = 5;
}
message NodeCapacity {
uint32 vcpus = 1;
uint64 memory_mib = 2;
uint64 storage_gib = 3;
}
message ListNodesRequest {
int32 page_size = 1;
string page_token = 2;
}
message ListNodesResponse {
repeated Node nodes = 1;
string next_page_token = 2;
}
message GetNodeRequest {
string node_id = 1;
}
message CordonNodeRequest {
string node_id = 1;
}
message UncordonNodeRequest {
string node_id = 1;
}
message DrainNodeRequest {
string node_id = 1;
bool force = 2;
uint32 timeout_seconds = 3;
}