Class: EY::InstanceAPIServer::Snapshots::ExampleCallback

Inherits:
Abstract::ExampleCallback show all
Defined in:
lib/ey_instance_api_server/snapshots/example_callback.rb

Instance Attribute Summary collapse

Attributes inherited from Abstract::ExampleCallback

#base_url

Instance Method Summary collapse

Methods inherited from Abstract::ExampleCallback

#token_for

Constructor Details

#initializeExampleCallback

Returns a new instance of ExampleCallback.



6
7
8
9
10
# File 'lib/ey_instance_api_server/snapshots/example_callback.rb', line 6

def initialize(*)
  super
  @snaplock_callbacks = []
  Fog.mock!
end

Instance Attribute Details

#snaplock_callbacksObject (readonly)

Returns the value of attribute snaplock_callbacks.



11
12
13
# File 'lib/ey_instance_api_server/snapshots/example_callback.rb', line 11

def snaplock_callbacks
  @snaplock_callbacks
end

Instance Method Details

#add_instance(instance_id, fog_instance = create_fog_instance) ⇒ Object



13
14
15
# File 'lib/ey_instance_api_server/snapshots/example_callback.rb', line 13

def add_instance(instance_id, fog_instance = create_fog_instance)
  super(instance_id, {:instance_fog => fog_instance})
end

#add_volume(instance_id, volume_id, type) ⇒ Object



61
62
63
64
65
66
# File 'lib/ey_instance_api_server/snapshots/example_callback.rb', line 61

def add_volume(instance_id, volume_id, type)
  instance_fog = @instances[instance_id][:instance_fog]
  volume_fog = instance_fog.volumes.create(:size => 5, :device => 'dev/sdz123')
  @instances[instance_id][:volumes] ||= {}
  @instances[instance_id][:volumes][volume_id] ||= {:volume_fog => volume_fog, :volume_type => type, :snapshots => {}}
end

#list_snapshots_for(instance_id) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ey_instance_api_server/snapshots/example_callback.rb', line 17

def list_snapshots_for(instance_id)
  volumes = @instances[instance_id][:volumes]
  to_return = []
  volumes.each do |vol_id, vol|
    snapshots = vol[:snapshots]
    snapshots.each do |snapshot_id, snapshot_info|
      if snapshot_fog = snapshot_info[:snapshot_fog]
        snapshot_fog.reload
        to_return << EY::InstanceAPIServer.snapshot_response(vol_id, snapshot_id, vol[:volume_type], snapshot_info[:created_at], snapshot_fog.state, snapshot_fog.progress)
      else
        to_return << EY::InstanceAPIServer.snapshot_response(vol_id, snapshot_id, vol[:volume_type], snapshot_info[:created_at], "requested", nil)
      end
    end
  end
  to_return
end

#perform_snapshots_for(instance_id, volume_id, snapshot_id) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'lib/ey_instance_api_server/snapshots/example_callback.rb', line 46

def perform_snapshots_for(instance_id, volume_id, snapshot_id)
  if vol = volume_info(instance_id, volume_id)
    snapshots = vol[:snapshots]
    volume_fog = vol[:volume_fog]
    if snapshot_info = snapshots[snapshot_id]
      snapshot_fog = volume_fog.snapshots.create
      snapshot_info[:snapshot_fog] = snapshot_fog
    end
  end
end

#request_snapshots_for(instance_id) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/ey_instance_api_server/snapshots/example_callback.rb', line 34

def request_snapshots_for(instance_id)
  volumes = @instances[instance_id][:volumes]
  volumes.each do |vol_id, vol|
    snapshots = vol[:snapshots]
    volume_fog = vol[:volume_fog]
    @@next_snapshot_id ||= 0
    snapshot_id = (@@next_snapshot_id += 1).to_s
    snapshots[snapshot_id] = {:created_at => Time.now}
    @snaplock_callbacks << EY::InstanceAPIServer.snapshots_url_for_performing(instance_id, vol_id, snapshot_id, "token-for-#{instance_id}")
  end
end

#volume_info(instance_id, volume_id) ⇒ Object



57
58
59
# File 'lib/ey_instance_api_server/snapshots/example_callback.rb', line 57

def volume_info(instance_id, volume_id)
  @instances[instance_id] && @instances[instance_id][:volumes] && @instances[instance_id][:volumes][volume_id]
end