ec2launcher 1.6.15 → 1.7.0
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.
- checksums.yaml +8 -8
 - data/CHANGELOG.md +9 -0
 - data/Gemfile.lock +28 -0
 - data/Rakefile +11 -2
 - data/lib/ec2launcher/block_device_builder.rb +6 -4
 - data/lib/ec2launcher/dynamic_hostname_generator.rb +56 -0
 - data/lib/ec2launcher/hostname_generator.rb +30 -20
 - data/lib/ec2launcher/hostnames/host_name_generation.rb +42 -0
 - data/lib/ec2launcher/init_options.rb +10 -0
 - data/lib/ec2launcher/route53.rb +6 -0
 - data/lib/ec2launcher/version.rb +1 -1
 - data/lib/ec2launcher.rb +98 -50
 - data/startup-scripts/setup.rb +23 -15
 - data/startup-scripts/setup_instance.rb +66 -5
 - data/test/spec/dynamic_hostname_generator_spec.rb +29 -0
 - data/test/spec/hostnames/host_name_generation_spec.rb +42 -0
 - data/test/test_helper.rb +0 -1
 - data/test/unit/block_device_builder.rb +102 -0
 - data/test/{ec2launcher → unit}/dsl/config_parser_test.rb +1 -0
 - data/test/unit/route53_test.rb +184 -0
 - metadata +25 -19
 - data/.gitignore +0 -17
 - data/bin/ec2launcher +0 -38
 - data/ec2launcher.gemspec +0 -24
 - data/yard_extensions/dsl_attribute_handler.rb +0 -14
 
    
        data/startup-scripts/setup.rb
    CHANGED
    
    | 
         @@ -9,6 +9,8 @@ require 'json' 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            require 'ec2launcher'
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
            require 'aws-sdk'
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       12 
14 
     | 
    
         
             
            SETUP_SCRIPT = "setup_instance.rb"
         
     | 
| 
       13 
15 
     | 
    
         | 
| 
       14 
16 
     | 
    
         
             
            class InitOptions
         
     | 
| 
         @@ -78,23 +80,40 @@ end 
     | 
|
| 
       78 
80 
     | 
    
         
             
            option_parser = InitOptions.new
         
     | 
| 
       79 
81 
     | 
    
         
             
            options = option_parser.parse(ARGV)
         
     | 
| 
       80 
82 
     | 
    
         | 
| 
      
 83 
     | 
    
         
            +
            if ARGV.length < 1
         
     | 
| 
      
 84 
     | 
    
         
            +
              option_parser.help
         
     | 
| 
      
 85 
     | 
    
         
            +
              abort
         
     | 
| 
      
 86 
     | 
    
         
            +
            end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
       81 
88 
     | 
    
         
             
            setup_json_filename = ARGV[0]
         
     | 
| 
       82 
89 
     | 
    
         | 
| 
      
 90 
     | 
    
         
            +
            begin
         
     | 
| 
      
 91 
     | 
    
         
            +
              logger = Log4r::Logger['ec2launcher']
         
     | 
| 
      
 92 
     | 
    
         
            +
              unless logger
         
     | 
| 
      
 93 
     | 
    
         
            +
                logger = Log4r::Logger.new 'ec2launcher'
         
     | 
| 
      
 94 
     | 
    
         
            +
                log_output = Log4r::Outputter.stdout
         
     | 
| 
      
 95 
     | 
    
         
            +
                log_output.formatter = PatternFormatter.new :pattern => "%m"
         
     | 
| 
      
 96 
     | 
    
         
            +
                logger.outputters = log_output
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
            rescue
         
     | 
| 
      
 99 
     | 
    
         
            +
            end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
       83 
101 
     | 
    
         
             
            # Read the setup JSON file
         
     | 
| 
       84 
102 
     | 
    
         
             
            instance_data = JSON.parse(File.read(setup_json_filename))
         
     | 
| 
       85 
103 
     | 
    
         | 
| 
       86 
104 
     | 
    
         
             
            # Path to executables
         
     | 
| 
       87 
105 
     | 
    
         
             
            gem_path = instance_data["gem_path"]
         
     | 
| 
       88 
106 
     | 
    
         
             
            ruby_path = instance_data["ruby_path"]
         
     | 
| 
       89 
     | 
    
         
            -
            chef_path = instance_data["chef_path"]
         
     | 
| 
       90 
107 
     | 
    
         | 
| 
       91 
108 
     | 
    
         
             
            # Pre-install gems
         
     | 
| 
       92 
109 
     | 
    
         
             
            unless instance_data["gems"].nil?
         
     | 
| 
      
 110 
     | 
    
         
            +
              puts "Preinstalling gems..."
         
     | 
| 
       93 
111 
     | 
    
         
             
            	instance_data["gems"].each {|gem_name| puts `#{gem_path} install --no-rdoc --no-ri #{gem_name}` }
         
     | 
| 
       94 
112 
     | 
    
         
             
            end
         
     | 
| 
       95 
113 
     | 
    
         | 
| 
       96 
114 
     | 
    
         
             
            # Pre-install packages
         
     | 
| 
       97 
115 
     | 
    
         
             
            unless instance_data["packages"].nil?
         
     | 
| 
      
 116 
     | 
    
         
            +
              puts "Preinstalling packages..."
         
     | 
| 
       98 
117 
     | 
    
         
             
              puts `yum install #{instance_data["packages"].join(" ")} -y`
         
     | 
| 
       99 
118 
     | 
    
         
             
            end
         
     | 
| 
       100 
119 
     | 
    
         | 
| 
         @@ -138,22 +157,11 @@ end 
     | 
|
| 
       138 
157 
     | 
    
         
             
            puts "Retrieving Chef validation.pem ..."
         
     | 
| 
       139 
