Net-Async-Kubernetes

 view release on metacpan or  search on metacpan

eg/demo.pl  view on Meta::CPAN

            labels    => { app => 'demo-app', type => 'batch' },
        },
        spec => {
            backoffLimit            => 2,
            ttlSecondsAfterFinished => 300,
            template => {
                spec => {
                    restartPolicy => 'Never',
                    containers => [{
                        name    => 'worker',
                        image   => 'busybox:latest',
                        command => ['sh', '-c',
                            'echo "Job started at $(date)"; '
                            . 'echo "Processing items..."; '
                            . 'for i in 1 2 3 4 5; do echo "  Item $i done"; sleep 1; done; '
                            . 'echo "Job completed at $(date)"'
                        ],
                        resources => {
                            requests => { cpu => '25m', memory => '16Mi' },
                            limits   => { cpu => '50m', memory => '32Mi' },
                        },

eg/demo.pl  view on Meta::CPAN

            schedule                   => '*/1 * * * *',
            successfulJobsHistoryLimit => 2,
            failedJobsHistoryLimit     => 1,
            jobTemplate => {
                spec => {
                    template => {
                        spec => {
                            restartPolicy => 'OnFailure',
                            containers => [{
                                name    => 'cron-worker',
                                image   => 'busybox:latest',
                                command => ['sh', '-c', 'echo "Cron tick at $(date)"'],
                                resources => {
                                    requests => { cpu => '10m', memory => '8Mi' },
                                    limits   => { cpu => '25m', memory => '16Mi' },
                                },
                            }],
                        },
                    },
                },
            },

eg/demo.pl  view on Meta::CPAN

            labels    => { app => 'demo-app', component => 'utility' },
            annotations => {
                'purpose' => 'Demonstrates ConfigMap + Secret access from a pod',
            },
        },
        spec => {
            serviceAccountName => 'demo-sa',
            restartPolicy => 'Never',
            containers => [{
                name    => 'util',
                image   => 'busybox:latest',
                command => ['sh', '-c', join('; ',
                    'echo "=== Environment ==="',
                    'echo "APP_ENV=$APP_ENV"',
                    'echo "LOG_LEVEL=$LOG_LEVEL"',
                    'echo "DB_HOST=$DB_HOST"',
                    'echo ""',
                    'echo "=== Config Files ==="',
                    'echo "nginx.conf:"',
                    'cat /config/nginx.conf',
                    'echo ""',

t/10-dual-crud.t  view on Meta::CPAN


subtest 'create Job' => sub {
    unless (is_live()) {
        MockTransport::mock_response('POST',
            "/apis/batch/v1/namespaces/$NS/jobs", {
            kind => 'Job', apiVersion => 'batch/v1',
            metadata => { name => 'demo-job', namespace => $NS,
                          uid => 'job-uid-001', creationTimestamp => '2025-01-01T00:00:00Z' },
            spec => { backoffLimit => 2,
                      template => { spec => { restartPolicy => 'Never',
                        containers => [{ name => 'worker', image => 'busybox:latest' }] } } },
            status => {},
        });
    }
    my $job = $kube->_rest->new_object(Job =>
        metadata => { name => 'demo-job', namespace => $NS },
        spec => { backoffLimit => 2,
                  template => { spec => { restartPolicy => 'Never',
                    containers => [{ name => 'worker', image => 'busybox:latest',
                                     command => ['echo', 'hello'] }] } } },
    );
    my $created = $kube->create($job)->get;
    ok($created, 'Job created');
    is($created->metadata->name, 'demo-job', 'name matches');
};

subtest 'create CronJob' => sub {
    unless (is_live()) {
        MockTransport::mock_response('POST',
            "/apis/batch/v1/namespaces/$NS/cronjobs", {
            kind => 'CronJob', apiVersion => 'batch/v1',
            metadata => { name => 'demo-cronjob', namespace => $NS,
                          uid => 'cj-uid-001', creationTimestamp => '2025-01-01T00:00:00Z' },
            spec => { schedule => '*/5 * * * *',
                      jobTemplate => { spec => { template => { spec => {
                        restartPolicy => 'OnFailure',
                        containers => [{ name => 'cron', image => 'busybox:latest' }] } } } } },
        });
    }
    my $cj = $kube->_rest->new_object(CronJob =>
        metadata => { name => 'demo-cronjob', namespace => $NS },
        spec => { schedule => '*/5 * * * *',
                  jobTemplate => { spec => { template => { spec => {
                    restartPolicy => 'OnFailure',
                    containers => [{ name => 'cron', image => 'busybox:latest',
                                     command => ['echo', 'tick'] }] } } } } },
    );
    my $created = $kube->create($cj)->get;
    ok($created, 'CronJob created');
    is($created->metadata->name, 'demo-cronjob', 'name matches');
};

# ============================================================================
# List resources
# ============================================================================



( run in 0.607 second using v1.01-cache-2.11-cpan-39bf76dae61 )