File Coverage

lib/Webservice/OVH/Cloud/Project/Instance/Group.pm
Criterion Covered Total %
statement 9 84 10.7
branch 0 42 0.0
condition n/a
subroutine 3 15 20.0
pod 9 9 100.0
total 21 150 14.0


line stmt bran cond sub pod time code
1              
2             =encoding utf-8
3              
4             =head1 NAME
5              
6             Webservice::OVH::Cloud::Project::Instance::Group
7              
8             =head1 SYNOPSIS
9              
10             use Webservice::OVH;
11              
12             my $ovh = Webservice::OVH->new_from_json("credentials.json");
13              
14             my $projects = $ovh->cloud->projects;
15             my $example_project = $projects->[0];
16              
17             my $groups = $project->instance->groups;
18            
19             foreach my $group (@$groups) {
20            
21             print $group->name;
22             }
23              
24             =head1 DESCRIPTION
25              
26             Provides Instance object methods and id less methods for groups.
27              
28             =head1 METHODS
29              
30             =cut
31              
32             use strict;
33 36     36   228 use warnings;
  36         77  
  36         881  
34 36     36   160 use Carp qw{ carp croak };
  36         85  
  36         822  
35 36     36   152  
  36         71  
  36         32848  
36             our $VERSION = 0.47;
37              
38             =head2 _new_existing
39              
40             Internal Method to create the Network object.
41             This method is not ment to be called directly.
42             This method can be reached by using the bridge object instance in project.
43              
44             =over
45              
46             =item * Parameter: %params - key => value
47              
48             =item * Return: L<Webservice::OVH::Cloud::Project::Instance::Group>
49              
50             =item * Synopsis: Webservice::OVH::Cloud::Project::Instance::Group->_new(wrapper => $ovh_api_wrapper, project => $project, module => $module, id => $id );
51              
52             =back
53              
54             =cut
55              
56              
57             my ( $class, %params ) = @_;
58              
59 0     0     die "Missing module" unless $params{module};
60             die "Missing wrapper" unless $params{wrapper};
61 0 0         die "Missing id" unless $params{id};
62 0 0         die "Missing project" unless $params{project};
63 0 0          
64 0 0         my $group_id = $params{id};
65             my $api_wrapper = $params{wrapper};
66 0           my $module = $params{module};
67 0           my $project = $params{project};
68 0           my $project_id = $project->id;
69 0            
70 0           my $response = $api_wrapper->rawCall( method => 'get', path => "/cloud/project/$project_id/instance/group/$group_id", noSignature => 0 );
71             carp $response->error if $response->error;
72 0            
73 0 0         if ( !$response->error ) {
74              
75 0 0         my $porperties = $response->content;
76             my $self = bless { _module => $module, _valid => 1, _api_wrapper => $api_wrapper, _id => $group_id, _properties => $porperties, _project => $project }, $class;
77 0            
78 0           return $self;
79             } else {
80 0            
81             return undef;
82             }
83 0           }
84              
85             =head2 _new
86              
87             Internal Method to create the Network object.
88             This method is not ment to be called directly.
89             This method can be reached by using the bridge object instance in project.
90              
91             =over
92              
93             =item * Parameter: %params - key => value
94              
95             =item * Return: L<Webservice::OVH::Cloud::Project::Instance::Group>
96              
97             =item * Synopsis: Webservice::OVH::Cloud::Project::Instance::Group->_new(wrapper => $ovh_api_wrapper, project => $project, module => $module );
98              
99             =back
100              
101             =cut
102              
103              
104             my ( $class, %params ) = @_;
105              
106             die "Missing module" unless $params{module};
107 0     0     die "Missing wrapper" unless $params{wrapper};
108             die "Missing project" unless $params{project};
109 0 0          
110 0 0         my $api_wrapper = $params{wrapper};
111 0 0         my $module = $params{module};
112             my $project = $params{project};
113 0           my $project_id = $project->id;
114 0            
115 0           my @keys_needed = qw{ region name };
116 0           if ( my @missing_parameters = grep { not $params{$_} } @keys_needed ) {
117              
118 0           croak "Missing parameter: @missing_parameters";
119 0 0         }
  0            
