tprov 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ebc7196b5e44ee5beddea6ff802e08108e8becd1
4
+ data.tar.gz: 9a882f706a0f503321e0596ab250e2e86e7609cc
5
+ SHA512:
6
+ metadata.gz: c4221995fea6a03a199b21c6d4b5c87414ddcb1b0cf8d7cd551072e27b13de4de9ca37e44a4ad5b08338b91ca99a955bce906efc9628efa6870cd284e379916b
7
+ data.tar.gz: ef59e1f02f7ae6477a1c0231010303fdb1e6414ef0942c0b032cc29ea51f8a5979f53011117431fbe642078a21717ba351cfab1ff3753b20757c2707d95a7883
data/Gemfile CHANGED
@@ -4,5 +4,5 @@ gem "sinatra-static-assets"
4
4
  gem "emk-sinatra-url-for"
5
5
  gem "sinatra-flash"
6
6
  gem "sinatra-redirect-with-flash"
7
- #gem "docker-api", :require => "docker"
7
+ gem "docker-api", :require => "docker"
8
8
  gem "redis"
@@ -1,8 +1,15 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ archive-tar-minitar (0.5.2)
5
+ docker-api (1.5.4)
6
+ archive-tar-minitar
7
+ excon (>= 0.22.0)
8
+ json
4
9
  emk-sinatra-url-for (0.2.1)
5
10
  sinatra (>= 0.9.1.1)
11
+ excon (0.31.0)
12
+ json (1.8.1)
6
13
  rack (1.5.2)
7
14
  rack-protection (1.5.0)
8
15
  rack
@@ -23,6 +30,7 @@ PLATFORMS
23
30
  ruby
24
31
 
25
32
  DEPENDENCIES
33
+ docker-api
26
34
  emk-sinatra-url-for
27
35
  redis
28
36
  sinatra
data/bin/tprov CHANGED
@@ -2,16 +2,14 @@
2
2
 
3
3
  $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
4
4
 
5
- require "rubygems"
6
- require "optparse"
7
- require "tprov"
8
- require "version"
5
+ require 'rubygems'
6
+ require 'optparse'
7
+ require 'tprov'
8
+ require 'version'
9
9
 
10
10
  options = {}
11
11
 
12
12
  optparse = OptionParser.new do |opts|
13
- # Set a banner, displayed at the top
14
- # of the help screen.
15
13
  opts.banner = "Usage: TProv [options] ..."
16
14
 
17
15
  opts.separator ''
@@ -1,11 +1,14 @@
1
1
  $: << File.dirname(__FILE__)
2
2
 
3
- require 'sinatra'
3
+ require 'sinatra/base'
4
4
  require 'sinatra/url_for'
5
5
  require 'sinatra/static_assets'
6
6
  require 'sinatra/flash'
7
7
  require 'sinatra/redirect_with_flash'
8
8
  require 'json'
9
+ require 'uri'
10
+ require 'docker'
11
+ require 'pp'
9
12
 
10
13
  module TProv
11
14
  class Application < Sinatra::Base
@@ -18,6 +21,11 @@ module TProv
18
21
  set :views, File.join(File.dirname(__FILE__), 'views')
19
22
  set :bind, '0.0.0.0'
20
23
 
24
+ Docker.url = ENV['DOCKER_URL'] || 'https://localhost:2375'
25
+ Docker.options = {
26
+ :ssl_verify_peer => false
27
+ }
28
+
21
29
  enable :sessions, :logging, :dump_errors, :raise_errors, :show_exceptions
22
30
 
23
31
  before do
@@ -29,12 +37,25 @@ module TProv
29
37
  end
30
38
 
31
39
  post '/tomcat/create' do
32
- get_war(params[:name], params[:url])
33
- redirect '/', :success => "Instance #{@domain_name} created!"
40
+ if params[:name].empty? or params[:url].empty?
41
+ redirect '/', :error => "You must specify a name and a URL."
42
+ end
43
+ success, output = get_war(params[:name], params[:url])
44
+ unless success
45
+ redirect '/', :error => "Tomcat application #{params[:name]} failed to be fetched because #{output}."
46
+ end
47
+ success, output = create_instance(params[:name])
48
+ unless success
49
+ redirect '/', :error => "Tomcat application #{params[:name]} failed to be created because #{output}."
50
+ end
51
+ redirect '/', :success => "Tomcat Application #{params[:name]} created!"
34
52
  end
35
53
 
36
54
  post '/tomcat/delete' do
