Skip to content

Commit b4dd838

Browse files
committed
New template API with resources management !
1 parent 2e8716b commit b4dd838

File tree

7 files changed

+50
-32
lines changed

7 files changed

+50
-32
lines changed

src/epsilon/server/instance.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ use crate::epsilon::server::state::EpsilonState;
1414
use crate::epsilon::server::template::Template;
1515
use serde::Serialize;
1616

17-
//TODO: Use Label from class::Label
18-
1917
pub struct Instance {
2018
pod: Pod,
2119
}
@@ -32,19 +30,20 @@ pub struct InstanceJson {
3230
impl Instance {
3331
pub async fn new(kube: &Arc<Kube>, template: &Template) -> EResult<Self> {
3432
let template_name = &template.name;
35-
let instance_type = &template.t.parse()?;
33+
let instance_type = &template.t;
34+
let resources = &template.resources;
3635
let slots = template.slots;
3736

3837
let instance_label = Label::get_instance_type_label(instance_type);
3938
let template_label = Label::get_template_label(template_name);
4039
let slots_label = Label::get_slots_label(slots);
4140

42-
let port = instance_type.get_associated_port();
43-
4441
let labels = vec![instance_label, template_label, slots_label];
4542

43+
let port = instance_type.get_associated_port();
44+
4645
let pod = kube
47-
.create_epsilon_pod(template_name, Some(&labels), port)
46+
.create_epsilon_pod(template_name, Some(&labels), port, resources)
4847
.await?;
4948

5049
Ok(Self { pod })
@@ -68,7 +67,7 @@ impl Instance {
6867
.labels
6968
.as_ref()
7069
.unwrap()
71-
.get("epsilon.fr/template")
70+
.get(Label::TEMPLATE_LABEL)
7271
.unwrap()
7372
}
7473

@@ -78,7 +77,7 @@ impl Instance {
7877
.labels
7978
.as_ref()
8079
.unwrap()
81-
.get("epsilon.fr/instance")
80+
.get(Label::INSTANCE_TYPE_LABEL)
8281
.unwrap()
8382
.parse()
8483
.unwrap()
@@ -90,7 +89,7 @@ impl Instance {
9089
.labels
9190
.as_ref()
9291
.unwrap()
93-
.get("epsilon.fr/slots")
92+
.get(Label::SLOTS_LABEL)
9493
.unwrap()
9594
.parse()
9695
.unwrap()

src/epsilon/server/instance_provider.rs

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ impl InstanceProvider {
6868
}
6969
}
7070

71-
pub async fn enable_in_game_instance(&self, name: &str) -> EResult<()> {
72-
let label = &Label::get_in_game_label();
71+
pub async fn set_in_game_instance(&self, name: &str, enable: bool) -> EResult<()> {
72+
let label = &Label::get_in_game_label(enable);
7373

7474
let patch = json!({
7575
"metadata": {
@@ -83,24 +83,10 @@ impl InstanceProvider {
8383
}
8484

8585
pub async fn get_template_host(&self, route: &str) -> String {
86-
let labels = vec![Label::new("epsilon.fr/template-provider", "true")];
87-
88-
let pods_result = self.kube.get_pods(Some(&labels), None).await;
89-
90-
pods_result.as_ref().unwrap();
91-
92-
if let Ok(pods) = pods_result {
93-
let pod = pods.first();
94-
95-
if let Some(pod) = pod {
96-
let status = pod.status.as_ref().unwrap();
97-
let pod_ip = status.pod_ip.as_ref().unwrap();
98-
99-
return format!("http://{}:3333/{}", pod_ip, route);
100-
}
101-
}
102-
103-
format!("http://127.0.0.1:3333/{}", route)
86+
format!(
87+
"http://template-service.epsilon.svc.cluster.local:3333/{}",
88+
route
89+
)
10490
}
10591

10692
pub async fn get_template(&self, template_name: &str) -> EResult<Template> {
@@ -159,7 +145,7 @@ pub async fn close(instance_name: &str, instance_provider: &State<Arc<InstancePr
159145
#[rocket::post("/in_game/<instance>")]
160146
pub async fn in_game(instance: &str, instance_provider: &State<Arc<InstanceProvider>>) {
161147
instance_provider
162-
.enable_in_game_instance(instance)
148+
.set_in_game_instance(instance, true)
163149
.await
164150
.unwrap();
165151

src/epsilon/server/instance_type.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
use std::io;
22
use std::str::FromStr;
33

4+
use serde::{Deserialize, Serialize};
5+
6+
#[derive(Serialize, Deserialize)]
47
pub enum InstanceType {
58
Server,
69
Proxy,

src/epsilon/server/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ pub mod instance;
22
pub mod instance_provider;
33
pub mod instance_type;
44

5+
pub mod resources;
56
pub mod state;
67
pub mod template;
78

src/epsilon/server/resources.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use serde::{Deserialize, Serialize};
2+
3+
#[derive(Serialize, Deserialize)]
4+
pub struct Resources {
5+
pub minimum: ResourcesInfo,
6+
pub maximum: ResourcesInfo,
7+
}
8+
9+
#[derive(Serialize, Deserialize)]
10+
pub struct ResourcesInfo {
11+
pub cpu: u8,
12+
pub ram: u32,
13+
}

src/epsilon/server/template.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,19 @@ use std::collections::HashMap;
33

44
use serde::{Deserialize, Serialize};
55

6+
use crate::epsilon::server::instance_type::InstanceType;
7+
use crate::epsilon::server::resources::Resources;
8+
69
#[derive(Serialize, Deserialize)]
710
pub struct Template {
811
pub name: String,
12+
pub parent: String,
913

1014
#[serde(rename = "type")]
11-
pub t: String,
15+
pub t: InstanceType,
1216

1317
pub slots: i32,
18+
pub resources: Resources,
1419

15-
pub schema: String,
1620
pub labels: HashMap<String, Value>,
1721
}

src/k8s/kube.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::sync::Arc;
77
use k8s_openapi::serde_json;
88
use k8s_openapi::serde_json::{json, Value};
99

10+
use crate::epsilon::server::resources::Resources;
1011
use kube::api::{DeleteParams, ListParams, Patch, PatchParams, PostParams};
1112
use kube::{Api, Client, Error};
1213

@@ -41,6 +42,7 @@ impl Kube {
4142
template: &str,
4243
labels_option: Option<&Vec<Label>>,
4344
port: u16,
45+
resources: &Resources,
4446
) -> Result<Pod, Error> {
4547
let default_label = self.get_default_label();
4648

@@ -78,6 +80,16 @@ impl Kube {
7880
"protocol": "TCP"
7981
}
8082
],
83+
"resources": {
84+
"requests": {
85+
"cpu": resources.minimum.cpu,
86+
"memory": format!("{}M", resources.minimum.ram)
87+
},
88+
"limits": {
89+
"cpu": resources.maximum.cpu,
90+
"memory": format!("{}M", resources.maximum.ram)
91+
}
92+
},
8193
"readinessProbe": {
8294
"initialDelaySeconds": 5,
8395
"periodSeconds": 1,

0 commit comments

Comments
 (0)