Module: Stem::Family
- Extended by:
- Family
- Includes:
- Util
- Included in:
- Family
- Defined in:
- lib/stem/family.rb
Instance Method Summary
collapse
-
#ami_for(family, release, architecture = "x86_64") ⇒ Object
-
#build_image(family, config, userdata) ⇒ Object
-
#describe_members(family) ⇒ Object
-
#image_already_built?(family, config, userdata) ⇒ Boolean
-
#image_hash(config, userdata) ⇒ Object
-
#member?(family, ami) ⇒ Boolean
-
#members(family) ⇒ Object
-
#release(family, release_name, *amis) ⇒ Object
-
#unrelease(family, release_name) ⇒ Object
Methods included from Util
#get_filter_opts, #swirl, #tags_to_filter, #tagset_to_hash
Instance Method Details
#ami_for(family, release, architecture = "x86_64") ⇒ Object
6
7
8
9
10
11
12
|
# File 'lib/stem/family.rb', line 6
def ami_for(family, release, architecture = "x86_64")
amis = Stem::Image::tagged(:family => family,
:release => release,
:architecture => architecture)
throw "More than one AMI matched release." if amis.length > 1
amis[0]
end
|
#build_image(family, config, userdata) ⇒ Object
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
70
71
|
# File 'lib/stem/family.rb', line 41
def build_image(family, config, userdata)
log = lambda { |msg|
puts "[#{family}|#{Time.now.to_s}] #{msg}"
}
aggregate_hash_options_for_ami!(config)
sha1 = image_hash(config, userdata)
log.call "Beginning to build image for #{family}"
log.call "Config:\n------\n#{ config.inspect }\n-------"
instance_id = Stem::Instance.launch(config, userdata)
log.call "Booting #{instance_id} to produce your prototype instance"
wait_for_stopped instance_id, log
timestamp = Time.now.utc.iso8601
image_id = Stem::Image.create("#{family}-#{timestamp}",
instance_id,
{
:created => timestamp,
:family => family,
:sha1 => sha1,
:source_ami => config["ami"]
})
log.call "Image ID is #{image_id}"
wait_for_available(image_id, log)
log "Terminating #{instance_id} now that the image is captured"
Stem::Instance::destroy(instance_id)
end
|
#describe_members(family) ⇒ Object
29
30
31
|
# File 'lib/stem/family.rb', line 29
def describe_members family
Stem::Image.describe_tagged("family" => family)
end
|
#image_already_built?(family, config, userdata) ⇒ Boolean
73
74
75
76
77
|
# File 'lib/stem/family.rb', line 73
def image_already_built?(family, config, userdata)
aggregate_hash_options_for_ami!(config)
sha1 = image_hash(config, userdata)
!Stem::Image.tagged(:family => family, :sha1 => sha1).empty?
end
|
#image_hash(config, userdata) ⇒ Object
79
80
81
|
# File 'lib/stem/family.rb', line 79
def image_hash(config, userdata)
Digest::SHA1::hexdigest([config.to_s, userdata].join(' '))
end
|
#member?(family, ami) ⇒ Boolean
19
20
21
22
23
|
# File 'lib/stem/family.rb', line 19
def member? family, ami
desc = Stem::Image::describe(ami)
throw "AMI #{ami} does not exist" if desc.nil?
tagset_to_hash(desc["tagSet"])["family"] == family
end
|
#members(family) ⇒ Object
25
26
27
|
# File 'lib/stem/family.rb', line 25
def members family
Stem::Image.tagged("family" => family)
end
|
#release(family, release_name, *amis) ⇒ Object
33
34
35
36
37
38
39
|
# File 'lib/stem/family.rb', line 33
def release family, release_name, *amis
amis.each do |ami|
throw "#{ami} not part of #{family}" unless member?(family, ami)
end
unrelease family, release_name
amis.each { |ami| Stem::Tag::create(ami, :release => release_name) }
end
|
#unrelease(family, release_name) ⇒ Object
14
15
16
17
|
# File 'lib/stem/family.rb', line 14
def unrelease family, release_name
prev = Stem::Image::tagged(:family => family, :release => release_name)
prev.each { |ami| Stem::Tag::destroy(ami, :release => release_name) }
end
|