All notable changes to this project will be documented in this file.
- Git sync: add support for CAs (#1154).
- Add support for specifying a
clientAuthenticationMethodfor OIDC (#1178). This was originally done in #1158 and had been reverted in #1170. - Implement
Derefforkvp::Keyto be more ergonomic to use (#1182). - Add
create_random_secret_if_not_existsfunction, which create a random Secret in case it doesn't already exist. It notably also fixes a bug we had in trino and airflow-operator, where we created immutable Secrets, which lead to problems (#1187).
-
Bump stackable-versioned to
0.9.0, refer to its changelog (#1189). -
Bump stackable-webhook to
0.9.1, refer to its changelog (#1189). -
BREAKING: Add mandatory
provision_partsargument toSecretOperatorVolumeSourceBuilder::new(#1165). It now forces the caller to make an explicit choice if the public parts are sufficient or if private (e.g. a certificate for the Pod) parts are needed as well. This is done to avoid accidentally requesting too much parts. For details see this issue.Additionally,
SecretClassVolume::to_volumeandSecretClassVolume::to_ephemeral_volume_sourcealso take the same new argument.
- BREAKING: Remove unused
add_prefix,try_add_prefix,set_name, andtry_set_nameassociated functions fromkvp::Keyto disallow mutable access to inner values (#1182).
- Reverted support for specifying a
clientAuthenticationMethodfor OIDC (#1170). It can be added back after the SDP 26.3.0 release.
- Add CRD established signal/helper (#1167).
- Demote
kube_runtime::controller::Error::QueueErrorto warning (#1168).
- Add support for specifying a
clientAuthenticationMethodfor OIDC (#1158). - Added two new crate features:
crdsandkube-ws(#1162).
- BREAKING: Fix compilation failures when not enabling default features (#1162).
This is achieved by removing the
clap,telemetryandversionedfeatures, which were previously enabled by default. They have been removed as the stackable-operator code actually always requires them.
- Bump strum to 0.28.0 (#1160).
- Skip serializing traffic policy field of ListenerClass if
None(#1152).
- BREAKING: Upgrade to kube
3.0.1and k8s-openapi0.27.0(#1138). - Bump stackable-shared to
0.1.0, refer to its changelog (#1151).
- Store the Vector state in the log directory to ensure it persists across container restarts (#1149).
- BREAKING: Add support to gracefully shutdown
EosChecker.EosChecker::runnow requires passing a shutdown signal, which is anyFuture<Output = ()>(#1146). - Add
SignalWatcherwhich can be used to watch signals and multiply them to gracefully shutdown multiple concurrent tasks/futures (#1147).
- Add
serviceOverridesfield of typeServicetoListenerClass.spec.serviceOverrides(#1142).
- BREAKING:
ListenerClassSpecno longer implementsEq(#1142).
- BREAKING: Add support for the SSH protocol for pulling git content (#1121). This is a user-facing breaking change and should also be highlighted by operators using this functionality.
- BREAKING: Add
objectOverridesfield toListenerSpec(#1136). - Added
stackable_operator::constants::RESTART_CONTROLLER_ENABLED_LABELconstant, which represents therestarter.stackable.tech/enabled=truelabel (#1139).
- BREAKING: Only take
object_overridesby reference inClusterResources::new(#1132).
- Support
objectOverrides, a list of generic Kubernetes objects, which are merged into the objects created by the operator. Alongside, adeep_mergermodule was added, which takes a Kubernetes object and a list of overrides and merges them into the provided object (#1118).
- Bump stackable-webhook to 0.8.0, refer to its changelog (#1117).
- BREAKING:
ClusterResourcesnow requires the objects added to implementDeepMerge. This is very likely a stackable-operator internal change, but technically breaking (#1118). - Depend on the patched version of kube-rs available at https://github.com/stackabletech/kube-rs, ensuring the operators automatically benefit from the fixes (#1124).
- BREAKING:
ClusterResourcesno longer derivesEq(#1118).
- BREAKING: Default ListenerClass
.spec.externalTrafficPolicytonullso that LoadBalancers work everywhere (#1107).
- Add
LabelExttrait which enables adding validated labels to any Kubernetes resource (#1106). - Add new associated convenience functions to
Label(#1106).Label::stackable_vendor: stackable.tech/vendor=StackableLabel::instance: app.kubernetes.io/instanceLabel::name: app.kubernetes.io/name
- Add a
Client::create_if_missingassociated function to create a resource if it doesn't exist (#1099). - BREAKING: Add new ListenerClass
.spec.pinnedNodePortsfield (#1105).
- Add CLI argument and env var to disable the end-of-support checker:
EOS_DISABLED(--eos-disabled) (#1101). - Add end-of-support checker (#1096, #1103).
- The EoS checker can be constructed using
EndOfSupportChecker::new(). - Add new
MaintenanceOptionsandEndOfSupportOptionsstructs. - Add new CLI arguments and env vars:
EOS_CHECK_MODE(--eos-check-mode) to set the EoS check mode. Currently, only "offline" is supported.EOS_INTERVAL(--eos-interval) to set the interval in which the operator checks if it is EoS.
- The EoS checker can be constructed using
- Update the end-of-support warning message (#1103)
- BREAKING:
ProductOperatorRunwas renamed toRunArguments(#1096). - BREAKING: The
disable_crd_maintenancefield was moved fromRunArgumentsintoMaintenanceOptions. The CLI interface is unchanged (#1096). - BREAKING: Integration of
KubernetesClusterInfoOptionswithclapis now gated behind theclapfeature flag. This is only breaking if default features forstackable-operatorare disabled (#1096). - BREAKING: Bump
product-configto 0.8.0 (#1098).
- Extend
ObjectMetaBuilderwithfinalizers(#1094).
- BREAKING: Upgrade to
schemars1.0,kube2.0 andk8s-openapi0.26 (using Kubernetes 1.34) (#1091).
- BREAKING: Don't allow uppercase characters in Kubernetes object names (#1095).
- BREAKING: Add a new CLI flag/env to disabling CRD maintenance:
--disable-crd-maintenance(#1085).
- BREAKING: Remove the Merge implementation for PodTemplateSpec (#1087). It was broken because the instance was overridden by the given defaults. This function is not used by the Stackable operators.
- Don't default the
termination_grace_periodof theProbeBuilderto 0, as this is an invalid value (#1090).
- Add a
cli::CommonOptionsstruct, which can be used for non-operator Stackable tools (#1083).
- BREAKING: The
telemetryandcluster_infofields ofProductOperatorRunhave moved below thecommonfield (#1083).
- Derive
CloneforProbeBuilderandProbeAction(#1082).
- Add
ProbeBuilderto build Kubernetes container probes (#1078). - Re-export
stackable-certsandstackable-webhookcrates (#1074). - BREAKING: Add two new required CLI arguments:
--operator-namespaceand--operator-service-name. These two values are used to construct the service name in the CRD conversion webhook (#1066). - Re-export
stackable-certsandstackable-webhookcrates (#1074).
- BREAKING: The
ResolvedProductImagefieldapp_version_labelwas renamed toapp_version_label_valueto match changes to its type (#1076). - BREAKING: Rename two fields of the
ProductOperatorRunstruct for consistency and clarity (#1066):telemetry_arguments->telemetrycluster_info_opts->cluster_info
- BREAKING: Some modules have been moved into the
stackable-sharedcrate, so that they can also be used instackable-certsandstackable-webhook(#1074):- The module
stackable_operator::timehas moved tostackable_operator::shared::time - The module
stackable_operator::commons::secrethas moved tostackable_operator::shared::secret
- The module
- BREAKING: Fix bug where
ResolvedProductImage::app_version_labelcould not be used as a label value because it can contain invalid characters. This is the case when referencing custom images via a@sha256:...hash. As such, theproduct_image_selection::resolvefunction is now fallible (#1076).
-
The default Kubernetes cluster domain name is now fetched from the kubelet API unless explicitly configured (#1068, #1071) This requires operators to have the RBAC permission to
getnodes/proxyin the apiGroup "", an example RBAC rule could look like:--- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: operator-cluster-role rules: - apiGroups: [""] resources: [nodes/proxy] verbs: [get]
In addition, they must be provided the environment variable
KUBERNETES_NODE_NAMElike this:env: - name: KUBERNETES_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName
-
Add associated functions on
RoleGroupRefto return the rolegroup headless and metrics service name (#1069).
- Update
kubeto1.1.0(#1049). - BREAKING: Return type for
ListenerOperatorVolumeSourceBuilder::new()is no longer aResult(#1058).
- Allow uppercase characters in domain names (#1064).
- BREAKING: Removed
last_update_timefrom CRD ClusterCondition status (#1054). - BREAKING: Removed role binding to legacy service accounts (#1060).
- Added
ListenerClass.spec.loadBalancerClassand.loadBalancerAllocateNodePortsfields (#986).
- Remove instrumentation from uninteresting functions (#1023).
- Add git-sync support (#1024).
- BREAKING: Version common CRD structs and enums (#968).
- All CRD-related types and function now reside in the
stackable_operator::crdmodule. - Each CRD-related struct and enum has been versioned. The initial version is
v1alpha1. - The
staticauthentication provider must now be imported usingr#static. - Import are now more granular in general.
- All CRD-related types and function now reside in the
- BREAKING: Update to
kubeto1.0.0andk8s-openapito0.25.0. Use k8s1.33for compilation (#1037). - Separate some developer docs from CRD descriptions (#1040).
- Adds new CLI arguments and environment variables (#1010, #1012).
- Use
--file-log-max-files(orFILE_LOG_MAX_FILES) to limit the number of log files kept. - Use
--console-log-format(orCONSOLE_LOG_FORMAT) to set the format toplain(default) orjson. - See detailed stackable-telemetry changelog.
- Use
- BREAKING: Update and align telemetry related CLI arguments of
ProductOperatorRun, see detailed changelog stackable-telemetry changelog (#1009).
- Add re-exports for
stackable-telemetryandstackable-versioned(#1007). - Add new features:
default,full,telemetry, andversioned(#1007).
- BREAKING: Remove
cli::TelemetryArgumentsandcli::RollingPeriodwhich are both replaced by types fromstackable_telemetry(#1001). - BREAKING: The
ProductOperatorRunstruct now usesstackable_telemetry::tracing::TelemetryOptionsfor thetelemetry_argumentsfield (#1001).
- BREAKING: Inject vector aggregator address into vector config file using an environment variable (#1000).
- Make fields of
TelemetryArgumentspublic (#998).
- Add more granular telemetry related arguments to
ProductOperatorRun(#977).--no-console-output: Disables output oftracingevents to the console (stdout)--rolling-logs: Enables outputtracingevents to a rolling log file--rolling-logs-period: Sets the time period after which log files are rolled over--otlp-traces: Enables exporting of traces via OTLP--otlp-logs: Enables exporting of logs via OTLP
- BREAKING: Remove
--tracing-targetargument and field fromProductOperatorRun. Use the new, more granular arguments instead (#977). - BREAKING: Remove
initialize_logginghelper function fromstackable_operator::logging(#977). - Remove
opentelemetry-jaegerdependency (#977).
- Deprecate
stackable_operator::logging::initialize_logging(). It's recommended to usestackable-telemetryor#[allow(deprecated)]instead (#950, #989).
- Enable the
kube/ringfeature to use ring as the crypto provider forrustls. This will otherwise cause runtime errors which result in panics (#988).
- Bump
kubeto 0.99.0 andjson-patchto 4.0.0 (#982).
- Add a
Region::is_default_configfunction to determine if a region sticks to the default config (#983).
- Make
region.namefield in in S3ConnectionSpec public (#980).
- Refactor
regionfield in S3ConnectionSpec (#976).
- BREAKING: Update
strumto0.27.1(clients need to also update strum!),randto0.9.0andconvert_caseto0.8.0(#972).
- BREAKING: Improve
AwsRegion::name()ergonomics: borrow self and returnOption<&str>(#963).
- BREAKING: Add
regionfield to S3ConnectionSpec (defaults tous-east-1) (#959).
- Add generic
TtlCachestructure as well as aUserInformationCachetype (#943).
- Change constant used for product image selection so that it defaults to OCI (#945).
- Remove
Mergetrait bound fromeraseand makeproduct_specific_common_configpublic (#946). - BREAKING: Revert the change of appending a dot to the default cluster domain to make it a FQDN, it is now
cluster.localagain. Users can instead explicitly opt-in to FQDNs via the ENV variableKUBERNETES_CLUSTER_DOMAIN. (#947).
- BREAKING: Aggregate emitted Kubernetes events on the CustomResources thanks to the new
kube feature. Instead of reporting the same
event multiple times it now uses
EventSeriesto aggregate these events to single entry with an age like3s (x11 over 53s)(#938):- The
report_controller_errorfunction now needs to be async. - It now takes
Recorderas a parameter instead of aClient. - The
Recorderinstance needs to be available across allreconcileinvocations, to ensure aggregation works correctly. - The operator needs permission to
patchevents (previously onlycreatewas needed).
- The
- Add
ProductSpecificCommonConfig, so that product operators can have custom fields withincommonConfig. Also add aJavaCommonConfig, which can be used by JVM-based tools to offerjvmArgumentOverrideswith this mechanism (#931)
- BREAKING: Bump Rust dependencies to enable Kubernetes 1.32 (via
kube0.98.0 andk8s-openapi0.23.0) (#938). - BREAKING: Append a dot to the default cluster domain to make it a FQDN and allow FQDNs when validating a
DomainName(#939).
- Added cert lifetime setter to
SecretOperatorVolumeSourceBuilder(#915)
- Replace unmaintained
derivativecrate witheduce(#907). - Bump dependencies, notably rustls 0.23.15 to 0.23.19 to fix RUSTSEC-2024-0399 (#917).
- Fixed URL handling related to OIDC and
rootPathwith and without trailing slashes. Also added a bunch of tests (#910).
- BREAKING: Made
DEFAULT_OIDC_WELLKNOWN_PATHprivate. UseAuthenticationProvider::well_known_config_urlinstead (#910). - BREAKING: Changed visibility of
commons::rbac::service_account_nameandcommons::rbac::role_binding_nameto private, as these functions should not be called directly by the operators. This is likely to result in naming conflicts as the result is completely dependent on what is passed to this function. Operators should instead rely on the roleBinding and serviceAccount objects created bycommons::rbac::build_rbac_resourcesand retrieve the name from the returned objects if they need it (#909). - Changed the names of the objects that are returned from
commons::rbac::build_rbac_resourcesto not rely solely on the product they refer to (e.g. "nifi-rolebinding") but instead include the name of the resource to be unique per cluster (e.g. simple-nifi-rolebinding) (#909).
- Add new
PreferredAddressType::HostnameConservative(#903).
- BREAKING: Split
ListenerClass.spec.preferred_address_typeinto a newPreferredAddressTypetype. Useresolve_preferred_address_type()to access theAddressTypeas before (#903).
- BREAKING: Don't parse
/etc/resolv.confto auto-detect the Kubernetes cluster domain in case it is not explicitly configured. Instead the operator will default tocluster.local. We revert this now after some concerns where raised, we will create a follow-up decision instead addressing how we will continue with this (#896). - Update Rust dependencies (Both
json-patchand opentelemetry crates cannot be updated because of conflicts) (#897):- Bump
kubeto0.96.0, rstestto0.23.0andtower-httpto0.6.1
- Bump
- Fix Kubernetes cluster domain parsing from resolv.conf, e.g. on AWS EKS. We now only consider Kubernetes services domains instead of all domains (which could include non-Kubernetes domains) (#895).
- Re-export the
YamlSchematrait and thestackable-sharedcrate as thesharedmodule (#883). - BREAKING: Added
preferredAddressTypefield to ListenerClass CRD (#885). - BREAKING: The cluster domain (default:
cluster.local) can now be configured in the individual operators via the ENV variableKUBERNETES_CLUSTER_DOMAINor resolved automatically by parsing the/etc/resolve.conffile. This requires usinginitialize_operatorinstead ofcreate_clientin themain.rsof the individual operators (#893).
- BREAKING: The
CustomResourceExttrait is now re-exported from thestackable-sharedcrate. The trait functions use the same parameters but return a different error type (#883). - BREAKING:
KeyValuePairs(as well asLabels/Annotationsvia it) is now backed by aBTreeMaprather than aBTreeSet(#888).- The
Derefimpl now returns aBTreeMapinstead. iter()now clones the values.
- The
- BREAKING:
KeyValuePairs::insert(as well asLabels::/Annotations::via it) now overwrites the old value if the key already exists. Previously,iter()would return both values in lexicographical order (causing further conversions likeInto<BTreeMap>to prefer the maximum value) (#888).
- BREAKING: The
CustomResourceExttrait doesn't provide agenerate_yaml_schemafunction any more. Instead, use the high-level functions to write the schema to a file, write it to stdout or use it as aString(#883).
- Add Kerberos AuthenticationProvider (#880).
- Fix always returning an error stating that volumeMounts are colliding. Instead move the error
creation to the correct location within an
ifstatement (#879).
- Fix the logback configuration for logback versions from 1.3.6/1.4.6 to 1.3.11/1.4.11 (#874).
- BREAKING: Avoid colliding volumes and mounts by only adding volumes or mounts if they do not already exist. This makes functions such as
PodBuilder::add_volumeorContainerBuilder::add_volume_mountas well as related ones fallible (#871).
- BREAKING: Remove the
unique_identifierargument fromResolvedS3Connection::add_volumes_and_mounts,ResolvedS3Connection::volumes_and_mountsandResolvedS3Connection::credentials_mount_pathsas it is not needed anymore (#871).
- BREAKING: Add
HostNametype and use it within LDAP and OIDC AuthenticationClass as well as S3Connection (#863).
- BREAKING: The TLS verification struct now resides in the
commons::tls_verificationmodule, instead of being placed belowcommons::authentication::tls(#863). - BREAKING: Rename the
Hostnametype toDomainNameto be consistent with RFC 1123 (#863).
- BREAKING: The fields
bucketName,connectionandhostonS3BucketSpec,InlinedS3BucketSpecandS3ConnectionSpecare now mandatory. Previously operators errored out in case these fields where missing (#863).
- Add
HostnameandKerberosRealmNametypes extracted from secret-operator (#851). - Add support for listener volume scopes to
SecretOperatorVolumeSourceBuilder(#858).
- BREAKING:
validationmodule now uses typed errors (#851). - Set
checkIncrementto 5 seconds in Logback config (#853). - Bump Rust dependencies and enable Kubernetes 1.31 (via
kube0.95.0) (#867).
- Fix the CRD description of
ClientAuthenticationDetailsto not contain internal Rust doc, but a public CRD description (#846). StackableAffinityfields are no longer erroneously marked as required (#855).- BREAKING:
ClusterResourceswill now only consider deleting objects that are marked as directly owned (via.metadata.ownerReferences) (#862).
- Add
iter::reverse_ifhelper (#838). - Add two new constants
CONFIG_OVERRIDE_FILE_HEADER_KEYandCONFIG_OVERRIDE_FILE_FOOTER_KEY(#843).
- BREAKING: Replace
lazy_staticwithstd::cell::LazyCell(the original implementation was done in #827 and reverted in #835) (#840). - BREAKING: Swap priority order of role group config and role overrides in configuration merging to prioritize overrides in general (#841).
- Rollout tracker for
StatefulSet(#833).
- Invalid CRD schema for
StackableAffinitycontents. This was caused by the fields being optional and defaulting tonull, while the custom schema marked the field as required (#836).
- BREAKING: Replace
lazy_staticwithstd::cell::LazyCell(#827, #835, #840). - BREAKING: Convert
podOverridesandaffinityfields to take any arbitrary YAML input, rather than using the underlying schema. With this change, one of the larger CRDs, like the Druid CRD went down in size from2.4MBto288K(a 88% reduction). One downside is that user input is not checked to be a validPodTemplateSpec,PodAffinity,PodAntiAffinityandNodeAffinityany more. However, checks can be re-added by using validation webhooks if needed. This change should not be breaking for the user and is a preparation for CRD versioning. (#821).
- Added support for logging to files (#814).
- Changed OPA Bundle Builder Vector config to read from the new log-to-file setup (#814).
- BREAKING: Bump
kubeto 0.92.0. This required changes in a unit test, because thekube::runtime::watcher::Eventenum introduced new and renamed some variants. Also see the following additional resources (#804). - Upgrade opentelemetry crates (#811).
- Bump rust-toolchain to 1.79.0 (#822).
- Product image selection pull request version override now only applies to pull requests (#812).
- OPA bundle builder logs without a log message are marked with the error "Message not found." instead of "Log event not parsable" (#819).
- Processing of corrupted log events fixed; If errors occur, the error messages are added to the log event (#802).
- Change
strum::Displayoutput format forLogLevelto uppercase (#808).
- Derive
strum::DisplayforLogLevel(#805).
- Add functionality to convert LogLevel to an OPA log level (#798).
- BREAKING: Add labels to listener volume builder.
PodBuilder::add_listener_volume_by_listener_class,PodBuilder::add_listener_volume_by_listener_nameandListenerOperatorVolumeSourceBuilder::newnow require you to pass the labels for the created volumes (#799).
- Support specifying externalTrafficPolicy in Services created by listener-operator (#773, #789, #791).
- Add
InvalidProductSpecificConfigurationvariant instackable_operator::product_config_util::Errorenum (#782).
- Bump Rust dependencies and GitHub Actions (#782).
- Bump GitHub workflow actions (#772).
- Revert
zeroizeversion bump (#772).
- Bump kube to 0.89.0 and update all dependencies (#762).
- BREAKING: Bump k8s compilation version to
1.29. Also bump all dependencies. There are some breaking changes in k8s-openapi, e.g. PVCs now haveVolumeResourceRequirementsinstead ofResourceRequirements, andPodAffinityTermhas two new fieldsmatch_label_keysandmismatch_label_keys(#769).
- BREAKING: Remove
thiserrordependency, and deprecated builder exports (#761)
- Fix wrong schema (and thus CRD) for
config.affinity.nodeSelector(#752).
- Add
stackable_webhookcrate which provides utilities to create webhooks with TLS termination (#730). - Add
ConversionReviewre-export instackable_webhookcrate (#749).
- Remove
resourceskey fromDynamicValuesstruct (#734). - Bump
opentelemetry,opentelemetry_sdk,opentelemetry-jaeger, andtracing-opentelemetryRust dependencies (#753). - Bump GitHub workflow actions (#754).
- Fixed incorrect time calculation (#735).
- Derive
HashandOrdinstances forAuthenticationClassProvider, so that duplicates can be detected (#731).
- Add Serde
DeserializeandSerializesupport forCpuQuantityandMemoryQuantity(#724). - Add
DynamicValuesstruct to work with operatorvalues.yamlfiles during runtime (#723).
- Change Deref target of
KeyPrefixandKeyNamefromStringtostr(#725). - Add Stackable vendor label
stackable.tech/vendor: Stackableto recommended labels (#728).
- Added
Option::as_ref_or_elsetoutils(#717). - Add
iter()methods toKeyValuePairs<T>, and delegate iter() forLabels, andAnnotations(#720). - Implement
IntoIteratorforKeyValuePairs<T>,LabelsandAnnotations(#720). - Added
ListenerOperatorVolumeSourceBuilder::build_pvc(#719). - Added
Logging::for_container(#721).
- Split
utilsinto submodules (#717). - Bump rust to 1.75.0 (#720).
- Renamed
ListenerOperatorVolumeSourceBuilder::buildto::build_ephemeral(#719).
- Add
TryFrom<[(K, V); N]>implementation forAnnotationsandLabels(#711). - Add
parse_insertassociated function forAnnotationsandLabels(#711). - Add generic types for
TryFrom<BTreeMap<K, V>>impl (#714). - Add
TryFromIteratortrait, which tries to constructSelffrom an iterator. It is a falliable version ofFromIterator(#715). - Add
TryFromIteratorimpl forLabelsandAnnotations(#715).
- Adjust
try_insertforAnnotationsandLabelsslightly (#711).
- Let
ldap::AuthenticationProvider::add_volumes_and_mountsalso add the needed TLS volumes. This functionality was removed in #680 and causes kuttl tests to fail, as the ca-cert volume and mount where missing. This patch restores the previous behavior (of adding needed TLS volumes) (#708).
- Add LDAP AuthenticationClassProvider
endpoint_url()method so each operator doesn't have to construct it. (#705)
- Add
stackble_operator::kvpmodule and types to allow validated construction of key/value pairs, like labels and annotations. Most users want to use the exported type aliasesLabelandAnnotation(#684).
- Move
stackable_operator::label_selector::convert_label_selector_to_query_stringintokvpmodule. The conversion functionality now is encapsulated in a new traitLabelSelectorExt. An instance of aLabelSelectorcan now be converted into a query string by calling the associated functionls.to_query_string()(#684). - BREAKING: Remove legacy node selector on
RoleGroup(#652).
- More CRD documentation (#697).
- Add
oidc::AuthenticationProvider. This enables users to deploy a newAuthenticationClassfor OIDC providers like Keycloak, Okta or Auth0 (#680). - Add a common
ClientAuthenticationDetailsstruct, which provides common fields and functions to specify authentication options on product cluster level. Additionally, the PR also addsClientAuthenticationConfig,oidc::ClientAuthenticationOptions, andldap::ClientAuthenticationOptions(#680).
- BREAKING: Change the naming of all authentication provider structs. It is now required to import them using the
module. So imports change from
...::authentication::LdapAuthenticationProviderto...::authentication::ldap::AuthenticationProviderfor example (#680). - BREAKING: Move TLS related structs into the
tlsmodule. Imports need to be adjusted accordingly (#680).
- Fixed appVersion label in case container images contain a hash, such as
docker.stackable.tech/stackable/nifi@sha256:85fa483aa99b9997ce476b86893ad5ed81fb7fd2db602977eb8c42f76efc109. Also added a test-case to ensure we support images containing hashes. This should be a rather cosmetic fix, images with hashes should have worked before anyway (#690).
- BREAKING: The
CustomResourceExtfunctions now take the Operator version as an argument. It replacesDOCS_BASE_URL_PLACEHOLDERin doc strings with a link to URL base, soDOCS_BASE_URL_PLACEHOLDER/druid/turns intohttps://docs.stackable.tech/home/nightly/druid/in the nightly operator (#689).
- More documentation for CRD structs (#687).
- Update
kubeto0.87.1as version0.86.0was yanked (#685).
- Added
COMMON_BASH_TRAP_FUNCTIONS, which can be used to write a Vector shutdown trigger file after the main application stopped (#681).
- BREAKING: Rename
product_logging::framework::shutdown_vector_commandtocreate_vector_shutdown_file_commandand addedremove_vector_shutdown_file_command(#681). - BREAKING: Remove re-export of
product_config, updateproduct_configto0.6.0(#682).
- Fix Docker image tag parsing when user specifies custom image (#677).
- Mark the following functions as
const(#674):ClusterResourceApplyStrategy::delete_orphansLdapAuthenticationProvider::default_portLdapAuthenticationProvider::use_tlsListenerSpec::default_publish_not_ready_addressesOpaApiVersion::get_data_apiCpuQuantity::from_millisCpuQuantity::as_milli_cpusBinaryMultiple::exponential_scale_factorBinaryMultiple::get_smallestMemoryQuantity::from_gibiMemoryQuantity::from_mebiClusterCondition::is_goodClusterOperationsConditionBuilder::newcommons::pdb::default_pdb_enabled
- Add interoperability between the
timecrate and thestackable_operator::time::Durationstruct. This is opt-in and requires thetimefeature to be enabled. Additionally, addsAdd,AddAssign,Sub, andSubAssignoperations betweenDurationandstd::time::Instant. Further adds a new helper functionDuration::now_utcwhich calculates the duration from the unix epoch (1970-01-01 00:00:00) until now (#671).
- BREAKING: Rename top-level
durationmodule totime. Imports now usestackable_operator::time::Durationfor example (#671). - Convert the format of the Vector configuration from TOML to YAML (#670).
- BREAKING: Rename
PodBuilder::termination_grace_period_secondstotermination_grace_period, and change it to takeDurationstruct (#672).
- stackable-operator-derive: Add descriptions to derived Fragment structs (#675).
- impl
AtomicforDuration(#668).
- Add duration overflow check (#665).
- Add
Duration::from_millis,Duration::from_minutes_unchecked,Duration::from_hours_uncheckedandDuration::from_days_unchecked(#657).
Only rust documentation was changed.
- BREAKING: Make roleConfig customizable by making the
Rolestruct generic over theroleConfig(#661).
- Fix a typo in the documentation of the
PdbConfigstruct (#659).
- Add
PdbConfigstruct andPodDisruptionBudgetBuilder(#653).
- Add
Durationcapable of parsing human-readable duration formats (#647).
PodListenersCRD (#644).- Add support for tls pkcs12 password to secret operator volume builder (#645).
- Derive
EqandCopywhere applicable for listener CRDs (#644). - Bump
kubeto0.86.0and Kubernetes version to1.28(#648).
- Add
PodBuilder::termination_grace_period_seconds(#641). - Add support for adding
lifecycles toContainerBuilder(#641).
- Implement
DisplayforMemoryQuantity(#638). - Implement
SumforCpuQuantityandMemoryQuantity(#634).
- Fixed buggy
Div,SubAssignandAddAssignforMemoryQuantitywhen left and right side had different units (#636, #637).
- Bump all dependencies (including kube and k8s-openapi) (#632).
- Bump Rust version to 0.71.0 (#633).
- Refactor Cargo.toml's to share workspace configuration, such as version and license (#633).
- Support PR versions in automatic stackableVersion - (#619) falsely assumed the binaries in
-prversions have the version0.0.0-dev(#629).
- BREAKING: ProductImageSelection now defaults
stackableVersionto operator version (#619). - Default
pullPolicyto operatorAlways(#619). - BREAKING: Assume that the Vector executable is located in a directory which is specified in the PATH environment variable. This is the case if Vector is installed via RPM (#625).
- BREAKING: Update
product_logging::framework::create_vector_configto be compatible with Vector version 0.31.0. The product image must contain Vector 0.31.x (#625).
- Fix the log level filter for the Vector container. If the level of the ROOT logger was set to TRACE and the level of the file logger was set to DEBUG then TRACE logs were written anyway (#625).
- Add a function for calculating the size limit of log volumes (#621).
- Secrets can now be requested in a custom format (#610).
- Make pod overrides usable independently of roles (like in the case of the Spark operator) (#616)
- Strip out documentation from pod override templates (#611).
- Let
PodBuilder::build_templatereturnPodTemplateSpecinstead ofOperatorResult<PodTemplateSpec>(fixup of #598) (#605).
- Add a new
ResourceRequirementsBuilderto more easily build resource requirements in a controlled and well defined way. (#598). - Add podOverrides to common struct CommonConfiguration (#601).
- All the operators now must respect the new
podOverridesattribute! (#601). - Support ClusterIP type in services created by listener-operator (#602).
- Set default resource limits on
PodBuilder::add_init_container(#598). - Made
StaticAuthenticationProviderfields public (#597). - [INTERNALLY BREAKING]: Moved
StaticAuthenticationProvider,LdapAuthenticationProvider,TlsAuthenticationProviderto its own moduleauthentication(#597).
- Added clean up for
Jobto cluster resourcesdelete_orphaned_resources(#583).
ClusterResourcesimplementation forJob(#581).- Helper methods to generate RBAC
ServiceAccountandClusterRolenames (#581).
- BREAKING: Added ownerreferences and labels to
build_rbac_resources(#579).
- Fix the parsing of log4j and logback files in the Vector configuration, avoid rounding errors in the timestamps, and improve the handling of unparseable log events (#577).
- status::condition module to compute the cluster resource status (#571).
- Helper function to build RBAC resources (#572).
- Add
ClusterResourceApplyStrategytoClusterResource(#573). - Add
ClusterOperationcommon struct withreconciliation_pausedandstoppedflags (#573).
- Helper function to add a restart_policy to PodBuilder (#565).
- Add helper function
SecretOperatorVolumeSourceBuilder::with_kerberos_service_name(#568).
- Vector sources and transforms for OPA bundle builder and OPA json logs (#557).
- Fix legacy selector overwriting nodeAffinity and nodeSelector (#560).
- Added commons structs as well as helper functions for Affinity (#556).
- Added airlift json source and airlift json transform to vector.toml (#553).
- Processing of Python log files added to the Vector agent configuration (#539).
- Command added to shutdown Vector, e.g. after a job is finished (#539).
- New
CpuQuantitystruct to represent CPU quantities (#544). - Implemented
Add,Sub,Div,PartialOrdand more forMemoryQuantity(#544).
- Deprecated
to_java_heapandto_java_heap_value(#544). - BREAKING: For all products using logback. Added additional optional parameter to
create_logback_config()to supply custom configurations not covered via the standard log configuration (#546).
- Parsing of timestamps in log4j2 log events made fail-safe ([#542]).
- Added method to create log4j2 config properties to product logging (#540).
- Extended the
LdapAuthenticationProviderwith functionality to build add Volumes and Mounts to PodBuilder and ContainerBuilder (#535). - Extended the
PodBuilderwithadd_volume_with_empty_dirutility function (#536).
- Disable Vector agent by default (#526).
- Bump kube to 0.78.0 and k8s-openapi to 0.17.0. Bump k8s version from 1.24 to 1.26 (#533).
- Removed
affinityproperty from the RoleGroup that was added in #520 but not intended to be there (#552).
- Extended the
PodBuilderwithpod_affinity,pod_anti_affinity,node_selectorand their*_optvariants (#520).
- Modules for log aggregation added (#517).
- Added
AuthenticationClassprovider static (#514).
- Changed the separator character between operator and controller names (#507).
- Added product image selection struct (#476).
- BREAKING:
get_recommended_labelsandwith_recommended_labelsnow takes a struct of named arguments (#501). - BREAKING:
get_recommended_labels(and co) now takes the operator and controller names separately (#492). - BREAKING:
ClusterResourcesnow takes the operator and controller names separately (#492).- When upgrading, please use FQDN-style names for the operators (
{operator}.stackable.tech).
- When upgrading, please use FQDN-style names for the operators (
- Bump kube to
0.76.0(#476). - Bump opentelemetry crates (#502).
- Bump clap to 4.0 (#503).
- Builder for
EphemeralVolumeSources added which are used by the listener-operator (#496). - Exposed parser for Kubernetes
Quantityvalues (#499).
- Added new Fragment (partial configuration) machinery (#445).
- kube-rs: 0.74.0 -> 0.75.0 (#490).
- BREAKING:
Clientmethods now take the namespace as a&str(for namespaced resources) or&()(for cluster-scoped resources), rather than always taking anOption<&str>(#490).
- Extended
ClusterResourcewithSecret,ServiceAccountandRoleBinding(#485).
This is a rerelease of 0.25.1 which some last-minute incompatible API changes to the additions that would have been released in 0.25.1.
- Use Volume as the primary mechanism for directing Listener traffic, rather than labels (#474).
- listener-operator CRDs (#469).
- YAML module added with a function to serialize a data structure as an
explicit YAML document. The YAML documents generated by the functions in
crd::CustomResourceExtare now explicit documents and can be safely concatenated to produce a YAML stream (#450).
- Objects are now streamed rather than polled when waiting for them to be deleted (#452).
- serde_yaml 0.8.26 -> 0.9.9 (#450)
- Cluster resources can be added to a struct which determines the orphaned resources and deletes them (#436).
- Added
Client::get_optfor trying to get an object that may not exist (#451).
- BREAKING: The
managed_bylabel must be passed explicitly to theObjectMetaBuilder::with_recommended_labelsfunction (#436). - BREAKING: Renamed
#[merge(bounds)]to#[merge(bound)](#445). - BREAKING: Added
Fragmentvariants of most types instackable_operator::commons::resources(#445).- serde impls have been moved to
FooFragmentvariants, consumers that are not ready to use the full fragment machinery should switch to using these fragment variants.
- serde impls have been moved to
- Add
AuthenticationClass::resolvehelper function (#432).
- BREAKING:kube
0.73.1->0.74.0(#440). DeprecateResourceExt::namein favour of safename_*alternatives. kube-#945 ContainerBuilder::newvalidates container name to be RFC 1123-compliant (#447).
startup_probeadded toContainerBuilder(#430).
- BREAKING: Bump to k8s 1.24 and kube 0.73.1 (#408).
- Correctly propagate storage class in
PVCConfig::build_pvc()(#412).
scale_toandto_java_heap_valueinMemoryto scale units up or down (#407).
- Visibility of
Memoryinmemory.rsto private (#407).
impl Into<Resourcerequirements> for Resourcesset's fields toNoneinstead ofSome(<empty map>)when nothing is defined. (#398).- BREAKING: Change credentials of
S3ConnectionSpecto use the commonSecretClassVolumestruct (#405).
- Added
config::merge::chainable_merge()(#397). SecretClassVolumeandSecretOperatorVolumeSourceBuildernow support secret-aware pod scheduling (#396, secret-#125).- New
memorymodule (#400). S3AccessStyleenum added tocommons::s3::S3ConnectionSpec(#401)
- BREAKING:
SecretClassVolume::to_csi_volumerenamed toto_ephemeral_volumeand now returnsEphemeralVolumeSource(#396). - BREAKING:
SecretOperatorVolumeSourceBuildernow returnsEphemeralVolumeSource(#396). - BREAKING: Secret-Operator-related features now require Secret-Operator 0.4.0 (#396).
- BREAKING: Memory and CPU resource definitions use quantity instead of String (#402)
- BREAKING: Removed
commons::s3::S3ConnectionImplementation.commons::s3::InlinedBucketSpec::endpoint()doesn't take arguments since the protocol decision is now based on the existence of TLS configuration (#390). - BREAKING: Changes to resource requirements structs to enable deep merging (#392)
- Changed fields in
Resourcesto no longer be optional - Changed atomic fields in
MemoryLimits,JvmHeapLimits,CpuLimitsandPvcConfigto be optional
- Changed fields in
- BREAKING: Removed
commons::tls::TlsMutualVerification(#394).
- Typed
Mergetrait (#368). - New commons::s3 module with common S3 connection structs (#377).
- New
TlsAuthenticationProviderforAuthenticationClass(#387).
- Export logs to Jaeger (#360).
- Added common datastructures shared between all operators like
TlsorAuthenticationClass(#366). - Added helpers for env variables from Secrets or ConfigMaps (#370).
- BREAKING:
initialize_loggingnow takes an app name and tracing target (#360). - BREAKING: Move opa struct to commons (#369).
- Common
OpaConfigto specify a config map and package name (#357).
- Split up the builder module into submodules. This is not breaking yet due to reexports. Deprecation warning has been added for
operator-rs0.15.0(#348). - Update to
kube0.70.0(Release Notes). The signature and the Ok action in reconcile fns has been simplified slightly. Because of this the signature ofreport_controller_reconciledhad to be changed slightly ([#359]).
- product-config 0.3.0 -> 0.3.1 (#346)
- Truncate k8s event strings correctly, when required (#337).
- BREAKING: Added CLI
watch_namespaceparameter to ProductOperatorRun in preparation for operators watching a single namespace (#332, #333). - More builder functionality (#331)
- builder for
SecurityContextobjects - add
EnvVars from field refs - set
serviceServiceAccountNamein pod templates
- builder for
- Build against Kubernetes 1.23 (#330).
- Reported K8s events are now limited to 1024 bytes (#327).
- Infrastructure for logging errors as K8s events (#322).
- Unified
ClusterReftype for referring to cluster objects (#307).
- Auto-generated service link environment variables for built pods (#305).
- Fixed
Client::apply_patch_statusalways failing (#300).
- Allow adding custom CLI arguments to
runsubcommand (#291).
- BREAKING: clap 2.33.3 -> 3.0.4 (#289).
- BREAKING: kube 0.65 -> 0.66 (#293).
- BREAKING:
cli::Command::Runnow just wrapscli::ProductOperatorRunrather than defining the struct inline (#291).
- BREAKING: Introduced proper (Result) error handling for
transform_all_roles_to_config(#282). - BREAKING:
Configuration::compute_*are now invoked even whenconfigfield is not provided onRole/RoleGroup(#282).CommonConfiguration::configis no longerOptionalRole::configis no longerOptionalRoleGroup::configis no longerOptional
- Fixed
cli::Commandincluding developer-facing docs in--helpoutput (#283)
- BREAKING: kube-rs 0.63.1 -> 0.65.0 (#277)
- strum 0.22.0 -> 0.23.0 (#277)
- Undeprecated
CustomResourceExt(#279)
build_templatetoPodBuilder(#259).readiness_probeandliveness_probetoContainerBuilder(#259).role_group_selector_labelstolabels(#261).role_selector_labelstolabels(#270).Box<T: Configurable>is nowConfigurable(#262).node_selectortoPodBuilder(#267).role_utils::RoleGroupRef(#272).- Add support for managing CLI commands via
StructOpt(#273).
- BREAKING:
ObjectMetaBuilder::buildis no longer fallible (#259). - BREAKING:
PodBuilder::metadata_builderis no longer fallible (#259). role_utils::transform_all_roles_to_confignow takes anyT: Configurable, not justBox<T>(#262).- BREAKING: Type-erasing
Role<T>intoRole<Box<dyn Configurable>>must now be done usingRole::eraserather thanRole::into(#262). - BREAKING: Changed all
&Option<T>intoOption<&T>, some code will need to be rewritten to useOption::as_refrather than&foo(#263). - Promoted controller watch failures to WARN log level (from TRACE) (#269).
VolumeBuilderandVolumeMountBuilder(#253).image_pull_policytoContainerBuilder(#253).host_networktoPodBuilder(#253).
- BREAKING: In builder:
add_stackable_agent_tolerationstoadd_tolerations(#255). - Generic
VALUEparameters toimpl Into<_>arguments for consistency (#253).
krustlet.rs(#255).find_nodes_that_fit_selectorsno longer adds labeltype=krustletto selector (#255).- BREAKING:
configmapsfield from container builder (#253). - BREAKING: Automatic
VolumeandVolumeMountcreation from theconfigmapsfield (#253).
- Bugfix: when scheduling a pod,
GroupAntiAffinityStrategyshould not skip nodes that are mapped by other pods from different role+group. (#222) - Bugfix: annotate
conditionsas map-list (#226)- Requires manual action: add
#[schemars(schema_with = "stackable_operator::conditions::conditions_schema")]annotation toconditionsfield in your status struct
- Requires manual action: add
- BREAKING:
Client::apply_patchandClient::apply_patch_statusnow take acontextargument that scopes their fieldManager (#225) - Bugfix:
Client::set_conditionnow scopes its fieldManager to the condition being applied (#225) - Bugfix: removed duplicate object identity from reconciler. (#228)
- Bugfix: added proper error handling for versioning. If versions are not supported or invalid an error is thrown which should stop further reconciliation (#236).
command.rsmodule to handle common command operations (#184).- Traits for command handling (#184):
HasCurrentCommandto manipulate the current_command in the statusHasClusterExecutionStatusto access cluster_execution_status in the statusHasRoleRestartOrderto determine the restart order of different rolesHasCommandsto provide all supported commands like Restart, Start, Stop ...CanBeRollingto perform a rolling restartHasRolesto run a command only on a subset of roles
- Enum
ClusterExecutionStatusto signal that the cluster is running or stopped (#184). - Default implementations for Restart, Start and Stop commands (#184).
identity.rsa new module split out ofscheduler.rsthat bundles code for pod and node id management.identity::PodIdentityFactorytrait and one implementation calledidentity::LabeledPodIdentityFactory.controller.rs- Configurable requeue timeout
reconcile::create_config_mapswhich is obsolete and replaced byconfigmap::create_config_maps(#184)- BREAKING:
scheduler::PodToNodeMapping::from(#222). - Reexport
kube,k8s-openapi,schemars(#247)
- Getter for
scheduler::PodIdentityfields (#215).
- Extracted the versioning support for up and downgrades from operators (#211).
- Added traits to access generic operator versions (#211).
- Added init_status method that uses the status default (#211).
- Implement StickyScheduler with two pod placement strategies and history stored as K8S status field. (#210)
BREAKING: ChangedConditionstrait return value to not optional (#211).
- Initial release