Net-Async-Kubernetes
view release on metacpan or search on metacpan
0.007 2026-04-15 18:21:50Z
- Add `Net::Async::Kubernetes::Controller` as a minimal controller runtime.
Provides watch registration, keyed workqueue deduplication, serialized
reconcile dispatch, retry hooks, and small helpers for object reload and
status subresource patch/update.
- Add `$kube->controller(...)` factory to bind controller runtimes directly
to an existing async Kubernetes client.
- Fix async TLS handling for kubeconfigs with inline CA/client PEM data by
materializing PEM content to temporary files before passing SSL options to
Net::Async::HTTP / IO::Socket::SSL. This unblocks mTLS-authenticated async
clients and controller runtimes against real clusters using embedded certs.
- Add active `exec()` API that builds Kubernetes pod exec requests
(`/exec` subresource) and delegates to the websocket duplex transport.
Supports command, container, stdin/stdout/stderr/tty toggles, and
subprotocol override.
- Add active `attach()` API that builds Kubernetes pod attach requests
(`/attach` subresource) and delegates to the websocket duplex transport.
Supports container, stdin/stdout/stderr/tty toggles, and subprotocol
override.
- Extend `Net::Async::Kubernetes::PortForwardSession` with `write_stdin`
"Test::Pod" : "1.41"
}
},
"runtime" : {
"requires" : {
"Future" : "0.47",
"IO::Async" : "0.80",
"IO::Async::Loop" : "0",
"IO::Async::Notifier" : "0",
"IO::K8s" : "1.008",
"IO::Socket::SSL" : "0",
"Kubernetes::REST" : "1.102",
"Net::Async::HTTP" : "0.49",
"Net::Async::WebSocket::Client" : "0.14",
"Protocol::WebSocket::Request" : "0",
"URI" : "0",
"perl" : "5.020"
}
},
"test" : {
"requires" : {
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: Net-Async-Kubernetes
requires:
Future: '0.47'
IO::Async: '0.80'
IO::Async::Loop: '0'
IO::Async::Notifier: '0'
IO::K8s: '1.008'
IO::Socket::SSL: '0'
Kubernetes::REST: '1.102'
Net::Async::HTTP: '0.49'
Net::Async::WebSocket::Client: '0.14'
Protocol::WebSocket::Request: '0'
URI: '0'
perl: '5.020'
resources:
IRC: irc://irc.perl.org/#kubernetes
IRC_user: Getty
bugtracker: https://github.com/Getty/p5-net-async-kubernetes/issues
Makefile.PL view on Meta::CPAN
"DISTNAME" => "Net-Async-Kubernetes",
"LICENSE" => "perl",
"MIN_PERL_VERSION" => "5.020",
"NAME" => "Net::Async::Kubernetes",
"PREREQ_PM" => {
"Future" => "0.47",
"IO::Async" => "0.80",
"IO::Async::Loop" => 0,
"IO::Async::Notifier" => 0,
"IO::K8s" => "1.008",
"IO::Socket::SSL" => 0,
"Kubernetes::REST" => "1.102",
"Net::Async::HTTP" => "0.49",
"Net::Async::WebSocket::Client" => "0.14",
"Protocol::WebSocket::Request" => 0,
"URI" => 0
},
"TEST_REQUIRES" => {
"Test::Exception" => 0,
"Test::More" => "0.98"
},
Makefile.PL view on Meta::CPAN
}
);
my %FallbackPrereqs = (
"Future" => "0.47",
"IO::Async" => "0.80",
"IO::Async::Loop" => 0,
"IO::Async::Notifier" => 0,
"IO::K8s" => "1.008",
"IO::Socket::SSL" => 0,
"Kubernetes::REST" => "1.102",
"Net::Async::HTTP" => "0.49",
"Net::Async::WebSocket::Client" => "0.14",
"Protocol::WebSocket::Request" => 0,
"Test::Exception" => 0,
"Test::More" => "0.98",
"URI" => 0
);
requires 'perl', '5.020';
requires 'IO::Async', '0.80';
requires 'IO::Async::Loop';
requires 'IO::Async::Notifier';
requires 'Net::Async::HTTP', '0.49';
requires 'Net::Async::WebSocket::Client', '0.14';
requires 'Future', '0.47';
requires 'URI';
requires 'IO::Socket::SSL';
requires 'Protocol::WebSocket::Request';
requires 'Kubernetes::REST', '1.102';
requires 'IO::K8s', '1.008';
on test => sub {
requires 'Test::More', '0.98';
requires 'Test::Exception';
};
lib/Net/Async/Kubernetes.pm view on Meta::CPAN
package Net::Async::Kubernetes;
# ABSTRACT: Async Kubernetes client for IO::Async
our $VERSION = '0.007';
use strict;
use warnings;
use parent 'IO::Async::Notifier';
use Carp qw(croak);
use Scalar::Util qw(blessed);
use IO::Socket::SSL;
use File::Temp ();
use Future;
use URI;
use Protocol::WebSocket::Request;
use Kubernetes::REST;
use Kubernetes::REST::Server;
use Kubernetes::REST::AuthToken;
use Kubernetes::REST::HTTPRequest;
use Kubernetes::REST::HTTPResponse;
use Kubernetes::REST::WatchEvent;
t/04-ssl-options.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use IO::Socket::SSL;
use Net::Async::Kubernetes;
use Kubernetes::REST::Server;
use Kubernetes::REST::AuthToken;
# ============================================================================
# SSL options with full config
# ============================================================================
subtest 'ssl options with all certs' => sub {
my $kube = Net::Async::Kubernetes->new(
( run in 0.703 second using v1.01-cache-2.11-cpan-39bf76dae61 )