superhosting 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.
Files changed (70) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +5 -0
  6. data/Gemfile.lock +117 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +23 -0
  9. data/Rakefile +6 -0
  10. data/Vagrantfile +10 -0
  11. data/bin/sx +10 -0
  12. data/bootstrap.sh +31 -0
  13. data/lib/superhosting.rb +40 -0
  14. data/lib/superhosting/base.rb +37 -0
  15. data/lib/superhosting/cli/base.rb +227 -0
  16. data/lib/superhosting/cli/cmd/admin_add.rb +11 -0
  17. data/lib/superhosting/cli/cmd/admin_container_add.rb +16 -0
  18. data/lib/superhosting/cli/cmd/admin_container_delete.rb +16 -0
  19. data/lib/superhosting/cli/cmd/admin_container_list.rb +12 -0
  20. data/lib/superhosting/cli/cmd/admin_delete.rb +11 -0
  21. data/lib/superhosting/cli/cmd/admin_passwd.rb +16 -0
  22. data/lib/superhosting/cli/cmd/container_add.rb +21 -0
  23. data/lib/superhosting/cli/cmd/container_admin_add.rb +16 -0
  24. data/lib/superhosting/cli/cmd/container_admin_delete.rb +16 -0
  25. data/lib/superhosting/cli/cmd/container_admin_list.rb +12 -0
  26. data/lib/superhosting/cli/cmd/container_change.rb +21 -0
  27. data/lib/superhosting/cli/cmd/container_delete.rb +11 -0
  28. data/lib/superhosting/cli/cmd/container_list.rb +9 -0
  29. data/lib/superhosting/cli/cmd/container_reconfig.rb +11 -0
  30. data/lib/superhosting/cli/cmd/container_restore.rb +24 -0
  31. data/lib/superhosting/cli/cmd/container_save.rb +14 -0
  32. data/lib/superhosting/cli/cmd/container_update.rb +11 -0
  33. data/lib/superhosting/cli/cmd/mysql_db_add.rb +9 -0
  34. data/lib/superhosting/cli/cmd/mysql_db_delete.rb +9 -0
  35. data/lib/superhosting/cli/cmd/mysql_db_dump.rb +9 -0
  36. data/lib/superhosting/cli/cmd/mysql_db_sql.rb +9 -0
  37. data/lib/superhosting/cli/cmd/mysql_grant.rb +9 -0
  38. data/lib/superhosting/cli/cmd/mysql_user_add.rb +12 -0
  39. data/lib/superhosting/cli/cmd/mysql_user_delete.rb +9 -0
  40. data/lib/superhosting/cli/cmd/site_add.rb +16 -0
  41. data/lib/superhosting/cli/cmd/site_alias_add.rb +16 -0
  42. data/lib/superhosting/cli/cmd/site_alias_delete.rb +16 -0
  43. data/lib/superhosting/cli/cmd/site_delete.rb +11 -0
  44. data/lib/superhosting/cli/cmd/site_rename.rb +16 -0
  45. data/lib/superhosting/cli/cmd/user_add.rb +24 -0
  46. data/lib/superhosting/cli/cmd/user_change.rb +24 -0
  47. data/lib/superhosting/cli/cmd/user_delete.rb +16 -0
  48. data/lib/superhosting/cli/cmd/user_list.rb +9 -0
  49. data/lib/superhosting/cli/cmd/user_passwd.rb +16 -0
  50. data/lib/superhosting/cli/error/ambiguous_command.rb +11 -0
  51. data/lib/superhosting/cli/error/base.rb +8 -0
  52. data/lib/superhosting/cli/error/controller.rb +8 -0
  53. data/lib/superhosting/controller/admin.rb +21 -0
  54. data/lib/superhosting/controller/admin/container.rb +24 -0
  55. data/lib/superhosting/controller/container.rb +174 -0
  56. data/lib/superhosting/controller/container/admin.rb +24 -0
  57. data/lib/superhosting/controller/mysql.rb +17 -0
  58. data/lib/superhosting/controller/mysql/db.rb +23 -0
  59. data/lib/superhosting/controller/mysql/user.rb +15 -0
  60. data/lib/superhosting/controller/site.rb +106 -0
  61. data/lib/superhosting/controller/site/alias.rb +21 -0
  62. data/lib/superhosting/controller/user.rb +25 -0
  63. data/lib/superhosting/docker_api.rb +31 -0
  64. data/lib/superhosting/helpers.rb +30 -0
  65. data/lib/superhosting/script_executor/base.rb +26 -0
  66. data/lib/superhosting/script_executor/container.rb +36 -0
  67. data/lib/superhosting/script_executor/site.rb +13 -0
  68. data/lib/superhosting/version.rb +3 -0
  69. data/superhosting.gemspec +32 -0
  70. metadata +341 -0
