Class: Judo::Snapshot
- Inherits:
-
Object
- Object
- Judo::Snapshot
- Defined in:
- lib/judo/snapshot.rb
Overview
sdb name {
"version" => [ server.version ],
"devs" => [ "/dev/sde1:snap-abc123", "/dev/sde2:snap-abc456" ],
"server" => server.id
"group" => server.group.name
"virgin" => server.virgin
"note" => server.note
"data" => server.data
"created_at" => unixtime
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
-
#server_id ⇒ Object
Returns the value of attribute server_id.
Instance Method Summary collapse
- #animate(new_server) ⇒ Object
- #completed? ⇒ Boolean
- #create ⇒ Object
- #created_at ⇒ Object
- #data ⇒ Object
- #delete ⇒ Object
- #destroy ⇒ Object
- #devs ⇒ Object
- #ec2_data ⇒ Object
- #ec2_ids ⇒ Object
- #fetch_state ⇒ Object
- #get(key) ⇒ Object
- #group ⇒ Object
- #group_name ⇒ Object
-
#initialize(base, name, server_id) ⇒ Snapshot
constructor
A new instance of Snapshot.
- #note ⇒ Object
- #progress ⇒ Object
- #server ⇒ Object
- #server_name ⇒ Object
- #size(snap_id) ⇒ Object
- #state ⇒ Object
- #version ⇒ Object
- #version_desc ⇒ Object
- #virgin ⇒ Object
Constructor Details
#initialize(base, name, server_id) ⇒ Snapshot
Returns a new instance of Snapshot.
15 16 17 18 19 |
# File 'lib/judo/snapshot.rb', line 15 def initialize(base, name, server_id) @base = base @name = name @server_id = server_id end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
13 14 15 |
# File 'lib/judo/snapshot.rb', line 13 def name @name end |
#server_id ⇒ Object
Returns the value of attribute server_id.
13 14 15 |
# File 'lib/judo/snapshot.rb', line 13 def server_id @server_id end |
Instance Method Details
#animate(new_server) ⇒ Object
86 87 88 89 |
# File 'lib/judo/snapshot.rb', line 86 def animate(new_server) raise JudoError, "cannot animate, snapshotting not complete" unless completed? @base.create_server(new_server, group_name, :version => version, :snapshots => devs, :virgin => virgin, :note => note, :data => data , :clone => name) end |
#completed? ⇒ Boolean
122 123 124 |
# File 'lib/judo/snapshot.rb', line 122 def completed? not ec2_data.detect { |s| s[:aws_status] != "completed" } end |
#create ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/judo/snapshot.rb', line 65 def create raise JudoError,"snapshot already exists" unless state.empty? raise JudoError,"server has no disks to clone: #{server.volumes}" if server.volumes.empty? @base.task("Snapshotting #{server.name}") do devs = server.volumes.map do |dev,vol| "#{dev}:#{@base.ec2.create_snapshot(vol)[:aws_id]}" end @base.sdb.put_attributes(@base.snapshot_domain, name, { "version" => server.version, "virgin" => server.virgin?, "note" => server.note, "data" => server.data, "devs" => devs, "server" => server.id, "group" => server.group.name, "created_at" => Time.now.to_i.to_s }, :replace) server.add "snapshots", name end end |
#created_at ⇒ Object
41 42 43 |
# File 'lib/judo/snapshot.rb', line 41 def created_at Time.at(get("created_at").to_i) end |
#data ⇒ Object
53 54 55 |
# File 'lib/judo/snapshot.rb', line 53 def data get("data") end |
#delete ⇒ Object
91 92 93 94 95 |
# File 'lib/judo/snapshot.rb', line 91 def delete ### TODO - wait for snapshotting to finish @base.sdb.delete_attributes(@base.snapshot_domain, name) server.remove("snapshots", name) if server end |
#destroy ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/judo/snapshot.rb', line 101 def destroy devs.each do |dev,snapshot_id| @base.task("Deleting snapshot #{snapshot_id}") do begin @base.ec2.delete_snapshot(snapshot_id) rescue Object => e puts "Error destrotying snapshot #{e.}" end end end delete end |
#devs ⇒ Object
61 62 63 |
# File 'lib/judo/snapshot.rb', line 61 def devs (state["devs"] || []).inject({}) { |out, kv| k, v = kv.split(':'); out[k] = v; out } end |
#ec2_data ⇒ Object
118 119 120 |
# File 'lib/judo/snapshot.rb', line 118 def ec2_data @base.ec2_snapshots.select { |s| ec2_ids.include? s[:aws_id] } end |
#ec2_ids ⇒ Object
114 115 116 |
# File 'lib/judo/snapshot.rb', line 114 def ec2_ids devs.values end |
#fetch_state ⇒ Object
29 30 31 |
# File 'lib/judo/snapshot.rb', line 29 def fetch_state @base.sdb.get_attributes(@base.snapshot_domain, name)[:attributes] end |
#get(key) ⇒ Object
97 98 99 |
# File 'lib/judo/snapshot.rb', line 97 def get(key) state[key] && [state[key]].flatten.first end |
#group ⇒ Object
138 139 140 |
# File 'lib/judo/snapshot.rb', line 138 def group @group ||= @base.groups.detect { |g| g.name == group_name } end |
#group_name ⇒ Object
37 38 39 |
# File 'lib/judo/snapshot.rb', line 37 def group_name get("group") end |
#note ⇒ Object
49 50 51 |
# File 'lib/judo/snapshot.rb', line 49 def note get("note") end |
#progress ⇒ Object
126 127 128 |
# File 'lib/judo/snapshot.rb', line 126 def progress "#{(ec2_data.inject(0) { |sum,a| sum + a[:aws_progress].to_i } / ec2_data.size).to_i}%" end |
#server ⇒ Object
25 26 27 |
# File 'lib/judo/snapshot.rb', line 25 def server @server ||= @base.servers.detect { |s| s.id == server_id } end |
#server_name ⇒ Object
21 22 23 |
# File 'lib/judo/snapshot.rb', line 21 def server_name server.name rescue '(deleted)' end |
#size(snap_id) ⇒ Object
130 131 132 |
# File 'lib/judo/snapshot.rb', line 130 def size(snap_id) @base.ec2_snapshots.detect { |s| s[:aws_id] == snap_id } end |
#state ⇒ Object
33 34 35 |
# File 'lib/judo/snapshot.rb', line 33 def state @base.snapshots_state[name] ||= fetch_state end |
#version ⇒ Object
45 46 47 |
# File 'lib/judo/snapshot.rb', line 45 def version get("version").to_i end |
#version_desc ⇒ Object
134 135 136 |
# File 'lib/judo/snapshot.rb', line 134 def version_desc group.version_desc(version) end |
#virgin ⇒ Object
57 58 59 |
# File 'lib/judo/snapshot.rb', line 57 def virgin get("virgin").to_s == "true" end |