in pkg/trait/container.go [166:261]
func (t *containerTrait) configureContainer(e *Environment) error {
if e.ApplicationProperties == nil {
e.ApplicationProperties = make(map[string]string)
}
container := corev1.Container{
Name: t.Name,
Image: e.Integration.Status.Image,
Env: make([]corev1.EnvVar, 0),
}
if t.ImagePullPolicy != "" {
container.ImagePullPolicy = t.ImagePullPolicy
}
// combine Environment of integration with platform, kit, integration
for _, env := range e.collectConfigurationPairs("env") {
envvar.SetVal(&container.Env, env.Name, env.Value)
}
envvar.SetVal(&container.Env, digest.IntegrationDigestEnvVar, e.Integration.Status.Digest)
envvar.SetVal(&container.Env, "CAMEL_K_CONF", filepath.Join(camel.BasePath, "application.properties"))
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(&container)
if pointer.BoolDeref(t.Expose, false) {
t.configureService(e, &container)
}
t.configureCapabilities(e)
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)
}
containers = &deployment.Spec.Template.Spec.Containers
visited = true
return nil
}); err != nil {
return err
}
// Knative Service
if err := e.Resources.VisitKnativeServiceE(func(service *serving.Service) error {
for _, env := range e.EnvVars {
switch {
case env.ValueFrom == nil:
envvar.SetVar(&container.Env, env)
case env.ValueFrom.FieldRef != nil && env.ValueFrom.FieldRef.FieldPath == "metadata.namespace":
envvar.SetVar(&container.Env, corev1.EnvVar{Name: env.Name, Value: e.Integration.Namespace})
case env.ValueFrom.FieldRef != nil:
t.L.Infof("Skipping environment variable %s (fieldRef)", env.Name)
case env.ValueFrom.ResourceFieldRef != nil:
t.L.Infof("Skipping environment variable %s (resourceFieldRef)", env.Name)
default:
envvar.SetVar(&container.Env, env)
}
}
containers = &service.Spec.ConfigurationSpec.Template.Spec.Containers
visited = true
return nil
}); err != nil {
return err
}
// CronJob
if err := e.Resources.VisitCronJobE(func(cron *batchv1.CronJob) error {
for _, envVar := range e.EnvVars {
envvar.SetVar(&container.Env, envVar)
}
containers = &cron.Spec.JobTemplate.Spec.Template.Spec.Containers
visited = true
return nil
}); err != nil {
return err
}
if visited {
*containers = append(*containers, container)
}
return nil
}