All notable changes to this project will be documented in this file.
- BREAKING:
KeyValuePairs<V>(andAnnotations/Labels) is now an alias forBTreeMap<Key, V>([#889]).- Generally, this means that the API now behaves like a map rather than a set. For example, duplicate keys are no longer allowed (as was already documented before).
- Some
KeyValuePairsmethods have been renamed for certain use cases:KeyValuePairs::insert(&mut self, kvp): use::extend(&mut self, [kvp])instead.KeyValuePairs::try_from: you may need to use::try_from_iterinstead.KeyValuePairs::contains_key: unvalidated keys will need to use::contains_str_keyinstead.Into<BTreeMap<String, String>>: use::to_unvalidatedinstead.
- Well-known annotations have been moved from
kvp::Annotationtokvp::annotation::well_known. - Well-known labels have been moved from
kvp::Labeltokvp::label::well_known. - Well-known label sets have been moved from
kvp::Labelstokvp::label::well_known::sets.
KeyValuePairswill now consistently use the last-written value for a given key ([#889]).
-
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 withreconcilation_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 existance 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
TlsoderAuthenticationClass(#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
VALUEparamters 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