syntax = "proto3"; package virtbuf; // import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp message Droplets { string uuid = 1; // I guess why not just have this on each file string version = 2; // maybe can be used for protobuf schema change violations repeated Droplet droplets = 3; } message Droplet { string uuid = 1; // should be unique across the cluster string hostname = 2; // should be unique and work in DNS int64 cpus = 3; // what's the point of int64 vs int32 int64 memory = 4; // in bytes Current current = 5; // what the state and values of the droplet is DropletState start_state = 6; // what the state of the droplet is SUPPOSED TO BE ('on' or 'off') string qemu_machine = 7; // the qemu machine type to use "pc-q35-9.0" int64 spice_port = 8; // preferred port to use for spice string preferred_hypervisor = 9; // the hypervisor to prefer to run the droplet on string force_hypervisor = 10; // use this hypervisor and this hypervisor only string preferred_arch = 11; // the cpu arch to use "x86_64" (should really get this from the disk?) repeated Network networks = 12; // really just mac addresses. should be unique across cluster repeated Disk disks = 13; // disks to attach string local_only = 14; // this is only defined locally on the hypervisor string custom_xml = 15; // if needed, DropletArchive archive = 16; // what the state of the droplet is SUPPOSED TO BE ('on' or 'off') } // volatile data. the current settings and values of things. // These are passed around while the cluster to monitor and control the systems // but they are not saved to the config file message Current { DropletState state = 1; // used to track the current state before taking any action string hypervisor = 2; // the current hypervisor the droplet is running on int64 start_attempts = 3; // how many times a start has been attempted string full_xml = 4; // the full libvirt xml to import google.protobuf.Timestamp last_poll = 5; // the last time we heard anything from this droplet string image_url = 6; // url to the image } message Archive { DropletArchive reason = 1; // why the droplet was archived google.protobuf.Timestamp when = 2; // when it was archived } // virtual machine state enum DropletState { ON = 0; OFF = 1; UNKNOWN = 2; // qemu says 'Shutdown' PAUSED = 3; CRASHED = 4; INMIGRATE = 5; } enum DropletArchive { ARCHIVE_DUP = 0; ARCHIVE_USER = 1; } message Network { string mac = 1; string name = 2; } message Disk { string filename = 1; string filepath = 2; int64 size = 3; string qemu_arch = 4; // what arch. example: "x86_64" or "riscv64" }