All notable changes to this project will be documented in this file.
- Added cert lifetime setter to
SecretOperatorVolumeSourceBuilder
(#915)
- Replace unmaintained
derivative
crate 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
rootPath
with and without trailing slashes. Also added a bunch of tests (#910).
- BREAKING: Made
DEFAULT_OIDC_WELLKNOWN_PATH
private. UseAuthenticationProvider::well_known_config_url
instead (#910). - BREAKING: Changed visibility of
commons::rbac::service_account_name
andcommons::rbac::role_binding_name
to 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_resources
and 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_resources
to 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_type
into a newPreferredAddressType
type. Useresolve_preferred_address_type()
to access theAddressType
as before (#903).
- BREAKING: Don't parse
/etc/resolv.conf
to 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-patch
and opentelemetry crates cannot be updated because of conflicts) (#897):- Bump
kube
to0.96.0
, rstest
to0.23.0
andtower-http
to0.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
YamlSchema
trait and thestackable-shared
crate as theshared
module (#883). - BREAKING: Added
preferredAddressType
field to ListenerClass CRD (#885). - BREAKING: The cluster domain (default:
cluster.local
) can now be configured in the individual operators via the ENV variableKUBERNETES_CLUSTER_DOMAIN
or resolved automatically by parsing the/etc/resolve.conf
file. This requires usinginitialize_operator
instead ofcreate_client
in themain.rs
of the individual operators (#893).
- BREAKING: The
CustomResourceExt
trait is now re-exported from thestackable-shared
crate. The trait functions use the same parameters but return a different error type (#883). - BREAKING:
KeyValuePairs
(as well asLabels
/Annotations
via it) is now backed by aBTreeMap
rather than aBTreeSet
(#888).- The
Deref
impl now returns aBTreeMap
instead. 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
CustomResourceExt
trait doesn't provide agenerate_yaml_schema
function 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
if
statement (#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_volume
orContainerBuilder::add_volume_mount
as well as related ones fallible (#871).
- BREAKING: Remove the
unique_identifier
argument fromResolvedS3Connection::add_volumes_and_mounts
,ResolvedS3Connection::volumes_and_mounts
andResolvedS3Connection::credentials_mount_paths
as it is not needed anymore (#871).
- BREAKING: Add
HostName
type and use it within LDAP and OIDC AuthenticationClass as well as S3Connection (#863).
- BREAKING: The TLS verification struct now resides in the
commons::tls_verification
module, instead of being placed belowcommons::authentication::tls
(#863). - BREAKING: Rename the
Hostname
type toDomainName
to be consistent with RFC 1123 (#863).
- BREAKING: The fields
bucketName
,connection
andhost
onS3BucketSpec
,InlinedS3BucketSpec
andS3ConnectionSpec
are now mandatory. Previously operators errored out in case these fields where missing (#863).
- Add
Hostname
andKerberosRealmName
types extracted from secret-operator (#851). - Add support for listener volume scopes to
SecretOperatorVolumeSourceBuilder
(#858).
- BREAKING:
validation
module now uses typed errors (#851). - Set
checkIncrement
to 5 seconds in Logback config (#853). - Bump Rust dependencies and enable Kubernetes 1.31 (via
kube
0.95.0) (#867).
- Fix the CRD description of
ClientAuthenticationDetails
to not contain internal Rust doc, but a public CRD description (#846). StackableAffinity
fields are no longer erroneously marked as required (#855).- BREAKING:
ClusterResources
will now only consider deleting objects that are marked as directly owned (via.metadata.ownerReferences
) (#862).
- Add
iter::reverse_if
helper (#838). - Add two new constants
CONFIG_OVERRIDE_FILE_HEADER_KEY
andCONFIG_OVERRIDE_FILE_FOOTER_KEY
(#843).
- BREAKING: Replace
lazy_static
withstd::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
StackableAffinity
contents. This was caused by the fields being optional and defaulting tonull
, while the custom schema marked the field as required (#836).
- BREAKING: Replace
lazy_static
withstd::cell::LazyCell
(#827, #835, #840). - BREAKING: Convert
podOverrides
andaffinity
fields 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.4MB
to288K
(a 88% reduction). One downside is that user input is not checked to be a validPodTemplateSpec
,PodAffinity
,PodAntiAffinity
andNodeAffinity
any 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
kube
to 0.92.0. This required changes in a unit test, because thekube::runtime::watcher::Event
enum 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::Display
output format forLogLevel
to uppercase (#808).
- Derive
strum::Display
forLogLevel
(#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_name
andListenerOperatorVolumeSourceBuilder::new
now require you to pass the labels for the created volumes (#799).
- Support specifying externalTrafficPolicy in Services created by listener-operator (#773, #789, #791).
- Add
InvalidProductSpecificConfiguration
variant instackable_operator::product_config_util::Error
enum (#782).
- Bump Rust dependencies and GitHub Actions (#782).
- Bump GitHub workflow actions (#772).
- Revert
zeroize
version 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 haveVolumeResourceRequirements
instead ofResourceRequirements
, andPodAffinityTerm
has two new fieldsmatch_label_keys
andmismatch_label_keys
(#769).
- BREAKING: Remove
thiserror
dependency, and deprecated builder exports (#761)
- Fix wrong schema (and thus CRD) for
config.affinity.nodeSelector
(#752).
- Add
stackable_webhook
crate which provides utilities to create webhooks with TLS termination (#730). - Add
ConversionReview
re-export instackable_webhook
crate (#749).
- Remove
resources
key fromDynamicValues
struct (#734). - Bump
opentelemetry
,opentelemetry_sdk
,opentelemetry-jaeger
, andtracing-opentelemetry
Rust dependencies (#753). - Bump GitHub workflow actions (#754).
- Fixed incorrect time calculation (#735).
- Derive
Hash
andOrd
instances forAuthenticationClassProvider
, so that duplicates can be detected (#731).
- Add Serde
Deserialize
andSerialize
support forCpuQuantity
andMemoryQuantity
(#724). - Add
DynamicValues
struct to work with operatorvalues.yaml
files during runtime (#723).
- Change Deref target of
KeyPrefix
andKeyName
fromString
tostr
(#725). - Add Stackable vendor label
stackable.tech/vendor: Stackable
to recommended labels (#728).
- Added
Option::as_ref_or_else
toutils
(#717). - Add
iter()
methods toKeyValuePairs<T>
, and delegate iter() forLabels
, andAnnotations
(#720). - Implement
IntoIterator
forKeyValuePairs<T>
,Labels
andAnnotations
(#720). - Added
ListenerOperatorVolumeSourceBuilder::build_pvc
(#719). - Added
Logging::for_container
(#721).
- Split
utils
into submodules (#717). - Bump rust to 1.75.0 (#720).
- Renamed
ListenerOperatorVolumeSourceBuilder::build
to::build_ephemeral
(#719).
- Add
TryFrom<[(K, V); N]>
implementation forAnnotations
andLabels
(#711). - Add
parse_insert
associated function forAnnotations
andLabels
(#711). - Add generic types for
TryFrom<BTreeMap<K, V>>
impl (#714). - Add
TryFromIterator
trait, which tries to constructSelf
from an iterator. It is a falliable version ofFromIterator
(#715). - Add
TryFromIterator
impl forLabels
andAnnotations
(#715).
- Adjust
try_insert
forAnnotations
andLabels
slightly (#711).
- Let
ldap::AuthenticationProvider::add_volumes_and_mounts
also 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::kvp
module and types to allow validated construction of key/value pairs, like labels and annotations. Most users want to use the exported type aliasesLabel
andAnnotation
(#684).
- Move
stackable_operator::label_selector::convert_label_selector_to_query_string
intokvp
module. The conversion functionality now is encapsulated in a new traitLabelSelectorExt
. An instance of aLabelSelector
can 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 newAuthenticationClass
for OIDC providers like Keycloak, Okta or Auth0 (#680). - Add a common
ClientAuthenticationDetails
struct, 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::LdapAuthenticationProvider
to...::authentication::ldap::AuthenticationProvider
for example (#680). - BREAKING: Move TLS related structs into the
tls
module. 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
CustomResourceExt
functions now take the Operator version as an argument. It replacesDOCS_BASE_URL_PLACEHOLDER
in 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
kube
to0.87.1
as version0.86.0
was 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_command
tocreate_vector_shutdown_file_command
and addedremove_vector_shutdown_file_command
(#681). - BREAKING: Remove re-export of
product_config
, updateproduct_config
to0.6.0
(#682).
- Fix Docker image tag parsing when user specifies custom image (#677).
- Mark the following functions as
const
(#674):ClusterResourceApplyStrategy::delete_orphans
LdapAuthenticationProvider::default_port
LdapAuthenticationProvider::use_tls
ListenerSpec::default_publish_not_ready_addresses
OpaApiVersion::get_data_api
CpuQuantity::from_millis
CpuQuantity::as_milli_cpus
BinaryMultiple::exponential_scale_factor
BinaryMultiple::get_smallest
MemoryQuantity::from_gibi
MemoryQuantity::from_mebi
ClusterCondition::is_good
ClusterOperationsConditionBuilder::new
commons::pdb::default_pdb_enabled
- Add interoperability between the
time
crate and thestackable_operator::time::Duration
struct. This is opt-in and requires thetime
feature to be enabled. Additionally, addsAdd
,AddAssign
,Sub
, andSubAssign
operations betweenDuration
andstd::time::Instant
. Further adds a new helper functionDuration::now_utc
which calculates the duration from the unix epoch (1970-01-01 00:00:00) until now (#671).
- BREAKING: Rename top-level
duration
module totime
. Imports now usestackable_operator::time::Duration
for example (#671). - Convert the format of the Vector configuration from TOML to YAML (#670).
- BREAKING: Rename
PodBuilder::termination_grace_period_seconds
totermination_grace_period
, and change it to takeDuration
struct (#672).
- stackable-operator-derive: Add descriptions to derived Fragment structs (#675).
- impl
Atomic
forDuration
(#668).
- Add duration overflow check (#665).
- Add
Duration::from_millis
,Duration::from_minutes_unchecked
,Duration::from_hours_unchecked
andDuration::from_days_unchecked
(#657).
Only rust documentation was changed.
- BREAKING: Make roleConfig customizable by making the
Role
struct generic over theroleConfig
(#661).
- Fix a typo in the documentation of the
PdbConfig
struct (#659).
- Add
PdbConfig
struct andPodDisruptionBudgetBuilder
(#653).
- Add
Duration
capable of parsing human-readable duration formats (#647).
PodListeners
CRD (#644).- Add support for tls pkcs12 password to secret operator volume builder (#645).
- Derive
Eq
andCopy
where applicable for listener CRDs (#644). - Bump
kube
to0.86.0
and Kubernetes version to1.28
(#648).
- Add
PodBuilder::termination_grace_period_seconds
(#641). - Add support for adding
lifecycle
s toContainerBuilder
(#641).
- Implement
Display
forMemoryQuantity
(#638). - Implement
Sum
forCpuQuantity
andMemoryQuantity
(#634).
- Fixed buggy
Div
,SubAssign
andAddAssign
forMemoryQuantity
when 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
-pr
versions have the version0.0.0-dev
(#629).
- BREAKING: ProductImageSelection now defaults
stackableVersion
to operator version (#619). - Default
pullPolicy
to 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_config
to 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_template
returnPodTemplateSpec
instead ofOperatorResult<PodTemplateSpec>
(fixup of #598) (#605).
- Add a new
ResourceRequirementsBuilder
to 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
podOverrides
attribute! (#601). - Support ClusterIP type in services created by listener-operator (#602).
- Set default resource limits on
PodBuilder::add_init_container
(#598). - Made
StaticAuthenticationProvider
fields public (#597). - [INTERNALLY BREAKING]: Moved
StaticAuthenticationProvider
,LdapAuthenticationProvider
,TlsAuthenticationProvider
to its own moduleauthentication
(#597).
- Added clean up for
Job
to cluster resourcesdelete_orphaned_resources
(#583).
ClusterResources
implementation forJob
(#581).- Helper methods to generate RBAC
ServiceAccount
andClusterRole
names (#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
ClusterResourceApplyStrategy
toClusterResource
(#573). - Add
ClusterOperation
common struct withreconcilation_paused
andstopped
flags (#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
CpuQuantity
struct to represent CPU quantities (#544). - Implemented
Add
,Sub
,Div
,PartialOrd
and more forMemoryQuantity
(#544).
- Deprecated
to_java_heap
andto_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
LdapAuthenticationProvider
with functionality to build add Volumes and Mounts to PodBuilder and ContainerBuilder (#535). - Extended the
PodBuilder
withadd_volume_with_empty_dir
utility 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
affinity
property from the RoleGroup that was added in #520 but not intended to be there (#552).
- Extended the
PodBuilder
withpod_affinity
,pod_anti_affinity
,node_selector
and their*_opt
variants (#520).
- Modules for log aggregation added (#517).
- Added
AuthenticationClass
provider static (#514).
- Changed the separator character between operator and controller names (#507).
- Added product image selection struct (#476).
- BREAKING:
get_recommended_labels
andwith_recommended_labels
now takes a struct of named arguments (#501). - BREAKING:
get_recommended_labels
(and co) now takes the operator and controller names separately (#492). - BREAKING:
ClusterResources
now 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
EphemeralVolumeSource
s added which are used by the listener-operator (#496). - Exposed parser for Kubernetes
Quantity
values (#499).
- Added new Fragment (partial configuration) machinery (#445).
- kube-rs: 0.74.0 -> 0.75.0 (#490).
- BREAKING:
Client
methods now take the namespace as a&str
(for namespaced resources) or&()
(for cluster-scoped resources), rather than always taking anOption<&str>
(#490).
- Extended
ClusterResource
withSecret
,ServiceAccount
andRoleBinding
(#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::CustomResourceExt
are 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_opt
for trying to get an object that may not exist (#451).
- BREAKING: The
managed_by
label must be passed explicitly to theObjectMetaBuilder::with_recommended_labels
function (#436). - BREAKING: Renamed
#[merge(bounds)]
to#[merge(bound)]
(#445). - BREAKING: Added
Fragment
variants of most types instackable_operator::commons::resources
(#445).- serde impls have been moved to
FooFragment
variants, 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::resolve
helper function (#432).
- BREAKING:kube
0.73.1
->0.74.0
(#440). DeprecateResourceExt::name
in favour of safename_*
alternatives. kube-#945 ContainerBuilder::new
validates container name to be RFC 1123-compliant (#447).
startup_probe
added toContainerBuilder
(#430).
- BREAKING: Bump to k8s 1.24 and kube 0.73.1 (#408).
- Correctly propagate storage class in
PVCConfig::build_pvc()
(#412).
scale_to
andto_java_heap_value
inMemory
to scale units up or down (#407).
- Visibility of
Memory
inmemory.rs
to private (#407).
impl Into<Resourcerequirements> for Resources
set's fields toNone
instead ofSome(<empty map>)
when nothing is defined. (#398).- BREAKING: Change credentials of
S3ConnectionSpec
to use the commonSecretClassVolume
struct (#405).
- Added
config::merge::chainable_merge()
(#397). SecretClassVolume
andSecretOperatorVolumeSourceBuilder
now support secret-aware pod scheduling (#396, secret-#125).- New
memory
module (#400). S3AccessStyle
enum added tocommons::s3::S3ConnectionSpec
(#401)
- BREAKING:
SecretClassVolume::to_csi_volume
renamed toto_ephemeral_volume
and now returnsEphemeralVolumeSource
(#396). - BREAKING:
SecretOperatorVolumeSourceBuilder
now 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
Resources
to no longer be optional - Changed atomic fields in
MemoryLimits
,JvmHeapLimits
,CpuLimits
andPvcConfig
to be optional
- Changed fields in
- BREAKING: Removed
commons::tls::TlsMutualVerification
(#394).
- Typed
Merge
trait (#368). - New commons::s3 module with common S3 connection structs (#377).
- New
TlsAuthenticationProvider
forAuthenticationClass
(#387).
- Export logs to Jaeger (#360).
- Added common datastructures shared between all operators like
Tls
oderAuthenticationClass
(#366). - Added helpers for env variables from Secrets or ConfigMaps (#370).
- BREAKING:
initialize_logging
now takes an app name and tracing target (#360). - BREAKING: Move opa struct to commons (#369).
- Common
OpaConfig
to 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-rs
0.15.0
(#348). - Update to
kube
0.70.0
(Release Notes). The signature and the Ok action in reconcile fns has been simplified slightly. Because of this the signature ofreport_controller_reconciled
had 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_namespace
parameter to ProductOperatorRun in preparation for operators watching a single namespace (#332, #333). - More builder functionality (#331)
- builder for
SecurityContext
objects - add
EnvVar
s from field refs - set
serviceServiceAccountName
in 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
ClusterRef
type for referring to cluster objects (#307).
- Auto-generated service link environment variables for built pods (#305).
- Fixed
Client::apply_patch_status
always failing (#300).
- Allow adding custom CLI arguments to
run
subcommand (#291).
- BREAKING: clap 2.33.3 -> 3.0.4 (#289).
- BREAKING: kube 0.65 -> 0.66 (#293).
- BREAKING:
cli::Command::Run
now just wrapscli::ProductOperatorRun
rather 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 whenconfig
field is not provided onRole
/RoleGroup
(#282).CommonConfiguration::config
is no longerOption
alRole::config
is no longerOption
alRoleGroup::config
is no longerOption
al
- Fixed
cli::Command
including developer-facing docs in--help
output (#283)
- BREAKING: kube-rs 0.63.1 -> 0.65.0 (#277)
- strum 0.22.0 -> 0.23.0 (#277)
- Undeprecated
CustomResourceExt
(#279)
build_template
toPodBuilder
(#259).readiness_probe
andliveness_probe
toContainerBuilder
(#259).role_group_selector_labels
tolabels
(#261).role_selector_labels
tolabels
(#270).Box<T: Configurable>
is nowConfigurable
(#262).node_selector
toPodBuilder
(#267).role_utils::RoleGroupRef
(#272).- Add support for managing CLI commands via
StructOpt
(#273).
- BREAKING:
ObjectMetaBuilder::build
is no longer fallible (#259). - BREAKING:
PodBuilder::metadata_builder
is no longer fallible (#259). role_utils::transform_all_roles_to_config
now takes anyT: Configurable
, not justBox<T>
(#262).- BREAKING: Type-erasing
Role<T>
intoRole<Box<dyn Configurable>>
must now be done usingRole::erase
rather thanRole::into
(#262). - BREAKING: Changed all
&Option<T>
intoOption<&T>
, some code will need to be rewritten to useOption::as_ref
rather than&foo
(#263). - Promoted controller watch failures to WARN log level (from TRACE) (#269).
VolumeBuilder
andVolumeMountBuilder
(#253).image_pull_policy
toContainerBuilder
(#253).host_network
toPodBuilder
(#253).
- BREAKING: In builder:
add_stackable_agent_tolerations
toadd_tolerations
(#255). - Generic
VALUE
paramters toimpl Into<_>
arguments for consistency (#253).
krustlet.rs
(#255).find_nodes_that_fit_selectors
no longer adds labeltype=krustlet
to selector (#255).- BREAKING:
configmaps
field from container builder (#253). - BREAKING: Automatic
Volume
andVolumeMount
creation from theconfigmaps
field (#253).
- Bugfix: when scheduling a pod,
GroupAntiAffinityStrategy
should not skip nodes that are mapped by other pods from different role+group. (#222) - Bugfix: annotate
conditions
as map-list (#226)- Requires manual action: add
#[schemars(schema_with = "stackable_operator::conditions::conditions_schema")]
annotation toconditions
field in your status struct
- Requires manual action: add
- BREAKING:
Client::apply_patch
andClient::apply_patch_status
now take acontext
argument that scopes their fieldManager (#225) - Bugfix:
Client::set_condition
now 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.rs
module to handle common command operations (#184).- Traits for command handling (#184):
HasCurrentCommand
to manipulate the current_command in the statusHasClusterExecutionStatus
to access cluster_execution_status in the statusHasRoleRestartOrder
to determine the restart order of different rolesHasCommands
to provide all supported commands like Restart, Start, Stop ...CanBeRolling
to perform a rolling restartHasRoles
to run a command only on a subset of roles
- Enum
ClusterExecutionStatus
to signal that the cluster is running or stopped (#184). - Default implementations for Restart, Start and Stop commands (#184).
identity.rs
a new module split out ofscheduler.rs
that bundles code for pod and node id management.identity::PodIdentityFactory
trait and one implementation calledidentity::LabeledPodIdentityFactory
.controller.rs
- Configurable requeue timeout
reconcile::create_config_maps
which is obsolete and replaced byconfigmap::create_config_maps
(#184)- BREAKING:
scheduler::PodToNodeMapping::from
(#222). - Reexport
kube
,k8s-openapi
,schemars
(#247)
- Getter for
scheduler::PodIdentity
fields (#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
: ChangedConditions
trait return value to not optional (#211).
- Initial release