summaryrefslogtreecommitdiff
path: root/lib/Config/HAProxy/Node
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Config/HAProxy/Node')
-rw-r--r--lib/Config/HAProxy/Node/Comment.pm31
-rw-r--r--lib/Config/HAProxy/Node/Empty.pm29
-rw-r--r--lib/Config/HAProxy/Node/Root.pm52
-rw-r--r--lib/Config/HAProxy/Node/Section.pm153
-rw-r--r--lib/Config/HAProxy/Node/Statement.pm45
5 files changed, 308 insertions, 2 deletions
diff --git a/lib/Config/HAProxy/Node/Comment.pm b/lib/Config/HAProxy/Node/Comment.pm
index 5d7ef88..17a513b 100644
--- a/lib/Config/HAProxy/Node/Comment.pm
+++ b/lib/Config/HAProxy/Node/Comment.pm
@@ -1,6 +1,37 @@
1package Config::HAProxy::Node::Comment; 1package Config::HAProxy::Node::Comment;
2use parent 'Config::HAProxy::Node'; 2use parent 'Config::HAProxy::Node';
3 3
4=head1 NAME
5
6Config::HAProxy::Node::Comment - comment node in HAProxy configuration
7
8=head1 DESCRIPTION
9
10Objects of this class represent comments in HAProxy configuration file.
11
12=head1 METHODS
13
14=head2 is_comment
15
16Returns true.
17
18=head2 orig
19
20Returns original line as it appeared in the configuration file.
21
22=head2 locus
23
24Returns the location of this statement in the configuration file (the
25B<Text::Locus> object).
26
27=head1 SEE ALSO
28
29B<Config::HAProxy::Node>, B<Text::Locus>.
30
31=cut
32
4sub is_comment { 1 } 33sub is_comment { 1 }
5 34
61; 351;
36
37
diff --git a/lib/Config/HAProxy/Node/Empty.pm b/lib/Config/HAProxy/Node/Empty.pm
index bee0f2e..19ce5da 100644
--- a/lib/Config/HAProxy/Node/Empty.pm
+++ b/lib/Config/HAProxy/Node/Empty.pm
@@ -1,6 +1,35 @@
1package Config::HAProxy::Node::Empty; 1package Config::HAProxy::Node::Empty;
2use parent 'Config::HAProxy::Node'; 2use parent 'Config::HAProxy::Node';
3 3
4=head1 NAME
5
6Config::HAProxy::Node::Empty - empty HAProxy configuration node
7
8=head1 DESCRIPTION
9
10Objects of this class represent empty lines in HAProxy configuration file.
11
12=head1 METHODS
13
14=head2 is_empty
15
16Always true.
17
18=head2 orig
19
20Returns original line as it appeared in the configuration file.
21
22=head2 locus
23
24Returns the location of this statement in the configuration file (the
25B<Text::Locus> object).
26
27=head1 SEE ALSO
28
29B<Config::HAProxy::Node>, B<Text::Locus>.
30
31=cut
32
4sub is_empty { 1 } 33sub is_empty { 1 }
5 34
61; 351;
diff --git a/lib/Config/HAProxy/Node/Root.pm b/lib/Config/HAProxy/Node/Root.pm
index 656bb9f..ca6e575 100644
--- a/lib/Config/HAProxy/Node/Root.pm
+++ b/lib/Config/HAProxy/Node/Root.pm
@@ -4,6 +4,19 @@ use warnings;
4use parent 'Config::HAProxy::Node::Section'; 4use parent 'Config::HAProxy::Node::Section';
5use Carp; 5use Carp;
6 6
7=head1 NAME
8
9Config::HAProxy::Node::Root - root node of HAProxy configuration parse tree
10
11=head1 DESCRIPTION
12
13Objects of this class represent the topmost node in HAProxy configuration tree.
14Each parse tree contains exactly one object of this class. This node can be
15reached from every node in the tree by following its B<parent> attribute
16and is returned by the B<tree> method of B<Config::HAProxy> class.
17
18=cut
19
7sub new { 20sub new {
8 my $class = shift; 21 my $class = shift;
9 my $self = $class->SUPER::new(@_); 22 my $self = $class->SUPER::new(@_);
@@ -11,21 +24,58 @@ sub new {
11 return $self; 24 return $self;
12} 25}
13 26
27=head1 METHODS
28
29=head2 is_root
30
31Always true.
32
33=head2 is_dirty
34
35 $bool = $node->is_dirty;
36
37Returns true if the tree is C<dirty>, i.e. it was modified since it has been
38created from the disk configuration file.
39
40=cut
41
14sub is_dirty { 42sub is_dirty {
15 my $self = shift; 43 my $self = shift;
16 return $self->{dirty} 44 return $self->{dirty}
17} 45}
18 46
47=head2 mark_dirty
48
49 $node->mark_dirty;
50
51Sets the C<dirty> attribute.
52
53=cut
54
19sub mark_dirty { 55sub mark_dirty {
20 my $self = shift; 56 my $self = shift;
21 $self->{dirty} = 1; 57 $self->{dirty} = 1;
22} 58}
23 59
60=head2 clear_dirty
61
62 $node->clear_dirty;
63
64Clears the C<dirty> attribute.
65
66=cut
67
24sub clear_dirty { 68sub clear_dirty {
25 my $self = shift; 69 my $self = shift;
26 $self->{dirty} = 0; 70 $self->{dirty} = 0;
27} 71}
28 72
73=head1 SEE ALSO
74
75B<Config::HAProxy::Node>.
76
77=cut
78
291; 791;
30 80
31 81
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
diff --git a/lib/Config/HAProxy/Node/Statement.pm b/lib/Config/HAProxy/Node/Statement.pm
index abf0e50..305c529 100644
--- a/lib/Config/HAProxy/Node/Statement.pm
+++ b/lib/Config/HAProxy/Node/Statement.pm
@@ -1,6 +1,51 @@
1package Config::HAProxy::Node::Statement; 1package Config::HAProxy::Node::Statement;
2use parent 'Config::HAProxy::Node'; 2use parent 'Config::HAProxy::Node';
3 3
4=head1 NAME
5
6Config::HAProxy::Node::Statement - simple statement node in HAProxy tree
7
8=head1 DESCRIPTION
9
10Objects of this class represent simple statements in HAProxy configuration
11file. A C<simple statement> is any statement excepting: B<global>, B<defaults>,
12B<frontend>, and B<backend>.
13
14=head1 METHODS
15
16=head2 is_statement
17
18Returns true.
19
20=head2 kw
21
22Returns the configuration keyword.
23
24=head2 argv
25
26Returns the list of arguments to the configuration keyword.
27
28=head2 arg
29
30 $s = $node->arg($n)
31
32Returns the B<$n>th argument.
33
34=head2 orig
35
36Returns original line as it appeared in the configuration file.
37
38=head2 locus
39
40Returns the location of this statement in the configuration file (the
41B<Text::Locus> object).
42
43=head1 SEE ALSO
44
45B<Config::HAProxy::Node>, B<Config::HAProxy>, B<Text::Locus>.
46
47=cut
48
4sub is_statement { 1 } 49sub is_statement { 1 }
5 50
61; 511;

Return to:

Send suggestions and report system problems to the System administrator.