Class: Fog::AWS::RDS::Snapshots

Inherits:
Collection
  • Object
show all
Defined in:
lib/fog/aws/models/rds/snapshots.rb

Instance Method Summary collapse

Constructor Details

#initialize(attributes) ⇒ Snapshots



12
13
14
15
16
17
18
19
20
21
# File 'lib/fog/aws/models/rds/snapshots.rb', line 12

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

Instance Method Details

#all(filters = filters) ⇒ Object

This method does NOT return all snapshots. Its implementation deliberately returns a single page of results for any one call. It 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. See the implementation of each for an example of such iteration.

It is arguably incorrect for the method not to return all snapshots, particularly considering the implementation in the corresponding 'elb' files. But this implementation has been released, and backwards-compatibility requires leaving it as implemented.



31
32
33
34
35
36
37
# File 'lib/fog/aws/models/rds/snapshots.rb', line 31

def all(filters = filters)
  self.filters.merge!(filters)

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

#each(filters = filters) ⇒ Object

This will execute a block for each snapshot, fetching new pages of snapshots as required.



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/fog/aws/models/rds/snapshots.rb', line 40

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 { |snapshot| yield snapshot }
    end while self.filters[:marker]
  end
  self
end

#get(identity) ⇒ Object



52
53
54
55
56
57
# File 'lib/fog/aws/models/rds/snapshots.rb', line 52

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

#new(attributes = {}) ⇒ Object



59
60
61
62
63
64
65
# File 'lib/fog/aws/models/rds/snapshots.rb', line 59

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