120              
121 0           my $body = { region => $params{region}, name => $params{name} };
122             my $response = $api_wrapper->rawCall( method => 'post', path => "/cloud/project/$project_id/instance/group", body => $body, noSignature => 0 );
123             croak $response->error if $response->error;
124 0            
125 0           my $group_id = $response->content->{id};
126 0 0         my $properties = $response->content;
127              
128 0           my $self = bless { _module => $module, _valid => 1, _api_wrapper => $api_wrapper, _id => $group_id, _properties => $properties, _project => $project }, $class;
129 0            
130             return $self;
131 0           }
132              
133 0           =head2 project
134              
135             Root Project.
136              
137             =over
138              
139             =item * Return: L<Webservice::OVH::Cloud::Project>
140              
141             =item * Synopsis: my $project = $group->project;
142              
143             =back
144              
145             =cut
146              
147              
148             my ($self) = @_;
149              
150             return $self->{_project};
151             }
152 0     0 1    
153             =head2 is_valid
154 0            
155             When this object is deleted on the api side, this method returns 0.
156              
157             =over
158              
159             =item * Return: VALUE
160              
161             =item * Synopsis: print "Valid" if $group->is_valid;
162              
163             =back
164              
165             =cut
166              
167              
168             my ($self) = @_;
169              
170             return $self->{_valid};
171             }
172              
173 0     0 1   =head2 _is_valid
174              
175 0           Internal method to check validity.
176             Difference is that this method carps an error.
177              
178             =over
179              
180             =item * Return: VALUE
181              
182             =item * Synopsis: $group->_is_valid;
183              
184             =back
185              
186             =cut
187              
188              
189             my ($self) = @_;
190              
191             carp "Group is not valid anymore" unless $self->is_valid;
192             return $self->is_valid;
193             }
194              
195 0     0     =head2 id
196              
197 0 0         Returns the api id
198 0            
199             =over
200              
201             =item * Return: VALUE
202              
203             =item * Synopsis: my $id = $group->id;
204              
205             =back
206              
207             =cut
208              
209              
210             my ($self) = @_;
211              
212             return unless $self->_is_valid;
213              
214             return $self->{_id};
215             }
216              
217 0     0 1   =head2 properties
218              
219 0 0         Returns the raw properties as a hash.
220             This is the original return value of the web-api.
221 0            
222             =over
223              
224             =item * Return: HASH
225              
226             =item * Synopsis: my $properties = $group->properties;
227              
228             =back
229              
230             =cut
231              
232              
233             my ($self) = @_;
234              
235             return unless $self->_is_valid;
236              
237             my $api = $self->{_api_wrapper};
238             my $project_id = $self->project->id;
239             my $group_id = $self->id;
240             my $response = $api->rawCall( method => 'get', path => "/cloud/project/$project_id/instance/group/$group_id", noSignature => 0 );
241 0     0 1   croak $response->error if $response->error;
242             $self->{_properties} = $response->content;
243 0 0         return $self->{_properties};
244             }
245 0            
246 0           =head2 name
247 0            
248 0           Exposed property value.
249 0 0          
250 0           =over
251 0            
252             =item * Return: VALUE
253              
254             =item * Synopsis: my $name = $group->name;
255              
256             =back
257              
258             =cut
259              
260              
261             my ($self) = @_;
262              
263             return unless $self->_is_valid;
264              
265             return $self->{_properties}->{name};
266             }
267              
268             =head2 region
269              
270 0     0 1   Exposed property value.
271              
272 0 0         =over
273              
274 0           =item * Return: VALUE
275              
276             =item * Synopsis: my $region = $group->region;
277              
278             =back
279              
280             =cut
281              
282              
283             my ($self) = @_;
284              
285             return unless $self->_is_valid;
286              
287             return $self->{_properties}->{region};
288             }
289              
290             =head2 instance_ids
291              
292             Exposed property value.
293 0     0 1    
294             =over
295 0 0          
296             =item * Return: ARRAY
297 0            
298             =item * Synopsis: my $instance_ids = $group->instance_ids;
299              
300             =back
301              
302             =cut
303              
304              
305             my ($self) = @_;
306              
307             return unless $self->_is_valid;
308              
309             return $self->{_properties}->{instance_ids};
310             }
311              
312             =head2 affinity
313              
314             Exposed property value.
315              
316 0     0 1   =over
317              
318 0 0         =item * Return: ARRAY
319              
320 0           =item * Synopsis: my $affinity = $group->affinity;
321              
322             =back
323              
324             =cut
325              
326              
327             my ($self) = @_;
328              
329             return unless $self->_is_valid;
330              
331             return $self->{_properties}->{Affinity};
332             }
333              
334             =head2 delete
335              
336             Deletes the object api sided and sets it invalid.
337              
338             =over
339 0     0 1    
340             =item * Synopsis: $group->delete;
341 0 0          
342             =back
343 0            
344             =cut
345              
346              
347             my ($self) = @_;
348              
349             return unless $self->_is_valid;
350              
351             my $api = $self->{_api_wrapper};
352             my $project_id = $self->project->id;
353             my $group_id = $self->id;
354              
355             my $response = $api->rawCall( method => 'delete', path => "/cloud/project/$project_id/instance/group/$group_id", noSignature => 0 );
356             croak $response->error if $response->error;
357              
358             $self->{_valid} = 0;
359             }
360 0     0 1    
361             1;