superhosting 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (248) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +1 -0
  3. data/.travis.yml +13 -0
  4. data/Gemfile.lock +43 -7
  5. data/LICENSE.txt +4 -1
  6. data/Vagrantfile +6 -3
  7. data/bin/sx +6 -2
  8. data/bootstrap/etc/sx/default_model +1 -0
  9. data/bootstrap/etc/sx/models/base/container/docker/command +1 -0
  10. data/bootstrap/etc/sx/models/base/container/docker/user.erb +1 -0
  11. data/bootstrap/etc/sx/models/base/container/docker/volume.erb +2 -0
  12. data/bootstrap/etc/sx/models/bitrix_l/inherit +3 -0
  13. data/bootstrap/etc/sx/models/bitrix_m/inherit +3 -0
  14. data/bootstrap/etc/sx/models/bitrix_xl/inherit +3 -0
  15. data/bootstrap/etc/sx/models/common_bitrix/abstract +1 -0
  16. data/bootstrap/etc/sx/models/common_bitrix/container/mux +1 -0
  17. data/bootstrap/etc/sx/models/common_bitrix/inherit +1 -0
  18. data/bootstrap/etc/sx/models/common_bitrix/site/php/admin_value +2 -0
  19. data/bootstrap/etc/sx/models/common_bitrix/site/php/flag +1 -0
  20. data/bootstrap/etc/sx/models/common_bitrix/site/php/value +6 -0
  21. data/bootstrap/etc/sx/models/common_fcgi/abstract +1 -0
  22. data/bootstrap/etc/sx/models/common_fcgi/container/config.rb +6 -0
  23. data/bootstrap/etc/sx/models/common_fcgi/container/config_templates/supervisord.conf.erb +16 -0
  24. data/bootstrap/etc/sx/models/common_fcgi/container/docker/image +1 -0
  25. data/bootstrap/etc/sx/models/common_fcgi/container/docker/user.erb +1 -0
  26. data/bootstrap/etc/sx/models/common_fcgi/container/system_users +1 -0
  27. data/bootstrap/etc/sx/models/common_fcgi/site/config.rb +4 -0
  28. data/bootstrap/etc/sx/models/common_fcgi/site/config_templates/nginx_vhost.erb +21 -0
  29. data/bootstrap/etc/sx/models/common_joomla/abstract +1 -0
  30. data/bootstrap/etc/sx/models/common_joomla/site/php/flag +1 -0
  31. data/bootstrap/etc/sx/models/common_joomla/site/php/value +2 -0
  32. data/bootstrap/etc/sx/models/common_joomla_v2/abstract +1 -0
  33. data/bootstrap/etc/sx/models/common_joomla_v2/container/mux +1 -0
  34. data/bootstrap/etc/sx/models/common_joomla_v2/inherit +2 -0
  35. data/bootstrap/etc/sx/models/common_joomla_v3/abstract +1 -0
  36. data/bootstrap/etc/sx/models/common_joomla_v3/container/mux +1 -0
  37. data/bootstrap/etc/sx/models/common_joomla_v3/inherit +2 -0
  38. data/bootstrap/etc/sx/models/common_l/abstract +1 -0
  39. data/bootstrap/etc/sx/models/common_l/container/docker/blkio_weight +1 -0
  40. data/bootstrap/etc/sx/models/common_l/container/docker/cpu_period +1 -0
  41. data/bootstrap/etc/sx/models/common_l/container/docker/cpu_quota +1 -0
  42. data/bootstrap/etc/sx/models/common_l/container/docker/cpu_shares +1 -0
  43. data/bootstrap/etc/sx/models/common_l/container/docker/memory +1 -0
  44. data/bootstrap/etc/sx/models/common_l/container/docker/memory_swap +1 -0
  45. data/bootstrap/etc/sx/models/common_m/abstract +1 -0
  46. data/bootstrap/etc/sx/models/common_m/container/docker/blkio_weight +1 -0
  47. data/bootstrap/etc/sx/models/common_m/container/docker/cpu_period +1 -0
  48. data/bootstrap/etc/sx/models/common_m/container/docker/cpu_quota +1 -0
  49. data/bootstrap/etc/sx/models/common_m/container/docker/cpu_shares +1 -0
  50. data/bootstrap/etc/sx/models/common_m/container/docker/memory +1 -0
  51. data/bootstrap/etc/sx/models/common_m/container/docker/memory_swap +1 -0
  52. data/bootstrap/etc/sx/models/common_mail/abstract +1 -0
  53. data/bootstrap/etc/sx/models/common_mail/container/config.rb +12 -0
  54. data/bootstrap/etc/sx/models/common_mail/container/config_templates/postfwd_rules.erb +12 -0
  55. data/bootstrap/etc/sx/models/common_mail/container/config_templates/ssmtp.conf.erb +6 -0
  56. data/bootstrap/etc/sx/models/common_mail/container/mail/daily_limit +1 -0
  57. data/bootstrap/etc/sx/models/common_mail/container/mail/enabled +1 -0
  58. data/bootstrap/etc/sx/models/common_mail/container/mail/hourly_limit +1 -0
  59. data/bootstrap/etc/sx/models/common_php_l/abstract +1 -0
  60. data/bootstrap/etc/sx/models/common_php_l/container/mail/daily_limit +1 -0
  61. data/bootstrap/etc/sx/models/common_php_l/container/mail/hourly_limit +1 -0
  62. data/bootstrap/etc/sx/models/common_php_l/inherit +1 -0
  63. data/bootstrap/etc/sx/models/common_php_l/site/php/pm +1 -0
  64. data/bootstrap/etc/sx/models/common_php_l/site/php/pm_max_children +1 -0
  65. data/bootstrap/etc/sx/models/common_php_l/site/php/pm_max_spare_servers +1 -0
  66. data/bootstrap/etc/sx/models/common_php_l/site/php/pm_min_spare_servers +1 -0
  67. data/bootstrap/etc/sx/models/common_php_l/site/php/pm_start_servers +1 -0
  68. data/bootstrap/etc/sx/models/common_php_m/abstract +1 -0
  69. data/bootstrap/etc/sx/models/common_php_m/inherit +1 -0
  70. data/bootstrap/etc/sx/models/common_php_m/site/php/pm_max_children +1 -0
  71. data/bootstrap/etc/sx/models/common_php_s/abstract +1 -0
  72. data/bootstrap/etc/sx/models/common_php_s/inherit +1 -0
  73. data/bootstrap/etc/sx/models/common_php_xl/abstract +1 -0
  74. data/bootstrap/etc/sx/models/common_php_xl/container/mail/daily_limit +1 -0
  75. data/bootstrap/etc/sx/models/common_php_xl/container/mail/hourly_limit +1 -0
  76. data/bootstrap/etc/sx/models/common_php_xl/inherit +1 -0
  77. data/bootstrap/etc/sx/models/common_php_xl/site/php/pm +1 -0
  78. data/bootstrap/etc/sx/models/common_php_xl/site/php/pm_max_children +1 -0
  79. data/bootstrap/etc/sx/models/common_php_xl/site/php/pm_max_spare_servers +1 -0
  80. data/bootstrap/etc/sx/models/common_php_xl/site/php/pm_min_spare_servers +1 -0
  81. data/bootstrap/etc/sx/models/common_php_xl/site/php/pm_start_servers +1 -0
  82. data/bootstrap/etc/sx/models/common_php_xs/abstract +1 -0
  83. data/bootstrap/etc/sx/models/common_php_xs/container/mail/daily_limit +1 -0
  84. data/bootstrap/etc/sx/models/common_php_xs/container/mail/hourly_limit +1 -0
  85. data/bootstrap/etc/sx/models/common_php_xs/inherit +1 -0
  86. data/bootstrap/etc/sx/models/common_php_xs/site/php/pm_max_children +1 -0
  87. data/bootstrap/etc/sx/models/common_s/abstract +1 -0
  88. data/bootstrap/etc/sx/models/common_s/container/docker/blkio_weight +1 -0
  89. data/bootstrap/etc/sx/models/common_s/container/docker/cpu_period +1 -0
  90. data/bootstrap/etc/sx/models/common_s/container/docker/cpu_quota +1 -0
  91. data/bootstrap/etc/sx/models/common_s/container/docker/cpu_shares +1 -0
  92. data/bootstrap/etc/sx/models/common_s/container/docker/memory +1 -0
  93. data/bootstrap/etc/sx/models/common_s/container/docker/memory_swap +1 -0
  94. data/bootstrap/etc/sx/models/common_symfony/abstract +1 -0
  95. data/bootstrap/etc/sx/models/common_symfony/container/mux +1 -0
  96. data/bootstrap/etc/sx/models/common_symfony/container/system_users +1 -0
  97. data/bootstrap/etc/sx/models/common_symfony/inherit +1 -0
  98. data/bootstrap/etc/sx/models/common_symfony/site/php/flag +3 -0
  99. data/bootstrap/etc/sx/models/common_symfony/site/php/user +1 -0
  100. data/bootstrap/etc/sx/models/common_symfony/site/use_apache +1 -0
  101. data/bootstrap/etc/sx/models/common_xl/abstract +1 -0
  102. data/bootstrap/etc/sx/models/common_xl/container/docker/blkio_weight +1 -0
  103. data/bootstrap/etc/sx/models/common_xl/container/docker/cpu_shares +1 -0
  104. data/bootstrap/etc/sx/models/common_xl/container/docker/memory +1 -0
  105. data/bootstrap/etc/sx/models/common_xl/container/docker/memory_swap +1 -0
  106. data/bootstrap/etc/sx/models/common_xs/abstract +1 -0
  107. data/bootstrap/etc/sx/models/common_xs/container/docker/blkio_weight +1 -0
  108. data/bootstrap/etc/sx/models/common_xs/container/docker/cpu_period +1 -0
  109. data/bootstrap/etc/sx/models/common_xs/container/docker/cpu_quota +1 -0
  110. data/bootstrap/etc/sx/models/common_xs/container/docker/cpu_shares +1 -0
  111. data/bootstrap/etc/sx/models/common_xs/container/docker/memory +1 -0
  112. data/bootstrap/etc/sx/models/common_xs/container/docker/memory_swap +1 -0
  113. data/bootstrap/etc/sx/models/fcgi_l/inherit +3 -0
  114. data/bootstrap/etc/sx/models/fcgi_m/inherit +3 -0
  115. data/bootstrap/etc/sx/models/fcgi_s/inherit +3 -0
  116. data/bootstrap/etc/sx/models/fcgi_xl/inherit +3 -0
  117. data/bootstrap/etc/sx/models/joomla_v2_l/inherit +3 -0
  118. data/bootstrap/etc/sx/models/joomla_v2_m/inherit +3 -0
  119. data/bootstrap/etc/sx/models/joomla_v2_s/inherit +3 -0
  120. data/bootstrap/etc/sx/models/joomla_v2_xs/inherit +3 -0
  121. data/bootstrap/etc/sx/models/joomla_v3_l/inherit +3 -0
  122. data/bootstrap/etc/sx/models/joomla_v3_m/inherit +3 -0
  123. data/bootstrap/etc/sx/models/joomla_v3_s/inherit +3 -0
  124. data/bootstrap/etc/sx/models/joomla_v3_xs/inherit +3 -0
  125. data/bootstrap/etc/sx/models/symfony_l/inherit +3 -0
  126. data/bootstrap/etc/sx/models/symfony_m/inherit +3 -0
  127. data/bootstrap/etc/sx/models/symfony_xl/inherit +3 -0
  128. data/bootstrap/etc/sx/models/test/container/config.rb +4 -0
  129. data/bootstrap/etc/sx/models/test/container/config_templates/supervisord.conf.erb +16 -0
  130. data/bootstrap/etc/sx/models/test/container/docker/blkio_weight +1 -0
  131. data/bootstrap/etc/sx/models/test/container/docker/command +1 -0
  132. data/bootstrap/etc/sx/models/test/container/docker/cpu_period +1 -0
  133. data/bootstrap/etc/sx/models/test/container/docker/cpu_quota +1 -0
  134. data/bootstrap/etc/sx/models/test/container/docker/cpu_shares +1 -0
  135. data/bootstrap/etc/sx/models/test/container/docker/image +1 -0
  136. data/bootstrap/etc/sx/models/test/container/docker/memory +1 -0
  137. data/bootstrap/etc/sx/models/test/container/docker/memory_swap +1 -0
  138. data/bootstrap/etc/sx/models/test/container/docker/user.erb +1 -0
  139. data/bootstrap/etc/sx/models/test/container/docker/volume.erb +2 -0
  140. data/bootstrap/etc/sx/models/test/container/system_users +1 -0
  141. data/bootstrap/etc/sx/models/test/site/config.rb +4 -0
  142. data/bootstrap/etc/sx/models/test/site/config_templates/nginx_vhost.erb +21 -0
  143. data/bootstrap/etc/sx/models/test_with_mux/container/mux +1 -0
  144. data/bootstrap/etc/sx/models/test_with_mux/inherit +1 -0
  145. data/bootstrap/etc/sx/muxs/base/docker/command +1 -0
  146. data/bootstrap/etc/sx/muxs/php-5.3/container/docker/image +1 -0
  147. data/bootstrap/etc/sx/muxs/php-5.3/docker/image +1 -0
  148. data/bootstrap/etc/sx/muxs/php-5.3/inherit +2 -0
  149. data/bootstrap/etc/sx/muxs/php-5.5/container/docker/image +1 -0
  150. data/bootstrap/etc/sx/muxs/php-5.5/docker/image +1 -0
  151. data/bootstrap/etc/sx/muxs/php-5.5/inherit +2 -0
  152. data/bootstrap/etc/sx/muxs/php-5.6/container/docker/image +1 -0
  153. data/bootstrap/etc/sx/muxs/php-5.6/docker/image +1 -0
  154. data/bootstrap/etc/sx/muxs/php-5.6/inherit +2 -0
  155. data/bootstrap/etc/sx/muxs/php/abstract +1 -0
  156. data/bootstrap/etc/sx/muxs/php/docker/pid +1 -0
  157. data/bootstrap/etc/sx/muxs/php/docker/privileged +1 -0
  158. data/bootstrap/etc/sx/muxs/php/docker/volume +3 -0
  159. data/bootstrap/etc/sx/muxs/php/site/config.rb +10 -0
  160. data/bootstrap/etc/sx/muxs/php/site/config_templates/apache_vhost.erb +26 -0
  161. data/bootstrap/etc/sx/muxs/php/site/config_templates/nginx_vhost.erb +39 -0
  162. data/bootstrap/etc/sx/muxs/php/site/config_templates/php_fpm_pool.erb +22 -0
  163. data/bootstrap/etc/sx/muxs/php/site/php/pm +1 -0
  164. data/bootstrap/etc/sx/muxs/php/site/php/pm_max_children +1 -0
  165. data/bootstrap/etc/sx/muxs/php/site/use_apache +1 -0
  166. data/bootstrap/etc/sx/muxs/test/container/docker/image +1 -0
  167. data/bootstrap/etc/sx/muxs/test/docker/command +1 -0
  168. data/bootstrap/etc/sx/muxs/test/docker/image +1 -0
  169. data/bootstrap/etc/sx/muxs/test/inherit +1 -0
  170. data/bootstrap/etc/sx/password_strength +1 -0
  171. data/bootstrap/etc/sx/smtp_hostname +1 -0
  172. data/dockerfile/almost_base +19 -0
  173. data/dockerfile/base +18 -0
  174. data/dockerfile/mux +6 -0
  175. data/lib/superhosting.rb +39 -5
  176. data/lib/superhosting/base.rb +15 -21
  177. data/lib/superhosting/cli/base.rb +56 -40
  178. data/lib/superhosting/cli/cmd/admin_add.rb +5 -0
  179. data/lib/superhosting/cli/cmd/admin_container_list.rb +4 -0
  180. data/lib/superhosting/cli/cmd/admin_list.rb +11 -0
  181. data/lib/superhosting/cli/cmd/admin_passwd.rb +4 -0
  182. data/lib/superhosting/cli/cmd/container_admin_list.rb +4 -0
  183. data/lib/superhosting/cli/cmd/container_inspect.rb +11 -0
  184. data/lib/superhosting/cli/cmd/container_list.rb +18 -0
  185. data/lib/superhosting/cli/cmd/container_reconfigure.rb +11 -0
  186. data/lib/superhosting/cli/cmd/container_rename.rb +16 -0
  187. data/lib/superhosting/cli/cmd/model_list.rb +11 -0
  188. data/lib/superhosting/cli/cmd/{container_reconfig.rb → model_reconfigure.rb} +1 -1
  189. data/lib/superhosting/cli/cmd/model_tree.rb +30 -0
  190. data/lib/superhosting/cli/cmd/model_update.rb +11 -0
  191. data/lib/superhosting/cli/cmd/mux_reconfigure.rb +11 -0
  192. data/lib/superhosting/cli/cmd/repair.rb +8 -0
  193. data/lib/superhosting/cli/cmd/site_container.rb +15 -0
  194. data/lib/superhosting/cli/cmd/site_inspect.rb +11 -0
  195. data/lib/superhosting/cli/cmd/site_list.rb +35 -0
  196. data/lib/superhosting/cli/cmd/site_name.rb +15 -0
  197. data/lib/superhosting/cli/cmd/site_reconfigure.rb +11 -0
  198. data/lib/superhosting/cli/cmd/site_rename.rb +4 -0
  199. data/lib/superhosting/cli/cmd/user_add.rb +11 -5
  200. data/lib/superhosting/cli/cmd/user_change.rb +12 -6
  201. data/lib/superhosting/cli/cmd/user_list.rb +7 -0
  202. data/lib/superhosting/cli/cmd/user_passwd.rb +9 -0
  203. data/lib/superhosting/composite_mapper.rb +12 -0
  204. data/lib/superhosting/composite_mapper/base.rb +17 -0
  205. data/lib/superhosting/composite_mapper/container.rb +9 -0
  206. data/lib/superhosting/composite_mapper/site.rb +13 -0
  207. data/lib/superhosting/config/net_status.yml +122 -0
  208. data/lib/superhosting/config_executor.rb +12 -0
  209. data/lib/superhosting/{script_executor → config_executor}/base.rb +6 -5
  210. data/lib/superhosting/config_executor/container.rb +69 -0
  211. data/lib/superhosting/config_executor/site.rb +18 -0
  212. data/lib/superhosting/controller/admin.rb +84 -4
  213. data/lib/superhosting/controller/admin/container.rb +62 -2
  214. data/lib/superhosting/controller/base.rb +18 -0
  215. data/lib/superhosting/controller/container.rb +185 -122
  216. data/lib/superhosting/controller/container/admin.rb +25 -3
  217. data/lib/superhosting/controller/container/states.rb +296 -0
  218. data/lib/superhosting/controller/model.rb +62 -0
  219. data/lib/superhosting/controller/mux.rb +88 -0
  220. data/lib/superhosting/controller/mysql.rb +2 -2
  221. data/lib/superhosting/controller/site.rb +217 -72
  222. data/lib/superhosting/controller/site/alias.rb +32 -6
  223. data/lib/superhosting/controller/site/states.rb +41 -0
  224. data/lib/superhosting/controller/user.rb +233 -4
  225. data/lib/superhosting/docker_api.rb +170 -6
  226. data/lib/superhosting/helper/cmd.rb +40 -0
  227. data/lib/superhosting/helper/config.rb +80 -0
  228. data/lib/superhosting/helper/file.rb +56 -0
  229. data/lib/superhosting/helper/i18n.rb +13 -0
  230. data/lib/superhosting/helper/logger.rb +136 -0
  231. data/lib/superhosting/helper/states.rb +69 -0
  232. data/lib/superhosting/helpers.rb +5 -21
  233. data/lib/superhosting/mapper_inheritance/base.rb +16 -0
  234. data/lib/superhosting/mapper_inheritance/model.rb +96 -0
  235. data/lib/superhosting/mapper_inheritance/mux.rb +49 -0
  236. data/lib/superhosting/patches/path_mapper/dir_node.rb +23 -0
  237. data/lib/superhosting/patches/path_mapper/file_node.rb +47 -0
  238. data/lib/superhosting/patches/path_mapper/null_node.rb +35 -0
  239. data/lib/superhosting/patches/string/punycode.rb +21 -0
  240. data/lib/superhosting/version.rb +1 -1
  241. data/provision/bootstrap.sh +11 -0
  242. data/provision/docker.sh +25 -0
  243. data/provision/pam_docker.sh +5 -0
  244. data/{bootstrap.sh → provision/vagrant.sh} +5 -8
  245. data/superhosting.gemspec +14 -3
  246. metadata +368 -12
  247. data/lib/superhosting/script_executor/container.rb +0 -36
  248. data/lib/superhosting/script_executor/site.rb +0 -13
