= Pull Secret Trait

// Start of autogenerated code - DO NOT EDIT! (description)
The Pull Secret trait sets a pull secret on the pod,
to allow Kubernetes to retrieve the container image from an external registry.

The pull secret can be specified manually or, in case you've configured authentication for an external container registry
on the `IntegrationPlatform`, the same secret is used to pull images.

It's enabled by default whenever you configure authentication for an external container registry,
so it assumes that external registries are private.

If your registry does not need authentication for pulling images, you can disable this trait.


This trait is available in the following profiles: **Kubernetes, Knative, OpenShift**.

// End of autogenerated code - DO NOT EDIT! (description)
// Start of autogenerated code - DO NOT EDIT! (configuration)
== Configuration

Trait properties can be specified when running any integration with the CLI:
```
kamel run --trait pull-secret.[key]=[value] --trait pull-secret.[key2]=[value2] integration.groovy
```
The following configuration options are available:

[cols="2,1,5a"]
|===
|Property | Type | Description

| pull-secret.enabled
| bool
| Can be used to enable or disable a trait. All traits share this common property.

| pull-secret.secret-name
| string
| The pull secret name to set on the Pod. If left empty this is automatically taken from the `IntegrationPlatform` registry configuration.

| pull-secret.auto
| bool
| Automatically configures the platform registry secret on the pod if it is of type `kubernetes.io/dockerconfigjson`.

|===

// End of autogenerated code - DO NOT EDIT! (configuration)