158 
     | 
    
         
             
            puts `s3curl.pl --id startup #{instance_data['chef_validation_pem_url']} > /etc/chef/validation.pem`
         
     | 
| 
       140 
159 
     | 
    
         | 
| 
       141 
     | 
    
         
            -
            # Setting hostname
         
     | 
| 
       142 
     | 
    
         
            -
            puts "Setting hostname ... #{options.hostname}"
         
     | 
| 
       143 
     | 
    
         
            -
            `hostname #{options.hostname}`
         
     | 
| 
       144 
     | 
    
         
            -
            `sed -i 's/^HOSTNAME=.*$/HOSTNAME=#{options.hostname}/' /etc/sysconfig/network`
         
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
            # Set Chef node name
         
     | 
| 
       147 
     | 
    
         
            -
            File.open("/etc/chef/client.rb", 'a') { |f| f.write("node_name \"#{options.hostname}\"") }
         
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
            # Setup Chef client
         
     | 
| 
       150 
     | 
    
         
            -
            puts "Connecting to Chef ..."
         
     | 
| 
       151 
     | 
    
         
            -
            `rm -f /etc/chef/client.pem`
         
     | 
| 
       152 
     | 
    
         
            -
            puts `#{chef_path}`
         
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
160 
     | 
    
         
             
            # Retrieve secondary setup script and run it
         
     | 
| 
       155 
161 
     | 
    
         
             
            puts "Launching role setup script ..."
         
     | 
| 
       156 
     | 
    
         
            -
            command = "#{ruby_path} /tmp/#{SETUP_SCRIPT} -a #{options.application} -e #{options.environ}  
     | 
| 
      
 162 
     | 
    
         
            +
            command = "#{ruby_path} /tmp/#{SETUP_SCRIPT} -a #{options.application} -e #{options.environ} "
         
     | 
| 
      
 163 
     | 
    
         
            +
            command += " -h #{options.hostname} " if options.hostname
         
     | 
| 
      
 164 
     | 
    
         
            +
            command += "#{setup_json_filename}"
         
     | 
| 
       157 
165 
     | 
    
         
             
            command += " -c #{options.clone_host}" unless options.clone_host.nil?
         
     | 
| 
       158 
166 
     | 
    
         
             
            command += " 2>&1 > /var/log/cloud-init.log"
         
     | 
| 
       159 
167 
     | 
    
         
             
            run_command(command)
         
     | 
| 
         @@ -11,6 +11,7 @@ require 'json' 
     | 
|
| 
       11 
11 
     | 
    
         
             
            require 'aws-sdk'
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            require 'ec2launcher'
         
     | 
| 
      
 14 
     | 
    
         
            +
            require 'ec2launcher/dynamic_hostname_generator'
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
            AWS_KEYS = "/etc/aws/startup_runner_keys"
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
         @@ -77,6 +78,17 @@ class InstanceSetup 
     | 
|
| 
       77 
78 
     | 
    
         
             
                option_parser = InitOptions.new
         
     | 
| 
       78 
79 
     | 
    
         
             
                @options = option_parser.parse(args)
         
     | 
| 
       79 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
                begin
         
     | 
| 
      
 82 
     | 
    
         
            +
                  @logger = Log4r::Logger['ec2launcher']
         
     | 
| 
      
 83 
     | 
    
         
            +
                  unless @logger
         
     | 
| 
      
 84 
     | 
    
         
            +
                    @logger = Log4r::Logger.new 'ec2launcher'
         
     | 
| 
      
 85 
     | 
    
         
            +
                    log_output = Log4r::Outputter.stdout
         
     | 
| 
      
 86 
     | 
    
         
            +
                    log_output.formatter = PatternFormatter.new :pattern => "%m"
         
     | 
| 
      
 87 
     | 
    
         
            +
                    @logger.outputters = log_output
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
                rescue
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
       80 
92 
     | 
    
         
             
                @setup_json_filename = args[0]
         
     | 
| 
       81 
93 
     | 
    
         | 
| 
       82 
94 
     | 
    
         
             
                # Load the AWS access keys
         
     | 
| 
         @@ -111,6 +123,55 @@ class InstanceSetup 
     | 
|
| 
       111 
123 
     | 
    
         
             
                parser = JSON::Parser.new(File.read(@setup_json_filename), { :create_additions => true })
         
     | 
| 
       112 
124 
     | 
    
         
             
                instance_data = parser.parse()
         
     | 
| 
       113 
125 
     | 
    
         | 
| 
      
 126 
     | 
    
         
            +
                ##############################
         
     | 
| 
      
 127 
     | 
    
         
            +
                # EXECUTABLES
         
     | 
| 
      
 128 
     | 
    
         
            +
                ##############################
         
     | 
| 
      
 129 
     | 
    
         
            +
                chef_path = instance_data["chef_path"]
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                ##############################
         
     | 
| 
      
 132 
     | 
    
         
            +
                # HOST NAME
         
     | 
| 
      
 133 
     | 
    
         
            +
                ##############################
         
     | 
| 
      
 134 
     | 
    
         
            +
                @hostname = @options.hostname
         
     | 
| 
      
 135 
     | 
    
         
            +
                if instance_data["dynamic_name"]
         
     | 
| 
      
 136 
     | 
    
         
            +
                  puts "Calculating dynamic host name..."
         
     | 
| 
      
 137 
     | 
    
         
            +
                  hostname_generator = EC2Launcher::DynamicHostnameGenerator.new(instance_data["dynamic_name_prefix"], instance_data["dynamic_name_suffix"])
         
     | 
| 
      
 138 
     | 
    
         
            +
                  short_hostname = hostname_generator.generate_dynamic_hostname(@INSTANCE_ID)
         
     | 
