From 97997f0ac7d015d855aee27f47b5981561101268 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Fri, 21 Apr 2023 17:11:54 -0400 Subject: [PATCH 1/4] respect cluster image pull configurations when creating an unpack job by using init containers to pull the catalog image , populate a volume with fbc configs, and use the opm image to render the configs from the volume fixes #21 Signed-off-by: Bryce Palmer --- .../core/catalogsource_controller.go | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/pkg/controllers/core/catalogsource_controller.go b/pkg/controllers/core/catalogsource_controller.go index a858adce..1ee45474 100644 --- a/pkg/controllers/core/catalogsource_controller.go +++ b/pkg/controllers/core/catalogsource_controller.go @@ -373,6 +373,8 @@ func (r *CatalogSourceReconciler) parseUnpackLogs(ctx context.Context, job *batc // unpackJob creates the manifest for an unpack Job given a CatalogSource func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batchv1.Job { + volName := "volumizer" + mountPath := "catalog-configs/" return &batchv1.Job{ ObjectMeta: metav1.ObjectMeta{ Namespace: "catalogd-system", @@ -386,6 +388,24 @@ func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batc }, Spec: v1.PodSpec{ RestartPolicy: v1.RestartPolicyOnFailure, + InitContainers: []v1.Container{ + { + Image: cs.Spec.Image, + Name: "initializer", + Command: []string{ + "cp", + "-r", + "configs/", // Do all FBC catalog images stuff everything under the configs/ directory? + mountPath, + }, + VolumeMounts: []v1.VolumeMount{ + { + Name: volName, + MountPath: mountPath, + }, + }, + }, + }, Containers: []v1.Container{ { Image: r.OpmImage, @@ -393,7 +413,21 @@ func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batc Command: []string{ "opm", "render", - cs.Spec.Image, + mountPath, + }, + VolumeMounts: []v1.VolumeMount{ + { + Name: volName, + MountPath: mountPath, + }, + }, + }, + }, + Volumes: []v1.Volume{ + { + Name: volName, + VolumeSource: v1.VolumeSource{ + EmptyDir: &v1.EmptyDirVolumeSource{}, }, }, }, From 93efc1e5ad76bfee165e193f263d76402fdd8350 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Mon, 24 Apr 2023 13:53:29 -0400 Subject: [PATCH 2/4] flip job containers around Signed-off-by: Bryce Palmer --- .../core/catalogsource_controller.go | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/pkg/controllers/core/catalogsource_controller.go b/pkg/controllers/core/catalogsource_controller.go index 1ee45474..5d5b6069 100644 --- a/pkg/controllers/core/catalogsource_controller.go +++ b/pkg/controllers/core/catalogsource_controller.go @@ -373,8 +373,8 @@ func (r *CatalogSourceReconciler) parseUnpackLogs(ctx context.Context, job *batc // unpackJob creates the manifest for an unpack Job given a CatalogSource func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batchv1.Job { - volName := "volumizer" - mountPath := "catalog-configs/" + opmVol := "opm" + mountPath := "opmvol/" return &batchv1.Job{ ObjectMeta: metav1.ObjectMeta{ Namespace: "catalogd-system", @@ -390,17 +390,16 @@ func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batc RestartPolicy: v1.RestartPolicyOnFailure, InitContainers: []v1.Container{ { - Image: cs.Spec.Image, + Image: r.OpmImage, Name: "initializer", Command: []string{ "cp", - "-r", - "configs/", // Do all FBC catalog images stuff everything under the configs/ directory? - mountPath, + "/bin/opm", + fmt.Sprintf("%s%s", mountPath, "opm"), }, VolumeMounts: []v1.VolumeMount{ { - Name: volName, + Name: opmVol, MountPath: mountPath, }, }, @@ -408,16 +407,16 @@ func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batc }, Containers: []v1.Container{ { - Image: r.OpmImage, + Image: cs.Spec.Image, Name: "unpacker", Command: []string{ - "opm", + fmt.Sprintf("%s%s", mountPath, "opm"), "render", - mountPath, + "configs/", }, VolumeMounts: []v1.VolumeMount{ { - Name: volName, + Name: opmVol, MountPath: mountPath, }, }, @@ -425,7 +424,7 @@ func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batc }, Volumes: []v1.Volume{ { - Name: volName, + Name: opmVol, VolumeSource: v1.VolumeSource{ EmptyDir: &v1.EmptyDirVolumeSource{}, }, From 7a0e41346cff3f7cd4a8171ca958fee2415e3fd1 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Mon, 24 Apr 2023 16:53:32 -0400 Subject: [PATCH 3/4] use filepath.Join() instead of fmt.Sprintf() Signed-off-by: Bryce Palmer --- pkg/controllers/core/catalogsource_controller.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/controllers/core/catalogsource_controller.go b/pkg/controllers/core/catalogsource_controller.go index 5d5b6069..d3e49a2f 100644 --- a/pkg/controllers/core/catalogsource_controller.go +++ b/pkg/controllers/core/catalogsource_controller.go @@ -21,6 +21,7 @@ import ( "context" "fmt" "io" + "path/filepath" "time" "github.com/operator-framework/operator-registry/alpha/declcfg" @@ -395,7 +396,7 @@ func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batc Command: []string{ "cp", "/bin/opm", - fmt.Sprintf("%s%s", mountPath, "opm"), + filepath.Join(mountPath, "opm"), }, VolumeMounts: []v1.VolumeMount{ { @@ -410,7 +411,7 @@ func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batc Image: cs.Spec.Image, Name: "unpacker", Command: []string{ - fmt.Sprintf("%s%s", mountPath, "opm"), + filepath.Join(mountPath, "opm"), "render", "configs/", }, From 6108501183f8dde9108a13ae97af8c05bc72ec93 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Tue, 25 Apr 2023 09:30:53 -0400 Subject: [PATCH 4/4] restrict config directory to /configs/ Signed-off-by: Bryce Palmer --- pkg/controllers/core/catalogsource_controller.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/controllers/core/catalogsource_controller.go b/pkg/controllers/core/catalogsource_controller.go index d3e49a2f..5d8df340 100644 --- a/pkg/controllers/core/catalogsource_controller.go +++ b/pkg/controllers/core/catalogsource_controller.go @@ -413,7 +413,7 @@ func (r *CatalogSourceReconciler) unpackJob(cs *corev1beta1.CatalogSource) *batc Command: []string{ filepath.Join(mountPath, "opm"), "render", - "configs/", + "/configs/", }, VolumeMounts: []v1.VolumeMount{ {