@@ -0,0 +1,69 @@
1
+ module Superhosting
2
+ module Helper
3
+ module States
4
+ def on_state(states:, state_mapper:, **options)
5
+ current_state = state_mapper.state default: :none
6
+
7
+ while (state = states[current_state.to_sym]) do
8
+ method = state[:action]
9
+ opts = method_options(method, options)
10
+
11
+ self.debug_block(desc: { code: :transition, data: { name: method } }) do
12
+ unless (resp = self.send(method, opts)).net_status_ok?
13
+ resp.net_status_ok!
14
+ end
15
+
16
+ if state[:next].nil?
17
+ state_mapper.state.delete!(full: true, logger: false)
18
+ else
19
+ self.set_state(name: options[:name], state: state[:next])
20
+ end
21
+ end
22
+ break if (current_state = state[:next]).nil?
23
+ end
24
+ {}
25
+ rescue Exception => e
26
+ undo_method = state[:undo] || :"undo_#{method}"
27
+
28
+ if respond_to? undo_method
29
+ self.debug_block(desc: { code: :transition_undo, data: { name: undo_method } }) do
30
+ opts = method_options(undo_method, options)
31
+ self.send(undo_method, opts)
32
+ end
33
+ end
34
+
35
+ raise
36
+ end
37
+
38
+ def method_options(method_name, options)
39
+ method = self.method(method_name)
40
+ opts = {}
41
+ method.parameters.each do |req, name|
42
+ opt = options[name]
43
+ opts.merge!(name => opt)
44
+ end
45
+ opts
46
+ end
47
+
48
+ def state(name:)
49
+ self.existing_validation(name: name).net_status_ok!
50
+ self.index[name][:state_mapper]
51
+ end
52
+
53
+ def set_state(name:, state:)
54
+ state_mapper = self.state(name: name)
55
+ old_state = state_mapper.value
56
+ self.debug_operation(desc: { code: :change_state, data: { obj: name, from: old_state, to: state } }) do |&b|
57
+ self.with_logger(logger: false) do
58
+ if state.nil?
59
+ state_mapper.delete!(full: full)
60
+ else
61
+ state_mapper.put!(state)
62
+ end
63
+ end
64
+ b.call(code: :ok)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,30 +1,14 @@
1
1
  module Superhosting
