ec2launcher 1.0.19 → 1.0.20

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/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.0.20
2
+
3
+ * New command line option to show user-data.
4
+ * New command line option to skip the setup scripts.
5
+ * Changes to handling RAID array assembly from cloned EBS volumes. Specifically arrays created with mdadm < 3.1.2 that don't use version 1.2 superblocks.
6
+ * Fixed typo with cloning/mounting single volumes.
7
+ * Cleaned up launch output.
8
+
1
9
  ## 1.0.19
2
10
 
3
11
  * Fixed typo in launch command.
data/lib/ec2launcher.rb CHANGED
@@ -341,7 +341,16 @@ module EC2Launcher
341
341
  end
342
342
 
343
343
  # Quit if we're only displaying the defaults
344
- exit 0 if @options.show_defaults
344
+ if @options.show_defaults || @options.show_user_data
345
+ if @options.show_user_data
346
+ user_data = build_launch_command(fqdn_names[0], short_hostnames[0], roles, chef_validation_pem_url, aws_keyfile, gems, packages, email_notifications)
347
+ puts ""
348
+ puts "---user-data---"
349
+ puts user_data
350
+ puts "---user-data---"
351
+ end
352
+ exit 0
353
+ end
345
354
 
346
355
  ##############################
347
356
  # Launch the new intance
@@ -362,9 +371,9 @@ module EC2Launcher
362
371
 
363
372
  puts "********************"
364
373
  fqdn_names.each_index do |i|
365
- public_dns_name = instances[i].public_dns_name.nil? ? "no public dns" : instances[i].public_dns_name
366
- private_dns_name = instances[i].private_dns_name.nil? ? "no private dns" : instances[i].private_dns_name
367
- puts "Launched #{fqdn_names[i]} (#{instances[i].id}) [#{public_dns_name} / #{private_dns_name} / #{instances[i].private_ip_address} ]"
374
+ public_dns_name = instances[i].public_dns_name.nil? ? "n/a" : instances[i].public_dns_name
375
+ private_dns_name = instances[i].private_dns_name.nil? ? "n/a" : instances[i].private_dns_name
376
+ puts "** New instance: #{fqdn_names[i]} | #{instances[i].id} | #{public_dns_name} | #{private_dns_name} | #{instances[i].private_ip_address}"
368
377
  end
369
378
 
370
379
  ##############################
@@ -808,37 +817,39 @@ module EC2Launcher
808
817
 
809
818
  user_data += "\n"
810
819
 
811
- if @run_url_script_cache.nil?
812
- puts "Downloading runurl script from #{RUN_URL_SCRIPT}"
813
- @run_url_script_cache = `curl -s #{RUN_URL_SCRIPT} |gzip -f |base64`
814
- end
820
+ unless @options.skip_setup
821
+ if @run_url_script_cache.nil?
822
+ puts "Downloading runurl script from #{RUN_URL_SCRIPT}"
823
+ @run_url_script_cache = `curl -s #{RUN_URL_SCRIPT} |gzip -f |base64`
824
+ end
815
825
 
816
- if @setup_script_cache.nil?
817
- puts "Downloading setup script from #{SETUP_SCRIPT}"
818
- @setup_script_cache = `curl -s #{SETUP_SCRIPT} |gzip -f |base64`
819
- end
826
+ if @setup_script_cache.nil?
827
+ puts "Downloading setup script from #{SETUP_SCRIPT}"
828
+ @setup_script_cache = `curl -s #{SETUP_SCRIPT} |gzip -f |base64`
829
+ end
820
830
 
821
- # runurl script
822
- user_data += "cat > /tmp/runurl.gz.base64 <<End-Of-Message\n"
823
- user_data += @run_url_script_cache
824
- user_data += "End-Of-Message"
831
+ # runurl script
832
+ user_data += "cat > /tmp/runurl.gz.base64 <<End-Of-Message\n"
833
+ user_data += @run_url_script_cache
834
+ user_data += "End-Of-Message"
825
835
 
826
- # setup script
827
- user_data += "\ncat > /tmp/setup.rb.gz.base64 <<End-Of-Message2\n"
828
- user_data += @setup_script_cache
829
- user_data += "End-Of-Message2"
836
+ # setup script
837
+ user_data += "\ncat > /tmp/setup.rb.gz.base64 <<End-Of-Message2\n"
838
+ user_data += @setup_script_cache
839
+ user_data += "End-Of-Message2"
830
840
 
