Kubernetes-REST
view release on metacpan or search on metacpan
lib/Kubernetes/REST/CLI.pm view on Meta::CPAN
default => sub { 'default' },
doc => 'Namespace for namespaced resources',
);
option output => (
is => 'ro',
format => 's',
short => 'o',
default => sub { 'json' },
doc => 'Output format: json, yaml, name',
);
has json => (
is => 'ro',
default => sub { JSON::MaybeXS->new->pretty->canonical },
);
sub format_output {
my ($self, $result) = @_;
return unless defined $result;
my $format = $self->output;
if ($format eq 'json') {
my $data = ref($result) && $result->can('TO_JSON') ? $result->TO_JSON : $result;
print $self->json->encode($data);
} elsif ($format eq 'yaml') {
require YAML::XS;
my $data = ref($result) && $result->can('TO_JSON') ? $result->TO_JSON : $result;
print YAML::XS::Dump($data);
} elsif ($format eq 'name') {
if (ref($result) && $result->can('items')) {
for my $item (@{$result->items // []}) {
my $meta = $item->metadata;
my $ns = $meta->namespace ? $meta->namespace . '/' : '';
print $ns, $meta->name, "\n";
}
} elsif (ref($result) && $result->can('metadata')) {
my $meta = $result->metadata;
my $ns = $meta->namespace ? $meta->namespace . '/' : '';
print $ns, $meta->name, "\n";
}
} else {
require Data::Dumper;
print Data::Dumper::Dumper($result);
}
}
sub execute {
my ($self, $args, $chain) = @_;
print "Usage: kube_client <command> [options]\n\n";
print "Commands:\n";
print " get <Kind> [name] Get resource(s)\n";
print " create -f <file> Create resource from file\n";
print " delete <Kind> <name> Delete resource\n";
print " raw <Group> <Method> Raw API call\n";
print "\nRun 'kube_client --help' for options.\n";
print "See also: kube_watch <Kind> for live event streaming.\n";
return 0;
}
1;
package Kubernetes::REST::CLI::Cmd::Get;
our $VERSION = '1.003';
use Moo;
use MooX::Cmd;
sub execute {
my ($self, $args, $chain) = @_;
my $root = $chain->[0];
my ($kind, $name) = @$args;
unless ($kind) {
print STDERR "Usage: kube_client get <Kind> [name]\n";
return 1;
}
my $result;
if ($name) {
$result = $root->api->get($kind, $name, namespace => $root->namespace);
} else {
$result = $root->api->list($kind, namespace => $root->namespace);
}
$root->format_output($result);
return 0;
}
1;
package Kubernetes::REST::CLI::Cmd::Create;
our $VERSION = '1.003';
use Moo;
use MooX::Options;
use MooX::Cmd;
option file => (
is => 'ro',
format => 's',
short => 'f',
doc => 'File to read (- for stdin)',
default => sub { '-' },
);
sub execute {
my ($self, $args, $chain) = @_;
my $root = $chain->[0];
my $input;
if ($self->file eq '-') {
local $/;
$input = <STDIN>;
} else {
open my $fh, '<', $self->file or die "Cannot open " . $self->file . ": $!";
( run in 0.612 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )