in pkg/trait/container.go [123:205]
func (t *containerTrait) configureContainer(e *Environment) error {
if e.ApplicationProperties == nil {
e.ApplicationProperties = make(map[string]string)
}
container := corev1.Container{
Name: t.getContainerName(),
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)
var containers *[]corev1.Container
visited := false
knative := 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.Debugf("Skipping environment variable %s (fieldRef)", env.Name)
case env.ValueFrom.ResourceFieldRef != nil:
t.L.Debugf("Skipping environment variable %s (resourceFieldRef)", env.Name)
default:
envvar.SetVar(&container.Env, env)
}
}
containers = &service.Spec.ConfigurationSpec.Template.Spec.Containers
visited = true
knative = 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
}
t.configureResources(&container)
if knative || ptr.Deref(t.Expose, false) {
t.configureService(e, &container, knative)
}
t.configureCapabilities(e)
err := t.setSecurityContext(e, &container)
if err != nil {
return err
}
if visited {
*containers = append(*containers, container)
}
return nil
}