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    pub volumeClaimTemplates: Option<Vec<VolumeClaimTemplate>>
30}
31
32#[derive(Serialize, Deserialize, Default,Debug)]
33pub struct DeploymentSpecStrategy {
34    pub r#type: String,
35    pub rollingUpdate: RollingUpdate
36}
37
38#[derive(Serialize, Deserialize, Default,Debug)]
39pub struct RollingUpdate {
40    pub maxSurge: String,
41    pub maxUnavailable: String,
42}
43
44#[derive(Serialize, Deserialize, Default,Debug)]
45pub struct DeploymentSelector {
46    pub matchLabels: SelectorLabels
47}
48
49#[derive(Serialize, Deserialize, Default,Debug)]
50pub struct SelectorLabels {
51    pub app: String
52}
53
54#[derive(Serialize, Deserialize, Default,Debug)]
55pub struct DeploymentTemplate {
56    pub metadata: DeploymentTemplateMetadata,
57    pub spec: DeploymentTemplateSpec
58}
59
60#[derive(Serialize, Deserialize, Default,Debug)]
61pub struct DeploymentTemplateMetadata {
62    pub labels: DeploymentTemplateMetadataLabels
63}
64
65#[derive(Serialize, Deserialize, Default,Debug)]
66pub struct DeploymentTemplateMetadataLabels {
67    pub app: String
68}
69
70#[derive(Serialize, Deserialize, Default,Debug)]
71pub struct DeploymentTemplateSpec {
72    pub restartPolicy: String,
73    pub dnsPolicy: String,
74    pub terminationGracePeriodSeconds: i64,
75    pub containers: Vec<DeploymentContainers>,
76    pub volumes: Option<Vec<ContainerVolumes>>
77}
78
79#[derive(Serialize, Deserialize, Default,Debug)]
80pub struct DeploymentContainers {
81    pub name: String,
82    pub image: String,
83    pub imagePullPolicy: String,
84    pub command: Vec<String>,
85    pub resources: DeploymentResources,
86    pub ports: Vec<DeploymentPorts>,
87    pub livenessProbe: DeploymentProbe,
88    pub readinessProbe: DeploymentProbe,
89    pub env: Option<Vec<DeploymentEnvSpecs>>,
90    pub volumeMounts: Option<Vec<VolumeMounts>>
91}
92
93#[derive(Serialize, Deserialize, Default,Debug)]
94pub struct DeploymentResources {
95    pub requests: DeploymentResourcesRequests,
96    pub limits: DeploymentResourcesLimits,
97}
98
99#[derive(Serialize, Deserialize, Default,Debug)]
100pub struct DeploymentResourcesRequests {
101    pub memory: String,
102    pub cpu: f32
103}
104
105#[derive(Serialize, Deserialize, Default,Debug)]
106pub struct DeploymentResourcesLimits {
107    pub memory: String,
108    pub cpu: f32
109}
110
111#[derive(Serialize, Deserialize, Default,Debug)]
112pub struct DeploymentProbe {
113    pub failureThreshold: i32,
114    pub httpGet: HttpProbe,
115    pub initialDelaySeconds: i32,
116    pub periodSeconds: i32,
117    pub successThreshold: i8,
118    pub timeoutSeconds: i32
119}
120
121#[derive(Serialize, Deserialize, Default,Debug)]
122pub struct HttpProbe {
123    pub path: String,
124    pub port: i64,
125    pub scheme: String,
126}
127
128#[derive(Serialize, Deserialize, Default,Debug)]
129pub struct DeploymentPorts {
130    pub containerPort: i64,
131    pub protocol: String
132}
133
134// Update Deployment
135// Handle with care !
136
137#[derive(Serialize, Deserialize, Default,Debug)]
138pub struct UpdateDeployment {
139    pub apiVersion: String,
140    pub kind: String,
141    pub metadata: DeploymentMetadata,
142    pub spec: UpdateDeploymentSpec,
143}
144
145#[derive(Serialize, Deserialize, Default,Debug)]
146pub struct UpdateDeploymentSpec {
147    pub strategy: UpdateDeploymentSpecStrategy,
148    pub replicas: i32,
149    pub selector: UpdateDeploymentSelector,
150    pub template: UpdateDeploymentTemplate,
151    pub volumeClaimTemplates: Option<Vec<VolumeClaimTemplate>>
152}
153
154#[derive(Serialize, Deserialize, Default,Debug)]
155pub struct UpdateDeploymentSpecStrategy {
156    pub r#type: String,
157    pub rollingUpdate: RollingUpdate
158}
159
160#[derive(Serialize, Deserialize, Default,Debug)]
161pub struct UpdateDeploymentSelector {
162    pub matchLabels: UpdateSelectorLabels 
163}
164
165#[derive(Serialize, Deserialize, Default,Debug)]
166pub struct UpdateSelectorLabels {
167    pub app: String
168}
169
170#[derive(Serialize, Deserialize, Default,Debug)]
171pub struct UpdateDeploymentTemplate {
172    pub metadata: UpdateDeploymentTemplateMetadata,
173    pub spec: UpdateDeploymentTemplateSpec
174}
175
176#[derive(Serialize, Deserialize, Default,Debug)]
177pub struct UpdateDeploymentTemplateMetadata {
178    pub labels: UpdateDeploymentTemplateMetadataLabels
179}
180
181#[derive(Serialize, Deserialize, Default,Debug)]
182pub struct UpdateDeploymentTemplateMetadataLabels {
183    pub app: String
184}
185
186#[derive(Serialize, Deserialize, Default,Debug)]
187pub struct UpdateDeploymentTemplateSpec {
188    pub restartPolicy: Option<String>,
189    pub dnsPolicy: Option<String>,
190    pub terminationGracePeriodSeconds: Option<i64>,
191    pub containers: Option<Vec<UpdateDeploymentContainers>>,
192    pub volumes: Option<Vec<ContainerVolumes>>
193}
194
195#[derive(Serialize, Deserialize, Default,Debug)]
196pub struct UpdateDeploymentContainers {
197    pub name: String,
198    #[serde(skip_serializing_if = "Option::is_none")]
199    #[serde(default)]
200    pub image: Option<String>,
201    #[serde(skip_serializing_if = "Option::is_none")]
202    #[serde(default)]
203    pub imagePullPolicy: Option<String>,
204    #[serde(skip_serializing_if = "Option::is_none")]
205    #[serde(default)]
206    pub command: Option<Vec<String>>,
207    #[serde(skip_serializing_if = "Option::is_none")]
208    #[serde(default)]    
209    pub resources: Option<DeploymentResources>,
210    #[serde(skip_serializing_if = "Option::is_none")]
211    #[serde(default)]
212    pub ports: Option<Vec<DeploymentPorts>>,
213    #[serde(skip_serializing_if = "Option::is_none")]
214    #[serde(default)]
215    pub livenessProbe: Option<DeploymentProbe>,
216    #[serde(skip_serializing_if = "Option::is_none")]
217    #[serde(default)]
218    pub readinessProbe: Option<DeploymentProbe>,
219    #[serde(skip_serializing_if = "Option::is_none")]
220    #[serde(default)]
221    pub env: Option<Vec<DeploymentEnvSpecs>>,
222    #[serde(skip_serializing_if = "Option::is_none")]
223    #[serde(default)]
224    pub volumeMounts: Option<Vec<VolumeMounts>>
225}
226
227#[derive(Serialize, Deserialize, Debug)]
228#[serde(untagged)]
229pub enum DeploymentEnvSpecs {
230    PlainValue(DeploymentEnvs),
231    SecretValue(DeploymentEnvSecret)
232}
233
234#[derive(Serialize, Deserialize, Default,Debug)]
235pub struct DeploymentEnvs {
236    pub name: String,
237    pub value: String
238}
239
240#[derive(Serialize, Deserialize, Default,Debug)]
241pub struct DeploymentEnvSecret {
242    pub name: String,
243    pub valueFrom: SecretValueFrom
244}
245
246#[derive(Serialize, Deserialize, Default,Debug)]
247pub struct SecretValueFrom {
248    pub secretKeyRef: SecretyKeyRef
249}
250
251#[derive(Serialize, Deserialize, Default,Debug)]
252pub struct SecretyKeyRef {
253    pub name: String,
254    pub key: String
255}
256
257#[derive(Serialize, Deserialize, Default,Debug)]
258pub struct VolumeMounts {
259    pub name: String,
260    pub mountPath: String
261}
262
263#[derive(Serialize, Deserialize, Default,Debug)]
264pub struct ContainerVolumes {
265    pub name: String,
266    pub configMap: VolumeConfigmap
267}
268
269#[derive(Serialize, Deserialize, Default,Debug)]
270pub struct VolumeConfigmap {
271    pub name: String,
272}
273
274#[derive(Serialize, Deserialize, Default,Debug)]
275pub struct VolumeClaimTemplate {
276    pub metadata: VolumeClaimMetadata,
277    pub spec: VolumeClaimSpec 
278}
279
280#[derive(Serialize, Deserialize, Default,Debug)]
281pub struct VolumeClaimMetadata {
282    pub name: String,
283}
284
285#[derive(Serialize, Deserialize, Default,Debug)]
286pub struct VolumeClaimSpec {
287    pub accessModes: Vec<String>,
288    pub resources: VolumeClaimResources
289}
290
291#[derive(Serialize, Deserialize, Default,Debug)]
292pub struct VolumeClaimResources {
293    pub requests: VolumeClaimResourcesRequests,
294}
295
296#[derive(Serialize, Deserialize, Default,Debug)]
297pub struct VolumeClaimResourcesRequests {
298    pub storage: String,
299}