in pkg/trait/knative.go [72:139]
func (t *knativeTrait) Configure(e *Environment) (bool, *TraitCondition, error) {
if e.Integration == nil {
return false, nil, nil
}
if !ptr.Deref(t.Enabled, true) {
return false, NewIntegrationConditionUserDisabled("Knative"), nil
}
if !e.IntegrationInPhase(v1.IntegrationPhaseInitialization) && !e.IntegrationInRunningPhases() {
return false, nil, nil
}
_, err := e.ConsumeMeta(false, func(meta metadata.IntegrationMetadata) bool {
if len(t.ChannelSources) == 0 {
t.ChannelSources = filterMetaItems(meta, knativeapi.CamelServiceTypeChannel, "from")
}
if len(t.ChannelSinks) == 0 {
t.ChannelSinks = filterMetaItems(meta, knativeapi.CamelServiceTypeChannel, "to")
}
if len(t.EndpointSources) == 0 {
t.EndpointSources = filterMetaItems(meta, knativeapi.CamelServiceTypeEndpoint, "from")
}
if len(t.EndpointSinks) == 0 {
t.EndpointSinks = filterMetaItems(meta, knativeapi.CamelServiceTypeEndpoint, "to")
}
if len(t.EventSources) == 0 {
t.EventSources = filterMetaItems(meta, knativeapi.CamelServiceTypeEvent, "from")
}
if len(t.EventSinks) == 0 {
t.EventSinks = filterMetaItems(meta, knativeapi.CamelServiceTypeEvent, "to")
}
return true
})
if err != nil {
return false, nil, err
}
if t.Enabled == nil {
// If the trait is enabled, then, we can skip this optimization
hasKnativeEndpoint := len(t.ChannelSources) > 0 || len(t.ChannelSinks) > 0 ||
len(t.EndpointSources) > 0 || len(t.EndpointSinks) > 0 ||
len(t.EventSources) > 0 || len(t.EventSinks) > 0
t.Enabled = ptr.To(hasKnativeEndpoint)
}
if ptr.Deref(t.Enabled, false) {
// Verify if Knative eventing is installed
knativeInstalled, err := knativeutil.IsEventingInstalled(e.Client)
if err != nil {
return false, nil, err
}
if !knativeInstalled {
return false, NewIntegrationCondition(
"Knative",
v1.IntegrationConditionKnativeAvailable,
corev1.ConditionFalse,
v1.IntegrationConditionKnativeNotInstalledReason,
"integration cannot run. Knative is not installed in the cluster",
), fmt.Errorf("integration cannot run. Knative is not installed in the cluster")
}
if t.SinkBinding == nil {
allowed := t.isSinkBindingAllowed(e)
t.SinkBinding = &allowed
}
}
return ptr.Deref(t.Enabled, false), nil, nil
}