# Set the Operator SDK version to use. By default, what is installed on the system is used.
# This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit.
OPERATOR_SDK_VERSION ?= v1.31.0-ocp
OKD 4.16 supports Operator SDK 1.31.0. If you already have the 1.28.0 CLI installed on your workstation, you can update the CLI to 1.31.0 by installing the latest version.
The Red Hat-supported version of the Operator SDK CLI tool, including the related scaffolding and testing tools for Operator projects, is deprecated and is planned to be removed in a future release of OKD. Red Hat will provide bug fixes and support for this feature during the current release lifecycle, but this feature will no longer receive enhancements and will be removed from future OKD releases. The Red Hat-supported version of the Operator SDK is not recommended for creating new Operator projects. Operator authors with existing Operator projects can use the version of the Operator SDK CLI tool released with OKD 4.16 to maintain their projects and create Operator releases targeting newer versions of OKD. The following related base images for Operator projects are not deprecated. The runtime functionality and configuration APIs for these base images are still supported for bug fixes and for addressing CVEs.
For the most recent list of major functionality that has been deprecated or removed within OKD, refer to the Deprecated and removed features section of the OKD release notes. For information about the unsupported, community-maintained, version of the Operator SDK, see Operator SDK (Operator Framework). |
However, to ensure your existing Operator projects maintain compatibility with Operator SDK 1.31.0, update steps are required for the associated breaking changes introduced since 1.28.0. You must perform the update steps manually in any of your Operator projects that were previously created or maintained with 1.28.0.
The following procedure updates an existing Ansible-based Operator project for compatibility with 1.31.0.
Operator SDK 1.31.0 installed
An Operator project created or maintained with Operator SDK 1.28.0
Edit your Operator project’s Makefile to update the Operator SDK version to v1.31.0-ocp
, as shown in the following example:
# Set the Operator SDK version to use. By default, what is installed on the system is used.
# This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit.
OPERATOR_SDK_VERSION ?= v1.31.0-ocp
Find the ose-kube-rbac-proxy
pull spec in the following files, and update the image tag to v4.16
:
config/default/manager_auth_proxy_patch.yaml
bundle/manifests/memcached-operator.clusterserviceversion.yaml
ose-kube-rbac-proxy
pull spec with v4.16
image tag# ...
containers:
- name: kube-rbac-proxy
image: registry.redhat.io/openshift4/ose-kube-rbac-proxy:v4.16
# ...
Make the following changes to your Operator’s Dockerfile:
Replace the ansible-operator-2.11-preview
base image with the Ansible Operator base image and update the version to v4.16
, as shown in the following example:
FROM registry.redhat.io/openshift4/ose-ansible-operator:v4.16
The update to Ansible 2.15.0 in version 1.30.0 of the Ansible Operator removed the following preinstalled Python modules:
ipaddress
openshift
jmespath
cryptography
oauthlib
If your Operator depends on one of these removed Python modules, update your Dockerfile to install the required modules by running the pip install
command.
Update your requirements.yaml
and requirements.go
files to remove the community.kubernetes
collection and update the operator_sdk.util
collection to version 0.5.0
, as shown in the following example:
requirements.yaml
file collections:
- - name: community.kubernetes (1)
- version: "2.0.1"
- name: operator_sdk.util
- version: "0.4.0"
+ version: "0.5.0" (2)
- name: kubernetes.core
version: "2.4.0"
- name: cloud.common
1 | Remove the community.kubernetes collection |
2 | Update the operator_sdk.util collection to version 0.5.0 . |
Remove all instances of the lint
field from your molecule/kind/molecule.yml
and molecule/default/molecule.yml
files, as shown in the following example:
---
dependency:
name: galaxy
driver:
name: delegated
- lint: |
- set -e
- yamllint -d "{extends: relaxed, rules: {line-length: {max: 120}}}" .
platforms:
- name: cluster
groups:
- k8s
provisioner:
name: ansible
- lint: |
- set -e
ansible-lint
inventory:
group_vars:
all:
namespace: ${TEST_OPERATOR_NAMESPACE:-osdk-test}
host_vars:
localhost:
ansible_python_interpreter: '{{ ansible_playbook_python }}'
config_dir: ${MOLECULE_PROJECT_DIRECTORY}/config
samples_dir: ${MOLECULE_PROJECT_DIRECTORY}/config/samples
operator_image: ${OPERATOR_IMAGE:-""}
operator_pull_policy: ${OPERATOR_PULL_POLICY:-"Always"}
kustomize: ${KUSTOMIZE_PATH:-kustomize}
env:
K8S_AUTH_KUBECONFIG: ${KUBECONFIG:-"~/.kube/config"}
verifier:
name: ansible
- lint: |
- set -e
- ansible-lint