Net-Async-Kubernetes

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN


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`

META.json  view on Meta::CPAN

            "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.yml  view on Meta::CPAN

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
);


cpanfile  view on Meta::CPAN

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 )