File Coverage

blib/lib/Rex/JobControl/Helper/Project.pm
Criterion Covered Total %
statement 27 131 20.6
branch 0 16 0.0
condition 0 3 0.0
subroutine 9 34 26.4
pod 0 24 0.0
total 36 208 17.3


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             package Rex::JobControl::Helper::Project;
8             $Rex::JobControl::Helper::Project::VERSION = '0.7.0';
9 1     1   30 use strict;
  1         2  
  1         35  
10 1     1   4 use warnings;
  1         2  
  1         21  
11 1     1   5 use Data::Dumper;
  1         2  
  1         58  
12 1     1   5 use File::Spec;
  1         2  
  1         34  
13 1     1   5 use File::Path;
  1         1  
  1         46  
14 1     1   820 use YAML;
  1         8497  
  1         65  
15 1     1   851 use Rex::JobControl::Helper::Project::Job;
  1         5  
  1         46  
16 1     1   1042 use Rex::JobControl::Helper::Project::Rexfile;
  1         3  
  1         54  
17 1     1   793 use Rex::JobControl::Helper::Project::Formular;
  1         3  
  1         2443  
18              
19             sub new {
20 0     0 0   my $that = shift;
21 0   0       my $proto = ref($that) || $that;
22 0           my $self = {@_};
23              
24 0           bless( $self, $proto );
25              
26 0           $self->load;
27              
28 0           return $self;
29             }
30              
31 0     0 0   sub app { (shift)->{app}; }
32 0     0 0   sub name { (shift)->{project_configuration}->{name}; }
33 0     0 0   sub directory { (shift)->{directory}; }
34              
35             sub dump {
36 0     0 0   my ($self) = @_;
37              
38 0           $self->app->log->debug( Dumper($self) );
39             }
40              
41             sub load {
42 0     0 0   my ($self) = @_;
43              
44 0 0         if ( -f $self->_config_file() ) {
45 0           $self->{project_configuration} = YAML::LoadFile( $self->_config_file );
46             }
47              
48 0           $self->{directory} = $self->{name};
49             }
50              
51             sub _config_file {
52 0     0     my ($self) = @_;
53 0           return $self->project_path() . "/project.conf.yml";
54             }
55              
56             sub project_path {
57 0     0 0   my ($self) = @_;
58              
59 0           my $path = File::Spec->rel2abs( $self->app->config->{project_path} );
60 0           my $project_path = File::Spec->catdir( $path, $self->{name} );
61              
62 0           return $project_path;
63             }
64              
65             sub create {
66 0     0 0   my ($self) = @_;
67              
68 0           my $path = File::Spec->rel2abs( $self->app->config->{project_path} );
69 0           my $project_path = File::Spec->catdir( $path, $self->{name} );
70              
71 0           $self->app->log->debug(
72             "Creating new project $self->{name} in $project_path.");
73              
74 0           File::Path::make_path($project_path);
75 0           File::Path::make_path( File::Spec->catdir( $project_path, "jobs" ) );
76 0           File::Path::make_path( File::Spec->catdir( $project_path, "rex" ) );
77 0           File::Path::make_path( File::Spec->catdir( $project_path, "formulars" ) );
78              
79 0           my $project_configuration = { name => $self->{name}, };
80              
81 0           YAML::DumpFile( "$project_path/project.conf.yml", $project_configuration );
82             }
83              
84             sub update {
85 0     0 0   my ($self) = @_;
86              
87 0           my $project_path = $self->project_path;
88 0           YAML::DumpFile( "$project_path/project.conf.yml", $self->{project_configuration} );
89             }
90              
91             sub add_node {
92 0     0 0   my ($self, $host) = @_;
93              
94 0 0         if(! exists $self->{project_configuration}->{nodes}) {
95 0           $self->{project_configuration}->{nodes} = [];
96             }
97            
98 0           push @{ $self->{project_configuration}->{nodes} }, $host;
  0            
99 0           $self->update;
100             }
101              
102             sub job_count {
103 0     0 0   my ($self) = @_;
104 0           my $jobs = $self->jobs;
105 0           return scalar( @{$jobs} );
  0            
106             }
107              
108             sub jobs {
109 0     0 0   my ($self) = @_;
110              
111 0           my @jobs;
112              
113 0 0         opendir( my $dh, $self->project_path() . "/jobs" )
114             or die( "Error: $! (" . $self->project_path() . ")" );
115 0           while ( my $entry = readdir($dh) ) {
116 0 0         next if ( !-f $self->project_path() . "/jobs/$entry/job.conf.yml" );
117 0           push @jobs,
118             Rex::JobControl::Helper::Project::Job->new(
119             directory => $entry,
120             project => $self
121             );
122             }
123 0           closedir($dh);
124              
125 0           return \@jobs;
126             }
127              
128             sub get_job {
129 0     0 0   my ( $self, $dir ) = @_;
130 0           return Rex::JobControl::Helper::Project::Job->new(
131             directory => $dir,
132             project => $self
133             );
134             }
135              
136             sub create_job {
137 0     0 0   my ( $self, %data ) = @_;
138              
139 0           my $job =
140             Rex::JobControl::Helper::Project::Job->new( project => $self, %data );
141 0           $job->create(%data);
142             }
143              
144             sub rexfile_count {
145 0     0 0   my ($self) = @_;
146 0           my $rexfiles = $self->rexfiles;
147 0           return scalar( @{$rexfiles} );
  0            
148             }
149              
150             sub rexfiles {
151 0     0 0   my ($self) = @_;
152              
153 0           my @rexfiles;
154              
155 0 0         opendir( my $dh, $self->project_path() . "/rex" ) or die($!);
156 0           while ( my $entry = readdir($dh) ) {
157 0 0         next if ( !-f $self->project_path() . "/rex/$entry/rex.conf.yml" );
158 0           push @rexfiles,
159             Rex::JobControl::Helper::Project::Rexfile->new(
160             directory => $entry,
161             project => $self
162             );
163             }
164 0           closedir($dh);
165              
166 0           return \@rexfiles;
167             }
168              
169             sub create_rexfile {
170 0     0 0   my ( $self, %data ) = @_;
171              
172 0           my $rexfile =
173             Rex::JobControl::Helper::Project::Rexfile->new( project => $self, %data );
174 0           $rexfile->create(%data);
175             }
176              
177             sub get_rexfile {
178 0     0 0   my ( $self, $dir ) = @_;
179 0           return Rex::JobControl::Helper::Project::Rexfile->new(
180             directory => $dir,
181             project => $self
182             );
183             }
184              
185             sub all_server {
186 0     0 0   my ($self) = @_;
187              
188 0           my @all_server;
189              
190 0           for my $rex ( @{ $self->rexfiles } ) {
  0            
191 0           push @all_server, @{ $rex->all_server };
  0            
192             }
193              
194 0           $self->load;
195 0           for my $srv (@{ $self->{project_configuration}->{nodes} }) {
  0            
196 0           push @all_server, $srv;
197             }
198              
199 0           return \@all_server;
200             }
201              
202             sub remove {
203 0     0 0   my ($self) = @_;
204 0           File::Path::remove_tree( $self->project_path() );
205             }
206              
207             sub formular_count {
208 0     0 0   my ($self) = @_;
209 0           my $forms = $self->formulars;
210 0           return scalar( @{$forms} );
  0            
211             }
212              
213             sub formulars {
214 0     0 0   my ($self) = @_;
215              
216 0           my @formulars;
217              
218 0 0         opendir( my $dh, $self->project_path() . "/formulars" )
219             or die( "Error: $! (" . $self->project_path() . ")" );
220 0           while ( my $entry = readdir($dh) ) {
221             next
222 0 0         if ( !-f $self->project_path() . "/formulars/$entry/formular.conf.yml" );
223 0           push @formulars,
224             Rex::JobControl::Helper::Project::Formular->new(
225             directory => $entry,
226             project => $self
227             );
228             }
229 0           closedir($dh);
230              
231 0           return \@formulars;
232             }
233              
234             sub get_formular {
235 0     0 0   my ( $self, $dir ) = @_;
236 0           return Rex::JobControl::Helper::Project::Formular->new(
237             directory => $dir,
238             project => $self
239             );
240             }
241              
242             sub create_formular {
243 0     0 0   my ( $self, %data ) = @_;
244              
245 0           my $form =
246             Rex::JobControl::Helper::Project::Formular->new( project => $self, %data );
247              
248 0           $form->create(%data);
249             }
250              
251             1;