1
1
use crate :: k8s:: label:: Label ;
2
2
use crate :: { EResult , Kube } ;
3
- use std:: collections:: HashMap ;
4
3
4
+ use crate :: epsilon:: epsilon_error:: EpsilonError ;
5
5
use crate :: epsilon:: server:: instance:: { Instance , InstanceJson } ;
6
6
use crate :: epsilon:: server:: instance_type:: InstanceType ;
7
7
use crate :: epsilon:: server:: state:: EpsilonState ;
8
- use crate :: epsilon:: server:: template:: Template ;
8
+ use crate :: epsilon:: server:: templates :: template:: Template ;
9
9
use anyhow:: format_err;
10
10
use rocket:: State ;
11
11
use serde_json:: json;
@@ -47,7 +47,7 @@ impl InstanceProvider {
47
47
& self ,
48
48
instance_type : & InstanceType ,
49
49
template_option : Option < & str > ,
50
- state : Option < & EpsilonState > ,
50
+ state_option : Option < & EpsilonState > ,
51
51
) -> EResult < Vec < Instance > > {
52
52
let mut labels = vec ! [ Label :: get_instance_type_label( instance_type) ] ;
53
53
@@ -59,9 +59,9 @@ impl InstanceProvider {
59
59
60
60
let map = pods. into_iter ( ) . map ( Instance :: from_pod) ;
61
61
62
- match state {
63
- Some ( _ ) => Ok ( map
64
- . filter ( |instance| instance. get_state ( ) . eq ( state. unwrap ( ) ) )
62
+ match state_option {
63
+ Some ( state ) => Ok ( map
64
+ . filter ( |instance| instance. get_state ( ) . eq ( state) )
65
65
. collect ( ) ) ,
66
66
67
67
None => Ok ( map. collect ( ) ) ,
@@ -124,21 +124,30 @@ impl InstanceProvider {
124
124
}
125
125
}
126
126
127
- #[ rocket:: post( "/create/<template_name >" ) ]
128
- pub async fn create ( template_name : & str , instance_provider : & State < Arc < InstanceProvider > > ) {
127
+ #[ rocket:: post( "/create/<template >" ) ]
128
+ pub async fn create ( template : & str , instance_provider : & State < Arc < InstanceProvider > > ) {
129
129
instance_provider
130
- . start_instance ( template_name )
130
+ . start_instance ( template )
131
131
. await
132
+ . map_err ( |_e| {
133
+ EpsilonError :: ApiServerError ( format ! (
134
+ "Failed to create an instance from template ({})" ,
135
+ template
136
+ ) )
137
+ } )
132
138
. unwrap ( ) ;
133
139
134
- info ! ( "An instance has been created (template={})" , template_name ) ;
140
+ info ! ( "An instance has been created (template={})" , template ) ;
135
141
}
136
142
137
- #[ rocket:: post( "/close/<instance_name >" ) ]
138
- pub async fn close ( instance_name : & str , instance_provider : & State < Arc < InstanceProvider > > ) {
143
+ #[ rocket:: post( "/close/<instance >" ) ]
144
+ pub async fn close ( instance : & str , instance_provider : & State < Arc < InstanceProvider > > ) {
139
145
instance_provider
140
- . remove_instance ( instance_name )
146
+ . remove_instance ( instance )
141
147
. await
148
+ . map_err ( |_| {
149
+ EpsilonError :: ApiServerError ( format ! ( "Failed to close instance ({})" , instance) )
150
+ } )
142
151
. unwrap ( ) ;
143
152
}
144
153
@@ -147,16 +156,25 @@ pub async fn in_game(instance: &str, instance_provider: &State<Arc<InstanceProvi
147
156
instance_provider
148
157
. set_in_game_instance ( instance, true )
149
158
. await
159
+ . map_err ( |_| {
160
+ EpsilonError :: ApiServerError ( format ! ( "Failed to set in game instance ({})" , instance) )
161
+ } )
150
162
. unwrap ( ) ;
151
163
152
164
info ! ( "An instance is now in game (name={})" , instance) ;
153
165
}
154
166
155
- #[ rocket:: get( "/get/<template_name >" ) ]
156
- pub async fn get ( template_name : & str , instance_provider : & State < Arc < InstanceProvider > > ) -> String {
167
+ #[ rocket:: get( "/get/<template >" ) ]
168
+ pub async fn get ( template : & str , instance_provider : & State < Arc < InstanceProvider > > ) -> String {
157
169
let instances = instance_provider
158
- . get_instances ( & InstanceType :: Server , Some ( template_name ) , None )
170
+ . get_instances ( & InstanceType :: Server , Some ( template ) , None )
159
171
. await
172
+ . map_err ( |_| {
173
+ EpsilonError :: ApiServerError ( format ! (
174
+ "Failed to get instance from template {}" ,
175
+ template
176
+ ) )
177
+ } )
160
178
. unwrap ( )
161
179
. into_iter ( ) ;
162
180
@@ -174,6 +192,7 @@ pub async fn get_all(instance_provider: &State<Arc<InstanceProvider>>) -> String
174
192
let instances = instance_provider
175
193
. get_instances ( & InstanceType :: Server , None , None )
176
194
. await
195
+ . map_err ( |_| EpsilonError :: ApiServerError ( "Failed to get every instance" . to_string ( ) ) )
177
196
. unwrap ( )
178
197
. into_iter ( ) ;
179
198
0 commit comments