Kubernetes-REST
view release on metacpan or search on metacpan
t/06_examples.t view on Meta::CPAN
is($c->readinessProbe->periodSeconds, 5, 'readiness period');
# Volumes
my $vols = $tmpl->spec->volumes;
is(scalar @$vols, 2, 'two volumes');
is($vols->[0]->name, 'config-volume', 'volume[0] name');
ok($vols->[0]->configMap, 'volume from configMap');
is($vols->[1]->name, 'data-volume', 'volume[1] name');
ok($vols->[1]->persistentVolumeClaim, 'volume from PVC');
# Serialization roundtrip
my $json_data = $deploy->TO_JSON;
is($json_data->{apiVersion}, 'apps/v1', 'TO_JSON apiVersion');
is($json_data->{kind}, 'Deployment', 'TO_JSON kind');
my $rt = $api->inflate($json_data);
is($rt->metadata->name, 'my-app', 'roundtrip name');
is($rt->spec->replicas, 2, 'roundtrip replicas');
};
# === Service (NodePort) ===
subtest 'Example: Service' => sub {
my $svc = $api->new_object(Service =>
metadata => {
name => 'my-app',
namespace => 'perl-test',
},
spec => {
type => 'NodePort',
selector => { app => 'my-app' },
ports => [{
port => 80,
targetPort => 80,
protocol => 'TCP',
}],
},
);
ok($svc, 'Service created');
is($svc->metadata->name, 'my-app', 'name');
is($svc->kind, 'Service', 'kind');
is($svc->api_version, 'v1', 'apiVersion');
is($svc->spec->type, 'NodePort', 'type');
is(scalar @{$svc->spec->ports}, 1, 'one port');
is($svc->spec->ports->[0]->port, 80, 'port number');
is($svc->spec->ports->[0]->protocol, 'TCP', 'protocol');
};
# === Job ===
subtest 'Example: Job' => sub {
my $job = $api->new_object(Job =>
metadata => {
name => 'batch-job',
namespace => 'perl-test',
},
spec => {
backoffLimit => 2,
template => {
spec => {
restartPolicy => 'Never',
containers => [{
name => 'worker',
image => 'busybox:latest',
command => ['sh', '-c', 'echo "done"; exit 0'],
}],
},
},
},
);
ok($job, 'Job created');
is($job->metadata->name, 'batch-job', 'name');
is($job->kind, 'Job', 'kind');
is($job->api_version, 'batch/v1', 'apiVersion');
is($job->spec->backoffLimit, 2, 'backoffLimit');
is($job->spec->template->spec->restartPolicy, 'Never', 'restartPolicy');
is($job->spec->template->spec->containers->[0]->name, 'worker', 'container name');
};
# === CronJob ===
subtest 'Example: CronJob' => sub {
my $cron = $api->new_object(CronJob =>
metadata => {
name => 'scheduled-job',
namespace => 'perl-test',
},
spec => {
schedule => '*/5 * * * *',
jobTemplate => {
spec => {
template => {
spec => {
restartPolicy => 'OnFailure',
containers => [{
name => 'worker',
image => 'busybox:latest',
command => ['sh', '-c', 'date'],
}],
},
},
},
},
},
);
ok($cron, 'CronJob created');
is($cron->metadata->name, 'scheduled-job', 'name');
is($cron->kind, 'CronJob', 'kind');
is($cron->api_version, 'batch/v1', 'apiVersion');
is($cron->spec->schedule, '*/5 * * * *', 'schedule');
my $inner = $cron->spec->jobTemplate->spec->template->spec;
is($inner->restartPolicy, 'OnFailure', 'inner restartPolicy');
is($inner->containers->[0]->name, 'worker', 'inner container name');
};
# === RBAC Role ===
subtest 'Example: Role' => sub {
my $role = $api->new_object(Role =>
metadata => {
name => 'pod-reader',
namespace => 'perl-test',
},
rules => [{
apiGroups => [''],
resources => ['pods'],
verbs => ['get', 'list', 'watch'],
}],
);
ok($role, 'Role created');
is($role->metadata->name, 'pod-reader', 'name');
is($role->kind, 'Role', 'kind');
is($role->api_version, 'rbac.authorization.k8s.io/v1', 'apiVersion');
is(scalar @{$role->rules}, 1, 'one rule');
is_deeply($role->rules->[0]->verbs, ['get', 'list', 'watch'], 'verbs');
is_deeply($role->rules->[0]->resources, ['pods'], 'resources');
};
# === RBAC RoleBinding ===
subtest 'Example: RoleBinding' => sub {
my $binding = $api->new_object(RoleBinding =>
metadata => {
name => 'read-pods',
namespace => 'perl-test',
},
roleRef => {
apiGroup => 'rbac.authorization.k8s.io',
kind => 'Role',
name => 'pod-reader',
},
subjects => [{
kind => 'ServiceAccount',
name => 'default',
namespace => 'perl-test',
}],
);
ok($binding, 'RoleBinding created');
is($binding->metadata->name, 'read-pods', 'name');
( run in 1.249 second using v1.01-cache-2.11-cpan-39bf76dae61 )