-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvol-list
More file actions
executable file
·74 lines (55 loc) · 1.87 KB
/
vol-list
File metadata and controls
executable file
·74 lines (55 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#! /usr/bin/env ruby
require "rubygems"
require "bundler/setup"
require "fog"
require "fileutils"
require 'trollop'
require 'yaml'
require 'date'
def set_environment(environment)
environments[environment]
end
def environments
YAML::load_file(File.join(File.dirname(File.expand_path(__FILE__)), 'config.yml'))
end
def create_snapshot(volume)
response = @connection.create_snapshot(volume.id)
snapshot_id = response.body['snapshotId']
@connection.tags.create(:resource_id => snapshot_id, :key => "Name", :value => "#{volume.id} #{DateTime.now.to_date}")
@connection.tags.create(:resource_id => snapshot_id, :key => "Date", :value => DateTime.now.to_date)
@connection.tags.create(:resource_id => snapshot_id, :key => "Volume", :value => volume.id)
end
def delete_snapshot(volume, age)
now = Time.new
oldest = now - (age * 60 * 60 * 24)
puts oldest
snapshots = @connection.snapshots.all
snapshots.select!{|snap| snap.tags["Volume"] == volume.id && snap.created_at <= oldest}
snapshots.each { |snap|
puts snap.id
snap.destroy
}
end
def has_value?(value)
!value.to_s.empty?
end
opts = Trollop::options do
opt :environment, "", :type => :string
opt :value, "", :type => :string
opt :key, "", :type => :string
opt :backup, ""
opt :delete, ""
opt :age, "in days", :type => :integer, :default => 0
end
Trollop::die :environment, "needs an environment. Valid values(#{environments.keys.join(',')})" unless environments.keys.include? opts[:environment]
settings = set_environment(opts[:environment]).merge(:provider => 'AWS')
@connection = Fog::Compute.new(settings)
volumes = @connection.volumes.all
volumes.select!{|vol|vol.tags[opts[:key]] == opts[:value]} if has_value? opts[:key]
volumes.each do |volume|
puts volume.id
create_snapshot(volume) if opts[:backup]
if opts[:delete] && has_value?(opts[:key]) && opts[:age] > 0
delete_snapshot(volume, opts[:age])
end
end