Skip to content

Commit 226d770

Browse files
author
Aaron Schlesinger
committed
fix(gitreceive,k8s): use the api.PullPolicy type everywhere
And don’t hard-code api.PullAlways in buildPod. Also change tests to expose this regression.
1 parent 74aa81a commit 226d770

4 files changed

Lines changed: 66 additions & 15 deletions

File tree

pkg/gitreceive/build.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
"github.com/deis/builder/pkg"
1515
"github.com/deis/builder/pkg/git"
16+
"github.com/deis/builder/pkg/k8s"
1617
"github.com/deis/builder/pkg/storage"
1718
"github.com/deis/builder/pkg/sys"
1819
"github.com/deis/pkg/log"
@@ -51,6 +52,16 @@ func build(
5152
builderKey,
5253
rawGitSha string) error {
5354

55+
dockerBuilderImagePullPolicy, err := k8s.PullPolicyFromString(conf.DockerBuilderImagePullPolicy)
56+
if err != nil {
57+
return err
58+
}
59+
60+
slugBuilderImagePullPolicy, err := k8s.PullPolicyFromString(conf.SlugBuilderImagePullPolicy)
61+
if err != nil {
62+
return nil
63+
}
64+
5465
repo := conf.Repository
5566
gitSha, err := git.NewSha(rawGitSha)
5667
if err != nil {
@@ -133,7 +144,7 @@ func build(
133144
slugName,
134145
conf.StorageType,
135146
conf.DockerBuilderImage,
136-
conf.DockerBuilderImagePullPolicy,
147+
dockerBuilderImagePullPolicy,
137148
)
138149
} else {
139150
buildPodName = slugBuilderPodName(appName, gitSha.Short())
@@ -147,7 +158,7 @@ func build(
147158
buildPackURL,
148159
conf.StorageType,
149160
conf.SlugBuilderImage,
150-
conf.SlugBuilderImagePullPolicy,
161+
slugBuilderImagePullPolicy,
151162
)
152163
}
153164

pkg/gitreceive/k8s_util.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ func dockerBuilderPod(
4343
tarKey,
4444
imageName,
4545
storageType,
46-
dockerBuilderImage,
47-
dockerBuilderImagePullPolicy string,
46+
image string,
47+
pullPolicy api.PullPolicy,
4848
) *api.Pod {
4949

50-
pod := buildPod(debug, name, namespace, dockerBuilderImagePullPolicy, env)
50+
pod := buildPod(debug, name, namespace, pullPolicy, env)
5151

5252
pod.Spec.Containers[0].Name = dockerBuilderName
53-
pod.Spec.Containers[0].Image = dockerBuilderImage
53+
pod.Spec.Containers[0].Image = image
5454

5555
addEnvToPod(pod, tarPath, tarKey)
5656
addEnvToPod(pod, "IMG_NAME", imageName)
@@ -82,14 +82,14 @@ func slugbuilderPod(
8282
putKey,
8383
buildpackURL,
8484
storageType,
85-
slugBuilderImage,
86-
slugBuilderImagePullPolicy string,
85+
image string,
86+
pullPolicy api.PullPolicy,
8787
) *api.Pod {
8888

89-
pod := buildPod(debug, name, namespace, slugBuilderImagePullPolicy, env)
89+
pod := buildPod(debug, name, namespace, pullPolicy, env)
9090

9191
pod.Spec.Containers[0].Name = slugBuilderName
92-
pod.Spec.Containers[0].Image = slugBuilderImage
92+
pod.Spec.Containers[0].Image = image
9393

9494
addEnvToPod(pod, tarPath, tarKey)
9595
addEnvToPod(pod, putPath, putKey)
@@ -105,16 +105,16 @@ func slugbuilderPod(
105105
func buildPod(
106106
debug bool,
107107
name,
108-
namespace,
109-
imagePullPolicy string,
108+
namespace string,
109+
pullPolicy api.PullPolicy,
110110
env map[string]interface{}) api.Pod {
111111

112112
pod := api.Pod{
113113
Spec: api.PodSpec{
114114
RestartPolicy: api.RestartPolicyNever,
115115
Containers: []api.Container{
116116
api.Container{
117-
ImagePullPolicy: api.PullAlways,
117+
ImagePullPolicy: pullPolicy,
118118
},
119119
},
120120
Volumes: []api.Volume{},

pkg/gitreceive/k8s_util_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ func TestBuildPod(t *testing.T) {
6464
{true, "test", "default", emptyEnv, "tar", "put-url", "buildpack", "", api.PullAlways, ""},
6565
{true, "test", "default", env, "tar", "put-url", "buildpack", "", api.PullAlways, ""},
6666
{true, "test", "default", env, "tar", "put-url", "buildpack", "customimage", api.PullAlways, ""},
67+
{true, "test", "default", env, "tar", "put-url", "buildpack", "customimage", api.PullIfNotPresent, ""},
68+
{true, "test", "default", env, "tar", "put-url", "buildpack", "customimage", api.PullNever, ""},
6769
}
6870

6971
for _, build := range slugBuilds {
@@ -77,7 +79,7 @@ func TestBuildPod(t *testing.T) {
7779
build.buildPack,
7880
build.storageType,
7981
build.slugBuilderImage,
80-
string(build.slugBuilderImagePullPolicy),
82+
build.slugBuilderImagePullPolicy,
8183
)
8284

8385
if pod.ObjectMeta.Name != build.name {
@@ -116,6 +118,8 @@ func TestBuildPod(t *testing.T) {
116118
{true, "test", "default", emptyEnv, "tar", "img", "", api.PullAlways, ""},
117119
{true, "test", "default", env, "tar", "img", "", api.PullAlways, ""},
118120
{true, "test", "default", env, "tar", "img", "customimage", api.PullAlways, ""},
121+
{true, "test", "default", env, "tar", "img", "customimage", api.PullIfNotPresent, ""},
122+
{true, "test", "default", env, "tar", "img", "customimage", api.PullNever, ""},
119123
}
120124

121125
for _, build := range dockerBuilds {
@@ -128,7 +132,7 @@ func TestBuildPod(t *testing.T) {
128132
build.imgName,
129133
build.storageType,
130134
build.dockerBuilderImage,
131-
string(build.dockerBuilderImagePullPolicy),
135+
build.dockerBuilderImagePullPolicy,
132136
)
133137

134138
if pod.ObjectMeta.Name != build.name {

pkg/k8s/pull_policy.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package k8s
2+
3+
import (
4+
"fmt"
5+
6+
"k8s.io/kubernetes/pkg/api"
7+
)
8+
9+
var (
10+
emptyPullPolicy = api.PullPolicy("")
11+
// ValidPullPolicies is the set of pull policies that this package considers valid
12+
ValidPullPolicies = map[api.PullPolicy]struct{}{
13+
api.PullAlways: struct{}{},
14+
api.PullIfNotPresent: struct{}{},
15+
api.PullNever: struct{}{},
16+
}
17+
)
18+
19+
// ErrInvalidPullPolicy is the error returned when trying to convert an unknown string to an api.PullPolicy
20+
type ErrInvalidPullPolicy struct {
21+
str string
22+
}
23+
24+
// Error is the error interface implementation
25+
func (e ErrInvalidPullPolicy) Error() string {
26+
return fmt.Sprintf("%s is an invalid pull policy", e.str)
27+
}
28+
29+
// PullPolicyFromString converts a string into an api.PullPolicy. returns an error if the string does not match a pull policy in ValidPullPolicies()
30+
func PullPolicyFromString(ppStr string) (api.PullPolicy, error) {
31+
candidatePP := api.PullPolicy(ppStr)
32+
if _, ok := ValidPullPolicies[candidatePP]; !ok {
33+
return emptyPullPolicy, ErrInvalidPullPolicy{str: ppStr}
34+
}
35+
return candidatePP, nil
36+
}

0 commit comments

Comments
 (0)