stemcell 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -1
- data/bin/stem +50 -34
- data/lib/stemcell/version.rb +1 -1
- data/lib/stemcell.rb +21 -28
- metadata +1 -1
data/.gitignore
CHANGED
data/bin/stem
CHANGED
@@ -24,76 +24,82 @@ END_OF_BANNER
|
|
24
24
|
:default => ENV['AWS_SECRET_KEY']
|
25
25
|
)
|
26
26
|
|
27
|
-
opt('
|
28
|
-
'
|
27
|
+
opt('region',
|
28
|
+
'ec2 region to launch in',
|
29
29
|
:type => String,
|
30
|
-
:default => ENV['
|
30
|
+
:default => ENV['REGION'] ? ENV['REGION'] : 'us-east-1',
|
31
31
|
)
|
32
32
|
|
33
|
-
opt('
|
34
|
-
'
|
33
|
+
opt('machine_type',
|
34
|
+
'instance type to launch',
|
35
35
|
:type => String,
|
36
|
-
:default => ENV['
|
36
|
+
:default => ENV['MACHINE_TYPE'] ? ENV['MACHINE_TYPE'] : 'm1.small',
|
37
37
|
)
|
38
38
|
|
39
|
-
opt('
|
40
|
-
'
|
39
|
+
opt('image',
|
40
|
+
'ami to use for launch',
|
41
41
|
:type => String,
|
42
|
-
:default => ENV['
|
42
|
+
:default => ENV['AMI'] ? ENV['AMI'] : 'ami-d726abbe',
|
43
43
|
)
|
44
44
|
|
45
|
-
opt('
|
46
|
-
'
|
45
|
+
opt('security_group',
|
46
|
+
'security group to launch instance with',
|
47
47
|
:type => String,
|
48
|
-
:default => ENV['
|
48
|
+
:default => ENV['SECURITY_GROUP'] ? ENV['SECURITY_GROUP'] : 'default',
|
49
49
|
)
|
50
50
|
|
51
|
-
opt('
|
52
|
-
'
|
51
|
+
opt('availability-zone',
|
52
|
+
'zone in which to launch instances',
|
53
53
|
:type => String,
|
54
|
-
:default => ENV['
|
54
|
+
:default => ENV['AVAILABILITY-ZONE'],
|
55
|
+
)
|
56
|
+
|
57
|
+
opt('tags',
|
58
|
+
'tags to apply to image',
|
59
|
+
:type => String,
|
60
|
+
:default => ENV['TAGS'],
|
55
61
|
)
|
56
62
|
|
57
63
|
opt('key_name',
|
58
|
-
'ssh key
|
64
|
+
'aws ssh key name for the ubuntu user',
|
59
65
|
:type => String,
|
60
66
|
:default => ENV['KEY_NAME'],
|
61
67
|
)
|
62
68
|
|
63
|
-
opt('
|
64
|
-
'
|
69
|
+
opt('chef_data_bag_secret',
|
70
|
+
'path to secret file (or the string containing the secret)',
|
65
71
|
:type => String,
|
66
|
-
:default => ENV['
|
72
|
+
:default => ENV['CHEF_DATA_BAG_SECRET'],
|
67
73
|
)
|
68
74
|
|
69
|
-
opt('
|
70
|
-
'
|
75
|
+
opt('chef_role',
|
76
|
+
'chef role of instance to be launched',
|
71
77
|
:type => String,
|
72
|
-
:default => ENV['
|
78
|
+
:default => ENV['CHEF_ROLE'],
|
73
79
|
)
|
74
80
|
|
75
|
-
opt('
|
76
|
-
'
|
81
|
+
opt('git_origin',
|
82
|
+
'git origin to use',
|
77
83
|
:type => String,
|
78
|
-
:default => ENV['
|
84
|
+
:default => ENV['GIT_ORIGIN'],
|
79
85
|
)
|
80
86
|
|
81
|
-
opt('
|
82
|
-
'
|
87
|
+
opt('git_branch',
|
88
|
+
'git branch to run off',
|
83
89
|
:type => String,
|
84
|
-
:default => ENV['
|
90
|
+
:default => ENV['GIT_BRANCH'],
|
85
91
|
)
|
86
92
|
|
87
|
-
opt('
|
88
|
-
'
|
93
|
+
opt('git_key',
|
94
|
+
'path to the git repo deploy key (or the string containing the key)',
|
89
95
|
:type => String,
|
90
|
-
:default => ENV['
|
96
|
+
:default => ENV['GIT_KEY'],
|
91
97
|
)
|
92
98
|
|
93
|
-
opt('
|
94
|
-
'
|
99
|
+
opt('count',
|
100
|
+
'number of instances to launch',
|
95
101
|
:type => String,
|
96
|
-
:default => ENV['
|
102
|
+
:default => ENV['COUNT'],
|
97
103
|
)
|
98
104
|
|
99
105
|
end
|
@@ -114,6 +120,16 @@ by the #{arg.upcase.gsub('-','_')} environment variable" if
|
|
114
120
|
options[arg].nil? or ! options[arg]
|
115
121
|
end
|
116
122
|
|
123
|
+
# convert tags from string to ruby hash
|
124
|
+
tags = {}
|
125
|
+
if options['tags']
|
126
|
+
options['tags'].split(',').each do |tag_set|
|
127
|
+
key, value = tag_set.split('=')
|
128
|
+
tags[key] = value
|
129
|
+
end
|
130
|
+
end
|
131
|
+
options['tags'] = tags
|
132
|
+
|
117
133
|
stemcell = Stemcell::Stemcell.new(options)
|
118
134
|
stemcell.launch({'count' => options['count']})
|
119
135
|
|
data/lib/stemcell/version.rb
CHANGED
data/lib/stemcell.rb
CHANGED
@@ -11,6 +11,11 @@ module Stemcell
|
|
11
11
|
@log.debug "opts are #{opts.inspect}"
|
12
12
|
['aws_access_key',
|
13
13
|
'aws_secret_key',
|
14
|
+
'region',
|
15
|
+
'machine_type',
|
16
|
+
'image',
|
17
|
+
'security_group',
|
18
|
+
|
14
19
|
'chef_role',
|
15
20
|
'git_branch',
|
16
21
|
'git_key',
|
@@ -21,10 +26,7 @@ module Stemcell
|
|
21
26
|
instance_variable_set("@#{req}",opts[req])
|
22
27
|
end
|
23
28
|
|
24
|
-
@
|
25
|
-
@image = opts['image'] ? opts['image'] : 'ami-d726abbe'
|
26
|
-
@machine_type = opts['machine_type'] ? opts['machine_type'] : 'm1.small'
|
27
|
-
@region = opts['region'] ? opts['region'] : 'us-east-1'
|
29
|
+
@zone = opts.include?('availability_zone') ? opts['availability_zone'] : nil
|
28
30
|
@ec2_url = "ec2.#{@region}.amazonaws.com"
|
29
31
|
@timeout = 120
|
30
32
|
@start_time = Time.new
|
@@ -35,29 +37,19 @@ module Stemcell
|
|
35
37
|
'created_by' => ENV['USER'],
|
36
38
|
'stemcell' => VERSION,
|
37
39
|
}
|
38
|
-
|
39
|
-
if opts['tags']
|
40
|
-
tags = {}
|
41
|
-
opts['tags'].split(',').each do |tag_set|
|
42
|
-
key, value = tag_set.split('=')
|
43
|
-
tags[key] = value
|
44
|
-
end
|
45
|
-
@tags.merge!(tags)
|
46
|
-
end
|
40
|
+
@tags.merge!(opts['tags']) if opts['tags']
|
47
41
|
|
48
42
|
begin
|
49
43
|
@git_key_contents = File.read(@git_key)
|
50
44
|
rescue Object => e
|
51
|
-
|
52
|
-
@git_key_contents = @chef_validation_key
|
53
|
-
# raise "\ncould not open specified key #{@git_key}:\n#{e.inspect}#{e.backtrace}"
|
45
|
+
@git_key_contents = @git_key # assume content is passed in
|
54
46
|
end
|
55
47
|
|
56
|
-
if opts
|
48
|
+
if opts.include?('chef_data_bag_secret')
|
57
49
|
begin
|
58
50
|
@chef_data_bag_secret = File.read(opts['chef_data_bag_secret'])
|
59
51
|
rescue Object => e
|
60
|
-
|
52
|
+
@chef_data_bag_secret = opts['chef_data_bag_secret'] # assume secret is passed in
|
61
53
|
end
|
62
54
|
else
|
63
55
|
@chef_data_bag_secret = ''
|
@@ -91,21 +83,21 @@ module Stemcell
|
|
91
83
|
end
|
92
84
|
|
93
85
|
def wait(instances)
|
94
|
-
|
86
|
+
@log.info "Waiting for #{instances.count} instances (#{instances.inspect}):"
|
87
|
+
|
95
88
|
while true
|
89
|
+
sleep 5
|
96
90
|
if Time.now - @start_time > @timeout
|
97
91
|
bail(instances)
|
98
92
|
raise TimeoutError, "exceded timeout of #{@timeout}"
|
99
93
|
end
|
100
|
-
|
94
|
+
|
101
95
|
if instances.select{|i| i.status != :running }.empty?
|
102
|
-
|
103
|
-
return
|
96
|
+
break
|
104
97
|
end
|
105
|
-
@log.info "instances not ready yet. sleeping..."
|
106
|
-
sleep 5
|
107
|
-
return wait(instances)
|
108
98
|
end
|
99
|
+
|
100
|
+
@log.info "all instances in running state"
|
109
101
|
end
|
110
102
|
|
111
103
|
def do_launch(opts={})
|
@@ -116,8 +108,9 @@ module Stemcell
|
|
116
108
|
:instance_type => @machine_type,
|
117
109
|
:key_name => @key_name,
|
118
110
|
}
|
119
|
-
options
|
120
|
-
options
|
111
|
+
options[:availability_zone] = @zone if @zone
|
112
|
+
options[:count] = opts['count'] if opts.include?('count')
|
113
|
+
|
121
114
|
instances = @ec2_region.instances.create(options)
|
122
115
|
instances = [instances] unless instances.class == Array
|
123
116
|
instances.each do |instance|
|
@@ -145,9 +138,9 @@ module Stemcell
|
|
145
138
|
def bail(instances)
|
146
139
|
return if instances.nil?
|
147
140
|
instances.each do |instance|
|
141
|
+
log.warn "Terminating instance #{instance.instance_id}"
|
148
142
|
instance.delete
|
149
143
|
end
|
150
144
|
end
|
151
|
-
|
152
145
|
end
|
153
146
|
end
|