syntax = "proto3"; option go_package = "esxlib/api/cloud"; package api.cloud; service Cloud { rpc VMList(VMListRequest) returns (VMListResponse); rpc VMGet(VMGetRequest) returns (VMGetResponse); rpc VMPower(VMPowerRequest) returns (VMPowerResponse); rpc VMCreate(VMCreateRequest) returns (VMCreateResponse); rpc VMDestroy(VMDestroyRequest) returns (VMDestroyResponse); rpc VMListSlugs(VMListSlugsRequest) returns (VMListSlugsResponse); rpc ZonesList(ZonesListRequest) returns (ZonesListResponse); rpc NetworksList(NetworksListRequest) returns (NetworksListResponse); } enum PowerState { UNKNOWN = 0; OFF = 1; SUSPENDED = 2; ON = 3; } message VMPowerRequest { string id = 1; PowerState State = 2; } message VMPowerResponse { } message VMNetworkInfo{ string address = 1; string lan = 2; } message VMInfo { string id = 1; string name = 2; string slug = 3; string zone = 4; PowerState State = 5; repeated VMNetworkInfo network = 6; } message VMListRequest { string zone_id = 1; } message VMListResponse { repeated VMInfo vms = 1; } message VMGetRequest { // TODO: add some filters oneof search { string id = 1; string name = 2; } } message VMGetResponse { VMInfo vm = 1; } message CreateOptions { uint32 cpu_count = 1; uint32 memory_mb = 2; uint32 disk_gb = 3; string network_id = 4; } message VMCreateRequest{ string zone_id = 1; string name = 2; string slug = 3; repeated string AuthorizedHosts = 4; string init_script = 5; } message VMCreateResponse{ VMInfo vm = 1; } message VMDestroyRequest{ string id = 1; } message VMDestroyResponse{ } message Slug{ string id = 1; string name = 2; string description = 3; uint32 cpu_count = 4; uint32 memory_mb = 5; uint32 disk_gb = 6; uint32 cost = 7; } message VMListSlugsRequest{ string zone_id = 1; } message VMListSlugsResponse{ repeated Slug slugs = 1; } message Zone { string id = 1; string name = 2; string description = 3; } message ZonesListRequest{ } message ZonesListResponse { repeated Zone zones = 1; } message Network { string id = 1; string name = 2; int32 VLAN = 3; } message NetworksListRequest { string zone_id = 1; } message NetworksListResponse { repeated Network networks = 1; }