1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#![cfg(all(test, feature = "k8s_openapi_convert"))]
use crate::OptionableConvert;
use crate::k8s_openapi::api::{
apps::v1::{DeploymentAc, DeploymentSpecAc},
core::v1::{ContainerAc, EnvVarAc, PodSpecAc, PodTemplateSpecAc},
};
use k8s_openapi027::api::{
apps::v1::{Deployment, DeploymentSpec},
core::v1::{Container, EnvVar, PodSpec, PodTemplateSpec},
};
use k8s_openapi027::apimachinery::pkg::apis::meta::v1::ObjectMeta;
#[test]
fn merge_deployment() {
let mut deploy = Deployment {
metadata: ObjectMeta {
name: Some("hello".to_owned()),
..Default::default()
},
spec: Some(DeploymentSpec {
replicas: Some(2),
template: PodTemplateSpec {
metadata: Some(ObjectMeta {
name: Some("hello".to_owned()),
..Default::default()
}),
spec: Some(PodSpec {
containers: vec![Container {
name: "app".to_owned(),
env: Some(vec![
EnvVar {
name: "hello1".to_owned(),
value: Some("world1".to_owned()),
..Default::default()
},
EnvVar {
name: "hello2".to_owned(),
value: Some("world2".to_owned()),
..Default::default()
},
]),
..Default::default()
}],
..Default::default()
}),
},
..Default::default()
}),
..Default::default()
};
let deploy_ac = DeploymentAc {
metadata: ObjectMeta {
name: Some("hello".to_owned()),
..Default::default()
},
spec: Some(DeploymentSpecAc {
template: Some(PodTemplateSpecAc {
spec: Some(PodSpecAc {
containers: Some(vec![ContainerAc {
name: "app".to_owned(),
env: Some(vec![
EnvVarAc {
name: "hello3".to_owned(),
value: Some("world3".to_owned()),
..Default::default()
},
EnvVarAc {
name: "hello2".to_owned(),
value: Some("world4".to_owned()),
..Default::default()
},
]),
..Default::default()
}]),
..Default::default()
}),
..Default::default()
}),
..Default::default()
}),
..Default::default()
};
deploy.merge(deploy_ac).unwrap();
assert_eq!(
deploy,
Deployment {
metadata: ObjectMeta {
name: Some("hello".to_owned()),
..Default::default()
},
spec: Some(DeploymentSpec {
replicas: Some(2),
template: PodTemplateSpec {
metadata: Some(ObjectMeta {
name: Some("hello".to_owned()),
..Default::default()
}),
spec: Some(PodSpec {
containers: vec![Container {
name: "app".to_owned(),
env: Some(vec![
EnvVar {
name: "hello1".to_owned(),
value: Some("world1".to_owned()),
..Default::default()
},
// merge patched
EnvVar {
name: "hello2".to_owned(),
value: Some("world4".to_owned()),
..Default::default()
},
// appended
EnvVar {
name: "hello3".to_owned(),
value: Some("world3".to_owned()),
..Default::default()
},
]),
..Default::default()
}],
..Default::default()
}),
},
..Default::default()
}),
..Default::default()
}
);
}