dew 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,31 +1,65 @@
1
- Dew is a layer between the ground and fog, which is used to access the cloud.
1
+ **Dew** is an environment management tool intended for use in multi-instance AWS application deployments.
2
+
3
+ It's called **dew** as it's a layer under [Fog](http://fog.io) which in turn is a layer under various cloud platforms.
2
4
 
3
5
  It includes:
6
+
4
7
  * one command `dew`, with subcommands eg. `environments`, `amis`
8
+
9
+ These subcommands can:
5
10
 
6
- ## Installation
11
+ * create and destroy **environments**, a collection of AWS instances, a load balancer and a database
12
+ * create and destroy **amis**, machine images used to create instances in your environments
13
+ * configure your **amis** with [Puppet](http://www.puppetlabs.com)
14
+ * deploy MRI Passenger and JRuby Tomcat applications to your **environments**
7
15
 
8
- First install the dew gem
16
+ This code is Open Source, but some of it is still specific to PlayUp. Running `cucumber` with a correctly configured `development.yaml` will drain whichever credit card you've attached to that account!
17
+
18
+ ## Getting Started
9
19
 
10
20
  $ [sudo] gem install dew
11
21
 
12
- Then create all the config files it needs.
22
+ ### If you're an employee of PlayUp:
13
23
 
14
24
  $ git clone git@github.com:playup/dew-config.git ~/.dew
15
25
 
16
- or
26
+ ### Otherwise:
27
+
28
+ #### 1. Copy over the example configuration and edit the default account file
29
+
30
+ $ cp -r `gem which dew | dirname`/../../example/dew ~/.dew
31
+ $ vi ~/.dew/accounts/development.yaml
32
+
33
+ Replace the `user_id`, `access_key_id` and `secret_access_key` with your AWS credentials.
34
+
35
+ #### 2. Install your keypair
36
+
37
+ Either pick an existing keypair or create a new one. You'll need to do this once for each account and region you intend to operate in.
17
38
 
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
39
+ Place the `.pem` file in the following location:
24
40
 
41
+ ~/.dew/accounts/keys/$ACCOUNT/$REGION/$KEYPAIRNAME.pem
42
+
43
+ For example, the `.pem` file for the `default` key in `development` account and in the `ap-southeast-1` region would go in:
25
44
 
26
- Then run the dew command
45
+ ~/.dew/accounts/keys/development/ap-southeast-1/default.pem
46
+
47
+ Don't worry about setting permissions for the key - **dew** will manage that itself.
48
+
49
+ #### 3. Configure your security groups
50
+
51
+ **dew** makes a couple of assumptions about how you've set up your security groups. Unfortunately, **dew** doesn't yet possess the capability to manage this for you:
52
+
53
+ * it expects that the `default` security group allows for SSH from the host you're creating the environment from
54
+ * it expects that the `default` security group in your RDS configuration allows connections from your AWS account's instances
55
+
56
+ ### Finally:
27
57
 
28
58
  $ dew --help
59
+
60
+ And perform a basic self-test:
61
+
62
+ $ dew environments
29
63
 
30
64
  ## Creating a Simple Environment
31
65
 
data/bin/dew CHANGED
@@ -7,6 +7,10 @@ class DewCommand < DewBaseCommand
7
7
  option ['-q', '--quiet'], :flag, "Quiet mode, disables logging", :default => false
8
8
  option ['-v', '--verbose'], :flag, "Verbose mode, print debug output", :default => false
9
9
  option '--debug', :flag, "Show stacktraces on error", :default => false
10
+ option '--version', :flag, "Prints the dew version" do
11
+ puts "dew version #{Dew::VERSION}"
12
+ exit(0)
13
+ end
10
14
 
11
15
  subcommand "environments", "perform subcommands on the environments", EnvironmentsCommand
12
16
  subcommand "amis", "perform subcommands on the AMIs", AMIsCommand
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: development
3
+ description: Default 'dew' account
4
+ aws:
5
+ user_id: 0000-0000-0000
6
+ access_key_id: XXXXXXXXXXXX
7
+ secret_access_key: XXXXXXXXXX
@@ -0,0 +1,14 @@
1
+ # Template Profile YAML. Use this to create a new Profile.
2
+ #
3
+ # ---
4
+ # instances:
5
+ # amis: # List of AMI id's for regions you might like to create environments
6
+ # ap-southeast-1: ami-dcfc858e # An AMI entry *must* appear here for the region you wish to create accounts within
7
+ # size: m1.large # Size of EC2 to create. More info http://aws.amazon.com/ec2/instance-types
8
+ # count: 2 # The number of Server(s) to create
9
+ # keypair: devops # Amazon keypair to deploy onto new Server(s). More info http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?generating-a-keypair.html
10
+ # elb: # Optional Load Balancer section. More info http://aws.amazon.com/elasticloadbalancing
11
+ # listener_ports: # List of ports to 'balance' onto Server(s)
12
+ # - 80
13
+ # rds: # Optional Database section
14
+ # size: db.m1.small # Size of Database to create. More info http://aws.amazon.com/rds
@@ -0,0 +1,15 @@
1
+ ---
2
+ instances:
3
+ amis: # http://uec-images.ubuntu.com/releases/10.10/release
4
+ ap-southeast-1: ami-0c423c5e # https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-0c423c5e
5
+ eu-west-1: ami-fb9ca98f # https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-fb9ca98f
6
+ us-west-1: ami-ad7e2ee8 # https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-ad7e2ee8
7
+ size: c1.medium
8
+ count: 2
9
+ security-group: default
10
+ keypair: devops
11
+ elb:
12
+ listener_ports:
13
+ - 80
14
+ rds:
15
+ size: db.m1.small
@@ -0,0 +1,32 @@
1
+ ---
2
+ instances:
3
+ # An AMI is an image file used as a template to create an instance.
4
+ #
5
+ # AMIs aren't shared between regions. You'll need to specify an AMI for each
6
+ # region you want to create your environment in. AMIs can be created
7
+ # with the script/ami.rb create command.
8
+ #
9
+ # These AMIs, however, are 32-bit Ubuntu 10.10 images from Canonical.
10
+ # See: http://uec-images.ubuntu.com/releases/10.10/release
11
+ amis:
12
+ ap-southeast-1: ami-0c423c5e
13
+ eu-west-1: ami-fb9ca98f
14
+ us-west-1: ami-ad7e2ee8
15
+
16
+ # Each instance is created with particular size. The size determines
17
+ # the architecture, CPU and RAM available to the instance.
18
+ #
19
+ # m1.small is a 32-bit, dual core instance with 1.7gb of RAM.
20
+ size: m1.small
21
+
22
+ # Create two instances
23
+ count: 2
24
+
25
+ #security-groups:
26
+ # - default
27
+
28
+ keypair: devops
29
+
30
+ elb:
31
+ listener_ports:
32
+ - 80
data/lib/dew.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'inform'
2
+ require 'highline/import'
3
+ require 'dew/version'
2
4
  require 'dew/commands'
3
5
  require 'dew/models'
4
6
  require 'dew/controllers'
@@ -27,11 +27,11 @@ class Profile
27
27
  end
28
28
  profile
29
29
  end
30
-
30
+
31
31
  def has_elb?
32
32
  elb_listener_ports != nil
33
33
  end
34
-
34
+
35
35
  def has_rds?
36
36
  rds_size != nil
37
37
  end
@@ -42,17 +42,21 @@ class Profile
42
42
  # :rds_size, :elb_listener_ports
43
43
  end
44
44
 
45
- def to_s
46
- db_instance_str = "%{memory} memory, %{processor} processor, %{platform} platform, %{io_performance} I/O performance"
45
+ def self.size_to_s(size)
47
46
  #instance_str = "%{memory} memory, %{processor} processor, %{storage} storage, %{platform} platform, %{io_performance} I/O performance"
48
47
  instance_str = "%{memory} GB memory, %{processor} ECUs processor, %{storage} GB storage, %{platform}-bit platform, %{io_performance} I/O performance"
49
48
  flavor = Cloud.compute.flavors.detect { |f| f.id == size }
50
49
  instance_hash = { :memory => flavor.ram.to_s, :processor => flavor.cores.to_s, :storage => flavor.disk.to_s, :platform => flavor.bits.to_s, :io_performance => '??' }
50
+ instance_hash.inject(instance_str) { |res,(k,v)| res.gsub(/%\{#{k}\}/, v) }
51
+ end
52
+
53
+ def to_s
54
+ db_instance_str = "%{memory} memory, %{processor} processor, %{platform} platform, %{io_performance} I/O performance"
51
55
  table { |t|
52
- t << [ "#{count} instance#{'s' if count > 1}", "#{size.inspect} (#{instance_str % instance_hash })"]
56
+ t << [ "#{count} instance#{'s' if count > 1}", "#{size.inspect} (#{self.class.size_to_s(size)})"]
53
57
  t << ['disk image', ami.inspect]
54
58
  t << ['load balancer', "listener ports: #{elb_listener_ports.inspect}"] if has_elb?
55
- t << ['database', "#{rds_size.inspect} (#{db_instance_str % AWS_RESOURCES['db_instance_types'][rds_size]})"] if has_rds?
59
+ t << ['database', "#{rds_size.inspect} (#{AWS_RESOURCES['db_instance_types'][rds_size].inject(db_instance_str) { |res,(k,v)| res.gsub(/%\{#{k}\}/, v) } })"] if has_rds?
56
60
  t << ['security groups', security_groups.inspect]
57
61
  t << ['keypair', keypair.inspect]
58
62
  }.to_s
@@ -1,3 +1,3 @@
1
1
  module Dew
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: dew
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.1.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - PlayUp Devops
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-17 00:00:00 +10:00
13
+ date: 2011-06-22 00:00:00 +10:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -204,6 +204,10 @@ files:
204
204
  - lib/dew.rb
205
205
  - README.md
206
206
  - LICENSE
207
+ - example/dew/profiles/test-full.yaml
208
+ - example/dew/profiles/template.yaml
209
+ - example/dew/profiles/test-light.yaml
210
+ - example/dew/accounts/development.yaml
207
211
  - Rakefile
208
212
  - spec/dew/controllers/deploy_controller_spec.rb
209
213
  - spec/dew/controllers/amis_controller_spec.rb