App-VirtualBoxUtils

 view release on metacpan or  search on metacpan

lib/App/VirtualBoxUtils.pm  view on Meta::CPAN

package App::VirtualBoxUtils;

use 5.010001;
use strict 'subs', 'vars';
use warnings;
use Log::ger;

use Hash::Subset qw(hash_subset);

our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2024-11-15'; # DATE
our $DIST = 'App-VirtualBoxUtils'; # DIST
our $VERSION = '0.001'; # VERSION

our %SPEC;

$SPEC{':package'} = {
    v => 1.1,
    summary => 'Utilities related to VirtualBox',
};

our $default_filter = sub {
    my $p = shift;

    do { $p->{_note} = "fname looks like VirtualBox"; goto FOUND } if $p->{fname} =~ /\A(VirtualBoxVM|VirtualBox|VBoxSVC)\z/;
    goto NOT_FOUND;
  FOUND:
    log_trace "Found VirtualBox process (PID=%d, cmdline=%s, note=%s)", $p->{pid}, $p->{cmndline}, $p->{_note};
    return 1;
  NOT_FOUND:
    0;
};

our $sch_cmd = ['any*', of=>[ ['array*',of=>'str*',min_len=>1], ['str*'] ]];

#our %argopt_cmd = (
#    cmd => {
#        schema => $sch_cmd,
#        default => 'virtualbox',
#    },
#);

our %argsopt_start = (
    start => {
        schema => 'bool*',
    },
);

our %argsopt_restart = (
    restart => {
        schema => 'bool*',
    },
);

our %argopt_users = (
    users => {
        'x.name.is_plural' => 1,
        'x.name.singular' => 'user',
        summary => 'Kill VirtualBox processes that belong to certain user(s) only',
        schema => ['array*', of=>'unix::uid::exists*', 'x.perl.coerce_rules' => ['From_str::comma_sep']],
    },
);

our %argopt_quiet = (
    quiet => {
        schema => 'true*',
        cmdline_aliases => {q=>{}},
    },
);

our %argopt_signal = (
    signal => {
        schema=>'unix::signal*',
        cmdline_aliases => {s=>{}},
    },
);

our %argopt_periods = (
    periods => {
        'x.name.is_plural' => 1,
        'x.name.singular' => 'period',
        summary => 'Pause and unpause times, in seconds',
        schema => ['array*', {
            of=>'duration',
            min_len=>2,



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