Sha256: 402fa17b44fab3e9cea4f39a1d99b0e5e766d6a14ed1e4422dd96d62148eea6b

Contents?: true

Size: 2 KB

Versions: 7

Compression:

Stored size: 2 KB

Contents

require 'fog/core/collection'
require 'fog/aws/models/rds/snapshot'

module Fog
  module AWS
    class RDS

      class Snapshots < Fog::Collection
        attribute :server
        attribute :filters
        model Fog::AWS::RDS::Snapshot

        def initialize(attributes)
          self.filters ||= {}
          if attributes[:server]
            filters[:identifier] = attributes[:server].id
          end
          if attributes[:type]
            filters[:type] = attributes[:type]
          end
          super
        end

        # This will return a single page based on the current or provided filters,
        # updating the filters with the marker for the next page.  Calling this repeatedly
        # will iterate through pages.
        def all(filters = filters)
          self.filters.merge!(filters)

          snapshots = service.describe_db_snapshots(filters)
          self.filters[:marker] = snapshots.body['DescribeDBSnapshotsResult']['Marker']
          data = snapshots.body['DescribeDBSnapshotsResult']['DBSnapshots']
          load(data)
        end

        # This will execute a block for each snapshot, fetching new pages of snapshots as required.
        def each(filters = filters)
          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 {|snapshot| yield snapshot}
          end while self.filters[:marker]
        end

        def get(identity)
          data = service.describe_db_snapshots(:snapshot_id => identity).body['DescribeDBSnapshotsResult']['DBSnapshots'].first
          new(data) # data is an attribute hash
        rescue Fog::AWS::RDS::NotFound
          nil
        end

        def new(attributes = {})
          if server
            super({ :instance_id => server.id }.merge!(attributes))
          else
            super
          end
        end

      end
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
gapinc-fog-1.12.1.2.1 lib/fog/aws/models/rds/snapshots.rb
gapinc-fog-1.12.1.2 lib/fog/aws/models/rds/snapshots.rb
gapinc-fog-1.12.1.1 lib/fog/aws/models/rds/snapshots.rb
gapinc-fog-1.12.1a lib/fog/aws/models/rds/snapshots.rb
gapinc-fog-1.12.1 lib/fog/aws/models/rds/snapshots.rb
fog-1.12.1 lib/fog/aws/models/rds/snapshots.rb
fog-1.12.0 lib/fog/aws/models/rds/snapshots.rb