diff --git a/controllers/job.go b/controllers/job.go index c22b297..789fad8 100644 --- a/controllers/job.go +++ b/controllers/job.go @@ -105,19 +105,12 @@ func (r *OSArtifactReconciler) newBuilderPod(pvcName string, artifact *osbuilder }, } - cloudImgCmd := fmt.Sprintf( - "/raw-images.sh /rootfs /artifacts/%s.raw", - artifact.Name, - ) - if artifact.Spec.CloudConfigRef != nil { volumeMounts = append(volumeMounts, corev1.VolumeMount{ Name: "cloudconfig", MountPath: "/iso/iso-overlay/cloud_config.yaml", SubPath: artifact.Spec.CloudConfigRef.Key, }) - - cloudImgCmd += " /iso/iso-overlay/cloud_config.yaml" } if artifact.Spec.Model != nil { diff --git a/controllers/suite_test.go b/controllers/suite_test.go deleted file mode 100644 index 87bdb65..0000000 --- a/controllers/suite_test.go +++ /dev/null @@ -1,109 +0,0 @@ -/* -Copyright 2022. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package controllers - -import ( - "context" - "math/rand" - "path/filepath" - "testing" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/envtest" - logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/log/zap" - - buildv1alpha2 "github.com/kairos-io/osbuilder/api/v1alpha2" - //+kubebuilder:scaffold:imports -) - -// These tests use Ginkgo (BDD-style Go testing framework). Refer to -// http://onsi.github.io/ginkgo/ to learn more about Ginkgo. - -var cfg *rest.Config -var k8sClient client.Client -var testEnv *envtest.Environment - -func TestAPIs(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Controller Suite") -} - -var _ = BeforeSuite(func() { - logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) - - By("bootstrapping test environment") - testEnv = &envtest.Environment{ - CRDDirectoryPaths: []string{filepath.Join("..", "config", "crd", "bases")}, - ErrorIfCRDPathMissing: true, - } - - var err error - // cfg is defined in this file globally. - cfg, err = testEnv.Start() - Expect(err).NotTo(HaveOccurred()) - Expect(cfg).NotTo(BeNil()) - - err = buildv1alpha2.AddToScheme(scheme.Scheme) - Expect(err).NotTo(HaveOccurred()) - - //+kubebuilder:scaffold:scheme - - k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) - Expect(err).NotTo(HaveOccurred()) - Expect(k8sClient).NotTo(BeNil()) - -}) - -var _ = AfterSuite(func() { - By("tearing down the test environment") - err := testEnv.Stop() - Expect(err).NotTo(HaveOccurred()) -}) - -func randStringRunes(n int) string { - var letterRunes = []rune("abcdefghijklmnopqrstuvwxyz") - b := make([]rune, n) - for i := range b { - b[i] = letterRunes[rand.Intn(len(letterRunes))] - } - return string(b) -} - -func createRandomNamespace(clientset *kubernetes.Clientset) string { - name := randStringRunes(10) - _, err := clientset.CoreV1().Namespaces().Create(context.Background(), &v1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - }, metav1.CreateOptions{}) - Expect(err).ToNot(HaveOccurred()) - - return name -} - -func deleteNamepace(clientset *kubernetes.Clientset, name string) { - err := clientset.CoreV1().Namespaces().Delete(context.Background(), name, metav1.DeleteOptions{}) - Expect(err).ToNot(HaveOccurred()) -} diff --git a/tests/e2e/e2e_simple_test.go b/tests/e2e/e2e_simple_test.go deleted file mode 100644 index 6b4f2d2..0000000 --- a/tests/e2e/e2e_simple_test.go +++ /dev/null @@ -1,162 +0,0 @@ -package e2e_test - -import ( - "context" - "time" - - osbuilder "github.com/kairos-io/osbuilder/api/v1alpha2" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - batchv1 "k8s.io/api/batch/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/selection" - "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/dynamic" - ctrl "sigs.k8s.io/controller-runtime" -) - -var _ = Describe("ISO build test", func() { - var artifactName string - var artifacts, pods, pvcs, jobs dynamic.ResourceInterface - var scheme *runtime.Scheme - var artifactLabelSelector labels.Selector - - BeforeEach(func() { - k8s := dynamic.NewForConfigOrDie(ctrl.GetConfigOrDie()) - scheme = runtime.NewScheme() - err := osbuilder.AddToScheme(scheme) - Expect(err).ToNot(HaveOccurred()) - - artifacts = k8s.Resource(schema.GroupVersionResource{Group: osbuilder.GroupVersion.Group, Version: osbuilder.GroupVersion.Version, Resource: "osartifacts"}).Namespace("default") - pods = k8s.Resource(schema.GroupVersionResource{Group: corev1.GroupName, Version: corev1.SchemeGroupVersion.Version, Resource: "pods"}).Namespace("default") - pvcs = k8s.Resource(schema.GroupVersionResource{Group: corev1.GroupName, Version: corev1.SchemeGroupVersion.Version, Resource: "persistentvolumeclaims"}).Namespace("default") - jobs = k8s.Resource(schema.GroupVersionResource{Group: batchv1.GroupName, Version: batchv1.SchemeGroupVersion.Version, Resource: "jobs"}).Namespace("default") - - artifact := &osbuilder.OSArtifact{ - TypeMeta: metav1.TypeMeta{ - Kind: "OSArtifact", - APIVersion: osbuilder.GroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "simple-", - }, - Spec: osbuilder.OSArtifactSpec{ - ImageName: "quay.io/kairos/core-opensuse:latest", - ISO: true, - DiskSize: "", - Exporters: []batchv1.JobSpec{ - { - Template: corev1.PodTemplateSpec{ - Spec: corev1.PodSpec{ - RestartPolicy: corev1.RestartPolicyNever, - Containers: []corev1.Container{ - { - Name: "test", - Image: "debian:latest", - Command: []string{"bash"}, - Args: []string{"-xec", "[ -f /artifacts/*.iso ]"}, - VolumeMounts: []corev1.VolumeMount{ - { - Name: "artifacts", - ReadOnly: true, - MountPath: "/artifacts", - }, - }, - }, - }, - }, - }, - }, - }, - }, - } - - uArtifact := unstructured.Unstructured{} - uArtifact.Object, _ = runtime.DefaultUnstructuredConverter.ToUnstructured(artifact) - resp, err := artifacts.Create(context.TODO(), &uArtifact, metav1.CreateOptions{}) - Expect(err).ToNot(HaveOccurred()) - artifactName = resp.GetName() - - artifactLabelSelectorReq, err := labels.NewRequirement("build.kairos.io/artifact", selection.Equals, []string{artifactName}) - Expect(err).ToNot(HaveOccurred()) - artifactLabelSelector = labels.NewSelector().Add(*artifactLabelSelectorReq) - }) - - It("works", func() { - By("starting the build") - Eventually(func(g Gomega) { - w, err := pods.Watch(context.TODO(), metav1.ListOptions{LabelSelector: artifactLabelSelector.String()}) - Expect(err).ToNot(HaveOccurred()) - - var stopped bool - for !stopped { - event, ok := <-w.ResultChan() - - stopped = event.Type != watch.Deleted && event.Type != watch.Error || !ok - } - }).WithTimeout(time.Hour).Should(Succeed()) - - By("exporting the artifacts") - Eventually(func(g Gomega) { - w, err := jobs.Watch(context.TODO(), metav1.ListOptions{LabelSelector: artifactLabelSelector.String()}) - Expect(err).ToNot(HaveOccurred()) - - var stopped bool - for !stopped { - event, ok := <-w.ResultChan() - - stopped = event.Type != watch.Deleted && event.Type != watch.Error || !ok - } - }).WithTimeout(time.Hour).Should(Succeed()) - - By("building the artifacts successfully") - Eventually(func(g Gomega) { - w, err := artifacts.Watch(context.TODO(), metav1.ListOptions{}) - Expect(err).ToNot(HaveOccurred()) - - var artifact osbuilder.OSArtifact - var stopped bool - for !stopped { - event, ok := <-w.ResultChan() - stopped = !ok - - if event.Type == watch.Modified && event.Object.(*unstructured.Unstructured).GetName() == artifactName { - err := scheme.Convert(event.Object, &artifact, nil) - Expect(err).ToNot(HaveOccurred()) - stopped = artifact.Status.Phase == osbuilder.Ready - } - - } - }).WithTimeout(time.Hour).Should(Succeed()) - - By("cleaning up resources on deletion") - err := artifacts.Delete(context.TODO(), artifactName, metav1.DeleteOptions{}) - Expect(err).ToNot(HaveOccurred()) - - Eventually(func(g Gomega) int { - res, err := artifacts.List(context.TODO(), metav1.ListOptions{}) - Expect(err).ToNot(HaveOccurred()) - return len(res.Items) - }).WithTimeout(time.Minute).Should(Equal(0)) - Eventually(func(g Gomega) int { - res, err := pods.List(context.TODO(), metav1.ListOptions{LabelSelector: artifactLabelSelector.String()}) - Expect(err).ToNot(HaveOccurred()) - return len(res.Items) - }).WithTimeout(time.Minute).Should(Equal(0)) - Eventually(func(g Gomega) int { - res, err := pvcs.List(context.TODO(), metav1.ListOptions{LabelSelector: artifactLabelSelector.String()}) - Expect(err).ToNot(HaveOccurred()) - return len(res.Items) - }).WithTimeout(time.Minute).Should(Equal(0)) - Eventually(func(g Gomega) int { - res, err := jobs.List(context.TODO(), metav1.ListOptions{LabelSelector: artifactLabelSelector.String()}) - Expect(err).ToNot(HaveOccurred()) - return len(res.Items) - }).WithTimeout(time.Minute).Should(Equal(0)) - }) -}) diff --git a/tests/e2e/e2e_suite_test.go b/tests/e2e/e2e_suite_test.go deleted file mode 100644 index 217810c..0000000 --- a/tests/e2e/e2e_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package e2e_test - -import ( - "testing" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -func TestE2e(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "kairos-operator e2e test Suite") -} diff --git a/tests/fixtures/simple.yaml b/tests/fixtures/simple.yaml deleted file mode 100644 index bfe8701..0000000 --- a/tests/fixtures/simple.yaml +++ /dev/null @@ -1,52 +0,0 @@ -apiVersion: build.kairos.io/v1alpha1 -kind: OSArtifact -metadata: - name: hello-kairos -spec: - imageName: "quay.io/kairos/core-opensuse:latest" - iso: true - bundles: - - quay.io/kairos/packages:goreleaser-utils-1.13.1 - grubConfig: | - search --file --set=root /boot/kernel.xz - set default=0 - set timeout=10 - set timeout_style=menu - set linux=linux - set initrd=initrd - if [ "${grub_cpu}" = "x86_64" -o "${grub_cpu}" = "i386" -o "${grub_cpu}" = "arm64" ];then - if [ "${grub_platform}" = "efi" ]; then - if [ "${grub_cpu}" != "arm64" ]; then - set linux=linuxefi - set initrd=initrdefi - fi - fi - fi - if [ "${grub_platform}" = "efi" ]; then - echo "Please press 't' to show the boot menu on this console" - fi - set font=($root)/boot/${grub_cpu}/loader/grub2/fonts/unicode.pf2 - if [ -f ${font} ];then - loadfont ${font} - fi - menuentry "install" --class os --unrestricted { - echo Loading kernel... - $linux ($root)/boot/kernel.xz cdroot root=live:CDLABEL=COS_LIVE rd.live.dir=/ rd.live.squashimg=rootfs.squashfs console=tty1 console=ttyS0 rd.cos.disable vga=795 nomodeset install-mode - echo Loading initrd... - $initrd ($root)/boot/rootfs.xz - } - - if [ "${grub_platform}" = "efi" ]; then - hiddenentry "Text mode" --hotkey "t" { - set textmode=true - terminal_output console - } - fi - - cloudConfig: | - #node-config - install: - device: "/dev/sda" - reboot: true - poweroff: true - auto: true # Required, for automated installations