This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/master by this push:
     new 46317b5  fix: Enable maven strict checksum policy on platform 
initialization
     new f889687  Merge pull request #836 from 
jamesnetherton/776-platform-strict-checksum
46317b5 is described below

commit 46317b528f8e375d84a6c970baa97b34eda3b2c4
Author: James Netherton <jamesnether...@gmail.com>
AuthorDate: Thu Jul 18 08:11:04 2019 +0100

    fix: Enable maven strict checksum policy on platform initialization
    
    fixes #776
---
 .../v1alpha1/integrationplatform_types_support.go  |   8 ++
 pkg/cmd/install.go                                 |  71 +---------
 pkg/controller/integrationplatform/initialize.go   |  53 +++++++-
 .../integrationplatform/initialize_test.go         |  22 +++
 pkg/util/maven/maven_settings.go                   |  68 +++++++++-
 pkg/util/maven/maven_settings_test.go              | 149 +++++++++++++++++++++
 6 files changed, 300 insertions(+), 71 deletions(-)

diff --git a/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go 
b/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go
index ff35966..3a5def0 100644
--- a/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go
+++ b/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go
@@ -76,6 +76,14 @@ func (in *IntegrationPlatform) Configurations() 
[]ConfigurationSpec {
        return in.Spec.Configuration
 }
 
