This repository was archived by the owner on Feb 8, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 191
/
Copy pathtypes.proto
915 lines (762 loc) · 22.6 KB
/
types.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
// Generate cmd: protoc --go_out=plugins=grpc:. types.proto
syntax = "proto3";
package types;
// Types definitions for HyperContainer
message ContainerPort {
string name = 1;
int32 hostPort = 2;
int32 containerPort = 3;
string protocol = 4;
string hostIP = 5;
}
message EnvironmentVar {
string env = 1;
string value = 2;
}
message VolumeMount {
string name = 1;
string mountPath = 2;
bool readOnly = 3;
}
message WaitingStatus {
string reason = 1;
}
message RunningStatus {
string startedAt = 1;
}
message TermStatus {
int32 exitCode = 1;
string reason = 2;
string message = 3;
string startedAt = 4;
string finishedAt = 5;
}
message ContainerStatus {
string name = 1;
string containerID = 2;
string phase = 3;
WaitingStatus waiting = 4;
RunningStatus running = 5;
TermStatus terminated = 6;
}
message ContainerInfo {
Container container = 1;
int64 createdAt = 2;
string podID = 3;
ContainerStatus status = 4;
}
message Container {
string name = 1;
string containerID = 2;
string image = 3;
string imageID = 4;
string imagePullPolicy = 5;
string workingDir = 6;
string user = 7;
bool tty = 8;
repeated string commands = 9;
repeated string args = 10;
repeated ContainerPort ports = 11;
repeated EnvironmentVar env = 12;
repeated VolumeMount volumeMounts = 13;
map<string, string> labels = 14;
}
message RBDVolumeSource {
repeated string monitors = 1;
string image = 2;
string fsType = 3;
string pool = 4;
string user = 5;
string keyring = 6;
bool readOnly = 7;
}
message PodVolume {
string name = 1;
string source = 2;
string driver = 3;
RBDVolumeSource rbd = 4;
}
message PodSpec {
repeated PodVolume volumes = 1;
repeated Container containers = 2;
map<string,string> labels = 3;
int32 vcpu = 4;
int32 memory = 5;
}
message PodStatus {
string phase = 1;
string message = 2;
string reason = 3;
string hostIP = 4;
repeated string podIP = 5;
string startTime = 6;
repeated ContainerStatus containerStatus = 7;
string finishTime = 8;
}
message PodInfo {
string podID = 1;
string kind = 2;
string apiVersion = 3;
string vm = 4;
int64 createdAt = 5;
PodSpec spec = 6;
PodStatus status = 7;
string podName = 8;
}
message ImageInfo {
string id = 1;
string parentID = 2;
repeated string repoTags = 3;
repeated string repoDigests = 4;
int64 created = 5;
int64 virtualSize = 6;
map<string,string> labels = 7;
}
message PodStats {
CpuStats cpu = 1;
BlkioStats block = 2;
MemoryStats memory = 3;
NetworkStats network = 4;
repeated FsStats filesystem = 5;
int64 timestamp = 6;
repeated ContainersStats containersStats = 7;
}
message CpuStats {
CpuUsage usage = 1;
int32 LoadAverage = 2;
}
message CpuUsage {
uint64 total = 1;
repeated uint64 perCpu = 2;
uint64 user = 3;
uint64 system = 4;
}
message BlkioStats {
repeated BlkioStatEntry ioServiceBytesRecursive = 1;
repeated BlkioStatEntry ioServicedRecursive = 2;
repeated BlkioStatEntry ioQueuedRecursive = 3;
repeated BlkioStatEntry ioServiceTimeRecursive = 4;
repeated BlkioStatEntry ioWaitTimeRecursive = 5;
repeated BlkioStatEntry ioMergedRecursive = 6;
repeated BlkioStatEntry ioTimeRecursive = 7;
repeated BlkioStatEntry sectorsRecursive = 8;
}
message BlkioStatEntry {
string name = 1;
string type = 2;
string source = 3;
uint64 major = 4;
uint64 minor = 5;
map<string, uint64> stat = 6;
}
message MemoryStats {
uint64 usage = 1;
uint64 workingSet = 2;
uint64 failcnt = 3;
MemoryStatsMemoryData containerData = 4;
MemoryStatsMemoryData hierarchicalData = 5;
}
message MemoryStatsMemoryData {
uint64 pgfault = 1;
uint64 pgmajfault = 2;
}
message NetworkStats {
repeated InterfaceStats interfaces = 1;
TcpStat tcp = 2;
TcpStat tcp6 = 3;
}
message TcpStat {
uint64 established = 1;
uint64 synSent = 2;
uint64 synRecv = 3;
uint64 finWait1 = 4;
uint64 finWait2 = 5;
uint64 timeWait = 6;
uint64 close = 7;
uint64 closeWait = 8;
uint64 lastAck = 9;
uint64 listen = 10;
uint64 closing = 11;
}
message InterfaceStats {
string name = 1;
uint64 rxBytes = 2;
uint64 rxPackets = 3;
uint64 rxErrors = 4;
uint64 rxDropped = 5;
uint64 txBytes = 6;
uint64 txPackets = 7;
uint64 txErrors = 8;
uint64 txDropped = 9;
}
message FsStats {
string device = 1;
uint64 limit = 2;
uint64 usage = 3;
uint64 available = 4;
uint64 readsCompleted = 5;
uint64 readsMerged = 6;
uint64 sectorsRead = 7;
uint64 readTime = 8;
uint64 writesCompleted = 9;
uint64 writesMerged = 10;
uint64 sectorsWritten = 11;
uint64 writeTime = 12;
uint64 ioInProgress = 13;
uint64 ioTime = 14;
uint64 weightedIoTime = 15;
}
message ContainersStats {
string containerID = 1;
CpuStats cpu = 2;
BlkioStats block = 3;
MemoryStats memory = 4;
NetworkStats network = 5;
repeated FsStats filesystem = 6;
int64 timestamp = 7;
}
//////////////////// PublicAPI Request/Response ///////////////////////////
message PodInfoRequest {
string podID = 1;
}
message PodInfoResponse {
PodInfo podInfo = 1;
}
message PodListRequest {
string podID = 1;
string vmID = 2;
}
message PodListResult {
string podID = 1;
string podName = 2;
string vmID = 3;
string status = 4;
int64 createdAt = 5;
map<string,string> labels = 6;
}
message PodListResponse {
repeated PodListResult podList = 1;
}
message ContainerListRequest {
string podID = 1;
string vmID = 2;
}
message ContainerListResult {
string containerID = 1;
string containerName = 2;
string podID = 3;
string status = 4;
}
message ContainerListResponse {
repeated ContainerListResult containerList = 1;
}
message ContainerInfoRequest {
// container is the name or id of specified container
string container = 1;
}
message ContainerInfoResponse {
ContainerInfo containerInfo = 1;
}
message VMListResult {
string vmID = 1;
string podID = 2;
string status = 3;
}
message VMListRequest {
string podID = 1;
string vmID = 2;
}
message VMListResponse {
repeated VMListResult vmList = 1;
}
message ImageListRequest {
// filterArgs is a JSON-encoded set of filter arguments
string filterArgs = 1;
// filter is a shell glob string applied to repository names
string filter = 2;
// all controls whether all images in the graph are filtered, or just the heads
bool all = 3;
}
message ImageListResponse {
repeated ImageInfo imageList = 1;
}
message VMCreateRequest {
int32 cpu = 1;
int32 memory = 2;
}
message VMCreateResponse {
string vmID = 1;
}
message VMRemoveRequest {
string vmID = 1;
}
message VMRemoveResponse {
int32 code = 1;
string cause = 2;
}
message UserContainerPort {
int32 hostPort = 1;
int32 containerPort = 2;
int32 servicePort = 3;
string protocol = 4;
}
message UserVolumeReference {
string path = 1;
string volume = 2;
bool readOnly = 3;
UserVolume detail = 4;
}
message UserFileReference {
string path = 1;
string filename = 2;
string perm = 3;
string user = 4;
string group = 5;
UserFile detail = 6;
}
message UserUser {
string name = 1;
string group = 2;
repeated string additionalGroups = 3;
}
message Ulimit {
string Name = 1;
uint64 Hard = 2;
uint64 Soft = 3;
}
message UserContainer {
string name = 1;
string image = 2;
string workdir = 3;
string restartPolicy = 4;
bool tty = 5;
map<string, string> sysctl = 6;
repeated EnvironmentVar envs = 7;
repeated string command = 8;
repeated string entrypoint = 9;
repeated UserContainerPort ports = 10;
repeated UserVolumeReference volumes = 11;
repeated UserFileReference files = 12;
UserUser user = 13;
map<string, string> labels = 14;
string id = 15;
string StopSignal = 17;
repeated Ulimit ulimits = 18;
string logPath = 19;
bool readOnly = 20;
string cache = 21;
}
message UserResource {
int32 vcpu = 1;
int32 memory = 2;
}
message UserFile {
string name = 1;
string encoding = 2;
string uri = 3;
string content = 4;
}
message UserVolumeOption {
string user = 1;
string keyring = 2;
repeated string monitors = 3;
}
message UserVolume {
string name = 1;
string source = 2;
string format = 3;
UserVolumeOption option = 4;
string fstype = 5;
string cache = 6;
}
message UserInterface {
string bridge = 1;
string ip = 2;
string ifname = 3;
string mac = 4;
uint64 mtu = 5;
string gateway = 6;
string id = 100;
}
message UserServiceBackend {
string hostIP = 1;
int32 hostPort = 2;
}
message UserService {
string serviceIP = 1;
string protocol = 2;
int32 servicePort = 3;
repeated UserServiceBackend hosts = 4;
}
message PodLogConfig {
string type = 1;
map<string, string> config = 2;
}
message PortMapping {
string containerPort = 1;
string hostPort = 2;
string protocol = 3;
}
message PortmappingWhiteList {
// allowed internal networks in CIDR format for portmapping
// Those networks could visit all container ports if portmapping is enabled
repeated string internalNetworks = 1;
// allowed external networks in CIDR format for portmapping
// Those networks could only visit exposed ports if portmapping is enabled
repeated string externalNetworks = 2;
}
message UserPod {
// TODO: rename this to name (renaming will also change restful API)
string id = 1;
string hostname = 2;
string type = 3;
string restartPolicy = 4;
bool tty = 5;
map<string, string> labels = 6;
UserResource resource = 7;
PodLogConfig log = 8;
repeated string dns = 9;
repeated UserContainer containers = 10;
repeated UserFile files = 11;
repeated UserVolume volumes = 12;
repeated UserInterface interfaces = 13;
repeated UserService services = 14;
PortmappingWhiteList portmappingWhiteLists = 15;
repeated PortMapping portmappings = 16;
repeated string dnsOptions = 17;
repeated string dnsSearch = 18;
}
message PodCreateRequest {
UserPod podSpec = 1;
string podID = 2;
}
message PodCreateResponse {
string podID = 1;
}
message PodRemoveRequest {
string podID = 1;
}
message PodRemoveResponse {
int32 code = 1;
string cause = 2;
}
message ContainerLogsRequest {
string container = 1;
bool follow = 2;
bool timestamps = 3;
string tail = 4;
string since = 5;
bool stdout = 6;
bool stderr = 7;
}
message ContainerLogsResponse {
bytes log = 1;
}
message DriverStatus {
string name = 1;
string status = 2;
}
message InfoRequest {}
message InfoResponse {
string ID = 1;
int32 containers = 2;
int32 images = 3;
string driver = 4;
repeated DriverStatus dstatus = 5;
string dockerRootDir = 6;
string indexServerAddress = 7;
string executionDriver = 8;
int64 memTotal = 9;
int64 pods = 10;
string operatingSystem = 11;
string name = 12;
}
message ExecCreateRequest{
string containerID = 1;
repeated string command = 2;
bool tty = 3;
}
message ExecCreateResponse{
string execID = 1;
}
message ExecStartRequest{
string containerID = 1;
string execID = 2;
bytes stdin = 3;
}
message ExecStartResponse{
bytes stdout = 1;
}
message ExecVMRequest{
string podID = 1;
repeated string command = 2;
bytes stdin = 3;
}
message ExecVMResponse{
bytes stdout = 1;
int32 exitCode = 2;
}
message ExecSignalRequest{
string containerID = 1;
string execID = 2;
int64 signal = 3;
}
message ExecSignalResponse{}
message PodStartRequest {
string podID = 1;
}
message PodStartResponse {}
message WaitRequest{
string container = 1;
string processId = 2;
bool noHang = 3;
}
message WaitResponse{
int32 exitCode = 1;
}
message AttachMessage {
string containerID = 1;
bytes data = 2;
}
message ContainerCreateRequest {
UserContainer containerSpec = 1;
string podID = 2;
}
message ContainerCreateResponse {
string containerID = 1;
}
message ContainerStartRequest {
// ID of the container to start.
string container_id = 1;
}
message ContainerStartResponse {}
message ContainerRenameRequest {
string oldContainerName = 1;
string newContainerName = 2;
}
message ContainerRenameResponse {}
message ContainerRemoveRequest {
string container_id = 1;
}
message ContainerRemoveResponse {}
message AuthConfig {
string username = 1;
string password = 2;
string auth = 3;
string email = 4;
string serveraddress = 5;
string registrytoken = 6;
}
message ImagePullRequest {
string image = 1;
string tag = 2;
AuthConfig auth = 3;
}
message ImagePullResponse {
bytes data = 1;
}
message ImagePushRequest {
string repo = 1;
string tag = 2;
AuthConfig auth = 3;
}
message ImagePushResponse {
bytes data = 1;
}
message ImageRemoveRequest {
string image = 1;
bool force = 2;
bool prune = 3;
}
message ImageDelete {
string untaged = 1;
string deleted = 2;
}
message ImageRemoveResponse {
repeated ImageDelete images = 1;
}
message ContainerStopRequest {
string containerID = 1;
int64 timeout = 2;
}
message ContainerStopResponse {}
message VersionRequest {}
message VersionResponse {
// Version is the version of hyperd
string version = 1;
// ApiVersion is the version of gRPC API
string apiVersion = 2;
}
message ServiceListResponse {
repeated UserService services = 1;
}
message ServiceListRequest {
string podID =1;
}
message ServiceAddRequest {
string podID = 1;
repeated UserService services = 2;
}
message ServiceAddResponse {}
message ServiceDelRequest {
string podID = 1;
repeated UserService services = 2;
}
message ServiceDelResponse {}
message ServiceUpdateRequest {
string podID = 1;
repeated UserService services = 2;
}
message ServiceUpdateResponse {}
message PortMappingListRequest {
string podID = 1;
}
message PortMappingListResponse {
repeated PortMapping portMappings = 1;
}
message PortMappingModifyRequest {
string podID = 1;
repeated PortMapping portMappings = 2;
}
message PortMappingModifyResponse {}
message PodStopRequest {
string podID = 1;
}
message PodStopResponse {
int32 code = 1;
string cause = 2;
}
message PodSignalRequest {
string podID = 1;
int64 signal = 2;
}
message PodSignalResponse {}
message PodPauseRequest {
string podID = 1;
}
message PodPauseResponse {}
message PodUnpauseRequest {
string podID = 1;
}
message PodUnpauseResponse {}
message PodLabelsRequest{
string podID = 1;
bool override = 2;
map<string, string> labels = 3;
}
message PodLabelsResponse{}
message PodStatsRequest {
string podID = 1;
}
message PodStatsResponse {
PodStats podStats = 1;
}
message PingRequest {}
message PingResponse {
string hyperdStats = 1;
}
message ContainerSignalRequest {
string podID = 1;
string containerID = 2;
int64 signal = 3;
}
message ContainerSignalResponse{}
message TTYResizeRequest{
string containerID = 1;
string execID = 2;
int32 width = 3;
int32 height = 4;
}
message TTYResizeResponse{}
// PublicAPI defines the public APIs which are handled over TCP sockets.
service PublicAPI {
// PodList gets a list of pods
rpc PodList(PodListRequest) returns (PodListResponse) {}
// PodCreate creates a pod according to UserPod
rpc PodCreate(PodCreateRequest) returns (PodCreateResponse) {}
// PodInfo gets pod's info by podID
rpc PodInfo(PodInfoRequest) returns (PodInfoResponse) {}
// PodRemove deletes a pod by podID
rpc PodRemove(PodRemoveRequest) returns (PodRemoveResponse) {}
// PodStart starts a pod
rpc PodStart(PodStartRequest) returns (PodStartResponse) {}
// PodStop stops a pod
rpc PodStop(PodStopRequest) returns (PodStopResponse) {}
// PodSignal sends a signal to all containers of specified pod
rpc PodSignal(PodSignalRequest) returns (PodSignalResponse) {}
// PodPause pauses a pod
rpc PodPause(PodPauseRequest) returns (PodPauseResponse) {}
// PodUnpause unpauses a pod
rpc PodUnpause(PodUnpauseRequest) returns (PodUnpauseResponse) {}
// ExecVM executes a command outside of any containers.
rpc ExecVM(stream ExecVMRequest) returns (stream ExecVMResponse) {}
// ContainerList gets a list of containers
rpc ContainerList(ContainerListRequest) returns (ContainerListResponse) {}
// ContainerInfo gets container's info by container's id or name
rpc ContainerInfo(ContainerInfoRequest) returns (ContainerInfoResponse) {}
// ImageList gets a list of images by filters
rpc ImageList(ImageListRequest) returns (ImageListResponse) {}
// VMList gets a list of HyperVMs
rpc VMList(VMListRequest) returns (VMListResponse) {}
// SetPodLabels sets labels of given pod
rpc SetPodLabels(PodLabelsRequest) returns (PodLabelsResponse) {}
// PodStats gets pod stats of a given pod
rpc PodStats(PodStatsRequest) returns (PodStatsResponse) {}
// ContainerLogs gets the log of specified container
rpc ContainerLogs(ContainerLogsRequest) returns (stream ContainerLogsResponse) {}
// ContainerCreate creates a container in specified pod
rpc ContainerCreate(ContainerCreateRequest) returns (ContainerCreateResponse) {}
// ContainerStart starts a container in a specified pod
rpc ContainerStart(ContainerStartRequest) returns (ContainerStartResponse) {}
// ContainerRename renames a container
rpc ContainerRename(ContainerRenameRequest) returns (ContainerRenameResponse) {}
// TODO: ContainerCommit commits the changes of the specified container
// ContainerSignal sends a signal to specified container
rpc ContainerSignal(ContainerSignalRequest) returns (ContainerSignalResponse) {}
// TODO: ContainerLabels updates labels of the specified container
// ContainerStop stops the specified container
rpc ContainerStop(ContainerStopRequest) returns (ContainerStopResponse) {}
// ContainerRemove removes a container from a specified pod
rpc ContainerRemove(ContainerRemoveRequest) returns (ContainerRemoveResponse) {}
// ExecCreate creates exec in specified container
rpc ExecCreate(ExecCreateRequest) returns (ExecCreateResponse) {}
// ExecStart starts exec
rpc ExecStart(stream ExecStartRequest) returns (stream ExecStartResponse) {}
// ExecSignal sends a signal to specified exec in specified container
rpc ExecSignal(ExecSignalRequest) returns (ExecSignalResponse) {}
// Attach attaches to the specified container
rpc Attach(stream AttachMessage) returns (stream AttachMessage) {}
// Wait gets the exit code of the specified container
rpc Wait(WaitRequest) returns (WaitResponse) {}
// TTYResize resizes the tty of the specified container
rpc TTYResize(TTYResizeRequest) returns (TTYResizeResponse) {}
// ServiceList gets a list of services
rpc ServiceList(ServiceListRequest) returns (ServiceListResponse) {}
// ServiceAdd add a service to a pod
rpc ServiceAdd(ServiceAddRequest) returns (ServiceAddResponse){}
// ServiceDelete delete a service from a pod
rpc ServiceDelete(ServiceDelRequest) returns (ServiceDelResponse){}
// ServiceUpdate updates an existing service of a pod
rpc ServiceUpdate(ServiceUpdateRequest) returns (ServiceUpdateResponse){}
// PortMappingList get a list of PortMappings
rpc PortMappingList(PortMappingListRequest) returns (PortMappingListResponse) {}
// PortMappingAdd add a list of PortMapping rules to a Pod
rpc PortMappingAdd(PortMappingModifyRequest) returns (PortMappingModifyResponse) {}
// PortMappingDel remove a list of PortMapping rules from a Pod
rpc PortMappingDel(PortMappingModifyRequest) returns (PortMappingModifyResponse) {}
// ImagePull pulls a image from registry
rpc ImagePull(ImagePullRequest) returns (stream ImagePullResponse) {}
// ImagePush pushes a local image to registry
rpc ImagePush(ImagePushRequest) returns (stream ImagePushResponse) {}
// ImageRemove deletes a image from hyperd
rpc ImageRemove(ImageRemoveRequest) returns (ImageRemoveResponse) {}
// TODO: ImageBuild builds a image from Dockerfile
// TODO: ImageLoad loads a image from stream
// Ping checks if hyperd is running (returns 'OK' on success)
rpc Ping(PingRequest) returns (PingResponse) {}
// Info gets the info of hyperd
rpc Info(InfoRequest) returns (InfoResponse) {}
// Version gets the version and apiVersion of hyperd
rpc Version(VersionRequest) returns (VersionResponse) {}
// TODO: Auth auths a user to the specified docker registry
}