1package VM::EC2::DB::Reserved::Instance; 2 3=head1 NAME 4 5VM::EC2::DB::Reserved::Instance - An RDS Database Reserved Instance 6 7=head1 SYNOPSIS 8 9 use VM::EC2; 10 11 $ec2 = VM::EC2->new(...); 12 @i = $ec2->describe_reserved_db_instances; 13 print "$_\n" foreach grep { $_->State eq 'active' } @i; 14 15=head1 DESCRIPTION 16 17This object represents an RDS Reserved DB Instance. 18 19=head1 STRING OVERLOADING 20 21In string context, this object outputs 22 23=head1 SEE ALSO 24 25L<VM::EC2> 26L<VM::EC2::Generic> 27L<VM::EC2::DB::Instance> 28 29=head1 AUTHOR 30 31Lance Kinley E<lt>lkinley@loyaltymethods.comE<gt>. 32 33Copyright (c) 2013 Loyalty Methods, Inc. 34 35This package and its accompanying libraries is free software; you can 36redistribute it and/or modify it under the terms of the GPL (either 37version 1, or at your option, any later version) or the Artistic 38License 2.0. Refer to LICENSE for the full license text. In addition, 39please see DISCLAIMER.txt for disclaimers of warranty. 40 41=cut 42 43use strict; 44use base 'VM::EC2::Generic'; 45use VM::EC2::DB::Reserved::RecurringCharge; 46 47use overload '""' => sub { shift->as_string }, 48 fallback => 1; 49 50sub valid_fields { 51 my $self = shift; 52 return qw( 53 CurrencyCode 54 DBInstanceClass 55 DBInstanceCount 56 Duration 57 FixedPrice 58 MultiAZ 59 OfferingType 60 ProductDescription 61 RecurringCharges 62 ReservedDBInstanceId 63 ReservedDBInstancesOfferingId 64 StartTime 65 State 66 UsagePrice 67 ); 68} 69 70sub MultiAZ { 71 my $self = shift; 72 my $maz = $self->SUPER::MultiAZ; 73 return $maz eq 'true'; 74} 75 76sub RecurringCharges { 77 my $self = shift; 78 my $rc = $self->SUPER::RecurringCharges; 79 return unless $rc; 80 $rc = $rc->{RecurringCharge}; 81 return ref $rc eq 'HASH' ? 82 (VM::EC2::DB::Reserved::RecurringCharge->new($rc,$self->aws)) : 83 map { VM::EC2::DB::Reserved::RecurringCharge->new($_,$self->aws) } @$rc; 84} 85 86sub as_string { 87 my $self = shift; 88 my $delim = shift || ' '; 89 my @fields; 90 push @fields, sprintf('%3i',$self->DBInstanceCount); 91 push @fields, $self->ReservedDBInstanceId, 92 push @fields, sprintf('%25s',$self->StartTime); 93 push @fields, sprintf('%18s',$self->OfferingType); 94 push @fields, sprintf('%4i Days',$self->Duration / 86400); 95 push @fields, sprintf('%13s',$self->DBInstanceClass); 96 push @fields, sprintf('%9s',$self->MultiAZ ? 'Multi AZ' : 'Single AZ'); 97 push @fields, sprintf('%s%8s',$self->CurrencyCode,sprintf('%.2f',$self->FixedPrice)); 98 push @fields, sprintf('%s%6s/Hourly',$self->CurrencyCode,sprintf('%.3f',$self->UsagePrice)); 99 push @fields, $self->RecurringCharges ? sprintf('%s%6s/' . $self->RecurringCharges->frequency,$self->CurrencyCode,sprintf('%.3f',$self->RecurringCharges->amount)) : ' ' x 16; 100 push @fields, $self->ProductDescription; 101 push @fields, $self->ReservedDBInstancesOfferingId; 102 push @fields, sprintf('%15s',$self->State); 103 return join($delim,@fields) 104} 105 1061; 107