API Markers

    This section details ClusterServiceVersion (CSV) code markers and lists available markers.

    Note: CSV markers can only be used in Go Operator projects. Annotations for Ansible and Helm Operator projects will be added in the future.

    All CSV markers have the prefix +operator-sdk:csv.

    +operator-sdk:csv:customresourcedefinitions

    These markers populate in your CSV.

    Possible type-level markers:

    • +operator-sdk:csv:customresourcedefinitions:displayName="some display name"
      • Configures the kind’s display name.
    • +operator-sdk:csv:customresourcedefinitions:resources={{Kind1,v1alpha1,dns-name-1},{Kind2,v1,"dns-name-2"},...}
      • Configures the kind’s resources.
    • +operator-sdk:csv:customresourcedefinitions:order=1
      • Configures the order of this type in the list. Markers with order omitted have the highest order, i.e. are at the end of the list. If more than one marker has the same order, the corresponding descriptions will be sorted alphabetically and placed above others with higher orders. Pre-existing list elements in the CSV will be appended to the set of other elements in the order corresponding to its index.

    Possible field-level markers, all of which must contain the type=[spec,status] key-value pair:

    • +operator-sdk:csv:customresourcedefinitions:type=[spec,status],displayName="some field display name"
      • Configures the field’s display name.
    • +operator-sdk:csv:customresourcedefinitions:type=[spec,status],xDescriptors={"urn:alm:descriptor:com.tectonic.ui:podCount","urn:alm:descriptor:io.kubernetes:custom"}
      • Configures the field’s x-descriptors.
    • +operator-sdk:csv:customresourcedefinitions:type=[spec,status],order=1
      • Configures the order of this type in the list. Markers with order omitted have the highest order, i.e. are at the end of the list. If more than one marker has the same order, the corresponding descriptions will be sorted alphabetically and placed above others with higher orders.
    x-descriptors

    Check out the for available x-descriptors paths.

    Examples

    These examples assume Memcached, MemcachedSpec, and MemcachedStatus are the example projects’ kind, spec, and status.

    1. Set displayName, path, xDescriptors, and description on a field for a entry:

      1. type MemcachedSpec struct {
      2. // Size is the size of the memcached deployment. <-- This will become Size's specDescriptors.description.
      3. // +operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Number of pods",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:podCount","urn:alm:descriptor:io.kubernetes:custom"}
      4. Size int32 `json:"size"` // <-- Size's specDescriptors.path is inferred from this JSON tag.
      5. }

      ``

    2. ``

      The SDK uses the Size fields’ json tag name as path, Size as displayName, and field comments as description.

    3. A comprehensive example:

      • Infer path, description, displayName, and x-descriptors for specDescriptors and statusDescriptors entries.
      • Create three resources entries each with kind, version, and name values.
      1. // Represents a cluster of Memcached apps
      2. // +operator-sdk:csv:customresourcedefinitions:displayName="Memcached App",resources={{Pod,v1,memcached-runner},{Deployment,v1,memcached-deployment}}
      3. type Memcached struct {
      4. metav1.TypeMeta `json:",inline"`
      5. Spec MemcachedSpec `json:"spec,omitempty"`
      6. Status MemcachedStatus `json:"status,omitempty"`
      7. type MemcachedSpec struct {
      8. Pods MemcachedPods `json:"pods"`
      9. }
      10. type MemcachedStatus struct {
      11. Pods MemcachedPods `json:"podStatuses"`
      12. // +operator-sdk:csv:customresourcedefinitions:type=status,displayName="Pod Count",xDescriptors="urn:alm:descriptor:com.tectonic.ui:podCount"
      13. PodCount int `json:"podCount"`
      14. }
      15. type MemcachedPods struct {
      16. // Size is the size of the memcached deployment.
      17. // +operator-sdk:csv:customresourcedefinitions:type=spec
      18. // +operator-sdk:csv:customresourcedefinitions.type=status
      19. Size int32 `json:"size"`
      20. }

      ``

      The generated customresourcedefinitions will look like:

      ``

    Deprecated markers

    1. $ curl -sSLo migrate-markers.sh https://raw.githubusercontent.com/operator-framework/operator-sdk/master/hack/generate/migrate-markers.sh
    2. $ ./migrate-markers.sh path/to/*_types.go