#!/usr/bin/perl
use strict;
use warnings;

use File::Basename qw(dirname);
use lib dirname(__FILE__).'/../lib';
use JSON;
use Overcast::Common;

sub list_node_selectors {
    my $json = `kubectl get deployments,statefulsets,daemonsets -n overcast -o json`;
    die "Fetching k8s objects failed\n" if not $json or $?;
    $json = eval { decode_json $json };
    die "Invalid data returned: $@\n" if $@;

    my %obj;
    foreach my $obj (@{$json->{items}}) {
        next if  $obj->{kind} !~ /^(Deployment|StatefulSet|DaemonSet)$/i;
        my $name = $obj->{metadata}{name};
        my $sel = $obj->{spec}{template}{spec}->{nodeSelector};
        my $selectors = "";
        $obj{$name} = "";
        next if not $sel or not ref $sel or ref $sel ne 'HASH';
        
        foreach my $k (keys %$sel) {
            if ($k =~ /^overcast\.(.+)$/i) {
                $selectors .= $1."\n";
            }
        }
        chomp $selectors;
        $obj{$name} = $selectors;
    }
    
    my @sel;
    foreach (keys %obj) {
        push @sel, [ $_, $obj{$_} ];
    }
    return \@sel;
}

ArrayTable(["name","selectors"], list_node_selectors);
