simple_deploy 0.0.2

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use ruby-1.9.3-p125@simple_deploy --create
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in simple_deploy.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/simple_deploy ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'simple_deploy'
4
+ require 'simple_deploy/cli'
5
+
6
+ SimpleDeploy::CLI.start
@@ -0,0 +1,18 @@
1
+ module SimpleDeploy
2
+ class ArtifactLister
3
+
4
+ def list
5
+ Heirloom::Heirloom.list.keys
6
+ end
7
+
8
+ def all(args)
9
+ artifacts = Heirloom::Heirloom.list
10
+ artifacts[args[:class]]
11
+ end
12
+
13
+ def summary
14
+ list
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ require 'heirloom'
2
+
3
+ module SimpleDeploy
4
+ class ArtifactReader
5
+
6
+ def show(id)
7
+ Heirloom::Heirloom.info :show => id
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ require 'heirloom'
2
+ require 'simple_deploy/artifact/artifact_lister'
3
+
4
+ module SimpleDeploy
5
+ class Artifact
6
+
7
+ attr_accessor :metadata
8
+
9
+ def initialize(args)
10
+ @region = args[:region]
11
+ self.metadata = Heirloom::Heirloom.info(args)
12
+ end
13
+
14
+ def all_endpoints
15
+ {
16
+ 's3' => s3_url,
17
+ 'http' => http_url,
18
+ 'https' => https_url
19
+ }
20
+ end
21
+
22
+ def s3_url
23
+ key = "#{@region}-s3-url"
24
+ metadata[key] ? metadata[key].first : nil
25
+ end
26
+
27
+ def http_url
28
+ key = "#{@region}-http-url"
29
+ metadata[key] ? metadata[key].first : nil
30
+ end
31
+
32
+ def https_url
33
+ key = "#{@region}-https-url"
34
+ metadata[key] ? metadata[key].first : nil
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,21 @@
1
+ module SimpleDeploy
2
+ module CLI
3
+ def self.attributes
4
+ attrs = []
5
+ read_attributes.each do |attribs|
6
+ a = attribs.split('=')
7
+ attrs << { a.first => a.last }
8
+ end
9
+ attrs
10
+ end
11
+
12
+ def self.read_attributes
13
+ @opts[:attributes].nil? ? [] : @opts[:attributes].split(',')
14
+ end
15
+
16
+ def self.environment_provided?
17
+ @opts[:environment].nil? != true
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,95 @@
1
+ require 'trollop'
2
+ require 'simple_deploy/cli/variables'
3
+
4
+ module SimpleDeploy
5
+ module CLI
6
+ def self.start
7
+ @opts = Trollop::options do
8
+ banner <<-EOS
9
+
10
+ Deploy and manage resources in AWS
11
+
12
+ simple_deploy environments
13
+ simple_deploy list -e ENVIRONMENT
14
+ simple_deploy create -n STACK_NAME -e ENVIRONMENT -a ATTRIBUTES -t TEMPLATE_PATH
15
+ simple_deploy update -n STACK_NAME -e ENVIRONMENT -a ATTRIBUTES
16
+ simple_deploy deploy -n STACK_NAME -e ENVIRONMENT
17
+ simple_deploy destroy -n STACK_NAME -e ENVIRONMENT
18
+ simple_deploy instances -n STACK_NAME -e ENVIRONMENT
19
+ simple_deploy status -n STACK_NAME -e ENVIRONMENT
20
+ simple_deploy attributes -n STACK_NAME -e ENVIRONMENT
21
+ simple_deploy events -n STACK_NAME -e ENVIRONMENT
22
+ simple_deploy resources -n STACK_NAME -e ENVIRONMENT
23
+ simple_deploy outputs -n STACK_NAME -e ENVIRONMENT
24
+ simple_deploy template -n STACK_NAME -e ENVIRONMENT
25
+
26
+ EOS
27
+ opt :help, "Display Help"
28
+ opt :attributes, "CSV list of updates attributes", :type => :string
29
+ opt :environment, "Set the target environment", :type => :string
30
+ opt :name, "Stack name to manage", :type => :string
31
+ opt :template, "Path to the template file", :type => :string
32
+ end
33
+
34
+ @cmd = ARGV.shift
35
+
36
+ unless @cmd
37
+ puts "Please specify a command."
38
+ exit 1
39
+ end
40
+
41
+ read_attributes
42
+
43
+ unless @cmd == 'artifacts' || @cmd == 'environments'
44
+ @config = Config.new.environment(@opts[:environment])
45
+ unless environment_provided?
46
+ puts "Please specify an environment."
47
+ exit 1
48
+ end
49
+ end
50
+
51
+ case @cmd
52
+ when 'create', 'delete', 'deploy', 'destroy', 'instances',
53
+ 'status', 'attributes', 'events', 'resources',
54
+ 'outputs', 'template', 'update'
55
+ @stack = Stack.new :environment => @opts[:environment],
56
+ :name => @opts[:name],
57
+ :config => @config
58
+ end
59
+
60
+ case @cmd
61
+ when 'attributes'
62
+ @stack.attributes.each_pair { |k, v| puts "#{k}: #{v}" }
63
+ when 'artifacts'
64
+ a = ArtifactLister.new
65
+ puts a.summary
66
+ when 'create'
67
+ @stack.create :attributes => attributes,
68
+ :template => @opts[:template]
69
+ puts "#{@opts[:name]} created."
70
+ when 'delete', 'destroy'
71
+ @stack.destroy
72
+ puts "#{@opts[:name]} destroyed."
73
+ when 'deploy'
74
+ @stack.deploy
75
+ puts "#{@opts[:name]} deployed."
76
+ when 'environments'
77
+ Config.new.environments.keys.each { |e| puts e }
78
+ when 'update'
79
+ @stack.update :attributes => attributes
80
+ puts "#{@opts[:name]} updated."
81
+ when 'instances'
82
+ @stack.instances.each { |s| puts s }
83
+ when 'list'
84
+ puts Stack.list(:config => @config)
85
+ when 'template'
86
+ jj @stack.template
87
+ when 'events', 'outputs', 'resources', 'status'
88
+ puts (@stack.send @cmd.to_sym).to_yaml
89
+ else
90
+ puts "Unknown command. Use -h for help."
91
+ end
92
+ end
93
+
94
+ end
95
+ end
@@ -0,0 +1,44 @@
1
+ module SimpleDeploy
2
+ class Config
3
+
4
+ attr_accessor :config
5
+
6
+ def initialize
7
+ load_config_file
8
+ end
9
+
10
+ def load_config_file
11
+ config_file = "#{ENV['HOME']}/.simpledeploy.yml"
12
+ self.config = YAML::load( File.open( config_file ) )
13
+ end
14
+
15
+ def artifacts
16
+ config['roles']['default']['artifacts']
17
+ end
18
+
19
+ def keys
20
+ config['keys']
21
+ end
22
+
23
+ def user
24
+ config['user']
25
+ end
26
+
27
+ def deploy_script
28
+ config['roles']['default']['deploy_script']
29
+ end
30
+
31
+ def environments
32
+ config['environments']
33
+ end
34
+
35
+ def environment(name)
36
+ environments[name]
37
+ end
38
+
39
+ def region(name)
40
+ environment(name)['region']
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,65 @@
1
+ require 'capistrano'
2
+ require 'capistrano/cli'
3
+
4
+ module SimpleDeploy
5
+ class Deployment
6
+ def initialize(args)
7
+ @config = args[:config]
8
+ @instances = args[:instances]
9
+ @environment = args[:environment]
10
+ @attributes = args[:attributes]
11
+
12
+ @region = @config.region(@environment)
13
+ @deploy_script = @config.deploy_script
14
+
15
+ create_deployment
16
+ set_deploy_command
17
+ end
18
+
19
+ def execute
20
+ @deployment.simpledeploy
21
+ end
22
+
23
+ private
24
+
25
+ def set_deploy_command
26
+ cmd = ""
27
+ get_artifact_endpoints.each_pair do |k,v|
28
+ cmd += "env #{k}=#{v} "
29
+ end
30
+ cmd += @deploy_script
31
+
32
+ @deployment.load :string => "task :simpledeploy do
33
+ sudo '#{cmd}'
34
+ end"
35
+ end
36
+
37
+ def get_artifact_endpoints
38
+ h = {}
39
+ @config.artifacts.each do |a|
40
+ name = a['name']
41
+ endpoint = a['endpoint']
42
+ artifact = Artifact.new :class => name,
43
+ :sha => @attributes[name],
44
+ :region => @region
45
+ h[name] = artifact.all_endpoints[endpoint]
46
+ end
47
+ h
48
+ end
49
+
50
+ def ssh_options
51
+ {
52
+ :keys => @config.keys,
53
+ :paranoid => false
54
+ }
55
+ end
56
+
57
+ def create_deployment
58
+ @deployment = Capistrano::Configuration.new
59
+ @deployment.set :user, @config.user
60
+ @deployment.variables[:ssh_options] = ssh_options
61
+ @instances.each { |i| @deployment.server i, :instances }
62
+ end
63
+ end
64
+ end
65
+
@@ -0,0 +1,13 @@
1
+ module SimpleDeploy
2
+ class StackLister
3
+
4
+ def initialize(args)
5
+ @config = args[:config]
6
+ end
7
+
8
+ def all
9
+ Stackster::Stack.list :config => @config
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ require 'json'
2
+ module SimpleDeploy
3
+ class StackReader
4
+
5
+ def initialize(args)
6
+ @sf = Stackster::StackFormater.new args
7
+ @sr = Stackster::StackReader.new args
8
+ end
9
+
10
+ def attributes
11
+ @sf.attributes
12
+ end
13
+
14
+ def instances
15
+ @sf.instances_public_ip_addresses
16
+ end
17
+
18
+ def status
19
+ @sr.status
20
+ end
21
+
22
+ def events
23
+ @sr.events
24
+ end
25
+
26
+ def outputs
27
+ @sr.outputs
28
+ end
29
+
30
+ def resources
31
+ @sr.resources
32
+ end
33
+
34
+ def template
35
+ @sr.template
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,76 @@
1
+ require 'stackster'
2
+ require 'simple_deploy/stack/stack_reader'
3
+ require 'simple_deploy/stack/stack_lister'
4
+
5
+ module SimpleDeploy
6
+ class Stack
7
+
8
+ def initialize(args)
9
+ @environment = args[:environment]
10
+ @name = args[:name]
11
+ @config = Config.new
12
+ end
13
+
14
+ def self.list(args)
15
+ StackLister.new(:config => args[:config]).all
16
+ end
17
+
18
+ def create(args)
19
+ stack.create :attributes => args[:attributes],
20
+ :template => args[:template]
21
+ end
22
+
23
+ def update(args)
24
+ stack.update :attributes => args[:attributes]
25
+ end
26
+
27
+ def deploy
28
+ deployment = Deployment.new :config => @config,
29
+ :environment => @environment,
30
+ :instances => instances,
31
+ :attributes => attributes
32
+ deployment.execute
33
+ end
34
+
35
+ def destroy
36
+ stack.destroy
37
+ end
38
+
39
+ def events
40
+ stack.events
41
+ end
42
+
43
+ def outputs
44
+ stack.outputs
45
+ end
46
+
47
+ def resources
48
+ stack.resources
49
+ end
50
+
51
+ def instances
52
+ stack.instances_public_ip_addresses
53
+ end
54
+
55
+ def status
56
+ stack.status
57
+ end
58
+
59
+ def attributes
60
+ stack.attributes
61
+ end
62
+
63
+ def template
64
+ JSON.parse stack.template
65
+ end
66
+
67
+ private
68
+
69
+ def stack
70
+ @stack ||= Stackster::Stack.new :environment => @environment,
71
+ :name => @name,
72
+ :config => @config.environment(@environment)
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,3 @@
1
+ module SimpleDeploy
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,5 @@
1
+ require 'simple_deploy/config'
2
+ require 'simple_deploy/artifact'
3
+ require 'simple_deploy/stack'
4
+ require 'simple_deploy/deployment'
5
+ require 'simple_deploy/version'
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "simple_deploy/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "simple_deploy"
7
+ s.version = SimpleDeploy::VERSION
8
+ s.authors = ["Brett Weaver"]
9
+ s.email = ["brett@weav.net"]
10
+ s.homepage = ""
11
+ s.summary = %q{I help with deployments}
12
+ s.description = %q{Its what I do}
13
+
14
+ s.rubyforge_project = "simple_deploy"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rspec"
22
+
23
+ s.add_runtime_dependency "capistrano"
24
+ s.add_runtime_dependency "heirloom", '= 0.0.7'
25
+ s.add_runtime_dependency "stackster", '= 0.0.3'
26
+ s.add_runtime_dependency "trollop"
27
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Config do
4
+
5
+ it "should create a new config object" do
6
+ config = SimpleDeploy::Config.new
7
+ config.class.should == SimpleDeploy::Config
8
+ end
9
+
10
+ end
11
+
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'simple_deploy'
5
+
6
+ RSpec.configure do |config|
7
+ #spec config
8
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_deploy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brett Weaver
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70245152037260 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70245152037260
25
+ - !ruby/object:Gem::Dependency
26
+ name: capistrano
27
+ requirement: &70245152036580 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70245152036580
36
+ - !ruby/object:Gem::Dependency
37
+ name: heirloom
38
+ requirement: &70245152036000 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - =
42
+ - !ruby/object:Gem::Version
43
+ version: 0.0.7
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70245152036000
47
+ - !ruby/object:Gem::Dependency
48
+ name: stackster
49
+ requirement: &70245152035460 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - =
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.3
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70245152035460
58
+ - !ruby/object:Gem::Dependency
59
+ name: trollop
60
+ requirement: &70245152035040 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70245152035040
69
+ description: Its what I do
70
+ email:
71
+ - brett@weav.net
72
+ executables:
73
+ - simple_deploy
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .gitignore
78
+ - .rvmrc
79
+ - Gemfile
80
+ - Rakefile
81
+ - bin/simple_deploy
82
+ - lib/simple_deploy.rb
83
+ - lib/simple_deploy/artifact.rb
84
+ - lib/simple_deploy/artifact/artifact_lister.rb
85
+ - lib/simple_deploy/artifact/artifact_reader.rb
86
+ - lib/simple_deploy/cli.rb
87
+ - lib/simple_deploy/cli/variables.rb
88
+ - lib/simple_deploy/config.rb
89
+ - lib/simple_deploy/deployment.rb
90
+ - lib/simple_deploy/stack.rb
91
+ - lib/simple_deploy/stack/stack_lister.rb
92
+ - lib/simple_deploy/stack/stack_reader.rb
93
+ - lib/simple_deploy/version.rb
94
+ - simple_deploy.gemspec
95
+ - spec/config_spec.rb
96
+ - spec/spec_helper.rb
97
+ homepage: ''
98
+ licenses: []
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ segments:
110
+ - 0
111
+ hash: 3040328796696586179
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ segments:
119
+ - 0
120
+ hash: 3040328796696586179
121
+ requirements: []
122
+ rubyforge_project: simple_deploy
123
+ rubygems_version: 1.8.16
124
+ signing_key:
125
+ specification_version: 3
126
+ summary: I help with deployments
127
+ test_files:
128
+ - spec/config_spec.rb
129
+ - spec/spec_helper.rb