[[integration-platform]]
= IntegrationPlatform

The *IntegrationPlatform* CR is the resource used to control the behavior of the Camel K Operator.

[source,go]
----
type IntegrationPlatform struct {
	Spec   IntegrationPlatformSpec   // <1>
	Status IntegrationPlatformStatus // <2>
}

type IntegrationPlatformSpec struct {
	Cluster       IntegrationPlatformCluster    // <3>
	Profile       TraitProfile                  // <4>
	Build         IntegrationPlatformBuildSpec  // <5>
	Traits        map[string]TraitSpec          // <6>
	Configuration []ConfigurationSpec           // <6>
}
----
<1> The desired state
<2> The status of the object at current time
<3> The type of the Kubernetes Cluster (Kubernetes or OpenShift)
<4> Configures the traits that have to be applied by default (Kubernetes, OpneShift, Knative)
<5> Configuration options of the image build process such as the type of the builder (buildah, kanico, spectrum) and the maven repositories that have to be configured in order retrieve the artifacts needed by the integrations.
<6> The traits and configuration options that have to be propagated to each integration.

[NOTE]
====
the full go definition can be found https://github.com/apache/camel-k/blob/master/pkg/apis/camel/v1/integrationplatform_types.go[here]
====

Upon start-up, the operator checks if the *IntegrationPlatform* is ready and if not, it executes all the steps required to be ready to operate:

image::architecture/camel-k-state-machine-integration-platform.png[life cycle]
