Kubernetes-REST
view release on metacpan or search on metacpan
lib/Kubernetes/REST.pm view on Meta::CPAN
my $class = $self->expand_class($short_class);
my $path = $self->_build_path($class, %args);
my %params;
$params{labelSelector} = $label_selector if defined $label_selector;
$params{fieldSelector} = $field_selector if defined $field_selector;
my $response = %params
? $self->_request('GET', $path, undef, parameters => \%params)
: $self->_request('GET', $path);
$self->_check_response($response, "list $short_class");
return $self->_inflate_list($class, $response);
}
sub get {
my ($self, $short_class, @rest) = @_;
# Support: get('Kind', 'name'), get('Kind', 'name', namespace => 'ns'),
# get('Kind', name => 'name'), get('Kind', name => 'name', namespace => 'ns')
my %args;
if (@rest == 1) {
$args{name} = $rest[0];
} elsif (@rest >= 2 && $rest[0] !~ /^(name|namespace)$/) {
# First arg is name, rest are key=value pairs
$args{name} = shift @rest;
%args = (%args, @rest);
} elsif (@rest % 2 == 0) {
%args = @rest;
} else {
croak "Invalid arguments to get()";
}
my $class = $self->expand_class($short_class);
croak "name required for get" unless $args{name};
my $path = $self->_build_path($class, %args);
my $response = $self->_request('GET', $path);
$self->_check_response($response, "get $short_class");
return $self->_inflate_object($class, $response);
}
sub create {
my ($self, $object) = @_;
my $class = ref($object);
my $namespace = $object->can('metadata') && $object->metadata
? $object->metadata->namespace
: undef;
my $path = $self->_build_path($class, namespace => $namespace);
my $response = $self->_request('POST', $path, $object->TO_JSON);
$self->_check_response($response, "create " . ref($object));
return $self->_inflate_object($class, $response);
}
sub update {
my ($self, $object) = @_;
my $class = ref($object);
my $metadata = $object->metadata or croak "object must have metadata";
my $name = $metadata->name or croak "object must have metadata.name";
my $namespace = $metadata->namespace;
my $path = $self->_build_path($class, name => $name, namespace => $namespace);
my $response = $self->_request('PUT', $path, $object->TO_JSON);
$self->_check_response($response, "update " . ref($object));
return $self->_inflate_object($class, $response);
}
my %PATCH_TYPES = (
strategic => 'application/strategic-merge-patch+json',
merge => 'application/merge-patch+json',
json => 'application/json-patch+json',
);
sub patch {
my ($self, $class_or_object, @rest) = @_;
my ($class, $name, $namespace, $patch, $patch_type);
if (ref($class_or_object) && blessed($class_or_object)) {
# Object passed: patch($object, patch => {...})
my $object = $class_or_object;
$class = ref($object);
my $metadata = $object->metadata or croak "object must have metadata";
$name = $metadata->name or croak "object must have metadata.name";
$namespace = $metadata->namespace;
my %args = @rest;
$patch = $args{patch} // croak "patch requires 'patch' parameter";
$patch_type = $args{type} // 'strategic';
} else {
# Class + name: patch('Pod', 'name', namespace => 'ns', patch => {...})
my %args;
if (@rest >= 1 && !ref($rest[0]) && $rest[0] !~ /^(name|namespace|patch|type)$/) {
$args{name} = shift @rest;
%args = (%args, @rest);
} elsif (@rest % 2 == 0) {
%args = @rest;
} else {
croak "Invalid arguments to patch()";
}
$class = $self->expand_class($class_or_object);
$name = $args{name} or croak "name required for patch";
$namespace = $args{namespace};
$patch = $args{patch} // croak "patch requires 'patch' parameter";
$patch_type = $args{type} // 'strategic';
}
my $content_type = $PATCH_TYPES{$patch_type}
// croak "Unknown patch type '$patch_type' (use: strategic, merge, json)";
my $path = $self->_build_path($class, name => $name, namespace => $namespace);
( run in 0.855 second using v1.01-cache-2.11-cpan-e1769b4cff6 )