831
- user_data += "\nbase64 -d /tmp/runurl.gz.base64 | gunzip > /tmp/runurl"
832
- user_data += "\nchmod +x /tmp/runurl"
833
- # user_data += "\nrm -f /tmp/runurl.gz.base64"
841
+ user_data += "\nbase64 -d /tmp/runurl.gz.base64 | gunzip > /tmp/runurl"
842
+ user_data += "\nchmod +x /tmp/runurl"
843
+ # user_data += "\nrm -f /tmp/runurl.gz.base64"
834
844
 
835
- user_data += "\nbase64 -d /tmp/setup.rb.gz.base64 | gunzip > /tmp/setup.rb"
836
- user_data += "\nchmod +x /tmp/setup.rb"
837
- # user_data += "\nrm -f /tmp/setup.rb.gz.base64"
845
+ user_data += "\nbase64 -d /tmp/setup.rb.gz.base64 | gunzip > /tmp/setup.rb"
846
+ user_data += "\nchmod +x /tmp/setup.rb"
847
+ # user_data += "\nrm -f /tmp/setup.rb.gz.base64"
838
848
 
839
- user_data += "\n#{setup_json['ruby_path']} /tmp/setup.rb -e #{@environment.name} -a #{@application.name} -h #{fqdn} /tmp/setup.json"
840
- user_data += " -c #{@options.clone_host}" unless @options.clone_host.nil?
841
- user_data += " 2>&1 > /var/log/cloud-startup.log"
849
+ user_data += "\n#{setup_json['ruby_path']} /tmp/setup.rb -e #{@environment.name} -a #{@application.name} -h #{fqdn} /tmp/setup.json"
850
+ user_data += " -c #{@options.clone_host}" unless @options.clone_host.nil?
851
+ user_data += " 2>&1 > /var/log/cloud-startup.log"
852
+ end
842
853
 
843
854
  # Add extra requested commands to the launch sequence
844
855
  unless @options.commands.nil?
@@ -78,38 +78,6 @@ end
78
78
  @config_manager = config_manager[0]
79
79
  end
80
80
  end
81
-
82
- def gem_path(*gem_path)
83
- if gem_path.empty?
84
- @gem_path
85
- else
86
- @gem_path = gem_path[0]
87
- end
88
- end
89
-
90
- def ruby_path(*ruby_path)
91
- if ruby_path.empty?
92
- @ruby_path
93
- else
94
- @ruby_path = ruby_path[0]
95
- end
96
- end
97
-
98
- def chef_path(*chef_path)
99
- if chef_path.empty?
100
- @chef_path
101
- else
102
- @chef_path = chef_path[0]
103
- end
104
- end
105
-
106
- def knife_path(*knife_path)
107
- if knife_path.empty?
108
- @knife_path
109
- else
110
- @knife_path = knife_path[0]
111
- end
112
- end
113
81
  end
114
82
  end
115
83
  end
@@ -33,10 +33,14 @@ module EC2Launcher
33
33
  @options.list = true
34
34
  end
35
35
 
36
- opts.on("-s", "--show-defaults", "Show settings, but do not launch any instances.") do
36
+ opts.on("-s", "--show-defaults", "Show settings, but do not launch any instances. Does not display user-data.") do
37
37
  @options.show_defaults = true
38
38
  end
39
39
 
40
+ opts.on("--show-user-data", "Show user-data, but do not launch any instances.") do
41
+ @options.show_user_data = true
42
+ end
43
+
40
44
  opts.separator ""
41
45
  opts.separator "Required Launch options:"
42
46
 
@@ -63,6 +67,10 @@ module EC2Launcher
63
67
  @options.count = count
64
68
  end
65
69
 
70
+ opts.on("--skip-setup", "Skip running the setup scripts. Still runs pre/post commands.") do
71
+ @options.skip_setup = true
72
+ end
73
+
66
74
  opts.separator ""
67
75
  opts.separator "Overrides:"
68
76
 
@@ -129,12 +137,14 @@ module EC2Launcher
129
137
  @options = OpenStruct.new
130
138
  @options.list = false
131
139
  @options.show_defaults = false
140
+ @options.show_user_data = false
132
141
 
133
142
  @options.environ = nil
134
143
  @options.application = nil
135
144
  @options.commands = []
136
145
  @options.clone_host = nil
137
146
  @options.count = 1
147
+ @options.skip_setup = false
138
148
 
139
149
  @options.ami_id = nil
140
150
  @options.hostname = nil
@@ -2,5 +2,5 @@
2
2
  # Copyright (c) 2012 Sean Laurent
3
3
  #
4
4
  module EC2Launcher
5
- VERSION = "1.0.19"
5
+ VERSION = "1.0.20"
6
6
  end
@@ -213,11 +213,23 @@ def setup_attached_raid_array(system_arch, devices, raid_device = '/dev/md0', ra
213
213
  # $ /sbin/mdadm --detail --scan
214
214
  # mdadm: cannot open /dev/md/0_0: No such file or directory
215
215
  # mdadm: cannot open /dev/md/1_0: No such file or directory
216
- raid_info = `ll /dev/md/0_0 |grep -v "md-device-map" |awk '// { print $9; }' |sort`.split("\n")[-1]
216
+ #
217
+ # This is tied to how the raid array was created, especially if the array was created with an older version of mdadm.
218
+ # See https://bugzilla.redhat.com/show_bug.cgi?id=606481 for a lengthy discussion. We should really be naming RAID
219
+ # arrays correctly and using the HOMEHOST setting to re-assemble it.
220
+ #
221
+ # As a stop-gap, try to use the specified raid_device name passed into this method.
222
+ raid_info = raid_device
223
+
224
+ # We need to manually retrieve the UUID of the array
225
+ array_uuid = `mdadm --detail #{raid_device}|grep UUID|awk '// { print $3; }'`.strip
226
+
227
+ # We have to manually update mdadm.conf as well
228
+ `echo ARRAY #{raid_device} level=raid#{raid_type.to_s} num-devices=#{devices.count.to_s} meta-data=0.90 UUID=#{array_uuid} |tee -a /etc/mdadm.conf`
217
229
  else
218
- raid_info = raid_scan_info.split("\n")[-1].split()
230
+ raid_info = raid_scan_info.split("\n")[-1].split()[1]
219
231
  end
220
- Pathname.new(raid_info[1]).realpath.to_s
232
+ Pathname.new(raid_info).realpath.to_s
221
233
  end
222
234
 
223
235
  def build_block_devices(count, device = "xvdj", &block)
@@ -278,6 +290,7 @@ unless instance_data["block_devices"].nil?
278
290
  end
279
291
  puts `yum install mdadm -y` if raid_required
280
292
 
293
+ raid_array_count = 0
281
294
  next_device_name = "xvdj"
282
295
  instance_data["block_devices"].each do |block_device_json|
283
296
  if block_device_json["raid_level"].nil?
@@ -286,7 +299,7 @@ unless instance_data["block_devices"].nil?
286
299
  partition_devices([ "/dev/#{next_device_name}" ])
287
300
  format_filesystem(system_arch, "/dev/#{next_device_name}1")
288
301
  end
289
- mount_device("#{next_device_name}1", block_device_json["mount_point"], block_device_json["owner"], block_device_json["group"], default_fs_type)
302
+ mount_device("/dev/#{next_device_name}1", block_device_json["mount_point"], block_device_json["owner"], block_device_json["group"], default_fs_type)
290
303
  next_device_name.next!
291
304
  else
292
305
  raid_devices = []
@@ -294,8 +307,9 @@ unless instance_data["block_devices"].nil?
294
307
  raid_devices << "/dev/#{device_name}"
295
308
  next_device_name = device_name
296
309
  end
297
- raid_device_name = setup_attached_raid_array(system_arch, raid_devices, "/dev/md0", block_device_json["raid_level"].to_i, ! options.clone_host.nil?)
310
+ raid_device_name = setup_attached_raid_array(system_arch, raid_devices, "/dev/md#{(127 - raid_array_count).to_s}", block_device_json["raid_level"].to_i, ! options.clone_host.nil?)
298
311
  mount_device(raid_device_name, block_device_json["mount_point"], block_device_json["owner"], block_device_json["group"], default_fs_type)
312
+ raid_array_count += 1
299
313
  end
300
314
  end
301
315
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ec2launcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.19
4
+ version: 1.0.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-03 00:00:00.000000000 Z
12
+ date: 2012-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk