Updating projects for newer Operator SDK versions
OKD 4.14 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.
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.
Updating Ansible-based Operator projects for Operator SDK 1.31.0
The following procedure updates an existing Ansible-based Operator project for compatibility with 1.31.0.
Prerequisites
Operator SDK 1.31.0 installed
An Operator project created or maintained with Operator SDK 1.28.0
Procedure
Make the following changes to your Operator’s Dockerfile:
Replace the
ansible-operator-2.11-preview
base image with theansible-operator
base image and update the version to 1.31.0, as shown in the following example:Example Dockerfile
FROM quay.io/operator-framework/ansible-operator:v1.31.0
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 using the
pip install
command.
Edit your Operator project’s makefile to update the Operator SDK version to 1.31.0, as shown in the following example:
Example makefile
# 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 (1)
1 Change the version from {osdk_ver-n1}
to1.31.0
.Update your
requirements.yaml
andrequirements.go
files to remove thecommunity.kubernetes
collection and update theoperator_sdk.util
collection to version0.5.0
, as shown in the following example:Example
requirements.yaml
filecollections:
- - 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
collection2 Update the operator_sdk.util
collection to version0.5.0
.Remove all instances of the
lint
field from yourmolecule/kind/molecule.yml
andmolecule/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