gantree 0.4.7 → 0.4.8
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 +4 -4
- data/lib/gantree/base.rb +1 -1
- data/lib/gantree/cli.rb +18 -8
- data/lib/gantree/cli/help.rb +124 -2
- data/lib/gantree/deploy.rb +2 -1
- data/lib/gantree/stack.rb +23 -4
- data/lib/gantree/version.rb +1 -1
- data/spec/lib/gantree/cli_spec.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c29f307b0a0953654d60d594c16483af6170d65e
|
4
|
+
data.tar.gz: 99419b8282f4321e4bc03cfda65c5c6fc148b36f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd4eb18352ec83074acf1061c824c0ca571cb1f69a49f9f4475fcdbba3641b552cd19885c934aa6202be221fd07169a728ba18435e0aa654a437fcf72fd3fc61
|
7
|
+
data.tar.gz: 345e240f10d6ca87bf48e186540ddce77f39bf0862eef393c679103647fb9723f0f619f6c350ee4809f3af5eea475e27adb51cf0d353fb8b10f9c30b5c84a771
|
data/lib/gantree/base.rb
CHANGED
@@ -27,7 +27,7 @@ module Gantree
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def tag
|
30
|
-
origin = `git
|
30
|
+
origin = `git config --get remote.origin.url`.match(":(.*)\/")[1]
|
31
31
|
branch = `git rev-parse --abbrev-ref HEAD`.strip
|
32
32
|
hash = `git rev-parse --verify --short #{branch}`.strip
|
33
33
|
"#{origin}-#{branch}-#{hash}"
|
data/lib/gantree/cli.rb
CHANGED
@@ -6,11 +6,13 @@ require 'gantree/cli/help'
|
|
6
6
|
module Gantree
|
7
7
|
class CLI < Thor
|
8
8
|
|
9
|
+
class_option :dry_run, :aliases => "-d", :desc => "dry run mode", :default => false
|
10
|
+
|
9
11
|
desc "deploy APP", "deploy specified APP"
|
12
|
+
long_desc Help.deploy
|
10
13
|
option :branch, :desc => 'branch to deploy'
|
11
14
|
method_option :tag, :aliases => "-t", :desc => "set docker tag to deploy"
|
12
15
|
method_option :ext, :aliases => "-x", :desc => "ebextensions folder/repo"
|
13
|
-
option :dry_run, :aliases => "-d", :desc => "do not actually deploy the app"
|
14
16
|
option :silent, :aliases => "-s", :desc => "mute notifications"
|
15
17
|
option :image_path, :aliases => "-i", :desc => "docker hub image path ex. (bleacher/cms | quay.io/bleacherreport/cms)"
|
16
18
|
option :autodetect_app_role, :desc => "use naming convention to determin role"
|
@@ -19,19 +21,19 @@ module Gantree
|
|
19
21
|
end
|
20
22
|
|
21
23
|
desc "init IMAGE", "create a dockerrun for your IMAGE"
|
24
|
+
long_desc Help.init
|
22
25
|
method_option :user , :aliases => "-u", :desc => "user credentials for private dockerhub repo"
|
23
26
|
method_option :port , :aliases => "-p", :desc => "port of running application"
|
24
27
|
method_option :bucket , :aliases => "-b", :desc => "set bucket name, default is '<user>-docker-cfgs'"
|
25
|
-
option :dry_run, :aliases => "-d", :desc => "do not actually upload to s3 bucket"
|
26
28
|
def init image
|
27
29
|
Gantree::Init.new(image, options).run
|
28
30
|
end
|
29
31
|
|
30
32
|
desc "create APP", "create a cfn stack"
|
33
|
+
long_desc Help.create
|
31
34
|
method_option :env, :aliases => "-e", :desc => "(optional) environment name"
|
32
35
|
method_option :instance_size, :aliases => "-i", :desc => "(optional) set instance size", :default => "m3.medium"
|
33
36
|
method_option :rds, :aliases => "-r", :desc => "(optional) set database type [pg,mysql]"
|
34
|
-
option :dry_run, :aliases => "-d", :desc => "do not actually create the stack"
|
35
37
|
option :docker_version, :desc => "set the version of docker to use as solution stack"
|
36
38
|
option :dupe, :desc => "copy an existing template into a new template"
|
37
39
|
option :local, :desc => "use a local cfn nested template"
|
@@ -40,26 +42,26 @@ module Gantree
|
|
40
42
|
end
|
41
43
|
|
42
44
|
desc "update APP", "update a cfn stack"
|
43
|
-
|
45
|
+
long_desc Help.update
|
44
46
|
option :role, :aliases => "-r", :desc => "add an app role (worker|listner|scheduler)"
|
47
|
+
option :solution, :aliases => "-s", :desc => "change solution stack"
|
45
48
|
def update app
|
46
49
|
Gantree::Stack.new(app, merge_defaults(options)).update
|
47
50
|
end
|
48
51
|
|
49
52
|
desc "delete APP", "delete a cfn stack"
|
50
53
|
option :force, :desc => "do not prompt"
|
51
|
-
option :dry_run, :aliases => "-d", :desc => "do not actually create the stack"
|
52
54
|
def delete app
|
53
55
|
Gantree::Stack.new(app, merge_defaults(options)).delete
|
54
56
|
end
|
55
57
|
|
56
58
|
desc "restart APP", "restart an eb app"
|
57
|
-
option :dry_run, :aliases => "-d", :desc => "do not actually restart"
|
58
59
|
def restart app
|
59
60
|
Gantree::App.new(app, merge_defaults(options)).restart
|
60
61
|
end
|
61
62
|
|
62
63
|
desc "build", "build and tag a docker application"
|
64
|
+
long_desc Help.build
|
63
65
|
option :image_path, :aliases => "-i", :desc => "docker hub image path ex. (bleacher/cms | quay.io/bleacherreport/cms)"
|
64
66
|
option :tag, :aliases => "-t", :desc => "set docker tag to build"
|
65
67
|
def build
|
@@ -67,6 +69,8 @@ module Gantree
|
|
67
69
|
end
|
68
70
|
|
69
71
|
desc "push", "build and tag a docker application"
|
72
|
+
long_desc Help.push
|
73
|
+
option :hub, :aliases => "-h", :desc => "hub (docker|quay)"
|
70
74
|
option :image_path, :aliases => "-i", :desc => "docker hub image path ex. (bleacher/cms | quay.io/bleacherreport/cms)"
|
71
75
|
option :tag, :aliases => "-t", :desc => "set docker tag to push"
|
72
76
|
def push
|
@@ -78,11 +82,11 @@ module Gantree
|
|
78
82
|
puts Gantree::Docker.new(merge_defaults(options)).tag
|
79
83
|
end
|
80
84
|
|
81
|
-
desc "ship", "
|
85
|
+
desc "ship", "build, push and deploy docker container to elastic beanstalk"
|
86
|
+
long_desc Help.ship
|
82
87
|
option :branch, :desc => 'branch to deploy'
|
83
88
|
option :tag, :aliases => "-t", :desc => "set docker tag to deploy", :default => Gantree::Base.new.tag
|
84
89
|
option :ext, :aliases => "-x", :desc => "ebextensions folder/repo"
|
85
|
-
option :dry_run, :aliases => "-d", :desc => "do not actually deploy the app"
|
86
90
|
option :silent, :aliases => "-s", :desc => "mute notifications"
|
87
91
|
option :autodetect_app_role, :desc => "use naming convention to determin role"
|
88
92
|
option :image_path, :aliases => "-i", :desc => "hub image path ex. (bleacher/cms | quay.io/bleacherreport/cms)"
|
@@ -94,6 +98,12 @@ module Gantree
|
|
94
98
|
Gantree::Deploy.new(server, merge_defaults(options)).run
|
95
99
|
end
|
96
100
|
|
101
|
+
map "-v" => :version
|
102
|
+
desc "version", "gantree version"
|
103
|
+
def version
|
104
|
+
puts VERSION
|
105
|
+
end
|
106
|
+
|
97
107
|
protected
|
98
108
|
|
99
109
|
def merge_defaults(options={})
|
data/lib/gantree/cli/help.rb
CHANGED
@@ -2,9 +2,131 @@ module Gantree
|
|
2
2
|
class CLI < Thor
|
3
3
|
class Help
|
4
4
|
class << self
|
5
|
-
def
|
5
|
+
def init
|
6
6
|
<<-EOL
|
7
|
-
|
7
|
+
Examples:
|
8
|
+
|
9
|
+
$ gantree init -u USERNAME -p PORT HANDLE/REPO:TAG
|
10
|
+
|
11
|
+
$ gantree init -u frodriguez -p 3000 bleacher/cauldron:master
|
12
|
+
EOL
|
13
|
+
end
|
14
|
+
|
15
|
+
def deploy
|
16
|
+
<<-EOL
|
17
|
+
Examples:
|
18
|
+
|
19
|
+
$ gantree deploy -t TAG ENVIRONMENT
|
20
|
+
|
21
|
+
$ gantree deploy -t latest stag-cauldon-app-s1
|
22
|
+
|
23
|
+
# to deploy to all environments to within the same application
|
24
|
+
|
25
|
+
$ gantree deploy -t TAG APPLICATION
|
26
|
+
|
27
|
+
$ gantree deploy -t TAG cauldron-stag-s1
|
28
|
+
|
29
|
+
# add remote .ebextensions
|
30
|
+
|
31
|
+
$ gantree deploy -t TAG stag-cauldron-s1 -x "git@github.com:br/.ebextensions.git"
|
32
|
+
|
33
|
+
# add remote .ebextensions branch
|
34
|
+
|
35
|
+
$ gantree deploy -t TAG stag-cauldron-s1 -x "git@github.com:br/.ebextensions:feature_branch"
|
36
|
+
|
37
|
+
EOL
|
38
|
+
end
|
39
|
+
|
40
|
+
def create
|
41
|
+
<<-EOL
|
42
|
+
Examples:
|
43
|
+
|
44
|
+
$ gantree create APPLICATION
|
45
|
+
|
46
|
+
$ gantree create linguist-stag-s1
|
47
|
+
|
48
|
+
$ gantree create APPLICATION -e ENVIRONMENT
|
49
|
+
|
50
|
+
$ gantree create linguist-stag-s1 -e linguist-stag-app-s1
|
51
|
+
|
52
|
+
$ gantree create --dupe=rails-stag-s1 rails-stag-s3
|
53
|
+
EOL
|
54
|
+
end
|
55
|
+
|
56
|
+
def update
|
57
|
+
<<-EOL
|
58
|
+
Examples:
|
59
|
+
|
60
|
+
# Update a cloudformation stack
|
61
|
+
$ gantree update linguist-stag-s1
|
62
|
+
|
63
|
+
# Add an app role to an existing stack
|
64
|
+
$ gantree update linguist-stag-s1 -r worker
|
65
|
+
|
66
|
+
# Update docker solution starck version
|
67
|
+
$ gantree update linguist-stag-s1 -s latest
|
68
|
+
$ gantree update linguist-stag-s1 -s "64bit Amazon Linux 2014.09 v1.0.11 running Docker 1.3.3"
|
69
|
+
EOL
|
70
|
+
end
|
71
|
+
|
72
|
+
def build
|
73
|
+
<<-EOL
|
74
|
+
Builds and tags a docker application.
|
75
|
+
|
76
|
+
Examples:
|
77
|
+
|
78
|
+
# Automatically tag a build
|
79
|
+
$ gantree build
|
80
|
+
|
81
|
+
# Add custom tag to a build
|
82
|
+
$ gantree build -t deploy
|
83
|
+
|
84
|
+
# Override image path to point to another hub
|
85
|
+
$ gantree build -i quay.io/bleacherreport/cms
|
86
|
+
|
87
|
+
EOL
|
88
|
+
end
|
89
|
+
|
90
|
+
def push
|
91
|
+
<<-EOL
|
92
|
+
Push docker image tag to hub
|
93
|
+
|
94
|
+
Examples:
|
95
|
+
|
96
|
+
# Push automatically tagged build
|
97
|
+
$ gantree push
|
98
|
+
|
99
|
+
# Push custom tagged build
|
100
|
+
$ gantree push -t deploy
|
101
|
+
|
102
|
+
# Push to another hub/acocunt/repo
|
103
|
+
$ gantree push -i quay.io/bleacherreport/cms
|
104
|
+
EOL
|
105
|
+
end
|
106
|
+
|
107
|
+
def ship
|
108
|
+
<<-EOL
|
109
|
+
build, push and deploy docker image to elastic beanstalk
|
110
|
+
|
111
|
+
Examples:
|
112
|
+
|
113
|
+
# Automatically tag a build, push that build and deploy to elastic beanstalk
|
114
|
+
$ gantree ship cms-stag-s1
|
115
|
+
|
116
|
+
# Override defaults
|
117
|
+
$ gantree ship -i bleacher/cms -x "git@github.com:br/.ebextensions.git:master" cms-stag-s1
|
118
|
+
|
119
|
+
$ gantree ship -i bleacher/cms -t built -x "git@github.com:br/.ebextensions.git:master" cms-stag-s1
|
120
|
+
EOL
|
121
|
+
end
|
122
|
+
|
123
|
+
def restart
|
124
|
+
<<-EOL
|
125
|
+
Restart docker environment
|
126
|
+
|
127
|
+
Examples:
|
128
|
+
|
129
|
+
$ gantree restart stag-rails-app-s1
|
8
130
|
EOL
|
9
131
|
end
|
10
132
|
end
|
data/lib/gantree/deploy.rb
CHANGED
@@ -116,8 +116,9 @@ module Gantree
|
|
116
116
|
:option_settings => autodetect_app_role(env)
|
117
117
|
})
|
118
118
|
puts "Deployed #{@packaged_version} to #{env} on #{@app}".green
|
119
|
-
rescue AWS::ElasticBeanstalk::Errors::InvalidParameterValue
|
119
|
+
rescue AWS::ElasticBeanstalk::Errors::InvalidParameterValue => e
|
120
120
|
puts "Error: Something went wrong during the deploy to #{env}".red
|
121
|
+
puts "#{e.message}"
|
121
122
|
end
|
122
123
|
end
|
123
124
|
end
|
data/lib/gantree/stack.rb
CHANGED
@@ -51,10 +51,10 @@ module Gantree
|
|
51
51
|
def update
|
52
52
|
puts "Updating stack from local cfn repo"
|
53
53
|
add_role @options[:role] if @options[:role]
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
change_solution_stack if @options[:solution]
|
55
|
+
return if @options[:dry_run]
|
56
|
+
upload_templates
|
57
|
+
puts "Stack Updated".green if @cfm.stacks[@options[:stack_name]].update(:template => stack_template)
|
58
58
|
end
|
59
59
|
|
60
60
|
def delete
|
@@ -178,6 +178,25 @@ module Gantree
|
|
178
178
|
end
|
179
179
|
end
|
180
180
|
|
181
|
+
def change_solution_stack
|
182
|
+
beanstalk = JSON.parse(IO.read("cfn/#{@options[:stack_name]}-beanstalk.cfn.json"))
|
183
|
+
solution_stack = set_solution_stack
|
184
|
+
beanstalk["Resources"]["ConfigurationTemplate"]["Properties"]["SolutionStackName"] = solution_stack
|
185
|
+
beanstalk["Resources"]["ConfigurationTemplate"]["Properties"]["Description"] = solution_stack
|
186
|
+
IO.write("cfn/#{@options[:stack_name]}-beanstalk.cfn.json",JSON.pretty_generate(beanstalk))
|
187
|
+
end
|
188
|
+
|
189
|
+
def set_solution_stack
|
190
|
+
@options[:solution] == "latest" ? get_latest_docker_solution : @options[:solution]
|
191
|
+
end
|
192
|
+
|
193
|
+
def get_latest_docker_solution
|
194
|
+
result = eb.list_available_solution_stacks
|
195
|
+
solutions = result[:solution_stacks]
|
196
|
+
docker_solutions = solutions.select { |s| s.include? "running Docker"}
|
197
|
+
docker_solutions.first
|
198
|
+
end
|
199
|
+
|
181
200
|
def add_role name
|
182
201
|
env = @options[:env].sub('app', name)
|
183
202
|
beanstalk = JSON.parse(IO.read("cfn/#{@options[:stack_name]}-beanstalk.cfn.json"))
|
data/lib/gantree/version.rb
CHANGED
@@ -106,5 +106,17 @@ describe Gantree::CLI do
|
|
106
106
|
expect(out).to include "Deleting"
|
107
107
|
end
|
108
108
|
end
|
109
|
+
|
110
|
+
describe "#version" do
|
111
|
+
it "should output gantree version" do
|
112
|
+
out = execute("bin/gantree version")
|
113
|
+
expect(out).to match /\d\.\d\.\d/
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should output gantree version using alias" do
|
117
|
+
out = execute("bin/gantree -v")
|
118
|
+
expect(out).to match /\d\.\d\.\d/
|
119
|
+
end
|
120
|
+
end
|
109
121
|
end
|
110
122
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gantree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|