+// AddConfiguration --
+func (in *IntegrationPlatform) AddConfiguration(confType string, confValue 
string) {
+       in.Spec.Configuration = append(in.Spec.Configuration, ConfigurationSpec{
+               Type:  confType,
+               Value: confValue,
+       })
+}
+
 // GetCondition returns the condition with the provided type.
 func (in *IntegrationPlatformStatus) GetCondition(condType 
IntegrationPlatformConditionType) *IntegrationPlatformCondition {
        for i := range in.Conditions {
diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index 885fb0a..9f13bb6 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -31,9 +31,7 @@ import (
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
        "github.com/apache/camel-k/pkg/client"
        "github.com/apache/camel-k/pkg/install"
-       "github.com/apache/camel-k/pkg/util"
        "github.com/apache/camel-k/pkg/util/kubernetes"
-       "github.com/apache/camel-k/pkg/util/maven"
        "github.com/apache/camel-k/pkg/util/watch"
 
        "github.com/pkg/errors"
@@ -41,7 +39,6 @@ import (
 
        corev1 "k8s.io/api/core/v1"
        k8serrors "k8s.io/apimachinery/pkg/api/errors"
-       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 func newCmdInstall(rootCmdOptions *RootCmdOptions) *cobra.Command {
@@ -212,62 +209,10 @@ func (o *installCmdOptions) install(_ *cobra.Command, _ 
[]string) error {
                        platform.Spec.Build.Timeout.Duration = d
                }
 
-               o.mavenSettings = 
fmt.Sprintf("configmap:%s-maven-settings/settings.xml", platform.Name)
-
-               settings := maven.NewSettings()
-               repositories := make([]maven.Repository, 0, 
len(o.mavenRepositories))
-
-               for i, r := range o.mavenRepositories {
-                       repository := maven.NewRepository(r)
-                       if repository.ID == "" {
-                               repository.ID = fmt.Sprintf("repository-%03d", 
i)
+               if len(o.mavenRepositories) > 0 {
+                       for _, r := range o.mavenRepositories {
+                               platform.AddConfiguration("repository", r)
                        }
-
-                       repositories = append(repositories, repository)
-               }
-
-               // Enables strict checksums for Maven central if not already 
configured
-               if !containsMvnCentral(repositories) {
-                       repository := 
maven.NewRepository("https://repo.maven.apache.org/maven2@id=central";)
-                       repositories = append([]maven.Repository{repository}, 
repositories...)
-               }
-
-               settings.Profiles = []maven.Profile{
-                       {
-                               ID: "maven-settings",
-                               Activation: maven.Activation{
-                                       ActiveByDefault: true,
-                               },
-                               Repositories:       repositories,
-                               PluginRepositories: repositories,
-                       },
-               }
-
-               data, err := util.EncodeXML(settings)
-               if err != nil {
-                       return err
-               }
-
-               cm := corev1.ConfigMap{
-                       TypeMeta: metav1.TypeMeta{
-                               Kind:       "ConfigMap",
-                               APIVersion: "v1",
-                       },
-                       ObjectMeta: metav1.ObjectMeta{
-                               Name:      platform.Name + "-maven-settings",
-                               Namespace: namespace,
-                               Labels: map[string]string{
-                                       "app": "camel-k",
-                               },
-                       },
-                       Data: map[string]string{
-                               "settings.xml": string(data),
-                       },
-               }
-
-               err = install.RuntimeObjectOrCollect(o.Context, c, namespace, 
collection, &cm)
-               if err != nil {
-                       return err
                }
 
                if o.mavenSettings != "" {
@@ -275,7 +220,6 @@ func (o *installCmdOptions) install(_ *cobra.Command, _ 
[]string) error {
                        if err != nil {
                                return err
                        }
-
                        platform.Spec.Build.Maven.Settings = mavenSettings
                }
 
@@ -438,12 +382,3 @@ func decodeMavenSettings(mavenSettings string) 
(v1alpha1.ValueSource, error) {
 
        return v1alpha1.ValueSource{}, fmt.Errorf("illegal maven setting 
definition, syntax: configmap|secret:resource-name[/settings path]")
 }
-
-func containsMvnCentral(repositories []maven.Repository) bool {
-       for _, r := range repositories {
-               if r.ID == "central" {
-                       return true
-               }
-       }
-       return false
-}
diff --git a/pkg/controller/integrationplatform/initialize.go 
b/pkg/controller/integrationplatform/initialize.go
index e387941..fc2ac59 100644
--- a/pkg/controller/integrationplatform/initialize.go
+++ b/pkg/controller/integrationplatform/initialize.go
@@ -19,8 +19,11 @@ package integrationplatform
 
 import (
        "context"
+       "fmt"
        "time"
 
+       "github.com/apache/camel-k/pkg/util/maven"
+
        corev1 "k8s.io/api/core/v1"
        k8serrors "k8s.io/apimachinery/pkg/api/errors"
        "k8s.io/apimachinery/pkg/api/resource"
@@ -110,7 +113,10 @@ func (action *initializeAction) Handle(ctx 
context.Context, platform *v1alpha1.I
                action.L.Info("No registry specified for publishing images")
        }
 
-       action.setDefaults(platform)
+       err = action.setDefaults(ctx, platform)
+       if err != nil {
+               return nil, err
+       }
 
        if platform.Spec.Build.Maven.Timeout.Duration != 0 {
                action.L.Infof("Maven Timeout set to %s", 
platform.Spec.Build.Maven.Timeout.Duration)
@@ -168,7 +174,7 @@ func (action *initializeAction) isDuplicate(ctx 
context.Context, thisPlatform *v
        return false, nil
 }
 
-func (action *initializeAction) setDefaults(platform 
*v1alpha1.IntegrationPlatform) {
+func (action *initializeAction) setDefaults(ctx context.Context, platform 
*v1alpha1.IntegrationPlatform) error {
        if platform.Spec.Profile == "" {
                platform.Spec.Profile = platformutil.GetProfile(platform)
        }
@@ -215,12 +221,41 @@ func (action *initializeAction) setDefaults(platform 
*v1alpha1.IntegrationPlatfo
                platform.Spec.Build.Maven.Timeout.Duration = (time.Duration(n) 
* time.Second).Truncate(time.Second)
        }
 
+       if platform.Spec.Build.Maven.Settings.ConfigMapKeyRef == nil && 
platform.Spec.Build.Maven.Settings.SecretKeyRef == nil {
+               var repositories []maven.Repository
+               for i, c := range platform.Spec.Configuration {
+                       if c.Type == "repository" {
+                               repository := maven.NewRepository(c.Value)
+                               if repository.ID == "" {
+                                       repository.ID = 
fmt.Sprintf("repository-%03d", i)
+                               }
+                               repositories = append(repositories, repository)
+                       }
+               }
+
+               settings := maven.NewDefaultSettings(repositories)
+
+               err := createMavenSettingsConfigMap(ctx, action.client, 
platform, 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",
+               }
+       }
+
        action.L.Infof("CamelVersion set to %s", 
platform.Spec.Build.CamelVersion)
        action.L.Infof("RuntimeVersion set to %s", 
platform.Spec.Build.RuntimeVersion)
        action.L.Infof("BaseImage set to %s", platform.Spec.Build.BaseImage)
        action.L.Infof("LocalRepository set to %s", 
platform.Spec.Build.LocalRepository)
        action.L.Infof("Timeout set to %s", platform.Spec.Build.Timeout)
        action.L.Infof("Maven Timeout set to %s", 
platform.Spec.Build.Maven.Timeout.Duration)
+
+       return nil
 }
 
 func createPersistentVolumeClaim(ctx context.Context, client client.Client, 
platform *v1alpha1.IntegrationPlatform) error {
@@ -261,3 +296,17 @@ func createPersistentVolumeClaim(ctx context.Context, 
client client.Client, plat
 
        return nil
 }
+
+func createMavenSettingsConfigMap(ctx context.Context, client client.Client, 
platform *v1alpha1.IntegrationPlatform, settings maven.Settings) error {
+       cm, err := maven.CreateSettingsConfigMap(platform.Namespace, 
platform.Name, settings)
+       if err != nil {
+               return err
+       }
+
+       err = client.Create(ctx, cm)
+       if err != nil && !k8serrors.IsAlreadyExists(err) {
+               return err
+       }
+
+       return nil
+}
diff --git a/pkg/controller/integrationplatform/initialize_test.go 
b/pkg/controller/integrationplatform/initialize_test.go
index bd181a7..e744a9d 100644
--- a/pkg/controller/integrationplatform/initialize_test.go
+++ b/pkg/controller/integrationplatform/initialize_test.go
@@ -122,3 +122,25 @@ func TestTimeouts_Truncated(t *testing.T) {
        assert.Equal(t, 2*time.Minute, answer.Spec.Build.Maven.Timeout.Duration)
        assert.Equal(t, 5*time.Minute, answer.Spec.Build.Timeout.Duration)
 }
+
+func TestDefaultMavenSettingsApplied(t *testing.T) {
+       ip := v1alpha1.IntegrationPlatform{}
+       ip.Namespace = "ns"
+       ip.Name = "test-platform"
+       ip.Spec.Cluster = v1alpha1.IntegrationPlatformClusterOpenShift
+
+       c, err := test.NewFakeClient(&ip)
+       assert.Nil(t, err)
+
+       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.Spec.Build.Maven.Settings.ConfigMapKeyRef)
+       assert.Equal(t, "test-platform-maven-settings", 
answer.Spec.Build.Maven.Settings.ConfigMapKeyRef.Name)
+       assert.Equal(t, "settings.xml", 
answer.Spec.Build.Maven.Settings.ConfigMapKeyRef.Key)
+}
diff --git a/pkg/util/maven/maven_settings.go b/pkg/util/maven/maven_settings.go
index 16f96b7..1111e26 100644
--- a/pkg/util/maven/maven_settings.go
+++ b/pkg/util/maven/maven_settings.go
@@ -17,7 +17,14 @@ limitations under the License.
 
 package maven
 
-import "encoding/xml"
+import (
+       "encoding/xml"
+
+       "github.com/apache/camel-k/pkg/util"
+
+       corev1 "k8s.io/api/core/v1"
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
 
 // NewSettings --
 func NewSettings() Settings {
@@ -28,3 +35,62 @@ func NewSettings() Settings {
                XsiSchemaLocation: "http://maven.apache.org/SETTINGS/1.0.0 
https://maven.apache.org/xsd/settings-1.0.0.xsd";,
        }
 }
+
+// NewDefaultSettings --
+func NewDefaultSettings(repositories []Repository) Settings {
+       settings := NewSettings()
+
+       if !containsMvnCentral(repositories) {
+               repository := 
NewRepository("https://repo.maven.apache.org/maven2@id=central";)
+               repositories = append([]Repository{repository}, repositories...)
+       }
+
+       settings.Profiles = []Profile{
+               {
+                       ID: "maven-settings",
+                       Activation: Activation{
+                               ActiveByDefault: true,
+                       },
+                       Repositories:       repositories,
+                       PluginRepositories: repositories,
+               },
+       }
+
+       return settings
+}
+
+// CreateSettingsConfigMap --
+func CreateSettingsConfigMap(namespace string, name string, settings Settings) 
(*corev1.ConfigMap, error) {
+       data, err := util.EncodeXML(settings)
+       if err != nil {
+               return nil, err
+       }
+
+       cm := &corev1.ConfigMap{
+               TypeMeta: metav1.TypeMeta{
+                       Kind:       "ConfigMap",
+                       APIVersion: "v1",
+               },
+               ObjectMeta: metav1.ObjectMeta{
+                       Name:      name + "-maven-settings",
+                       Namespace: namespace,
+                       Labels: map[string]string{
+                               "app": "camel-k",
+                       },
+               },
+               Data: map[string]string{
+                       "settings.xml": string(data),
+               },
+       }
+
+       return cm, nil
+}
+
+func containsMvnCentral(repositories []Repository) bool {
+       for _, r := range repositories {
+               if r.ID == "central" {
+                       return true
+               }
+       }
+       return false
+}
diff --git a/pkg/util/maven/maven_settings_test.go 
b/pkg/util/maven/maven_settings_test.go
index 75d2a20..a4a1776 100644
--- a/pkg/util/maven/maven_settings_test.go
+++ b/pkg/util/maven/maven_settings_test.go
@@ -54,6 +54,114 @@ const expectedSettings = `<?xml version="1.0" 
encoding="UTF-8"?>
   </profiles>
 </settings>`
 
+const expectedDefaultSettings = `<?xml version="1.0" encoding="UTF-8"?>
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; ` +
+       `xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
https://maven.apache.org/xsd/settings-1.0.0.xsd";>
+  <localRepository></localRepository>
+  <profiles>
+    <profile>
+      <id>maven-settings</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <repositories>
+        <repository>
+          <id>central</id>
+          <url>https://repo.maven.apache.org/maven2</url>
+          <snapshots>
+            <enabled>false</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </snapshots>
+          <releases>
+            <enabled>true</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </releases>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <id>central</id>
+          <url>https://repo.maven.apache.org/maven2</url>
+          <snapshots>
+            <enabled>false</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </snapshots>
+          <releases>
+            <enabled>true</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </releases>
+        </pluginRepository>
+      </pluginRepositories>
+    </profile>
+  </profiles>
+</settings>`
+
+const expectedDefaultSettingsWithExtraRepo = `<?xml version="1.0" 
encoding="UTF-8"?>
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; ` +
+       `xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
https://maven.apache.org/xsd/settings-1.0.0.xsd";>
+  <localRepository></localRepository>
+  <profiles>
+    <profile>
+      <id>maven-settings</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <repositories>
+        <repository>
+          <id>central</id>
+          <url>https://repo1.maven.org/maven2</url>
+          <snapshots>
+            <enabled>false</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </snapshots>
+          <releases>
+            <enabled>true</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </releases>
+        </repository>
+        <repository>
+          <id>foo</id>
+          <url>https://foo.bar.org/repo</url>
+          <snapshots>
+            <enabled>false</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </snapshots>
+          <releases>
+            <enabled>true</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </releases>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <id>central</id>
+          <url>https://repo1.maven.org/maven2</url>
+          <snapshots>
+            <enabled>false</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </snapshots>
+          <releases>
+            <enabled>true</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </releases>
+        </pluginRepository>
+        <pluginRepository>
+          <id>foo</id>
+          <url>https://foo.bar.org/repo</url>
+          <snapshots>
+            <enabled>false</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </snapshots>
+          <releases>
+            <enabled>true</enabled>
+            <checksumPolicy>fail</checksumPolicy>
+          </releases>
+        </pluginRepository>
+      </pluginRepositories>
+    </profile>
+  </profiles>
+</settings>`
+
 func TestSettingsGeneration(t *testing.T) {
        settings := NewSettings()
        settings.LocalRepository = "/tmp/artifacts/m2"
@@ -88,3 +196,44 @@ func TestSettingsGeneration(t *testing.T) {
 
        assert.Equal(t, expectedSettings, string(content))
 }
+
+func TestDefaultSettingsGeneration(t *testing.T) {
+       settings := NewDefaultSettings([]Repository{})
+
+       content, err := util.EncodeXML(settings)
+
+       assert.Nil(t, err)
+       assert.NotNil(t, settings)
+
+       assert.Equal(t, expectedDefaultSettings, string(content))
+}
+
+func TestDefaultSettingsGenerationWithAdditionalRepo(t *testing.T) {
+       repositories := []Repository{
+               NewRepository("https://repo1.maven.org/maven2@id=central";),
+               NewRepository("https://foo.bar.org/repo@id=foo";),
+       }
+       settings := NewDefaultSettings(repositories)
+
+       content, err := util.EncodeXML(settings)
+
+       assert.Nil(t, err)
+       assert.NotNil(t, settings)
+
+       assert.Equal(t, expectedDefaultSettingsWithExtraRepo, string(content))
+}
+
+func TestCreateSettingsConfigMap(t *testing.T) {
+       settings := NewDefaultSettings([]Repository{})
+
+       configMap, err := CreateSettingsConfigMap("foo", "bar", settings)
+       assert.Nil(t, err)
+       assert.NotNil(t, configMap)
+
+       content, err := util.EncodeXML(settings)
+
+       assert.Nil(t, err)
+       assert.NotNil(t, settings)
+
+       assert.Equal(t, string(content), configMap.Data["settings.xml"])
+}

Reply via email to