line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
# |
2
|
|
|
|
|
|
|
# (c) Jan Gehring |
3
|
|
|
|
|
|
|
# |
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
package Rex::Group; |
6
|
|
|
|
|
|
|
|
7
|
58
|
|
|
58
|
|
70125
|
use v5.12.5; |
|
58
|
|
|
|
|
240
|
|
8
|
58
|
|
|
58
|
|
313
|
use warnings; |
|
58
|
|
|
|
|
126
|
|
|
58
|
|
|
|
|
2860
|
|
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
our $VERSION = '1.14.2.2'; # TRIAL VERSION |
11
|
|
|
|
|
|
|
|
12
|
58
|
|
|
58
|
|
901
|
use Rex::Logger; |
|
58
|
|
|
|
|
147
|
|
|
58
|
|
|
|
|
434
|
|
13
|
|
|
|
|
|
|
|
14
|
58
|
|
|
58
|
|
2856
|
use attributes; |
|
58
|
|
|
|
|
20503
|
|
|
58
|
|
|
|
|
470
|
|
15
|
58
|
|
|
58
|
|
4184
|
use Rex::Group::Entry::Server; |
|
58
|
|
|
|
|
175
|
|
|
58
|
|
|
|
|
522
|
|
16
|
|
|
|
|
|
|
|
17
|
58
|
|
|
58
|
|
2053
|
use vars qw(%groups); |
|
58
|
|
|
|
|
191
|
|
|
58
|
|
|
|
|
4187
|
|
18
|
58
|
|
|
58
|
|
423
|
use List::Util 1.45 qw(uniq); |
|
58
|
|
|
|
|
1091
|
|
|
58
|
|
|
|
|
3528
|
|
19
|
58
|
|
|
58
|
|
472
|
use Data::Dumper; |
|
58
|
|
|
|
|
138
|
|
|
58
|
|
|
|
|
43790
|
|
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
sub new { |
22
|
16
|
|
|
16
|
0
|
40
|
my $that = shift; |
23
|
16
|
|
33
|
|
|
61
|
my $proto = ref($that) || $that; |
24
|
16
|
|
|
|
|
43
|
my $self = {@_}; |
25
|
|
|
|
|
|
|
|
26
|
16
|
|
|
|
|
35
|
bless( $self, $proto ); |
27
|
16
|
|
|
|
|
25
|
for my $srv ( @{ $self->{servers} } ) { |
|
16
|
|
|
|
|
55
|
|
28
|
36
|
|
|
|
|
94
|
$srv->append_to_group( $self->{name} ); |
29
|
|
|
|
|
|
|
} |
30
|
|
|
|
|
|
|
|
31
|
16
|
|
|
|
|
95
|
return $self; |
32
|
|
|
|
|
|
|
} |
33
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
sub get_servers { |
35
|
23
|
|
|
23
|
0
|
38
|
my ($self) = @_; |
36
|
|
|
|
|
|
|
|
37
|
46
|
50
|
|
|
|
100
|
my @servers = map { ref( $_->to_s ) eq "CODE" ? &{ $_->to_s } : $_ } |
|
0
|
|
|
|
|
0
|
|
38
|
23
|
|
|
|
|
67
|
@{ $self->{servers} }; |
|
23
|
|
|
|
|
63
|
|
39
|
|
|
|
|
|
|
|
40
|
23
|
|
|
|
|
136
|
return uniq @servers; |
41
|
|
|
|
|
|
|
} |
42
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
sub set_auth { |
44
|
3
|
|
|
3
|
0
|
14
|
my ( $self, %data ) = @_; |
45
|
3
|
|
|
|
|
15
|
$self->{auth} = \%data; |
46
|
|
|
|
|
|
|
|
47
|
3
|
|
|
|
|
12
|
map { $_->set_auth( %{ $self->get_auth } ) } $self->get_servers; |
|
3
|
|
|
|
|
10
|
|
|
3
|
|
|
|
|
17
|
|
48
|
|
|
|
|
|
|
} |
49
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
sub get_auth { |
51
|
3
|
|
|
3
|
0
|
10
|
my ($self) = @_; |
52
|
3
|
|
|
|
|
21
|
return $self->{auth}; |
53
|
|
|
|
|
|
|
} |
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
################################################################################ |
56
|
|
|
|
|
|
|
# STATIC FUNCTIONS |
57
|
|
|
|
|
|
|
################################################################################ |
58
|
|
|
|
|
|
|
|
59
|
|
|
|
|
|
|
# Creates a new server group |
60
|
|
|
|
|
|
|
# Possible calls: |
61
|
|
|
|
|
|
|
# create_group(name => "g1", "srv1", "srv2"); |
62
|
|
|
|
|
|
|
# create_group(name => "g1", Rex::Group::Entry::Server->new(name => "srv1"), "srv2"); |
63
|
|
|
|
|
|
|
# create_group(name => "g1", "srv1" => { user => "other" }, "srv2"); |
64
|
|
|
|
|
|
|
sub create_group { |
65
|
16
|
|
|
16
|
0
|
34
|
my $class = shift; |
66
|
16
|
|
|
|
|
26
|
my $group_name = shift; |
67
|
16
|
|
|
|
|
42
|
my @server = uniq grep { defined } @_; |
|
37
|
|
|
|
|
114
|
|
68
|
|
|
|
|
|
|
|
69
|
16
|
|
|
|
|
39
|
my @server_obj; |
70
|
16
|
|
|
|
|
53
|
for ( my $i = 0 ; $i <= $#server ; $i++ ) { |
71
|
36
|
50
|
|
|
|
81
|
next if ref $server[$i] eq 'HASH'; # already processed by previous loop |
72
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
# if argument is already a Rex::Group::Entry::Server |
74
|
36
|
100
|
66
|
|
|
136
|
if ( ref $server[$i] && $server[$i]->isa("Rex::Group::Entry::Server") ) { |
75
|
25
|
|
|
|
|
36
|
push @server_obj, $server[$i]; |
76
|
25
|
|
|
|
|
47
|
next; |
77
|
|
|
|
|
|
|
} |
78
|
|
|
|
|
|
|
|
79
|
|
|
|
|
|
|
# if next argument is a HashRef, use it as options for the server |
80
|
|
|
|
|
|
|
my %options = |
81
|
|
|
|
|
|
|
( $i < $#server and ref $server[ $i + 1 ] eq 'HASH' ) |
82
|
11
|
50
|
66
|
|
|
58
|
? %{ $server[ $i + 1 ] } |
|
0
|
|
|
|
|
0
|
|
83
|
|
|
|
|
|
|
: (); |
84
|
|
|
|
|
|
|
|
85
|
11
|
|
|
|
|
64
|
my $obj = Rex::Group::Entry::Server->new( name => $server[$i], %options ); |
86
|
11
|
|
|
|
|
52
|
push @server_obj, $obj; |
87
|
|
|
|
|
|
|
} |
88
|
|
|
|
|
|
|
|
89
|
16
|
|
|
|
|
69
|
$groups{$group_name} = |
90
|
|
|
|
|
|
|
Rex::Group->new( servers => \@server_obj, name => $group_name ); |
91
|
|
|
|
|
|
|
} |
92
|
|
|
|
|
|
|
|
93
|
|
|
|
|
|
|
# returns the servers in the group |
94
|
|
|
|
|
|
|
sub get_group { |
95
|
11
|
|
|
11
|
0
|
364
|
my $class = shift; |
96
|
11
|
|
|
|
|
28
|
my $group_name = shift; |
97
|
|
|
|
|
|
|
|
98
|
11
|
50
|
|
|
|
27
|
if ( exists $groups{$group_name} ) { |
99
|
11
|
|
|
|
|
39
|
return $groups{$group_name}->get_servers; |
100
|
|
|
|
|
|
|
} |
101
|
|
|
|
|
|
|
|
102
|
0
|
|
|
|
|
0
|
return (); |
103
|
|
|
|
|
|
|
} |
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
sub is_group { |
106
|
8
|
|
|
8
|
0
|
15
|
my $class = shift; |
107
|
8
|
|
|
|
|
13
|
my $group_name = shift; |
108
|
|
|
|
|
|
|
|
109
|
8
|
100
|
|
|
|
36
|
if ( defined $groups{$group_name} ) { return 1; } |
|
7
|
|
|
|
|
25
|
|
110
|
1
|
|
|
|
|
5
|
return 0; |
111
|
|
|
|
|
|
|
} |
112
|
|
|
|
|
|
|
|
113
|
|
|
|
|
|
|
sub get_groups { |
114
|
1
|
|
|
1
|
0
|
14
|
my $class = shift; |
115
|
1
|
|
|
|
|
2
|
my %ret = (); |
116
|
|
|
|
|
|
|
|
117
|
1
|
|
|
|
|
4
|
for my $key ( keys %groups ) { |
118
|
9
|
|
|
|
|
21
|
$ret{$key} = [ $groups{$key}->get_servers ]; |
119
|
|
|
|
|
|
|
} |
120
|
|
|
|
|
|
|
|
121
|
1
|
|
|
|
|
9
|
return %ret; |
122
|
|
|
|
|
|
|
} |
123
|
|
|
|
|
|
|
|
124
|
|
|
|
|
|
|
sub get_group_object { |
125
|
6
|
|
|
6
|
0
|
14
|
my $class = shift; |
126
|
6
|
|
|
|
|
12
|
my $name = shift; |
127
|
|
|
|
|
|
|
|
128
|
6
|
|
|
|
|
18
|
return $groups{$name}; |
129
|
|
|
|
|
|
|
} |
130
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
1; |