| 
      
 139 
     | 
    
         
            +
                  @hostname = hostname_generator.generate_fqdn(short_hostname, instance_data["domain_name"])
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                  instance_data["short_hostname"] = short_hostname
         
     | 
| 
      
 142 
     | 
    
         
            +
                  instance_data["hostname"] = @hostname
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
                  # Route53
         
     | 
| 
      
 145 
     | 
    
         
            +
                  if instance_data["route53_zone_id"]
         
     | 
| 
      
 146 
     | 
    
         
            +
                    puts "Adding host to Route53..."
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                    # Find the local ip address
         
     | 
| 
      
 149 
     | 
    
         
            +
                    local_mac_address = `curl http://169.254.169.254/latest/meta-data/mac`.strip
         
     | 
| 
      
 150 
     | 
    
         
            +
                    local_ip_addresses = `curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/#{local_mac_address}/local-ipv4s`.strip
         
     | 
| 
      
 151 
     | 
    
         
            +
                    local_ip_address = local_ip_addresses.split[0]
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                    # Add record to Route53. 
         
     | 
| 
      
 154 
     | 
    
         
            +
                    # Note that we use the FQDN because that is what the AWS SDK requires, even though the Web Console only
         
     | 
| 
      
 155 
     | 
    
         
            +
                    # uses the short name.
         
     | 
| 
      
 156 
     | 
    
         
            +
                    aws_route53 = AWS::Route53.new 
         
     | 
| 
      
 157 
     | 
    
         
            +
                    route53 = EC2Launcher::Route53.new(aws_route53, instance_data["route53_zone_id"], @logger)
         
     | 
| 
      
 158 
     | 
    
         
            +
                    route53_zone = aws_route53.client.get_hosted_zone({:id => instance_data["route53_zone_id"]})
         
     | 
| 
      
 159 
     | 
    
         
            +
                    route53.create_record(@hostname, local_ip_address)
         
     | 
| 
      
 160 
     | 
    
         
            +
                  end
         
     | 
| 
      
 161 
     | 
    
         
            +
                end
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                puts "Setting hostname ... #{@hostname}"
         
     | 
| 
      
 164 
     | 
    
         
            +
                `hostname #{@hostname}`
         
     | 
| 
      
 165 
     | 
    
         
            +
                `sed -i 's/^HOSTNAME=.*$/HOSTNAME=#{@hostname}/' /etc/sysconfig/network`
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
                # Set Chef node name
         
     | 
| 
      
 168 
     | 
    
         
            +
                File.open("/etc/chef/client.rb", 'a') { |f| f.write("node_name \"#{@hostname}\"") }
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                # Setup Chef client
         
     | 
| 
      
 171 
     | 
    
         
            +
                puts "Connecting to Chef ..."
         
     | 
| 
      
 172 
     | 
    
         
            +
                `rm -f /etc/chef/client.pem`
         
     | 
| 
      
 173 
     | 
    
         
            +
                puts `#{chef_path}`
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
       114 
175 
     | 
    
         
             
                ##############################
         
     | 
| 
       115 
176 
     | 
    
         
             
                # EBS VOLUMES
         
     | 
| 
       116 
177 
     | 
    
         
             
                ##############################
         
     | 
| 
         @@ -172,7 +233,7 @@ class InstanceSetup 
     | 
|
| 
       172 
233 
     | 
    
         
             
                knife_config = <<EOF
         
     | 
| 
       173 
234 
     | 
    
         
             
            log_level                :info
         
     | 
| 
       174 
235 
     | 
    
         
             
            log_location             STDOUT
         
     | 
| 
       175 
     | 
    
         
            -
            node_name                '#{@ 
     | 
| 
      
 236 
     | 
    
         
            +
            node_name                '#{@hostname}'
         
     | 
| 
       176 
237 
     | 
    
         
             
            client_key               '/etc/chef/client.pem'
         
     | 
| 
       177 
238 
     | 
    
         
             
            validation_client_name   'chef-validator'
         
     | 
| 
       178 
239 
     | 
    
         
             
            validation_key           '/etc/chef/validation.pem'
         
     | 
| 
         @@ -188,7 +249,7 @@ EOF 
     | 
|
| 
       188 
249 
     | 
    
         
             
                ##############################
         
     | 
| 
       189 
250 
     | 
    
         
             
                # Add roles
         
     | 
| 
       190 
251 
     | 
    
         
             
                instance_data["roles"].each do |role|
         
     | 
| 
       191 
     | 
    
         
            -
                  cmd = "#{knife_path} node run_list add #{@ 
     | 
| 
      
 252 
     | 
    
         
            +
                  cmd = "#{knife_path} node run_list add #{@hostname} \"role[#{role}]\""
         
     | 
| 
       192 
253 
     | 
    
         
             
                  puts cmd
         
     | 
| 
       193 
254 
     | 
    
         
             
                  puts `#{cmd}`
         
     | 
| 
       194 
255 
     | 
    
         
             
                end
         
     | 
| 
         @@ -219,9 +280,9 @@ EOF 
     | 
|
| 
       219 
280 
     | 
    
         
             
                  ses.send_email(
         
     | 
| 
       220 
281 
     | 
    
         
             
                    :from => instance_data["email_notifications"]["from"],
         
     | 
| 
       221 
282 
     | 
    
         
             
                    :to => instance_data["email_notifications"]["to"],
         
     | 
| 
       222 
     | 
    
         
            -
                    :subject => "Server setup complete: #{@ 
     | 
| 
       223 
     | 
    
         
            -
                    :body_text => "Server setup is complete for Host: #{@ 
     | 
| 
       224 
     | 
    
         
            -
                    :body_html => "<div>Server setup is complete for:</div><div><strong>Host:</strong> #{@ 
     | 
| 
      
 283 
     | 
    
         
            +
                    :subject => "Server setup complete: #{@hostname}",
         
     | 
| 
      
 284 
     | 
    
         
            +
                    :body_text => "Server setup is complete for Host: #{@hostname}, Environment: #{@options.environ}, Application: #{@options.application}",
         
     | 
| 
      
 285 
     | 
    
         
            +
                    :body_html => "<div>Server setup is complete for:</div><div><strong>Host:</strong> #{@hostname}</div><div><strong>Environment:</strong> #{@options.environ}</div><div><strong>Application:</strong> #{@options.application}</div>"
         
     | 
| 
       225 
286 
     | 
    
         
             
                  )
         
     | 
