ec2launcher 1.5.0 → 1.5.1
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 +4 -0
 - data/lib/ec2launcher/environment_processor.rb +5 -1
 - data/lib/ec2launcher/version.rb +1 -1
 - data/startup-scripts/setup_instance.rb +50 -23
 - metadata +2 -2
 
    
        data/CHANGELOG.md
    CHANGED
    
    
| 
         @@ -28,7 +28,6 @@ module EC2Launcher 
     | 
|
| 
       28 
28 
     | 
    
         
             
                      validate_environment(filename, new_env)
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                      @environments[new_env.name] = new_env
         
     | 
| 
       31 
     | 
    
         
            -
                      new_env.aliases.each {|env_alias| @environments[env_alias] = new_env }
         
     | 
| 
       32 
31 
     | 
    
         
             
                    end
         
     | 
| 
       33 
32 
     | 
    
         
             
                  end
         
     | 
| 
       34 
33 
     | 
    
         | 
| 
         @@ -37,6 +36,11 @@ module EC2Launcher 
     | 
|
| 
       37 
36 
     | 
    
         
             
                    new_env = process_environment_inheritance(env)
         
     | 
| 
       38 
37 
     | 
    
         
             
                    @environments[new_env.name] = new_env
         
     | 
| 
       39 
38 
     | 
    
         
             
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  # Process aliases
         
     | 
| 
      
 41 
     | 
    
         
            +
                  @environments.values.each do |env|
         
     | 
| 
      
 42 
     | 
    
         
            +
                    env.aliases.each {|env_alias| @environments[env_alias] = env }
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
       40 
44 
     | 
    
         
             
                end
         
     | 
| 
       41 
45 
     | 
    
         | 
| 
       42 
46 
     | 
    
         
             
                private
         
     | 
    
        data/lib/ec2launcher/version.rb
    CHANGED
    
    
| 
         @@ -113,17 +113,18 @@ class InstanceSetup 
     | 
|
| 
       113 
113 
     | 
    
         
             
                ##############################
         
     | 
| 
       114 
114 
     | 
    
         
             
                # EBS VOLUMES
         
     | 
| 
       115 
115 
     | 
    
         
             
                ##############################
         
     | 
| 
       116 
     | 
    
         
            -
                 
     | 
| 
      
 116 
     | 
    
         
            +
                @system_arch = `uname -p`.strip
         
     | 
| 
      
 117 
     | 
    
         
            +
                @default_fs_type = @system_arch == "x86_64" ? "xfs" : "ext4"
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                # Create and setup EBS volumes
         
     | 
| 
       117 
120 
     | 
    
         
             
                setup_ebs_volumes(instance_data) unless instance_data["block_devices"].nil?
         
     | 
| 
       118 
121 
     | 
    
         | 
| 
       119 
122 
     | 
    
         
             
                ##############################
         
     | 
| 
       120 
123 
     | 
    
         
             
                # EPHEMERAL VOLUMES
         
     | 
| 
       121 
124 
     | 
    
         
             
                ##############################
         
     | 
| 
       122 
     | 
    
         
            -
                system_arch = `uname -p`.strip
         
     | 
| 
       123 
     | 
    
         
            -
                default_fs_type = system_arch == "x86_64" ? "xfs" : "ext4"
         
     | 
| 
       124 
125 
     | 
    
         | 
| 
       125 
126 
     | 
    
         
             
                #  Process ephemeral devices first
         
     | 
| 
       126 
     | 
    
         
            -
                ephemeral_drive_count = case EC2_INSTANCE_TYPE
         
     | 
| 
      
 127 
     | 
    
         
            +
                ephemeral_drive_count = case @EC2_INSTANCE_TYPE
         
     | 
| 
       127 
128 
     | 
    
         
             
                  when "m1.small" then 1
         
     | 
| 
       128 
129 
     | 
    
         
             
                  when "m1.medium" then 1
         
     | 
| 
       129 
130 
     | 
    
         
             
                  when "m2.xlarge" then 1
         
     | 
| 
         @@ -148,13 +149,13 @@ class InstanceSetup 
     | 
|
| 
       148 
149 
     | 
    
         | 
| 
       149 
150 
     | 
    
         
             
                # Format and mount the ephemeral drives
         
     | 
| 
       150 
151 
     | 
    
         
             
                build_block_devices(ephemeral_drive_count, "xvdf") do |device_name, index|
         
     | 
| 
       151 
     | 
    
         
            -
                  format_filesystem(system_arch, "/dev/#{device_name}1")
         
     | 
| 
      
 152 
     | 
    
         
            +
                  format_filesystem(@system_arch, "/dev/#{device_name}1")
         
     | 
