summaryrefslogtreecommitdiff
path: root/lib/Config/HAProxy/Node/Section.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Config/HAProxy/Node/Section.pm')
-rw-r--r--lib/Config/HAProxy/Node/Section.pm153
1 files changed, 152 insertions, 1 deletions
diff --git a/lib/Config/HAProxy/Node/Section.pm b/lib/Config/HAProxy/Node/Section.pm
index c332155..3ef1cf0 100644
--- a/lib/Config/HAProxy/Node/Section.pm
+++ b/lib/Config/HAProxy/Node/Section.pm
@@ -4,6 +4,18 @@ use warnings;
4use parent 'Config::HAProxy::Node'; 4use parent 'Config::HAProxy::Node';
5use Carp; 5use Carp;
6 6
7=head1 NAME
8
9Config::HAProxy::Node::Section - HAProxy configuration section
10
11=head1 DESCRIPTION
12
13Objects of this class represent a C<section> in the HAProxy configuration file.
14A section is a statement that can contain sub-statements. The following
15statements form sections: B<global>, B<defaults>, B<frontend>, and B<backend>.
16
17=cut
18
7sub new { 19sub new {
8 my $class = shift; 20 my $class = shift;
9 my $self = $class->SUPER::new(@_); 21 my $self = $class->SUPER::new(@_);
@@ -11,8 +23,51 @@ sub new {
11 return $self; 23 return $self;
12} 24}
13 25
26=head1 ATTRIBUTES
27
28=head2 is_section
29
30Always true.
31
32=cut
33
14sub is_section { 1 } 34sub is_section { 1 }
15 35
36=head1 METHODS
37
38=head2 kw
39
40Returns the configuration keyword.
41
42=head2 argv
43
44Returns the list of arguments to the configuration keyword.
45
46=head2 arg
47
48 $s = $node->arg($n)
49
50Returns the B<$n>th argument.
51
52=head2 orig
53
54Returns original line as it appeared in the configuration file.
55
56=head2 locus
57
58Returns the location of this statement in the configuration file (the
59B<Text::Locus> object).
60
61=head2 append_node
62
63 $section->append_node(@nodes);
64
65Takes a list of objects of B<Config::HAProxy::Node> derived classes as
66arguments. Adds these objects after the last node in the subtree in this
67section.
68
69=cut
70
16sub append_node { 71sub append_node {
17 my $self = shift; 72 my $self = shift;
18 my $n = @{$self->{_tree}}; 73 my $n = @{$self->{_tree}};
@@ -24,6 +79,15 @@ sub append_node {
24 } @_; 79 } @_;
25} 80}
26 81
82=head2 append_node_nonempty
83
84 $section->append_node_nonempty(@nodes);
85
86Same as B<append_node>, but adds new nodes after the last non-empty
87node in the subtree.
88
89=cut
90
27sub append_node_nonempty { 91sub append_node_nonempty {
28 my $self = shift; 92 my $self = shift;
29 my $n = $#{$self->{_tree}}; 93 my $n = $#{$self->{_tree}};
@@ -32,7 +96,15 @@ sub append_node_nonempty {
32 } 96 }
33 $self->insert_node($n+1, @_); 97 $self->insert_node($n+1, @_);
34} 98}
35 99
100=head2 insert_node
101
102 $section->insert_node($idx, @nodes);
103
104Inserts B<@nodes> after subnode in position B<$idx> (0-based).
105
106=cut
107
36sub insert_node { 108sub insert_node {
37 my $self = shift; 109 my $self = shift;
38 my $n = shift; 110 my $n = shift;
@@ -48,6 +120,14 @@ sub insert_node {
48 } 120 }
49} 121}
50 122
123=head2 delete_node
124
125 $section->delete_node($i);
126
127Deletes B<$i>th subnode from the B<$section>.
128
129=cut
130
51sub delete_node { 131sub delete_node {
52 my ($self, $n) = @_; 132 my ($self, $n) = @_;
53 splice @{$self->{_tree}}, $n, 1; 133 splice @{$self->{_tree}}, $n, 1;
@@ -57,6 +137,18 @@ sub delete_node {
57 $self->root->mark_dirty; 137 $self->root->mark_dirty;
58} 138}
59 139
140=head2 tree
141
142 @nodes = $section->tree;
143
144Returns subnodes as a list of B<Config::HAProxy::Node> derived objects.
145
146 $node = $section->tree($i);
147
148Returns B<$i>th subnode from the B<$section>.
149
150=cut
151
60sub tree { 152sub tree {
61 my ($self, $n) = @_; 153 my ($self, $n) = @_;
62 if ($n) { 154 if ($n) {
@@ -66,6 +158,15 @@ sub tree {
66 return @{shift->{_tree}} 158 return @{shift->{_tree}}
67}; 159};
68 160
161=head2 ends_in_empty
162
163 $bool = $section->ends_in_empty
164
165Returns true if the last node in the list of sub-nodes in B<$section> is
166an empty node.
167
168=cut
169
69sub ends_in_empty { 170sub ends_in_empty {
70 my $self = shift; 171 my $self = shift;
71 while ($self->is_section) { 172 while ($self->is_section) {
@@ -110,6 +211,50 @@ my %match = (
110 } 211 }
111); 212);
112 213
214=head2 select
215
216 @nodes = $section->select(%cond);
217
218Returns nodes from B<$section> that match conditions in B<%cond>. Valid
219conditions are:
220
221=over 4
222
223=item B<name =E<gt>> I<$s>
224
225Node matches if its keyword (B<kw>) equals I<$s>.
226
227=item B<arg =E<gt>> B<{ n =E<gt>> I<$n>, B<v> =E<gt> I<$s> B<}>
228
229Node mathches if its I<$n>th argument equals I<$s>.
230
231=item B<section =E<gt>> I<$bool>
232
233Node matches if it is (or is not, if I<$bool> is false) a section.
234
235=item B<statement =E<gt>> I<$bool>
236
237Node matches if it is (not) a simple statement.
238
239=item B<comment =E<gt>> I<$bool>
240
241Node matches if it is (not) a comment.
242
243=back
244
245Multiple conditions are checked in the order of their appearance in the
246argument list and are joined by the short-circuit logical C<and>.
247
248For example, to return all B<frontend> statements:
249
250 @fe = $section->select(name => 'frontend');
251
252To return the frontend named C<in>:
253
254 ($fe) = $section->select( name => 'frontend',
255 arg => { n => 0, v => 'in' } );
256
257=cut
113 258
114sub select { 259sub select {
115 my $self = shift; 260 my $self = shift;
@@ -138,6 +283,12 @@ sub _test_node {
138 return 1; 283 return 1;
139} 284}
140 285
286=head1 SEE ALSO
287
288B<Config::HAProxy::Node>, B<Config::HAProxy>, B<Text::Locus>.
289
290=cut
291
1411; 2921;
142 293
143 294

Return to:

Send suggestions and report system problems to the System administrator.