You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2022/01/07 13:48:14 UTC
[camel-k] 08/24: chore(trait/container): more refactoring
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 5c164ae1b51f07a05e52c795246b0e29723ddf34
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Tue Nov 30 13:26:32 2021 +0100
chore(trait/container): more refactoring
---
e2e/common/config/config_test.go | 28 +++------------
pkg/cmd/run.go | 6 ++--
pkg/cmd/run_help.go | 4 +--
pkg/trait/container.go | 76 +++++++++++++++++-----------------------
pkg/util/resource/config.go | 4 +--
5 files changed, 44 insertions(+), 74 deletions(-)
diff --git a/e2e/common/config/config_test.go b/e2e/common/config/config_test.go
index 9dcf9f3..f764fdc 100644
--- a/e2e/common/config/config_test.go
+++ b/e2e/common/config/config_test.go
@@ -23,9 +23,7 @@ limitations under the License.
package resources
import (
- "fmt"
"io/ioutil"
- "os"
"testing"
. "github.com/onsi/gomega"
@@ -164,6 +162,7 @@ func TestRunConfigExamples(t *testing.T) {
Eventually(IntegrationConditionStatus(ns, "config-file-route", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
Eventually(IntegrationLogs(ns, "config-file-route"), TestTimeoutShort).Should(ContainSubstring("the file body"))
Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+ Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
})
// Resource File
@@ -174,6 +173,7 @@ func TestRunConfigExamples(t *testing.T) {
Eventually(IntegrationConditionStatus(ns, "resource-file-route", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
Eventually(IntegrationLogs(ns, "resource-file-route"), TestTimeoutShort).Should(ContainSubstring("the file body"))
Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+ Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
})
t.Run("Plain text resource file with destination path", func(t *testing.T) {
@@ -182,6 +182,7 @@ func TestRunConfigExamples(t *testing.T) {
Eventually(IntegrationConditionStatus(ns, "resource-file-location-route", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
Eventually(IntegrationLogs(ns, "resource-file-location-route"), TestTimeoutShort).Should(ContainSubstring("the file body"))
Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+ Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
})
t.Run("Binary (zip) resource file", func(t *testing.T) {
@@ -190,6 +191,7 @@ func TestRunConfigExamples(t *testing.T) {
Eventually(IntegrationConditionStatus(ns, "resource-file-binary-route", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
Eventually(IntegrationLogs(ns, "resource-file-binary-route"), TestTimeoutShort).Should(ContainSubstring("the file body"))
Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+ Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
})
t.Run("Base64 compressed binary resource file", func(t *testing.T) {
@@ -204,6 +206,7 @@ func TestRunConfigExamples(t *testing.T) {
Eventually(IntegrationConditionStatus(ns, "resource-file-base64-encoded-route", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
Eventually(IntegrationLogs(ns, "resource-file-base64-encoded-route"), TestTimeoutShort).Should(ContainSubstring(string(expectedBytes)))
Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+ Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
})
// Build-Properties
@@ -244,26 +247,5 @@ func TestRunConfigExamples(t *testing.T) {
Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
})
- // Resource File: generated configmap must be deleted when Integration is deleted
-
- t.Run("Plain text sync resource file generated configmap", func(t *testing.T) {
- var tmpFile *os.File
- var err error
- if tmpFile, err = ioutil.TempFile("", "camel-k-"); err != nil {
- t.Error(err)
- }
- assert.Nil(t, tmpFile.Close())
- assert.Nil(t, ioutil.WriteFile(tmpFile.Name(), []byte("Hello from test!"), 0o644))
-
- Expect(Kamel("run", "-n", ns, "./files/resource-file-location-route.groovy", "--resource", fmt.Sprintf("file:%s@/tmp/file.txt", tmpFile.Name())).Execute()).To(Succeed())
- Eventually(IntegrationPodPhase(ns, "resource-file-location-route"), TestTimeoutMedium).Should(Equal(corev1.PodRunning))
- Eventually(IntegrationConditionStatus(ns, "resource-file-location-route", v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
- Eventually(IntegrationLogs(ns, "resource-file-location-route"), TestTimeoutShort).Should(ContainSubstring("Hello from test!"))
-
- Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
- // When the integration is deleted, then, also the autogenerated configmaps must be cleaned
- Eventually(AutogeneratedConfigmapsCount(ns), TestTimeoutShort).Should(Equal(0))
- })
-
})
}
diff --git a/pkg/cmd/run.go b/pkg/cmd/run.go
index da6eb5e..5ff377e 100644
--- a/pkg/cmd/run.go
+++ b/pkg/cmd/run.go
@@ -226,13 +226,13 @@ func (o *runCmdOptions) validate() error {
}
// Deprecation warning
- if o.PropertyFiles != nil {
+ if o.PropertyFiles != nil && len(o.PropertyFiles) > 0 {
fmt.Println("Warn: --property-file has been deprecated. You should use --property file:/path/to/conf.properties instead.")
}
- if o.ConfigMaps != nil {
+ if o.ConfigMaps != nil && len(o.ConfigMaps) > 0 {
fmt.Println("Warn: --configmap has been deprecated. You should use --config configmap:my-configmap instead.")
}
- if o.Secrets != nil {
+ if o.Secrets != nil && len(o.Secrets) > 0 {
fmt.Println("Warn: --secret has been deprecated. You should use --config secret:my-secret instead.")
}
diff --git a/pkg/cmd/run_help.go b/pkg/cmd/run_help.go
index c87df46..dcbacf5 100644
--- a/pkg/cmd/run_help.go
+++ b/pkg/cmd/run_help.go
@@ -33,8 +33,6 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
-var invalidPaths = []string{"/etc/camel", "/deployments/dependencies"}
-
//nolint
func hashFrom(contents ...[]byte) string {
// SHA1 because we need to limit the length to less than 64 chars
@@ -93,7 +91,7 @@ func applyOption(ctx context.Context, config *resource.Config, integration *v1.I
if err != nil {
return maybeGenCm, err
}
- maybeGenCm, err = resource.ConvertFileToConfigmap(ctx, c, resourceSpec, config, integration.Namespace, resourceType)
+ maybeGenCm, err = resource.ConvertFileToConfigmap(ctx, c, resourceSpec, config, integration.Namespace, integration.Name, resourceType)
if err != nil {
return maybeGenCm, err
}
diff --git a/pkg/trait/container.go b/pkg/trait/container.go
index 09f4e53..cc0ca1b 100644
--- a/pkg/trait/container.go
+++ b/pkg/trait/container.go
@@ -255,31 +255,31 @@ func (t *containerTrait) configureContainer(e *Environment) error {
envvar.SetVal(&container.Env, "CAMEL_K_CONF_D", camel.ConfDPath)
e.addSourcesProperties()
+ if props, err := e.computeApplicationProperties(); err != nil {
+ return err
+ } else if props != nil {
+ e.Resources.Add(props)
+ }
t.configureResources(e, &container)
-
if IsTrue(t.Expose) {
t.configureService(e, &container)
}
t.configureCapabilities(e)
+ var volumes *[]corev1.Volume
+ var containers *[]corev1.Container
+ visited := false
+
// Deployment
if err := e.Resources.VisitDeploymentE(func(deployment *appsv1.Deployment) error {
for _, envVar := range e.EnvVars {
envvar.SetVar(&container.Env, envVar)
}
- if props, err := e.computeApplicationProperties(); err != nil {
- return err
- } else if props != nil {
- e.Resources.Add(props)
- }
-
- err := t.configureVolumesAndMounts(e, &deployment.Spec.Template.Spec.Volumes, &container.VolumeMounts)
- if err != nil {
- return err
- }
- deployment.Spec.Template.Spec.Containers = append(deployment.Spec.Template.Spec.Containers, container)
+ volumes = &deployment.Spec.Template.Spec.Volumes
+ containers = &deployment.Spec.Template.Spec.Containers
+ visited = true
return nil
}); err != nil {
return err
@@ -301,19 +301,10 @@ func (t *containerTrait) configureContainer(e *Environment) error {
envvar.SetVar(&container.Env, env)
}
}
- if props, err := e.computeApplicationProperties(); err != nil {
- return err
- } else if props != nil {
- e.Resources.Add(props)
- }
-
- e.configureVolumesAndMounts(
- &service.Spec.ConfigurationSpec.Template.Spec.Volumes,
- &container.VolumeMounts,
- )
-
- service.Spec.ConfigurationSpec.Template.Spec.Containers = append(service.Spec.ConfigurationSpec.Template.Spec.Containers, container)
+ volumes = &service.Spec.ConfigurationSpec.Template.Spec.Volumes
+ containers = &service.Spec.ConfigurationSpec.Template.Spec.Containers
+ visited = true
return nil
}); err != nil {
return err
@@ -324,41 +315,40 @@ func (t *containerTrait) configureContainer(e *Environment) error {
for _, envVar := range e.EnvVars {
envvar.SetVar(&container.Env, envVar)
}
- if props, err := e.computeApplicationProperties(); err != nil {
- return err
- } else if props != nil {
- e.Resources.Add(props)
- }
-
- e.configureVolumesAndMounts(
- &cron.Spec.JobTemplate.Spec.Template.Spec.Volumes,
- &container.VolumeMounts,
- )
-
- cron.Spec.JobTemplate.Spec.Template.Spec.Containers = append(cron.Spec.JobTemplate.Spec.Template.Spec.Containers, container)
+ volumes = &cron.Spec.JobTemplate.Spec.Template.Spec.Volumes
+ containers = &cron.Spec.JobTemplate.Spec.Template.Spec.Containers
+ visited = true
return nil
}); err != nil {
return err
}
+ if visited {
+ // Volumes declared in the Integration resources
+ e.configureVolumesAndMounts(volumes, &container.VolumeMounts)
+ // Volumes declared in the trait config/resource options
+ err := t.configureVolumesAndMounts(volumes, &container.VolumeMounts)
+ if err != nil {
+ return err
+ }
+ *containers = append(*containers, container)
+ }
+
return nil
}
-func (t *containerTrait) configureVolumesAndMounts(e *Environment, vols *[]corev1.Volume, mnts *[]corev1.VolumeMount) error {
- // Volumes declared in the Integration resources
- e.configureVolumesAndMounts(vols, mnts)
- // Volumes declared in the trait config/resource options
+func (t *containerTrait) configureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]corev1.VolumeMount) error {
for _, c := range t.Configs {
if conf, parseErr := utilResource.ParseConfig(c); parseErr == nil {
- t.mountResource(e, vols, mnts, conf)
+ t.mountResource(vols, mnts, conf)
} else {
return parseErr
}
}
for _, r := range t.Resources {
if res, parseErr := utilResource.ParseResource(r); parseErr == nil {
- t.mountResource(e, vols, mnts, res)
+ t.mountResource(vols, mnts, res)
} else {
return parseErr
}
@@ -367,7 +357,7 @@ func (t *containerTrait) configureVolumesAndMounts(e *Environment, vols *[]corev
return nil
}
-func (t *containerTrait) mountResource(e *Environment, vols *[]corev1.Volume, mnts *[]corev1.VolumeMount, conf *utilResource.Config) {
+func (t *containerTrait) mountResource(vols *[]corev1.Volume, mnts *[]corev1.VolumeMount, conf *utilResource.Config) {
refName := kubernetes.SanitizeLabel(conf.Name())
vol := getVolume(refName, string(conf.StorageType()), conf.Name(), conf.Key(), conf.Key())
mnt := getMount(refName, conf.DestinationPath(), "")
diff --git a/pkg/util/resource/config.go b/pkg/util/resource/config.go
index a09f372..d900622 100644
--- a/pkg/util/resource/config.go
+++ b/pkg/util/resource/config.go
@@ -208,7 +208,7 @@ func parse(item string, contentType ContentType) (*Config, error) {
// taking care to create the Configmap on the cluster. The method will change the value of config parameter
// to reflect the conversion applied transparently.
func ConvertFileToConfigmap(ctx context.Context, c client.Client, resourceSpec v1.ResourceSpec, config *Config,
- namespace string, resourceType v1.ResourceType) (*corev1.ConfigMap, error) {
+ namespace string, integrationName string, resourceType v1.ResourceType) (*corev1.ConfigMap, error) {
if config.DestinationPath() == "" {
config.resourceKey = filepath.Base(config.Name())
// As we are changing the resource to a configmap type
@@ -223,7 +223,7 @@ func ConvertFileToConfigmap(ctx context.Context, c client.Client, resourceSpec v
config.resourceKey = filepath.Base(config.DestinationPath())
config.destinationPath = filepath.Dir(config.DestinationPath())
}
- genCmName := fmt.Sprintf("cm-%s", hashFrom([]byte(resourceSpec.Content), resourceSpec.RawContent))
+ genCmName := fmt.Sprintf("cm-%s", hashFrom([]byte(integrationName), []byte(resourceSpec.Content), resourceSpec.RawContent))
cm := kubernetes.NewConfigmap(namespace, genCmName, filepath.Base(config.Name()), config.Key(), resourceSpec.Content, resourceSpec.RawContent)
err := c.Create(ctx, cm)
if err != nil {