// Module included in the following assemblies:
//
// * openshift_images/configuring_samples_operator.adoc


[id="samples-operator-overview_{context}"]
= Understanding the Cluster Samples Operator

During installation, the Operator creates the default configuration object for
itself and then creates the sample image streams and templates, including quickstart templates.

[NOTE]
====
To facilitate image stream imports from other registries that require credentials, a cluster administrator can create any additional secrets that contain the content of a Docker `config.json` file in the `openshift` namespace needed for image import.
====

The Cluster Samples Operator configuration is a cluster-wide resource, and the deployment is contained within the `openshift-cluster-samples-operator` namespace.

The image for the Cluster Samples Operator contains image stream and template definitions
for the associated {product-title} release. When each sample is created or updated,
the Cluster Samples Operator includes an annotation that denotes the version of
{product-title}. The Operator uses this annotation to ensure that each sample
matches the release version. Samples outside of its inventory are ignored, as
are skipped samples. Modifications to any samples that are managed by the
Operator, where that version annotation is modified or deleted, are reverted
automatically.

[NOTE]
====
The Jenkins images are part of the image payload from
installation and are tagged into the image streams directly.
====

The Cluster Samples Operator configuration resource includes a finalizer which cleans up
the following upon deletion:

* Operator managed image streams.
* Operator managed templates.
* Operator generated configuration resources.
* Cluster status resources.

Upon deletion of the samples resource, the Cluster Samples Operator recreates the
resource using the default configuration.

[id="samples-operator-bootstrapped"]
== Cluster Samples Operator's use of management state

The Cluster Samples Operator is bootstrapped as `Managed` by default or if global proxy is configured. In the `Managed` state, the Cluster Samples Operator is actively managing its resources and keeping the component active in order to pull sample image streams and images from the registry and ensure that the requisite sample templates are installed.

Certain circumstances result in the Cluster Samples Operator bootstrapping itself as `Removed` including:

* If the Cluster Samples Operator cannot reach link:https://registry.redhat.io[registry.redhat.io] after three minutes on initial start-up after a clean installation.
* If the Cluster Samples Operator detects it is on an IPv6 network.

However, if the Cluster Samples Operator also detects an {product-title} global proxy is configured, it bypasses those checks.

[IMPORTANT]
====
IPv6 installations are not currently supported by link:https://registry.redhat.io[registry.redhat.io]. The Cluster Samples Operator pulls most of the sample image streams and images from link:https://registry.redhat.io[registry.redhat.io].
====

[id="samples-operator-restricted-network-install"]
=== Restricted network installation

Boostrapping as `Removed` when unable to access `registry.redhat.io` facilitates restricted network installations when the network restriction is already in place. Bootstrapping as `Removed` when network access is restricted allows the cluster administrator more time to decide if samples are desired, because the Cluster Samples Operator does not submit alerts that sample image stream imports are failing when the management state is set to `Removed`. When the Cluster Samples Operator comes up as `Managed` and attempts to install sample image streams, it starts alerting two hours after initial installation if there are failing imports.

[id="samples-operator-restricted-network-install-with-access"]
=== Restricted network installation with initial network access

Conversely, if a cluster that is intended to be a restricted network or disconnected cluster is first installed while network access exists, the Cluster Samples Operator installs the content from `registry.redhat.io` since it can access it. If you want the Cluster Samples Operator to still bootstrap as `Removed` in order to defer samples installation until you have decided which samples are desired, set up image mirrors, and so on, then follow the instructions for using the Samples Operator with an alternate registry and customizing nodes, both linked in the additional resources section, to override the Cluster Samples Operator default configuration and initially come up as `Removed`.

You must put the following additional YAML file in the `openshift` directory created by `openshift-install create manifest`:

.Example Cluster Samples Operator YAML file with `managementState: Removed`
[source,yaml]
----
apiVersion: samples.operator.openshift.io/v1
kind: Config
metadata:
  name: cluster
spec:
  architectures:
  - x86_64
  managementState: Removed
----

[id="samples-operator-retries"]
== Cluster Samples Operator's tracking and error recovery of image stream imports

After creation or update of a samples image stream, the Cluster Samples Operator monitors the progress of each image stream tag's image import.

If an import fails, the Cluster Samples Operator retries the import through the image stream image import API, which is the same API used by the `oc import-image` command, approximately every 15 minutes until it sees the import succeed, or if
the Cluster Samples Operator's configuration is changed such that either the image stream is added to the `skippedImagestreams` list, or the management state is changed to `Removed`.
