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.

    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.
    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 a displayName and resources for a customresourcedefinitions kind entry:

      ``

    2. Set displayName, path, xDescriptors, and description on a field for a customresourcedefinitions.specDescriptors entry:

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

      ``

    3. ``

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

    4. 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. }
      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. $ chmod +x ./migrate-markers.sh