ebfly 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: caddbe101734e059c894728ac1198a1705df2cbe
4
+ data.tar.gz: 1c2946180f78e71d7539f4730fafacbc191904ac
5
+ SHA512:
6
+ metadata.gz: 359ca0f932e298ba91d7ff51580d1055b4107279882ca6369d04b0455d99dfcef134fea4e6b3cb04ed5263a7912d2ad6094e40c4f6c7d66906851d2d647b971b
7
+ data.tar.gz: 6075acb96e091bdc49cbdac40182e2e476efcc1f20ef5c491e30dcbe40688c873df3012bbf09050a66231e278c00b653fe0527173837ed930aa7c6b7f0931066
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,173 @@
1
+ # Ebfly
2
+
3
+ Ebfly is a simple command line interface for [AWS ElasticBeanstalk](http://aws.amazon.com/en/elasticbeanstalk/).
4
+
5
+ ## Prerequisities
6
+
7
+ - Ruby 1.9+
8
+ - git
9
+
10
+ ## Install
11
+
12
+ Ebfly can be install via gem:
13
+
14
+ ```
15
+ $ gem install ebfly
16
+ ```
17
+
18
+ After install, you can use `ebfly` command.
19
+
20
+ ## Setup
21
+
22
+ You need to create `$HOME/.ebfly` and specify following values.
23
+
24
+ ```
25
+ AWS_ACCESS_KEY_ID='...'
26
+ AWS_SECRET_ACCESS_KEY='...'
27
+ AWS_REGION='us-east-1'
28
+ ```
29
+
30
+ or you can also specify these values via `ENV`:
31
+
32
+ ```
33
+ export AWS_ACCESS_KEY_ID='...'
34
+ export AWS_SECRET_ACCESS_KEY='...'
35
+ export AWS_REGION='us-east-1'
36
+ ```
37
+
38
+ ## Quick Start
39
+
40
+ If you want to deploy sinatra app, you should do following step.
41
+
42
+ ### Step 1 Create git repository
43
+
44
+ Create working directory, and create git repository.
45
+
46
+ ```sh
47
+ $ mkdir sinatraapp
48
+ $ cd sinatraapp
49
+ $ git init .
50
+ ```
51
+
52
+ ### Step 2 Create application
53
+
54
+ Create application using `ebfly app create` command.
55
+
56
+ ```sh
57
+ # Usage: "ebfly app create <application-name>"
58
+ $ ebfly app create sinatraapp
59
+ Create app: sinatraapp ...
60
+
61
+ === application info ===
62
+ application name: sinatraapp
63
+ description:
64
+ created at: 2014-02-25 08:43:30 UTC
65
+ updated at: application name: 2014-02-25 08:43:30 UTC
66
+ configuration_templates:
67
+ ```
68
+
69
+ ### Step 3 Create environment
70
+
71
+ Create environment using 'ebfly env create' command.
72
+
73
+ ```sh
74
+ # Usage: "ebfly env create <environment-name> -a <application-name> -s <solution_stack_name> -t <tier-type>
75
+ $ ebfly env create dev -a sinatraapp -s ruby19 -t web
76
+ Create environment: sinatraapp-dev ...
77
+
78
+ === environment info ===
79
+ application name: sinatraapp
80
+ environment id: e-XXX
81
+ environment name: sinatraapp-dev
82
+ description:
83
+ status: Launching
84
+ health: Grey
85
+ tier: WebServer Standard 1.0
86
+ solution stack name: 64bit Amazon Linux 2013.09 running Ruby 1.9.3
87
+ updated at: 2014-02-25 08:45:39 UTC
88
+ ```
89
+
90
+ ### Step 4 Create sinatraapp
91
+
92
+ Create `config.ru`, `helloworld.rb` and `Gemfile` like this:
93
+
94
+ #### config.ru
95
+
96
+ ```rb
97
+ require './helloworld'
98
+ run Sinatra::Application
99
+ ```
100
+
101
+ #### helloworld.rb
102
+
103
+ ```rb
104
+ require 'sinatra'
105
+ get '/' do
106
+ "Hello World!"
107
+ end
108
+ ```
109
+
110
+ #### Gemfile
111
+
112
+ ```rb
113
+ source 'http://rubygems.org'
114
+ gem 'sinatra'
115
+ ```
116
+
117
+ ### Step 5 Bundle install and commit working files
118
+
119
+ ```sh
120
+ $ bundle install
121
+ $ git add .
122
+ $ git commit -m "First commit"
123
+ ```
124
+
125
+ ### Step 6 Deploy app
126
+
127
+ Deploy app's `master` branch to environment using `ebfly env push` command.
128
+
129
+ ```sh
130
+ # Usage: "ebfly push <name> <branch or tree_ish>".
131
+ $ ebfly env push dev master -a sinatraapp
132
+
133
+ === environment info ===
134
+ application name: sinatraapp
135
+ environment id: e-wwdh3u39bg
136
+ environment name: sinatraapp-dev
137
+ description:
138
+ status: Ready
139
+ health: Green
140
+ tier: WebServer Standard 1.0
141
+ solution stack name: 64bit Amazon Linux 2013.09 running Ruby 1.9.3
142
+ endpoint url: awseb-e-w-AWSEBLoa-18QJHE7KJ67YX-1070649090.us-east-1.elb.amazonaws.com
143
+ cname: sinatraapp-dev-esfmkp3rgk.elasticbeanstalk.com
144
+ updated at: 2014-02-25 08:50:51 UTC
145
+
146
+ Create archive: git-8e81464455269535c89149643ba50fab5cfa82da-1393318559.zip
147
+ Upload archive git-8e81464455269535c89149643ba50fab5cfa82da-1393318559.zip to s3://elasticbeanstalk-us-east-1-283381710361
148
+ Create application version: 8e81464455269535c89149643ba50fab5cfa82da-1393318559
149
+ Update environment: sinatraapp-dev to 8e81464455269535c89149643ba50fab5cfa82da-1393318559
150
+
151
+ === environment info ===
152
+ application name: sinatraapp
153
+ environment id: e-wwdh3u39bg
154
+ environment name: sinatraapp-dev
155
+ description:
156
+ status: Updating
157
+ health: Grey
158
+ tier: WebServer Standard 1.0
159
+ solution stack name: 64bit Amazon Linux 2013.09 running Ruby 1.9.3
160
+ endpoint url: awseb-e-w-AWSEBLoa-18QJHE7KJ67YX-1070649090.us-east-1.elb.amazonaws.com
161
+ cname: sinatraapp-dev-esfmkp3rgk.elasticbeanstalk.com
162
+ version label: 8e81464455269535c89149643ba50fab5cfa82da-1393318559
163
+ updated at: 2014-02-25 08:56:01 UTC
164
+ ```
165
+
166
+ ### Step 7 Open app
167
+
168
+
169
+
170
+ ## License
171
+
172
+ This tool is distributed under the
173
+ [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+
5
+ Rake::TestTask.new(:test) do |test|
6
+ test.libs << 'lib' << 'test'
7
+ test.pattern = 'test/**/test_*.rb'
8
+ test.verbose = true
9
+ end
10
+
11
+ task :default => :test
data/bin/ebfly ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require 'pathname'
5
+ bin_file = Pathname.new(__FILE__).realpath
6
+
7
+ $:.unshift File.expand_path("../../lib", bin_file)
8
+
9
+ conf = File.expand_path("~/.ebfly")
10
+ File.readlines(conf).each do |line|
11
+ key, val = line.split('=')
12
+ next if val.nil?
13
+ ENV[key.strip] = val.strip
14
+ end if File.exist?(conf)
15
+
16
+ require "ebfly/cli"
17
+ Ebfly::CLI.start(ARGV)
data/ebfly.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ebfly/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ebfly"
8
+ spec.version = Ebfly::VERSION
9
+ spec.authors = ["Kazuyuki Honda"]
10
+ spec.email = ["hakobera@gmail.com"]
11
+ spec.summary = %q{Simple command line interface for AWS ElasticBeanstalk}
12
+ spec.description = %q{Simple command line interface for AWS ElasticBeanstalk}
13
+ spec.homepage = "https://github.com/hakobera/ebifly"
14
+ spec.license = "Apache License, Version 2.0"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "aws-sdk"
22
+ spec.add_runtime_dependency "thor"
23
+ end
data/lib/ebfly/cli.rb ADDED
@@ -0,0 +1,26 @@
1
+ require "thor"
2
+ require "aws-sdk"
3
+
4
+ require_relative 'ebfly'
5
+ require_relative 'version'
6
+ require_relative 'command/app'
7
+ require_relative 'command/env'
8
+ require_relative 'command/config'
9
+
10
+ module Ebfly
11
+ class CLI < Thor
12
+ desc "version", "show version"
13
+ def version
14
+ puts "Ebfly #{Ebfly::VERSION}"
15
+ end
16
+
17
+ desc "app SUBCOMMAND ...ARGS", "manage application"
18
+ subcommand "app", App
19
+
20
+ desc "env SUBCOMMAND ...ARGS -a APP", "manager environment"
21
+ subcommand "env", Environment
22
+
23
+ desc "config SUBCOMMAND ...ARGS -a APP", "manager environment's config vars"
24
+ subcommand "config", Config
25
+ end
26
+ end
@@ -0,0 +1,86 @@
1
+ module Ebfly
2
+ class App < Thor
3
+ include Command
4
+
5
+ desc "create <name>", "Create an application named <name>"
6
+ option :d, :banner => "<description>", :desc => "Describes the application"
7
+ def create(name)
8
+ puts "Create app: #{name} ..."
9
+ opts = { application_name: name }
10
+ opts.merge!(description: options[:d]) if options[:d]
11
+
12
+ debug(opts)
13
+ ret = run { eb.create_application(opts) }
14
+ debug(ret)
15
+ show_app_info(ret[:application])
16
+ end
17
+
18
+ desc "delete <name>", "Delete an application named <name>"
19
+ option :f, :desc => "Terminate running environment by force", :default => false, :type => :boolean
20
+ def delete(name)
21
+ puts "Delete app: #{name} ..."
22
+ opts = {
23
+ application_name: name,
24
+ terminate_env_by_force: options[:f]
25
+ }
26
+ debug(opts)
27
+ run { eb.delete_application(opts) }
28
+ puts "Done"
29
+ end
30
+
31
+ desc "info <name>", "Show information of the application"
32
+ def info(name)
33
+ begin
34
+ inf = app_info(name)
35
+ debug inf
36
+ show_app_info(inf)
37
+ rescue => err
38
+ style_err err
39
+ exit 1
40
+ end
41
+ end
42
+
43
+ desc "versions <name>", "Show the application versions"
44
+ def versions(name)
45
+ opts = {
46
+ application_name: name
47
+ }
48
+ ret = run { eb.describe_application_versions(opts) }
49
+ debug(ret)
50
+ show_app_versions(ret[:application_versions])
51
+ end
52
+
53
+ private
54
+
55
+ def app_info(app)
56
+ opts = {
57
+ application_names: [ app ]
58
+ }
59
+ ret = run { eb.describe_applications(opts) }
60
+ raise "application named #{app} not found" unless ret[:applications][0]
61
+ ret[:applications][0]
62
+ end
63
+
64
+ def show_app_info(app)
65
+ puts ""
66
+ puts "=== application info ==="
67
+ puts "application name:\t#{app[:application_name]}"
68
+ puts "description:\t\t#{app[:description]}"
69
+ puts "created at:\t\t#{app[:date_created]}"
70
+ puts "updated at:\t\tapplication name: #{app[:date_updated]}"
71
+ puts "configuration_templates:"
72
+ app[:configuration_templates].each do |t|
73
+ puts " #{t}"
74
+ end
75
+ end
76
+
77
+ def show_app_versions(versions)
78
+ len = versions.length
79
+ puts ""
80
+ puts "=== application versions ==="
81
+ versions.each_with_index do |v, i|
82
+ puts "#{len-i}. #{v[:version_label]}\t#{v[:date_updated]}"
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,99 @@
1
+ module Ebfly
2
+ class Config < Thor
3
+ include Command
4
+
5
+ class_option :a, :required => true, :banner => "<application-name>", :desc => "Application name"
6
+ class_option :e, :required => true, :banner => "<environment-name>", :desc => "Environment name"
7
+
8
+ desc "show", "Show environment's config vars"
9
+ def show
10
+ app = options[:a]
11
+ env = options[:e]
12
+
13
+ opts = {
14
+ application_name: app,
15
+ environment_name: env_name(app, env)
16
+ }
17
+
18
+ ret = run { eb.describe_configuration_settings(opts) }
19
+ debug(ret)
20
+ show_env_conf(app, env, ret)
21
+ end
22
+
23
+ desc "rm", "Add configuration ot the environment"
24
+ option :c, :required => true, :banner => "<key1=value1 key2=value2 ...>", :type => :array, :desc => "Config vars"
25
+ def add
26
+ ret = add_environment_config(options[:a], options[:e], options[:c])
27
+ debug(ret)
28
+ end
29
+
30
+ desc "rm", "Remove configuration ot the environment"
31
+ option :c, :required => true, :banner => "<key1 key2 ...>", :type => :array, :desc => "Config vars"
32
+ def rm
33
+ ret = remove_environment_config(options[:a], options[:e], options[:c])
34
+ debug(ret)
35
+ end
36
+
37
+ private
38
+
39
+ def add_environment_config(app, env, configs)
40
+ puts "Add config vars: #{env_name(app, env)}"
41
+
42
+ settings = []
43
+ configs.each do |config|
44
+ k, v = config.split("=")
45
+ next if v.nil?
46
+ conf = {
47
+ namespace: "aws:elasticbeanstalk:application:environment",
48
+ option_name: k.strip,
49
+ value: v.strip
50
+ }
51
+ settings << conf
52
+ end
53
+
54
+ opts = {
55
+ environment_name: env_name(app, env),
56
+ option_settings: settings
57
+ }
58
+ run { eb.update_environment(opts) }
59
+ end
60
+
61
+ def remove_environment_config(app, env, keys)
62
+ puts "Remove config vars: #{env_name(app, env)}"
63
+
64
+ settings = []
65
+ keys.each do |key|
66
+ conf = {
67
+ namespace: "aws:elasticbeanstalk:application:environment",
68
+ option_name: key.strip,
69
+ }
70
+ settings << conf
71
+ end
72
+
73
+ opts = {
74
+ environment_name: env_name(app, env),
75
+ options_to_remove: settings
76
+ }
77
+ run { eb.update_environment(opts) }
78
+ end
79
+
80
+ def show_env_conf(app, env, res)
81
+ config_vars = []
82
+
83
+ puts ""
84
+ puts "=== #{env_name(app, env)} Config Vars ==="
85
+ settings = res[:configuration_settings]
86
+ settings.each do |setting|
87
+ opts = setting[:option_settings]
88
+ opts.each do |opt|
89
+ next unless opt[:option_name] == "EnvironmentVariables"
90
+ config_vars = opt[:value].split(",")
91
+ end
92
+ end
93
+
94
+ config_vars.sort.each do |config_var|
95
+ puts config_var
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,184 @@
1
+ module Ebfly
2
+ class Environment < Thor
3
+ include Command
4
+
5
+ class_option :a, :required => true, :banner => "<application-name>", :desc => "Application name"
6
+
7
+ desc "create <name>", "Create a environment named <name>"
8
+ option :s, :required => true, :banner => "<solution stack name>", :desc => "This is an alternative to specifying a configuration name"
9
+ option :t, :banner => "<type>", :default => "web", :desc => "tier type, web or worker"
10
+ option :d, :banner => "<description>", :desc => "Describes the environment"
11
+ option :v, :banner => "<version label>", :desc => "The name of the application version to deploy"
12
+ def create(name)
13
+ app = options[:a]
14
+ puts "Create environment: #{env_name(app, name)} ..."
15
+ opts = {
16
+ application_name: app,
17
+ environment_name: env_name(app, name),
18
+ solution_stack_name: solution_stack(options[:s]),
19
+ tier: tier(options[:t])
20
+ }
21
+ opts.merge!(description: options[:d]) if options[:d]
22
+ opts.merge!(version_label: options[:v]) if options[:v]
23
+
24
+ debug opts
25
+ ret = run { eb.create_environment(opts) }
26
+ show_env_info(ret)
27
+ end
28
+
29
+ desc "delete <name>", "Delete the environment named <name>"
30
+ def delete(name)
31
+ app = options[:a]
32
+ puts "Delete environment: #{env_name(app, name)} ..."
33
+ opts = {
34
+ environment_name: env_name(app, name)
35
+ }
36
+ run { eb.terminate_environment(opts) }
37
+ puts "Done"
38
+ end
39
+
40
+ desc "info <name>", "Show information of the enviroment"
41
+ option :r, :default => false, :desc => "Show environment resources info"
42
+ def info(name)
43
+ app = options[:a]
44
+ begin
45
+ inf = env_info(app, name)
46
+ debug inf
47
+ show_env_info(inf)
48
+ rescue => err
49
+ style_err err
50
+ exit 1
51
+ end
52
+
53
+ if options[:r]
54
+ res = env_resources(app, name)
55
+ debug res
56
+ show_env_resources(res)
57
+ end
58
+ end
59
+
60
+ desc "open <name>", "Open environment in browser (Mac OS Only)"
61
+ def open(name)
62
+ raise "This feature can run on Mac OS Only" unless exist_command?('open')
63
+
64
+ inf = env_info(options[:a], name)
65
+ url = "http://#{inf[:cname]}"
66
+ system "open #{url}"
67
+ end
68
+
69
+ desc "push <name> <branch or tree_ish>", "Push and deploy specified branch to environment"
70
+ def push(name, branch)
71
+ raise "git must be installed" unless exist_command?('git')
72
+ app = options[:a]
73
+
74
+ puts "push #{branch} to #{env_name(app, name)}"
75
+ inf = env_info(app, name)
76
+ show_env_info(inf)
77
+ raise "Environment named #{env_name(app, name)} is in an invalid state for this operation. Must be Ready." if inf[:status] != "Ready"
78
+ puts ""
79
+
80
+ ish, e, s = Open3.capture3("git", "rev-parse", branch)
81
+ ish.strip!
82
+ time = Time.now.to_i
83
+ version = "#{ish}-#{time}"
84
+ file_name = "git-#{version}.zip"
85
+
86
+ begin
87
+ create_archive(file_name, ish)
88
+ upload_archive(file_name)
89
+ create_application_version(app, version, ish, file_name)
90
+ ret = update_environment(app, name, version)
91
+ debug(ret)
92
+ show_env_info(ret)
93
+ rescue => err
94
+ style_err err
95
+ exit 1
96
+ ensure
97
+ File.delete file_name if File.exist? file_name
98
+ end
99
+ end
100
+
101
+ private
102
+
103
+ def env_info(app, env)
104
+ opts = {
105
+ application_name: app,
106
+ environment_names: [ env_name(app, env) ]
107
+ }
108
+ ret = run { eb.describe_environments(opts) }
109
+ raise "Environment named #{env_name(app, env)} not found" unless ret[:environments][0]
110
+ ret[:environments][0]
111
+ end
112
+
113
+ def env_resources(app, env)
114
+ opts = {
115
+ environment_name: env_name(app, env)
116
+ }
117
+ ret = run { eb.describe_environment_resources(opts) }
118
+ ret[:environment_resources]
119
+ end
120
+
121
+ def create_archive(file_name, ish)
122
+ puts "Create archive: #{file_name}"
123
+ Open3.capture3("git", "archive", "--format", "zip", "--output", file_name, ish)
124
+ end
125
+
126
+ def upload_archive(file_name)
127
+ puts "Upload archive #{file_name} to s3://#{s3_bucket}"
128
+ bucket = s3.buckets[s3_bucket]
129
+ obj = bucket.objects[file_name]
130
+ obj.write(Pathname.new(file_name))
131
+ end
132
+
133
+ def create_application_version(app, version, ish, file_name)
134
+ puts "Create application version: #{version}"
135
+ opts = {
136
+ application_name: app,
137
+ version_label: version,
138
+ description: ish,
139
+ source_bundle: {
140
+ s3_bucket: s3_bucket,
141
+ s3_key: file_name
142
+ }
143
+ }
144
+ run { eb.create_application_version(opts) }
145
+ end
146
+
147
+ def update_environment(app, env, version)
148
+ puts "Update environment: #{env_name(app, env)} to #{version}"
149
+ opts = {
150
+ environment_name: env_name(app, env),
151
+ version_label: version
152
+ }
153
+ run { eb.update_environment(opts) }
154
+ end
155
+
156
+ def show_env_info(res)
157
+ puts ""
158
+ puts "=== environment info ==="
159
+ puts "application name:\t#{res[:application_name]}"
160
+ puts "environment id:\t\t#{res[:environment_id]}"
161
+ puts "environment name:\t#{res[:environment_name]}"
162
+ puts "description:\t\t#{res[:description]}"
163
+ puts "status:\t\t\t#{res[:status]}"
164
+ puts "health:\t\t\t#{res[:health]}"
165
+ puts "tier:\t\t\t#{res[:tier][:name]} #{res[:tier][:type]} #{res[:tier][:version]}"
166
+ puts "solution stack name:\t#{res[:solution_stack_name]}"
167
+ puts "endpoint url:\t\t#{res[:endpoint_url]}" if res[:endpoint_url]
168
+ puts "cname:\t\t\t#{res[:cname]}" if res[:cname]
169
+ puts "version label:\t\t#{res[:version_label]}" if res[:version_label]
170
+ puts "updated at:\t\t#{res[:date_updated]}"
171
+ end
172
+
173
+ def show_env_resources(res)
174
+ puts ""
175
+ puts "=== environment resources ==="
176
+ puts "auto scaling groups:\t#{res[:auto_scaling_groups]}"
177
+ puts "instances:\t\t#{res[:instances]}"
178
+ puts "launch configurations:\t#{res[:launch_configurations]}"
179
+ puts "load balancers:\t\t#{res[:load_balancers]}"
180
+ puts "triggers:\t\t#{res[:triggers]}"
181
+ puts "queues:\t\t\t#{res[:queues]}"
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,75 @@
1
+ require "thor"
2
+ require "aws-sdk"
3
+ require "pp"
4
+ require "open3"
5
+
6
+ module Ebfly
7
+ module Command
8
+ PREDEFINED_SOLUTION_STACKS = {
9
+ "php53" => "64bit Amazon Linux running PHP 5.3",
10
+ "php54" => "64bit Amazon Linux 2013.09 running PHP 5.4",
11
+ "php55" => "64bit Amazon Linux 2013.09 running PHP 5.5",
12
+ "nodejs" => "64bit Amazon Linux 2013.09 running Node.js",
13
+ "java7" => "64bit Amazon Linux 2013.09 running Tomcat 7 Java 7",
14
+ "java6" => "64bit Amazon Linux 2013.09 running Tomcat 7 Java 6",
15
+ "python27" => "64bit Amazon Linux 2013.09 running Python 2.7",
16
+ "ruby18" => "64bit Amazon Linux 2013.09 running Ruby 1.8.7",
17
+ "ruby19" => "64bit Amazon Linux 2013.09 running Ruby 1.9.3",
18
+ }
19
+
20
+ def eb
21
+ @eb ||= AWS::ElasticBeanstalk.new
22
+ @eb.client
23
+ end
24
+
25
+ def s3
26
+ @s3 ||= AWS::S3.new
27
+ end
28
+
29
+ def run(&block)
30
+ begin
31
+ res = yield
32
+ raise res.error unless res.successful?
33
+ res
34
+ rescue => err
35
+ style_err(err)
36
+ exit 1
37
+ end
38
+ end
39
+
40
+ def s3_bucket
41
+ @s3_bucket ||= (run { eb.create_storage_location }[:s3_bucket])
42
+ end
43
+
44
+ def style_err(err)
45
+ puts "ERR! #{err.message}"
46
+ end
47
+
48
+ def debug(obj)
49
+ pp obj if ENV["DEBUG"]
50
+ end
51
+
52
+ def exist_command?(cmd)
53
+ Open3.capture3("type", cmd)[2].exitstatus == 0 rescue nil
54
+ end
55
+
56
+ def env_name(app, env)
57
+ "#{app}-#{env}"
58
+ end
59
+
60
+ def tier(type)
61
+ if type == "web"
62
+ return { name: "WebServer", type: "Standard", version: "1.0" }
63
+ elsif type == "worker"
64
+ return { name: "Worker", type: "SQS/HTTP", version: "1.0" }
65
+ else
66
+ raise "Environment tier definition not found"
67
+ end
68
+ end
69
+
70
+ def solution_stack(name)
71
+ return PREDEFINED_SOLUTION_STACKS[name] if PREDEFINED_SOLUTION_STACKS.key?(name)
72
+ return name
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,3 @@
1
+ module Ebfly
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ebfly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kazuyuki Honda
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sdk
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Simple command line interface for AWS ElasticBeanstalk
42
+ email:
43
+ - hakobera@gmail.com
44
+ executables:
45
+ - ebfly
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - Gemfile
51
+ - README.md
52
+ - Rakefile
53
+ - bin/ebfly
54
+ - ebfly.gemspec
55
+ - lib/ebfly/cli.rb
56
+ - lib/ebfly/command/app.rb
57
+ - lib/ebfly/command/config.rb
58
+ - lib/ebfly/command/env.rb
59
+ - lib/ebfly/ebfly.rb
60
+ - lib/ebfly/version.rb
61
+ homepage: https://github.com/hakobera/ebifly
62
+ licenses:
63
+ - Apache License, Version 2.0
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 2.2.0
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: Simple command line interface for AWS ElasticBeanstalk
85
+ test_files: []