| 
       152 
153 
     | 
    
         | 
| 
       153 
154 
     | 
    
         
             
                  mount_point = case index
         
     | 
| 
       154 
155 
     | 
    
         
             
                    when 0 then "/mnt"
         
     | 
| 
       155 
156 
     | 
    
         
             
                    else "/mnt/extra#{index - 1}"
         
     | 
| 
       156 
157 
     | 
    
         
             
                  end
         
     | 
| 
       157 
     | 
    
         
            -
                  mount_device("/dev/#{device_name}1", mount_point, "root", "root", default_fs_type)
         
     | 
| 
      
 158 
     | 
    
         
            +
                  mount_device("/dev/#{device_name}1", mount_point, "root", "root", @default_fs_type)
         
     | 
| 
       158 
159 
     | 
    
         
             
                end
         
     | 
| 
       159 
160 
     | 
    
         | 
| 
       160 
161 
     | 
    
         
             
                ##############################
         
     | 
| 
         @@ -170,7 +171,7 @@ class InstanceSetup 
     | 
|
| 
       170 
171 
     | 
    
         
             
                knife_config = <<EOF
         
     | 
| 
       171 
172 
     | 
    
         
             
            log_level                :info
         
     | 
| 
       172 
173 
     | 
    
         
             
            log_location             STDOUT
         
     | 
| 
       173 
     | 
    
         
            -
            node_name                '#{options.hostname}'
         
     | 
| 
      
 174 
     | 
    
         
            +
            node_name                '#{@options.hostname}'
         
     | 
| 
       174 
175 
     | 
    
         
             
            client_key               '/etc/chef/client.pem'
         
     | 
| 
       175 
176 
     | 
    
         
             
            validation_client_name   'chef-validator'
         
     | 
| 
       176 
177 
     | 
    
         
             
            validation_key           '/etc/chef/validation.pem'
         
     | 
| 
         @@ -186,7 +187,7 @@ EOF 
     | 
|
| 
       186 
187 
     | 
    
         
             
                ##############################
         
     | 
| 
       187 
188 
     | 
    
         
             
                # Add roles
         
     | 
| 
       188 
189 
     | 
    
         
             
                instance_data["roles"].each do |role|
         
     | 
| 
       189 
     | 
    
         
            -
                  cmd = "#{knife_path} node run_list add #{options.hostname} \"role[#{role}]\""
         
     | 
| 
      
 190 
     | 
    
         
            +
                  cmd = "#{knife_path} node run_list add #{@options.hostname} \"role[#{role}]\""
         
     | 
| 
       190 
191 
     | 
    
         
             
                  puts cmd
         
     | 
| 
       191 
192 
     | 
    
         
             
                  puts `#{cmd}`
         
     | 
| 
       192 
193 
     | 
    
         
             
                end
         
     | 
| 
         @@ -217,9 +218,9 @@ EOF 
     | 
|
| 
       217 
218 
     | 
    
         
             
                  ses.send_email(
         
     | 
| 
       218 
219 
     | 
    
         
             
                    :from => instance_data["email_notifications"]["from"],
         
     | 
| 
       219 
220 
     | 
    
         
             
                    :to => instance_data["email_notifications"]["to"],
         
     | 
| 
       220 
     | 
    
         
            -
                    :subject => "Server setup complete: #{options.hostname}",
         
     | 
| 
       221 
     | 
    
         
            -
                    :body_text => "Server setup is complete for Host: #{options.hostname}, Environment: #{options.environ}, Application: #{options.application}",
         
     | 
| 
       222 
     | 
    
         
            -
                    :body_html => "<div>Server setup is complete for:</div><div><strong>Host:</strong> #{options.hostname}</div><div><strong>Environment:</strong> #{options.environ}</div><div><strong>Application:</strong> #{options.application}</div>"
         
     | 
| 
      
 221 
     | 
    
         
            +
                    :subject => "Server setup complete: #{@options.hostname}",
         
     | 
| 
      
 222 
     | 
    
         
            +
                    :body_text => "Server setup is complete for Host: #{@options.hostname}, Environment: #{@options.environ}, Application: #{@options.application}",
         
     | 
| 
      
 223 
     | 
    
         
            +
                    :body_html => "<div>Server setup is complete for:</div><div><strong>Host:</strong> #{@options.hostname}</div><div><strong>Environment:</strong> #{@options.environ}</div><div><strong>Application:</strong> #{@options.application}</div>"
         
     | 
| 
       223 
224 
     | 
    
         
             
                  )
         
     | 
| 
       224 
