// Module included in the following assemblies:
//
// * operators/operator_sdk/osdk-generating-csvs.adoc

[id="osdk-manually-defined-csv-fields_{context}"]
= Manually-defined CSV fields

Many CSV fields cannot be populated using generated, non-SDK-specific manifests.
These fields are mostly human-written, English metadata about the Operator and
various Custom Resource Definitions (CRDs).

Operator authors must directly modify their CSV YAML file, adding personalized
data to the following required fields. The Operator SDK gives a warning CSV
generation when a lack of data in any of the required fields is detected.

.Required
[cols="2a,8a",options="header"]
|===
|Field |Description

|`metadata.name`
|A unique name for this CSV. Operator version should be included in the name to
ensure uniqueness, for example `app-operator.v0.1.1`.

|`metadata.capabilities`
|The Operator's capability level according to the Operator maturity model.
Options include `Basic Install`, `Seamless Upgrades`, `Full Lifecycle`, `Deep Insights`, and `Auto Pilot`.

|`spec.displayName`
|A public name to identify the Operator.

|`spec.description`
|A short description of the Operator's functionality.

|`spec.keywords`
|Keywords describing the operator.

|`spec.maintainers`
|Human or organizational entities maintaining the Operator, with a `name` and
`email`.

|`spec.provider`
|The Operators' provider (usually an organization), with a `name`.

|`spec.labels`
|Key-value pairs to be used by Operator internals.

|`spec.version`
|Semantic version of the Operator, for example `0.1.1`.

|`spec.customresourcedefinitions`
|Any CRDs the Operator uses. This field is populated automatically by the
Operator SDK if any CRD YAML files are present in `deploy/`. However, several
fields not in the CRD manifest spec require user input:

- `description`: description of the CRD.
- `resources`: any Kubernetes resources leveraged by the CRD, for example pods and StatefulSets.
- `specDescriptors`: UI hints for inputs and outputs of the Operator.
|===


.Optional
[cols="2a,8a",options="header"]
|===
|Field |Description

|`spec.replaces`
|The name of the CSV being replaced by this CSV.

|`spec.links`
|URLs (for example, websites and documentation) pertaining to the Operator or
application being managed, each with a `name` and `url`.

|`spec.selector`
|Selectors by which the Operator can pair resources in a cluster.

|`spec.icon`
|A base64-encoded icon unique to the Operator, set in a `base64data` field with
a `mediatype`.

|`spec.maturity`
|The level of maturity the software has achieved at this version. Options include
`planning`, `pre-alpha`, `alpha`, `beta`, `stable`, `mature`, `inactive`, and
`deprecated`.
|===

Further details on what data each field above should hold are found in the
link:https://github.com/operator-framework/operator-lifecycle-manager/blob/master/doc/design/building-your-csv.md[CSV spec].

[NOTE]
====
Several YAML fields currently requiring user intervention can potentially be
parsed from Operator code; such Operator SDK functionality will be addressed in
a future design document.
====
