diff --git a/Makefile b/Makefile index d8f264b..fc648e5 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # cd ~/go/src/google.golang.org/protobuf/cmd/protoc-gen-go # go install -all: droplet.pb.go hypervisor.pb.go event.pb.go experiments.pb.go vet +all: droplet.pb.go hypervisor.pb.go event.pb.go experiment.pb.go goimports vet vet: @GO111MODULE=off go vet @@ -31,8 +31,8 @@ hypervisor.pb.go: hypervisor.proto event.pb.go: event.proto autogenpb --proto event.proto -experiments.pb.go: experiments.proto - autogenpb --proto experiments.proto +experiment.pb.go: experiment.proto + autogenpb --proto experiment.proto deps: apt install golang-goprotobuf-dev diff --git a/droplet.proto b/droplet.proto index f483f7d..4666b6d 100644 --- a/droplet.proto +++ b/droplet.proto @@ -6,53 +6,53 @@ import "google/protobuf/timestamp.proto"; // Import the well-known type for Time // global settings for autogenpb `autogenpb:mutex` -message Droplets { // `autogenpb:marshal` - 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 Droplets { // `autogenpb:marshal` + string uuid = 1; // `autogenpb:uuid:d5d492e2-38d4-476b-86f3-f5abf01f9d6d` + string version = 2; // `autogenpb:version:v0.0.1` + repeated Droplet droplets = 3; } -message Droplet { // `autogenpb:marshal` - string uuid = 1; // `autogenpb:unique` // should be unique across the cluster - string hostname = 2; // `autogenpb:unique` // 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 +message Droplet { // `autogenpb:marshal` + string uuid = 1; // `autogenpb:unique` // should be unique across the cluster + string hostname = 2; // `autogenpb:unique` // 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 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, - Archive archive = 16; // what the state of the droplet is SUPPOSED TO BE ('on' or 'off') + string local_only = 14; // this is only defined locally on the hypervisor + string custom_xml = 15; // if needed, + Archive archive = 16; // what the state of the droplet is SUPPOSED TO BE ('on' or 'off') - google.protobuf.Timestamp unstable = 39; // the last time we heard anything from this droplet - google.protobuf.Duration unstable_timeout = 40; // the last time we heard anything from this droplet + google.protobuf.Timestamp unstable = 39; // the last time we heard anything from this droplet + google.protobuf.Duration unstable_timeout = 40; // the last time we heard anything from this droplet } // 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 - google.protobuf.Timestamp off_since = 7; // when the droplet was turned off - google.protobuf.Timestamp on_since = 8; // when the droplet was turned on + 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 + google.protobuf.Timestamp off_since = 7; // when the droplet was turned off + google.protobuf.Timestamp on_since = 8; // when the droplet was turned on } message Archive { - DropletArchive reason = 1; // why the droplet was archived - google.protobuf.Timestamp when = 2; // when it was archived + DropletArchive reason = 1; // why the droplet was archived + google.protobuf.Timestamp when = 2; // when it was archived } // virtual machine state @@ -71,13 +71,13 @@ enum DropletArchive { } message Network { - string mac = 1; - string name = 2; + 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" + string filename = 1; + string filepath = 2; + int64 size = 3; + string qemu_arch = 4; // what arch. example: "x86_64" or "riscv64" } diff --git a/event.proto b/event.proto index 421565b..7be6b2a 100644 --- a/event.proto +++ b/event.proto @@ -6,11 +6,11 @@ import "google/protobuf/any.proto"; // Import the well-known type for Timestamp // global settings for autogenpb `autogenpb:no-sort` `autogenpb:mutex` -message Events { // `autogenpb:marshal` - 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 - int64 event_size = 3; // max events to store in a single - repeated Event events = 4; // all the events +message Events { // `autogenpb:marshal` + string uuid = 1; // `autogenpb:uuid:1e3a50c7-5916-4423-b33c-f0b977a7e446` + string version = 2; // `autogenpb:version:v0.0.1` + int64 event_size = 3; // max events to store in a single + repeated Event events = 4; // all the events } // this information leans towards being human readable not programatic @@ -19,19 +19,19 @@ message Events { // `autogenpb:marshal` // homelab clouds normally don't have many events. // we are talking less than 1 a minute. even 1 an hour is often a lot message Event { - int32 id = 1; // `autogenpb:unique` // should be unique across the cluster - EventType etype = 2; - string droplet = 3; // name of the droplet - string droplet_uuid = 4; // uuid of the droplet - string hypervisor = 5; // name of the hypervisor - string hypervisor_uuid = 6; // uuid of the hypervisor - google.protobuf.Timestamp start = 7; // start time - google.protobuf.Timestamp end = 8; // end time - string field_name = 9; // the field name that changed - string orig_val = 10; // original value - string new_val = 11; // new value - google.protobuf.Any orig_any = 12; // anypb format. probably overkill - google.protobuf.Any new_any = 13; // anypb format + int32 id = 1; // `autogenpb:unique` // should be unique across the cluster + EventType etype = 2; + string droplet = 3; // name of the droplet + string droplet_uuid = 4; // uuid of the droplet + string hypervisor = 5; // name of the hypervisor + string hypervisor_uuid = 6; // uuid of the hypervisor + google.protobuf.Timestamp start = 7; // start time + google.protobuf.Timestamp end = 8; // end time + string field_name = 9; // the field name that changed + string orig_val = 10; // original value + string new_val = 11; // new value + google.protobuf.Any orig_any = 12; // anypb format. probably overkill + google.protobuf.Any new_any = 13; // anypb format } enum EventType { diff --git a/experiment.proto b/experiment.proto new file mode 100644 index 0000000..4ee16fa --- /dev/null +++ b/experiment.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; +package virtbuf; + +import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp +import "google/protobuf/any.proto"; // Import the well-known type for Timestamp + +// global settings for autogenpb `autogenpb:no-sort` `autogenpb:no-marshal` + +message WhatsThis { + // is it possible to have custom formatting in JSON and TEXT marshal/unmarshal ? + WhatInfo humantest = 1; + + google.protobuf.Timestamp end = 2; // end time + google.protobuf.Any orig_val = 3; // original value + google.protobuf.Any new_val = 4; // new value +} + +// this is for exerimenting +message WhatInfo { + int64 capacity = 1; // Stores the storage capacity in bytes. +} + +message Experiment { +} + +message Experiments { // `autogenpb:marshal` `autogenpb:mutex` + string uuid = 1; // `autogenpb:uuid:aadb95db-d798-4647-8c59-cce82e8f1ed6` + string version = 2; // `autogenpb:version:v0.0.1` + repeated Experiment Experiments = 3; // THIS MUST BE Experiment and then Experiments +} diff --git a/experiments.proto b/experiments.proto deleted file mode 100644 index a489952..0000000 --- a/experiments.proto +++ /dev/null @@ -1,21 +0,0 @@ -syntax = "proto3"; -package virtbuf; - -import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp -import "google/protobuf/any.proto"; // Import the well-known type for Timestamp - -// global settings for autogenpb `autogenpb:no-sort` `autogenpb:no-marshal` - -message WhatsThis { - // is it possible to have custom formatting in JSON and TEXT marshal/unmarshal ? - WhatInfo humantest = 1; - - google.protobuf.Timestamp end = 2; // end time - google.protobuf.Any orig_val = 3; // original value - google.protobuf.Any new_val = 4; // new value -} - -// this is for exerimenting -message WhatInfo { - int64 capacity = 1; // Stores the storage capacity in bytes. -} diff --git a/hypervisor.proto b/hypervisor.proto index 703ffb3..e7a2a42 100644 --- a/hypervisor.proto +++ b/hypervisor.proto @@ -3,21 +3,21 @@ package virtbuf; // global settings for autogenpb `autogenpb:mutex` -message Hypervisors { // `autogenpb:marshal` - 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 Hypervisor hypervisors = 3; +message Hypervisors { // `autogenpb:marshal` + string uuid = 1; // `autogenpb:uuid:6e3aa8b9-cf98-40f6-af58-3c6ad1edf4d4` + string version = 2; // `autogenpb:version:v0.0.1` + repeated Hypervisor hypervisors = 3; } message Hypervisor { - string uuid = 1; // `autogenpb:unique` - string hostname = 2; // `autogenpb:unique` - bool active = 3; // is allowed to start new droplets - int64 cpus = 4; - int64 memory = 5; // in bytes - string comment = 6; - bool autoscan = 7; // to scan or not to scan by virtigo - HypervisorArch arch = 8; + string uuid = 1; // `autogenpb:unique` + string hostname = 2; // `autogenpb:unique` + bool active = 3; // is allowed to start new droplets + int64 cpus = 4; + int64 memory = 5; // in bytes + string comment = 6; + bool autoscan = 7; // to scan or not to scan by virtigo + HypervisorArch arch = 8; } // think about this more