dew 0.1.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.
- data/LICENSE +22 -0
- data/README.md +38 -0
- data/Rakefile +26 -0
- data/bin/dew +87 -0
- data/config/cucumber.yaml +4 -0
- data/features/create-ami.feature +16 -0
- data/features/create-environments.feature +46 -0
- data/features/deploy-puge.feature +16 -0
- data/features/step_definitions/aws-steps.rb +101 -0
- data/features/step_definitions/deploy-puge-steps.rb +27 -0
- data/features/support/env.rb +38 -0
- data/features/support/hooks.rb +10 -0
- data/lib/dew.rb +7 -0
- data/lib/dew/aws_resources.yaml +122 -0
- data/lib/dew/base_command.rb +24 -0
- data/lib/dew/cloud.rb +79 -0
- data/lib/dew/commands.rb +6 -0
- data/lib/dew/commands/ami.rb +67 -0
- data/lib/dew/commands/console.rb +17 -0
- data/lib/dew/commands/console/irb_override.rb +24 -0
- data/lib/dew/commands/deploy.rb +114 -0
- data/lib/dew/commands/deploy/templates/apache.conf.erb +28 -0
- data/lib/dew/commands/deploy/templates/known_hosts +2 -0
- data/lib/dew/commands/deploy/templates/rvmrc +2 -0
- data/lib/dew/commands/environments.rb +110 -0
- data/lib/dew/commands/tidy.rb +35 -0
- data/lib/dew/controllers.rb +3 -0
- data/lib/dew/controllers/amis_controller.rb +82 -0
- data/lib/dew/controllers/deploy_controller.rb +10 -0
- data/lib/dew/controllers/environments_controller.rb +48 -0
- data/lib/dew/models.rb +7 -0
- data/lib/dew/models/account.rb +30 -0
- data/lib/dew/models/database.rb +32 -0
- data/lib/dew/models/deploy.rb +2 -0
- data/lib/dew/models/deploy/puge.rb +61 -0
- data/lib/dew/models/deploy/run.rb +19 -0
- data/lib/dew/models/environment.rb +199 -0
- data/lib/dew/models/fog_model.rb +23 -0
- data/lib/dew/models/profile.rb +60 -0
- data/lib/dew/models/server.rb +134 -0
- data/lib/dew/password.rb +7 -0
- data/lib/dew/tasks/spec.rake +14 -0
- data/lib/dew/validations.rb +8 -0
- data/lib/dew/version.rb +3 -0
- data/lib/dew/view.rb +39 -0
- data/lib/tasks/spec.rake +14 -0
- data/spec/dew/cloud_spec.rb +90 -0
- data/spec/dew/controllers/amis_controller_spec.rb +137 -0
- data/spec/dew/controllers/deploy_controller_spec.rb +38 -0
- data/spec/dew/controllers/environments_controller_spec.rb +133 -0
- data/spec/dew/models/account_spec.rb +47 -0
- data/spec/dew/models/database_spec.rb +58 -0
- data/spec/dew/models/deploy/puge_spec.rb +72 -0
- data/spec/dew/models/deploy/run_spec.rb +38 -0
- data/spec/dew/models/environment_spec.rb +374 -0
- data/spec/dew/models/fog_model_spec.rb +24 -0
- data/spec/dew/models/profile_spec.rb +85 -0
- data/spec/dew/models/server_spec.rb +190 -0
- data/spec/dew/password_spec.rb +11 -0
- data/spec/dew/spec_helper.rb +22 -0
- data/spec/dew/view_spec.rb +38 -0
- metadata +284 -0
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
(The MIT License)
|
2
|
+
|
3
|
+
Copyright (c) 2011 PlayUp
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
'Software'), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
Dew is a layer between the ground and fog, which is used to access the cloud.
|
2
|
+
|
3
|
+
It includes:
|
4
|
+
* one command `dew`, with subcommands eg. `environments`, `amis`
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
First install the dew gem
|
9
|
+
|
10
|
+
$ [sudo] gem install dew
|
11
|
+
|
12
|
+
Then create all the config files it needs.
|
13
|
+
|
14
|
+
$ git clone git@github.com:playup/dew-config.git ~/.dew
|
15
|
+
|
16
|
+
or
|
17
|
+
|
18
|
+
$ mkdir -p ~/.dew/accounts
|
19
|
+
$ cat > ~/.dew/accounts/development.yaml
|
20
|
+
aws:
|
21
|
+
user_id: xxxx-xxxx-xxxx
|
22
|
+
access_key_id: YYYYYYYYYYYYYYYYYYYY
|
23
|
+
secret_access_key: ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
|
24
|
+
|
25
|
+
|
26
|
+
Then run the dew command
|
27
|
+
|
28
|
+
$ dew --help
|
29
|
+
|
30
|
+
## Creating a Simple Environment
|
31
|
+
|
32
|
+
## Creating an AMI for a new Environment
|
33
|
+
|
34
|
+
## Deploying to an Environment
|
35
|
+
|
36
|
+
## Developing with Dew
|
37
|
+
|
38
|
+
Read `HACKING.md`
|
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
ROOT_DIR = File.expand_path(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
require 'fileutils'
|
7
|
+
|
8
|
+
Dir[File.join(ROOT_DIR, 'lib', 'tasks', '*.rake')].each { |task| import task }
|
9
|
+
|
10
|
+
namespace :metrics do
|
11
|
+
desc "Run the flay code duplication measurement over the app, lib and specs"
|
12
|
+
task :flay do
|
13
|
+
flay_out = File.join(ROOT_DIR, 'reports', 'flay.txt')
|
14
|
+
FileUtils.mkdir_p(File.dirname(flay_out)) unless File.directory? File.dirname(flay_out)
|
15
|
+
system "flay scripts lib spec > #{flay_out}"
|
16
|
+
print "Flay: "
|
17
|
+
system "head -n1 #{flay_out}"
|
18
|
+
puts "Full flay output in #{flay_out}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
task :default => "spec:covered"
|
23
|
+
|
24
|
+
task :flay do
|
25
|
+
sh "flay lib spec script"
|
26
|
+
end
|
data/bin/dew
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'dew'
|
3
|
+
|
4
|
+
class DewCommand < DewBaseCommand
|
5
|
+
option ['-r', '--region'], "REGION", "AWS region", :default => 'ap-southeast-1'
|
6
|
+
option ['-a', '--account'], "ACCOUNT", "AWS account", :default => 'development'
|
7
|
+
option ['-q', '--quiet'], :flag, "Quiet mode, disables logging", :default => false
|
8
|
+
option ['-v', '--verbose'], :flag, "Verbose mode, print debug output", :default => false
|
9
|
+
option '--debug', :flag, "Show stacktraces on error", :default => false
|
10
|
+
|
11
|
+
subcommand "environments", "perform subcommands on the environments", EnvironmentsCommand
|
12
|
+
subcommand "amis", "perform subcommands on the AMIs", AMIsCommand
|
13
|
+
subcommand "deploy", "deploy to an environment", DeployCommand
|
14
|
+
subcommand "console", "open an IRB session with Cloud loaded", ConsoleCommand
|
15
|
+
subcommand "tidy", "tidy up resources left behind by automated tests", TidyCommand
|
16
|
+
|
17
|
+
def configure
|
18
|
+
$debug = debug?
|
19
|
+
Inform.level = quiet? ? :warning : (verbose? ? :debug : :info)
|
20
|
+
Cloud.connect(region, account)
|
21
|
+
end
|
22
|
+
|
23
|
+
def run(args)
|
24
|
+
(puts help ; exit 1) if args.empty?
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def execute
|
30
|
+
begin
|
31
|
+
super
|
32
|
+
rescue Clamp::HelpWanted => e
|
33
|
+
raise
|
34
|
+
rescue Clamp::UsageError => e
|
35
|
+
Inform.error(e.message)
|
36
|
+
puts e.command.help
|
37
|
+
exit(1)
|
38
|
+
rescue Interrupt => e
|
39
|
+
# If receive ^C Just exit the script...
|
40
|
+
Inform.error("Interrupt Received.")
|
41
|
+
rescue Exception => e
|
42
|
+
error_message = ''
|
43
|
+
error_args = {:trace_filename => write_backtrace(e)}
|
44
|
+
|
45
|
+
if e.is_a? Excon::Errors::HTTPStatusError
|
46
|
+
error_args[:excon] = parse_excon_error_response(e)
|
47
|
+
error_message = "AWS Error: %{excon}"
|
48
|
+
else
|
49
|
+
error_message += e.message
|
50
|
+
end
|
51
|
+
error_message += "\n(see %{trace_filename} for more details)\n"
|
52
|
+
|
53
|
+
if $debug or ENV['AWS_DEBUG']
|
54
|
+
Inform.error(error_message, error_args)
|
55
|
+
raise
|
56
|
+
else
|
57
|
+
error_message += "(and/or run again with %{flag} flag, or %{env} in your environment)\n"
|
58
|
+
error_args.merge!(:flag => "--debug", :env => "AWS_DEBUG=1")
|
59
|
+
Inform.error(error_message, error_args)
|
60
|
+
Kernel.exit 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def parse_excon_error_response e
|
68
|
+
begin
|
69
|
+
require 'nokogiri'
|
70
|
+
Nokogiri::XML.parse(e.response.body).css('Message').first.content
|
71
|
+
rescue
|
72
|
+
e.message
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def write_backtrace e
|
77
|
+
trace_filename = "/tmp/#{invocation_path}-#{Time.now.strftime("%Y%m%d%H%M%S")}.txt"
|
78
|
+
File.open(trace_filename, 'w') do |f|
|
79
|
+
backtrace = (["#{e.backtrace.shift}: #{e.message} (#{e.class})"] + e.backtrace).join("\n\t")
|
80
|
+
f.write("#{self.inspect}\n\n#{backtrace}\n")
|
81
|
+
f.close
|
82
|
+
end
|
83
|
+
trace_filename
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
DewCommand.run
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Creating a new AMI
|
2
|
+
|
3
|
+
As PlayUp
|
4
|
+
I want new AMIs to be created from Puppet configurations
|
5
|
+
So that I can use those AMIs to create new environments
|
6
|
+
|
7
|
+
@aws
|
8
|
+
@slow
|
9
|
+
Scenario: Creating a new AMI from a puppet configuration
|
10
|
+
Given I specify the puppet configuration "blank"
|
11
|
+
And I uniquely name my AMI
|
12
|
+
And I specify the region "ap-southeast-1" and account "development"
|
13
|
+
When I run the create-ami script
|
14
|
+
Then the script should report success
|
15
|
+
And the script should return an AMI id
|
16
|
+
And that AMI should exist as a private AMI in our AWS account
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Feature: Creating a new environment
|
2
|
+
|
3
|
+
As PlayUp
|
4
|
+
I want new environments to be provisioned automatically
|
5
|
+
So that I can deploy applications to those environments
|
6
|
+
|
7
|
+
@aws
|
8
|
+
Scenario: Creating a new light environment using the development account
|
9
|
+
Given I specify the environment profile "test-light"
|
10
|
+
And I uniquely name my environment
|
11
|
+
And I specify the region "ap-southeast-1" and account "development"
|
12
|
+
When I run the create-environment script
|
13
|
+
Then the script should report success
|
14
|
+
And I should have "2" running EC2 servers
|
15
|
+
And the server names should be prefixed with the environment name
|
16
|
+
And the servers should be in the "ap-southeast" availability zone
|
17
|
+
And the servers should be tagged with "Name"
|
18
|
+
And the servers should be tagged with "Environment"
|
19
|
+
And the servers should be tagged with "Creator"
|
20
|
+
And I should be able to SSH in to each server using the "devops" keypair
|
21
|
+
And there should be a load balancer in front of the servers
|
22
|
+
|
23
|
+
@slow
|
24
|
+
@aws
|
25
|
+
Scenario Outline: Creating a new full environment
|
26
|
+
Given I specify the environment profile "test-full"
|
27
|
+
And I uniquely name my environment
|
28
|
+
And I specify the region "<region>" and account "development"
|
29
|
+
When I run the create-environment script
|
30
|
+
Then the script should report success
|
31
|
+
And I should have "2" running EC2 servers
|
32
|
+
And the server names should be prefixed with the environment name
|
33
|
+
And the servers should be in the "<region>" availability zone
|
34
|
+
And the servers should be tagged with "Name"
|
35
|
+
And the servers should be tagged with "Environment"
|
36
|
+
And the servers should be tagged with "Creator"
|
37
|
+
And I should be able to SSH in to each server using the "devops" keypair
|
38
|
+
And there should be a load balancer in front of the servers
|
39
|
+
And I should have an RDS for my environment
|
40
|
+
And PUGE database environment variables should be set on each server to match the created RDS
|
41
|
+
And I should be able to connect to the RDS
|
42
|
+
|
43
|
+
Scenarios: regions
|
44
|
+
| region |
|
45
|
+
| ap-southeast-1 |
|
46
|
+
| eu-west-1 |
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Deploying Puge to an environment
|
2
|
+
|
3
|
+
As PlayUp
|
4
|
+
I want to deploy Puge to a new environment
|
5
|
+
So that I can test it
|
6
|
+
|
7
|
+
@wip
|
8
|
+
@aws
|
9
|
+
@slow
|
10
|
+
Scenario: Deploying Puge from Gitub to a new environment
|
11
|
+
Given an environment that PUGE can be deployed to
|
12
|
+
And I run the create-environment script
|
13
|
+
And I specify the Git PUGE tag "master"
|
14
|
+
When I run the deployment script
|
15
|
+
Then the script should report success
|
16
|
+
And I should see the correct PUGE tag has been deployed when I hit the load balancer
|
@@ -0,0 +1,101 @@
|
|
1
|
+
Given /^I specify the environment profile "([^"]*)"$/ do |profile|
|
2
|
+
@profile = profile
|
3
|
+
end
|
4
|
+
|
5
|
+
Given /^I uniquely name my environment$/ do
|
6
|
+
@environment_name = unique_test_name
|
7
|
+
end
|
8
|
+
|
9
|
+
Given /^I uniquely name my AMI$/ do
|
10
|
+
@ami_name = unique_test_name
|
11
|
+
end
|
12
|
+
|
13
|
+
Given /^I specify the region "([^"]*)" and account "([^"]*)"$/ do |region, account_name|
|
14
|
+
@region = region
|
15
|
+
@account_name = account_name
|
16
|
+
Cloud.connect(@region, @account_name)
|
17
|
+
end
|
18
|
+
|
19
|
+
Given /^I specify the puppet configuration "([^"]*)"$/ do |puppet_config|
|
20
|
+
@puppet_config = puppet_config
|
21
|
+
end
|
22
|
+
|
23
|
+
When /^I run the create\-environment script$/ do
|
24
|
+
@log = run_and_capture("./bin/dew --region #{@region} --account #{@account_name} --debug --verbose environments create -f #{@profile} #{@environment_name}", "create-environment.#{@profile}")
|
25
|
+
end
|
26
|
+
|
27
|
+
When /^I run the create\-ami script$/ do
|
28
|
+
@log = run_and_capture("./bin/dew --region #{@region} --account #{@account_name} --debug --verbose amis create #{@puppet_config} #{@ami_name}", "create-ami")
|
29
|
+
end
|
30
|
+
|
31
|
+
Then /^the script should report success$/ do
|
32
|
+
if $?.exitstatus != 0 && File.exist?(@log)
|
33
|
+
$stderr.puts File.read(@log)
|
34
|
+
end
|
35
|
+
$?.exitstatus.should == 0
|
36
|
+
end
|
37
|
+
|
38
|
+
Then /^the script should return an AMI id$/ do
|
39
|
+
script_output = File.read(@log)
|
40
|
+
script_output.should match(/AMI ID is ([^ ]+)/i)
|
41
|
+
script_output =~ /AMI ID is.+(ami-[\w]+)/i # damn matcher won't capture :(
|
42
|
+
@ami_id = $1
|
43
|
+
end
|
44
|
+
|
45
|
+
Then /^that AMI should exist as a private AMI in our AWS account$/ do
|
46
|
+
ami = Cloud.compute.images.all('name' => @ami_name).first
|
47
|
+
@ami_id.should == ami.id
|
48
|
+
ami.is_public.should be_false
|
49
|
+
end
|
50
|
+
|
51
|
+
Then /^I should have "([^"]*)" running EC2 servers$/ do |number_of_servers|
|
52
|
+
environment.servers.length.should == number_of_servers.to_i
|
53
|
+
end
|
54
|
+
|
55
|
+
Then /^the server names should be prefixed with the environment name$/ do
|
56
|
+
server_names = environment.servers.collect { |server| server.tags["Name"] }
|
57
|
+
server_names.sort.should == ["#{@environment_name} 1", "#{@environment_name} 2"]
|
58
|
+
end
|
59
|
+
|
60
|
+
Then /^the servers should be in the "([^"]*)" availability zone$/ do |availability_zone|
|
61
|
+
environment.servers.each { |server| server.availability_zone.should match /^#{availability_zone}(.*)$/ }
|
62
|
+
end
|
63
|
+
|
64
|
+
Then /^the servers should be tagged with "([^"]*)"$/ do |tag|
|
65
|
+
environment.servers.each { |server| server.tags.should have_key tag }
|
66
|
+
end
|
67
|
+
|
68
|
+
Then /^there should be a load balancer in front of the servers$/ do
|
69
|
+
servers = elb['Instances']
|
70
|
+
|
71
|
+
servers.sort.should == environment.servers.collect { |server| server.id }.sort
|
72
|
+
end
|
73
|
+
|
74
|
+
Then /^I should have an RDS for my environment$/ do
|
75
|
+
environment.database.should_not be_nil
|
76
|
+
end
|
77
|
+
|
78
|
+
Then /^I should be able to SSH in to each server using the "([^"]*)" keypair$/ do |keypair|
|
79
|
+
environment.servers.each do |server|
|
80
|
+
server.ssh.run("echo hello").should == "hello\n"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
Then /^PUGE database environment variables should be set on each server to match the created RDS$/ do
|
85
|
+
environment.servers.each do |server|
|
86
|
+
ssh = server.ssh
|
87
|
+
%w{PUGE_DB_NAME PUGE_DB_USERNAME PUGE_DB_PASSWORD}.each do |var|
|
88
|
+
ssh.run("echo $#{var}").chomp.length.should_not == 0
|
89
|
+
end
|
90
|
+
ssh.run("echo $PUGE_DB_HOST").chomp.should == environment.database.public_address
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
Then /^I should be able to connect to the RDS$/ do
|
95
|
+
environment.servers.each do |server|
|
96
|
+
ssh = server.ssh
|
97
|
+
#host.run("nc -w 1 $PUGE_DB_HOST 3306 > /dev/null 2>&1 ; echo $?").chomp.should == "0"
|
98
|
+
ssh.run("sudo apt-get install -y mysql-client", :quiet_stderr => true)
|
99
|
+
ssh.run("echo show databases | mysql -u$PUGE_DB_USERNAME -p$PUGE_DB_PASSWORD -h$PUGE_DB_HOST").chomp.length.should_not == 0
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Given /^an environment that PUGE can be deployed to$/ do
|
2
|
+
Given 'I specify the environment profile "puge-deploy"'
|
3
|
+
And "I uniquely name my environment"
|
4
|
+
And 'I specify the region "ap-southeast-1" and account "development"'
|
5
|
+
end
|
6
|
+
|
7
|
+
Given /^I specify the Git PUGE tag "([^"]*)"$/ do |tag|
|
8
|
+
@tag = tag
|
9
|
+
end
|
10
|
+
|
11
|
+
When /^I run the deployment script$/ do
|
12
|
+
@log = run_and_capture("script/deploy.rb puge --region #{Cloud.region} --account #{Cloud.account_name} #{@tag} #{@environment_name} development", "deploy")
|
13
|
+
sleep 60 # wait for tomcat to restart
|
14
|
+
end
|
15
|
+
|
16
|
+
Then /^I should see the correct PUGE tag has been deployed when I hit the load balancer$/ do
|
17
|
+
require 'net/http'
|
18
|
+
|
19
|
+
http = Net::HTTP.new(elb['DNSName'], 80)
|
20
|
+
http.read_timeout = 60
|
21
|
+
|
22
|
+
response = http.start do |web|
|
23
|
+
web.request(Net::HTTP::Get.new('/admin'))
|
24
|
+
end
|
25
|
+
|
26
|
+
response.body.should =~ /Revision: \w{7} /
|
27
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
ROOT_DIR = Pathname(__FILE__).expand_path.parent.parent.parent
|
5
|
+
$: << (ROOT_DIR+'lib').to_s
|
6
|
+
require 'dew'
|
7
|
+
|
8
|
+
def tmp_dir
|
9
|
+
tmp_dir = ROOT_DIR.join('tmp')
|
10
|
+
tmp_dir.mkdir unless tmp_dir.exist?
|
11
|
+
tmp_dir
|
12
|
+
end
|
13
|
+
|
14
|
+
def run_and_capture command, logname, timeout = 1200
|
15
|
+
logfile = tmp_dir.join(logname + ".log")
|
16
|
+
begin
|
17
|
+
Timeout::timeout(timeout) do
|
18
|
+
system("RUBYLIB='lib' #{command} > '#{logfile}' 2>&1")
|
19
|
+
end
|
20
|
+
rescue Timeout::Error => e
|
21
|
+
$stderr.puts "*** Command #{command} took longer than #{timeout} seconds to run, log follows:"
|
22
|
+
$stderr.puts logfile.read
|
23
|
+
raise e
|
24
|
+
end
|
25
|
+
logfile
|
26
|
+
end
|
27
|
+
|
28
|
+
def unique_test_name
|
29
|
+
"cuke-#{ENV['USER']}-#{Time.now.to_i}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def environment
|
33
|
+
@environment ||= Environment.get(@environment_name) if @environment_name
|
34
|
+
end
|
35
|
+
|
36
|
+
def elb
|
37
|
+
@elb ||= Cloud.elb.describe_load_balancers(@environment_name).body['DescribeLoadBalancersResult']['LoadBalancerDescriptions'].first
|
38
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
After("@aws") do
|
2
|
+
if !ENV['KEEP_TEST_ARTIFACTS']
|
3
|
+
if @environment_name
|
4
|
+
run_and_capture("./bin/dew --region #{@region} --account #{@account_name} environments destroy -f #{@environment_name}", 'destroy-environment')
|
5
|
+
end
|
6
|
+
if @ami_name
|
7
|
+
run_and_capture("./bin/dew --region #{@region} --account #{@account_name} amis destroy -f #{@ami_name}", 'destroy-ami')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|