37
- delete_instance(params[:id])
55
+ success, output = delete_instance(params[:id])
56
+ unless success
57
+ redirect '/', :error => "Tomcat application #{params[:name]} failed to be deleted because #{output}."
58
+ end
38
59
  redirect '/', :success => "Instance #{params[:id]} deleted!"
39
60
  end
40
61
 
@@ -45,26 +66,31 @@ module TProv
45
66
 
46
67
  helpers do
47
68
  def get_war(name, url)
48
- cid = `docker run --name #{name} jamtur01/fetcher`.chop
49
- create_instance(name)
69
+ container = Docker::Container.create('Cmd' => url, 'Image' => 'jamtur01/fetcher', 'name' => name)
70
+ container.start
71
+ container.id
50
72
  end
51
73
 
52
74
  def create_instance(name)
53
- cid = `docker run -P --volumes-from #{name} -d -t jamtur01/tomcat7`.chop
54
- port = `docker port #{cid} 8080`.chop
75
+ container = Docker::Container.create('Image' => 'jamtur01/tomcat7')
76
+ container.start('PublishAllPorts' => true, 'VolumesFrom' => name)
77
+ container.id
55
78
  end
56
79
 
57
80
  def delete_instance(cid)
58
- kill = `docker kill #{cid}`
81
+ container = Docker::Container.get(cid)
82
+ container.kill
59
83
  end
60
84
 
61
85
  def list_instances
62
86
  @list = {}
63
- instance_ids = `docker ps -q`.split(/\n/).reject(&:empty?)
87
+ instance_ids = Docker::Container.all
64
88
  instance_ids.each { |id|
65
- port = `docker port #{id} 8080`.chop
66
- config = JSON.parse(`docker inspect #{id}`)
67
- @list[id] = { 'hostname' => config[0]["Config"]["Hostname"], 'ip' => config[0]["NetworkSettings"]["IPAddress"], 'port' => port }
89
+ container = Docker::Container.get(id.id)
90
+ config = container.json
91
+ if config['NetworkSettings']['Ports']['8080/tcp']
92
+ @list[id] = { 'hostname' => config['Config']['Hostname'], 'ip' => config['NetworkSettings']['IPAddress'], 'port' => config['NetworkSettings']['Ports']['8080/tcp'][0]['HostPort'] }
93
+ end
68
94
  }
69
95
  @list
70
96
  end
@@ -1,3 +1,3 @@
1
1
  module TProv
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -24,4 +24,5 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency "sinatra-static-assets"
25
25
  s.add_dependency "emk-sinatra-url-for"
26
26
  s.add_dependency "sinatra-redirect-with-flash"
27
+ s.add_dependency "docker-api"
27
28
  end
metadata CHANGED
@@ -1,142 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tprov
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - James Turnbull
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-06-21 00:00:00.000000000 Z
11
+ date: 2015-03-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: sinatra
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: haml
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: sass
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: json
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: sinatra-flash
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: sinatra-static-assets
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: emk-sinatra-url-for
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: sinatra-redirect-with-flash
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - '>='
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: docker-api
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
140
137
  - !ruby/object:Gem::Version
141
138
  version: '0'
142
139
  description: A simple app to provision Tomcat apps with Docker written for The Docker
@@ -177,28 +174,28 @@ files:
177
174
  - tprov.gemspec
178
175
  homepage: http://www.dockerbook.com
179
176
  licenses: []
177
+ metadata: {}
180
178
  post_install_message:
181
179
  rdoc_options: []
182
180
  require_paths:
183
181
  - lib
184
182
  required_ruby_version: !ruby/object:Gem::Requirement
185
- none: false
186
183
  requirements:
187
- - - ! '>='
184
+ - - '>='
188
185
  - !ruby/object:Gem::Version
189
186
  version: '0'
190
187
  required_rubygems_version: !ruby/object:Gem::Requirement
191
- none: false
192
188
  requirements:
193
- - - ! '>='
189
+ - - '>='
194
190
  - !ruby/object:Gem::Version
195
191
  version: '0'
196
192
  requirements: []
197
193
  rubyforge_project:
198
- rubygems_version: 1.8.28
194
+ rubygems_version: 2.0.14
199
195
  signing_key:
200
- specification_version: 3
196
+ specification_version: 4
201
197
  summary: A simple app to provision Tomcat apps with Docker
202
198
  test_files:
203
199
  - spec/spec_helper.rb
204
200
  - spec/tprov_spec.rb
201
+ has_rdoc: