ec2launcher 1.0.27 → 1.0.28
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/lib/ec2launcher/dsl/application.rb +7 -48
- data/lib/ec2launcher/dsl/config.rb +8 -42
- data/lib/ec2launcher/dsl/environment.rb +12 -38
- data/lib/ec2launcher/dsl/helper.rb +19 -0
- data/lib/ec2launcher/version.rb +1 -1
- data/lib/ec2launcher.rb +22 -21
- metadata +1 -1
data/CHANGELOG.md
CHANGED
@@ -38,6 +38,7 @@ module EC2Launcher
|
|
38
38
|
|
39
39
|
attr_reader :name
|
40
40
|
|
41
|
+
dsl_accessor :availability_zone
|
41
42
|
dsl_accessor :basename
|
42
43
|
dsl_accessor :inherit
|
43
44
|
dsl_accessor :instance_type
|
@@ -48,6 +49,12 @@ module EC2Launcher
|
|
48
49
|
dsl_array_accessor :packages
|
49
50
|
dsl_array_accessor :roles
|
50
51
|
|
52
|
+
# Name of the AMI to use for new instances. Optional.
|
53
|
+
# Can be either a string or a regular expression.
|
54
|
+
#
|
55
|
+
# @param [Array, nil] Either an array of parameters or nil to return the AMI name.
|
56
|
+
dsl_regex_accessor :ami_name
|
57
|
+
|
51
58
|
def initialize(name)
|
52
59
|
@name = name
|
53
60
|
@email_notifications = nil
|
@@ -59,34 +66,6 @@ module EC2Launcher
|
|
59
66
|
self
|
60
67
|
end
|
61
68
|
|
62
|
-
# Name of the AMI to use for new instances. Optional.
|
63
|
-
# Can be either a string or a regular expression.
|
64
|
-
#
|
65
|
-
# @param [Array, nil] Either an array of parameters or nil to return the AMI name.
|
66
|
-
def ami_name(*ami_name)
|
67
|
-
if ami_name.empty?
|
68
|
-
@ami_name
|
69
|
-
else
|
70
|
-
if ami_name[0].kind_of? String
|
71
|
-
@ami_name = /#{ami_name[0]}/
|
72
|
-
else
|
73
|
-
@ami_name = ami_name[0]
|
74
|
-
end
|
75
|
-
self
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Name of the availability zone to use for new instances. Optional.
|
80
|
-
# Must be one of EC2Launcher::AVAILABILITY_ZONES.
|
81
|
-
def availability_zone(*zone)
|
82
|
-
if zone.empty?
|
83
|
-
@availability_zone
|
84
|
-
else
|
85
|
-
@availability_zone = zone[0].to_s
|
86
|
-
self
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
69
|
def block_devices(*block_device_data)
|
91
70
|
if block_device_data.empty?
|
92
71
|
@block_devices
|
@@ -156,26 +135,6 @@ module EC2Launcher
|
|
156
135
|
end
|
157
136
|
end
|
158
137
|
|
159
|
-
# Gems to install. Optional.
|
160
|
-
#
|
161
|
-
# Expects either a single String naming a gem to install or
|
162
|
-
# an Array of gems.
|
163
|
-
#
|
164
|
-
# Can be specified multiple times.
|
165
|
-
def gems(*gems)
|
166
|
-
if gems.empty?
|
167
|
-
@gems
|
168
|
-
else
|
169
|
-
@gems = [] if @gems.nil?
|
170
|
-
if gems[0].kind_of? Array
|
171
|
-
@gems += gems[0]
|
172
|
-
else
|
173
|
-
@gems << gems[0]
|
174
|
-
end
|
175
|
-
self
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
138
|
# Takes values from the other server type and merges them into this one
|
180
139
|
def merge(other_server)
|
181
140
|
@name = other_server.name
|
@@ -1,6 +1,8 @@
|
|
1
1
|
#
|
2
2
|
# Copyright (c) 2012 Sean Laurent
|
3
3
|
#
|
4
|
+
require 'ec2launcher/dsl/helper'
|
5
|
+
|
4
6
|
module EC2Launcher
|
5
7
|
module DSL
|
6
8
|
class ConfigDSL
|
@@ -31,53 +33,17 @@ config do
|
|
31
33
|
config_manager "chef"
|
32
34
|
end
|
33
35
|
}.gsub(/^ /, '')
|
36
|
+
|
37
|
+
dsl_accessor :package_manager
|
38
|
+
dsl_accessor :config_manager
|
39
|
+
|
40
|
+
dsl_array_accessor :applications
|
41
|
+
dsl_array_accessor :environments
|
34
42
|
|
35
43
|
def initialize()
|
36
44
|
@environments = []
|
37
45
|
@applications = []
|
38
46
|
end
|
39
|
-
|
40
|
-
def environments(*environments)
|
41
|
-
if environments.empty?
|
42
|
-
@environments
|
43
|
-
else
|
44
|
-
if environments[0].kind_of? Array
|
45
|
-
@environments = @environments[0]
|
46
|
-
else
|
47
|
-
@environments = [ environments[0] ]
|
48
|
-
end
|
49
|
-
self
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def applications(*applications)
|
54
|
-
if applications.empty?
|
55
|
-
@applications
|
56
|
-
else
|
57
|
-
if applications[0].kind_of? Array
|
58
|
-
@applications = @applications[0]
|
59
|
-
else
|
60
|
-
@applications = [ applications[0] ]
|
61
|
-
end
|
62
|
-
self
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def package_manager(*package_manager)
|
67
|
-
if package_manager.empty?
|
68
|
-
@package_manager
|
69
|
-
else
|
70
|
-
@package_manager = package_manager[0]
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def config_manager(*config_manager)
|
75
|
-
if config_manager.empty?
|
76
|
-
@config_manager
|
77
|
-
else
|
78
|
-
@config_manager = config_manager[0]
|
79
|
-
end
|
80
|
-
end
|
81
47
|
end
|
82
48
|
end
|
83
49
|
end
|
@@ -15,6 +15,7 @@ module EC2Launcher
|
|
15
15
|
attr_reader :precommands
|
16
16
|
attr_reader :postcommands
|
17
17
|
|
18
|
+
dsl_accessor :availability_zone
|
18
19
|
dsl_accessor :aws_keyfile
|
19
20
|
dsl_accessor :chef_path
|
20
21
|
dsl_accessor :chef_server_url
|
@@ -28,19 +29,26 @@ module EC2Launcher
|
|
28
29
|
dsl_accessor :short_name
|
29
30
|
dsl_accessor :subnet
|
30
31
|
|
32
|
+
dsl_array_accessor :aliases
|
31
33
|
dsl_array_accessor :gems
|
32
34
|
dsl_array_accessor :packages
|
33
35
|
dsl_array_accessor :precommand
|
34
36
|
dsl_array_accessor :postcommand
|
35
37
|
dsl_array_accessor :roles
|
36
38
|
|
39
|
+
# Name of the AMI to use for new instances. Optional.
|
40
|
+
# Can be either a string or a regular expression.
|
41
|
+
#
|
42
|
+
# @param [Array, nil] Either an array of parameters or nil to return the AMI name.
|
43
|
+
dsl_regex_accessor :ami_name
|
44
|
+
|
37
45
|
def initialize()
|
38
46
|
@aliases = []
|
39
47
|
@email_notifications = nil
|
40
48
|
@gems = []
|
41
49
|
@packages = []
|
42
|
-
@
|
43
|
-
@
|
50
|
+
@precommand = []
|
51
|
+
@postcommand = []
|
44
52
|
@roles = []
|
45
53
|
@security_groups = {}
|
46
54
|
end
|
@@ -51,40 +59,6 @@ module EC2Launcher
|
|
51
59
|
self
|
52
60
|
end
|
53
61
|
|
54
|
-
def aliases(*aliases)
|
55
|
-
if aliases.empty?
|
56
|
-
@aliases
|
57
|
-
else
|
58
|
-
if aliases[0].kind_of? String
|
59
|
-
@aliases = [ aliases[0] ]
|
60
|
-
else
|
61
|
-
@aliases = aliases[0]
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def ami_name(*ami_name)
|
67
|
-
if ami_name.empty?
|
68
|
-
@ami_name
|
69
|
-
else
|
70
|
-
if ami_name[0].kind_of? String
|
71
|
-
@ami_name = /#{ami_name[0]}/
|
72
|
-
else
|
73
|
-
@ami_name = ami_name[0]
|
74
|
-
end
|
75
|
-
self
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def availability_zone(*zone)
|
80
|
-
if zone.empty?
|
81
|
-
@availability_zone
|
82
|
-
else
|
83
|
-
@availability_zone = zone[0].to_s
|
84
|
-
self
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
62
|
# Takes values from the other environment and merges them into this one
|
89
63
|
def merge(other_env)
|
90
64
|
@name =other_env.name
|
@@ -92,8 +66,8 @@ module EC2Launcher
|
|
92
66
|
@gems += other_env.gems unless other_env.gems.nil?
|
93
67
|
@packages += other_env.packages unless other_env.packages.nil?
|
94
68
|
@roles += other_env.roles unless other_env.roles.nil?
|
95
|
-
@
|
96
|
-
@
|
69
|
+
@precommand += other_env.precommand unless other_env.precommand.nil?
|
70
|
+
@postcommand += other_env.postcommand unless other_env.postcommand.nil?
|
97
71
|
unless other_env.security_groups.nil?
|
98
72
|
other_env.security_groups.keys.each do |key|
|
99
73
|
@security_groups[key] = [] if @security_groups[key].nil?
|
@@ -36,4 +36,23 @@ class Module
|
|
36
36
|
}
|
37
37
|
}
|
38
38
|
end
|
39
|
+
|
40
|
+
def dsl_regex_accessor(*symbols)
|
41
|
+
symbols.each { |sym|
|
42
|
+
class_eval %{
|
43
|
+
def #{sym}(*val)
|
44
|
+
if val.empty?
|
45
|
+
@#{sym}
|
46
|
+
else
|
47
|
+
if val[0].kind_of? String
|
48
|
+
@#{sym} = Regexp.new(val[0])
|
49
|
+
else
|
50
|
+
@#{sym} = val[0]
|
51
|
+
end
|
52
|
+
self
|
53
|
+
end
|
54
|
+
end
|
55
|
+
}
|
56
|
+
}
|
57
|
+
end
|
39
58
|
end
|
data/lib/ec2launcher/version.rb
CHANGED
data/lib/ec2launcher.rb
CHANGED
@@ -381,15 +381,15 @@ module EC2Launcher
|
|
381
381
|
instance = launch_instance(fqdn_names[i], ami.ami_id, availability_zone, key_name, security_group_ids, instance_type, user_data, block_device_mappings, block_device_tags, subnet)
|
382
382
|
instances << instance
|
383
383
|
|
384
|
-
public_dns_name = instance
|
385
|
-
private_dns_name = instance
|
384
|
+
public_dns_name = get_instance_dns(instance, true)
|
385
|
+
private_dns_name = get_instance_dns(instance, false)
|
386
386
|
@log.info "Launched #{fqdn_names[i]} (#{instance.id}) [#{public_dns_name} / #{private_dns_name} / #{instance.private_ip_address} ]"
|
387
387
|
end
|
388
388
|
|
389
389
|
@log.info "********************"
|
390
390
|
fqdn_names.each_index do |i|
|
391
|
-
public_dns_name = instances[i]
|
392
|
-
private_dns_name = instances[i]
|
391
|
+
public_dns_name = get_instance_dns(instances[i], true)
|
392
|
+
private_dns_name = get_instance_dns(instances[i], false)
|
393
393
|
@log.warn "** New instance: #{fqdn_names[i]} | #{instances[i].id} | #{public_dns_name} | #{private_dns_name} | #{instances[i].private_ip_address}"
|
394
394
|
end
|
395
395
|
|
@@ -464,19 +464,6 @@ module EC2Launcher
|
|
464
464
|
dirs
|
465
465
|
end
|
466
466
|
|
467
|
-
# Builds the path to an executable.
|
468
|
-
def build_path(instance_path, executable, default_path)
|
469
|
-
app_path = default_path
|
470
|
-
unless instance_path.nil?
|
471
|
-
if instance_path =~ /#{executable}$/
|
472
|
-
app_path = instance_path
|
473
|
-
else
|
474
|
-
app_path = File.join(instance_path, executable)
|
475
|
-
end
|
476
|
-
end
|
477
|
-
app_path
|
478
|
-
end
|
479
|
-
|
480
467
|
# Searches for the most recent AMI matching the criteria.
|
481
468
|
#
|
482
469
|
# @param [String] arch system archicture, `i386` or `x86_64`
|
@@ -530,6 +517,19 @@ module EC2Launcher
|
|
530
517
|
AmiDetails.new(ami_name, ami_id)
|
531
518
|
end
|
532
519
|
|
520
|
+
# Retrieves either the public or private DNS entry for an EC2 Instance. Returns "n/a" if the
|
521
|
+
# request DNS entry is undefined.
|
522
|
+
#
|
523
|
+
# @param [AWS::EC2::Instance] ec2 instance
|
524
|
+
# @param [Boolean] True for public DNS or False for private DNS
|
525
|
+
#
|
526
|
+
# @return [String] DNS for the instance or "n/a" if undefined.
|
527
|
+
#
|
528
|
+
def get_instance_dns(ec2_instance, public = true)
|
529
|
+
dns_name = public ? instance.public_dns_name : instance.private_dns_name
|
530
|
+
dns_name.nil? ? "n/a" : dns_name
|
531
|
+
end
|
532
|
+
|
533
533
|
# Initializes connections to the AWS SDK
|
534
534
|
#
|
535
535
|
def initialize_aws()
|
@@ -827,8 +827,9 @@ module EC2Launcher
|
|
827
827
|
user_data += "\necho '#{setup_json.to_json}' > /tmp/setup.json"
|
828
828
|
|
829
829
|
# pre-commands, if necessary
|
830
|
-
|
831
|
-
|
830
|
+
puts "Precommands: #{@environment.precommands}"
|
831
|
+
unless @environment.precommand.nil? || @environment.precommand.empty?
|
832
|
+
commands = @environment.precommand.collect {|cmd| substitute_command_variables(cmd) }
|
832
833
|
user_data += "\n" + commands.join("\n")
|
833
834
|
end
|
834
835
|
|
@@ -875,8 +876,8 @@ module EC2Launcher
|
|
875
876
|
end
|
876
877
|
|
877
878
|
# Post commands
|
878
|
-
unless @environment.
|
879
|
-
commands = @environment.
|
879
|
+
unless @environment.postcommand.nil? || @environment.postcommand.empty?
|
880
|
+
commands = @environment.postcommand.collect {|cmd| substitute_command_variables(cmd) }
|
880
881
|
user_data += "\n" + commands.join("\n")
|
881
882
|
end
|
882
883
|
user_data
|