#!/usr/bin/perl
# Batch EXecutor -- List Machines and Groups
-# (c) 2011-2012 Martin Mares <mj@ucw.cz>
+# (c) 2011-2019 Martin Mares <mj@ucw.cz>
use strict;
use warnings;
sub usage() {
print <<AMEN ;
-Usage: bex mach [<options>]
+Usage: bex mach [<options>] [[!]<machine-or-group> ...]
Options:
+--groups List groups instead of machines
None defined so far.
AMEN
exit 0;
}
+my $groups;
+
GetOptions(
"help" => \&usage,
-) && @ARGV == 0 or die "Try `bex mach --help' for more information.\n";
+ "groups!" => \$groups,
+) or die "Try `bex mach --help' for more information.\n";
my $machines = \%BEX::Config::machines;
-print "# Hosts:\n";
-for my $h (sort keys %$machines) {
- my $m = $machines->{$h};
- ref $m eq 'HASH' or next;
- print "$h\n";
-}
+if ($groups) {
+ !@ARGV or die "bex mach --groups accepts no positional arguments.\n";
+ for my $h (sort keys %$machines) {
+ my $m = $machines->{$h};
+ ref $m eq 'ARRAY' or next;
+ print "$h = ", join(" ",
+ map {
+ my $x = $machines->{$_};
+ !defined($x) ? "$_?" :
+ ref $x eq 'HASH' ? $_ :
+ ref $x eq 'ARRAY' ? "\@$_" :
+ "$_???"
+ } @$m), "\n";
+ }
+} elsif (@ARGV) {
+ my @machines = BEX::Config::parse_machine_list(@ARGV);
+ for my $m (sort @machines) {
+ print "$m\n";
+ }
+} else {
+ for my $h (sort keys %$machines) {
+ my $m = $machines->{$h};
+ ref $m eq 'HASH' or next;
+ print "$h\n";
+ }
-print "\n# Groups:\n";
-for my $h (sort keys %$machines) {
- my $m = $machines->{$h};
- ref $m eq 'ARRAY' or next;
- print "$h = ", join(" ",
- map {
- my $x = $machines->{$_};
- !defined($x) ? "$_?" :
- ref $x eq 'HASH' ? $_ :
- ref $x eq 'ARRAY' ? "\@$_" :
- "$_???"
- } @$m), "\n";
}