| 
       226 
287 
     | 
    
         
             
                else
         
     | 
| 
       227 
288 
     | 
    
         
             
                  puts "Skipping email notification."
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative "../test_helper"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'ec2launcher/dynamic_hostname_generator'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe "DynamicHostnameGenerator", "Dynamic host name generation" do
         
     | 
| 
      
 5 
     | 
    
         
            +
              it "creates valid hostname without prefix or suffix" do
         
     | 
| 
      
 6 
     | 
    
         
            +
                generator = EC2Launcher::DynamicHostnameGenerator.new
         
     | 
| 
      
 7 
     | 
    
         
            +
                generator.generate_dynamic_hostname("i-abcdefgh").must_equal "abcdefgh"
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              it "creates valid hostname with a simple suffix and no prefix" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                generator = EC2Launcher::DynamicHostnameGenerator.new(nil, "example.com")
         
     | 
| 
      
 12 
     | 
    
         
            +
                generator.generate_dynamic_hostname("i-abcdefgh").must_equal "abcdefgh.example.com"
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              it "creates valid hostname with a simple prefix with no suffix" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                generator = EC2Launcher::DynamicHostnameGenerator.new("prefix-")
         
     | 
| 
      
 17 
     | 
    
         
            +
                generator.generate_dynamic_hostname("i-abcdefgh").must_equal "prefix-abcdefgh"
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              it "creates valid hostname with both a prefix and suffix" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                generator = EC2Launcher::DynamicHostnameGenerator.new("prefix-", "example.com")
         
     | 
| 
      
 22 
     | 
    
         
            +
                generator.generate_dynamic_hostname("i-abcdefgh").must_equal "prefix-abcdefgh.example.com"
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              it "creates valid hostname when the suffix starts with a period" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                generator = EC2Launcher::DynamicHostnameGenerator.new(nil, ".example.com")
         
     | 
| 
      
 27 
     | 
    
         
            +
                generator.generate_dynamic_hostname("i-abcdefgh").must_equal "abcdefgh.example.com"
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative "../../test_helper"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'ec2launcher/hostnames/host_name_generation'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class HostNameGenerationSpecTest
         
     | 
| 
      
 5 
     | 
    
         
            +
              include EC2Launcher::HostNames::HostNameGeneration
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            describe "HostNameGeneration" do
         
     | 
| 
      
 9 
     | 
    
         
            +
              let (:generator) { HostNameGenerationSpecTest.new }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              it "gives a valid short name given a long name and domain" do
         
     | 
| 
      
 12 
     | 
    
         
            +
                generator.generate_short_name("host.example.com", "example.com").must_equal "host"
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              it "gives a valid short name given a long name and no domain" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                generator.generate_short_name("host.example.com", nil).must_equal "host.example.com"
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              it "gives a valid short name given a long name and a domain that starts with a period" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                generator.generate_short_name("host.example.com", ".example.com").must_equal "host"
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              it "gives a valid FQDN given a short name and a domain" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                generator.generate_fqdn("host", "example.com").must_equal "host.example.com"
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              it "gives a valid FQDN given a short name and a domain that starts with a period" do
         
     | 
| 
      
 28 
     | 
    
         
            +
                generator.generate_fqdn("host", ".example.com").must_equal "host.example.com"
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              it "gives a valid FQDN with a short name and no domain" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                generator.generate_fqdn("host", nil).must_equal "host"
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              it "throws an exception when generating a FQDN without a short name" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_raises(ArgumentError) { generator.generate_fqdn(nil, nil) }
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              it "throws an exception when generating a short name without a long name" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                assert_raises(ArgumentError) { generator.generate_short_name(nil, nil) }
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
    
        data/test/test_helper.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,102 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative "../test_helper"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'minitest/mock'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'ec2launcher/block_device_builder'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'ec2launcher/dsl/block_device'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            class BlockDeviceBuilderTest < MiniTest::Unit::TestCase
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def test_building_ephemeral_drives()
         
     | 
| 
      
 9 
     | 
    
         
            +
                ec2 = MiniTest::Mock.new
         
     | 
| 
      
 10 
     | 
    
         
            +
                logger = MiniTest::Mock.new
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                bdb = BlockDeviceBuilder.new(ec2, nil, logger)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                bd_mapping = {}
         
     | 
| 
      
 15 
     | 
    
         
            +
                bdb.build_ephemeral_drives(bd_mapping, "m1.large")
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                refute_nil bd_mapping
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                assert_true bd_mapping["/dev/sdb"]
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_true bd_mapping["/dev/sdc"]
         
     | 
| 
      
 21 
     | 
    
         
            +
                assert_equal "ephemeral0", bd_mapping["/dev/sdb"]
         
     | 
| 
      
 22 
     | 
    
         
            +
                assert_equal "ephemeral1", bd_mapping["/dev/sdc"]
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                bd_mapping = {}
         
     | 
| 
      
 25 
     | 
    
         
            +
                bdb.build_ephemeral_drives(bd_mapping, "m1.small")
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                refute_nil bd_mapping
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                assert_true bd_mapping["/dev/sdb"]
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal "ephemeral0", bd_mapping["/dev/sdb"]
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                bd_mapping = {}
         
     | 
