diff --git a/lib/fog/aws/models/rds/log_files.rb b/lib/fog/aws/models/rds/log_files.rb index ce559d72e..99f4af96a 100644 --- a/lib/fog/aws/models/rds/log_files.rb +++ b/lib/fog/aws/models/rds/log_files.rb @@ -6,21 +6,44 @@ module Fog class RDS class LogFiles < Fog::Collection + attribute :filters attribute :rds_id model Fog::AWS::RDS::LogFile - def all - data = service.describe_db_log_files(rds_id).body['DescribeDBLogFilesResult']['DBLogFiles'] - load(data) # data is an array of attribute hashes + def initialize(attributes) + self.filters ||= {} + super + end + + # This method deliberately returns only a single page of results + def all(filters=filters) + self.filters.merge!(filters) + + result = service.describe_db_log_files(rds_id, filters).body['DescribeDBLogFilesResult'] + self.filters[:marker] = result['Marker'] + load(result['DBLogFiles']) + end + + def each(filters=filters) + if block_given? + begin + page = self.all(filters) + # We need to explicitly use the base 'each' method here on the page, otherwise we get infinite recursion + base_each = Fog::Collection.instance_method(:each) + base_each.bind(page).call { |log_file| yield log_file } + end while self.filters[:marker] + end + self end def get(file_name=nil) - data = service.describe_db_log_files(rds_id, {:filename_contains => file_name}).body['DescribeDBLogFilesResult']['DBLogFiles'].first - new(data) # data is an attribute hash + if file_name + matches = self.select {|log_file| log_file.name.upcase == file_name.upcase} + return matches.first unless matches.empty? + end rescue Fog::AWS::RDS::NotFound - nil end - + nil end end end