From 4cd02576be9f1e5fd82c891b652e82ce8d160cae Mon Sep 17 00:00:00 2001 From: Manabu McCloskey Date: Thu, 17 Oct 2024 18:13:55 +0000 Subject: [PATCH 1/2] error out when configurations do not match Signed-off-by: Manabu McCloskey --- api/v1alpha1/localbuild_types.go | 13 +++- api/v1alpha1/zz_generated.deepcopy.go | 16 +++++ pkg/build/build.go | 57 +++++++++++++++- pkg/build/build_test.go | 67 +++++++++++++++++++ pkg/build/coredns.go | 4 +- pkg/build/tls.go | 4 +- pkg/cmd/create/root.go | 3 +- pkg/controllers/custompackage/controller.go | 2 +- pkg/controllers/gitrepository/controller.go | 8 +-- .../gitrepository/controller_test.go | 2 +- pkg/controllers/gitrepository/gitea.go | 4 +- pkg/controllers/gitrepository/github.go | 2 +- pkg/controllers/localbuild/argo_test.go | 4 +- pkg/controllers/localbuild/controller.go | 2 +- pkg/controllers/localbuild/gitea.go | 4 +- pkg/controllers/localbuild/gitea_test.go | 4 +- pkg/controllers/localbuild/installer.go | 3 +- .../idpbuilder.cnoe.io_localbuilds.yaml | 16 +++++ pkg/controllers/run.go | 3 +- pkg/k8s/util_test.go | 4 +- pkg/kind/cluster.go | 13 ++-- pkg/kind/cluster_test.go | 10 +-- pkg/util/build_config.go | 10 --- pkg/util/git_repository.go | 3 +- 24 files changed, 205 insertions(+), 53 deletions(-) create mode 100644 pkg/build/build_test.go delete mode 100644 pkg/util/build_config.go diff --git a/api/v1alpha1/localbuild_types.go b/api/v1alpha1/localbuild_types.go index 8e8cd67f..2f1415ee 100644 --- a/api/v1alpha1/localbuild_types.go +++ b/api/v1alpha1/localbuild_types.go @@ -45,8 +45,19 @@ type PackageConfigsSpec struct { CorePackageCustomization map[string]PackageCustomization `json:"packageCustomization,omitempty"` } +// BuildCustomizationSpec fields cannot change once +type BuildCustomizationSpec struct { + Protocol string `json:"protocol,omitempty"` + Host string `json:"host,omitempty"` + IngressHost string `json:"ingressHost,omitempty"` + Port string `json:"port,omitempty"` + UsePathRouting bool `json:"usePathRouting,omitempty"` + SelfSignedCert string `json:"selfSignedCert,omitempty"` +} + type LocalbuildSpec struct { - PackageConfigs PackageConfigsSpec `json:"packageConfigs,omitempty"` + PackageConfigs PackageConfigsSpec `json:"packageConfigs,omitempty"` + BuildCustomization BuildCustomizationSpec `json:"buildCustomization,omitempty"` } // PackageCustomization defines how packages are customized diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index db881cb3..9ef62b7c 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -69,6 +69,21 @@ func (in *ArgoPackageConfigSpec) DeepCopy() *ArgoPackageConfigSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildCustomizationSpec) DeepCopyInto(out *BuildCustomizationSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildCustomizationSpec. +func (in *BuildCustomizationSpec) DeepCopy() *BuildCustomizationSpec { + if in == nil { + return nil + } + out := new(BuildCustomizationSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Commit) DeepCopyInto(out *Commit) { *out = *in @@ -384,6 +399,7 @@ func (in *LocalbuildList) DeepCopyObject() runtime.Object { func (in *LocalbuildSpec) DeepCopyInto(out *LocalbuildSpec) { *out = *in in.PackageConfigs.DeepCopyInto(&out.PackageConfigs) + out.BuildCustomization = in.BuildCustomization } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalbuildSpec. diff --git a/pkg/build/build.go b/pkg/build/build.go index 9789aea6..632adb82 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -10,7 +10,7 @@ import ( "github.com/cnoe-io/idpbuilder/globals" "github.com/cnoe-io/idpbuilder/pkg/controllers" "github.com/cnoe-io/idpbuilder/pkg/kind" - "github.com/cnoe-io/idpbuilder/pkg/util" + k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest" @@ -28,7 +28,7 @@ var ( type Build struct { name string - cfg util.CorePackageTemplateConfig + cfg v1alpha1.BuildCustomizationSpec kindConfigPath string kubeConfigPath string kubeVersion string @@ -43,7 +43,7 @@ type Build struct { type NewBuildOptions struct { Name string - TemplateData util.CorePackageTemplateConfig + TemplateData v1alpha1.BuildCustomizationSpec KindConfigPath string KubeConfigPath string KubeVersion string @@ -126,6 +126,36 @@ func (b *Build) RunControllers(ctx context.Context, mgr manager.Manager, exitCh return controllers.RunControllers(ctx, mgr, exitCh, b.CancelFunc, b.exitOnSync, b.cfg, tmpDir) } +func (b *Build) isCompatible(ctx context.Context, kubeClient client.Client) (bool, error) { + localBuild := v1alpha1.Localbuild{ + ObjectMeta: metav1.ObjectMeta{ + Name: b.name, + }, + } + + err := kubeClient.Get(ctx, client.ObjectKeyFromObject(&localBuild), &localBuild) + if err != nil { + if k8serrors.IsNotFound(err) { + return true, nil + } + return false, err + } + + ok := isBuildCustomizationSpecEqual(b.cfg, localBuild.Spec.BuildCustomization) + + if ok { + return ok, nil + } + + existing, given := localBuild.Spec.BuildCustomization, b.cfg + existing.SelfSignedCert = "" + given.SelfSignedCert = "" + + return false, fmt.Errorf("provided command flags and existing configurations are incompatible. please recreate the cluster. "+ + "existing: %+v, given: %+v", + existing, given) +} + func (b *Build) Run(ctx context.Context, recreateCluster bool) error { managerExit := make(chan error) @@ -185,6 +215,16 @@ func (b *Build) Run(ctx context.Context, recreateCluster bool) error { } b.cfg.SelfSignedCert = string(cert) + setupLog.V(1).Info("Checking for incompatible options from a previous run") + ok, err := b.isCompatible(ctx, kubeClient) + if err != nil { + setupLog.Error(err, "Error while checking incompatible flags") + return err + } + if !ok { + return err + } + setupLog.V(1).Info("Running controllers") if err := b.RunControllers(ctx, mgr, managerExit, dir); err != nil { setupLog.Error(err, "Error running controllers") @@ -206,6 +246,7 @@ func (b *Build) Run(ctx context.Context, recreateCluster bool) error { } localBuild.ObjectMeta.Annotations[v1alpha1.CliStartTimeAnnotation] = cliStartTime localBuild.Spec = v1alpha1.LocalbuildSpec{ + BuildCustomization: b.cfg, PackageConfigs: v1alpha1.PackageConfigsSpec{ Argo: v1alpha1.ArgoPackageConfigSpec{ Enabled: true, @@ -229,3 +270,13 @@ func (b *Build) Run(ctx context.Context, recreateCluster bool) error { close(managerExit) return err } + +func isBuildCustomizationSpecEqual(s1, s2 v1alpha1.BuildCustomizationSpec) bool { + // probably ok to use cmp.Equal but keeping it simple for now + return s1.Protocol == s2.Protocol && + s1.Host == s2.Host && + s1.IngressHost == s2.IngressHost && + s1.Port == s2.Port && + s1.UsePathRouting == s2.UsePathRouting && + s1.SelfSignedCert == s2.SelfSignedCert +} diff --git a/pkg/build/build_test.go b/pkg/build/build_test.go new file mode 100644 index 00000000..dd3281eb --- /dev/null +++ b/pkg/build/build_test.go @@ -0,0 +1,67 @@ +package build + +import ( + "context" + "testing" + + "github.com/cnoe-io/idpbuilder/api/v1alpha1" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + k8serrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +func TestIsCompatible(t *testing.T) { + cfg := v1alpha1.BuildCustomizationSpec{ + Protocol: "http", + Host: "cnoe.localtest.me", + IngressHost: "string", + Port: "8443", + UsePathRouting: false, + SelfSignedCert: "some-cert", + } + + b := Build{ + name: "test", + cfg: cfg, + } + + ctx := context.Background() + fClient := new(fakeKubeClient) + fClient.On("Get", ctx, client.ObjectKey{Name: "test"}, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { + arg := args.Get(2).(*v1alpha1.Localbuild) + arg.Spec.BuildCustomization = cfg + }).Return(nil) + + ok, err := b.isCompatible(ctx, fClient) + + assert.NoError(t, err) + fClient.AssertExpectations(t) + require.True(t, ok) + + fClient = new(fakeKubeClient) + fClient.On("Get", ctx, client.ObjectKey{Name: "test"}, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { + arg := args.Get(2).(*v1alpha1.Localbuild) + c := cfg + c.Host = "not-right" + arg.Spec.BuildCustomization = c + }).Return(nil) + + ok, err = b.isCompatible(ctx, fClient) + + assert.Error(t, err) + fClient.AssertExpectations(t) + require.False(t, ok) + + fClient = new(fakeKubeClient) + fClient.On("Get", ctx, client.ObjectKey{Name: "test"}, mock.Anything, mock.Anything). + Return(k8serrors.NewNotFound(schema.GroupResource{}, "name")) + + ok, err = b.isCompatible(ctx, fClient) + + assert.NoError(t, err) + fClient.AssertExpectations(t) + require.True(t, ok) +} diff --git a/pkg/build/coredns.go b/pkg/build/coredns.go index c225c35d..034ab63b 100644 --- a/pkg/build/coredns.go +++ b/pkg/build/coredns.go @@ -5,8 +5,8 @@ import ( "embed" "fmt" + "github.com/cnoe-io/idpbuilder/api/v1alpha1" "github.com/cnoe-io/idpbuilder/pkg/k8s" - "github.com/cnoe-io/idpbuilder/pkg/util" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -22,7 +22,7 @@ const ( //go:embed templates var templates embed.FS -func setupCoreDNS(ctx context.Context, kubeClient client.Client, scheme *runtime.Scheme, templateData util.CorePackageTemplateConfig) error { +func setupCoreDNS(ctx context.Context, kubeClient client.Client, scheme *runtime.Scheme, templateData v1alpha1.BuildCustomizationSpec) error { checkCM := &corev1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "coredns-conf-default", diff --git a/pkg/build/tls.go b/pkg/build/tls.go index b19a504b..e975598c 100644 --- a/pkg/build/tls.go +++ b/pkg/build/tls.go @@ -14,9 +14,9 @@ import ( "math/big" "time" + "github.com/cnoe-io/idpbuilder/api/v1alpha1" "github.com/cnoe-io/idpbuilder/globals" "github.com/cnoe-io/idpbuilder/pkg/k8s" - "github.com/cnoe-io/idpbuilder/pkg/util" "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -182,7 +182,7 @@ func createSelfSignedCertificate(sans []string) ([]byte, []byte, error) { return certOut, privateKeyOut, nil } -func setupSelfSignedCertificate(ctx context.Context, logger logr.Logger, kubeclient client.Client, config util.CorePackageTemplateConfig) ([]byte, error) { +func setupSelfSignedCertificate(ctx context.Context, logger logr.Logger, kubeclient client.Client, config v1alpha1.BuildCustomizationSpec) ([]byte, error) { if err := k8s.EnsureNamespace(ctx, kubeclient, globals.NginxNamespace); err != nil { return nil, err } diff --git a/pkg/cmd/create/root.go b/pkg/cmd/create/root.go index 4fd0cf44..2c1c2217 100644 --- a/pkg/cmd/create/root.go +++ b/pkg/cmd/create/root.go @@ -12,7 +12,6 @@ import ( "github.com/cnoe-io/idpbuilder/pkg/build" "github.com/cnoe-io/idpbuilder/pkg/cmd/helpers" "github.com/cnoe-io/idpbuilder/pkg/k8s" - "github.com/cnoe-io/idpbuilder/pkg/util" "github.com/spf13/cobra" "k8s.io/client-go/util/homedir" ctrl "sigs.k8s.io/controller-runtime" @@ -117,7 +116,7 @@ func create(cmd *cobra.Command, args []string) error { KindConfigPath: kindConfigPath, ExtraPortsMapping: extraPortsMapping, - TemplateData: util.CorePackageTemplateConfig{ + TemplateData: v1alpha1.BuildCustomizationSpec{ Protocol: protocol, Host: host, IngressHost: ingressHost, diff --git a/pkg/controllers/custompackage/controller.go b/pkg/controllers/custompackage/controller.go index ed093616..7ffda9e2 100644 --- a/pkg/controllers/custompackage/controller.go +++ b/pkg/controllers/custompackage/controller.go @@ -32,7 +32,7 @@ type Reconciler struct { client.Client Recorder record.EventRecorder Scheme *runtime.Scheme - Config util.CorePackageTemplateConfig + Config v1alpha1.BuildCustomizationSpec TempDir string RepoMap *util.RepoMap } diff --git a/pkg/controllers/gitrepository/controller.go b/pkg/controllers/gitrepository/controller.go index 6d158238..6a303494 100644 --- a/pkg/controllers/gitrepository/controller.go +++ b/pkg/controllers/gitrepository/controller.go @@ -43,13 +43,13 @@ type RepositoryReconciler struct { client.Client Recorder record.EventRecorder Scheme *runtime.Scheme - Config util.CorePackageTemplateConfig + Config v1alpha1.BuildCustomizationSpec GitProviderFunc gitProviderFunc TempDir string RepoMap *util.RepoMap } -type gitProviderFunc func(context.Context, *v1alpha1.GitRepository, client.Client, *runtime.Scheme, util.CorePackageTemplateConfig) (gitProvider, error) +type gitProviderFunc func(context.Context, *v1alpha1.GitRepository, client.Client, *runtime.Scheme, v1alpha1.BuildCustomizationSpec) (gitProvider, error) type notFoundError struct{} @@ -69,7 +69,7 @@ func getFallbackRepositoryURL(repo *v1alpha1.GitRepository, info repoInfo) strin return fmt.Sprintf("%s/%s.git", repo.Spec.Provider.GitURL, info.fullName) } -func GetGitProvider(ctx context.Context, repo *v1alpha1.GitRepository, kubeClient client.Client, scheme *runtime.Scheme, tmplConfig util.CorePackageTemplateConfig) (gitProvider, error) { +func GetGitProvider(ctx context.Context, repo *v1alpha1.GitRepository, kubeClient client.Client, scheme *runtime.Scheme, tmplConfig v1alpha1.BuildCustomizationSpec) (gitProvider, error) { switch repo.Spec.Provider.Name { case v1alpha1.GitProviderGitea: giteaClient, err := NewGiteaClient(repo.Spec.Provider.GitURL, gitea.SetHTTPClient(util.GetHttpClient())) @@ -227,7 +227,7 @@ func pushToRemote(ctx context.Context, remoteRepo *git.Repository, creds gitProv } // add files from local fs to target repository (gitea for now) -func reconcileLocalRepoContent(ctx context.Context, repo *v1alpha1.GitRepository, tgtRepo repoInfo, creds gitProviderCredentials, scheme *runtime.Scheme, tmplConfig util.CorePackageTemplateConfig, tmpDir string, repoMap *util.RepoMap) error { +func reconcileLocalRepoContent(ctx context.Context, repo *v1alpha1.GitRepository, tgtRepo repoInfo, creds gitProviderCredentials, scheme *runtime.Scheme, tmplConfig v1alpha1.BuildCustomizationSpec, tmpDir string, repoMap *util.RepoMap) error { logger := log.FromContext(ctx) tgtCloneDir := util.RepoDir(tgtRepo.cloneUrl, tmpDir) diff --git a/pkg/controllers/gitrepository/controller_test.go b/pkg/controllers/gitrepository/controller_test.go index b5a009f1..3b5f2d58 100644 --- a/pkg/controllers/gitrepository/controller_test.go +++ b/pkg/controllers/gitrepository/controller_test.go @@ -63,7 +63,7 @@ type testCase struct { expect expect } -func (t testCase) giteaProvider(ctx context.Context, repo *v1alpha1.GitRepository, kubeClient client.Client, scheme *runtime.Scheme, tmplConfig util.CorePackageTemplateConfig) (gitProvider, error) { +func (t testCase) giteaProvider(ctx context.Context, repo *v1alpha1.GitRepository, kubeClient client.Client, scheme *runtime.Scheme, tmplConfig v1alpha1.BuildCustomizationSpec) (gitProvider, error) { return &giteaProvider{ Client: kubeClient, Scheme: scheme, diff --git a/pkg/controllers/gitrepository/gitea.go b/pkg/controllers/gitrepository/gitea.go index 2a9db6c9..de82970f 100644 --- a/pkg/controllers/gitrepository/gitea.go +++ b/pkg/controllers/gitrepository/gitea.go @@ -28,7 +28,7 @@ type giteaProvider struct { client.Client Scheme *runtime.Scheme giteaClient GiteaClient - config util.CorePackageTemplateConfig + config v1alpha1.BuildCustomizationSpec } func (g *giteaProvider) createRepository(ctx context.Context, repo *v1alpha1.GitRepository) (repoInfo, error) { @@ -116,7 +116,7 @@ func (g *giteaProvider) updateRepoContent( } } -func writeRepoContents(repo *v1alpha1.GitRepository, dstPath string, config util.CorePackageTemplateConfig, scheme *runtime.Scheme) error { +func writeRepoContents(repo *v1alpha1.GitRepository, dstPath string, config v1alpha1.BuildCustomizationSpec, scheme *runtime.Scheme) error { if repo.Spec.Source.EmbeddedAppName != "" { resources, err := localbuild.GetEmbeddedRawInstallResources( repo.Spec.Source.EmbeddedAppName, config, diff --git a/pkg/controllers/gitrepository/github.go b/pkg/controllers/gitrepository/github.go index 2a2ac0c3..74359637 100644 --- a/pkg/controllers/gitrepository/github.go +++ b/pkg/controllers/gitrepository/github.go @@ -39,7 +39,7 @@ type gitHubProvider struct { client.Client Scheme *runtime.Scheme gitHubClient gitHubClient - config util.CorePackageTemplateConfig + config v1alpha1.BuildCustomizationSpec } func (g *gitHubProvider) createRepository(ctx context.Context, repo *v1alpha1.GitRepository) (repoInfo, error) { diff --git a/pkg/controllers/localbuild/argo_test.go b/pkg/controllers/localbuild/argo_test.go index b45518d5..e35ec4c6 100644 --- a/pkg/controllers/localbuild/argo_test.go +++ b/pkg/controllers/localbuild/argo_test.go @@ -44,7 +44,7 @@ func TestGetRawInstallResources(t *testing.T) { resourcePath: "resources/argo", } resources, err := util.ConvertFSToBytes(e.resourceFS, e.resourcePath, - util.CorePackageTemplateConfig{ + v1alpha1.BuildCustomizationSpec{ Protocol: "", Host: "", Port: "", @@ -70,7 +70,7 @@ func TestGetK8sInstallResources(t *testing.T) { resourceFS: installArgoFS, resourcePath: "resources/argo", } - objs, err := e.installResources(k8s.GetScheme(), util.CorePackageTemplateConfig{ + objs, err := e.installResources(k8s.GetScheme(), v1alpha1.BuildCustomizationSpec{ Protocol: "", Host: "", Port: "", diff --git a/pkg/controllers/localbuild/controller.go b/pkg/controllers/localbuild/controller.go index b43fedfb..20a513ed 100644 --- a/pkg/controllers/localbuild/controller.go +++ b/pkg/controllers/localbuild/controller.go @@ -45,7 +45,7 @@ type LocalbuildReconciler struct { CancelFunc context.CancelFunc ExitOnSync bool shouldShutdown bool - Config util.CorePackageTemplateConfig + Config v1alpha1.BuildCustomizationSpec TempDir string RepoMap *util.RepoMap } diff --git a/pkg/controllers/localbuild/gitea.go b/pkg/controllers/localbuild/gitea.go index 41c81a30..8d01a715 100644 --- a/pkg/controllers/localbuild/gitea.go +++ b/pkg/controllers/localbuild/gitea.go @@ -210,12 +210,12 @@ func getGiteaToken(ctx context.Context, baseUrl, username, password string) (str return token.Token, nil } -func giteaBaseUrl(config util.CorePackageTemplateConfig) string { +func giteaBaseUrl(config v1alpha1.BuildCustomizationSpec) string { return fmt.Sprintf(giteaIngressURL, config.Protocol, config.Port) } // gitea URL reachable within the cluster with proper coredns config. Mainly for argocd -func giteaInternalBaseUrl(config util.CorePackageTemplateConfig) string { +func giteaInternalBaseUrl(config v1alpha1.BuildCustomizationSpec) string { if config.UsePathRouting { return fmt.Sprintf(giteaSvcURL, config.Protocol, "", config.Host, config.Port, "/gitea") } diff --git a/pkg/controllers/localbuild/gitea_test.go b/pkg/controllers/localbuild/gitea_test.go index 5a0a0300..6f874c62 100644 --- a/pkg/controllers/localbuild/gitea_test.go +++ b/pkg/controllers/localbuild/gitea_test.go @@ -3,12 +3,12 @@ package localbuild import ( "testing" - "github.com/cnoe-io/idpbuilder/pkg/util" + "github.com/cnoe-io/idpbuilder/api/v1alpha1" "github.com/stretchr/testify/assert" ) func TestGiteaInternalBaseUrl(t *testing.T) { - c := util.CorePackageTemplateConfig{ + c := v1alpha1.BuildCustomizationSpec{ Protocol: "http", Port: "8080", Host: "cnoe.localtest.me", diff --git a/pkg/controllers/localbuild/installer.go b/pkg/controllers/localbuild/installer.go index 8a3122b8..f3c3da62 100644 --- a/pkg/controllers/localbuild/installer.go +++ b/pkg/controllers/localbuild/installer.go @@ -10,7 +10,6 @@ import ( "github.com/cnoe-io/idpbuilder/api/v1alpha1" "github.com/cnoe-io/idpbuilder/pkg/k8s" - "github.com/cnoe-io/idpbuilder/pkg/util" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -53,7 +52,7 @@ func (e *EmbeddedInstallation) newNamespace(namespace string) *corev1.Namespace } } -func (e *EmbeddedInstallation) Install(ctx context.Context, resource *v1alpha1.Localbuild, cli client.Client, sc *runtime.Scheme, cfg util.CorePackageTemplateConfig) (ctrl.Result, error) { +func (e *EmbeddedInstallation) Install(ctx context.Context, resource *v1alpha1.Localbuild, cli client.Client, sc *runtime.Scheme, cfg v1alpha1.BuildCustomizationSpec) (ctrl.Result, error) { logger := log.FromContext(ctx) nsClient := client.NewNamespacedClient(cli, e.namespace) diff --git a/pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml b/pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml index 0aca820d..2187ebcb 100644 --- a/pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml +++ b/pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml @@ -37,6 +37,22 @@ spec: type: object spec: properties: + buildCustomization: + description: BuildCustomizationSpec fields cannot change once + properties: + host: + type: string + ingressHost: + type: string + port: + type: string + protocol: + type: string + selfSignedCert: + type: string + usePathRouting: + type: boolean + type: object packageConfigs: properties: argoPackageConfigs: diff --git a/pkg/controllers/run.go b/pkg/controllers/run.go index 19eae91f..b7187ddf 100644 --- a/pkg/controllers/run.go +++ b/pkg/controllers/run.go @@ -3,6 +3,7 @@ package controllers import ( "context" + "github.com/cnoe-io/idpbuilder/api/v1alpha1" "github.com/cnoe-io/idpbuilder/pkg/controllers/custompackage" "github.com/cnoe-io/idpbuilder/pkg/util" @@ -18,7 +19,7 @@ func RunControllers( exitCh chan error, ctxCancel context.CancelFunc, exitOnSync bool, - cfg util.CorePackageTemplateConfig, + cfg v1alpha1.BuildCustomizationSpec, tmpDir string, ) error { logger := log.FromContext(ctx) diff --git a/pkg/k8s/util_test.go b/pkg/k8s/util_test.go index 217f8dec..6583c0c0 100644 --- a/pkg/k8s/util_test.go +++ b/pkg/k8s/util_test.go @@ -6,7 +6,7 @@ import ( "os" "testing" - "github.com/cnoe-io/idpbuilder/pkg/util" + "github.com/cnoe-io/idpbuilder/api/v1alpha1" "github.com/stretchr/testify/assert" ) @@ -38,7 +38,7 @@ func TestBuildCustomizedManifests(t *testing.T) { for key := range cases { c := cases[key] - b, err := BuildCustomizedManifests(c.filePath, c.fsPath, testDataFS, GetScheme(), util.CorePackageTemplateConfig{ + b, err := BuildCustomizedManifests(c.filePath, c.fsPath, testDataFS, GetScheme(), v1alpha1.BuildCustomizationSpec{ Protocol: "http", Host: "cnoe.localtest.me", IngressHost: "localhost", diff --git a/pkg/kind/cluster.go b/pkg/kind/cluster.go index 08e9988b..72cba5b3 100644 --- a/pkg/kind/cluster.go +++ b/pkg/kind/cluster.go @@ -9,6 +9,7 @@ import ( "strconv" "strings" + "github.com/cnoe-io/idpbuilder/api/v1alpha1" "github.com/cnoe-io/idpbuilder/pkg/runtime" "github.com/cnoe-io/idpbuilder/pkg/util" "sigs.k8s.io/controller-runtime/pkg/log" @@ -36,7 +37,7 @@ type Cluster struct { kubeConfigPath string kindConfigPath string extraPortsMapping string - cfg util.CorePackageTemplateConfig + cfg v1alpha1.BuildCustomizationSpec } type PortMapping struct { @@ -54,7 +55,7 @@ type IProvider interface { } type TemplateConfig struct { - util.CorePackageTemplateConfig + v1alpha1.BuildCustomizationSpec KubernetesVersion string ExtraPortsMapping []PortMapping } @@ -94,9 +95,9 @@ func (c *Cluster) getConfig() ([]byte, error) { var retBuff []byte if retBuff, err = util.ApplyTemplate(rawConfigTempl, TemplateConfig{ - CorePackageTemplateConfig: c.cfg, - KubernetesVersion: c.kubeVersion, - ExtraPortsMapping: portMappingPairs, + BuildCustomizationSpec: c.cfg, + KubernetesVersion: c.kubeVersion, + ExtraPortsMapping: portMappingPairs, }); err != nil { return nil, err } @@ -117,7 +118,7 @@ func (c *Cluster) getConfig() ([]byte, error) { return retBuff, nil } -func NewCluster(name, kubeVersion, kubeConfigPath, kindConfigPath, extraPortsMapping string, cfg util.CorePackageTemplateConfig) (*Cluster, error) { +func NewCluster(name, kubeVersion, kubeConfigPath, kindConfigPath, extraPortsMapping string, cfg v1alpha1.BuildCustomizationSpec) (*Cluster, error) { detectOpt, err := cluster.DetectNodeProvider() if err != nil { diff --git a/pkg/kind/cluster_test.go b/pkg/kind/cluster_test.go index 77c9089a..f697d904 100644 --- a/pkg/kind/cluster_test.go +++ b/pkg/kind/cluster_test.go @@ -6,8 +6,8 @@ import ( "os" "testing" + "github.com/cnoe-io/idpbuilder/api/v1alpha1" runtime "github.com/cnoe-io/idpbuilder/pkg/runtime" - "github.com/cnoe-io/idpbuilder/pkg/util" "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/stretchr/testify/assert" @@ -78,7 +78,7 @@ containerdConfigPatches: for i := range tcs { c := tcs[i] - cluster, err := NewCluster("testcase", "v1.26.3", "", "", "", util.CorePackageTemplateConfig{ + cluster, err := NewCluster("testcase", "v1.26.3", "", "", "", v1alpha1.BuildCustomizationSpec{ Host: c.host, Port: c.port, UsePathRouting: c.usePathRouting, @@ -93,7 +93,7 @@ containerdConfigPatches: func TestExtraPortMappings(t *testing.T) { - cluster, err := NewCluster("testcase", "v1.26.3", "", "", "22:32222", util.CorePackageTemplateConfig{ + cluster, err := NewCluster("testcase", "v1.26.3", "", "", "22:32222", v1alpha1.BuildCustomizationSpec{ Host: "cnoe.localtest.me", Port: "8443", }) @@ -173,7 +173,7 @@ func TestGetConfigCustom(t *testing.T) { } for _, v := range cases { - c, _ := NewCluster("testcase", "v1.26.3", "", v.inputPath, "", util.CorePackageTemplateConfig{ + c, _ := NewCluster("testcase", "v1.26.3", "", v.inputPath, "", v1alpha1.BuildCustomizationSpec{ Host: "cnoe.localtest.me", Port: v.hostPort, Protocol: v.protocol, @@ -274,7 +274,7 @@ func TestRunsOnWrongPort(t *testing.T) { cluster := &Cluster{ name: "test-cluster", provider: mockProvider, - cfg: util.CorePackageTemplateConfig{ + cfg: v1alpha1.BuildCustomizationSpec{ Port: "8080", }, } diff --git a/pkg/util/build_config.go b/pkg/util/build_config.go deleted file mode 100644 index 9300bd64..00000000 --- a/pkg/util/build_config.go +++ /dev/null @@ -1,10 +0,0 @@ -package util - -type CorePackageTemplateConfig struct { - Protocol string - Host string - IngressHost string - Port string - UsePathRouting bool - SelfSignedCert string -} diff --git a/pkg/util/git_repository.go b/pkg/util/git_repository.go index f5282ccf..ff9a5d08 100644 --- a/pkg/util/git_repository.go +++ b/pkg/util/git_repository.go @@ -160,8 +160,9 @@ func CloneRemoteRepoToDir(ctx context.Context, remote v1alpha1.RemoteRepositoryS if err != nil { return nil, nil, fmt.Errorf("cloning repo with fall back url: %w", err) } + } else { + return nil, nil, fmt.Errorf("cloning repo: %w", err) } - return nil, nil, fmt.Errorf("cloning repo: %w", err) } } else { return nil, nil, fmt.Errorf("opening repo at %s %w", dir, err) From 971f192ba584293aea0601fa9bb0ac369003e79f Mon Sep 17 00:00:00 2001 From: Manabu McCloskey Date: Thu, 17 Oct 2024 20:42:07 +0000 Subject: [PATCH 2/2] update comment Signed-off-by: Manabu McCloskey --- api/v1alpha1/localbuild_types.go | 2 +- pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/api/v1alpha1/localbuild_types.go b/api/v1alpha1/localbuild_types.go index 2f1415ee..62d53ba6 100644 --- a/api/v1alpha1/localbuild_types.go +++ b/api/v1alpha1/localbuild_types.go @@ -45,7 +45,7 @@ type PackageConfigsSpec struct { CorePackageCustomization map[string]PackageCustomization `json:"packageCustomization,omitempty"` } -// BuildCustomizationSpec fields cannot change once +// BuildCustomizationSpec fields cannot change once a cluster is created type BuildCustomizationSpec struct { Protocol string `json:"protocol,omitempty"` Host string `json:"host,omitempty"` diff --git a/pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml b/pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml index 2187ebcb..ab98210f 100644 --- a/pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml +++ b/pkg/controllers/resources/idpbuilder.cnoe.io_localbuilds.yaml @@ -38,7 +38,8 @@ spec: spec: properties: buildCustomization: - description: BuildCustomizationSpec fields cannot change once + description: BuildCustomizationSpec fields cannot change once a cluster + is created properties: host: type: string