| 
      
 33 
     | 
    
         
            +
                bdb.build_ephemeral_drives(bd_mapping, "t1.micro")
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                refute_nil bd_mapping
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal 0, bd_mapping.keys.size
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def test_basic_ebs_volume_setup()
         
     | 
| 
      
 41 
     | 
    
         
            +
                ec2 = MiniTest::Mock.new
         
     | 
| 
      
 42 
     | 
    
         
            +
                logger = MiniTest::Mock.new
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                bdb = BlockDeviceBuilder.new(ec2, nil, logger)
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                bd_mapping = {}
         
     | 
| 
      
 47 
     | 
    
         
            +
                block_devices = [ EC2Launcher::DSL::BlockDevice.new({:name => "database"}) ]
         
     | 
| 
      
 48 
     | 
    
         
            +
                bdb.build_ebs_volumes(bd_mapping, block_devices)
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                refute_nil    bd_mapping
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert_true   bd_mapping["/dev/sdf"]
         
     | 
| 
      
 52 
     | 
    
         
            +
                assert_equal  60, bd_mapping["/dev/sdf"][:volume_size]
         
     | 
| 
      
 53 
     | 
    
         
            +
                assert_equal  true, bd_mapping["/dev/sdf"][:delete_on_termination]
         
     | 
| 
      
 54 
     | 
    
         
            +
                assert_nil    bd_mapping["/dev/sdf"][:iops]
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                bd_mapping = {}
         
     | 
| 
      
 57 
     | 
    
         
            +
                block_devices = [ EC2Launcher::DSL::BlockDevice.new({:name => "database", :size => 120}) ]
         
     | 
| 
      
 58 
     | 
    
         
            +
                bdb.build_ebs_volumes(bd_mapping, block_devices)
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                refute_nil    bd_mapping
         
     | 
| 
      
 61 
     | 
    
         
            +
                assert_true   bd_mapping["/dev/sdf"]
         
     | 
| 
      
 62 
     | 
    
         
            +
                assert_equal  120, bd_mapping["/dev/sdf"][:volume_size]
         
     | 
| 
      
 63 
     | 
    
         
            +
                assert_nil    bd_mapping["/dev/sdf"][:iops]
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              def test_ebs_volume_setup_with_multiple_drives()
         
     | 
| 
      
 67 
     | 
    
         
            +
                ec2 = MiniTest::Mock.new
         
     | 
| 
      
 68 
     | 
    
         
            +
                logger = MiniTest::Mock.new
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                bdb = BlockDeviceBuilder.new(ec2, nil, logger)
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                bd_mapping = {}
         
     | 
| 
      
 73 
     | 
    
         
            +
                block_devices = [ EC2Launcher::DSL::BlockDevice.new({:name => "database", :count => 3}) ]
         
     | 
| 
      
 74 
     | 
    
         
            +
                bdb.build_ebs_volumes(bd_mapping, block_devices)
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                refute_nil    bd_mapping
         
     | 
| 
      
 77 
     | 
    
         
            +
                assert_true   bd_mapping["/dev/sdf"]
         
     | 
| 
      
 78 
     | 
    
         
            +
                assert_true   bd_mapping["/dev/sdg"]
         
     | 
| 
      
 79 
     | 
    
         
            +
                assert_true   bd_mapping["/dev/sdh"]
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                assert_nil    bd_mapping["/dev/sdf"][:iops]
         
     | 
| 
      
 82 
     | 
    
         
            +
                assert_nil    bd_mapping["/dev/sdg"][:iops]
         
     | 
| 
      
 83 
     | 
    
         
            +
                assert_nil    bd_mapping["/dev/sdh"][:iops]
         
     | 
| 
      
 84 
     | 
    
         
            +
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
              def test_ebs_volume_setup_with_piops()
         
     | 
| 
      
 87 
     | 
    
         
            +
                ec2 = MiniTest::Mock.new
         
     | 
| 
      
 88 
     | 
    
         
            +
                logger = MiniTest::Mock.new
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                bdb = BlockDeviceBuilder.new(ec2, nil, logger)
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                bd_mapping = {}
         
     | 
| 
      
 93 
     | 
    
         
            +
                block_devices = [ EC2Launcher::DSL::BlockDevice.new({:name => "database", :iops => 200}) ]
         
     | 
| 
      
 94 
     | 
    
         
            +
                bdb.build_ebs_volumes(bd_mapping, block_devices)
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                refute_nil    bd_mapping
         
     | 
| 
      
 97 
     | 
    
         
            +
                assert_true   bd_mapping["/dev/sdf"]
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                refute_nil    bd_mapping["/dev/sdf"][:iops]
         
     | 
| 
      
 100 
     | 
    
         
            +
                assert_equal  200, bd_mapping["/dev/sdf"][:iops]
         
     | 
| 
      
 101 
     | 
    
         
            +
              end
         
     | 
| 
      
 102 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,184 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative "../test_helper"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'minitest/mock'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'ec2launcher/route53'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require 'ostruct'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            class Route53Test < MiniTest::Unit::TestCase
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def setup()
         
     | 
| 
      
 10 
     | 
    
         
            +
                @default_hosted_zone_id = "ABCDEFGH"
         
     | 
| 
      
 11 
     | 
    
         
            +
                @default_record_name = "server1.example.com"
         
     | 
| 
      
 12 
     | 
    
         
            +
                @default_record_type = "A"
         
     | 
| 
      
 13 
     | 
    
         
            +
                @default_record_ttl = 3600
         
     | 
| 
      
 14 
     | 
    
         
            +
                @default_record_value = "10.0.0.1"
         
     | 
| 
      
 15 
     | 
    
         
            +
              end    
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              def create_route53_with_mock_client(client)
         
     | 
