Net-Async-Kubernetes
view release on metacpan or search on metacpan
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;
use Kubernetes::REST::LogEvent;
sub configure {
my ($self, %params) = @_;
if (exists $params{kubeconfig}) {
$self->{kubeconfig} = delete $params{kubeconfig};
}
if (exists $params{context}) {
$self->{context} = delete $params{context};
}
if (exists $params{server}) {
my $val = delete $params{server};
$self->{server} = (blessed($val) && $val->isa('Kubernetes::REST::Server'))
? $val
: Kubernetes::REST::Server->new($val);
}
if (exists $params{credentials}) {
my $val = delete $params{credentials};
if (blessed($val) && $val->can('token')) {
$self->{credentials} = $val;
} elsif (ref($val) eq 'HASH') {
$self->{credentials} = Kubernetes::REST::AuthToken->new($val);
} else {
$self->{credentials} = $val;
}
}
if (exists $params{resource_map}) {
$self->{resource_map} = delete $params{resource_map};
}
if (exists $params{resource_map_from_cluster}) {
$self->{resource_map_from_cluster} = delete $params{resource_map_from_cluster};
}
# Resolve server/credentials via Kubeconfig (handles kubeconfig files
# and in-cluster service account auto-detection)
if (!$self->{server}) {
require Kubernetes::REST::Kubeconfig;
my $kc = Kubernetes::REST::Kubeconfig->new(
($self->{kubeconfig} ? (kubeconfig_path => $self->{kubeconfig}) : ()),
($self->{context} ? (context_name => $self->{context}) : ()),
);
if ($self->{kubeconfig}) {
# Explicit kubeconfig â must resolve or croak
my $api = $kc->api;
$self->{server} = $api->server;
$self->{credentials} = $api->credentials;
} elsif (my $api = eval { $kc->api }) {
# Auto-detect: kubeconfig default path or in-cluster
$self->{server} = $api->server;
( run in 1.319 second using v1.01-cache-2.11-cpan-39bf76dae61 )