blob: d29f93d1a04cf9843d231ca59befc9763b63fe95 [file] [log] [blame]
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
// Important: Run "make generate-deepcopy" to regenerate code after modifying this file
// IntegrationSpec defines the desired state of Integration
type IntegrationSpec struct {
Replicas *int32 `json:"replicas,omitempty"`
Sources []SourceSpec `json:"sources,omitempty"`
Flows []Flow `json:"flows,omitempty"`
Resources []ResourceSpec `json:"resources,omitempty"`
Kit string `json:"kit,omitempty"`
Dependencies []string `json:"dependencies,omitempty"`
Profile TraitProfile `json:"profile,omitempty"`
Traits map[string]TraitSpec `json:"traits,omitempty"`
Configuration []ConfigurationSpec `json:"configuration,omitempty"`
Repositories []string `json:"repositories,omitempty"`
ServiceAccountName string `json:"serviceAccountName,omitempty"`
}
// IntegrationStatus defines the observed state of Integration
type IntegrationStatus struct {
Phase IntegrationPhase `json:"phase,omitempty"`
Digest string `json:"digest,omitempty"`
Image string `json:"image,omitempty"`
Dependencies []string `json:"dependencies,omitempty"`
Profile TraitProfile `json:"profile,omitempty"`
Kit string `json:"kit,omitempty"`
Platform string `json:"platform,omitempty"`
GeneratedSources []SourceSpec `json:"generatedSources,omitempty"`
GeneratedResources []ResourceSpec `json:"generatedResources,omitempty"`
Failure *Failure `json:"failure,omitempty"`
RuntimeVersion string `json:"runtimeVersion,omitempty"`
RuntimeProvider RuntimeProvider `json:"runtimeProvider,omitempty"`
Configuration []ConfigurationSpec `json:"configuration,omitempty"`
Conditions []IntegrationCondition `json:"conditions,omitempty"`
Version string `json:"version,omitempty"`
Replicas *int32 `json:"replicas,omitempty"`
Selector string `json:"selector,omitempty"`
Capabilities []string `json:"capabilities,omitempty"`
// The timestamp representing the last time when this integration was initialized.
InitializationTimestamp *metav1.Time `json:"lastInitTimestamp,omitempty"`
}
// +genclient
// +kubebuilder:object:root=true
// +kubebuilder:resource:path=integrations,scope=Namespaced,shortName=it,categories=kamel;camel
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.selector
// +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase`,description="The integration phase"
// +kubebuilder:printcolumn:name="Kit",type=string,JSONPath=`.status.kit`,description="The integration kit"
// +kubebuilder:printcolumn:name="Replicas",type=integer,JSONPath=`.status.replicas`,description="The number of pods"
// Integration is the Schema for the integrations API
type Integration struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec IntegrationSpec `json:"spec,omitempty"`
Status IntegrationStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// IntegrationList contains a list of Integration
type IntegrationList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Integration `json:"items"`
}
// DataSpec --
type DataSpec struct {
Name string `json:"name,omitempty"`
Content string `json:"content,omitempty"`
ContentRef string `json:"contentRef,omitempty"`
ContentKey string `json:"contentKey,omitempty"`
Compression bool `json:"compression,omitempty"`
}
// ResourceType --
type ResourceType string
// ResourceSpec --
type ResourceSpec struct {
DataSpec `json:",inline"`
Type ResourceType `json:"type,omitempty"`
MountPath string `json:"mountPath,omitempty"`
}
const (
// ResourceTypeData --
ResourceTypeData ResourceType = "data"
// ResourceTypeOpenAPI --
ResourceTypeOpenAPI ResourceType = "openapi"
)
// SourceSpec --
type SourceSpec struct {
DataSpec `json:",inline"`
Language Language `json:"language,omitempty"`
// Loader is an optional id of the org.apache.camel.k.RoutesLoader that will
// interpret this source at runtime
Loader string `json:"loader,omitempty"`
// Interceptors are optional identifiers the org.apache.camel.k.RoutesLoader
// uses to pre/post process sources
Interceptors []string `json:"interceptors,omitempty"`
// Type defines the kind of source described by this object
Type SourceType `json:"type,omitempty"`
// List of property names defined in the source (e.g. if type is "template")
PropertyNames []string `json:"property-names,omitempty"`
}
type SourceType string
const (
SourceTypeDefault SourceType = ""
SourceTypeTemplate SourceType = "template"
)
// Language --
type Language string
const (
// LanguageJavaSource --
LanguageJavaSource Language = "java"
// LanguageGroovy --
LanguageGroovy Language = "groovy"
// LanguageJavaScript --
LanguageJavaScript Language = "js"
// LanguageXML --
LanguageXML Language = "xml"
// LanguageKotlin --
LanguageKotlin Language = "kts"
// LanguageYaml --
LanguageYaml Language = "yaml"
)
// Languages is the list of all supported languages
var Languages = []Language{
LanguageJavaSource,
LanguageGroovy,
LanguageJavaScript,
LanguageXML,
LanguageKotlin,
LanguageYaml,
}
// IntegrationPhase --
type IntegrationPhase string
// IntegrationConditionType --
type IntegrationConditionType string
const (
// IntegrationKind --
IntegrationKind string = "Integration"
// IntegrationPhaseNone --
IntegrationPhaseNone IntegrationPhase = ""
// IntegrationPhaseInitialization --
IntegrationPhaseInitialization IntegrationPhase = "Initialization"
// IntegrationPhaseWaitingForPlatform --
IntegrationPhaseWaitingForPlatform IntegrationPhase = "Waiting For Platform"
// IntegrationPhaseBuildingKit --
IntegrationPhaseBuildingKit IntegrationPhase = "Building Kit"
// IntegrationPhaseResolvingKit --
IntegrationPhaseResolvingKit IntegrationPhase = "Resolving Kit"
// IntegrationPhaseDeploying --
IntegrationPhaseDeploying IntegrationPhase = "Deploying"
// IntegrationPhaseRunning --
IntegrationPhaseRunning IntegrationPhase = "Running"
// IntegrationPhaseUpdating is a phase where the operator is not supposed to interact with the resource
IntegrationPhaseUpdating IntegrationPhase = "Updating"
// IntegrationPhaseError --
IntegrationPhaseError IntegrationPhase = "Error"
// IntegrationConditionKitAvailable --
IntegrationConditionKitAvailable IntegrationConditionType = "IntegrationKitAvailable"
// IntegrationConditionPlatformAvailable --
IntegrationConditionPlatformAvailable IntegrationConditionType = "IntegrationPlatformAvailable"
// IntegrationConditionDeploymentAvailable --
IntegrationConditionDeploymentAvailable IntegrationConditionType = "DeploymentAvailable"
// IntegrationConditionServiceAvailable --
IntegrationConditionServiceAvailable IntegrationConditionType = "ServiceAvailable"
// IntegrationConditionKnativeServiceAvailable --
IntegrationConditionKnativeServiceAvailable IntegrationConditionType = "KnativeServiceAvailable"
// IntegrationConditionCronJobAvailable --
IntegrationConditionCronJobAvailable IntegrationConditionType = "CronJobAvailable"
// IntegrationConditionExposureAvailable --
IntegrationConditionExposureAvailable IntegrationConditionType = "ExposureAvailable"
// IntegrationConditionPrometheusAvailable --
IntegrationConditionPrometheusAvailable IntegrationConditionType = "PrometheusAvailable"
// IntegrationConditionJolokiaAvailable --
IntegrationConditionJolokiaAvailable IntegrationConditionType = "JolokiaAvailable"
// IntegrationConditionProbesAvailable --
IntegrationConditionProbesAvailable IntegrationConditionType = "ProbesAvailable"
// IntegrationConditionReady --
IntegrationConditionReady IntegrationConditionType = "Ready"
// IntegrationConditionKitAvailableReason --
IntegrationConditionKitAvailableReason string = "IntegrationKitAvailable"
// IntegrationConditionPlatformAvailableReason --
IntegrationConditionPlatformAvailableReason string = "IntegrationPlatformAvailable"
// IntegrationConditionDeploymentAvailableReason --
IntegrationConditionDeploymentAvailableReason string = "DeploymentAvailable"
// IntegrationConditionDeploymentNotAvailableReason --
IntegrationConditionDeploymentNotAvailableReason string = "DeploymentNotAvailable"
// IntegrationConditionServiceAvailableReason --
IntegrationConditionServiceAvailableReason string = "ServiceAvailable"
// IntegrationConditionServiceNotAvailableReason --
IntegrationConditionServiceNotAvailableReason string = "ServiceNotAvailable"
// IntegrationConditionContainerNotAvailableReason --
IntegrationConditionContainerNotAvailableReason string = "ContainerNotAvailable"
// IntegrationConditionRouteAvailableReason --
IntegrationConditionRouteAvailableReason string = "RouteAvailable"
// IntegrationConditionRouteNotAvailableReason --
IntegrationConditionRouteNotAvailableReason string = "RouteNotAvailable"
// IntegrationConditionIngressAvailableReason --
IntegrationConditionIngressAvailableReason string = "IngressAvailable"
// IntegrationConditionIngressNotAvailableReason --
IntegrationConditionIngressNotAvailableReason string = "IngressNotAvailable"
// IntegrationConditionKnativeServiceAvailableReason --
IntegrationConditionKnativeServiceAvailableReason string = "KnativeServiceAvailable"
// IntegrationConditionKnativeServiceNotAvailableReason --
IntegrationConditionKnativeServiceNotAvailableReason string = "KnativeServiceNotAvailable"
// IntegrationConditionCronJobAvailableReason --
IntegrationConditionCronJobAvailableReason string = "CronJobAvailableReason"
// IntegrationConditionCronJobNotAvailableReason --
IntegrationConditionCronJobNotAvailableReason string = "CronJobNotAvailableReason"
// IntegrationConditionPrometheusAvailableReason --
IntegrationConditionPrometheusAvailableReason string = "PrometheusAvailable"
// IntegrationConditionJolokiaAvailableReason --
IntegrationConditionJolokiaAvailableReason string = "JolokiaAvailable"
// IntegrationConditionProbesAvailableReason --
IntegrationConditionProbesAvailableReason string = "ProbesAvailable"
// IntegrationConditionErrorReason --
IntegrationConditionErrorReason string = "Error"
// IntegrationConditionCronJobCreatedReason --
IntegrationConditionCronJobCreatedReason string = "CronJobCreated"
// IntegrationConditionReplicaSetReadyReason --
IntegrationConditionReplicaSetReadyReason string = "ReplicaSetReady"
// IntegrationConditionReplicaSetNotReadyReason --
IntegrationConditionReplicaSetNotReadyReason string = "ReplicaSetNotReady"
)
// IntegrationCondition describes the state of a resource at a certain point.
type IntegrationCondition struct {
// Type of integration condition.
Type IntegrationConditionType `json:"type"`
// Status of the condition, one of True, False, Unknown.
Status corev1.ConditionStatus `json:"status"`
// The last time this condition was updated.
LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
// Last time the condition transitioned from one status to another.
LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
// First time the condition status transitioned to True.
FirstTruthyTime *metav1.Time `json:"firstTruthyTime,omitempty"`
// The reason for the condition's last transition.
Reason string `json:"reason,omitempty"`
// A human readable message indicating details about the transition.
Message string `json:"message,omitempty"`
}