File Coverage

blib/lib/Rex/Apache/Inject.pm
Criterion Covered Total %
statement 11 13 84.6
branch 1 4 25.0
condition n/a
subroutine 4 4 100.0
pod n/a
total 16 21 76.1


line stmt bran cond sub pod time code
1             #
2             # (c) Jan Gehring
3             #
4             # vim: set ts=2 sw=2 tw=0:
5             # vim: set expandtab:
6              
7             =head1 NAME
8              
9             Rex::Apache::Inject - Configuration Injection module for Rex::Apache::Deploy
10              
11             =head1 DESCRIPTION
12              
13             This is a (R)?ex module to inject configuration parameters into packages (*.tar.gz, *.tar.bz2, *.zip or *.war).
14              
15             You can find examples and howtos on L
16              
17             =head1 GETTING HELP
18              
19             =over 4
20              
21             =item * Web Site: L
22              
23             =item * IRC: irc.freenode.net #rex
24              
25             =back
26              
27             =head1 DEPENDENCIES
28              
29             =over 4
30              
31             =item *
32              
33             L
34              
35             =back
36              
37             =head1 SYNOPSIS
38              
39             use Rex::Apache::Inject Properties;
40              
41             template_file "inject.conf";
42             template_search_for "*.properties";
43              
44             desc "Inject LIVE Configuration";
45             task "inject", sub {
46             inject "mypkg-1.0.1.tar.gz";
47             };
48              
49             desc "Inject LIVE Configuration";
50             task "inject", sub {
51             inject "mypkg-1.0.1.tar.gz",
52             pre_pack_hook => sub {
53             say "Pre Pack Hook";
54             },
55             post_pack_hook => {
56             say "Post Pack Hook";
57             };
58             };
59              
60              
61             =head1 INJECT METHODS
62              
63             =over 4
64              
65             =item Properties
66              
67             This method is for Java-Like Property files.
68              
69             use Rex::Apache::Inject Properties;
70              
71             template_file "inject.conf";
72             template_search_for "*.properties";
73              
74             task "inject", sub {
75             inject "myapp.war";
76             };
77              
78             This will search all files named I<*.properties> inside of myapp.war and replace the parameters with these defined in I.
79              
80             Format of the I is the same as the property files.
81              
82             my.property.one = Value1
83             my.property.two = Value no two
84              
85             =item Template
86              
87             This is a special method. It will search for template files within the archive and will generate new ones with the parameters defined in I.
88              
89             use Rex::Apache::Inject Template;
90              
91             template_file "inject.conf";
92             template_search_for "*.template.*";
93              
94             generate_real_name sub {
95             my ($template_file_name) = @_;
96             $template_file_name =~ s/\.template//;
97             return $template_file_name;
98             };
99              
100             task "inject", sub {
101             inject "myapp.tar.gz";
102             };
103              
104             This will search for files named I<*.template.*> inside of myapp.tar.gz. And will generate new files on the basis of I.
105              
106             Example:
107              
108             # Template Configuration file (inside myapp.tar.gz): config.template.php
109            
110             $db['host'] = "@db.host@";
111             $db['port'] = @db.port@;
112             $db['user'] = "@db.user@";
113             $db['pass'] = "@db.pass@";
114             ?>
115              
116             # Template file (specified by ,,template_file'')
117             db.host = "db01"
118             db.port = 3306
119             db.user = "myuser"
120             db.pass = "mypass"
121              
122              
123             The I action will generate a file called I with the following content:
124              
125            
126             $db['host'] = "db01";
127             $db['port'] = 3306;
128             $db['user'] = "myuser";
129             $db['pass'] = "mypass";
130             ?>
131              
132             =item YAML
133              
134             This method will parse YAML files inside the archive. For this method you need to have the I Module installed.
135              
136             template_file "live_config.yml";
137             template_search_for "application.yml";
138              
139             task "inject", sub {
140             inject "myapp.tar.gz",
141             pre_pack_hook => sub {
142             run "BUNDLE_PATH=vendor/bundle bundle install";
143             };
144             };
145              
146             This will search the file I inside of myapp.tar.gz and replace the configuration values inside of it with these defined in I. Also it do a pre pack hook that will run I.
147              
148             =back
149              
150             =cut
151              
152             package Rex::Apache::Inject;
153              
154             our $VERSION = "0.12.0";
155              
156 1     1   1390 use strict;
  1         2  
  1         24  
157 1     1   5 use warnings;
  1         2  
  1         24  
158              
159 1     1   5 use Data::Dumper;
  1         2  
  1         256  
160              
161             sub import {
162              
163 1     1   11 my ($call_class) = caller;
164              
165 1 50       12 return unless $_[1];
166              
167 0 0         die("Invalid input format") unless ( $_[1] =~ m/^[a-z0-9_]+$/i );
168              
169 0           eval "use $_[0]::$_[1] '$call_class';";
170              
171             }
172              
173             1;