225 
     | 
    
         
             
                else
         
     | 
| 
       225 
226 
     | 
    
         
             
                  puts "Skipping email notification."
         
     | 
| 
         @@ -270,8 +271,15 @@ EOF 
     | 
|
| 
       270 
271 
     | 
    
         
             
                run_with_backoff(60, 1, "attaching volume #{volume.id} to #{device_name}") do
         
     | 
| 
       271 
272 
     | 
    
         
             
                  attachment = volume.attach_to(instance, device_name)
         
     | 
| 
       272 
273 
     | 
    
         
             
                end
         
     | 
| 
      
 274 
     | 
    
         
            +
             
     | 
| 
       273 
275 
     | 
    
         
             
                volume_attached = test_with_backoff(60, 1, "check EBS volume attached #{device_name} (#{volume.id})") do
         
     | 
| 
       274 
     | 
    
         
            -
                   
     | 
| 
      
 276 
     | 
    
         
            +
                  attatched = false
         
     | 
| 
      
 277 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 278 
     | 
    
         
            +
                    attached = attachment.status == :attached
         
     | 
| 
      
 279 
     | 
    
         
            +
                  rescue AWS::Core::Resource::NotFound
         
     | 
| 
      
 280 
     | 
    
         
            +
                    # This can occur when trying to access the attachment. Not sure how or why. Best to retry.
         
     | 
| 
      
 281 
     | 
    
         
            +
                  end
         
     | 
| 
      
 282 
     | 
    
         
            +
                  attached
         
     | 
| 
       275 
283 
     | 
    
         
             
                end
         
     | 
| 
       276 
284 
     | 
    
         | 
| 
       277 
285 
     | 
    
         
             
                # TODO: Handle when volume fails to attach
         
     | 
| 
         @@ -360,24 +368,24 @@ EOF 
     | 
|
| 
       360 
368 
     | 
    
         | 
| 
       361 
369 
     | 
    
         
             
                raid_array_count = 0
         
     | 
| 
       362 
370 
     | 
    
         
             
                next_device_name = "xvdj"
         
     | 
| 
       363 
     | 
    
         
            -
                instance_data["block_devices"].each do | 
     | 
| 
       364 
     | 
    
         
            -
                  if  
     | 
| 
      
 371 
     | 
    
         
            +
                instance_data["block_devices"].each do |block_device|
         
     | 
| 
      
 372 
     | 
    
         
            +
                  if block_device.raid_level.nil?
         
     | 
| 
       365 
373 
     | 
    
         
             
                    # If we're not cloning an existing snapshot, then we need to partition and format the drive.
         
     | 
| 
       366 
     | 
    
         
            -
                    if options.clone_host.nil?
         
     | 
| 
      
 374 
     | 
    
         
            +
                    if @options.clone_host.nil?
         
     | 
| 
       367 
375 
     | 
    
         
             
                      partition_devices([ "/dev/#{next_device_name}" ])
         
     | 
| 
       368 
     | 
    
         
            -
                      format_filesystem(system_arch, "/dev/#{next_device_name}1")
         
     | 
| 
      
 376 
     | 
    
         
            +
                      format_filesystem(@system_arch, "/dev/#{next_device_name}1")
         
     | 
| 
       369 
377 
     | 
    
         
             
                    end
         
     | 
