fly_sdk/machines/resources.rs
1use serde::{Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, Debug)]
4pub struct GuestConfig {
5 pub cpu_kind: Option<CpuKind>,
6 pub cpus: Option<u64>,
7 pub gpu_kind: Option<GpuKind>,
8 pub gpus: Option<u64>,
9 pub memory_mb: Option<u64>,
10 pub kernel_args: Option<Vec<String>>,
11}
12
13impl Default for GuestConfig {
14 fn default() -> Self {
15 Self {
16 cpu_kind: Some(CpuKind::Shared),
17 cpus: Some(1),
18 gpu_kind: None,
19 gpus: None,
20 memory_mb: Some(256),
21 kernel_args: None,
22 }
23 }
24}
25
26/// Enum representing different kinds of CPU configurations for machines.
27///
28/// ### For detailed pricing information:
29/// - Please refer to [Fly.io's pricing page](https://fly.io/docs/about/pricing/)
30#[derive(Debug, Serialize, Deserialize)]
31#[serde(rename_all = "lowercase")]
32pub enum CpuKind {
33 // /// Shared CPU with 1 vCPU.
34 // /// Available RAM sizes: 256MB, 512MB, 1GB, 2GB
35 // SharedCpu1x,
36
37 // /// Shared CPU with 2 vCPUs.
38 // /// Available RAM sizes: 512MB, 1GB, 2GB, 4GB
39 // SharedCpu2x,
40
41 // /// Shared CPU with 4 vCPUs.
42 // /// Available RAM sizes: 1GB, 2GB, 4GB, 8GB
43 // SharedCpu4x,
44
45 // /// Shared CPU with 8 vCPUs.
46 // /// Available RAM sizes: 2GB, 4GB, 8GB, 16GB
47 // SharedCpu8x,
48 Shared,
49 // /// Performance CPU with 1 vCPU.
50 // /// Available RAM sizes: 2GB, 4GB, 8GB
51 // Performance1x,
52
53 // /// Performance CPU with 2 vCPUs.
54 // /// Available RAM sizes: 4GB, 8GB, 16GB
55 // Performance2x,
56
57 // /// Performance CPU with 4 vCPUs.
58 // /// Available RAM sizes: 8GB, 16GB, 32GB
59 // Performance4x,
60
61 // /// Performance CPU with 8 vCPUs.
62 // /// Available RAM sizes: 16GB, 32GB, 64GB
63 // Performance8x,
64
65 // /// Performance CPU with 16 vCPUs.
66 // /// Available RAM sizes: 32GB, 64GB, 128GB
67 // Performance16x,
68 Performance,
69}
70
71/// Enum representing different kinds of GPU configurations for machines.
72///
73/// ### For detailed pricing information:
74/// - Please refer to [Fly.io's pricing page](https://fly.io/docs/about/pricing/)
75#[derive(Debug, Serialize, Deserialize)]
76#[serde(rename_all = "lowercase")]
77pub enum GpuKind {
78 A10,
79
80 L40S,
81
82 /// A100 40G PCIe
83 A10040GPCIe,
84
85 /// A100 80G SXM
86 A10080GSXM,
87}
88
89#[derive(Serialize, Deserialize, Debug)]
90pub struct RestartPolicy {
91 pub gpu_bid_price: Option<f64>,
92 pub max_retries: Option<u32>,
93 pub policy: RestartPolicyEnum,
94}
95
96impl Default for RestartPolicy {
97 fn default() -> Self {
98 Self {
99 gpu_bid_price: None,
100 max_retries: None,
101 policy: RestartPolicyEnum::No,
102 }
103 }
104}
105
106#[derive(Serialize, Deserialize, Debug)]
107#[serde(rename_all = "lowercase")]
108pub enum RestartPolicyEnum {
109 No,
110 Always,
111 OnFailure,
112 SpotPrice,
113}
114
115#[derive(Serialize, Deserialize, Debug)]
116pub struct FileConfig {
117 pub guest_path: String,
118 pub mode: Option<u32>,
119 pub raw_value: Option<String>,
120 pub secret_name: Option<String>,
121}