@@ -0,0 +1,21 @@
1
+ module Superhosting
2
+ module Controller
3
+ class Site
4
+ class Alias < Base
5
+ def initialize(name:, **kvargs)
6
+ raise NetStatus::Exception, { error: :logical_error, message: "Site '#{name}' doesn't exists." } unless @site_descriptor = Site.new(kvargs).site_index[name]
7
+ super(kvargs)
8
+ end
9
+
10
+ def add(name:)
11
+ return { error: :input_error, message: "Invalid alias name '#{name}' - only '#{Site::DOMAIN_NAME_FORMAT}' are allowed" } if name !~ Site::DOMAIN_NAME_FORMAT
12
+ write_if_not_exist(@site_descriptor[:site].aliases._path, name)
13
+ end
14
+
15
+ def delete(name:)
16
+ remove_line_from_file(@site_descriptor[:site].aliases._path, name)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ module Superhosting
2
+ module Controller
3
+ class User < Base
4
+ def list
5
+
6
+ end
7
+
8
+ def add(name:, container_name:, no_ssh: false, no_ftp: false)
9
+
10
+ end
11
+
12
+ def passwd(generate:)
13
+
14
+ end
15
+
16
+ def delete(name:, container_name:)
17
+
18
+ end
19
+
20
+ def change(name:, container_name:, no_ssh: false, no_ftp: false)
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ module Superhosting
2
+ class DockerApi
3
+ def initialize(**kwargs)
4
+ @socket = kwargs[:socket] || '/var/run/docker.sock'
5
+ end
6
+
7
+ def raw_connection
8
+ Excon.new('unix:///', socket: @socket)
9
+ end
10
+
11
+ def resp_if_success(resp)
12
+ JSON.load(resp.body) if resp.status == 200
13
+ end
14
+
15
+ def container_info(name)
16
+ resp_if_success raw_connection.request(method: :get, path: "/containers/#{name}/json")
17
+ end
18
+
19
+ def container_kill(name)
20
+ resp_if_success raw_connection.request(method: :post, path: "/containers/#{name}/kill")
21
+ end
22
+
23
+ def container_rm(name)
24
+ resp_if_success raw_connection.request(method: :delete, path: "/containers/#{name}")
25
+ end
26
+
27
+ def container_list
28
+ resp_if_success raw_connection.request(method: :get, path: '/containers/json')
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ module Superhosting
2
+ module Helpers
3
+ def instance_variables_to_hash(obj)
4
+ obj.instance_variables.map do |name|
5
+ [name.to_s[1..-1].to_sym, obj.instance_variable_get(name)]
6
+ end.to_h
7
+ end
8
+
9
+ def create_conf(path, conf)
10
+ File.open(path, 'w') {|f| f.write(conf) }
11
+ end
12
+
13
+ def write_if_not_exist(path, line)
14
+ File.open(path, 'a+') do |f|
15
+ f.puts(line) unless f.each_line.any? { |l| l =~ Regexp.new(line) }
16
+ end
17
+ end
18
+
19
+ def remove_line_from_file(path, line)
20
+ lines = File.readlines(path).select {|l| l !~ Regexp.new(line) }
21
+ File.open(path, 'w') {|f| f.write lines.join('') }
22
+ end
23
+
24
+ def erb(node, vars)
25
+ ERB.new(node).result(OpenStruct.new(vars).instance_eval { binding })
26
+ rescue Exception => e
27
+ raise NetStatus::Exception, e.net_status.merge!( message: "#{e.backtrace.first.sub! '(erb)', node._path}: #{e.message}")
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ module Superhosting
2
+ module ScriptExecutor
3
+ class Base
4
+ include Helpers
5
+
6
+ attr_accessor :commands
7
+ attr_accessor :model, :lib, :config
8
+
9
+ def initialize(model:, lib:, config:, **kwargs)
10
+ kwargs.each do |k, v|
11
+ instance_variable_set("@#{k}", v)
12
+ self.class.class_eval("attr_accessor :#{k}")
13
+ end
14
+
15
+ self.commands = []
16
+ self.model = model
17
+ self.lib = lib
18
+ self.config = config
19
+ end
20
+
21
+ def execute(script)
22
+ self.instance_eval(script)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,36 @@
1
+ module Superhosting
2
+ module ScriptExecutor
3
+ class Container < Base
4
+ attr_accessor :container, :container_name, :container_lib, :registry_path, :on_reconfig_only
5
+
6
+ def initialize(container:, container_name:, container_lib:, registry_path:, on_reconfig_only: false, **kwargs)
7
+ self.container = container
8
+ self.container_name = container_name
9
+ self.container_lib = container_lib
10
+ self.registry_path = registry_path
11
+ self.on_reconfig_only = on_reconfig_only
12
+ super(**kwargs)
13
+ end
14
+
15
+ def config(save_to, script, **options)
16
+ unless self.on_reconfig_only
17
+ script_mapper = self.container.f(script, default: self.model.f(script))
18
+ raise NetStatus::Exception.new(error: :error, message: 'File does not exist') if script_mapper.nil?
19
+ opts = instance_variables_to_hash(self).merge(options)
20
+ FileUtils.mkdir_p File.dirname(save_to)
21
+ File.open(save_to, 'w') {|f| f.write(erb(script_mapper, **opts)) }
22
+ create_conf(self.registry_path, save_to)
23
+ end
24
+ end
25
+
26
+ # def container_config(save_to, script, **options)
27
+ # raise NetStatus::Exception.new(error: :error, message: "File '#{save_to}' has incorrect name format") if save_to.include? File::SEPARATOR
28
+ # config(File.join(self.lib_configs._path, save_to), script, options)
29
+ # end
30
+
31
+ def on_reconfig(cmd)
32
+ self.commands << cmd
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,13 @@
1
+ module Superhosting
2
+ module ScriptExecutor
3
+ class Site < Container
4
+ attr_accessor :site, :site_name
5
+
6
+ def initialize(site:, site_name:, **kwargs)
7
+ self.site = site
8
+ self.site_name = site_name
9
+ super(**kwargs)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module Superhosting
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,32 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'superhosting/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "superhosting"
7
+ spec.version = Superhosting::VERSION
8
+ spec.authors = ["Алексей Игрычев"]
9
+ spec.email = ["alexey.igrychev@flant.ru"]
10
+
11
+ spec.summary = "The tool for web hosting using docker containers"
12
+ spec.description = "#{spec.summary}."
13
+ spec.license = "MIT"
14
+ spec.homepage = "https://github.com/flant/path_mapper"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.executables = ['sx']
18
+
19
+ spec.add_dependency 'mixlib-cli', '>= 1.5.0', '< 2.0'
20
+ spec.add_dependency 'mixlib-shellout', '>= 2.2.6', '< 3.0'
21
+ spec.add_dependency 'path_mapper', '>= 0.0.1', '< 1.0'
22
+ spec.add_dependency 'net_status', '>= 0.0.1', '< 1.0'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.7'
25
+ spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'rspec', '~> 3.4', '>= 3.4.0'
27
+ spec.add_development_dependency 'excon', '>= 0.45.4', '< 1.0'
28
+ spec.add_development_dependency 'pry', '>= 0.10.3', '< 1.0'
29
+ spec.add_development_dependency 'pry-byebug', '>= 3.3.0', '< 4.0'
30
+ spec.add_development_dependency 'pry-stack_explorer', '>= 0.4.9.2', '< 1.0'
31
+ spec.add_development_dependency 'travis', '~> 1.8', '>= 1.8.2'
32
+ end
metadata ADDED
@@ -0,0 +1,341 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: superhosting
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Алексей Игрычев
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mixlib-cli
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.5.0
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.5.0
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: mixlib-shellout
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: 2.2.6
40
+ - - <
41
+ - !ruby/object:Gem::Version
42
+ version: '3.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: 2.2.6
50
+ - - <
51
+ - !ruby/object:Gem::Version
52
+ version: '3.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: path_mapper
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: 0.0.1
60
+ - - <
61
+ - !ruby/object:Gem::Version
62
+ version: '1.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 0.0.1
70
+ - - <
71
+ - !ruby/object:Gem::Version
72
+ version: '1.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: net_status
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: 0.0.1
80
+ - - <
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.0.1
90
+ - - <
91
+ - !ruby/object:Gem::Version
92
+ version: '1.0'
93
+ - !ruby/object:Gem::Dependency
94
+ name: bundler
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: '1.7'
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ~>
105
+ - !ruby/object:Gem::Version
106
+ version: '1.7'
107
+ - !ruby/object:Gem::Dependency
108
+ name: rake
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ~>
112
+ - !ruby/object:Gem::Version
113
+ version: '10.0'
114
+ type: :development
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ version: '10.0'
121
+ - !ruby/object:Gem::Dependency
122
+ name: rspec
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ~>
126
+ - !ruby/object:Gem::Version
127
+ version: '3.4'
128
+ - - ! '>='
129
+ - !ruby/object:Gem::Version
130
+ version: 3.4.0
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ~>
136
+ - !ruby/object:Gem::Version
137
+ version: '3.4'
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: 3.4.0
141
+ - !ruby/object:Gem::Dependency
142
+ name: excon
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: 0.45.4
148
+ - - <
149
+ - !ruby/object:Gem::Version
150
+ version: '1.0'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: 0.45.4
158
+ - - <
159
+ - !ruby/object:Gem::Version
160
+ version: '1.0'
161
+ - !ruby/object:Gem::Dependency
162
+ name: pry
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: 0.10.3
168
+ - - <
169
+ - !ruby/object:Gem::Version
170
+ version: '1.0'
171
+ type: :development
172
+ prerelease: false
173
+ version_requirements: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: 0.10.3
178
+ - - <
179
+ - !ruby/object:Gem::Version
180
+ version: '1.0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: pry-byebug
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: 3.3.0
188
+ - - <
189
+ - !ruby/object:Gem::Version
190
+ version: '4.0'
191
+ type: :development
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: 3.3.0
198
+ - - <
199
+ - !ruby/object:Gem::Version
200
+ version: '4.0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: pry-stack_explorer
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ! '>='
206
+ - !ruby/object:Gem::Version
207
+ version: 0.4.9.2
208
+ - - <
209
+ - !ruby/object:Gem::Version
210
+ version: '1.0'
211
+ type: :development
212
+ prerelease: false
213
+ version_requirements: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ! '>='
216
+ - !ruby/object:Gem::Version
217
+ version: 0.4.9.2
218
+ - - <
219
+ - !ruby/object:Gem::Version
220
+ version: '1.0'
221
+ - !ruby/object:Gem::Dependency
222
+ name: travis
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ~>
226
+ - !ruby/object:Gem::Version
227
+ version: '1.8'
228
+ - - ! '>='
229
+ - !ruby/object:Gem::Version
230
+ version: 1.8.2
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ~>
236
+ - !ruby/object:Gem::Version
237
+ version: '1.8'
238
+ - - ! '>='
239
+ - !ruby/object:Gem::Version
240
+ version: 1.8.2
241
+ description: The tool for web hosting using docker containers.
242
+ email:
243
+ - alexey.igrychev@flant.ru
244
+ executables:
245
+ - sx
246
+ extensions: []
247
+ extra_rdoc_files: []
248
+ files:
249
+ - .gitignore
250
+ - .rspec
251
+ - .travis.yml
252
+ - Gemfile
253
+ - Gemfile.lock
254
+ - LICENSE.txt
255
+ - README.md
256
+ - Rakefile
257
+ - Vagrantfile
258
+ - bin/sx
259
+ - bootstrap.sh
260
+ - lib/superhosting.rb
261
+ - lib/superhosting/base.rb
262
+ - lib/superhosting/cli/base.rb
263
+ - lib/superhosting/cli/cmd/admin_add.rb
264
+ - lib/superhosting/cli/cmd/admin_container_add.rb
265
+ - lib/superhosting/cli/cmd/admin_container_delete.rb
266
+ - lib/superhosting/cli/cmd/admin_container_list.rb
267
+ - lib/superhosting/cli/cmd/admin_delete.rb
268
+ - lib/superhosting/cli/cmd/admin_passwd.rb
269
+ - lib/superhosting/cli/cmd/container_add.rb
270
+ - lib/superhosting/cli/cmd/container_admin_add.rb
271
+ - lib/superhosting/cli/cmd/container_admin_delete.rb
272
+ - lib/superhosting/cli/cmd/container_admin_list.rb
273
+ - lib/superhosting/cli/cmd/container_change.rb
274
+ - lib/superhosting/cli/cmd/container_delete.rb
275
+ - lib/superhosting/cli/cmd/container_list.rb
276
+ - lib/superhosting/cli/cmd/container_reconfig.rb
277
+ - lib/superhosting/cli/cmd/container_restore.rb
278
+ - lib/superhosting/cli/cmd/container_save.rb
279
+ - lib/superhosting/cli/cmd/container_update.rb
280
+ - lib/superhosting/cli/cmd/mysql_db_add.rb
281
+ - lib/superhosting/cli/cmd/mysql_db_delete.rb
282
+ - lib/superhosting/cli/cmd/mysql_db_dump.rb
283
+ - lib/superhosting/cli/cmd/mysql_db_sql.rb
284
+ - lib/superhosting/cli/cmd/mysql_grant.rb
285
+ - lib/superhosting/cli/cmd/mysql_user_add.rb
286
+ - lib/superhosting/cli/cmd/mysql_user_delete.rb
287
+ - lib/superhosting/cli/cmd/site_add.rb
288
+ - lib/superhosting/cli/cmd/site_alias_add.rb
289
+ - lib/superhosting/cli/cmd/site_alias_delete.rb
290
+ - lib/superhosting/cli/cmd/site_delete.rb
291
+ - lib/superhosting/cli/cmd/site_rename.rb
292
+ - lib/superhosting/cli/cmd/user_add.rb
293
+ - lib/superhosting/cli/cmd/user_change.rb
294
+ - lib/superhosting/cli/cmd/user_delete.rb
295
+ - lib/superhosting/cli/cmd/user_list.rb
296
+ - lib/superhosting/cli/cmd/user_passwd.rb
297
+ - lib/superhosting/cli/error/ambiguous_command.rb
298
+ - lib/superhosting/cli/error/base.rb
299
+ - lib/superhosting/cli/error/controller.rb
300
+ - lib/superhosting/controller/admin.rb
301
+ - lib/superhosting/controller/admin/container.rb
302
+ - lib/superhosting/controller/container.rb
303
+ - lib/superhosting/controller/container/admin.rb
304
+ - lib/superhosting/controller/mysql.rb
305
+ - lib/superhosting/controller/mysql/db.rb
306
+ - lib/superhosting/controller/mysql/user.rb
307
+ - lib/superhosting/controller/site.rb
308
+ - lib/superhosting/controller/site/alias.rb
309
+ - lib/superhosting/controller/user.rb
310
+ - lib/superhosting/docker_api.rb
311
+ - lib/superhosting/helpers.rb
312
+ - lib/superhosting/script_executor/base.rb
313
+ - lib/superhosting/script_executor/container.rb
314
+ - lib/superhosting/script_executor/site.rb
315
+ - lib/superhosting/version.rb
316
+ - superhosting.gemspec
317
+ homepage: https://github.com/flant/path_mapper
318
+ licenses:
319
+ - MIT
320
+ metadata: {}
321
+ post_install_message:
322
+ rdoc_options: []
323
+ require_paths:
324
+ - lib
325
+ required_ruby_version: !ruby/object:Gem::Requirement
326
+ requirements:
327
+ - - ! '>='
328
+ - !ruby/object:Gem::Version
329
+ version: '0'
330
+ required_rubygems_version: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ! '>='
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ requirements: []
336
+ rubyforge_project:
337
+ rubygems_version: 2.4.5
338
+ signing_key:
339
+ specification_version: 4
340
+ summary: The tool for web hosting using docker containers
341
+ test_files: []