@@ -73,19 +73,35 @@ func NewImageManager(recorder record.EventRecorder, imageService kubecontainer.I
73
73
}
74
74
}
75
75
76
- // shouldPullImage returns whether we should pull an image according to
77
- // the presence and pull policy of the image.
78
- func shouldPullImage (pullPolicy v1.PullPolicy , imagePresent bool ) bool {
79
- if pullPolicy == v1 .PullNever {
80
- return false
81
- }
82
-
83
- if pullPolicy == v1 .PullAlways ||
84
- (pullPolicy == v1 .PullIfNotPresent && (! imagePresent )) {
85
- return true
76
+ // imagePullPrecheck inspects the pull policy and checks for image presence accordingly,
77
+ // returning (imageRef, error msg, err) and logging any errors.
78
+ func (m * imageManager ) imagePullPrecheck (ctx context.Context , objRef * v1.ObjectReference , logPrefix string , pullPolicy v1.PullPolicy , spec * kubecontainer.ImageSpec , imgRef string ) (imageRef string , msg string , err error ) {
79
+ switch pullPolicy {
80
+ case v1 .PullAlways :
81
+ return "" , msg , nil
82
+ case v1 .PullIfNotPresent :
83
+ imageRef , err = m .imageService .GetImageRef (ctx , * spec )
84
+ if err != nil {
85
+ msg = fmt .Sprintf ("Failed to inspect image %q: %v" , imageRef , err )
86
+ m .logIt (objRef , v1 .EventTypeWarning , events .FailedToInspectImage , logPrefix , msg , klog .Warning )
87
+ return "" , msg , ErrImageInspect
88
+ }
89
+ return imageRef , msg , nil
90
+ case v1 .PullNever :
91
+ imageRef , err = m .imageService .GetImageRef (ctx , * spec )
92
+ if err != nil {
93
+ msg = fmt .Sprintf ("Failed to inspect image %q: %v" , imageRef , err )
94
+ m .logIt (objRef , v1 .EventTypeWarning , events .FailedToInspectImage , logPrefix , msg , klog .Warning )
95
+ return "" , msg , ErrImageInspect
96
+ }
97
+ if imageRef == "" {
98
+ msg = fmt .Sprintf ("Container image %q is not present with pull policy of Never" , imgRef )
99
+ m .logIt (objRef , v1 .EventTypeWarning , events .ErrImageNeverPullPolicy , logPrefix , msg , klog .Warning )
100
+ return "" , msg , ErrImageNeverPull
101
+ }
102
+ return imageRef , msg , nil
86
103
}
87
-
88
- return false
104
+ return
89
105
}
90
106
91
107
// records an event using ref, event msg. log to glog using prefix, msg, logFn
@@ -124,23 +140,14 @@ func (m *imageManager) EnsureImageExists(ctx context.Context, objRef *v1.ObjectR
124
140
RuntimeHandler : podRuntimeHandler ,
125
141
}
126
142
127
- imageRef , err = m .imageService . GetImageRef (ctx , spec )
143
+ imageRef , message , err = m .imagePullPrecheck (ctx , objRef , logPrefix , pullPolicy , & spec , imgRef )
128
144
if err != nil {
129
- msg := fmt .Sprintf ("Failed to inspect image %q: %v" , imgRef , err )
130
- m .logIt (objRef , v1 .EventTypeWarning , events .FailedToInspectImage , logPrefix , msg , klog .Warning )
131
- return "" , msg , ErrImageInspect
145
+ return "" , message , err
132
146
}
133
-
134
- present := imageRef != ""
135
- if ! shouldPullImage (pullPolicy , present ) {
136
- if present {
137
- msg := fmt .Sprintf ("Container image %q already present on machine" , imgRef )
138
- m .logIt (objRef , v1 .EventTypeNormal , events .PulledImage , logPrefix , msg , klog .Info )
139
- return imageRef , "" , nil
140
- }
141
- msg := fmt .Sprintf ("Container image %q is not present with pull policy of Never" , imgRef )
142
- m .logIt (objRef , v1 .EventTypeWarning , events .ErrImageNeverPullPolicy , logPrefix , msg , klog .Warning )
143
- return "" , msg , ErrImageNeverPull
147
+ if imageRef != "" {
148
+ msg := fmt .Sprintf ("Container image %q already present on machine" , imgRef )
149
+ m .logIt (objRef , v1 .EventTypeNormal , events .PulledImage , logPrefix , msg , klog .Info )
150
+ return imageRef , msg , nil
144
151
}
145
152
146
153
backOffKey := fmt .Sprintf ("%s_%s" , pod .UID , imgRef )
0 commit comments