Project: kube-rs (Orchestration & Management / Scheduling & Orchestration)
File: CHANGELOG.md

<!-- NOTICE this is mostly generated from releases - ONLY ADD NEWS here now --> <!-- Anything added in the UNRELEASE'D section will be prepended to the autogenerated release --> <!-- You do NOT have to create links to issues yourself: hashNUMBER will be linked by automation --> <!-- DO NOT touch the headers, UNRELEAS'D line, or compare url manually - they are sed'd --> <!-- next-header --> UNRELEASED =================== see https://github.com/kube-rs/kube/compare/0.91.0...main / 2024-05-06 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.91.0 --> Please to avoid conflicts. A more complete implementation that allows sharing `watcher` streams between multiple `Controller`s (for https://github.com/kube-rs/kube/issues/1080) has been added under the `unstable-runtime` in #1449 and #1483 by @mateiidavid. This represents the first usable implementation of shared streams (and replaces the older prototype part in #1470). While some changes are expected, you can check the for a high-level overview. Add shared stream interfaces by @mateiidavid in https://github.com/kube-rs/kube/pull/1449 Allow to create non-controller owner reference for resource by @Danil-Grigorev in https://github.com/kube-rs/kube/pull/1475 feat(runtime): support for owned shared streams by @mateiidavid in https://github.com/kube-rs/kube/pull/1483 Upgrade `k8s-openapi` to 0.22 and bump MK8SV to 1.25 by @clux in https://github.com/kube-rs/kube/pull/1485 Remove abandoned `StreamSubscribe` implementation by @clux in https://github.com/kube-rs/kube/pull/1470 Include inner error message in Display for SerdeError by @XAMPPRocky in https://github.com/kube-rs/kube/pull/1481 Remove invalid `uniqueItems` property from CRDs when Sets are used by @sbernauer in https://github.com/kube-rs/kube/pull/1484 / 2024-04-03 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.90.0 --> Unit testing helpers + , Accuracy; `sizehint` and `isend_stream` implemented in + internal cleanups and `rustls` to 0.23 in `once_cell` removed in (no longer needed) `futures` feature prune in `chrono` features prune in , and bump its min version pin in Add proxy `Body::collect_bytes` for easier unit tests by @clux in https://github.com/kube-rs/kube/pull/1445 update to `rustls` 0.23 by @tottoto in https://github.com/kube-rs/kube/pull/1457 disable unused `futures` feature by @tottoto in https://github.com/kube-rs/kube/pull/1442 Expose `Body::empty` for easier tests by @clux in https://github.com/kube-rs/kube/pull/1444 replace `once_cell` Lazy with ordinary static by @tottoto in https://github.com/kube-rs/kube/pull/1447 replace `chrono` feature `clock` with `now` by @tottoto in https://github.com/kube-rs/kube/pull/1448 implement `http_body` trait method by @tottoto in https://github.com/kube-rs/kube/pull/1452 Fix examples for custom clients not authenticating by @clux in https://github.com/kube-rs/kube/pull/1450 Set a compatible minimum `chrono` version by @clux in https://github.com/kube-rs/kube/pull/1458 Full Changelog: https://github.com/kube-rs/kube/compare/0.89.0...0.90.0 / 2024-03-26 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.89.0 --> This release completes the hyper & http ecosystem upgrade via . In particular, this change includes upgrades to `http`, `http-body`, `tower-http`, `hyper`, `hyper-openssl`, `hyper-rustls`, `hyper-socks2`, `hyper-timeout`, `tame-oauth`, `tokio-tungstenite`, `tower-http`, `rustls`, `rustls-pemfile`, as well as adopting the new `hyperutil` and `httpbody_util` to make the change. While this change constitutes significant internal churn (and a new ), our external api remains largely unchanged. Some minor changes are necessary for custom clients, and for integration testing using `tower_mock`. See the or the for details. client_ext for `Client::get` and `Client::list` by @clux in https://github.com/kube-rs/kube/pull/1375 direct node access logs/portforward/exec/attach via kubelet debug interface by @XciD in https://github.com/kube-rs/kube/pull/1428 Bump MSRV to `1.75.0` by @clux in https://github.com/kube-rs/kube/pull/1408 Ease the bound for `reflector` to only request identifying metadata by @SOF3 in https://github.com/kube-rs/kube/pull/1393 Update base64 requirement from 0.21.4 to 0.22.0 by @dependabot in https://github.com/kube-rs/kube/pull/1422 upgrade `jsonpath-rust` to 0.5.0 by @clux in https://github.com/kube-rs/kube/pull/1429 update to hyper 1 by @tottoto in https://github.com/kube-rs/kube/pull/1438 Serialize TerminalSize fields as PascalCase by @nightkr in https://github.com/kube-rs/kube/pull/1407 `Kubeconfig` allow `certificateauthoritydata` not present in `ExecAuthCluster` by @ljun20160606 in https://github.com/kube-rs/kube/pull/1432 fix: check err on `Client::request_stream` by @XciD in https://github.com/kube-rs/kube/pull/1433 / 2024-01-26 =================== <!-- Release notes generated using configuration in .github/release.yml at

--> This is a bug fix release for a deserialization issue introduced in 0.88.0. Minor fixes to `ObjectList` by @flavio in https://github.com/kube-rs/kube/pull/1398 / 2024-01-21 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.88.0 --> Please to avoid conflicts. Add type meta data for list types by @Danil-Grigorev in https://github.com/kube-rs/kube/pull/1380 Bump MSRV to 1.70 by @clux in https://github.com/kube-rs/kube/pull/1384 Upgrade `k8s-openapi` for Kubernetes `v1_29` support by @clux in https://github.com/kube-rs/kube/pull/1394 / 2023-12-22 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.87.2 --> Add support for `LogParams::since_time` by @clux in https://github.com/kube-rs/kube/pull/1342 Provide cluster info to exec plugins by @aviramha in https://github.com/kube-rs/kube/pull/1331 Allow setting a description on a derived CRD by @sbernauer in https://github.com/kube-rs/kube/pull/1359 Bump MSRV from 1.64 to 1.65 by @clux in https://github.com/kube-rs/kube/pull/1353 Switch from `jsonpath_lib` to `jsonpath-rust` by @ilya-bobyr in https://github.com/kube-rs/kube/pull/1345 / 2023-11-01 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.87.1 --> fixed a `Controller` issue with reconciliation requests disappearing when using `concurrency` improved `Client` with better exec auth behaviour , timeout control , and socks5 proxy handling small changes to an unstable streams feature , and a a derive property that is now illegal with `syn` 2 Big thanks to everyone involved Feature-flagged support for `socks5` proxy in `Client` by @Razz4780 in https://github.com/kube-rs/kube/pull/1311 Add example for raw API Server requests by @mateiidavid in https://github.com/kube-rs/kube/pull/1330 Document `Controller::reconcile_on` and remove `Err` input requirement by @clux in https://github.com/kube-rs/kube/pull/1304 Bump `base64` to `0.21` by @clux in https://github.com/kube-rs/kube/pull/1308 Upgrade `darling` and `syn` and rename `#[kube(struct)]` by @clux in https://github.com/kube-rs/kube/pull/1307 Fixed `KUBERNETESEXECINFO` environment variable passed to auth plugins by @Razz4780 in https://github.com/kube-rs/kube/pull/1320 Fix `Controller`: pending messages are stuck in the `scheduled` map by @co42 in https://github.com/kube-rs/kube/pull/1324 Set a default write timeout by @alex-hunt-materialize in https://github.com/kube-rs/kube/pull/1314 Full Changelog: https://github.com/kube-rs/kube/compare/0.86.0...0.87.1 / 2023-09-08 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.86.0 --> Please note . As usual, to avoid issues. With last year's upstream changes from rustls (closing all our existing rustls issues - see https://github.com/kube-rs/kube/issues/1192), this is now the better choice for security, features, and ease of building. The previous default openssl stack can still be used with `default-features = false` plus the `openssl-tls` feature. A controller has been added to allow tweaking two behaviour parameters (debouncing in and concurrency limits in ) of the `Controller`. Huge thanks to @aryan9600 for his work. The `sendInitialEvents` is now , and is quickly testable in the when using the . This will help the memory profile of controllers when the feature becomes generally available. Amazing work by first time contributor @casualjim. add `controller::Config` and debounce period to scheduler by @aryan9600 in https://github.com/kube-rs/kube/pull/1265 adds watch-list implementation without breaking changes by @casualjim in https://github.com/kube-rs/kube/pull/1255 allow configuring controller's concurrency by @aryan9600 in https://github.com/kube-rs/kube/pull/1277 Change default TLS stack to `rustls-tls` by @clux in https://github.com/kube-rs/kube/pull/1261 Bump k8s-openapi to 0.20.0 by @clux in https://github.com/kube-rs/kube/pull/1291 `core`: omit invalid resource version parameters when doing paged requests by @goenning in https://github.com/kube-rs/kube/pull/1281 / 2023-08-06 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.85.0 --> Add `WatchStreamExt::reflect` to allow chaining on a reflector by @clux in https://github.com/kube-rs/kube/pull/1252 Implement ephemeral containers subresource by @jmintb in https://github.com/kube-rs/kube/pull/1153 Swap `dirs-next` dependency to cargo-team maintained `home` crate by @utkarshgupta137 in https://github.com/kube-rs/kube/pull/1207 Upgrade `k8s-openapi` to `0.19.0` for `v1_27` support by @clux in https://github.com/kube-rs/kube/pull/1271 `watcher`: return `NoResourceVersion` error if resource version is empty by @aryan9600 in https://github.com/kube-rs/kube/pull/1259 Update the `scheduler` message when preponing by @nightkr in https://github.com/kube-rs/kube/pull/1260 / 2023-07-14 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.84.0 --> On the `runtime` side, the `Controller` now delays reconciles until the main `Store` is ready (via a from

