This is an automated email from the ASF dual-hosted git repository. astefanutti pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit ebcc70c2c453b367b1c4a0b5787eba9211b54ecc Author: Antonin Stefanutti <[email protected]> AuthorDate: Fri Jan 7 17:49:54 2022 +0100 chore(maven): Separate user and platform Maven settings --- pkg/cmd/install.go | 78 ++++++++++++++++++++-- .../integrationplatform/initialize_test.go | 26 -------- pkg/platform/defaults.go | 74 -------------------- pkg/trait/builder.go | 5 +- 4 files changed, 77 insertions(+), 106 deletions(-) diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go index 1921a2c..0f1225c 100644 --- a/pkg/cmd/install.go +++ b/pkg/cmd/install.go @@ -18,27 +18,33 @@ limitations under the License. package cmd import ( + "context" "fmt" "os" "regexp" "strings" "time" - "go.uber.org/multierr" - "github.com/pkg/errors" "github.com/spf13/cobra" "github.com/spf13/viper" + "go.uber.org/multierr" + corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + + ctrl "sigs.k8s.io/controller-runtime/pkg/client" v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/client" "github.com/apache/camel-k/pkg/install" "github.com/apache/camel-k/pkg/util/kubernetes" + "github.com/apache/camel-k/pkg/util/maven" "github.com/apache/camel-k/pkg/util/olm" + "github.com/apache/camel-k/pkg/util/patch" "github.com/apache/camel-k/pkg/util/registry" "github.com/apache/camel-k/pkg/util/watch" ) @@ -383,8 +389,37 @@ func (o *installCmdOptions) install(cobraCmd *cobra.Command, _ []string) error { } if len(o.MavenRepositories) > 0 { - for _, r := range o.MavenRepositories { - platform.AddConfiguration("repository", r) + var repositories []v1.Repository + var mirrors []maven.Mirror + + for i, r := range o.MavenRepositories { + if strings.Contains(r, "@mirrorOf=") { + mirror := maven.NewMirror(r) + if mirror.ID == "" { + mirror.ID = fmt.Sprintf("mirror-%03d", i) + } + mirrors = append(mirrors, mirror) + } else { + repository := maven.NewRepository(r) + if repository.ID == "" { + repository.ID = fmt.Sprintf("repository-%03d", i) + } + repositories = append(repositories, repository) + } + } + + settings := maven.NewDefaultSettings(repositories, mirrors) + + err := createDefaultMavenSettingsConfigMap(o.Context, c, namespace, platform.Name, settings) + if err != nil { + return err + } + + platform.Spec.Build.Maven.Settings.ConfigMapKeyRef = &corev1.ConfigMapKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: platform.Name + "-maven-settings", + }, + Key: "settings.xml", } } @@ -675,3 +710,38 @@ func decodeSecretKeySelector(secretKey string) (*corev1.SecretKeySelector, error Key: match[2], }, nil } + +func createDefaultMavenSettingsConfigMap(ctx context.Context, client client.Client, namespace, name string, settings maven.Settings) error { + cm, err := maven.SettingsConfigMap(namespace, name, settings) + if err != nil { + return err + } + + err = client.Create(ctx, cm) + if err != nil && !k8serrors.IsAlreadyExists(err) { + return err + } else if k8serrors.IsAlreadyExists(err) { + existing := &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: cm.Namespace, + Name: cm.Name, + }, + } + err = client.Get(ctx, ctrl.ObjectKeyFromObject(existing), existing) + if err != nil { + return err + } + + p, err := patch.PositiveMergePatch(existing, cm) + if err != nil { + return err + } else if len(p) != 0 { + err = client.Patch(ctx, cm, ctrl.RawPatch(types.MergePatchType, p)) + if err != nil { + return errors.Wrap(err, "error during patch resource") + } + } + } + + return nil +} diff --git a/pkg/controller/integrationplatform/initialize_test.go b/pkg/controller/integrationplatform/initialize_test.go index 4c7aa12..a718b12 100644 --- a/pkg/controller/integrationplatform/initialize_test.go +++ b/pkg/controller/integrationplatform/initialize_test.go @@ -115,29 +115,3 @@ func TestTimeouts_Truncated(t *testing.T) { assert.Equal(t, 5*time.Minute, answer.Status.Build.GetTimeout().Duration) } - -func TestDefaultMavenSettingsApplied(t *testing.T) { - ip := v1.IntegrationPlatform{} - ip.Namespace = "ns" - ip.Name = "test-platform" - ip.Spec.Cluster = v1.IntegrationPlatformClusterOpenShift - ip.Spec.Profile = v1.TraitProfileOpenShift - - c, err := test.NewFakeClient(&ip) - assert.Nil(t, err) - - assert.Nil(t, platform.ConfigureDefaults(context.TODO(), c, &ip, false)) - - h := NewInitializeAction() - h.InjectLogger(log.Log) - h.InjectClient(c) - - answer, err := h.Handle(context.TODO(), &ip) - assert.Nil(t, err) - assert.NotNil(t, answer) - - assert.NotNil(t, answer.Status.Build.Maven.Settings.ConfigMapKeyRef) - assert.Nil(t, answer.Spec.Build.Maven.Settings.ConfigMapKeyRef) - assert.Equal(t, "test-platform-maven-settings", answer.Status.Build.Maven.Settings.ConfigMapKeyRef.Name) - assert.Equal(t, "settings.xml", answer.Status.Build.Maven.Settings.ConfigMapKeyRef.Key) -} diff --git a/pkg/platform/defaults.go b/pkg/platform/defaults.go index 45bc09a..8355b32 100644 --- a/pkg/platform/defaults.go +++ b/pkg/platform/defaults.go @@ -19,7 +19,6 @@ package platform import ( "context" - "fmt" "runtime" "strings" "time" @@ -40,9 +39,7 @@ import ( "github.com/apache/camel-k/pkg/kamelet/repository" "github.com/apache/camel-k/pkg/util/defaults" "github.com/apache/camel-k/pkg/util/log" - "github.com/apache/camel-k/pkg/util/maven" "github.com/apache/camel-k/pkg/util/openshift" - "github.com/apache/camel-k/pkg/util/patch" ) // BuilderServiceAccount --. @@ -186,42 +183,6 @@ func setPlatformDefaults(ctx context.Context, c client.Client, p *v1.Integration } } - if p.Status.Build.Maven.Settings.ConfigMapKeyRef == nil && p.Status.Build.Maven.Settings.SecretKeyRef == nil { - var repositories []v1.Repository - var mirrors []maven.Mirror - for i, c := range p.Status.Configuration { - if c.Type == "repository" { - if strings.Contains(c.Value, "@mirrorOf=") { - mirror := maven.NewMirror(c.Value) - if mirror.ID == "" { - mirror.ID = fmt.Sprintf("mirror-%03d", i) - } - mirrors = append(mirrors, mirror) - } else { - repo := maven.NewRepository(c.Value) - if repo.ID == "" { - repo.ID = fmt.Sprintf("repository-%03d", i) - } - repositories = append(repositories, repo) - } - } - } - - settings := maven.NewDefaultSettings(repositories, mirrors) - - err := createDefaultMavenSettingsConfigMap(ctx, c, p, settings) - if err != nil { - return err - } - - p.Status.Build.Maven.Settings.ConfigMapKeyRef = &corev1.ConfigMapKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: p.Name + "-maven-settings", - }, - Key: "settings.xml", - } - } - if p.Status.Build.PublishStrategy == v1.IntegrationPlatformBuildPublishStrategyKaniko && p.Status.Build.KanikoBuildCache == nil { // Default to disabling Kaniko cache warmer // Using the cache warmer pod seems unreliable with the current Kaniko version @@ -262,41 +223,6 @@ func setStatusAdditionalInfo(platform *v1.IntegrationPlatform) { platform.Status.Info["gitCommit"] = defaults.GitCommit } -func createDefaultMavenSettingsConfigMap(ctx context.Context, client client.Client, p *v1.IntegrationPlatform, settings maven.Settings) error { - cm, err := maven.SettingsConfigMap(p.Namespace, p.Name, settings) - if err != nil { - return err - } - - err = client.Create(ctx, cm) - if err != nil && !k8serrors.IsAlreadyExists(err) { - return err - } else if k8serrors.IsAlreadyExists(err) { - existing := &corev1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: cm.Namespace, - Name: cm.Name, - }, - } - err = client.Get(ctx, ctrl.ObjectKeyFromObject(existing), existing) - if err != nil { - return err - } - - p, err := patch.PositiveMergePatch(existing, cm) - if err != nil { - return err - } else if len(p) != 0 { - err = client.Patch(ctx, cm, ctrl.RawPatch(types.MergePatchType, p)) - if err != nil { - return errors.Wrap(err, "error during patch resource") - } - } - } - - return nil -} - func createServiceCaBundleConfigMap(ctx context.Context, client client.Client, p *v1.IntegrationPlatform) (*corev1.ConfigMap, error) { cm := &corev1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go index e14f282..22f970d 100644 --- a/pkg/trait/builder.go +++ b/pkg/trait/builder.go @@ -135,8 +135,9 @@ func (t *builderTrait) Apply(e *Environment) error { } func (t *builderTrait) builderTask(e *Environment) (*v1.BuilderTask, error) { - maven := e.Platform.Status.Build.Maven - + maven := v1.MavenBuildSpec{ + MavenSpec: e.Platform.Status.Build.Maven, + } // Add Maven repositories defined in the IntegrationKit for _, repo := range e.IntegrationKit.Spec.Repositories { maven.Repositories = append(maven.Repositories, mvn.NewRepository(repo))