| 
       370 
     | 
    
         
            -
                    mount_device("/dev/#{next_device_name}1",  
     | 
| 
      
 378 
     | 
    
         
            +
                    mount_device("/dev/#{next_device_name}1", block_device.mount, block_device.owner, block_device.group, @default_fs_type)
         
     | 
| 
       371 
379 
     | 
    
         
             
                    next_device_name.next!
         
     | 
| 
       372 
380 
     | 
    
         
             
                  else
         
     | 
| 
       373 
381 
     | 
    
         
             
                    raid_devices = []
         
     | 
| 
       374 
     | 
    
         
            -
                    build_block_devices( 
     | 
| 
      
 382 
     | 
    
         
            +
                    build_block_devices(block_device.count, next_device_name) do |device_name, index|
         
     | 
| 
       375 
383 
     | 
    
         
             
                      raid_devices << "/dev/#{device_name}"
         
     | 
| 
       376 
384 
     | 
    
         
             
                      next_device_name = device_name
         
     | 
| 
       377 
385 
     | 
    
         
             
                    end
         
     | 
| 
       378 
     | 
    
         
            -
                    puts "Setting up attached raid array... system_arch = #{system_arch}, raid_devices = #{raid_devices}, device = /dev/md#{(127 - raid_array_count).to_s}"
         
     | 
| 
       379 
     | 
    
         
            -
                    raid_device_name = setup_attached_raid_array(system_arch, raid_devices, "/dev/md#{(127 - raid_array_count).to_s}",  
     | 
| 
       380 
     | 
    
         
            -
                    mount_device(raid_device_name,  
     | 
| 
      
 386 
     | 
    
         
            +
                    puts "Setting up attached raid array... system_arch = #{@system_arch}, raid_devices = #{raid_devices}, device = /dev/md#{(127 - raid_array_count).to_s}"
         
     | 
| 
      
 387 
     | 
    
         
            +
                    raid_device_name = setup_attached_raid_array(@system_arch, raid_devices, "/dev/md#{(127 - raid_array_count).to_s}", block_device.raid_level.to_i, ! @options.clone_host.nil?)
         
     | 
| 
      
 388 
     | 
    
         
            +
                    mount_device(raid_device_name, block_device.mount, block_device.owner, block_device.group, @default_fs_type)
         
     | 
| 
       381 
389 
     | 
    
         
             
                    raid_array_count += 1
         
     | 
| 
       382 
390 
     | 
    
         
             
                  end
         
     | 
| 
       383 
391 
     | 
    
         
             
                end
         
     | 
| 
         @@ -423,8 +431,14 @@ EOF 
     | 
|
| 
       423 
431 
     | 
    
         
             
              end
         
     | 
| 
       424 
432 
     | 
    
         | 
| 
       425 
433 
     | 
    
         
             
              # Partitions a list of mounted EBS volumes
         
     | 
| 
       426 
     | 
    
         
            -
              def partition_devices(device_list)
         
     | 
| 
       427 
     | 
    
         
            -
                 
     | 
| 
      
 434 
     | 
    
         
            +
              def partition_devices(device_list, attempt = 0, max_attempts = 3)
         
     | 
| 
      
 435 
     | 
    
         
            +
                return false if attempt >= max_attempts
         
     | 
| 
      
 436 
     | 
    
         
            +
             
     | 
| 
      
 437 
     | 
    
         
            +
                puts case attempt
         
     | 
| 
      
 438 
     | 
    
         
            +
                  when 0 then  "Partioning devices ..." 
         
     | 
| 
      
 439 
     | 
    
         
            +
                  else "Retrying device partitioning (attempt #{attempt + 1}) ..." 
         
     | 
| 
      
 440 
     | 
    
         
            +
                end
         
     | 
| 
      
 441 
     | 
    
         
            +
             
     | 
| 
       428 
442 
     | 
    
         
             
                device_list.each do |device|
         
     | 
| 
       429 
443 
     | 
    
         
             
                  puts "  * #{device}"
         
     | 
| 
       430 
444 
     | 
    
         
             
                  `echo 0|sfdisk #{device}`
         
     | 
| 
         @@ -432,6 +446,19 @@ EOF 
     | 
|
| 
       432 
446 
     | 
    
         | 
| 
       433 
447 
     | 
    
         
             
                puts "Sleeping 10 seconds to reload partition tables ..."
         
     | 
| 
       434 
448 
     | 
    
         
             
                sleep 10
         
     | 
| 
      
 449 
     | 
    
         
            +
             
     | 
| 
      
 450 
     | 
    
         
            +
                # Verify all volumes were properly partitioned
         
     | 
| 
      
 451 
     | 
    
         
            +
                missing_devices = []
         
     | 
| 
      
 452 
     | 
    
         
            +
                device_list.each do |device|
         
     | 
| 
      
 453 
     | 
    
         
            +
                  missing_devices << device unless File.exists?("#{device}1")
         
     | 
| 
      
 454 
     | 
    
         
            +
                end
         
     | 
| 
      
 455 
     | 
    
         
            +
             
     | 
| 
      
 456 
     | 
    
         
            +
                # Retry partitioning for failed volumes
         
     | 
| 
      
 457 
     | 
    
         
            +
                response = true
         
     | 
| 
      
 458 
     | 
    
         
            +
                if missing_devices.size > 0
         
     | 
| 
      
 459 
     | 
    
         
            +
                  response = partition_devices(missing_devices, attempt + 1, max_attempts)
         
     | 
| 
      
 460 
     | 
    
         
            +
                end
         
     | 
| 
      
 461 
     | 
    
         
            +
                response
         
     | 
| 
       435 
462 
     | 
    
         
             
              end
         
     | 
| 
       436 
463 
     | 
    
         | 
| 
       437 
464 
     | 
    
         
             
              ##############################
         
     | 
    
        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.5. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.5.1
         
     | 
| 
       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-12- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-12-12 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: aws-sdk
         
     |