Kubernetes-REST
view release on metacpan or search on metacpan
.claude/skills/perl-kubernetes-rest/SKILL.md view on Meta::CPAN
---
name: perl-kubernetes-rest
description: "Kubernetes::REST â How to talk to the Kubernetes API from Perl"
user-invocable: false
allowed-tools: Read, Grep, Glob
model: sonnet
---
# Kubernetes::REST â K8s API Client for Perl
## Connect
```perl
my $api = Kubernetes::REST->new(
server => { endpoint => 'https://k8s.local:6443' },
credentials => { token => $token },
);
# With SSL options
my $api = Kubernetes::REST->new(
server => {
endpoint => 'https://k8s.local:6443',
ssl_verify_server => 1,
ssl_ca_file => '/path/to/ca.crt',
},
credentials => { token => $token },
);
```
## CRUD
```perl
# List â returns IO::K8s::List object
my $list = $api->list('Pod', namespace => 'default', labelSelector => 'app=web');
for my $pod ($list->items->@*) { say $pod->metadata->name }
# Get
my $pod = $api->get('Pod', 'my-pod', namespace => 'default');
# Create â pass IO::K8s object
my $ns = $api->new_object(Namespace => { metadata => { name => 'foo' } });
my $created = $api->create($ns);
# Update (PUT â full replacement)
$pod->metadata->labels({ app => 'updated' });
my $updated = $api->update($pod);
# Patch (partial: strategic/merge/json)
my $patched = $api->patch('Pod', 'my-pod',
namespace => 'default',
patch => { metadata => { labels => { env => 'staging' } } },
type => 'strategic', # default
);
# or with object:
$api->patch($pod, patch => { ... });
# Delete
$api->delete($pod);
$api->delete('Pod', 'my-pod', namespace => 'default');
```
All return typed IO::K8s objects (not hashrefs). Lists return IO::K8s::List.
## Watch
```perl
my $last_rv = $api->watch('Pod',
namespace => 'default',
timeout => 300,
resourceVersion => '12345',
labelSelector => 'app=web',
on_event => sub {
my ($event) = @_; # Kubernetes::REST::WatchEvent
say $event->type; # ADDED, MODIFIED, DELETED
say $event->object->metadata->name; # Typed IO::K8s object
},
);
# Returns last resourceVersion for resumable watches
```
## Log
( run in 0.494 second using v1.01-cache-2.11-cpan-524268b4103 )