@@ -32,23 +32,51 @@ impl Engine {
32
32
Ok ( Engine { containers } )
33
33
}
34
34
35
- pub async fn fetch ( & mut self , container_name : & str ) -> anyhow:: Result < ( ) > {
35
+ pub async fn create ( & self , container_name : & str ) -> anyhow:: Result < ( ) > {
36
36
eprintln ! ( "fetching from dockerhub..." ) ;
37
37
let fetched_image = OciImage :: fetch_from_docker_hub ( container_name) . await ?;
38
+
38
39
eprintln ! ( "fetched from dockerhub, unpacking..." ) ;
39
40
let runtime_dir = fetched_image. unpack ( ) . await ?;
41
+
40
42
eprintln ! ( "unpacked, creating container..." ) ;
41
43
let container = Container :: create ( container_name, runtime_dir) . await ?;
44
+
45
+ eprintln ! ( "starting container..." ) ;
46
+ container. start ( ) . await ?;
47
+ eprintln ! ( "started container" ) ;
48
+
42
49
self . containers . insert ( container_name. into ( ) , container) ;
43
50
Ok ( ( ) )
44
51
}
52
+
53
+ pub async fn pause ( & self , container_name : & str ) -> anyhow:: Result < ( ) > {
54
+ match self . containers . get ( container_name) {
55
+ Some ( container) => container. pause ( ) . await ,
56
+ None => return Err ( anyhow ! ( "container `{}` does not exist" , container_name) ) ,
57
+ }
58
+ }
59
+
60
+ pub async fn resume ( & self , container_name : & str ) -> anyhow:: Result < ( ) > {
61
+ match self . containers . get ( container_name) {
62
+ Some ( container) => container. resume ( ) . await ,
63
+ None => return Err ( anyhow ! ( "container `{}` does not exist" , container_name) ) ,
64
+ }
65
+ }
66
+
67
+ pub async fn delete ( & self , container_name : & str ) -> anyhow:: Result < ( ) > {
68
+ match self . containers . remove ( container_name) {
69
+ Some ( ( _, container) ) => container. delete ( ) . await ,
70
+ None => return Err ( anyhow ! ( "container `{}` does not exist" , container_name) ) ,
71
+ }
72
+ }
45
73
}
46
74
47
75
#[ tokio:: main]
48
76
async fn main ( ) -> anyhow:: Result < ( ) > {
49
77
// TODO: Use `warp` to host REST endpoints.
50
- let mut engine = Engine :: new ( ) . await ?;
51
- engine. fetch ( "busybox" ) . await ?;
78
+ let engine = Engine :: new ( ) . await ?;
79
+ engine. create ( "busybox" ) . await ?;
52
80
tokio:: time:: sleep ( std:: time:: Duration :: from_secs ( 1000 ) ) . await ;
53
81
Ok ( ( ) )
54
82
}
0 commit comments