Skip to content

Commit e735f8a

Browse files
author
Natalie Arellano
committed
WIP: try to get e2e test for extensions
Signed-off-by: Natalie Arellano <narellano@vmware.com>
1 parent dd5c115 commit e735f8a

31 files changed

Lines changed: 1115 additions & 94 deletions

DEVELOPMENT.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,6 @@ IMAGE_REGISTRY=gcr.io/<some-project> \
9191
make e2e
9292
```
9393

94-
* The IMAGE_REGISTRY environment variable must point at a registry with local write access - e.g.
95-
96-
```bash
97-
export IMAGE_REGISTRY="gcr.io/<some-project>"
98-
```
99-
10094
* The KPACK_TEST_NAMESPACE_LABELS environment variable allows you to define additional labels for the test namespace, e.g.
10195

10296
```bash

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ unit-ci:
1010
$(GOCMD) test ./pkg/... -coverprofile=coverage.txt -covermode=atomic
1111

1212
e2e:
13-
$(GOCMD) test --timeout=30m -v ./test/...
13+
$(GOCMD) test --timeout=30m -failfast -v ./test/...
1414

1515
.PHONY: unit unit-ci e2e

cmd/controller/main.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,10 @@ import (
5050
"github.com/pivotal/kpack/pkg/reconciler/buildpack"
5151
"github.com/pivotal/kpack/pkg/reconciler/clusterbuilder"
5252
"github.com/pivotal/kpack/pkg/reconciler/clusterbuildpack"
53+
"github.com/pivotal/kpack/pkg/reconciler/clusterextension"
5354
"github.com/pivotal/kpack/pkg/reconciler/clusterstack"
5455
"github.com/pivotal/kpack/pkg/reconciler/clusterstore"
56+
"github.com/pivotal/kpack/pkg/reconciler/extension"
5557
"github.com/pivotal/kpack/pkg/reconciler/image"
5658
"github.com/pivotal/kpack/pkg/reconciler/lifecycle"
5759
"github.com/pivotal/kpack/pkg/reconciler/sourceresolver"
@@ -207,8 +209,10 @@ func main() {
207209
sourceResolverController := sourceresolver.NewController(ctx, options, sourceResolverInformer, gitResolver, blobResolver, registryResolver)
208210
builderController, builderResync := builder.NewController(ctx, options, builderInformer, builderCreator, keychainFactory, clusterStoreInformer, buildpackInformer, clusterBuildpackInformer, clusterStackInformer, extensionInformer, clusterExtensionInformer)
209211
buildpackController := buildpack.NewController(ctx, options, keychainFactory, buildpackInformer, remoteStoreReader)
212+
extensionController := extension.NewController(ctx, options, keychainFactory, extensionInformer, remoteStoreReader)
210213
clusterBuilderController, clusterBuilderResync := clusterbuilder.NewController(ctx, options, clusterBuilderInformer, builderCreator, keychainFactory, clusterStoreInformer, clusterBuildpackInformer, clusterStackInformer, clusterExtensionInformer)
211214
clusterBuildpackController := clusterbuildpack.NewController(ctx, options, keychainFactory, clusterBuildpackInformer, remoteStoreReader)
215+
clusterExtensionController := clusterextension.NewController(ctx, options, keychainFactory, clusterExtensionInformer, remoteStoreReader)
212216
clusterStoreController := clusterstore.NewController(ctx, options, keychainFactory, clusterStoreInformer, remoteStoreReader)
213217
clusterStackController := clusterstack.NewController(ctx, options, keychainFactory, clusterStackInformer, remoteStackReader)
214218
lifecycleController := lifecycle.NewController(ctx, options, k8sClient, config.LifecycleConfigName, lifecycleConfigmapInformer, lifecycleProvider)
@@ -243,8 +247,10 @@ func main() {
243247
run(buildController, routinesPerController),
244248
run(builderController, routinesPerController),
245249
run(buildpackController, routinesPerController),
250+
run(extensionController, routinesPerController),
246251
run(clusterBuilderController, routinesPerController),
247252
run(clusterBuildpackController, routinesPerController),
253+
run(clusterExtensionController, routinesPerController),
248254
run(clusterStoreController, routinesPerController),
249255
run(lifecycleController, routinesPerController),
250256
run(sourceResolverController, 2*routinesPerController),

config/clusterextension.yaml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: clusterextensions.kpack.io
5+
spec:
6+
group: kpack.io
7+
versions:
8+
- name: v1alpha2
9+
served: true
10+
storage: true
11+
schema:
12+
openAPIV3Schema:
13+
type: object
14+
x-kubernetes-preserve-unknown-fields: true
15+
subresources:
16+
status: {}
17+
additionalPrinterColumns:
18+
- name: Ready
19+
type: string
20+
jsonPath: ".status.conditions[?(@.type==\"Ready\")].status"
21+
names:
22+
kind: ClusterExtension
23+
listKind: ClusterExtensionList
24+
singular: clusterextension
25+
plural: clusterextensions
26+
shortNames:
27+
- clstext
28+
- clstexts
29+
categories:
30+
- kpack
31+
scope: Cluster

config/extension.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: extensions.kpack.io
5+
spec:
6+
group: kpack.io
7+
versions:
8+
- name: v1alpha2
9+
served: true
10+
storage: true
11+
schema:
12+
openAPIV3Schema:
13+
type: object
14+
x-kubernetes-preserve-unknown-fields: true
15+
subresources:
16+
status: {}
17+
additionalPrinterColumns:
18+
- name: Ready
19+
type: string
20+
jsonPath: ".status.conditions[?(@.type==\"Ready\")].status"
21+
names:
22+
kind: Extension
23+
listKind: ExtensionList
24+
singular: extension
25+
plural: extensions
26+
shortNames:
27+
- ext
28+
- exts
29+
categories:
30+
- kpack
31+
scope: Namespaced
32+

go.sum

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
5858
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
5959
filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
6060
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
61-
github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230618160516-e936619f9f18 h1:rd389Q26LMy03gG4anandGFC2LW/xvjga5GezeeaxQk=
61+
github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230919221257-8b5d3ce2d11d h1:zjqpY4C7H15HjRPEenkS4SAn3Jy2eRRjkjZbGR30TOg=
6262
github.com/AliyunContainerService/ack-ram-tool/pkg/credentials/alibabacloudsdkgo/helper v0.2.0 h1:8+4G8JaejP8Xa6W46PzJEwisNgBXMvFcz78N6zG/ARw=
6363
github.com/AliyunContainerService/ack-ram-tool/pkg/credentials/alibabacloudsdkgo/helper v0.2.0/go.mod h1:GgeIE+1be8Ivm7Sh4RgwI42aTtC9qrcj+Y9Y6CjJhJs=
6464
github.com/Azure/azure-sdk-for-go v55.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=

hack/common.sh

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,23 @@ function compile() {
3838
pack_build ${controller_image} "./cmd/controller"
3939
controller_image=${resolved_image_name}
4040

41-
pack_build ${build_waiter_image} "./cmd/build-waiter"
42-
build_waiter_image=${resolved_image_name}
43-
44-
pack_build ${webhook_image} "./cmd/webhook"
45-
webhook_image=${resolved_image_name}
41+
# pack_build ${build_waiter_image} "./cmd/build-waiter"
42+
# build_waiter_image=${resolved_image_name}
43+
#
44+
# pack_build ${webhook_image} "./cmd/webhook"
45+
# webhook_image=${resolved_image_name}
4646

4747
pack_build ${build_init_image} "./cmd/build-init"
4848
build_init_image=${resolved_image_name}
4949

50-
pack_build ${rebase_image} "./cmd/rebase"
51-
rebase_image=${resolved_image_name}
52-
53-
pack_build ${completion_image} "./cmd/completion"
54-
completion_image=${resolved_image_name}
55-
56-
lifecycle_image_build ${lifecycle_image}
57-
lifecycle_image=${resolved_image_name}
50+
# pack_build ${rebase_image} "./cmd/rebase"
51+
# rebase_image=${resolved_image_name}
52+
#
53+
# pack_build ${completion_image} "./cmd/completion"
54+
# completion_image=${resolved_image_name}
55+
#
56+
# lifecycle_image_build ${lifecycle_image}
57+
# lifecycle_image=${resolved_image_name}
5858

5959
ytt -f config/. \
6060
-v controller.image=${controller_image} \

pkg/apis/build/v1alpha2/build_pod.go

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,13 @@ func (c BuildContext) os() string {
126126
}
127127

128128
type BuildPodBuilderConfig struct {
129-
StackID string
130-
RunImage string
131-
Uid int64
132-
Gid int64
133-
PlatformAPIs []string
134-
OS string
129+
StackID string
130+
RunImage string
131+
Uid int64
132+
Gid int64
133+
PlatformAPIs []string
134+
OS string
135+
HasExtensions bool
135136
}
136137

137138
var (
@@ -633,6 +634,10 @@ func (b *Build) BuildPod(images BuildPodImages, buildContext BuildContext) (*cor
633634
pod = b.useStandardContainers(images.BuildWaiterImage, pod)
634635
}
635636

637+
if buildContext.BuildPodBuilderConfig.HasExtensions && buildContext.os() != "windows" {
638+
b.useImageExtensions(pod)
639+
}
640+
636641
return pod, nil
637642
}
638643

@@ -713,7 +718,6 @@ func setUpBuildWaiter(container corev1.Container, waitFile string) corev1.Contai
713718
}
714719

715720
func (b *Build) useStandardContainers(buildWaiterImage string, pod *corev1.Pod) *corev1.Pod {
716-
717721
containers := pod.Spec.InitContainers
718722
pod.Spec.InitContainers = []corev1.Container{
719723
{
@@ -770,6 +774,16 @@ func (b *Build) useStandardContainers(buildWaiterImage string, pod *corev1.Pod)
770774
return pod
771775
}
772776

777+
func (b *Build) useImageExtensions(pod *corev1.Pod) {
778+
kanikoVolume := corev1.Volume{
779+
Name: "kaniko",
780+
VolumeSource: corev1.VolumeSource{
781+
EmptyDir: &corev1.EmptyDirVolumeSource{},
782+
},
783+
}
784+
pod.Spec.Volumes = append(pod.Spec.Volumes, kanikoVolume)
785+
}
786+
773787
func userprofileHomeEnv() stepModifier {
774788
return func(container corev1.Container) corev1.Container {
775789
for i, env := range container.Env {
@@ -1085,7 +1099,11 @@ func (b *Build) setupCosignVolumes(secrets []corev1.Secret) ([]corev1.Volume, []
10851099
}
10861100

10871101
var (
1088-
supportedPlatformAPIVersions = []*semver.Version{semver.MustParse("0.9"), semver.MustParse("0.8"), semver.MustParse("0.7")}
1102+
supportedPlatformAPIVersions = []*semver.Version{
1103+
semver.MustParse("0.9"),
1104+
semver.MustParse("0.8"),
1105+
semver.MustParse("0.7"),
1106+
}
10891107
)
10901108

10911109
func (bc BuildContext) highestSupportedPlatformAPI(b *Build) (*semver.Version, error) {

pkg/apis/build/v1alpha2/build_pod_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,7 @@ func testBuildPod(t *testing.T, when spec.G, it spec.S) {
889889
"someimage/name:tag3",
890890
}, pod.Spec.InitContainers[5].Args)
891891
})
892+
892893
it("configures export step with non-web default process", func() {
893894
build.Spec.DefaultProcess = "sys-info"
894895
pod, err := build.BuildPod(config, buildContext)
@@ -2460,6 +2461,40 @@ func testBuildPod(t *testing.T, when spec.G, it spec.S) {
24602461
})
24612462
})
24622463

2464+
when.Focus("builder has extensions", func() {
2465+
it.Before(func() {
2466+
buildContext.BuildPodBuilderConfig.HasExtensions = true
2467+
})
2468+
2469+
it("runs the extender instead of the builder", func() {
2470+
pod, err := build.BuildPod(config, buildContext)
2471+
require.NoError(t, err)
2472+
2473+
assert.Equal(t, pod.Spec.)
2474+
})
2475+
2476+
it("adds kaniko volume to pod", func() {
2477+
pod, err := build.BuildPod(config, buildContext)
2478+
require.NoError(t, err)
2479+
2480+
assert.Contains(t, pod.Spec.Volumes, corev1.Volume{
2481+
Name: "kaniko",
2482+
VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}},
2483+
})
2484+
})
2485+
2486+
it("mounts kaniko volume during restore and extend", func() {
2487+
_, err := build.BuildPod(config, buildContext)
2488+
require.NoError(t, err)
2489+
2490+
// assert.Subset(t, pod.Spec.InitContainers[0].VolumeMounts, []corev1.VolumeMount{})
2491+
})
2492+
2493+
it("is possible to use standard containers", func() {
2494+
// TODO
2495+
})
2496+
})
2497+
24632498
when("complying with the restricted pod security standard", func() {
24642499
// enforces https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted
24652500
var pod *corev1.Pod

pkg/apis/build/v1alpha2/builder_conversion.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func (bs *NamespacedBuilderSpec) convertFrom(from *v1alpha1.NamespacedBuilderSpe
8282

8383
func (bst *BuilderStatus) convertFrom(from *v1alpha1.BuilderStatus) {
8484
bst.Status = from.Status
85-
bst.BuilderMetadata = from.BuilderMetadata
85+
bst.BuilderMetadataBuildpacks = from.BuilderMetadata
8686
bst.Order = from.Order
8787
bst.Stack = from.Stack
8888
bst.LatestImage = from.LatestImage
@@ -93,7 +93,7 @@ func (bst *BuilderStatus) convertFrom(from *v1alpha1.BuilderStatus) {
9393

9494
func (bst *BuilderStatus) convertTo(to *v1alpha1.BuilderStatus) {
9595
to.Status = bst.Status
96-
to.BuilderMetadata = bst.BuilderMetadata
96+
to.BuilderMetadata = bst.BuilderMetadataBuildpacks
9797
to.Order = bst.Order
9898
to.Stack = bst.Stack
9999
to.LatestImage = bst.LatestImage

0 commit comments

Comments
 (0)