View Source Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
[2.6.1] - 2024-04-29
Fixed
- With the upgrade to
mint
1.6.0, there's no need for settinginsecure_skip_tls_verify: true
anymore in most cases. (https://github.com/elixir-mint/mint/pull/418). Documentation and examples were adapted.
[2.6.0] - 2024-04-02
Added
- Many
K8s.Conn.Auth
providers now cache values, and periodically refresh their values. #302. because of this clusters using Exec commands to generate auth tokens will see greatly improved performance.
[2.5.0] - 2023-11-12
Added
[2.4.2] - 2023-10-18
Fixed
K8s.Client.Mint.HTTPAdapter
- Only stop the process if the connection is closed for reading (and writing). - #280, #285
[2.4.1] - 2023-08-15
Fixed
K8s.Client.Mint.HTTPAdapter
- Don't raise exception when terminating an adapter. - #268, #269
[2.4.0] - 2023-07-07
Added
K8s.Client.wait_until/2
- Allow passing DELETE operations in order to wait for deletion. - #262
[2.3.0] - 2023-05-14
Added
K8s.Client.connect/4
- Support connecting topods/log
subresource. - #254, #255K8s.Conn.from_env/2
- Generates configuration from a file defined by an env variable. - #251K8s.Conn
- Better hexdocs
[2.2.0] - 2023-03-27
Fixed
K8s.Conn.Auth.Exec
- Define default value for:args
- #240
Added
K8s.Conn.Auth.Azure
- Azure auth provider added by @hanspagh - #162, #225
[2.1.1] - 2023-03-02
Fixed
[2.1.0] - 2023-02-25
Added
- Added further PATCH mechanisms - #229
- Add
opts
toK8s.Conn.from_file/N
andK8s.Conn.from_service_account/N
in order to be able to pass:insecure_skip_tls_verify
option directly. - #230, #203
[2.0.3] - 2023-02-17
Fixed
- A regression introduced in 2.0.2: superfluous call to
Genserver.reply()
was removed.
[2.0.2] - 2023-02-16
Fixed
[2.0.1] - 2023-02-12
Fixed
[2.0.0] - 2023-01-27
This version comes with some breaking changes. Please refer to the migrations guide for help on how to migrate your projects to this version.
Added
K8s.Selector.label_not/N
,K8s.Selector.field/N
andK8s.Selector.field_not/N
- Support for field selectors (#117)K8s.Client.Provider.stream/5
callback was added to the behaviourK8s.Client.Runner.Base.stream/3
K8s.Client.Provider.stream_to/6
callback was added to the behaviourK8s.Client.Runner.Base.stream_to/4
K8s.Client.MintHTTPProvider
- The mint client implementationK8s.Client.HTTPTestHelper
- to be used in tests (resides inlib/
so it can be used by dependents)- Open
:connect
operations (connections) now accept messages to be sent to pods if usingK8s.Client.stream_to/N
K8s.Client.put_conn/2
to add pielining support to the Client API
Changed
K8s.Client.Provider
behaviour was adapted to the new internal architectureK8s.Client.watch/N
now returns a:watch
or:watch_all_namespaces
operation to be passed toK8s.Client.stream/N
Websockex
was replaced byMint.WebSocket
Removed
K8s.Client.HTTPProvider
was removed in favor ofK8s.Client.MintHTTPProvider
- The
:stream_to
inhttp_opts
was removed in favor ofK8s.Client.stream_to/N
andK8s.Client.stream/N
. K8s.Client.DynamicWebSocketProvider
was removed. UseK8s.Client.DynamcHTTPProvider.websocket*
functions instead .
Breaking changes
- Tests using the
DynamicHTTPProvider
which work withwatch_and_stream
are going to need to be changed. The HTTP mocks now need to implement thestream/5
callback. (SeeK8s.Client.Runner.Watch.StreamTest
on this branch for examples)d. K8s.Client.DynamicWebSocketProvider
was removed in favor ofK8s.Client.DynamcHTTPProvider.websocket*
functions.- The
:stream_to
inhttp_opts
is not supported anymore. UseK8s.Client.stream/N
andK8s.Client.stream_to/N
instead. - Errors are encapsulated in
K8s.Client.HTTPError
headers/1
callback was removed fromK8s.Client.Provider
behaviour.K8s.Client.HTTPProvider
(HTTPoison implementation) was removed.K8s.Client.watch/N
now returns a:watch
or:watch_all_namespaces
operation to be passed toK8s.Client.stream/N
Fixed
- Update
PKI.cert_from_map/2
to support fully qualified domain names (FQDN) - Fix forK8s.Conn.from_file/1
(#164)
[2.0.0-rc.6] - 2023-01-19
Fixed
- Unable to parse response (invalid JSON) (#215)
[2.0.0-rc.5] - 2023-01-08
Changed
K8s.Client.Mint.HTTPAdapter
- Handle Elixir streams separately fromstream_to
.
[2.0.0-rc.4] - 2023-01-07
Added
:poolboy
- Pooling for HTTP/1 connectionsK8s.Client.Mint.HTTPAdapter
- Monitor caller and cleanup state upon:DOWN
[2.0.0-rc.3] - 2023-01-01
Fixed
K8s.Client.Mint.ConnectionRegistry
- closed connections were not re-established.K8s.Client.Mint.Request.HTTP
- Add missing struct field:waiting
[2.0.0-rc.2] - 2022-12-31
Added
K8s.Client.Mint.HTTPAdapter
- A GenServer handlingMint.HTTP
connections.K8s.Client.Mint.ConnectionRegistry
- The registry for openHTTP/2
connections
[2.0.0-rc.1] - 2022-12-19
Fixed
K8s.Client.Mint.WebSocket
- Close websocket if process is terminated
[2.0.0-rc.0] - 2022-12-14
This version comes with some breaking changes. Please refer to the migrations guide for help on how to migrate your projects to this version.
Added
K8s.Selector.label_not/N
,K8s.Selector.field/N
andK8s.Selector.field_not/N
- Support for field selectors (#117)K8s.Client.Provider.stream/5
callback was added to the behaviourK8s.Client.Runner.Base.stream/3
K8s.Client.Provider.stream_to/6
callback was added to the behaviourK8s.Client.Runner.Base.stream_to/4
K8s.Client.MintHTTPProvider
- The mint client implementationK8s.Client.HTTPTestHelper
- to be used in tests (resides inlib/
so it can be used by dependents)- Open
:connect
operations (connections) now accept messages to be sent to pods K8s.Client.put_conn/2
to add pielining support to the Client API
Changed
K8s.Client.Provider
behaviour was adapted to the new internal architectureK8s.Client.watch/N
now returns a:watch
or:watch_all_namespaces
operation to be passed toK8s.Client.stream/N
Websockex
was replaced byMint.WebSocket
Removed
K8s.Client.HTTPProvider
was removed in favor ofK8s.Client.MintHTTPProvider
- The
:stream_to
inhttp_opts
was removed in favor ofK8s.Client.stream_to/N
andK8s.Client.stream/N
. K8s.Client.DynamicWebSocketProvider
was removed. UseK8s.Client.DynamcHTTPProvider.websocket*
functions instead .
Breaking changes
- Tests using the
DynamicHTTPProvider
which work withwatch_and_stream
are going to need to be changed. The HTTP mocks now need to implement thestream/5
callback. (SeeK8s.Client.Runner.Watch.StreamTest
on this branch for examples)d. K8s.Client.DynamicWebSocketProvider
was removed in favor ofK8s.Client.DynamcHTTPProvider.websocket*
functions.- The
:stream_to
inhttp_opts
is not supported anymore. UseK8s.Client.stream/N
andK8s.Client.stream_to/N
instead. - Errors are encapsulated in
K8s.Client.HTTPError
headers/1
callback was removed fromK8s.Client.Provider
behaviour.K8s.Client.HTTPProvider
(HTTPoison implementation) was removed.K8s.Client.watch/N
now returns a:watch
or:watch_all_namespaces
operation to be passed toK8s.Client.stream/N
Fixed
- Update
PKI.cert_from_map/2
to support fully qualified domain names (FQDN) - Fix forK8s.Conn.from_file/1
(#164)
[1.2.0] - 2022-12-07
Added
K8s.Selector.label_not/N
,K8s.Selector.field/N
andK8s.Selector.field_not/N
- Support for field selectors (#117)K8s.Client.connect/3
- Executes a command in a Pod #190
[1.1.10] - 2022-10-30
Fixed
K8s.Client.run/2
: spec updated to includeK8s.Discovery.Error.t/0
in possible error structs
[1.1.9] - 2022-10-28
Fixed
K8s.Client.run/2
: spec updated to includeK8s.Client.APIError.t/0
in possible error structs (#189)K8s.Operation.Path.build/1
: Allow namespace to benil
[1.1.8] - 2022-10-26
Fixed
K8s.Client.watch_and_stream/2
: Get resource vesrion before creating the Stream resource in order to not miss anything. (#187)
[1.1.7] - 2022-10-15
Fixed
- Fix protocol implementations in Elixir 1.14.1: Replace
__MODULE__
with actual module name. #185 - Match subresources when the kind does not equal the subresource (#184)
[1.1.6] - 2022-10-03
Fixed
K8s.Resourse.label/2
: spec updated to accept label maps as a second argument #177K8s.Discovery.Driver.File
: Useconn.discovery_opts
in file discovery driver (#180)K8s.Client.DynamicHTTPProvider.request/5
: Fix converting PID to string inside error message (#181)
[1.1.5] - 2022-05-19
Fixed
K8s.Client.watch_and_stream/2
: 410 Gone not rescued #159K8s.Client.watch/3
:get
operations should be transformed tolist
BEFORE retrieving the resource version #160
Changed
K8s.Client.watch_and_stream/2
: Request BOOKMARK events and process them when watching resource collections. #159
[1.1.4] - 2022-03-15
- Fix more authorization headers that are not keyword lists #148
[1.1.3] - 2022-03-13
Fixed
- Fix default value in
K8s.Client.Runner.Watch.run/4
andK8s.Client.Runner.Watch.stream/3
[1.1.2] - 2022-03-13
Fixed
- Support for FQDN K8s API servers and Root CA chains #144
- Wrong exception raised by
K8s.Resource.from_file!/2
#137, #143 K8s.Client.Runner.Watch.stream/3
- convert:get
to:list
operation with field selector.- Make Logger metadata
library: :k8s
available at compile time.
[1.1.1] - 2022-03-01
Fixed
- Initialize authorization header as valid keyword list #142
- Restore deprecated
K8s.Sys.Event
module.
[1.1.0] - 2022-02-21
Added
K8s.Client.Runner.Watch.stream/3
- watches a resource and returns an elixir Stream of events #121K8s.Client.apply/2
- Create a server-side apply operation
Changed
- Handle generic kubernetes response Failure without a reason #120
- Replace Notion with Telemetry and improve Logging #128
Deprecated
K8s.Client.HTTPProvider.headers/2
was deprecated in favor ofK8s.Client.HTTPProvider.headers/1
K8s.Client.DynamicHTTPProvider.headers/2
was deprecated in favor ofK8s.Client.DynamicHTTPProvider.headers/1
Fixed
- Preserve namespace in
get_to_list/1
#122, #123 - Fix obsolete doc on wait operation #118
- Dialyzer errors with K8s.Client functions #119
- Enable peer certificate authentication #127. Be aware, this will break configurations that have been using incorrect certificate(s) up to this point.
[1.0.0] - 2021-07-19
Added
K8s.Resource.NamedList.access!/1
raises if item is missing- K8s.Operation.put_label_selector/2
- K8s.Operation.get_label_selector/1
- Per connection http provider configuration
- K8s.Operation now uses keyword lists for query_params instead of maps
Changed
- error tuples refactored away from binary and atom to exception modules
- removed dialyzer exceptions
K8s.Conn.from_file/2
now returns an ok or error tupleK8s.Conn.from_service_account/N
now returns an ok or error tupleK8s.Conn.t()
is now the first argument in all runners.K8s.Operation.t()
is now the second.- deprecated K8s.http_provider/0
- deprecated K8s.Discovery.default_opts/0
- deprecated K8s.Discovery.default_driver/0
- Refactored cluster names to strings
K8s.Resource.NamedList.access/1
deals better with missing items now- Removed K8s.Client.run/4, use
K8s.Client.run/3
to pass options to HTTP provider - Middleware moved to K8s.Conn.Middleware
Removed
- K8s.Conn.lookup/1
- config.exs based cluster registration is no longer supported, build K8s.Conn using K8s.Conn module
- environment variable based cluster registration has been removed and may be moved to an external library
[0.5.2] - 2020-07-31
Added
- Added auth
exec
support
[0.5.1] - 2020-07-17
Added
- K8s.Operation struct
query_params
field - BasicAuth auth provider
- Deprecated HTTPoison options being passed to K8s.Client.Runner.base
- K8s.Operation.put_query_param/3 to add query parameters by key
- K8s.Operation.get_query_param/3 to get a query parameter by key
- DigitalOcean authentication
K8s.Resource.NamedList.access/1
- Accessor for lists with named items (containers, env, ...) (#82)
Changed
- Refactored old references to
cluster_name
toconn
[0.5.0] - 2020-02-12
Added
- #42 Request middleware support
- #43 Just in time discovery: K8s.Discovery
- #44 Support for ad-hoc connections. K8s.Conn based functions. Build your own Conn at runtime or config mix/env vars. No more Cluster registry.
- K8s.Resource.from_file/2 and K8s.Resource.all_from_file/2 - non-exception versions
Removed
- Boot time discovery K8s.Cluster.Discovery
- K8s.Cluster.base_url/1
- Remove K8s.Cluster*
[0.4.0] - 2019-08-29
Changed
- Renamed
K8s.Conf
toK8s.Conn
- Refactored
:conf
configuration key to:conn
[0.3.2] - 2019-08-15
Added
K8s.Selector.match_expressions?/2
to check if a resource matches expressionsK8s.Selector.match_labels?/2
to check if a resource matches labels
Changed
K8s.Resource
functions moved to submodule
[0.3.1] - 2019-08-15
Added
- text/plain response handling
- K8s.Selector - labelSelector support for K8s.Operation
[0.3.0] - 2019-07-29
Added
K8s.Client.DynamicHTTPProvider
to allow per-process registering of HTTP request handlers.K8s.Cluster.Discovery
discovery interfaceK8s.Cluster.Discovery.api_versions/1
- queries a cluster for all apiVersionsK8s.Cluster.Discovery.resource_definitions/1
- queries a cluster for all resource definitionsK8s.Cluster.Discovery.HTTPDriver
for discovery via k8s REST APIK8s.Cluster.Discovery.FileDriver
for discovery via a file, used for testing, shipped to help dependent libraries mock discovery- Support for creating subresources
- Support for getting subresources
- Support for updating subresources
Changed
- Refactored tests on DynamicHTTPProvider
- Refactored discovery to use
K8s.Cluster.Discovery
- Set correct content-type for patch operations (https://github.com/coryodaniel/k8s/issues/32)
- Refactored Operation.kind -> Operation.name
- Group.cluster_key/2 -> Group.lookup_key/2
- K8s.Cluster.Group :ets data structure changed to map
- K8s.Cluster.Group module encompases access to :ets table
- Refactored Operation.resource -> Operation.data. The term
resource
is a bit overloaded in this repo, since the operation is encapsulating the HTTP request,data
feels a bit more clear. - Refactored internal references to "group version" to "api version"
[0.2.13] - 2019-06-27
Added
- K8s.Cluster.base_url/1
[0.2.12] - 2019-06-26
Added
- First K8s.Client.Runner.Stream evaluation made lazy
- K8s.Resource.api_version/1
[0.2.11] - 2019-06-24
Added
- K8s.Resource.cpu/1 parses cpu resource requests/limits strings to number
- K8s.Resource.memory/1 parses cpu resource requests/limits strings to number
[0.2.10] - 2019-06-24
Added
- K8s.Client.Runner.Stream for producing elixir streams from k8s list results
- K8s 1.15 swagger file
Changed
- Reversed pattern matching in functions from
var=pattern
topattern=var
- Added make target for fetching master swagger before running tests
[0.2.9] - 2019-06-10
Added
- Kubernetes resources, groups, and CRDs are autodiscovered at boot time. No swagger file to include or override.
- Client supports standard HTTP calls, async batches, wait on status, and watchers
- Supports multiple clusters
- Supports multiple kubernetes APIs in the same runtime
- serviceaccount authentication
- token authentication
- certificate authentication
- auth-provider authetnicati
- Tested against kubernetes swagger specs: 1.10+ and master
- CRD support
- Kubernetes resource and version helper functions
- Kube config file parsing
- Pluggable auth providers