superhosting 0.0.1 → 0.0.2

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 (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