Kubernetes CRI CLI: crictl-shaped client, simulator server, proxy
1(** The container-runtime boundary for the CRI server, and an in-memory
2 simulator.
3
4 A {!module-type:S} implements every RuntimeService and ImageService
5 operation over its own state; {!Cri_server.Make} builds the gRPC server over
6 any backend. {!Memory} tracks a {e simulated} pod/container/image lifecycle
7 with no real process (created -> running -> exited is bookkeeping, stats are
8 zero, exec/attach return a URL but stream no bytes, exec_sync exits 0 with
9 empty output) -- documented simulations, never silent stubs, as in
10 [docker-runner]. A real runc/VMM backend is a separate {!module-type:S}
11 implementation. *)
12
13(** A failed operation. The server maps each constructor to a gRPC status:
14 {!Not_found} to [NOT_FOUND], {!Invalid_argument} to [INVALID_ARGUMENT],
15 {!Unimplemented} to [UNIMPLEMENTED], {!Internal} to [INTERNAL]. *)
16type error =
17 | Not_found of string
18 | Invalid_argument of string
19 | Unimplemented of string
20 | Internal of string
21
22module type S = sig
23 type t
24 (** Backend state. *)
25
26 val version : t -> Version.request -> (Version.response, error) result
27 (** The [version] RPC. *)
28
29 val run_pod_sandbox :
30 t ->
31 Pod_sandbox.run_pod_sandbox_request ->
32 (Pod_sandbox.run_pod_sandbox_response, error) result
33 (** The [run_pod_sandbox] RPC. *)
34
35 val stop_pod_sandbox :
36 t -> Pod_sandbox.stop_pod_sandbox_request -> (unit, error) result
37 (** The [stop_pod_sandbox] RPC. *)
38
39 val remove_pod_sandbox :
40 t -> Pod_sandbox.remove_pod_sandbox_request -> (unit, error) result
41 (** The [remove_pod_sandbox] RPC. *)
42
43 val pod_sandbox_status :
44 t ->
45 Pod_sandbox.status_request ->
46 (Pod_sandbox.status_response, error) result
47 (** The [pod_sandbox_status] RPC. *)
48
49 val list_pod_sandbox :
50 t ->
51 Pod_sandbox.list_pod_sandbox_request ->
52 (Pod_sandbox.list_pod_sandbox_response, error) result
53 (** The [list_pod_sandbox] RPC. *)
54
55 val stream_pod_sandboxes :
56 t ->
57 Pod_sandbox.stream_pod_sandboxes_request ->
58 (Pod_sandbox.stream_pod_sandboxes_response, error) result
59 (** The [stream_pod_sandboxes] RPC. *)
60
61 val pod_sandbox_stats :
62 t -> Pod_sandbox.stats_request -> (Pod_sandbox.stats_response, error) result
63 (** The [pod_sandbox_stats] RPC. *)
64
65 val list_pod_sandbox_stats :
66 t ->
67 Pod_sandbox.list_pod_sandbox_stats_request ->
68 (Pod_sandbox.list_pod_sandbox_stats_response, error) result
69 (** The [list_pod_sandbox_stats] RPC. *)
70
71 val stream_pod_sandbox_stats :
72 t ->
73 Pod_sandbox.stream_pod_sandbox_stats_request ->
74 (Pod_sandbox.stream_pod_sandbox_stats_response, error) result
75 (** The [stream_pod_sandbox_stats] RPC. *)
76
77 val update_pod_sandbox_resources :
78 t ->
79 Pod_sandbox.update_pod_sandbox_resources_request ->
80 (unit, error) result
81 (** The [update_pod_sandbox_resources] RPC. *)
82
83 val container_create :
84 t ->
85 Container.creation_request ->
86 (Container.creation_response, error) result
87 (** The [container_create] RPC. *)
88
89 val start_container :
90 t -> Container.start_container_request -> (unit, error) result
91 (** The [start_container] RPC. *)
92
93 val stop_container :
94 t -> Container.stop_container_request -> (unit, error) result
95 (** The [stop_container] RPC. *)
96
97 val remove_container :
98 t -> Container.remove_container_request -> (unit, error) result
99 (** The [remove_container] RPC. *)
100
101 val list_containers :
102 t ->
103 Container.list_containers_request ->
104 (Container.list_containers_response, error) result
105 (** The [list_containers] RPC. *)
106
107 val stream_containers :
108 t ->
109 Container.stream_containers_request ->
110 (Container.stream_containers_response, error) result
111 (** The [stream_containers] RPC. *)
112
113 val container_status :
114 t -> Container.status_request -> (Container.status_response, error) result
115 (** The [container_status] RPC. *)
116
117 val update_container_resources :
118 t -> Container.update_container_resources_request -> (unit, error) result
119 (** The [update_container_resources] RPC. *)
120
121 val reopen_container_log :
122 t -> Container.reopen_container_log_request -> (unit, error) result
123 (** The [reopen_container_log] RPC. *)
124
125 val checkpoint_container :
126 t -> Container.checkpoint_container_request -> (unit, error) result
127 (** The [checkpoint_container] RPC. *)
128
129 val container_stats :
130 t -> Container.stats_request -> (Container.stats_response, error) result
131 (** The [container_stats] RPC. *)
132
133 val list_container_stats :
134 t ->
135 Container.list_container_stats_request ->
136 (Container.list_container_stats_response, error) result
137 (** The [list_container_stats] RPC. *)
138
139 val stream_container_stats :
140 t ->
141 Container.stream_container_stats_request ->
142 (Container.stream_container_stats_response, error) result
143 (** The [stream_container_stats] RPC. *)
144
145 val exec_sync : t -> Exec.sync_request -> (Exec.sync_response, error) result
146 (** The [exec_sync] RPC. *)
147
148 val exec : t -> Exec.request -> (Exec.response, error) result
149 (** The [exec] RPC. *)
150
151 val attach : t -> Exec.attach_request -> (Exec.attach_response, error) result
152 (** The [attach] RPC. *)
153
154 val port_forward :
155 t -> Exec.port_forward_request -> (Exec.port_forward_response, error) result
156 (** The [port_forward] RPC. *)
157
158 val update_runtime_config :
159 t -> Runtime.update_runtime_config_request -> (unit, error) result
160 (** The [update_runtime_config] RPC. *)
161
162 val status :
163 t -> Runtime.status_request -> (Runtime.status_response, error) result
164 (** The [status] RPC. *)
165
166 val runtime_config : t -> unit -> (Runtime.config_response, error) result
167 (** The [runtime_config] RPC. *)
168
169 val container_events :
170 t -> unit -> (Event.container_event_response list, error) result
171 (** The [container_events] RPC. *)
172
173 val list_metric_descriptors :
174 t -> unit -> (Metrics.list_metric_descriptors_response, error) result
175 (** The [list_metric_descriptors] RPC. *)
176
177 val list_pod_sandbox_metrics :
178 t -> unit -> (Metrics.list_pod_sandbox_metrics_response, error) result
179 (** The [list_pod_sandbox_metrics] RPC. *)
180
181 val stream_pod_sandbox_metrics :
182 t -> unit -> (Metrics.stream_pod_sandbox_metrics_response, error) result
183 (** The [stream_pod_sandbox_metrics] RPC. *)
184
185 val list_images :
186 t -> Image.list_images_request -> (Image.list_images_response, error) result
187 (** The [list_images] RPC. *)
188
189 val stream_images :
190 t ->
191 Image.stream_images_request ->
192 (Image.stream_images_response, error) result
193 (** The [stream_images] RPC. *)
194
195 val image_status :
196 t -> Image.status_request -> (Image.status_response, error) result
197 (** The [image_status] RPC. *)
198
199 val pull_image :
200 t -> Image.pull_image_request -> (Image.pull_image_response, error) result
201 (** The [pull_image] RPC. *)
202
203 val remove_image : t -> Image.remove_image_request -> (unit, error) result
204 (** The [remove_image] RPC. *)
205
206 val image_fs_info : t -> unit -> (Image.fs_info_response, error) result
207 (** The [image_fs_info] RPC. *)
208end
209
210module type BACKEND = S
211(** Backwards-compatible name for {!module-type:S}. *)
212
213(** The in-memory simulator backend, for the [crictd --fake] daemon and tests.
214 Ids are assigned deterministically and timestamps come from a monotonic
215 counter, so runs are reproducible. *)
216module Memory : sig
217 include S
218
219 val v : unit -> t
220 (** [v ()] is a fresh, empty backend. *)
221end