This is an automated email from the ASF dual-hosted git repository. lburgazzoli 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 ce8c088 runtime(springboot): set the exact list of dependencies used by spring boot instead of use everithing in the dependencies folder ce8c088 is described below commit ce8c088127dc001ad4e5cff20c7b5c0cbbb0fa27 Author: lburgazzoli <lburgazz...@gmail.com> AuthorDate: Mon Dec 3 14:02:15 2018 +0100 runtime(springboot): set the exact list of dependencies used by spring boot instead of use everithing in the dependencies folder --- pkg/apis/camel/v1alpha1/types.go | 2 +- pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go | 6 ++-- pkg/builder/builder.go | 8 +++-- pkg/builder/builder_steps.go | 38 +++++++++++------------- pkg/builder/builder_types.go | 4 +-- pkg/builder/springboot/dependencies.go | 12 +++++++- pkg/stub/action/context/build.go | 11 ++++++- pkg/trait/springboot.go | 26 ++++++++++++++++ pkg/util/tar/appender.go | 2 +- 9 files changed, 77 insertions(+), 32 deletions(-) diff --git a/pkg/apis/camel/v1alpha1/types.go b/pkg/apis/camel/v1alpha1/types.go index 901c001..5626fef 100644 --- a/pkg/apis/camel/v1alpha1/types.go +++ b/pkg/apis/camel/v1alpha1/types.go @@ -171,7 +171,7 @@ type IntegrationContextStatus struct { Phase IntegrationContextPhase `json:"phase,omitempty"` Image string `json:"image,omitempty"` Digest string `json:"digest,omitempty"` - Classpath []string `json:"classpath,omitempty"` + Artifacts []Artifact `json:"artifacts,omitempty"` } // IntegrationContextPhase -- diff --git a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go index 9ae3d88..3086ad8 100644 --- a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go @@ -187,9 +187,9 @@ func (in *IntegrationContextSpec) DeepCopy() *IntegrationContextSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IntegrationContextStatus) DeepCopyInto(out *IntegrationContextStatus) { *out = *in - if in.Classpath != nil { - in, out := &in.Classpath, &out.Classpath - *out = make([]string, len(*in)) + if in.Artifacts != nil { + in, out := &in.Artifacts, &out.Artifacts + *out = make([]Artifact, len(*in)) copy(*out, *in) } return diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go index a04f3d8..163df7f 100644 --- a/pkg/builder/builder.go +++ b/pkg/builder/builder.go @@ -27,6 +27,8 @@ import ( "sync/atomic" "time" + "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" + "github.com/sirupsen/logrus" ) @@ -192,9 +194,9 @@ func (b *defaultBuilder) submit(request Request) { r.Status = StatusError } - r.Classpath = make([]string, 0, len(c.Artifacts)) - for _, l := range c.Artifacts { - r.Classpath = append(r.Classpath, l.ID) + r.Artifacts = make([]v1alpha1.Artifact, 0, len(c.Artifacts)) + for _, artifact := range c.Artifacts { + r.Artifacts = append(r.Artifacts, artifact) } // update the cache diff --git a/pkg/builder/builder_steps.go b/pkg/builder/builder_steps.go index 01af0dd..09530c0 100644 --- a/pkg/builder/builder_steps.go +++ b/pkg/builder/builder_steps.go @@ -152,10 +152,17 @@ func ComputeDependencies(ctx *Context) error { } for _, e := range cp["dependencies"] { + _, fileName := path.Split(e.Location) + + gav, err := maven.ParseGAV(e.ID) + if err != nil { + return nil + } + ctx.Artifacts = append(ctx.Artifacts, v1alpha1.Artifact{ ID: e.ID, Location: e.Location, - Target: "dependencies", + Target: path.Join("dependencies", gav.GroupID+"."+fileName), }) } @@ -222,14 +229,10 @@ func packager(ctx *Context, selector ArtifactsSelector) error { defer tarAppender.Close() for _, entry := range selectedArtifacts { - gav, err := maven.ParseGAV(entry.ID) - if err != nil { - return err - } + _, tarFileName := path.Split(entry.Target) + tarFilePath := path.Dir(entry.Target) - _, fileName := path.Split(entry.Location) - - _, err = tarAppender.AddFileWithName(gav.GroupID+"."+fileName, entry.Location, entry.Target) + _, err = tarAppender.AddFileWithName(tarFileName, entry.Location, tarFilePath) if err != nil { return err } @@ -238,12 +241,7 @@ func packager(ctx *Context, selector ArtifactsSelector) error { if ctx.ComputeClasspath { cp := "" for _, entry := range ctx.Artifacts { - gav, err := maven.ParseGAV(entry.ID) - if err != nil { - return nil - } - _, fileName := path.Split(entry.Location) - cp += path.Join(entry.Target, gav.GroupID+"."+fileName) + "\n" + cp += path.Join(entry.Target) + "\n" } err = tarAppender.AppendData([]byte(cp), "classpath") @@ -277,7 +275,7 @@ func ListPublishedImages(namespace string) ([]PublishedImage, error) { images = append(images, PublishedImage{ Image: ctx.Status.Image, - Classpath: ctx.Status.Classpath, + Artifacts: ctx.Status.Artifacts, }) } return images, nil @@ -298,15 +296,15 @@ func FindBestImage(images []PublishedImage, entries []v1alpha1.Artifact) (*Publi bestImageSurplusLibs := 0 for _, image := range images { common := make(map[string]bool) - for _, id := range image.Classpath { - if _, ok := requiredLibs[id]; ok { - common[id] = true + for _, artifact := range image.Artifacts { + if _, ok := requiredLibs[artifact.ID]; ok { + common[artifact.ID] = true } } numCommonLibs := len(common) - surplus := len(image.Classpath) - numCommonLibs + surplus := len(image.Artifacts) - numCommonLibs - if numCommonLibs != len(image.Classpath) && surplus >= numCommonLibs/3 { + if numCommonLibs != len(image.Artifacts) && surplus >= numCommonLibs/3 { // Heuristic approach: if there are too many unrelated libraries, just use the base image continue } diff --git a/pkg/builder/builder_types.go b/pkg/builder/builder_types.go index a81f879..1f970f0 100644 --- a/pkg/builder/builder_types.go +++ b/pkg/builder/builder_types.go @@ -122,7 +122,7 @@ type Result struct { Image string Error error Status Status - Classpath []string + Artifacts []v1alpha1.Artifact Task Task } @@ -144,7 +144,7 @@ type Context struct { // PublishedImage -- type PublishedImage struct { Image string - Classpath []string + Artifacts []v1alpha1.Artifact } // Status -- diff --git a/pkg/builder/springboot/dependencies.go b/pkg/builder/springboot/dependencies.go index 6c3aec1..e7f7e9e 100644 --- a/pkg/builder/springboot/dependencies.go +++ b/pkg/builder/springboot/dependencies.go @@ -18,8 +18,11 @@ limitations under the License. package springboot import ( + "path" "strings" + "github.com/apache/camel-k/pkg/util/maven" + "github.com/apache/camel-k/pkg/builder" ) @@ -27,9 +30,16 @@ import ( func ComputeDependencies(ctx *builder.Context) error { for i := 0; i < len(ctx.Artifacts); i++ { if strings.HasPrefix(ctx.Artifacts[i].ID, "org.apache.camel.k:camel-k-runtime-spring-boot:") { + + _, fileName := path.Split(ctx.Artifacts[i].Location) + gav, err := maven.ParseGAV(ctx.Artifacts[i].ID) + if err != nil { + return nil + } + // Don't set a target so the jar will be copied to the // deployment root - ctx.Artifacts[i].Target = "" + ctx.Artifacts[i].Target = gav.GroupID + "." + fileName } } diff --git a/pkg/stub/action/context/build.go b/pkg/stub/action/context/build.go index 4734bbc..8f7a9bf 100644 --- a/pkg/stub/action/context/build.go +++ b/pkg/stub/action/context/build.go @@ -88,7 +88,16 @@ func (action *buildAction) Handle(context *v1alpha1.IntegrationContext) error { target := context.DeepCopy() target.Status.Image = res.Image target.Status.Phase = v1alpha1.IntegrationContextPhaseReady - target.Status.Classpath = res.Classpath + target.Status.Artifacts = make([]v1alpha1.Artifact, 0, len(res.Artifacts)) + + for _, a := range res.Artifacts { + // do not include artifact location + target.Status.Artifacts = append(target.Status.Artifacts, v1alpha1.Artifact{ + ID: a.ID, + Location: "", + Target: a.Target, + }) + } logrus.Info("Context ", target.Name, " transitioning to state ", v1alpha1.IntegrationContextPhaseReady) diff --git a/pkg/trait/springboot.go b/pkg/trait/springboot.go index 7069d67..1314bfb 100644 --- a/pkg/trait/springboot.go +++ b/pkg/trait/springboot.go @@ -19,6 +19,10 @@ package trait import ( "sort" + "strings" + + "github.com/operator-framework/operator-sdk/pkg/sdk" + "github.com/pkg/errors" "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" "github.com/apache/camel-k/pkg/builder" @@ -80,6 +84,28 @@ func (trait *springBootTrait) apply(e *Environment) error { // Override env vars e.EnvVars["JAVA_MAIN_CLASS"] = "org.springframework.boot.loader.PropertiesLauncher" e.EnvVars["LOADER_PATH"] = "/deployments/dependencies/" + + if e.Integration.Spec.Context != "" { + name := e.Integration.Spec.Context + ctx := v1alpha1.NewIntegrationContext(e.Integration.Namespace, name) + + if err := sdk.Get(&ctx); err != nil { + return errors.Wrapf(err, "unable to find integration context %s, %s", ctx.Name, err) + } + + deps := make([]string, 0, len(ctx.Status.Artifacts)) + for _, artifact := range ctx.Status.Artifacts { + if strings.HasPrefix(artifact.ID, "org.apache.camel.k:camel-k-runtime-spring-boot:") { + // do not include runner jar + continue + } + + deps = append(deps, artifact.Target) + } + + e.EnvVars["LOADER_HOME"] = "/deployments" + e.EnvVars["LOADER_PATH"] = strings.Join(deps, ",") + } } // diff --git a/pkg/util/tar/appender.go b/pkg/util/tar/appender.go index 7ffbfad..f4fbecb 100644 --- a/pkg/util/tar/appender.go +++ b/pkg/util/tar/appender.go @@ -92,7 +92,7 @@ func (t *Appender) AddFile(filePath string, tarDir string) (string, error) { return fileName, nil } -// AddFileWithName adds a file content to the tarDir, using the fiven file name. +// AddFileWithName adds a file content to the tarDir, using the given file name. // It returns the full path of the file inside the tar. func (t *Appender) AddFileWithName(fileName string, filePath string, tarDir string) (string, error) { info, err := os.Stat(filePath)