File: HostGroup.pm

package info (click to toggle)
pgbackrest 2.57.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,344 kB
  • sloc: ansic: 127,546; xml: 19,452; perl: 12,761; pascal: 3,279; sh: 91; sql: 32; makefile: 23
file content (188 lines) | stat: -rw-r--r-- 6,199 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
####################################################################################################################################
# HostGroupTest.pm - Encapsulate a group of docker containers
####################################################################################################################################
package pgBackRestDoc::Common::HostGroup;

####################################################################################################################################
# Perl includes
####################################################################################################################################
use strict;
use warnings FATAL => qw(all);
use Carp qw(confess);

use Cwd qw(abs_path);
use Exporter qw(import);
    our @EXPORT = qw();

use pgBackRestDoc::Common::Log;
use pgBackRestDoc::Common::String;

use pgBackRestTest::Common::ExecuteTest;

####################################################################################################################################
# Global host group variable
####################################################################################################################################
my $oHostGroup;

####################################################################################################################################
# new
####################################################################################################################################
sub new
{
    my $class = shift;          # Class name

    # Create the class hash
    my $self = {};
    bless $self, $class;

    # Assign function parameters, defaults, and log debug info
    my ($strOperation) = logDebugParam(__PACKAGE__ . '->new');

    # Return from function and log return values if any
    return logDebugReturn
    (
        $strOperation,
        {name => 'self', value => $self, trace => true}
    );
}

####################################################################################################################################
# hostAdd
####################################################################################################################################
sub hostAdd
{
    my $self = shift;

    # Assign function parameters, defaults, and log debug info
    my
    (
        $strOperation,
        $oHost,
        $rstryHostName,
    ) =
        logDebugParam
        (
            __PACKAGE__ . '->hostAdd', \@_,
            {name => 'oHost'},
            {name => 'rstryHostName', optional => true},
        );

    $self->{host}{$oHost->{strName}} = $oHost;

    if ($oHost->hostUpdateGet())
    {
        $oHost->executeSimple("echo \"\" >> /etc/hosts", undef, 'root', {bLoadEnv => false});
        $oHost->executeSimple("echo \"# Test Hosts\" >> /etc/hosts", undef, 'root', {bLoadEnv => false});
    }

    my $strHostList = $oHost->{strName} . (defined($rstryHostName) ? ' ' . join(' ', @{$rstryHostName}) : '');

    # Iterate hosts to add IP mappings
    foreach my $strOtherHostName (sort(keys(%{$self->{host}})))
    {
        my $oOtherHost = $self->{host}{$strOtherHostName};

        if ($strOtherHostName ne $oHost->{strName})
        {
            # Add this host IP to all hosts
            if ($oOtherHost->hostUpdateGet())
            {
                $oOtherHost->executeSimple(
                    "echo \"$oHost->{strIP} ${strHostList}\" >> /etc/hosts", undef, 'root', {bLoadEnv => false});
            }

            # Add all other host IPs to this host
            if ($oHost->hostUpdateGet())
            {
                $oHost->executeSimple(
                    "echo \"$oOtherHost->{strIP} ${strOtherHostName}\" >> /etc/hosts", undef, 'root', {bLoadEnv => false});
            }
        }
    }

    # Return from function and log return values if any
    return logDebugReturn($strOperation);
}

####################################################################################################################################
# hostGet
####################################################################################################################################
sub hostGet
{
    my $self = shift;

    # Assign function parameters, defaults, and log debug info
    my
    (
        $strOperation,
        $strName,
        $bIgnoreMissing,
    ) =
        logDebugParam
        (
            __PACKAGE__ . '->hostGet', \@_,
            {name => 'strName', trace => true},
            {name => 'bIgnoreMissing', default => false, trace => true},
        );

    my $oHost = $self->{host}{$strName};

    if (!defined($oHost) && !$bIgnoreMissing)
    {
        confess &log(ERROR, "host ${strName} does not exist");
    }

    # Return from function and log return values if any
    return logDebugReturn
    (
        $strOperation,
        {name => 'oHost', value => $oHost}
    );
}

####################################################################################################################################
# removeAll
####################################################################################################################################
sub removeAll
{
    my $self = shift;

    # Assign function parameters, defaults, and log debug info
    my ($strOperation) = logDebugParam(__PACKAGE__ . '->removeAll');

    my $iTotal = 0;

    foreach my $strHostName (sort(keys(%{$self->{host}})))
    {
        ${$self->{host}}{$strHostName}->remove();
        delete($self->{host}{$strHostName});

        $iTotal++;
    }

    # Return from function and log return values if any
    return logDebugReturn
    (
        $strOperation,
        {name => 'iTotal', value => $iTotal}
    );
}

####################################################################################################################################
# hostGroupGet
#
# Get the global host group object.
####################################################################################################################################
sub hostGroupGet
{
    if (!defined($oHostGroup))
    {
        $oHostGroup = new pgBackRestDoc::Common::HostGroup();
    }

    return $oHostGroup;
}

push @EXPORT, qw(hostGroupGet);

1;