The stream selection for owned resources is more efficient (#1240), and the underlying `watcher` streams now all paginate (#1249). There are also many new helpers ( + + ) as a continued work towards the more customisable streams-api (#1080). On the client-side; streaming logs are now easier to deal with as an `AsyncBufRead` . Optional OIDC refreshable token support was introduced in under `kube/oidc` for out-of-cluster `Client` configuration. Previously, refresh support was limited to non-OIDC tokens from the `GcpOuth` provider (`kube/oauth`) or through arbitrary `exec` calls / `TokenFile` loading. Add `Predicate` trait to allow combination + fallbacks by @clux in https://github.com/kube-rs/kube/pull/1228 Added refreshing OIDC ID token as an optional feature by @Razz4780 in https://github.com/kube-rs/kube/pull/1229 Add `WatchStreamExt::default_backoff` shorthand by @clux in https://github.com/kube-rs/kube/pull/1232 Derive `PartialEq` on `core` params structs by @danrspencer in https://github.com/kube-rs/kube/pull/1237 Track store readiness by @nightkr in https://github.com/kube-rs/kube/pull/1243 Add `WatchStreamExt::modify()` to modify events by @aryan9600 in https://github.com/kube-rs/kube/pull/1246 Add default pagination to `watcher` by @clux in https://github.com/kube-rs/kube/pull/1249 Bump MSRV from 1.63 to 1.64 by @clux in https://github.com/kube-rs/kube/pull/1233 Change `Api::log_stream` to return `AsyncBufRead` by @aryan9600 in https://github.com/kube-rs/kube/pull/1235 Make `Controller::owns` use `metadata_watcher` internally by @clux in https://github.com/kube-rs/kube/pull/1240 / 2023-06-05 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.83.0 --> Add `Controller::reconcile_on` by @co42 in https://github.com/kube-rs/kube/pull/1163 Add `predicates::resource_version` by @clux in https://github.com/kube-rs/kube/pull/1221 add `Duration` to `kube-core` by @hawkw in https://github.com/kube-rs/kube/pull/1224 Introduce `GetParams` support by @mateiidavid in https://github.com/kube-rs/kube/pull/1214 Swap `validator` for `garde` by @mateiidavid in https://github.com/kube-rs/kube/pull/1212 fix: `#[kube(crates(serde = "some_crate::serde"))]` was not working by @chubei in https://github.com/kube-rs/kube/pull/1215 / 2023-04-19 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.82.2 --> Two fixes to allow `watcher::Config` to function as intended. `runtime::watcher`: only set rv if semantic is any by @goenning in https://github.com/kube-rs/kube/pull/1204 `watcher::Config`: Derive `Clone` + `Debug` + `PartialEq` by @clux in https://github.com/kube-rs/kube/pull/1206 Full Changelog: https://github.com/kube-rs/kube/compare/0.82.1...0.82.2 / 2023-04-14 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.82.1 --> is re-instated on `Option` types from generated schemas, due to unintended errors removing it caused on `Api::patch` calls on `None` members that were not setting . This only affected 0.81 and 0.82 from last week, and does not require user action regardless of where you are upgrading from. This release also fixes a triggering deserialization error from doing `Api::list_metadata` on an empty set. Fix `WatchParams` bookmarks for `watch_metadata` by @clux in https://github.com/kube-rs/kube/pull/1193 Fix `ObjectList` not deserializing `items: null` by @suryapandian in https://github.com/kube-rs/kube/pull/1199 Revert "kube-derive: Disable `option_nullable` for CRD generation" by @Dav1dde in https://github.com/kube-rs/kube/pull/1201 / 2023-04-08 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.82.0 --> This release brings in the new . Be sure to upgrade `k8s-openapi` and `kube` simultaneously to avoid multiple version errors: ```sh cargo upgrade -p k8s-openapi -p kube -i ``` Bump `serde_yaml` to 0.9 by @clux in https://github.com/kube-rs/kube/pull/1188 Bump `k8s-openapi` to 0.18.0 by @clux in https://github.com/kube-rs/kube/pull/1190 Full Changelog: https://github.com/kube-rs/kube/compare/0.81.0...0.82.0 / 2023-04-07 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.81.0 --> One big change is the splitting of `ListParams` into `ListParams` and `WatchParams` in and . If you were using `api.list` directly, this should not affect you, but `api.watch` calls will need a replace of `ListParams` to `WatchParams`. Apart from the resulting field splitting, the two structs still have a mostly compatible

If you were passing `ListParams` to `watcher`, you can change this for a new `watcher::Config` with a mostly compatible interface: ```diff let stream = watcher(api, ListParams::default()); let stream = watcher(api, watcher::Config::default()); ``` The reason for this change has been to add support for specific and has new builders on both `ListParams` and `watcher::Config` to control the strategy. Using the new `VersionMatch::NotOlderThan` can reduce strain on the apiserver for individual `api.list` calls. Watchers will benefit the most from this, and should consider using the semantic `Any` strategy (= `NotOlderThan` with version "0") on all relists by setting `watcher::Config::any_semantic()`. This release closes as a consequence of the long standing IP address incompatibility (#153) having been resolved upstream. All `rustls` specific overrides (such as using the deprecated `incluster_dns` strategy for configuration ) have been removed as a result. Multiple new `runtime` features have been added to be able to more precisely control the input streams used by `Controller` a starting step towards stream sharing (#1080) and as a way to reduce excess input events. Because these interfaces are likely to remain in flux for some time, these are only available under . Add `predicates` to allow filtering `watcher` streams by @clux in https://github.com/kube-rs/kube/pull/911 Add `Controller::owns_stream` by @Dav1dde in https://github.com/kube-rs/kube/pull/1173 Add `Controller::forstream` + `Controller::watchesstream` by @clux in https://github.com/kube-rs/kube/pull/1187 Split `ListParams` and `WatchParams` by @nabokihms in https://github.com/kube-rs/kube/pull/1162 Make `VersionMatch` follow upstream + configure list semantics in `watcher::Config` by @clux in https://github.com/kube-rs/kube/pull/1171 kube-derive: Disable `option_nullable` for CRD generation by @Dav1dde in https://github.com/kube-rs/kube/pull/1079 Run `rustls` CI against IP cluster address by @clux in https://github.com/kube-rs/kube/pull/1183 Fix: tower buffer's worker closed unexpectedly by @divinerapier in https://github.com/kube-rs/kube/pull/1185 Avoid special `Config::incluster` behavior for `rustls` by @clux in https://github.com/kube-rs/kube/pull/1184 / 2023-03-02 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.80.0 --> The `PartialObjectMeta` struct has been changed to allow static dispatch through a new generic parameter. It comes with a new `PartialObjectMetaExt` trait to help construct it. Early release for the above change to the new metadata api, plus a trigger for our currently broken docs.rs. Genericize `PartialObjectMeta` over the underlying `Resource` by @clux in https://github.com/kube-rs/kube/pull/1152 Bypass nightly ICE in docs build by @clux in https://github.com/kube-rs/kube/pull/1155 Full Changelog: https://github.com/kube-rs/kube/compare/0.79.0...0.80.0 / 2023-02-23 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.79.0 --> A big feature this time around is the added support for the metadata api via . This is a variant api that only returns the `ObjectMeta` and `TypeMeta` to reduce network load, and has a low-level watch analogue available at `Api::watchmetadata`. Most users will generally want an infinite watch stream rather than the low-level method, so `kube::runtime::metadatawatcher` has been added as a direct analogue of `watcher` via . The shows how to switch between the two to get up and running. The `watcher` also now when HTTP `403`s are encountered from Kubernetes, as this usually indicates a non-transient misconfiguration that must be fixed on the administrator side with RBAC. Finally, there is work in progress on shared streams via `WatchStreamExt` from under an unstable feature. Client: expose `default_namespace()` by @jpmcb in https://github.com/kube-rs/kube/pull/1123 Add support for metadata API by @mateiidavid in https://github.com/kube-rs/kube/pull/1137 Runtime: Add `WatchStreamExt::subscribe` by @danrspencer in https://github.com/kube-rs/kube/pull/1131 Introduce support for persistent metadata watches by @mateiidavid in https://github.com/kube-rs/kube/pull/1145 Bump Rust MSRV to 1.63.0 by @mateiidavid in https://github.com/kube-rs/kube/pull/1146 `Config`: make cluster/users/clusters optional by @goenning in https://github.com/kube-rs/kube/pull/1120 Add better logging for watcher errors by @clux in https://github.com/kube-rs/kube/pull/1134 kubeconfig: deserialize null vectors as default by @goenning in https://github.com/kube-rs/kube/pull/1142 / 2023-01-06 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.78.0 --> This release brings in the new for `1.26` structs, and sets our to `1.21`. Be sure to upgrade `k8s-openapi` and `kube` simultaneously to avoid multiple version errors: ```sh cargo upgrade -p k8s-openapi -p kube -i ``` reflector: add helper function to the `Store` by @eliad-wiz in https://github.com/kube-rs/kube/pull/1111 Bump `k8s-openapi@0.17.0` and MK8SV by @clux in

Remove deprecated `Config::timeout` by @clux in https://github.com/kube-rs/kube/pull/1113 fix shell exec exiting message loop when terminalSizeReceiver is dropped by @erebe in https://github.com/kube-rs/kube/pull/1112 / 2022-12-15 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.77.0 --> This release saw numerous improvements across various parts of the codebase with lots of help from external contributors. Look for improvements in error handling, client exec behaviour, dynamic object conversion, certificate handling, and last, but not least; lots of enhancements in the `config` module. Huge thanks to everyone who contributed! Kubeconfigs relying on for auth should now work with a lot more cases (with improvements to script interactivity, cert passing, env-drop, and windows behaviour). We further aligned our parsing with client-go's behaviour, and also exposed . Finally, we now pass through to the `Client`, which has let us include for the long-standing ip issue (enabled by default). Add `DynamicObjects::try_parse` for typed object conversion by @jmintb in https://github.com/kube-rs/kube/pull/1061 Add `ExecConfig::drop_env` to filter host evars for auth providers by @aviramha in https://github.com/kube-rs/kube/pull/1062 Add support for terminal size when executing command inside a container by @armandpicard in https://github.com/kube-rs/kube/pull/983 add cmd-drop-env to AuthProviderConfig by @aviramha in https://github.com/kube-rs/kube/pull/1074 Check for client cert with exec by @rcanderson23 in https://github.com/kube-rs/kube/pull/1089 Change `Kubeconfig::merge` fn to public. by @goenning in https://github.com/kube-rs/kube/pull/1100 Fix interactivity in auth exec by @armandpicard in https://github.com/kube-rs/kube/pull/1083 [windows] skip window creation on auth exec by @goenning in https://github.com/kube-rs/kube/pull/1095 Add `Config::tlsservername` and validate when using rustls by @clux in https://github.com/kube-rs/kube/pull/1104 Remove deprecated `ResourceExt::name` by @clux in https://github.com/kube-rs/kube/pull/1105 Bump tracing dependency to 0.1.36 by @teozkr in https://github.com/kube-rs/kube/pull/1070 Improve error message on azure auth not being supported by @goenning in https://github.com/kube-rs/kube/pull/1082 exec: ensure certs always end with a new line by @goenning in https://github.com/kube-rs/kube/pull/1096 fix: align kube-rs with client-go config parsing by @goenning in https://github.com/kube-rs/kube/pull/1077 Return error from `watcher` when kinds do not support watch by @clux in https://github.com/kube-rs/kube/pull/1101 / 2022-10-28 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.76.0 --> Expanding on our existing support for storing Rust's struct enums in CRDs, Kube will now try to convert `#[serde(untagged)]` enums as well. Note that if the same field is present in multiple untagged variants then they must all have the same shape. These have been deprecated since 0.72, and are replaced by the equivalent `WatchStreamExt` methods. Adds example to `Controller::watches` by @Dav1dde in https://github.com/kube-rs/kube/pull/1026 Discovery: Add `ApiGroup::resourcesbystability` by @imuxin in https://github.com/kube-rs/kube/pull/1022 Add support for untagged enums in CRDs by @sbernauer in https://github.com/kube-rs/kube/pull/1028 Derive PartialEq for DynamicObject by @pbzweihander in https://github.com/kube-rs/kube/pull/1048 Runtime: Remove deprecated util `tryflatten` helpers by @clux in https://github.com/kube-rs/kube/pull/1019 Remove `native-tls` feature by @kazk in https://github.com/kube-rs/kube/pull/1044 add fieldManager querystring to all operations by @goenning in https://github.com/kube-rs/kube/pull/1031 Add verifytls1xsignature for NoCertVerification by @rvql in https://github.com/kube-rs/kube/pull/1034 Fix compatibility with schemars' preserve_order feature by @teozkr in https://github.com/kube-rs/kube/pull/1050 Hoist enum values from subschemas by @teozkr in https://github.com/kube-rs/kube/pull/1051 / 2022-09-21 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.75.0 --> The update to makes this the first release with tentative Kubernetes 1.25 support. While the new structs and apis now exist, we recommend holding off on using 1.25 until a is resolved upstream. See / for details. To upgrade, ensure you bump both `kube` and `k8s-openapi`: ```sh cargo upgrade kube k8s-openapi ``` Our previous default of connecting to the Kubernetes apiserver via `kubernetes.default.svc` has been reverted back to use the old environment variables after their position that the environment variables are not legacy. This does unfortunately regress on `rustls` support, so for those users we have included a to work around the old while it is

The `error_policy` fn now has access to the `object` that failed the reconciliation to ease metric creation / failure attribution. The following change is needed on the user side: ```diff -fn error_policy(error: &Error, ctx: Arc<Data>) -> Action { +fn errorpolicy(obj: Arc<YourObject>, error: &Error, ctx: Arc<Data>) -> Action { ``` There are also a slew of ergonomics improvements, closing of , adding , making (a common pitfall), as well as many great fixes to the edge cases in and . Many of these changes came from first time contributors. A huge thank you to everyone involved. Make `Config::auth_info` public by @danrspencer in https://github.com/kube-rs/kube/pull/959 Make raw `Client::send` method public by @tiagolobocastro in https://github.com/kube-rs/kube/pull/972 Make `types` on `AdmissionRequest` and `AdmissionResponse` public by @clux in https://github.com/kube-rs/kube/pull/977 Add `#[serde(default)]` to metadata field of `DynamicObject` by @pbzweihander in https://github.com/kube-rs/kube/pull/987 Add `createsubresource` method to `Api` and `createtoken_request` method to `Api<ServiceAccount>` by @pbzweihander in https://github.com/kube-rs/kube/pull/989 Controller: impl Eq and PartialEq for `Action` by @Sherlock-Holo in https://github.com/kube-rs/kube/pull/993 Add support for CRD `ConversionReview` types by @MikailBag in https://github.com/kube-rs/kube/pull/999 Constrain Resource trait and Api::namespaced by Scope by @clux in https://github.com/kube-rs/kube/pull/956 Add connect/read/write timeouts to `Config` by @goenning in https://github.com/kube-rs/kube/pull/971 Controller: Include the object being reconciled in the `error_policy` by @felipesere in https://github.com/kube-rs/kube/pull/995 `Config`: New `incluster` and `incluster_dns` constructors by @olix0r in https://github.com/kube-rs/kube/pull/1001 Upgrade `k8s-openapi` to 0.16 by @clux in https://github.com/kube-rs/kube/pull/1008 Remove `tracing::instrument` from `applydebugoverrides` by @kazk in https://github.com/kube-rs/kube/pull/958 fix duplicate finalizers race condition by @alex-hunt-materialize in https://github.com/kube-rs/kube/pull/965 fix: portforward connection cleanup by @tiagolobocastro in https://github.com/kube-rs/kube/pull/973 / 2022-07-09 =================== <!-- Release notes generated using configuration in .github/release.yml at 0.74.0 --> This release features smaller improvements/additions/cleanups/fixes, many of which are from new first-time contributors! Thank you everyone! The listed was backported to 0.73.1. We have also been trying to clarify and prove a lot more of our external-facing guarantees, and as a result: We have codified our The has extended its support range Our A consequence of all the policy writing and the improved clarity we have decided to deprecate the common helper. This method could panic and it is unexpected for the users and bad for our consistency. To get the old functionality, you can replace any `.name()` call on a Kubernetes resources with ; but as the name implies, it can panic (in a local setting, or during admission). We recommend you replace it with the new for a general identifier: ```diff -pod.name() +pod.name_any() ``` Add support for passing the `fieldValidation` query parameter on patch by @phroggyy in https://github.com/kube-rs/kube/pull/929 Add `conditions::isjobcompleted` by @clux in https://github.com/kube-rs/kube/pull/935 Deprecate `ResourceExt::name` in favour of safe name_ alternatives by @clux in https://github.com/kube-rs/kube/pull/945 Remove `#[kube(apiextensions)]` flag from `kube-derive` by @clux in https://github.com/kube-rs/kube/pull/920 Document every public derived fn from kube-derive by @clux in https://github.com/kube-rs/kube/pull/919 fix applier hangs which can happen with many watched objects by @moustafab in https://github.com/kube-rs/kube/pull/925 Applier: Improve reconciler reschedule context to avoid deadlocking on full channel by @teozkr in https://github.com/kube-rs/kube/pull/932 Fix deserialization issue in AdmissionResponse by @clux in https://github.com/kube-rs/kube/pull/939 Admission controller example fixes by @Alibirb in https://github.com/kube-rs/kube/pull/950 / 2022-06-03 =================== This patch release fixes a bug causing `applier` and `Controller` to deadlock when too many Kubernetes object change events were ingested at once. All users of `applier` and `Controller` are encouraged to upgrade as quickly as possible. Older versions are also affected, this bug is believed to have existed since the original release of `kube_runtime`. <!-- Release notes generated using configuration in .github/release.yml at 0.73.1 --> [0.73 backport] fix applier hangs which can happen with many watched objects (#925) by @moustafab (backported by @teozkr) in https://github.com/kube-rs/kube/pull/927 Full Changelog:

/ 2022-05-23 =================== Support added for Kubernetes `v1_24` support via the . Please also run `cargo upgrade --workspace k8s-openapi` when upgrading `kube`. This also bumps our to . A small ergonomic change in the `reconcile` signature has removed the need for the `Context` object. This has been replaced by an . The following change is needed in your controller: ```diff -async fn reconcile(doc: Arc<MyObject>, context: Context<Data>) -> Result<Action, Error> +async fn reconcile(doc: Arc<MyObject>, context: Arc<Data>) -> Result<Action, Error> ``` This will simplify the usage of the `context` argument. You should no longer need to pass `.get_ref()` on its every use. See the . Add Discovery::groups_alphabetical following kubectl sort order by @clux in https://github.com/kube-rs/kube/pull/887 Replace runtime::controller::Context with Arc by @teozkr in https://github.com/kube-rs/kube/pull/910 runtime: Return the object from `await_condition` by @olix0r in https://github.com/kube-rs/kube/pull/877 Bump k8s-openapi to 0.15 for kubernetes v1_24 and bump MSRV to 1.60 by @clux in https://github.com/kube-rs/kube/pull/916 / 2022-05-13 =================== A new ( + ) allows for simpler setups for streams from or . ```diff let stream = utils::tryflattenapplied(StreamBackoff::new(watcher(api, lp), b)); let stream = watcher(api, lp).backoff(b).applied_objects(); ``` The `util::tryflatten*` helpers have been marked as deprecated since they are not used by the stream impls. A new fn allows simpler reflector setups : ```diff let store = reflector::store::Writer::<Node>::default(); let reader = store.as_reader(); let (reader, writer) = reflector::store(); ``` Additional conveniences getters/settes to for mangedfields and creationtimestamp + , plus a path to a GVK, and a in . Managing multiple can be pretty complicated, but we now have helpers and docs on how to tackle it. A new function have been added (in ) to help push crd schemas generated by kube-derived crds with different `# documentation for details. A new example showcases and what the expected truncation outcomes are when moving between versions. Examples now have moved to `tracing` for its logging, respects `RUST_LOG`, and namespace selection via the kubeconfig context. There is also a showcasing as well as `kubectl {edit,delete,get,watch}` via + . Allow merging multi-version CRDs into a single schema by @clux in https://github.com/kube-rs/kube/pull/889 Add GroupVersion::with_kind and TypeMeta -> GroupVersionKind converters by @clux in https://github.com/kube-rs/kube/pull/896 Add managed_fields accessors to ResourceExt by @clux in https://github.com/kube-rs/kube/pull/898 Add ResourceExt::creation_timestamp by @clux in https://github.com/kube-rs/kube/pull/888 Support lowercase httpproxy & httpsproxy evars by @DevineLiu in https://github.com/kube-rs/kube/pull/892 Add a WatchStreamExt trait for stream chaining by @clux in https://github.com/kube-rs/kube/pull/899 Add Event::modify + reflector::store helpers by @clux in https://github.com/kube-rs/kube/pull/907 Switch to kubernetes cluster dns for incluster url everywhere by @clux in https://github.com/kube-rs/kube/pull/876 Update tower-http requirement from 0.2.0 to 0.3.2 by @dependabot in https://github.com/kube-rs/kube/pull/893 Remove deprecated legacy crd v1beta1 by @clux in https://github.com/kube-rs/kube/pull/890 / 2022-04-12 =================== Several quality of life changes and improvement this release for port-forwarding, a new `ClientBuilder`, better handling of `kube-derive` edge-cases. We highlight some changes here that you should be especially aware of. Publishing events via for cluster scoped resources (supported since `0.70.0`) now publish to `kube-system` rather than `default`, as all but the newest clusters struggle with publishing events in the `default` namespace. The previous `native-tls` default was there because we used to depend on `reqwest`, but because we depended on openssl anyway the feature does not make much sense. Changing to `openssl-tls` also improves the situation on macOS where the Security Framework struggles with PKCS#12 certs from OpenSSL v3. The `native-tls` feature will still be available in this release in case of issues, but the plan is to decommission it shortly. Of course, we all ideally want to move to rustls, but we are still blocked by

Add `ClientBuilder` that lets users add custom middleware without full stack replacement by @teozkr in https://github.com/kube-rs/kube/pull/855 Support top-level enums in CRDs by @sbernauer in https://github.com/kube-rs/kube/pull/856 portforward: Improve API and support background task cancelation by @olix0r in https://github.com/kube-rs/kube/pull/854 Make remote commands cancellable and remove panics by @kazk in https://github.com/kube-rs/kube/pull/861 Change the default TLS to OpenSSL by @kazk in https://github.com/kube-rs/kube/pull/863 change event recorder cluster namespace to kube-system by @clux in https://github.com/kube-rs/kube/pull/871 Fix schemas containing both properties and additionalProperties by @jcaesar in https://github.com/kube-rs/kube/pull/845 Make dependency pins between sibling crates stricter by @clux in https://github.com/kube-rs/kube/pull/864 Fix in-cluster kubehostport generation for IPv6 by @somnusfish in https://github.com/kube-rs/kube/pull/875 / 2022-03-20 =================== This was one of the big blockers for using `rustls` against clusters like `k3d` or `k3s` While not sufficient to fix using those clusters out of the box, it is now possible to use them The signature and end the `Ok` action in `reconcile` fns has been simplified slightly, and requires the following user updates: ```diff -async fn reconcile(obj: Arc<MyObject>, ctx: Context<Data>) -> Result<ReconcilerAction, Error> { ... Ok(ReconcilerAction { requeueafter: Some(Duration::fromsecs(300)), }) +async fn reconcile(obj: Arc<MyObject>, ctx: Context<Data>) -> Result<Action, Error> { ... Ok(Action::requeue(Duration::from_secs(300))) ``` The `Action` import lives in the same place as the old `ReconcilerAction`. Add support for EC private keys by @farcaller in https://github.com/kube-rs/kube/pull/804 Add helper for creating a controller owner_ref on Resource by @clux in https://github.com/kube-rs/kube/pull/850 Remove `scheduler::Error` by @teozkr in https://github.com/kube-rs/kube/pull/827 Bump parking_lot to 0.12, but allow dep duplicates by @clux in https://github.com/kube-rs/kube/pull/836 Update tokio-tungstenite requirement from 0.16.1 to 0.17.1 by @dependabot in https://github.com/kube-rs/kube/pull/841 Let OccupiedEntry::commit take PostParams by @teozkr in https://github.com/kube-rs/kube/pull/842 Change ReconcileAction to Action and add associated ctors by @clux in https://github.com/kube-rs/kube/pull/851 Token reloading with RwLock by @kazk in https://github.com/kube-rs/kube/pull/835 Fix event publishing for cluster scoped crds by @zhrebicek in https://github.com/kube-rs/kube/pull/847 Fix invalid CRD when Enum variants have descriptions by @sbernauer in https://github.com/kube-rs/kube/pull/852 / 2022-02-16 =================== This is an emergency patch release fixing a bug in 0.69.0 where a `kube::Client` would deadlock after running inside a cluster for about a minute (#829). All users of 0.69.0 are encouraged to upgrade immediately. 0.68.x and below are not affected. <!-- Release notes generated using configuration in .github/release.yml at 0.69.1 --> [0.69.x] Fix deadlock in token reloading by @clux (backported by @teozkr) in https://github.com/kube-rs/kube/pull/831 / 2022-02-14 =================== Two new methods have been added to the client `Api` this release to reduce the amount of boiler-plate needed for common patterns. via - to aid idempotent crud operation flows (following the style of ) via - to aid dealing with the `NotFound` type error via a returned `Option` Following a requirement for Kubernetes clients against versions `>= 1.22.0`, our bundled will reload tokens every minute when deployed in-cluster. <!-- Release notes generated using configuration in .github/release.yml at 0.69.0 --> Add conversion for `ObjectRef<K>` to `ObjectReference` by @teozkr in https://github.com/kube-rs/kube/pull/815 Add `Api::get_opt` for better existence handling by @teozkr in https://github.com/kube-rs/kube/pull/809 Entry API by @teozkr in https://github.com/kube-rs/kube/pull/811 Reload token file at least once a minute by @kazk in https://github.com/kube-rs/kube/pull/768 Prefer kubeconfig over in-cluster config by @teozkr in https://github.com/kube-rs/kube/pull/823 Disable CSR utilities on K8s <1.19 by @teozkr in https://github.com/kube-rs/kube/pull/817 / 2022-02-01 =================== To reduce the amount of allocation done inside the `runtime` by reflectors and controllers, the following change via is needed on the signature of your `reconcile` functions: ```diff -async fn reconcile(myobj: MyK, ctx: Context<Data>) -> Result<ReconcilerAction> +async fn reconcile(myobj: Arc<MyK>, ctx: Context<Data>) -> Result<ReconcilerAction> ``` This also affects the . As one of the last steps toward , port-forwarding landed in . There are 3 new

that showcases how to use this websocket based functionality. Add a VS Code devcontainer configuration by @olix0r in https://github.com/kube-rs/kube/pull/788 Add support for user impersonation by @teozkr in https://github.com/kube-rs/kube/pull/797 Add port forward by @kazk in https://github.com/kube-rs/kube/pull/446 runtime: Store resources in an `Arc` by @olix0r in https://github.com/kube-rs/kube/pull/786 Propagate Arc through the finalizer reconciler helper by @teozkr in https://github.com/kube-rs/kube/pull/792 Disable unused default features of chrono crate by @dreamer in https://github.com/kube-rs/kube/pull/801 Use absolute path to Result in derives by @teozkr in https://github.com/kube-rs/kube/pull/795 core: add missing reason to Display on Error::Validation in Request by @clux in https://github.com/kube-rs/kube/pull/798 / 2022-01-25 =================== runtime: Replace `DashMap` with a locked `AHashMap` by @olix0r in https://github.com/kube-rs/kube/pull/785 update k8s-openapi for kubernetes 1.23 support by @clux in https://github.com/kube-rs/kube/pull/789 / 2022-01-15 =================== Tons of ergonomics improvements, and 3 new contributors. Highlighted first is the 3 most discussed changes: It is now possible to embed complex enums inside structs that use `#[derive(CustomResource)]`. This has been a since the inception of auto-generated schemas. It does , and has , but represents a huge step forwards. Note that if you depend on `kube-derive` directly rather than via `kube` then you must now add the `schema` feature to `kube-core` To avoid spamming the apiserver when on certain watch errors cases, it's now possible to the `watcher` to set backoffs. The new follows existing `client-go` conventions of being kind to the apiserver. Initially, this is default-enabled in `Controller` watches (configurable via ) and avoids spam errors when crds are not installed. To aid users picking the most appropriate version of a `kind` from or , two new sort orders have been exposed on the new implementing implementing a more traditional; generational sort (highest version) Merged PRs from . Add `DeleteParams` constructors for easily setting `PropagationPolicy` by @kate-goldenring in https://github.com/kube-rs/kube/pull/757 Add Serialize to ObjecList and add field-selector and jsonpath example by @ChinYing-Li in https://github.com/kube-rs/kube/pull/760 Implement cordon/uncordon for Node by @ChinYing-Li in https://github.com/kube-rs/kube/pull/762 Export Version priority parser with Ord impls in kube_core by @clux in https://github.com/kube-rs/kube/pull/764 Add Api fns for arbitrary subresources and approval subresource for CertificateSigningRequest by @ChinYing-Li in https://github.com/kube-rs/kube/pull/773 Add backoff handling for watcher and Controller by @clux in https://github.com/kube-rs/kube/pull/703 Remove crate private `identity_pem` field from `Config` by @kazk in https://github.com/kube-rs/kube/pull/771 Use SecretString in AuthInfo to avoid credential leaking by @ChinYing-Li in https://github.com/kube-rs/kube/pull/766 / 2021-12-10 =================== BREAKING: Removed `kube::Error::OpenSslError` - BREAKING: Removed `kube::Error::SslError` - and BREAKING: Added `kube::Error::NativeTls(kube::client::NativeTlsError)` for errors from Native TLS - BREAKING: Added `kube::Error::RustlsTls(kube::client::RustlsTlsError)` for errors from Rustls TLS - Modified `Kubeconfig` parsing - allow empty kubeconfigs as per kubectl - Added `Kubeconfig::from_yaml` - via Updated `rustls` to 0.20.1 - BREAKING: Added `ObjectRef` to the object that failed to be reconciled to `kube::runtime::controller::Error::ReconcileFailed` - BREAKING: Removed `api_version` and `kind` fields from `kind` structs generated by `kube::CustomResource` - Updated `tokio-tungstenite` to 0.16 - Updated `tower-http` to 0.2.0 - BREAKING: `kube-client`: replace `RefreshTokenLayer` with `AsyncFilterLayer` in `AuthLayer` - / 2021-11-16 =================== BREAKING: Replaced feature `kube-derive/schema` with attribute `# If you currently disable default `kube-derive` default features to avoid automatic schema generation, add `#[kube(schema = "disabled")]` to your spec struct instead BREAKING: Moved `CustomResource` derive crate overrides into subattribute `# Replace `#[kube(kubecore = .., k8sopenapi = .., schema = .., serde = .., serdejson = ..)]` with `#[kube(crates(kubecore = .., k8sopenapi = .., schema = .., serde = .., serdejson = ..))]` Added `openssl-tls` feature to use `openssl` for TLS on all platforms. Note that, even though `native-tls` uses a platform specific TLS, `kube` requires `openssl` on all platforms because `native-tls` only allows PKCS12 input to load certificates and private key at the moment, and creating PKCS12 requires

- BREAKING: Changed to fail loading configurations with PEM-encoded certificates containing invalid sections instead of ignoring them. Updated `pem` to 1.0.1. - `oauth`: Updated `tame-oauth` to which supports the same default credentials flow as the Go `oauth2` for Google OAuth. In addition to reading the service account information from JSON file specified with `GOOGLEAPPLICATIONCREDENTIALS` environment variable, from `gcloud`, and obtaining OAuth tokens from local metadata server when running inside GCP are now supported. - We started working on improving error ergonomics. See the tracking issue for more details. The following is the summary of changes to `kube::Error` included in this release: Added `Error::Auth(kube::client::AuthError)` (errors related to client auth, some of them were previously in `Error::Kubeconfig`) Added `Error::BuildRequest(kube::core::request::Error)` (errors building request from `kube::core`) Added `Error::InferConfig(kube::config::InferConfigError)` (for `Client::try_default`) Added `Error::OpensslTls(kube::client::OpensslTlsError)` (new `openssl-tls` feature) - Added `Error::UpgradeConnection(kube::client::UpgradeConnectinError)` (`ws` feature, errors from upgrading a connection) Removed `Error::Connection` (was unused) Removed `Error::RequestBuild` (was unused) Removed `Error::RequestSend` (was unused) Removed `Error::RequestParse` (was unused) Removed `Error::InvalidUri` (replaced by variants of errors in `kube::config` errors) Removed `Error::RequestValidation` (replaced by a variant of `Error::BuildRequest`) Removed `Error::Kubeconfig` (replaced by `Error::InferConfig`, and `Error::Auth`) Removed `Error::ProtocolSwitch` (`ws` only, replaced by `Error::UpgradeConnection`) Removed `Error::MissingUpgradeWebSocketHeader` (`ws` only, replaced by `Error::UpgradeConnection`) Removed `Error::MissingConnectionUpgradeHeader` (`ws` only, replaced by `Error::UpgradeConnection`) Removed `Error::SecWebSocketAcceptKeyMismatch` (`ws` only, replaced by `Error::UpgradeConnection`) Removed `Error::SecWebSocketProtocolMismatch` (`ws` only, replaced by `Error::UpgradeConnection`) Removed `impl From<T> for Error` <details> <summary>Expand for more details</summary> The following breaking changes were made as a part of an effort to refine errors (the list is large, but most of them are lower level, and shouldn't require much change in most cases): Removed `impl From<E> for kube::Error` - Removed unused error variants in `kube::Error`: `Connection`, `RequestBuild`, `RequestSend`, `RequestParse` - Removed unused error variant `kube::error::ConfigError::LoadConfigFile` - Changed `kube::Error::RequestValidation(String)` to `kube::Error::BuildRequest(kube::core::request::Error)`. Includes possible errors from building an HTTP request, and contains some errors from `kube::core` that was previously grouped under `kube::Error::SerdeError` and `kube::Error::HttpError`. `kube::core::request::Error` is described below. - Removed `kube::core::Error` and `kube::core::Result`. `kube::core::Error` was replaced by more specific errors. - Replaced `kube::core::Error::InvalidGroupVersion` with `kube::core::gvk::ParseGroupVersionError` Changed the error returned from `kube::core::admission::AdmissionRequest::with_patch` to `kube::core::admission::SerializePatchError` (was `kube::core::Error::SerdeError`) Changed the error associated with `TryInto<AdmissionRequest<T>>` to `kube::core::admission::ConvertAdmissionReviewError` (was `kube::core::Error::RequestValidation`) Changed the error returned from methods of `kube::core::Request` to `kube::core::request::Error` (was `kube::core::Error`). `kube::core::request::Error` represents possible errors when building an HTTP request. The removed `kube::core::Error` had `RequestValidation(String)`, `SerdeError(serdejson::Error)`, and `HttpError(http::Error)` variants. They are now `Validation(String)`, `SerializeBody(serdejson::Error)`, and `BuildRequest(http::Error)` respectively in `kube::core::request::Error`. Changed variants of error enums in `kube::runtime` to tuples. Replaced `snafu` with `thiserror`. - Removed `kube::error::ConfigError` and `kube::Error::Kubeconfig(ConfigError)` - Error variants related to client auth were moved to a new error `kube::client::AuthError` as described below Remaining variants were split into `kube::config::{InferConfigError, InClusterError, KubeconfigError}` as described below Added `kube::client::AuthError` by extracting error variants related to client auth from `kube::ConfigError` and adding more variants to preserve context - Moved `kube::error::OAuthError` to `kube::client::OAuthError` - Changed all errors in `kube::client::auth` to `kube::client::AuthError` - Added `kube::Error::Auth(kube::client::AuthError)` - Added `kube::config::InferConfigError` which is an error from `Config::infer()` and `kube::Error::InferConfig(kube::config::InferConfigError)` - Added `kube::config::InClusterError` for errors related to loading in-cluster configuration by splitting `kube::ConfigError` and adding more variants to preserve context. - Added `kube::config::KubeconfigError` for errors related to loading kubeconfig by splitting `kube::ConfigError` and adding more variants to preserve context. - Changed methods of `kube::Config` to return these erorrs instead of `kube::Error` - Removed `kube::Error::InvalidUri` which was replaced by error variants preserving context, such as `KubeconfigError::ParseProxyUrl` - Moved all errors from upgrading to a WebSocket connection into `kube::Error::UpgradeConnection(kube::client::UpgradeConnectionError)` - </details> / 2021-10-28 =================== `kube::runtime::events`: fix build and hide module on kubernetes <

(events/v1 missing there) - / 2021-10-26 =================== `kube::runtime::wait::Condition` added boolean combinators (`not`/`and`/`or`) - `kube`: fix docs.rs build - via / 2021-10-26 =================== rust `edition` bumped to `2021` - , , `kube::CustomResource` derive can now take arbitrary `# `kube`: fix `native-tls` included when only `rustls-tls` feature is selected - via / 2021-10-22 =================== `kube` now re-exports `kube-runtime` under `runtime` feature - via no need to keep both `kube` and `kube_runtime` in `Cargo.toml` anymore fixes issues with dependabot / lock-step upgrading change `kube_runtime::X` import paths to `kube::runtime::X` when moving to the feature `kube::runtime` added `events` module with an event `Recorder` - via + + `kube::runtime::wait::conditions` added `iscrdestablished` helper - `kube::CustomResource` derive can now take an arbitrary `# `kube::core` consistently re-exported across crates docs: major overhaul + - via / 2021-10-09 =================== `kube-core`: BREAKING: extend `CustomResourceExt` trait with `::shortnames` method (impl in `kube-derive`) - `kube-runtime`: add `wait` module to `awaitcondition`, and added `watchobject` to watcher - via `kube`: add `Restart` marker trait to allow `Api::restart` on core workloads - via bump dependencies: `tokio-tungstenite`, `k8s-openapi`, `schemars`, `tokio` in particular - + / 2021-09-02 =================== `kube`: support `k8s-openapi` with `v1_22` features - via `kube`: `BREAKING`: support for `CustomResourceDefinition` at `v1beta1` now requires an opt-in `deprecated-crd-v1beta1` feature - `kube-core`: add content-type header to requests with body - via / 2021-08-09 =================== `BREAKING`: bumped `k8s-openapi` to - via `kube` connects to kubernetes via cluster dns when using `rustls` - via client now works with `rustls` feature in-cluster - via `kube` nicer serialization of `Kubeconfig` - `kube-core` added serde traits for `ApiResource` - `kube-core` added `CrdExtensions::crd_name` method (implemented by `kube-derive`) - `kube-core` added the `HasSpec` and `HasStatus` traits - `kube-derive` added support to automatically implement the `HasSpec` and `HasStatus` traits - `kube-runtime` fix tracing span hierarchy from applier - / 2021-07-06 =================== `kube-runtime`: fix non-unix builds - / 2021-07-05 =================== `kube`: `BREAKING`: subresource marker traits renamed conjugation: `Log`, `Execute`, `Attach`, `Evict` (previously `Logging`, `Executable`, `Attachable`, `Evictable`) - via `kube-derive` added `# - `kube-runtime` added `finalizer` helper via `kube-runtime` added tracing for why reconciliations happened via `kube-runtime` added `Controller::reconcileallon` to allow scheduling all objects for reconciliation via `kube-runtime` added `Controller::gracefulshutdownon` for shutting down the `Controller` while waiting for running reconciliations to finish - via BREAKING: `controller::applier` now starts a graceful shutdown when the `queue` terminates BREAKING: `scheduler` now shuts down immediately when `requests` terminates, rather than waiting for the pending reconciliations to drain `kube-runtime` added tracking for reconciliation reason Added: `Controller::ownswith` and `Controller::watcheswith` to pass a `dyntype` argument for dynamic `Api`s - BREAKING: `Controller::owns` signature changed to not allow `DynamicType`s BREAKING: `controller::trigger*` now returns a `ReconcileRequest` rather than `ObjectRef`. The `ObjectRef` can be accessed via the `objref` field Api::replace can fail to unset list values with k8s-openapi 0.12 0.57.0 / 2021-06-16 =================== `kube`: custom clients now respect default namespaces - fixes via BREAKING: custom clients via `Client::new` must pass `config.default_namespace` as 2nd arg `kube`: Added `CustomResourceExt` trait for `kube-derive` - via BREAKING: `kube-derive` users must import `kube::CustomResourceExt` (or `kube::core::crd::v1beta1::CustomResourceExt` if using legacy `#[kube(apiextensions = "v1beta1")]`) to use generated methods `Foo::crd` or `Foo::api_resource` BREAKING: `k8s_openapi` bumped to - Generated structs simplified + `Resource` trait expanded Adds support for kubernetes `v1_21` Contains bugfix for `kube` resource plurals is no longer inferred from `k8s-openapi` structs - via BREAKING: `kube::Resource` trait now requires a `plural` implementation Api::replace can fail to unset list values with k8s-openapi 0.12

/ 2021-06-05 =================== `kube`: added `Api::default_namespaced` - via `kube`: added `config` feature - via `kube`: BREAKING: moved `client::discovery` module to `kube::discovery` and rewritten module `discovery`: added `oneshot` helpers for quick selection of recommended resources / kinds `discovery`: moved `ApiResource` and `ApiCapabilities` (result of discovery) to `kube_core::discovery` BREAKING: removed internal `ApiResource::from_apiresource` `kube::Client` is now configurable with layers using `tower-http` via three new examples added: , and Big feature streamlining, big service and layer restructuring, dependency restructurings Changes can hit advanced users, but unlikely to hit base use cases with `Api` and `Client`. In depth changes broken down below: Add `kube::client::ConfigExt` extending `Config` for custom `Client`. This includes methods to configure TLS connection when building a custom client `native-tls`: `Config::nativetlshttpsconnector` and `Config::nativetls_connector` `rustls-tls`: `Config::rustlshttpsconnector` and `Config::rustlsclientconfig` Remove the requirement of having `native-tls` or `rustls-tls` enabled when `client` is enabled. Allow one, both or none. When both, the default Service will use `native-tls` because of . `rustls` can be still used with a custom client. Users will have an option to configure TLS at runtime. When none, HTTP connector is used. Remove TLS features from `kube-runtime` BREAKING: Features must be removed if specified Remove `client` feature from `native-tls` and `rust-tls` features `config` + `native-tls`/`rustls-tls` can be used independently, e.g., to create a simple HTTP client BREAKING: `client` feature must be added if `default-features = false` `ConfigExt::baseurilayer` (`BaseUriLayer`) to set cluster URL (#539) `ConfigExt::auth_layer` that returns optional layer to manage `Authorization` header (#539) `gzip`: Replaced custom decompression module with from `tower-http` (#539) Replaced custom `LogRequest` with from `tower-http` (#539) Request body is no longer shown Basic and Bearer authentication using `AddAuthorizationLayer` (borrowing from https://github.com/tower-rs/tower-http/pull/95 until released) BREAKING: Remove `headers` from `Config`. Injecting arbitrary headers is now done with a layer on a custom client. Remove `static_assertions` since it's no longer used Replace `tokiorustls` with `rustls` and `webpki` since we're not using `tokiorustls` directly Replace uses of `rustls::internal::pemfile` with `rustls-pemfile` Remove `url` and always use `http::Uri` BREAKING: `Config::cluster_url` is now `http::Uri` BREAKING: `Error::InternalUrlError(url::ParseError)` and `Error::MalformedUrl(url::ParseError)` replaced by `Error::InvalidUri(http::uri::InvalidUri)` 0.55.0 / 2021-05-21 =================== `kube`: `client` feature added (default-enabled) - `kube`: `PatchParams` force now only works with `Patch::Apply` `kube`: `api` `discovery` module now uses a new `ApiResource` struct + `kube`: `api` BREAKING: `DynamicObject` + `Object` now takes an `ApiResource` rather than a `GroupVersionKind` `kube`: `api` BREAKING: `discovery` module's `Group` renamed to `ApiGroup` `kube`: `client` BREAKING: `kube::client::Status` moved to `kube::core::Status` (accidental, re-adding in 0.56) `kube-core` crate factored out of `kube` to reduce dependencies - via + + + + `kube`: `kube::Service` removed to allow `kube::Client` to take an abritrary `Service<http::Request<hyper::Body>>` - 0.54.0 / 2021-05-19 =================== yanked 30 minutes after release due to changes lifted to 0.55.0 0.53.0 / 2021-05-15 =================== `kube`: `admission` controller module added under feature - via + fixes in + + `kube`: `config` parsing of pem blobs now resilient against missing newlines - via `kube`: `discovery` module added to simplify dynamic api usage - `kube`: `api` BREAKING: `DynamicObject::namespace` renamed to `::within` - `kube`: `api` BREAKING: added `ResourceExt` trait moving the getters from `Resource` trait - `kube`: `api` added a generic interface for subresources via `Request` - `kube`: `api` fix bug in `PatchParams::dry_run` not being serialized correctly - The most likely issue you'll run into is from `kube` when using `Resource` trait which has been split: ```diff +use kube::api::ResouceExt; let name = Resource::name(&foo); let ns = Resource::namespace(&foo).expect("foo is namespaced"); let name = ResourceExt::name(&foo); let ns = ResourceExt::namespace(&foo).expect("foo is namespaced"); ``` 0.52.0 / 2021-03-31 =================== `kube-derive`: allow

`# via `kube`: added tracing instrumentation for io operations in `kube::Api` - `kube`: `DeleteParams`'s `Preconditions` is now public - via `kube`: remove dependency on duplicate `deriveacceptkey` for `ws` - `kube`: Properly verify websocket keys in `ws` handshake - `kube`: BREAKING: removed optional, and deprecated `runtime` module - `kube`: BREAKING: `ListParams` bookmarks default enabled - via renames member `::allow_bookmarks` to `::bookmarks` `::default()` sets `bookmark` to `true` to avoid bad bad defaults method `::allowbookmarks()` replaced by `::disablebookmarks()` `kube`: `DynamicObject` and `GroupVersionKind` introduced for full dynamic object support `kube-runtime`: watchers/reflectors/controllers can be used with dynamic objects from api discovery `kube`: Pluralisation now only happens for `k8s_openapi` objects by default inflector dependency removed added internal pluralisation helper for `k8s_openapi` objects `kube`: BREAKING: Restructuring of low level `Resource` request builder `Resource` renamed to `Request` and requires only a `path_url` to construct `kube`: BREAKING: Mostly internal `Meta` trait revamped to support dynamic types `Meta` renamed to `kube::Resource` to mimic `k8s_openapi::Resource` The trait now takes an optional associated type for runtime type info: `DynamicType` `Api::allwith` + `Api::namespacedwith` added for querying with dynamic families see `dynamicwatcher` + `dynamicapi` for example usage `kube-runtime`: BREAKING: lower level interface changes as a result of `kube::api::Meta` trait: THESE SHOULD NOT AFFECT YOU UNLESS YOU ARE IMPLEMENTING / CUSTOMISING LOW LEVEL TYPES DIRECTLY `ObjectRef` now generic over `kube::Resource` rather than `RuntimeResource` `reflector::{Writer, Store}` takes a `kube::Resource` rather than a `k8s_openapi::Resource` `kube-derive`: BREAKING: Generated type no longer generates `k8s-openapi` traits This allows correct pluralisation via `# via While we had a few breaking changes. Most are to low level internal interfaces and should not change much, but some changes you might need to make: if using the old, low-level `kube::api::Resource`, please consider the easier `kube::Api`, or look at tests in `request.rs` or `typed.rs` if you need the low level interface search replace `kube::api::Meta` with `kube::Resource` if used - trait was renamed if implementing the trait, add `type DynamicType = ();` to the impl remove calls to `ListParams::allow_bookmarks` (allow default) handle `WatchEvent::Bookmark` or set `ListParams::disable_bookmarks()` look at examples if replacing the long deprecated legacy runtime The following constants from `k8s_openapi::Resource` no longer exist. Please `use kube::Resource` and: replace `Foo::KIND` with `Foo::kind(&())` replace `Foo::GROUP` with `Foo::group(&())` replace `Foo::VERSION` with `Foo::version(&())` replace `Foo::APIVERSION` with `Foo::apiversion(&())` 0.51.0 / 2021-02-28 =================== `kube` `Config` now allows arbirary extension objects - `kube` `Config` now allows multiple yaml documents per kubeconfig - via `kube-derive` now more robust and is using `darling` - docs improvements to patch + runtime 0.50.1 / 2021-02-17 =================== bug: fix oidc auth provider - via 0.50.0 / 2021-02-10 =================== feat: added support for stacked kubeconfigs - via refactor: authentication logic moved out of `kube::config` and into into `kube::service` - BREAKING: `Config::getauthheader` removed refactor: remove `hyper` dependency from `kube::api` - refactor: `kube::Service` simpler auth and gzip handling - + 0.49.0 / 2021-02-08 =================== dependency on `reqwest` + removed in favour of `hyper` + `tower` refactor: `kube::Client` now uses `kube::Service` (a `tower::Service<http::Request<hyper::Body>>`) instead of `reqwest::Client` to handle all requests refactor: `kube::Client` now uses a `tokio_util::codec` for internal buffering refactor: `async-tungstenite` ws feature dependency replaced with `tokio-tungstenite`. `WebSocketStream` is now created from a connection upgraded with `hyper` refactor: `oauth2` module for GCP OAuth replaced with optional `tame-oauth` dependency BREAKING: GCP OAuth is now opt-in (`oauth` feature). Note that GCP provider with command based token source is supported by default. BREAKING: Gzip decompression is now opt-in (`gzip` feature) because Kubernetes does not have compression enabled by default yet and this feature requires extra dependencies. BREAKING: `Client::new` now takes a `Service` instead of `Config` . Allows custom service for features not supported out of the box and testing. To create a `Client` from `Config`, use `Client::try_from` instead. BREAKING: Removed `Config::proxy`. Proxy is no longer supported out of the box, but it should be possible by using a custom

fix: Refreshable token from auth provider not refreshing fix: Panic when loading config with non-GCP provider feat: subresource support added for `Evictable` types (marked for `Pod`) - `kube`: subresource marker traits renamed to `Loggable`, `Executable`, `Attachable` (previously `LoggingObject`, `ExecutingObject`, `AttachableObject`) - `examples` showcasing `kubectl cp` like behaviour via 0.48.0 / 2021-01-23 =================== bump `k8s-openapi` to `0.11.0` - breaking: `kube`: no longer necessary to serialize patches yourself - `PatchParams` removes `PatchStrategy` `Api::patch*` methods now take an enum `Patch` type optional `jsonpatch` feature added for `Patch::Json` 0.47.0 / 2021-01-06 =================== chore: upgrade `tokio` to `1.0` - BREAKING: This requires the whole application to upgrade to `tokio` 1.0 and `reqwest` to 0.11.0 docs: fix broken documentation in `kube` 0.46.0 bug: `kube`: removed panics from `ws` features, fix `rustls` support + improve docs via + bug: `AttachParams` now fixes owned method chaining (slightly breaks from 0.46 if using &mut ref before) - feat: `AttachParams::interactive_tty` convenience method added - bug: fix `Runner` (and thus `Controller` and `applier`) not waking correctly when starting new tasks - 0.46.1 / 2021-01-06 =================== maintenance release for 0.46 (last supported tokio 0.2 release) from `tokio02` branch bug backport: fix `Runner` (and thus `Controller` and `applier`) not waking correctly when starting new tasks - 0.46.0 / 2021-01-02 =================== feat: `kube` now has __optional__ websocket support with `async_tungstenite` under `ws` and `ws--tls` features feat: `AttachableObject` marker trait added and implemented for `k8s_openapi::api::core::v1::Pod` feat: `AttachParams` added for `Api::exec` and `Api::attach` for `AttachableObject`s examples: `podshell`, `podattach`, `pod_exec` demonstrating the new features 0.45.0 / 2020-12-26 =================== feat: `kube-derive` now has a default enabled `schema` feature allows opting out of `schemars` dependency for handwriting crds - breaking: `kube-derive` attr `struct_name` renamed to `struct` - docs: improvements on `kube`, `kube-runtime`, `kube-derive` 0.44.0 / 2020-12-23 =================== feat: `kube-derive` now generates openapi v3 schemas and is thus usable with v1 `CustomResourceDefinition` - and via BREAKING: `kube-derive` types now require `JsonSchema` derived via `schemars` libray (not breaking if going to 0.45.0) feat: `kube_runtime::controller`: now reconciles objects in parallel - BREAKING: `kube_runtime::controller::applier` now requires that the `reconciler`'s `Future` is `Unpin`, `Box::pin` it or submit it to a runtime if this is not acceptable BREAKING: `kube_runtime::controller::Controller` now requires that the `reconciler`'s `Future` is `Send + 'static`, use the low-level `applier` interface instead if this is not acceptable bug: `kube-runtime`: removed accidentally included `k8s-openapi` default features (you have to opt in to them yourself) feat: `kube`: `TypeMeta` now derives additionally `Debug, Eq, PartialEq, Hash` bump: `k8s-openapi` to `0.10.0` - bump: `serde_yaml` - bump: `dirs` to `dirs-next` - 0.43.0 / 2020-10-08 =================== bug: `kube-derive` attr `#[kube(shortname)]` now working correctly bug: `kube-derive` now working with badly cased existing types - missing: `kube` now correctly exports `config::NamedAuthInfo` - feat: `kube`: expose `Config::getauthheader` for istio use cases - feat: `kube`: local config now tackles gcloud auth exec params - and `kube-derive` now actually requires GVK (in particular `#[kube(kind = "Foo")]` which we sometimes inferred earlier, despite documenting the contrary) 0.42.0 / 2020-09-10 =================== bug: `kube-derive`'s `Default` derive now sets typemeta correctly - feat: `ListParams` now supports `continue_token` and `limit` - 0.41.0 / 2020-09-10 =================== yanked release. failed publish. 0.40.0 / 2020-08-17 =================== `DynamicResource::fromapiresource` added to allow apiserver returned resources - via `Client::listapigroups` added `Client::listapgroup_resources` added `Client::listcoreapi_versions` added `Client::listcoreapi_resources` added `kube::DynamicResource` exposed at top level Bug: `PatchParams::default_apply()` now requires a manager and renamed to `PatchParams::apply(manager: &str)` for Bug: `DeleteParams` no longer missing for `Api::delete_collection` - Removed paramter `ListParams::include_uninitialized` deprecated since 1.14 Added optional `PostParams::field_manager` was missing for `Api::create` case

/ 2020-08-05 =================== Bug: `ObjectRef` tweak in `kube-runtime` to allow controllers triggering across cluster and namespace scopes - via Feature: `kube` now has a `derive` feature which will re-export `kube::CustomResource` from `kube-derive::CustomResource`. Examples: revamp examples for `kube-runtime` - 0.38.0 / 2020-07-23 =================== Marked `kube::runtime` module as deprecated - `Config::timeout` can now be overridden to `None` (with caveats) Bug: reflector stores could have multiple copies inside datastore - `dashmap` backend Store driver downgraded - `Store::iter` temporarily removed Bug: Specialize WatchEvent::Bookmark so they can be deserialized - Docs: Tons of docs for kube-runtime 0.37.0 / 2020-07-20 =================== Bump `k8s-openapi` to `0.9.0` All runtime components now require `Sync` objects reflector/watcher/Controller streams can be shared in threaded environments 0.36.0 / 2020-07-19 =================== https://gitlab.com/teozkr/kube-rt/ merged in for a new `kube-runtime` crate `Controller<K>` added ( via ) `Reflector` api redesigned ( via ) Migration release for `Informer` -> `watcher` + `Reflector` -> `reflector` `kube::api::CustomResource` removed in favour of `kube::api::Resource::dynamic` `CrBuilder` removed in favour of `DynamicResource` (with new error handling) support level bumped to beta 0.35.1 / 2020-06-18 =================== Fix in-cluster Client when using having multiple certs in the chain - 0.35.0 / 2020-06-15 =================== `Config::proxy` support added - `PartialEq` can be derived with `kube-derive` - Windows builds no longer clashes with runtime - Rancher hosts (with path specifiers) now works - 0.34.0 / 2020-05-08 =================== Bump `k8s-openapi` to `0.8.0` `Config::fromclusterenv` <- renamed from `Config::newfromcluster_env` `Config::fromkubeconfig` <- renamed from `Config::newfrom_kubeconfig` `Config::fromcustomkubeconfig` added - Majorly overhauled error handlind in config module - 0.33.0 / 2020-04-27 =================== documentation fixes for `Api::patch` Config: add automatic token refresh - / / 0.32.1 / 2020-04-15 =================== add missing tokio `signal` feature as a dependency upgrade all dependencies, including minor bumps to rustls and base64 0.32.0 / 2020-04-10 =================== Major `config` + `client` module refactor `Config` is the new `Configuration` struct `Client` is now just a configured `reqwest::Client` plus a `reqwest::Url` implement `From<Config> for reqwest::ClientBuilder` implement `TryFrom<Config> for Client` `Client::try_default` or `Client::new` now recommended constructors People parsing `~/.kube/config` must use the `KubeConfig` struct instead `Reflector<K>` now only takes an `Api<K>` to construct (.params method) `Informer<K>` now only takes an `Api<K>` to construct (.params method) `Informer::initfrom` -> `Informer::setversion` `Reflector` now self-polls + handles signals `Reflector::poll` made private in favour of `Reflector::run` `Api::watch` no longer filters out error events (`next` -> `try_next`) `Api::watch` returns `Result<WatchEvent>` rather than `WatchEvent` `WatchEvent::Bookmark` added to enum `ListParams::allow_bookmarks` added `PatchParams::default_apply` ctor added `PatchParams` builder mutators: `::force` and `::dry_run` added 0.31.0 / 2020-03-27 =================== Expose `config::Configuration` at root level Add `Configuration::infer` as a recommended constructor Rename `client::APIClient` to `client::Client` Expose `client::Client` at root level `Client` now implements `From<Configuration>` Added comprehensive documentation on `Api` Rename `config::KubeConfigLoader` -> `config::ConfigLoader` removed `futures-timer` dependency for `tokio` (feature=timer) 0.30.0 / 2020-03-17 =================== Fix `#[kube(printcolumn)]` when `#[kube(apiextensions = "v1beta1")]` Fix `#[kube(status)]` causing serializes of empty optional statuses 0.29.0 / 2020-03-12 =================== `Api::log` -> `Api::logs` (now matches `Resource::logs`) `Object<FooSpec, FooStatus>` back for ad-hoc ser/de kube-derive now derives `Debug` (requires `Debug` on spec struct) kube-derive now allows multiple derives per file `Api::create` now takes data `K` rather than bytes `Api::replace` now takes data `K` rather than bytes (note that `Resource::create` and `Resource::replace` still takes bytes) 0.28.1 / 2020-03-07 =================== `#[derive(CustomResource)]` now implements `::new` on the generated `Kind` derived `Kind` now properly contains `TypeMeta` -

/ 2020-03-05 =================== `RawApi` removed -> `Resource` added `Resource` implements `k8s_openapi::Resource` ALL OBJECTS REMOVED* -> Depening on light version of `k8s-openapi` now NB: should generally just mean a few import changes (+casings / unwraps) `openapi` feature removed (light dependency mandatory now) LIBRARY WORKS WITH ALL `k8s_openapi` KUBERNETES OBJECTS* `KubeObject` trait removed in favour of `Meta` trait `Object<FooSpec, FooStatus>` removed -> types implementing `k8s_openapi::Resource` required instead `kube-derive` crate added to derive this trait + other kubebuilder like codegen 0.27.0 / 2020-02-26 =================== `Reflector` + `Informer` moved from `kube::api` to `kube::runtime` `Informer` now resets the version to 0 rather than dropping events - Removed `Informer::init`, since it is now a no-op when building the `Informer` Downgrade spurious log message when using service account auth 0.26.0 / 2020-02-25 =================== Fix a large percentage of EOFs from watches => default timeout down to 290s from 300s => `Reflector` now re-lists a lot less Fix decoder panic with async-compression (probably) `Informer::poll` can now be used with `TryStream` Exposed `Config::read` and `Config::read_from` - Fix typo on `Api::StatefulSet` Fix typo on `Api::Endpoints` Add `Api::v1CustomResourceDefinition` when on k8s >= 1.17 Renamed `Void` to `NotUsed` 0.25.0 / 2020-02-09 =================== initial rustls support (some local kube config issues know ) crate does better version checking against openapi features - initial `log_stream` support - 0.24.0 / 2020-01-26 =================== Add support for ServiceAccount, Role, ClusterRole, RoleBinding, Endpoint - + Upgrade k8s-openapi to 0.7 => breaking changes: https://github.com/Arnavion/k8s-openapi/blob/master/CHANGELOG.md#v070-2020-01-23 0.23.0 / 2019-12-31 =================== Bump tokio and reqwest to 0.2 and 0.10 Fix bug in `log` fetcher - Temporarily allow invalid certs when testing on macosx - 0.22.2 / 2019-12-04 =================== Allow sharing Reflectors between threads - Fix Reflector pararall lock issue (`poll` no longer blocks `state`) 0.22.1 / 2019-11-30 =================== Improve Reflector reset algorithm (clear history less) 0.22.0 / 2019-11-29 =================== Default watch timeouts changed to 300s everywhere This increases efficiency of Informers and Reflectors by keeping the connection open longer. However, if your Reflector relies on frequent polling you can set `timeout` or hide the `poll()` in a different context so it doesn't block your main work Internal `RwLock` changed to a `futures::Mutex` for soundness / proper non-blocking - blocking `Reflector::read()` renamed to `async Reflector::state()` Expose `metadata.creationtimestamp` and `.deletiontimestamp` (behind openapi flag) - 0.21.0 / 2019-11-29 =================== All watch calls returns a stream of `WatchEvent` - `Informer::poll` now returns a stream - 0.20.1 / 2019-11-21 =================== ObjectList now implements Iterator - openapi feature no longer accidentally hardcoded to v1.15 feature - 0.19.0 / 2019-11-15 ================== kube::Error is now a proper error enum and not a Fail impl (thiserror) soft-tokio dependency removed for futures-timer gzip re-introduced 0.18.1 / 2019-11-11 ================== Fix unpinned gzip dependency breakage - 0.18.0 / 2019-11-07 ================== api converted to use async/await with 1.39.0 (primitively) hyper upgraded to 0.10-alpha synchronous sleep replaced with tokio timer `Log` trait removed in favour of internal marker trait 0.17.0 / 2019-10-22 ================== Add support for oidc providerss with `auth-provider` w/o `access-token` - Bump most dependencies to more recent versions Expose custom client creation Added support for `v1beta1Ingress` Expose inclusterconfig::loaddefault_ns - 0.16.1 / 2019-08-09 ================== Add missing `uid` field on `ObjectMeta::ownerReferences` 0.16.0 / 2019-08-09 ================== Add `Reflector::get` and `Reflector::get_within` as cheaper getters Add support for OpenShift kube configs with multiple CAs - via Add missing `ObjectMeta::ownerReferences` Reduced memory consumption during compile with `k8s-openapi@0.5.1` - 0.15.1 / 2019-08-18 ================== Fix compile issue on `1.37.0` with `Utc` serialization Fix `Void` not having `Serialize` derive 0.15.0 / 2019-08-11 ================== Added support for `v1Job` resources - via Added support for `v1Namespace`, `v1DaemonSet`, `v1ReplicaSet`, `v1PersistentVolumeClaim`, `v1PersistentVolume`, `v1ResourceQuota`, `v1HorizontalPodAutoscaler` - via Added support for `v1beta1CronJob`, `v1ReplicationController`, `v1VolumeAttachment`, `v1NetworkPolicy` - via `k8s-openapi` optional dependency bumped to `0.5.0` (for kube 1.14 structs) 0.14.0 / 2019-08-03 ================== `Reflector::read` now returns a `Vec<K>`` rather than a `Vec<(name, K)>`: This fixes an unsoundness bug internally - via @gnieto

/ 2019-07-22 ================== Experimental oauth2 support for some providers - via : a big cherry-pick from various prs upstream originally for GCP EKS works with setup in https://github.com/kube-rs/kube/pull/20#issuecomment-511767551 0.12.0 / 2019-07-18 ================== Added support for `Log` subresource - via Added support for `v1ConfigMap` with example - via Demoted some spammy info messages from Reflector 0.11.0 / 2019-07-10 ================== Added `PatchParams` with `PatchStrategy` to allow arbitrary patch types - via @ragne `Event` renamed to `v1Event` to match non-slowflake type names `v1Service` support added Added `v1Secret` snowflake type and a `secret_reflector` example 0.10.0 / 2019-06-03 ================== `Api<P, U>` is now `Api<K>` for some `KubeObject` K: Big change to allow snowflake objects () - but also slightly nicer You want aliases `type Pod = Object<PodSpec, PodStatus>` This gives you the required `KubeObject` trait impl for free Added `Event` native type to prove snowflakes can be handled - `ApiStatus` renamed to `Status` to match kube api conventions Rename `Metadata` to `ObjectMeta` Added `ListMeta` for `ObjectList` and `Status` Added `TypeMeta` object which is flattened onto `Object`, so: `o.types.kind` rather than `o.kind` `o.types.version` rather than `o.version` 0.9.0 / 2019-06-02 ================== Status subresource api commands added to `Api`: `patch_status` `get_status` `replace_status` ^ See `crdopenapi` or `crdapi` examples Scale subresource commands added to `Api`: `patch_scale` `get_scale` `replace_scale` ^ See `crd_openapi` example 0.8.0 / 2019-05-31 ================== Typed `Api` variant called `OpenApi` introduced (see crd_openapi example) Revert `client.request` return type change (back to response only from pre-0.7.0 ) `delete` now returns `Either<Object<P, U>, ApiStatus> - for bug `delete_collection` now returns `Either<ObjectList<Object<P, U>>, ApiStatus> - for bug `Informer::new` renamed to `Informer::raw` `Reflector::new` renamed to `Reflector::raw` `Reflector::new` + `Informer::new` added for "openapi" compile time feature (does not require specifying the generic types) 0.7.0 / 2019-05-27 ================== Expose list/watch parameters Many API struct renames: `ResourceMap` -> `Cache` `Resource` -> `Object` `ResourceList` -> `ObjectList` `ApiResource` -> `Api` `ResourceType` has been removed in favour of `Api::v1Pod()` say `Object::status` now wrapped in an `Option` (not present everywhere) `ObjectList` exposed Major API overhaul to support generic operations on `Object` Api can be used to perform generic actions on resources: `create` `get` `delete` `watch` `list` `patch` `replace` `get_scale` (when scale subresource exists) `patch_scale` (ditto) `replace_scale` (ditto) `get_status` (when status subresource exists) `patch_status` (ditto) `replace_status` (ditto) crd_api example added to track the action api Bunch of generic parameter structs exposed for common operations: `ListParams` exposed `DeleteParams` exposed `PostParams` exposed Errors from `Api` exposed in `kube::Error`: `Error::api_error -> Option<ApiError>` exposed Various other error types also in there (but awkward setup atm) `client.request` now returns a tuple `(T, StatusCode)` (before only `T`) 0.6.0 / 2019-05-12 ================== Expose getter `Informer::version` Exose ctor `Informer::from_version` Expose more attributes in `Metadata` `Informer::reset` convenience method added `Informer::poll` no longer returns events straight an `Informer` now caches `WatchEvent` elements into an internal queue `Informer::pop` pops a single element from its internal queue `Reflector::refresh` renamed to `Reflector::reset` (matches `Informer`) `Void` type added so we can use `Reflector<ActualSpec, Void>` removes need for Spec/Status structs: `ReflectorSpec`, `ReflectorStatus` removed `InformerSpec`, `InformerStatus` removed `ResourceSpecMap`, `ResourceStatusMap` removed `WatchEvents` removed `WatchEvent` exposed, and now wraps `Resource<T, U>`` 0.5.0 / 2019-05-09 ================== added `Informer` struct dedicated to handling events Reflectors no longer cache `events` - see 0.4.0 / 2019-05-09 ================== ResourceMap now contains the full Resource<T,U> struct rather than a tuple as the value. => `value.metadata` is available in the cache. Reflectors now also cache `events` to allow apps to handle them 0.3.0 / 2019-05-09 ================== `Named` trait removed (inferring from metadata.name now) Reflectors now take two type parameters (unless you use `ReflectorSpec` or `ReflectorStatus`) - see examples for usage Native kube types supported via `ApiResource` Some native kube resources have easy converters to `ApiResource`