×

OKD 4.11 supports Operator SDK 1.22.0. If you already have the 1.16.0 CLI installed on your workstation, you can update the CLI to 1.22.0 by installing the latest version.

However, to ensure your existing Operator projects maintain compatibility with Operator SDK 1.22.0, update steps are required for the associated breaking changes introduced since 1.16.0. You must perform the update steps manually in any of your Operator projects that were previously created or maintained with 1.16.0.

Updating Ansible-based Operator projects for Operator SDK 1.22.0

The following procedure updates an existing Ansible-based Operator project for compatibility with 1.22.0.

Prerequisites
  • Operator SDK 1.22.0 installed.

  • An Operator project created or maintained with Operator SDK 1.16.0.

Procedure
  1. Make the following changes to the config/default/manager_auth_proxy_patch.yaml file:

    ...
    spec:
      template:
        spec:
          containers:
          - name: kube-rbac-proxy
            image: registry.redhat.io/openshift4/ose-kube-rbac-proxy:v4.11 (1)
            args:
            - "--secure-listen-address=0.0.0.0:8443"
            - "--upstream=http://127.0.0.1:8080/"
            - "--logtostderr=true"
            - "--v=0" (2)
    ...
    resources:
      limits:
        cpu: 500m
        memory: 128Mi
      requests:
        cpu: 5m
        memory: 64Mi (3)
    1 Update the tag version from v4.10 to v4.11.
    2 Reduce the debugging log level from --v=10 to --v=0.
    3 Add resource requests and limits.
  2. Make the following changes to your Makefile:

    1. Enable support for image digests by adding the following environment variables to your Makefile:

      Old Makefile
      BUNDLE_IMG ?= $(IMAGE_TAG_BASE)-bundle:v$(VERSION)
      ...
      New Makefile
      BUNDLE_IMG ?= $(IMAGE_TAG_BASE)-bundle:v$(VERSION)
      
      # BUNDLE_GEN_FLAGS are the flags passed to the operator-sdk generate bundle command
      BUNDLE_GEN_FLAGS ?= -q --overwrite --version $(VERSION) $(BUNDLE_METADATA_OPTS)
      
      # USE_IMAGE_DIGESTS defines if images are resolved via tags or digests
      # You can enable this value if you would like to use SHA Based Digests
      # To enable set flag to true
      USE_IMAGE_DIGESTS ?= false
      ifeq ($(USE_IMAGE_DIGESTS), true)
      	BUNDLE_GEN_FLAGS += --use-image-digests
      endif
    2. Edit your Makefile to replace the bundle target with the BUNDLE_GEN_FLAGS environment variable:

      Old Makefile
      $(KUSTOMIZE) build config/manifests | operator-sdk generate bundle -q --overwrite --version $(VERSION) $(BUNDLE_METADATA_OPTS)
      New Makefile
      $(KUSTOMIZE) build config/manifests | operator-sdk generate bundle $(BUNDLE_GEN_FLAGS)
    3. Edit your Makefile to update opm to version 1.23.0:

      .PHONY: opm
      OPM = ./bin/opm
      opm: ## Download opm locally if necessary.
      ifeq (,$(wildcard $(OPM)))
      ifeq (,$(shell which opm 2>/dev/null))
      	@{ \
      	set -e ;\
      	mkdir -p $(dir $(OPM)) ;\
      	OS=$(shell go env GOOS) && ARCH=$(shell go env GOARCH) && \
      	curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/v1.23.0/$${OS}-$${ARCH}-opm ;\ (1)
      	chmod +x $(OPM) ;\
      	}
      else
      OPM = $(shell which opm)
      endif
      endif
      1 Replace v1.19.1 with v1.23.0.
    4. Apply the changes to your Makefile and rebuild your Operator by entering the following command:

      $ make
  3. Update your requirements.yml file as shown in the following example:

    collections:
      - name: community.kubernetes
        version: "2.0.1" (1)
      - name: operator_sdk.util
        version: "0.4.0" (2)
      - name: kubernetes.core
        version: "2.3.1" (3)
      - name: cloud.common (4)
        version: "2.1.1"
    1 Update version 1.2.1 to 2.0.1.
    2 Update version 0.3.1 to 0.4.0.
    3 Update version 2.2.0 to 2.3.1.
    4 Add support for the Operator Ansible SDK by adding the cloud.common collection.

    As of version 2.0.0, the community.kubernetes collection was renamed to kubernetes.core. The community.kubernetes collection has been replaced by deprecated redirects to kubernetes.core. If you use fully qualified collection names (FQCNs) that begin with community.kubernetes, you must update the FQCNs to use kubernetes.core.