[[kubernetes-resources-quota-component]]
= Kubernetes Resources Quota Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
:docTitle: Kubernetes Resources Quota
:artifactId: camel-kubernetes
:description: Perform operations on Kubernetes Resources Quotas.
:since: 2.17
:supportLevel: Stable
:component-header: Only producer is supported
//Manually maintained attributes
:group: Kubernetes

*Since Camel {since}*

*{component-header}*

The Kubernetes Resources Quota component is one of xref:kubernetes-summary.adoc[Kubernetes Components] which
provides a producer to execute Kubernetes Resource Quota operations.



== Component Options

// component options: START
The Kubernetes Resources Quota component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END


== Endpoint Options

// endpoint options: START
The Kubernetes Resources Quota endpoint is configured using URI syntax:

----
kubernetes-resources-quota:masterUrl
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *masterUrl* | *Required* Kubernetes Master url |  | String
|===


=== Query Parameters (22 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *apiVersion* (producer) | The Kubernetes API Version to use |  | String
| *dnsDomain* (producer) | The dns domain, used for ServiceCall EIP |  | String
| *kubernetesClient* (producer) | Default KubernetesClient to use if provided |  | KubernetesClient
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *operation* (producer) | Producer operation to do on Kubernetes |  | String
| *portName* (producer) | The port name, used for ServiceCall EIP |  | String
| *portProtocol* (producer) | The port protocol, used for ServiceCall EIP | tcp | String
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *connectionTimeout* (advanced) | Connection timeout in milliseconds to use when making requests to the Kubernetes API server. |  | Integer
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *caCertData* (security) | The CA Cert Data |  | String
| *caCertFile* (security) | The CA Cert File |  | String
| *clientCertData* (security) | The Client Cert Data |  | String
| *clientCertFile* (security) | The Client Cert File |  | String
| *clientKeyAlgo* (security) | The Key Algorithm used by the client |  | String
| *clientKeyData* (security) | The Client Key data |  | String
| *clientKeyFile* (security) | The Client Key file |  | String
| *clientKeyPassphrase* (security) | The Client Key Passphrase |  | String
| *oauthToken* (security) | The Auth Token |  | String
| *password* (security) | Password to connect to Kubernetes |  | String
| *trustCerts* (security) | Define if the certs we used are trusted anyway or not |  | Boolean
| *username* (security) | Username to connect to Kubernetes |  | String
|===
// endpoint options: END

== Supported producer operation

- listResourcesQuota
- listResourcesQuotaByLabels
- getResourcesQuota
- createResourcesQuota
- deleteResourcesQuota

== Kubernetes Resource Quota Producer Examples

- listResourcesQuota: this operation list the Resource Quotas on a kubernetes cluster

[source,java]
--------------------------------------------------------------------------------
from("direct:list").
    toF("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=listResourcesQuota").
    to("mock:result");
--------------------------------------------------------------------------------

This operation return a List of Resource Quotas from your cluster

- listResourcesQuotaByLabels:  this operation list the Resource Quotas by labels on a kubernetes cluster

[source,java]
--------------------------------------------------------------------------------
from("direct:listByLabels").process(new Processor() {

            @Override
            public void process(Exchange exchange) throws Exception {
                Map<String, String> labels = new HashMap<>();
                labels.put("key1", "value1");
                labels.put("key2", "value2");
                exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_LABELS, labels);
            }
        });
    toF("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=listResourcesQuotaByLabels").
    to("mock:result");
--------------------------------------------------------------------------------

This operation return a List of Resource Quotas from your cluster, using a label selector (with key1 and key2, with value value1 and value2)


include::camel-spring-boot::page$kubernetes-starter.adoc[]