| 
      
 18 
     | 
    
         
            +
                route53 = OpenStruct.new
         
     | 
| 
      
 19 
     | 
    
         
            +
                route53.client = client
         
     | 
| 
      
 20 
     | 
    
         
            +
                route53
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              def generate_route53_record_set(name, type, ttl, value)
         
     | 
| 
      
 24 
     | 
    
         
            +
                route53_result = OpenStruct.new
         
     | 
| 
      
 25 
     | 
    
         
            +
                route53_result.data = {
         
     | 
| 
      
 26 
     | 
    
         
            +
                  :resource_record_sets => [
         
     | 
| 
      
 27 
     | 
    
         
            +
                    {
         
     | 
| 
      
 28 
     | 
    
         
            +
                      :name => name,
         
     | 
| 
      
 29 
     | 
    
         
            +
                      :type => type,
         
     | 
| 
      
 30 
     | 
    
         
            +
                      :ttl => ttl,
         
     | 
| 
      
 31 
     | 
    
         
            +
                      :resource_records => [
         
     | 
| 
      
 32 
     | 
    
         
            +
                        {
         
     | 
| 
      
 33 
     | 
    
         
            +
                          :value => value
         
     | 
| 
      
 34 
     | 
    
         
            +
                        }
         
     | 
| 
      
 35 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 36 
     | 
    
         
            +
                    }
         
     | 
| 
      
 37 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 38 
     | 
    
         
            +
                }
         
     | 
| 
      
 39 
     | 
    
         
            +
                route53_result
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              def generate_route53_change_request(action, zone_id, name, type, ttl, value)
         
     | 
| 
      
 43 
     | 
    
         
            +
                {
         
     | 
| 
      
 44 
     | 
    
         
            +
                  :hosted_zone_id => zone_id, 
         
     | 
| 
      
 45 
     | 
    
         
            +
                  :change_batch => {
         
     | 
| 
      
 46 
     | 
    
         
            +
                    :changes => [ 
         
     | 
| 
      
 47 
     | 
    
         
            +
                      {
         
     | 
| 
      
 48 
     | 
    
         
            +
                        :action => action, 
         
     | 
| 
      
 49 
     | 
    
         
            +
                        :resource_record_set => { 
         
     | 
| 
      
 50 
     | 
    
         
            +
                          :name => name, 
         
     | 
| 
      
 51 
     | 
    
         
            +
                          :type => type,
         
     | 
| 
      
 52 
     | 
    
         
            +
                          :ttl => ttl, 
         
     | 
| 
      
 53 
     | 
    
         
            +
                          :resource_records => [ { :value => value } ]
         
     | 
| 
      
 54 
     | 
    
         
            +
                        }
         
     | 
| 
      
 55 
     | 
    
         
            +
                      }
         
     | 
| 
      
 56 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 57 
     | 
    
         
            +
                  }
         
     | 
| 
      
 58 
     | 
    
         
            +
                }
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              def generate_route53_query(zone_id = nil, name = nil, type = nil)
         
     | 
| 
      
 62 
     | 
    
         
            +
                zone_id ||= @default_hosted_zone_id
         
     | 
| 
      
 63 
     | 
    
         
            +
                name ||= @default_record_name
         
     | 
| 
      
 64 
     | 
    
         
            +
                type ||= @default_record_type
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                {
         
     | 
| 
      
 67 
     | 
    
         
            +
                  :hosted_zone_id => zone_id,
         
     | 
| 
      
 68 
     | 
    
         
            +
                  :start_record_name => name,
         
     | 
| 
      
 69 
     | 
    
         
            +
                  :start_record_type => type,
         
     | 
| 
      
 70 
     | 
    
         
            +
                  :max_items => 1
         
     | 
| 
      
 71 
     | 
    
         
            +
                }
         
     | 
| 
      
 72 
     | 
    
         
            +
              end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
              def test_find_record()
         
     | 
| 
      
 75 
     | 
    
         
            +
                mock_client = MiniTest::Mock.new
         
     | 
| 
      
 76 
     | 
    
         
            +
                mock_route53 = create_route53_with_mock_client(mock_client)
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                route53_query = generate_route53_query()
         
     | 
| 
      
 79 
     | 
    
         
            +
                route53_result = generate_route53_record_set(@default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                # mock expects:
         
     | 
| 
      
 82 
     | 
    
         
            +
                #                   method                      return       arguments
         
     | 
| 
      
 83 
     | 
    
         
            +
                #-------------------------------------------------------------
         
     | 
| 
      
 84 
     | 
    
         
            +
                mock_client.expect(:list_resource_record_sets, route53_result, [route53_query])
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
         
     | 
| 
      
 87 
     | 
    
         
            +
                record = route53.find_record(@default_record_name, @default_record_type)
         
     | 
| 
      
 88 
     | 
    
         
            +
                
         
     | 
| 
      
 89 
     | 
    
         
            +
                assert mock_client.verify
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                refute_nil record
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                assert_equal @default_record_name, record.name
         
     | 
| 
      
 94 
     | 
    
         
            +
                assert_equal @default_record_ttl, record.ttl
         
     | 
| 
      
 95 
     | 
    
         
            +
                assert_equal @default_record_value, record.value
         
     | 
| 
      
 96 
     | 
    
         
            +
                assert_equal @default_record_type, record.type
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
              def test_delete_record()
         
     | 
| 
      
 100 
     | 
    
         
            +
                mock_client = MiniTest::Mock.new
         
     | 
| 
      
 101 
     | 
    
         
            +
                mock_route53 = create_route53_with_mock_client(mock_client)
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                change_request = generate_route53_change_request("DELETE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                mock_client.expect(:change_resource_record_sets, nil, [change_request])
         
     | 
| 
      
 106 
     | 
    
         
            +
              
         
     | 
| 
      
 107 
     | 
    
         
            +
                route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                delete_result = route53.delete_record(@default_record_name, @default_record_type, @default_record_ttl, @default_record_value, false)
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                assert mock_client.verify
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                assert delete_result
         
     | 
| 
      
 114 
     | 
    
         
            +
              end
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
              def test_delete_record_by_name()
         
     | 
| 
      
 117 
     | 
    
         
            +
                mock_client = MiniTest::Mock.new
         
     | 
| 
      
 118 
     | 
    
         
            +
                mock_route53 = create_route53_with_mock_client(mock_client)
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                route53_query = generate_route53_query()
         
     | 
| 
      
 121 
     | 
    
         
            +
                route53_result = generate_route53_record_set(@default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
         
     | 
| 
      
 122 
     | 
    
         
            +
                change_request = generate_route53_change_request("DELETE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                mock_client.expect(:list_resource_record_sets, route53_result, [route53_query])
         
     | 
| 
      
 125 
     | 
    
         
            +
                mock_client.expect(:change_resource_record_sets, nil, [change_request])
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
         
     | 
| 
      
 128 
     | 
    
         
            +
                delete_result = route53.delete_record_by_name(@default_record_name, @default_record_type, false)
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                assert mock_client.verify
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                assert delete_result
         
     | 
| 
      
 133 
     | 
    
         
            +
              end
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
              def test_delete_record_by_name_does_not_exist()
         
     | 
| 
      
 136 
     | 
    
         
            +
                mock_client = MiniTest::Mock.new
         
     | 
| 
      
 137 
     | 
    
         
            +
                mock_route53 = create_route53_with_mock_client(mock_client)
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                route53_query = generate_route53_query()
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                mock_client.expect(:list_resource_record_sets, nil, [route53_query])
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
         
     | 
| 
      
 144 
     | 
    
         
            +
                delete_result = route53.delete_record_by_name(@default_record_name, @default_record_type, false)
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                assert mock_client.verify
         
     | 
| 
      
 147 
     | 
    
         
            +
                assert_equal false, delete_result
         
     | 
| 
      
 148 
     | 
    
         
            +
              end
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
              def test_creating_new_record()
         
     | 
| 
      
 151 
     | 
    
         
            +
                mock_client = MiniTest::Mock.new
         
     | 
| 
      
 152 
     | 
    
         
            +
                mock_route53 = create_route53_with_mock_client(mock_client)
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                route53_query = generate_route53_query()
         
     | 
| 
      
 155 
     | 
    
         
            +
                update_request = generate_route53_change_request("CREATE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                mock_client.expect(:list_resource_record_sets, nil, [route53_query])
         
     | 
| 
      
 158 
     | 
    
         
            +
                mock_client.expect(:change_resource_record_sets, nil, [update_request])
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
                route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
         
     | 
| 
      
 161 
     | 
    
         
            +
                route53.create_record(@default_record_name, @default_record_value, @default_record_type, @default_record_ttl)
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                assert mock_client.verify
         
     | 
| 
      
 164 
     | 
    
         
            +
              end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
              def test_updating_existing_record()
         
     | 
| 
      
 167 
     | 
    
         
            +
                mock_client = MiniTest::Mock.new
         
     | 
| 
      
 168 
     | 
    
         
            +
                mock_route53 = create_route53_with_mock_client(mock_client)
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                route53_query = generate_route53_query()
         
     | 
| 
      
 171 
     | 
    
         
            +
                find_result = generate_route53_record_set(@default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
         
     | 
| 
      
 172 
     | 
    
         
            +
                delete_request = generate_route53_change_request("DELETE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
         
     | 
| 
      
 173 
     | 
    
         
            +
                update_request = generate_route53_change_request("CREATE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, "10.0.1.1")
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
                mock_client.expect(:list_resource_record_sets, find_result, [route53_query])
         
     | 
| 
      
 176 
     | 
    
         
            +
                mock_client.expect(:change_resource_record_sets, nil, [delete_request])
         
     | 
| 
      
 177 
     | 
    
         
            +
                mock_client.expect(:change_resource_record_sets, nil, [update_request])
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
         
     | 
| 
      
 180 
     | 
    
         
            +
                route53.create_record(@default_record_name, "10.0.1.1", @default_record_type, @default_record_ttl)
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
                assert mock_client.verify
         
     | 
| 
      
 183 
     | 
    
         
            +
              end
         
     | 
| 
      
 184 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ec2launcher
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.7.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sean Laurent
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2013-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2013-05-08 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: aws-sdk
         
     | 
| 
         @@ -16,14 +16,14 @@ dependencies: 
     | 
|
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
17 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: 1. 
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 1.8.0
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
24 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: 1. 
     | 
| 
      
 26 
     | 
    
         
            +
                    version: 1.8.0
         
     | 
| 
       27 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
28 
     | 
    
         
             
              name: log4r
         
     | 
| 
       29 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -69,20 +69,10 @@ dependencies: 
     | 
|
| 
       69 
69 
     | 
    
         
             
            description: Tool to manage application configurations and launch new EC2 instances
         
     | 
| 
       70 
70 
     | 
    
         
             
              based on the configurations.
         
     | 
| 
       71 
71 
     | 
    
         
             
            email: 
         
     | 
| 
       72 
     | 
    
         
            -
            executables:
         
     | 
| 
       73 
     | 
    
         
            -
            - ec2launcher
         
     | 
| 
      
 72 
     | 
    
         
            +
            executables: []
         
     | 
| 
       74 
73 
     | 
    
         
             
            extensions: []
         
     | 
| 
       75 
74 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       76 
75 
     | 
    
         
             
            files:
         
     | 
| 
       77 
     | 
    
         
            -
            - .gitignore
         
     | 
| 
       78 
     | 
    
         
            -
            - CHANGELOG.md
         
     | 
| 
       79 
     | 
    
         
            -
            - Gemfile
         
     | 
| 
       80 
     | 
    
         
            -
            - LICENSE
         
     | 
| 
       81 
     | 
    
         
            -
            - README.md
         
     | 
| 
       82 
     | 
    
         
            -
            - Rakefile
         
     | 
| 
       83 
     | 
    
         
            -
            - bin/ec2launcher
         
     | 
| 
       84 
     | 
    
         
            -
            - ec2launcher.gemspec
         
     | 
| 
       85 
     | 
    
         
            -
            - lib/ec2launcher.rb
         
     | 
| 
       86 
76 
     | 
    
         
             
            - lib/ec2launcher/application_processor.rb
         
     | 
| 
       87 
77 
     | 
    
         
             
            - lib/ec2launcher/aws_initializer.rb
         
     | 
| 
       88 
78 
     | 
    
         
             
            - lib/ec2launcher/backoff_runner.rb
         
     | 
| 
         @@ -97,20 +87,32 @@ files: 
     | 
|
| 
       97 
87 
     | 
    
         
             
            - lib/ec2launcher/dsl/email_notification.rb
         
     | 
| 
       98 
88 
     | 
    
         
             
            - lib/ec2launcher/dsl/environment.rb
         
     | 
| 
       99 
89 
     | 
    
         
             
            - lib/ec2launcher/dsl/helper.rb
         
     | 
| 
      
 90 
     | 
    
         
            +
            - lib/ec2launcher/dynamic_hostname_generator.rb
         
     | 
| 
       100 
91 
     | 
    
         
             
            - lib/ec2launcher/environment_processor.rb
         
     | 
| 
       101 
92 
     | 
    
         
             
            - lib/ec2launcher/hostname_generator.rb
         
     | 
| 
      
 93 
     | 
    
         
            +
            - lib/ec2launcher/hostnames/host_name_generation.rb
         
     | 
| 
       102 
94 
     | 
    
         
             
            - lib/ec2launcher/init_options.rb
         
     | 
| 
       103 
95 
     | 
    
         
             
            - lib/ec2launcher/instance_paths_config.rb
         
     | 
| 
       104 
96 
     | 
    
         
             
            - lib/ec2launcher/route53.rb
         
     | 
| 
       105 
97 
     | 
    
         
             
            - lib/ec2launcher/security_group_handler.rb
         
     | 
| 
       106 
98 
     | 
    
         
             
            - lib/ec2launcher/terminator.rb
         
     | 
| 
       107 
99 
     | 
    
         
             
            - lib/ec2launcher/version.rb
         
     | 
| 
      
 100 
     | 
    
         
            +
            - lib/ec2launcher.rb
         
     | 
| 
      
 101 
     | 
    
         
            +
            - CHANGELOG.md
         
     | 
| 
      
 102 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 103 
     | 
    
         
            +
            - Gemfile.lock
         
     | 
| 
      
 104 
     | 
    
         
            +
            - LICENSE
         
     | 
| 
      
 105 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 106 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 107 
     | 
    
         
            +
            - test/spec/dynamic_hostname_generator_spec.rb
         
     | 
| 
      
 108 
     | 
    
         
            +
            - test/spec/hostnames/host_name_generation_spec.rb
         
     | 
| 
      
 109 
     | 
    
         
            +
            - test/test_helper.rb
         
     | 
| 
      
 110 
     | 
    
         
            +
            - test/unit/block_device_builder.rb
         
     | 
| 
      
 111 
     | 
    
         
            +
            - test/unit/dsl/config_parser_test.rb
         
     | 
| 
      
 112 
     | 
    
         
            +
            - test/unit/route53_test.rb
         
     | 
| 
       108 
113 
     | 
    
         
             
            - startup-scripts/runurl
         
     | 
| 
       109 
114 
     | 
    
         
             
            - startup-scripts/setup.rb
         
     | 
| 
       110 
115 
     | 
    
         
             
            - startup-scripts/setup_instance.rb
         
     | 
| 
       111 
     | 
    
         
            -
            - test/ec2launcher/dsl/config_parser_test.rb
         
     | 
| 
       112 
     | 
    
         
            -
            - test/test_helper.rb
         
     | 
| 
       113 
     | 
    
         
            -
            - yard_extensions/dsl_attribute_handler.rb
         
     | 
| 
       114 
116 
     | 
    
         
             
            homepage: https://github.com/StudyBlue/ec2launcher
         
     | 
| 
       115 
117 
     | 
    
         
             
            licenses:
         
     | 
| 
       116 
118 
     | 
    
         
             
            - Apache 2.0
         
     | 
| 
         @@ -136,5 +138,9 @@ signing_key: 
     | 
|
| 
       136 
138 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       137 
139 
     | 
    
         
             
            summary: Tool to launch EC2 instances.
         
     | 
| 
       138 
140 
     | 
    
         
             
            test_files:
         
     | 
| 
       139 
     | 
    
         
            -
            - test/ 
     | 
| 
      
 141 
     | 
    
         
            +
            - test/spec/dynamic_hostname_generator_spec.rb
         
     | 
| 
      
 142 
     | 
    
         
            +
            - test/spec/hostnames/host_name_generation_spec.rb
         
     | 
| 
       140 
143 
     | 
    
         
             
            - test/test_helper.rb
         
     | 
| 
      
 144 
     | 
    
         
            +
            - test/unit/block_device_builder.rb
         
     | 
| 
      
 145 
     | 
    
         
            +
            - test/unit/dsl/config_parser_test.rb
         
     | 
| 
      
 146 
     | 
    
         
            +
            - test/unit/route53_test.rb
         
     |