]> mj.ucw.cz Git - bex.git/blob - lib/BEX/Config.pm
Per-job logs
[bex.git] / lib / BEX / Config.pm
1 # Batch EXecutor 2.0 -- Configuration
2 # (c) 2011 Martin Mares <mj@ucw.cz>
3
4 use strict;
5 use warnings;
6
7 package BEX::Config;
8
9 # This file specifies default values, which can be overridden in BEX.cf
10
11 # A hash of all known machines and groups
12 # 'name' => { }                 for a machine
13 # 'name' => ['a','b','c']       for a group containing specified machines/subgroups
14 our %machines = (
15 );
16
17 # A file whose contents should be prepended before the job. Should start with the "#!" line.
18 our $job_prolog = 'prolog';
19
20 # A file whose contents should be appended to the job
21 our $job_epilog = 'epilog';
22
23 # Various utility functions
24
25 sub parse_machine_list(@);
26
27 sub parse_machine_list(@) {
28         my %set = ();
29         for my $m (@_) {
30                 if ($m eq '*') {
31                         for my $mm (keys %machines) {
32                                 if (ref($machines{$mm}) eq 'HASH') {
33                                         $set{$mm} = 1;
34                                 }
35                         }
36                         next;
37                 }
38                 my $op = 1;
39                 if ($m =~ s{^!}{}) { $op = 0; }
40                 my $v = $machines{$m};
41                 if (!defined $v) {
42                         die "Unknown machine or class: $m\n";
43                 } elsif (ref($v) eq 'HASH') {
44                         $set{$m} = $op;
45                 } elsif (ref($v) eq 'ARRAY') {
46                         for my $mm (parse_machine_list(@$v)) {
47                                 $set{$mm} = $op;
48                         }
49                 }
50         }
51         return sort grep { $set{$_} } keys %set;
52 }
53
54 require 'BEX.cf';
55
56 42;