2
2
  module Helpers
3
+ include Helper::Logger
4
+ include Helper::File
5
+ include Helper::Cmd
6
+ include Helper::Config
7
+
3
8
  def instance_variables_to_hash(obj)
4
9
  obj.instance_variables.map do |name|
5
10
  [name.to_s[1..-1].to_sym, obj.instance_variable_get(name)]
6
11
  end.to_h
7
12
  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
13
  end
30
14
  end
@@ -0,0 +1,16 @@
1
+ module Superhosting
2
+ module MapperInheritance
3
+ module Base
4
+ attr_accessor :inheritors, :inheritors_tree
5
+
6
+ def initialize
7
+ self.inheritors = {}
8
+ self.inheritors_tree = {}
9
+ end
10
+
11
+ def set_inheritors(mapper)
12
+ self.set_inheritance(mapper)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,96 @@
1
+ module Superhosting
2
+ module MapperInheritance
3
+ class Model
4
+ include Base
5
+
6
+ def initialize(model_mapper)
7
+ super()
8
+ @model_mapper = model_mapper
9
+ @models_mapper = @model_mapper.parent
10
+ @muxs_mapper = @models_mapper.parent.muxs
11
+ self.collect_inheritors
12
+ end
13
+
14
+ def set_inheritors(mapper)
15
+ raise NetStatus::Exception, { error: :input_error, code: :model_does_not_exists, data: { name: @model_mapper.name } } unless @model_mapper.dir?
16
+ raise NetStatus::Exception, { error: :logical_error, code: :base_model_should_not_be_abstract, data: { name: @model_mapper.name } } if @model_mapper.abstract?
17
+
18
+ @type = case type = mapper.parent.name
19
+ when 'containers' then 'container'
20
+ when 'sites' then 'site'
21
+ else raise NetStatus::Exception, { error: :logical_error, code: :mapper_type_not_supported, data: { name: type } }
22
+ end
23
+
24
+ super(mapper)
25
+ end
26
+
27
+ def collect_inheritors(m=@model_mapper, depth=0, mux=false)
28
+ depth += 1
29
+
30
+ # mux
31
+ m.container.mux.lines.each do |name|
32
+ mux_mapper = @muxs_mapper.f(name)
33
+ raise NetStatus::Exception, { error: :logical_error, code: :base_mux_should_not_be_abstract, data: { name: name } } if mux_mapper.abstract?
34
+ raise NetStatus::Exception, { error: :logical_error, code: :mux_does_not_exists, data: { name: name } } unless mux_mapper.dir?
35
+ collect_inheritors(mux_mapper, depth, true)
36
+ end
37
+
38
+ m.inherit.lines.each do |name|
39
+ inherit_mapper = (mux ? @muxs_mapper : @models_mapper).f(name)
40
+ raise NetStatus::Exception, { error: :logical_error, code: :model_does_not_exists, data: { name: name } } unless inherit_mapper.dir?
41
+
42
+ # mixed
43
+ collect_inheritors(inherit_mapper, depth, mux)
44
+ end
45
+
46
+ # model
47
+ collect_inheritor(m, depth, mux)
48
+
49
+ depth
50
+ end
51
+
52
+ def collect_inheritors_tree(m=@model_mapper, node=self.inheritors_tree, mux=false)
53
+ type = mux ? 'mux' : 'model'
54
+ node[m] ||= {}
55
+ node[m][type] ||= []
56
+
57
+ # mux
58
+ m.container.mux.lines.each do |name|
59
+ mux_mapper = @muxs_mapper.f(name)
60
+ raise NetStatus::Exception, { error: :logical_error, code: :base_mux_should_not_be_abstract, data: { name: name } } if mux_mapper.abstract?
61
+ raise NetStatus::Exception, { error: :logical_error, code: :mux_does_not_exists, data: { name: name } } unless mux_mapper.dir?
62
+ (node[m]['mux'] ||= []) << collect_inheritors_tree(mux_mapper, {}, true)
63
+ end
64
+
65
+ m.inherit.lines.each do |name|
66
+ inherit_mapper = (mux ? @muxs_mapper : @models_mapper).f(name)
67
+ raise NetStatus::Exception, { error: :logical_error, code: :model_does_not_exists, data: { name: name } } unless inherit_mapper.dir?
68
+
69
+ # mixed
70
+ node[m][mux ? 'mux' : 'model'] << collect_inheritors_tree(inherit_mapper, {}, mux)
71
+ end
72
+
73
+ node
74
+ end
75
+
76
+ def collect_inheritor(mapper, depth, mux)
77
+ self.inheritors[depth] ||= {}
78
+ (self.inheritors[depth][mux ? 'mux' : 'model'] ||= []) << mapper
79
+ end
80
+
81
+ def set_inheritance(mapper)
82
+ self.inheritors.sort.each do |k, inherits|
83
+ %w(mux model).each do |t|
84
+ (inherits[t] || []).each do |inheritor|
85
+ if (type_dir_mapper = inheritor.f(@type)).dir?
86
+ type_dir_mapper.changes_overlay = mapper
87
+ mapper << type_dir_mapper
88
+ end
89
+ end
90
+ end
91
+ end
92
+ mapper
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,49 @@
1
+ module Superhosting
2
+ module MapperInheritance
3
+ class Mux
4
+ include Base
5
+
6
+ def initialize(mapper)
7
+ super()
8
+ @mapper = mapper
9
+ @muxs_mapper = @mapper.parent
10
+ self.collect_inheritors
11
+ end
12
+
13
+ def set_inheritors(mapper=@mapper)
14
+ raise NetStatus::Exception, { error: :input_error, code: :mux_does_not_exists, data: { name: mapper.name } } unless mapper.dir?
15
+ raise NetStatus::Exception, { error: :logical_error, code: :base_mux_should_not_be_abstract, data: { name: mapper.name } } if mapper.abstract?
16
+ super(mapper)
17
+ end
18
+
19
+ def collect_inheritors(m=@mapper, depth=0)
20
+ depth += 1
21
+
22
+ m.inherit.lines.each do |name|
23
+ inherit_mapper = @muxs_mapper.f(name)
24
+ raise NetStatus::Exception, { error: :logical_error, code: :mux_does_not_exists, data: { name: name } } unless inherit_mapper.dir?
25
+
26
+ collect_inheritors(inherit_mapper, depth)
27
+ end
28
+
29
+ collect_inheritor(m, depth) unless m == @mapper
30
+ end
31
+
32
+ def collect_inheritor(mapper, depth)
33
+ (self.inheritors[depth] ||= []) << mapper
34
+ end
35
+
36
+ def set_inheritance(mapper)
37
+ self.inheritors.sort.each do |k, inheritors|
38
+ inheritors.each do |inheritor|
39
+ if inheritor.dir?
40
+ inheritor.changes_overlay = mapper
41
+ mapper << inheritor
42
+ end
43
+ end
44
+ end
45
+ mapper
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,23 @@
1
+ module Superhosting
2
+ module Patches
3
+ module PathMapper
4
+ module DirNode
5
+ include Helper::Logger
6
+
7
+ def _delete!(full: false)
8
+ self.debug_operation(desc: { code: :directory, data: { path: @path } }) do |&blk|
9
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
10
+ end
11
+ end
12
+
13
+ def _rename!(new_path)
14
+ self.debug_operation(desc: { code: :directory, data: { path: @path, to: new_path } }) do |&blk|
15
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ ::PathMapper::DirNode.send(:prepend, Superhosting::Patches::PathMapper::DirNode)
@@ -0,0 +1,47 @@
1
+ module Superhosting
2
+ module Patches
3
+ module PathMapper
4
+ module FileNode
5
+ include Helper::Logger
6
+
7
+ def _put!(content)
8
+ self.debug_operation(desc: { code: :file, data: { path: @path } }) do |&blk|
9
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
10
+ end
11
+ end
12
+
13
+ def _safe_put!(content)
14
+ self.debug_operation(desc: { code: :file, data: { path: @path } }) do |&blk|
15
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
16
+ end
17
+ end
18
+
19
+ def _remove_line!(line)
20
+ self.debug_operation(desc: { code: :file, data: { path: @path } }) do |&blk|
21
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
22
+ end
23
+ end
24
+
25
+ def _append_line!(content)
26
+ self.debug_operation(desc: { code: :file, data: { path: @path } }) do |&blk|
27
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
28
+ end
29
+ end
30
+
31
+ def _rename!(new_path)
32
+ self.debug_operation(desc: { code: :file, data: { path: @path, to: new_path } }) do |&blk|
33
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
34
+ end
35
+ end
36
+
37
+ def _delete!(full: false)
38
+ self.debug_operation(desc: { code: :file, data: { path: @path } }) do |&blk|
39
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ ::PathMapper::FileNode.send(:prepend, Superhosting::Patches::PathMapper::FileNode)
@@ -0,0 +1,35 @@
1
+ module Superhosting
2
+ module Patches
3
+ module PathMapper
4
+ module NullNode
5
+ include Helper::Logger
6
+
7
+ def _create!
8
+ self.debug_operation(desc: { code: :directory, data: { path: @path } }) do |&blk|
9
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
10
+ end
11
+ end
12
+
13
+ def _safe_put!(content)
14
+ self.debug_operation(desc: { code: :file, data: { path: @path } }) do |&blk|
15
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
16
+ end
17
+ end
18
+
19
+ def _put!(content)
20
+ self.debug_operation(desc: { code: :file, data: { path: @path } }) do |&blk|
21
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
22
+ end
23
+ end
24
+
25
+ def _append_line!(content)
26
+ self.debug_operation(desc: { code: :file, data: { path: @path } }) do |&blk|
27
+ super.tap {|res| blk.call(code: res[:code], diff: res[:d][:diff]) }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ ::PathMapper::NullNode.send(:prepend, Superhosting::Patches::PathMapper::NullNode)
@@ -0,0 +1,21 @@
1
+ module Superhosting
2
+ module Patches
3
+ module String
4
+ module Punycode
5
+ def punycode
6
+ parts = self.split('.').map do |label|
7
+ encoded = ::Punycode.encode(Unicode::normalize_KC(Unicode::downcase(label)))
8
+ if encoded =~ /-$/
9
+ encoded.chop!
10
+ else
11
+ 'xn--' + encoded
12
+ end
13
+ end
14
+ parts.join('.')
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ String.send(:include, Superhosting::Patches::String::Punycode)
@@ -1,3 +1,3 @@
1
1
  module Superhosting
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env /bin/bash
2
+
3
+ if [ $1 ]
4
+ then
5
+ cp -r $1/bootstrap/* /
6
+ else
7
+ cp -r bootstrap/* /
8
+ fi
9
+
10
+ apt-get install nginx sasl2-bin apache2 -y
11
+ sed -i 's/Listen 80/Listen 81/g' /etc/apache2/ports.conf
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env /bin/bash
2
+
3
+ homedir=${1:-.}
4
+
5
+ if [ $1 ]
6
+ then
7
+ dockerfile=$1/dockerfile
8
+ else
9
+ dockerfile=dockerfile
10
+ fi
11
+
12
+ docker build -t sx-base -f $dockerfile/base $homedir
13
+ docker build -t sx-almost-base -f $dockerfile/almost_base $homedir
14
+ docker build -t sx-mux -f $dockerfile/mux $homedir
15
+
16
+ docker tag -f sx-base superhosting/fcgi
17
+ docker tag -f sx-base superhosting/test
18
+ docker tag -f sx-almost-base superhosting/almostbase
19
+ docker tag -f sx-almost-base superhosting/cphp:5.3
20
+ docker tag -f sx-almost-base superhosting/cphp:5.5
21
+ docker tag -f sx-almost-base superhosting/cphp:5.6
22
+ docker tag -f sx-mux superhosting/php:5.3
23
+ docker tag -f sx-mux superhosting/php:5.5
24
+ docker tag -f sx-mux superhosting/php:5.6
25
+ docker tag -f sx-mux superhosting/mux