Releases: operator-framework/operator-sdk
v0.14.0
Added
- Added new
--bundle
flag to theoperator-sdk scorecard
command to support bundle validation testing using the validation API (https://github.com/operator-framework/api). (#1916 - Added new
log
field to theoperator-sdk scorecard
v1alpha2 output to support tests that produce logging. (#1916 - Added new
bundle validation
test to theoperator-sdk scorecard
OLM tests. (#1916 - Added scorecard test short names to each scorecard test to allow users to run a specific scorecard test using the selector flag. (#1916
- Improve Ansible logs in the Operator container for Ansible-based Operators. (#2321)
- Added support for override values with environment variable expansion in the
watches.yaml
file for Helm-based operators. (#2325)
Changed
- Replace usage of
github.com/operator-framework/operator-sdk/pkg/restmapper.DynamicRESTMapper
withsigs.k8s.io/controller-runtime/pkg/client/apiutil.DynamicRESTMapper
. (#2309) - Upgraded Helm operator packages and base image from Helm v2 to Helm v3. Cluster state for pre-existing CRs using Helm v2-based operators will be automatically migrated to Helm v3's new release storage format, and existing releases may be upgraded due to changes in Helm v3's label injection. (#2080)
- Fail
operator-sdk olm-catalog gen-csv
if it is not run from a project's root, which the command already assumes is the case. (#2322) - Breaking Change: Extract custom Ansible module
k8s_status
, which is now provided by theoperator_sdk.util
Ansible collection. See developer_guide for new usage. (#2310) - Upgrade minimal Ansible version in the init projects from
2.6
to2.9
for collections support. (#2310) - Improve skip metrics logs when running the operator locally in order to make clear the information. (#2190)
- Upgrade
controller-tools
version fromv0.2.2
tov0.2.4
. (#2368)
Deprecated
- Deprecated
github.com/operator-framework/operator-sdk/pkg/restmapper
in favor of theDynamicRESTMapper
implementation in controller-runtime. (#2309)
Bug Fixes
- Fix
operator-sdk build
's--image-build-args
to support spaces within quotes like--label some.name="First Last"
. (#2312) - Fix misleading Helm operator "release not found" errors during CR deletion. (#2359)
Note: See how to upgrade your project to the version v0.14.0 by checking the Version Upgrade Guide
v0.13.0
v0.13.0
Added
- Support for vars in top level ansible watches. (#2147)
- Support for
"ansible.operator-sdk/verbosity"
annotation on Custom Resources watched by Ansible based operators to override verbosity on an individual resource. (#2102) - Support for relative helm chart paths in the Helm operator's watches.yaml file. (#2287)
- New
operator-sdk generate crds
subcommand, which generates CRDs from Go types. (#2276) - Go API code can now be annotated to populate a CSV's
spec.customresourcedefinitions.owned
field on invokingolm-catalog gen-csv
. (#1162)
Changed
- Upgrade minimal Ansible version in the init projects from
2.4
to2.6
. (#2107) - Upgrade Kubernetes version from
kubernetes-1.15.4
tokubernetes-1.16.2
. (#2145) - Upgrade Helm version from
v2.15.0
tov2.16.1
. (#2145) - Upgrade
controller-runtime
version fromv0.3.0
tov0.4.0
. (#2145) - Updated
pkg/test/e2eutil.WaitForDeployment()
andpkg/test/e2eutil.WaitForOperatorDeployment()
to successfully complete waiting when the available replica count is at least (rather than exactly) the minimum replica count required. (#2248) - Replace in the Ansible based operators module tests
k8s_info
fork8s_facts
which is deprecated. (#2168) - Upgrade the Ansible version from
2.8
to2.9
on the Ansible based operators image. (#2168) - Updated CRD generation for non-Go operators to use valid structural schema. (#2275)
- Replace Role verb
"*"
with list of verb strings in generated files so the Role is compatible with OpenShift and Kubernetes. (#2175) - Breaking change: An existing CSV's
spec.customresourcedefinitions.owned
is now always overwritten except for eachname
,version
, andkind
on invokingolm-catalog gen-csv
when Go API code annotations are present. (#1162)
Deprecated
- Deprecated the
operator-sdk generate openapi
command. CRD generation is still supported withoperator-sdk generate crds
. It is now recommended to use openapi-gen directly for OpenAPI code generation. Thegenerate openapi
subcommand will be removed in a future release. (#2276)
Bug Fixes
- Fixed log formatting issue that occurred while loading the configuration for Ansible-based operators. (#2246)
- Fix issue faced in the Ansible based operators when
jmespath
queries are used because it was not installed. (#2252) - Updates
operator-sdk build
for go operators to compile the operator binary based on Go's built-in GOARCH detection. This fixes an issue that caused anamd64
binary to be built into non-amd64
base images when using operator-sdk on non-amd64
architectures. (#2268) - Fix scorecard behavior such that a CSV file is read correctly when
olm-deployed
is set totrue
. (#2274) - A CSV config's
operator-name
field will be used if--operator-name
is not set. (#2297) - Populates a CSV's
spec.install
strategy if either name or strategy body are missing with a deployment-type strategy. (#2298) - When the current leader pod has been hard evicted but not deleted, another pod is able to delete the evicted pod, triggering garbage collection and allowing leader election to continue. (#2210)
Note: See how to upgrade your project to the version v0.13.0 by checking the Version Upgrade Guide
v0.12.0
v0.12.0
Added
- Added
Operator Version: X.Y.Z
information in the operator logs.(#1953) - Make Ansible verbosity configurable via the
ansible-verbosity
flag. (#2087)
Changed
- Breaking change: Changed required Go version from
1.12
to1.13
. This change applies to the SDK project itself and Go projects scaffolded by the SDK. Projects that import this version of the SDK require Go 1.13 to compile. (#1949) - Upgrade Kubernetes version from
kubernetes-1.14.1
tokubernetes-1.15.4
. (#2083) - Upgrade Helm version from
v2.14.1
tov2.15.0
. (#2083) - Upgrade
controller-runtime
version fromv0.2.0
tov0.3.0
. (#2083) - Upgrade
controller-tools
version fromv0.2.1+git
tov0.2.2
. (#2083)
Removed
- Removed
--dep-manager
flag and support fordep
-based projects. Projects will be scaffolded to use Go modules. (#1949)
Bug Fixes
- OLM internal manager is not returning errors in the initialization. (#1976)
- Added missing default role permission for
deployments
, which is required to create the metrics service for the operator. (#2090) - Handle invalid maxArtifacts annotation on CRs for Ansible based operators. (2093)
- When validating package manifests, only return an error if default channel is not set and more than one channel is available. (#2116)
Note: See how to upgrade your project to the version v0.12.0 by checking the Version Upgrade Guide
v0.11.0
v0.11.0
Added
- Added new
--skip-generation
flag to theoperator-sdk add api
command to support skipping generation of deepcopy and OpenAPI code and OpenAPI CRD specs. (#1890) - The
operator-sdk olm-catalog gen-csv
command now produces indented JSON for thealm-examples
annotation. (#1793) - Added flag
--dep-manager
to commandoperator-sdk print-deps
to specify the type of dependency manager file to print. The choice of dependency manager is inferred from top-level dependency manager files present if--dep-manager
is not set. (#1819) - Ansible based operators now gather and serve metrics about each custom resource on port 8686 of the metrics service. (#1723)
- Added the Go version, OS, and architecture to the output of
operator-sdk version
(#1863) - Added support for
ppc64le-linux
for theoperator-sdk
binary and the Helm operator base image. (#1533)
Changed
- The Helm operator now uses the CR name for the release name for newly created CRs. Existing CRs will continue to use their existing UID-based release name. When a release name collision occurs (when CRs of different types share the same name), the second CR will fail to install with an error about a duplicate name. (#1818)
- Commands
olm uninstall
andolm status
no longer use a--version
flag to specify OLM version. This information is now retrieved from the running cluster. (#1634) - The Helm operator no longer prints manifest diffs in the operator log at verbosity levels lower than INFO (#1857)
- CRD manifest
spec.version
is still supported, but users will see a warning message ifspec.versions
is not present and an error ifspec.versions
is populated but the version inspec.version
is not inspec.versions
. (#1876) - Upgrade base image for Go, Helm, and scorecard proxy from
registry.access.redhat.com/ubi7/ubi-minimal:latest
toregistry.access.redhat.com/ubi8/ubi-minimal:latest
. (#1952) - Upgrade base image for Ansible from
registry.access.redhat.com/ubi7/ubi:latest
toregistry.access.redhat.com/ubi8/ubi:latest
. (#1990 and #2004) - Updated kube-state-metrics dependency from
v1.6.0
tov1.7.2
. (#1943)
Breaking changes
See the v0.11.x version upgrade guide for more details on how to adjust for these breaking changes.
- Upgrade Kubernetes version from
kubernetes-1.13.4
tokubernetes-1.14.1
(#1876) - Upgrade
github.com/operator-framework/operator-lifecycle-manager
version fromb8a4faf68e36feb6d99a6aec623b405e587b17b1
to0.10.1
(#1876) - Upgrade
controller-runtime
version fromv0.1.12
tov0.2.0
(#1876)- The package
sigs.k8s.io/controller-runtime/pkg/runtime/scheme
is deprecated, and contains no code. Replace this import withsigs.k8s.io/controller-runtime/pkg/scheme
where relevant. - The package
sigs.k8s.io/controller-runtime/pkg/runtime/log
is deprecated. Replace this import withsigs.k8s.io/controller-runtime/pkg/log
where relevant. - The package
sigs.k8s.io/controller-runtime/pkg/runtime/signals
is deprecated. Replace this import withsigs.k8s.io/controller-runtime/pkg/manager/signals
where relevant. - All methods on
sigs.k8s.io/controller-runtime/pkg/client.Client
(except forGet()
) have been updated. Instead of each using astruct
-typed or variadic functional option parameter, or having no option parameter, each now uses a variadic interface option parameter typed for each method. SeeList()
below for an example. sigs.k8s.io/controller-runtime/pkg/client.Client
'sList()
method signature has been updated:List(ctx context.Context, opts *client.ListOptions, list runtime.Object) error
is nowList(ctx context.Context, list runtime.Object, opts ...client.ListOption) error
. To migrate:import ( "context" "sigs.k8s.io/controller-runtime/pkg/client" ) ... // Old listOpts := &client.ListOptions{} listOpts.InNamespace("namespace") err = r.client.List(context.TODO(), listOps, podList) // New listOpts := []client.ListOption{ client.InNamespace("namespace"), } err = r.client.List(context.TODO(), podList, listOpts...)
- The package
pkg/test.FrameworkClient
methodsList()
andDelete()
have new signatures corresponding to the homonymous methods ofsigs.k8s.io/controller-runtime/pkg/client.Client
. (#1876)- CRD file names were previously of the form
<group>_<version>_<kind>_crd.yaml
. Now that CRD manifestspec.version
is deprecated in favor ofspec.versions
, i.e. multiple versions can be specified in one CRD, CRD file names have the form<full group>_<resource>_crd.yaml
.<full group>
is the full group name of your CRD while<group>
is the last subdomain of<full group>
, ex.foo.bar.com
vsfoo
.<resource>
is the plural lower-case CRD Kind found atspec.names.plural
. (#1876) - Upgrade Python version from
2.7
to3.6
, Ansible version from2.8.0
to~=2.8
and ansible-runner from1.2
to1.3.4
in the Ansible based images. (#1947) - Replaced
pkg/kube-metrics.NewCollectors()
withpkg/kube-metrics.NewMetricsStores()
and changed exported function signature forpkg/kube-metrics.ServeMetrics()
due to a breaking change in kube-state-metrics. (#1943)
Removed
- Removed flag
--as-file
from commandoperator-sdk print-deps
, which now only prints packages and versions in dependency manager file format. The choice of dependency manager type is set by--dep-manager
or inferred from top-level dependency manager files present if--dep-manager
is not set. (#1819)
Bug Fixes
- Configure the repo path correctly in
operator-sdk add crd
and prevent the command from running outside of an operator project. (#1660) - In the Helm operator, skip owner reference injection for cluster-scoped resources in release manifests. The Helm operator only supports namespace-scoped CRs, and namespaced resources cannot own cluster-scoped resources. (#1817)
- Package manifests generated with
gen-csv
respect the--operator-name
flag, channel names are checked for duplicates before (re-)generation. (#1693) - Generated inventory for Ansible-based Operators now sets the localhost's
ansible_python_interpreter
to{{ ansible_playbook_python }}
, to properly match the implicit localhost. (#1952) - Fixed an issue in
operator-sdk olm-catalog gen-csv
where the generated CSV is missing the expected set of owned CRDs. (#2017) - The command
operator-sdk olm-catalog gen-csv --csv-version=<version> --update-crds
would fail to copy over CRD manifests intodeploy/olm-catalog
for manifests whose name didn't end with a_crd.yaml
suffix. This has been fixed sogen-csv
now copies all CRD manifests specified bydeploy/olm-catalog/csv_config.yaml
by checking the type of the manifest rather than the filename suffix. (#2015) - Added missing
jmespath
dependency to Ansible-based Operator .travis.yml file template. ([#2027](http...
v0.10.1
v0.10.1
Bug Fixes
- The command
operator-sdk olm-catalog gen-csv --csv-version=<version> --update-crds
would fail to copy over CRD manifests intodeploy/olm-catalog
for manifests whose name didn't end with a_crd.yaml
suffix. This has been fixed sogen-csv
now copies all CRD manifests specified bydeploy/olm-catalog/csv_config.yaml
by checking the type of the manifest rather than the filename suffix. (#2015) - Fixed an issue in
operator-sdk olm-catalog gen-csv
where the generated CSV is missing the expected set of owned CRDs. (#2017) - Fixed invalid usage of
logr.Logger.Info()
in the Ansible-based operator implementation, which caused unnecessary operator panics. (#2031)
Note: See how to upgrade your project to the version v0.10+ by checking the Version Upgrade Guide
v0.10.0
Added
- Document new compile-time dependency
mercurial
in user-facing documentation. (#1683) - Adds new flag
--zap-time-encoding
to the flagset provided bypkg/log/zap
. This flag configures the timestamp format produced by the zap logger. See the logging doc for more information. (#1529)
Changed
- Breaking change: CSV config field
role-path
is nowrole-paths
and takes a list of strings. Users can now specify multipleRole
andClusterRole
manifests usingrole-paths
. (#1704) - Make
ready
package idempotent. Now, a user can callSet()
orUnset()
to set the operator's readiness without knowing the current state. (#1761)
Bug Fixes
- Check if
metadata.annotations['alm-examples']
is non-empty before creating contained CR manifests in the scorecard. (#1789)
Note: See how to upgrade your project to the version v0.10+ by checking the Version Upgrade Guide
v0.8.2
Bug Fixes
- Fixes header file content validation when the content contains empty lines or centered text. (#1544)
- Generated CSV's that include a deployment install strategy will be checked for a reference to
metadata.annotations['olm.targetNamespaces']
, and if one is not found a reference will be added to theWATCH_NAMESPACE
env var for all containers in the deployment. This is a bug because any other value that references the CSV's namespace is incorrect. (#1396) - Build
-trimpath
was not being respected.$GOPATH
was not expanding becauseexec.Cmd{}
is not executed in a shell environment. (#1535) - Running the scorecard with
--olm-deployed
will now only use the first CR set in either thecr-manifest
config option or the CSV'smetadata.annotations['alm-examples']
as was intended, and access manifests correctly from the config. (#1565) - Use the correct domain names when generating CRD's instead that of the first CRD to be parsed. (#1636)
Note: See how to upgrade your project to the version v0.8+ by checking the Version Upgrade Guide
v0.9.0
Note: an operator created or managed by this release requires that mercurial v3.9+
is installed to manage modules.
Added
- Adds support for building OCI images with podman, e.g.
operator-sdk build --image-builder=podman
. (#1488) - New option for
operator-sdk up local --enable-delve
, which can be used to start the operator in remote debug mode with the delve debugger listening on port 2345. (#1422) - Enables controller-runtime metrics in Helm operator projects. (#1482)
- New flags
--vendor
and--skip-validation
foroperator-sdk new
that direct the SDK to initialize a new project with avendor/
directory, and without validating project dependencies.vendor/
is not written by default. (#1519) - Generating and serving info metrics about each custom resource. By default these metrics are exposed on port 8686. (#1277)
- Scaffold a
pkg/apis/<group>/group.go
package file to avoidgo/build
errors when running Kubernetes code generators. (#1401) - Adds a new extra variable containing the unmodified CR spec for ansible based operators. #1563
- New flag
--repo
for subcommandsnew
andmigrate
specifies the repository path to be used in Go source files generated by the SDK. This flag can only be used with Go modules. (#1475) - Adds
--go-build-args
flag tooperator-sdk build
for providing additional Go build arguments. (#1582) - New flags
--csv-channel
and--default-channel
for subcommandgen-csv
that add channels to and update the package manifest indeploy/olm-catalog/<operator-name>
when generating a new CSV or updating an existing one. (#1364) - Adds
go.mod
andgo.sum
to switch fromdep
to Go modules to manage dependencies for the SDK project itself. (#1566) - New flag
--operator-name
foroperator-sdk olm-catalog gen-csv
to specify the operator name, ex.memcached-operator
, to use in CSV generation. The project's name is used (old behavior) if--operator-name
is not set. (#1571) - New flag
--local-operator-flags
foroperator-sdk test local --up-local
to specify flags to run a local operator with during a test. (#1509)
Changed
- Upgrade the version of the dependency controller-runtime from
v0.1.10
tov0.1.12
. (#1612) - Remove TypeMeta declaration from the implementation of the objects (#1462)
- Relaxed API version format check when parsing
pkg/apis
in code generators. API dir structures can now be of the formatpkg/apis/<group>/<anything>
, where<anything>
was previously required to be in the Kubernetes version format, ex.v1alpha1
. (#1525) - The SDK and operator projects will work outside of
$GOPATH/src
when using Go modules. (#1475) CreateMetricsService()
function from the metrics package accepts a REST config (*rest.Config) and an array of ServicePort objects ([]v1.ServicePort) as input to create Service metrics.CRPortName
constant is added to describe the string of custom resource port name. (#1560 and #1626)- Changed the flag
--skip-git-init
to--git-init
. This changes the default behavior ofoperator-sdk new
to not initialize the new project directory as a git repository withgit init
. This behavior is now opt-in with--git-init
. (#1588) operator-sdk new
will no longer create the initial commit for a new project, even with--git-init=true
. (#1588)- When errors occur setting up the Kubernetes client for RBAC role generation,
operator-sdk new --type=helm
now falls back to a default RBAC role instead of failing. (#1627)
Removed
- The SDK no longer depends on a
vendor/
directory to manage dependencies only if using Go modules. The SDK and operator projects will only use vendoring if usingdep
, or modules and avendor/
dir is present. (#1519) - Breaking change:
ExposeMetricsPort
is removed and replaced withCreateMetricsService()
function.PrometheusPortName
constant is replaced withOperatorPortName
. (#1560) - Removes
Gopkg.toml
andGopkg.lock
to drop the use ofdep
in favor of Go modules to manage dependencies for the SDK project itself. (#1566)
Bug Fixes
- Generated CSV's that include a deployment install strategy will be checked for a reference to
metadata.annotations['olm.targetNamespaces']
, and if one is not found a reference will be added to theWATCH_NAMESPACE
env var for all containers in the deployment. This is a bug because any other value that references the CSV's namespace is incorrect. (#1396) - Build
-trimpath
was not being respected.$GOPATH
was not expanding becauseexec.Cmd{}
is not executed in a shell environment. (#1535) - Running the scorecard with
--olm-deployed
will now only use the first CR set in either thecr-manifest
config option or the CSV'smetadata.annotations['alm-examples']
as was intended, and access manifests correctly from the config. (#1565) - Use the correct domain names when generating CRD's instead that of the first CRD to be parsed. (#1636)
Note: See how to upgrade your project to the version v0.9+ by checking the Version Upgrade Guide
v0.8.1
v0.8.1
Bug Fixes
- Fixes a regression that causes Helm RBAC generation to contain an empty custom ruleset when the chart's default manifest contains only namespaced resources. (#1456)
- Fixes an issue that causes Helm RBAC generation to fail when creating new operators with a Kubernetes context configured to connect to an OpenShift cluster. (#1461)
Note: See how to upgrade your project to the version v0.8+ by checking the Version Upgrade Guide
v0.8.0
v0.8.0
Added
- New option for
operator-sdk build --image-builder
, which can be used to specify which image builder to use. Adds support for buildah. (#1311) - Manager is now configured with a new
DynamicRESTMapper
, which accounts for the fact that the defaultRESTMapper
, which only checks resource types at startup, can't handle the case of first creating a CRD and then an instance of that CRD. (#1329) - Unify CLI debug logging under a global
--verbose
flag (#1361) - Go module support by default for new Go operators and during Ansible and Helm operator migration. The dependency manager used for a new operator can be explicitly specified for new operators through the
--dep-manager
flag, available inoperator-sdk new
andoperator-sdk migrate
.dep
is still available through--dep-manager=dep
. (#1001) - New optional flag
--custom-api-import
foroperator-sdk add controller
to specify that the new controller reconciles a built-in or external Kubernetes API, and what import path and identifier it should have. (#1344) - Operator Scorecard plugin support (#1379). Documentation for the scorecard plugins API will be added in PR #1433.
Changed
- When Helm operator projects are created, the SDK now generates RBAC rules in
deploy/role.yaml
based on the chart's default manifest. (#1188) - When debug level is 3 or higher, we will set the klog verbosity to that level. (#1322)
- Relaxed requirements for groups in new project API's. Groups passed to
operator-sdk add api
's--api-version
flag can now have no subdomains, excore/v1
. See (#1191) for discussion. (#1313) - Renamed
--docker-build-args
option to--image-build-args
option forbuild
subcommand, because this option can now be shared with other image build tools than docker when--image-builder
option is specified. (#1311) - Reduces Helm release information in CR status to only the release name and manifest and moves it from
status.conditions
to a new top-leveldeployedRelease
field. (#1309)- WARNING: Users with active CRs and releases who are upgrading their helm-based operator should upgrade to one based on v0.7.0 before upgrading further. Helm operators based on v0.8.0+ will not seamlessly transition release state to the persistent backend, and will instead uninstall and reinstall all managed releases.
- Go operator CRDs are overwritten when being regenerated by
operator-sdk generate openapi
. Users can now rely on+kubebuilder
annotations in their API code, which provide access to most OpenAPIv3 validation properties (the full set will be supported in the near future, see this PR) and other CRD fields. (#1278) - Use
registry.access.redhat.com/ubi7/ubi-minimal:latest
base image for the Go and Helm operators and scorecard proxy (#1376) - Allow "Owned CRDs Have Resources Listed" scorecard test to pass if the resources section exists
Deprecated
Removed
- The SDK will no longer run
defaulter-gen
on runningoperator-sdk generate k8s
. Defaulting for CRDs should be handled with mutating admission webhooks. (#1288) - The
--version
flag was removed. Users should use theoperator-sdk version
command. (#1444) - Breaking Change: The
test cluster
subcommand and the corresponding--enable-tests
flag for thebuild
subcommand have been removed (#1414) - Breaking Change: The
--cluster-scoped
flag foroperator-sdk new
has been removed so it won't scaffold a cluster-scoped operator. Read the operator scope documentation on the changes needed to run a cluster-scoped operator. (#1434)
Bug Fixes
- In Helm-based operators, when a custom resource with a failing release is reverted back to a working state, the
ReleaseFailed
condition is now correctly removed. (#1321) operator-sdk generate openapi
no longer overwrites CRD values derived from+kubebuilder
annotations in Go API code. See issues (#1212) and (#1323) for discussion. (#1278)- Running
operator-sdk gen-csv
on operators that do not have a CRDs directory, ex.deploy/crds
, or do not have any owned CRDs, will not generate a "deploy/crds not found" error.
Note: See how to upgrade your project to the version v0.8+ by checking the Version Upgrade Guide