Skip to main content

devops_armory/cloud/gcp/gke/deployment/
models.rs

1use serde_derive::{Serialize, Deserialize};
2
3#[derive(Serialize, Deserialize, Default,Debug)]
4pub struct CreateDeployment {
5    pub apiVersion: String,
6    pub kind: String,
7    pub metadata: DeploymentMetadata,
8    pub spec: DeploymentSpec,
9}
10
11#[derive(Serialize, Deserialize, Default,Debug)]
12pub struct DeploymentMetadata {
13    pub name: String,
14    pub labels: DeploymentMetadataLabels,
15    pub namespace: String
16}
17
18#[derive(Serialize, Deserialize, Default,Debug)]
19pub struct DeploymentMetadataLabels {
20    pub app: String
21}
22
23#[derive(Serialize, Deserialize, Default,Debug)]
24pub struct DeploymentSpec {
25    pub strategy: DeploymentSpecStrategy,
26    pub replicas: i32,
27    pub selector: DeploymentSelector,
28    pub template: DeploymentTemplate,
29}
30
31#[derive(Serialize, Deserialize, Default,Debug)]
32pub struct DeploymentSpecStrategy {
33    pub r#type: String,
34    pub rollingUpdate: RollingUpdate
35}
36
37#[derive(Serialize, Deserialize, Default,Debug)]
38pub struct RollingUpdate {
39    pub maxSurge: String,
40    pub maxUnavailable: String,
41}
42
43#[derive(Serialize, Deserialize, Default,Debug)]
44pub struct DeploymentSelector {
45    pub matchLabels: SelectorLabels
46}
47
48#[derive(Serialize, Deserialize, Default,Debug)]
49pub struct SelectorLabels {
50    pub app: String
51}
52
53#[derive(Serialize, Deserialize, Default,Debug)]
54pub struct DeploymentTemplate {
55    pub metadata: DeploymentTemplateMetadata,
56    pub spec: DeploymentTemplateSpec
57}
58
59#[derive(Serialize, Deserialize, Default,Debug)]
60pub struct DeploymentTemplateMetadata {
61    pub labels: DeploymentTemplateMetadataLabels
62}
63
64#[derive(Serialize, Deserialize, Default,Debug)]
65pub struct DeploymentTemplateMetadataLabels {
66    pub app: String
67}
68
69#[derive(Serialize, Deserialize, Default,Debug)]
70pub struct DeploymentTemplateSpec {
71    pub restartPolicy: String,
72    pub dnsPolicy: String,
73    pub terminationGracePeriodSeconds: i64,
74    pub containers: Vec<DeploymentContainers>
75}
76
77#[derive(Serialize, Deserialize, Default,Debug)]
78pub struct DeploymentContainers {
79    pub name: String,
80    pub image: String,
81    pub imagePullPolicy: String,
82    pub command: Vec<String>,
83    pub resources: DeploymentResources,
84    pub ports: Vec<DeploymentPorts>,
85    pub livenessProbe: DeploymentProbe,
86    pub readinessProbe: DeploymentProbe,
87    pub env: Vec<DeploymentEnvs>
88}
89
90#[derive(Serialize, Deserialize, Default,Debug)]
91pub struct DeploymentResources {
92    pub requests: DeploymentResourcesRequests,
93    pub limits: DeploymentResourcesLimits,
94}
95
96#[derive(Serialize, Deserialize, Default,Debug)]
97pub struct DeploymentResourcesRequests {
98    pub memory: String,
99    pub cpu: f32
100}
101
102#[derive(Serialize, Deserialize, Default,Debug)]
103pub struct DeploymentResourcesLimits {
104    pub memory: String,
105    pub cpu: f32
106}
107
108#[derive(Serialize, Deserialize, Default,Debug)]
109pub struct DeploymentProbe {
110    pub failureThreshold: i32,
111    pub httpGet: HttpProbe,
112    pub initialDelaySeconds: i32,
113    pub periodSeconds: i32,
114    pub successThreshold: i8,
115    pub timeoutSeconds: i32
116}
117
118#[derive(Serialize, Deserialize, Default,Debug)]
119pub struct HttpProbe {
120    pub path: String,
121    pub port: i64,
122    pub scheme: String,
123}
124
125#[derive(Serialize, Deserialize, Default,Debug)]
126pub struct DeploymentPorts {
127    pub containerPort: i64,
128    pub protocol: String
129}
130
131#[derive(Serialize, Deserialize, Default,Debug)]
132pub struct DeploymentEnvs {
133    pub name: String,
134    pub value: String
135}
136
137// Update Deployment
138// Handle with care !
139
140#[derive(Serialize, Deserialize, Default,Debug)]
141pub struct UpdateDeployment {
142    pub apiVersion: String,
143    pub kind: String,
144    pub metadata: DeploymentMetadata,
145    pub spec: UpdateDeploymentSpec,
146}
147
148#[derive(Serialize, Deserialize, Default,Debug)]
149pub struct UpdateDeploymentSpec {
150    pub selector: UpdateDeploymentSelector,
151    pub template: UpdateDeploymentTemplate,
152}
153
154#[derive(Serialize, Deserialize, Default,Debug)]
155pub struct UpdateDeploymentSelector {
156    pub matchLabels: UpdateSelectorLabels 
157}
158
159#[derive(Serialize, Deserialize, Default,Debug)]
160pub struct UpdateSelectorLabels {
161    pub app: String
162}
163
164#[derive(Serialize, Deserialize, Default,Debug)]
165pub struct UpdateDeploymentTemplate {
166    pub metadata: UpdateDeploymentTemplateMetadata,
167    pub spec: UpdateDeploymentTemplateSpec
168}
169
170#[derive(Serialize, Deserialize, Default,Debug)]
171pub struct UpdateDeploymentTemplateMetadata {
172    pub labels: UpdateDeploymentTemplateMetadataLabels
173}
174
175#[derive(Serialize, Deserialize, Default,Debug)]
176pub struct UpdateDeploymentTemplateMetadataLabels {
177    pub app: String
178}
179
180#[derive(Serialize, Deserialize, Default,Debug)]
181pub struct UpdateDeploymentTemplateSpec {
182    pub containers: Option<Vec<UpdateDeploymentContainers>>
183}
184
185#[derive(Serialize, Deserialize, Default,Debug)]
186pub struct UpdateDeploymentContainers {
187    pub name: String,
188    #[serde(skip_serializing_if = "Option::is_none")]
189    #[serde(default)]
190    pub image: Option<String>,
191    #[serde(skip_serializing_if = "Option::is_none")]
192    #[serde(default)]
193    pub imagePullPolicy: Option<String>,
194    #[serde(skip_serializing_if = "Option::is_none")]
195    #[serde(default)]
196    pub command: Option<Vec<String>>,
197    #[serde(skip_serializing_if = "Option::is_none")]
198    #[serde(default)]    
199    pub resources: Option<DeploymentResources>,
200    #[serde(skip_serializing_if = "Option::is_none")]
201    #[serde(default)]
202    pub ports: Option<Vec<DeploymentPorts>>,
203    #[serde(skip_serializing_if = "Option::is_none")]
204    #[serde(default)]
205    pub livenessProbe: Option<DeploymentProbe>,
206    #[serde(skip_serializing_if = "Option::is_none")]
207    #[serde(default)]
208    pub readinessProbe: Option<DeploymentProbe>,
209    #[serde(skip_serializing_if = "Option::is_none")]
210    #[serde(default)]
211    pub env: Option<Vec<DeploymentEnvs>>
212}
213