@@ -3,6 +3,7 @@ package meta
3
3
import (
4
4
"fmt"
5
5
6
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
6
7
"k8s.io/apimachinery/pkg/runtime"
7
8
"k8s.io/apimachinery/pkg/runtime/schema"
8
9
"k8s.io/apimachinery/pkg/util/validation/field"
@@ -92,7 +93,9 @@ func GetPodSpec(obj runtime.Object) (*kapi.PodSpec, *field.Path, error) {
92
93
case * kapi.PodTemplate :
93
94
return & r .Template .Spec , field .NewPath ("template" , "spec" ), nil
94
95
case * kapi.ReplicationController :
95
- return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
96
+ if r .Spec .Template != nil {
97
+ return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
98
+ }
96
99
case * extensions.DaemonSet :
97
100
return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
98
101
case * extensions.Deployment :
@@ -114,7 +117,9 @@ func GetPodSpec(obj runtime.Object) (*kapi.PodSpec, *field.Path, error) {
114
117
case * securityapi.PodSecurityPolicyReview :
115
118
return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
116
119
case * deployapi.DeploymentConfig :
117
- return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
120
+ if r .Spec .Template != nil {
121
+ return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
122
+ }
118
123
}
119
124
return nil , nil , errNoPodSpec
120
125
}
@@ -129,7 +134,9 @@ func GetPodSpecV1(obj runtime.Object) (*kapiv1.PodSpec, *field.Path, error) {
129
134
case * kapiv1.PodTemplate :
130
135
return & r .Template .Spec , field .NewPath ("template" , "spec" ), nil
131
136
case * kapiv1.ReplicationController :
132
- return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
137
+ if r .Spec .Template != nil {
138
+ return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
139
+ }
133
140
case * extensionsv1beta1.DaemonSet :
134
141
return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
135
142
case * extensionsv1beta1.Deployment :
@@ -153,11 +160,83 @@ func GetPodSpecV1(obj runtime.Object) (*kapiv1.PodSpec, *field.Path, error) {
153
160
case * securityapiv1.PodSecurityPolicyReview :
154
161
return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
155
162
case * deployapiv1.DeploymentConfig :
156
- return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
163
+ if r .Spec .Template != nil {
164
+ return & r .Spec .Template .Spec , field .NewPath ("spec" , "template" , "spec" ), nil
165
+ }
157
166
}
158
167
return nil , nil , errNoPodSpec
159
168
}
160
169
170
+ // GetTemplateMetaObject returns a mutable metav1.Object interface for the template
171
+ // the object contains, or false if no such object is available.
172
+ func GetTemplateMetaObject (obj runtime.Object ) (metav1.Object , bool ) {
173
+ switch r := obj .(type ) {
174
+ case * kapiv1.PodTemplate :
175
+ return & r .Template .ObjectMeta , true
176
+ case * kapiv1.ReplicationController :
177
+ if r .Spec .Template != nil {
178
+ return & r .Spec .Template .ObjectMeta , true
179
+ }
180
+ case * extensionsv1beta1.DaemonSet :
181
+ return & r .Spec .Template .ObjectMeta , true
182
+ case * extensionsv1beta1.Deployment :
183
+ return & r .Spec .Template .ObjectMeta , true
184
+ case * extensionsv1beta1.ReplicaSet :
185
+ return & r .Spec .Template .ObjectMeta , true
186
+ case * batchv1.Job :
187
+ return & r .Spec .Template .ObjectMeta , true
188
+ case * batchv2alpha1.CronJob :
189
+ return & r .Spec .JobTemplate .Spec .Template .ObjectMeta , true
190
+ case * batchv2alpha1.JobTemplate :
191
+ return & r .Template .Spec .Template .ObjectMeta , true
192
+ case * appsv1beta1.StatefulSet :
193
+ return & r .Spec .Template .ObjectMeta , true
194
+ case * appsv1beta1.Deployment :
195
+ return & r .Spec .Template .ObjectMeta , true
196
+ case * securityapiv1.PodSecurityPolicySubjectReview :
197
+ return & r .Spec .Template .ObjectMeta , true
198
+ case * securityapiv1.PodSecurityPolicySelfSubjectReview :
199
+ return & r .Spec .Template .ObjectMeta , true
200
+ case * securityapiv1.PodSecurityPolicyReview :
201
+ return & r .Spec .Template .ObjectMeta , true
202
+ case * deployapiv1.DeploymentConfig :
203
+ if r .Spec .Template != nil {
204
+ return & r .Spec .Template .ObjectMeta , true
205
+ }
206
+ case * kapi.PodTemplate :
207
+ return & r .Template .ObjectMeta , true
208
+ case * kapi.ReplicationController :
209
+ if r .Spec .Template != nil {
210
+ return & r .Spec .Template .ObjectMeta , true
211
+ }
212
+ case * extensions.DaemonSet :
213
+ return & r .Spec .Template .ObjectMeta , true
214
+ case * extensions.Deployment :
215
+ return & r .Spec .Template .ObjectMeta , true
216
+ case * extensions.ReplicaSet :
217
+ return & r .Spec .Template .ObjectMeta , true
218
+ case * batch.Job :
219
+ return & r .Spec .Template .ObjectMeta , true
220
+ case * batch.CronJob :
221
+ return & r .Spec .JobTemplate .Spec .Template .ObjectMeta , true
222
+ case * batch.JobTemplate :
223
+ return & r .Template .Spec .Template .ObjectMeta , true
224
+ case * apps.StatefulSet :
225
+ return & r .Spec .Template .ObjectMeta , true
226
+ case * securityapi.PodSecurityPolicySubjectReview :
227
+ return & r .Spec .Template .ObjectMeta , true
228
+ case * securityapi.PodSecurityPolicySelfSubjectReview :
229
+ return & r .Spec .Template .ObjectMeta , true
230
+ case * securityapi.PodSecurityPolicyReview :
231
+ return & r .Spec .Template .ObjectMeta , true
232
+ case * deployapi.DeploymentConfig :
233
+ if r .Spec .Template != nil {
234
+ return & r .Spec .Template .ObjectMeta , true
235
+ }
236
+ }
237
+ return nil , false
238
+ }
239
+
161
240
type containerMutator struct {
162
241
* kapi.Container
163
242
}
0 commit comments