superhosting 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +1 -0
- data/.travis.yml +13 -0
- data/Gemfile.lock +43 -7
- data/LICENSE.txt +4 -1
- data/Vagrantfile +6 -3
- data/bin/sx +6 -2
- data/bootstrap/etc/sx/default_model +1 -0
- data/bootstrap/etc/sx/models/base/container/docker/command +1 -0
- data/bootstrap/etc/sx/models/base/container/docker/user.erb +1 -0
- data/bootstrap/etc/sx/models/base/container/docker/volume.erb +2 -0
- data/bootstrap/etc/sx/models/bitrix_l/inherit +3 -0
- data/bootstrap/etc/sx/models/bitrix_m/inherit +3 -0
- data/bootstrap/etc/sx/models/bitrix_xl/inherit +3 -0
- data/bootstrap/etc/sx/models/common_bitrix/abstract +1 -0
- data/bootstrap/etc/sx/models/common_bitrix/container/mux +1 -0
- data/bootstrap/etc/sx/models/common_bitrix/inherit +1 -0
- data/bootstrap/etc/sx/models/common_bitrix/site/php/admin_value +2 -0
- data/bootstrap/etc/sx/models/common_bitrix/site/php/flag +1 -0
- data/bootstrap/etc/sx/models/common_bitrix/site/php/value +6 -0
- data/bootstrap/etc/sx/models/common_fcgi/abstract +1 -0
- data/bootstrap/etc/sx/models/common_fcgi/container/config.rb +6 -0
- data/bootstrap/etc/sx/models/common_fcgi/container/config_templates/supervisord.conf.erb +16 -0
- data/bootstrap/etc/sx/models/common_fcgi/container/docker/image +1 -0
- data/bootstrap/etc/sx/models/common_fcgi/container/docker/user.erb +1 -0
- data/bootstrap/etc/sx/models/common_fcgi/container/system_users +1 -0
- data/bootstrap/etc/sx/models/common_fcgi/site/config.rb +4 -0
- data/bootstrap/etc/sx/models/common_fcgi/site/config_templates/nginx_vhost.erb +21 -0
- data/bootstrap/etc/sx/models/common_joomla/abstract +1 -0
- data/bootstrap/etc/sx/models/common_joomla/site/php/flag +1 -0
- data/bootstrap/etc/sx/models/common_joomla/site/php/value +2 -0
- data/bootstrap/etc/sx/models/common_joomla_v2/abstract +1 -0
- data/bootstrap/etc/sx/models/common_joomla_v2/container/mux +1 -0
- data/bootstrap/etc/sx/models/common_joomla_v2/inherit +2 -0
- data/bootstrap/etc/sx/models/common_joomla_v3/abstract +1 -0
- data/bootstrap/etc/sx/models/common_joomla_v3/container/mux +1 -0
- data/bootstrap/etc/sx/models/common_joomla_v3/inherit +2 -0
- data/bootstrap/etc/sx/models/common_l/abstract +1 -0
- data/bootstrap/etc/sx/models/common_l/container/docker/blkio_weight +1 -0
- data/bootstrap/etc/sx/models/common_l/container/docker/cpu_period +1 -0
- data/bootstrap/etc/sx/models/common_l/container/docker/cpu_quota +1 -0
- data/bootstrap/etc/sx/models/common_l/container/docker/cpu_shares +1 -0
- data/bootstrap/etc/sx/models/common_l/container/docker/memory +1 -0
- data/bootstrap/etc/sx/models/common_l/container/docker/memory_swap +1 -0
- data/bootstrap/etc/sx/models/common_m/abstract +1 -0
- data/bootstrap/etc/sx/models/common_m/container/docker/blkio_weight +1 -0
- data/bootstrap/etc/sx/models/common_m/container/docker/cpu_period +1 -0
- data/bootstrap/etc/sx/models/common_m/container/docker/cpu_quota +1 -0
- data/bootstrap/etc/sx/models/common_m/container/docker/cpu_shares +1 -0
- data/bootstrap/etc/sx/models/common_m/container/docker/memory +1 -0
- data/bootstrap/etc/sx/models/common_m/container/docker/memory_swap +1 -0
- data/bootstrap/etc/sx/models/common_mail/abstract +1 -0
- data/bootstrap/etc/sx/models/common_mail/container/config.rb +12 -0
- data/bootstrap/etc/sx/models/common_mail/container/config_templates/postfwd_rules.erb +12 -0
- data/bootstrap/etc/sx/models/common_mail/container/config_templates/ssmtp.conf.erb +6 -0
- data/bootstrap/etc/sx/models/common_mail/container/mail/daily_limit +1 -0
- data/bootstrap/etc/sx/models/common_mail/container/mail/enabled +1 -0
- data/bootstrap/etc/sx/models/common_mail/container/mail/hourly_limit +1 -0
- data/bootstrap/etc/sx/models/common_php_l/abstract +1 -0
- data/bootstrap/etc/sx/models/common_php_l/container/mail/daily_limit +1 -0
- data/bootstrap/etc/sx/models/common_php_l/container/mail/hourly_limit +1 -0
- data/bootstrap/etc/sx/models/common_php_l/inherit +1 -0
- data/bootstrap/etc/sx/models/common_php_l/site/php/pm +1 -0
- data/bootstrap/etc/sx/models/common_php_l/site/php/pm_max_children +1 -0
- data/bootstrap/etc/sx/models/common_php_l/site/php/pm_max_spare_servers +1 -0
- data/bootstrap/etc/sx/models/common_php_l/site/php/pm_min_spare_servers +1 -0
- data/bootstrap/etc/sx/models/common_php_l/site/php/pm_start_servers +1 -0
- data/bootstrap/etc/sx/models/common_php_m/abstract +1 -0
- data/bootstrap/etc/sx/models/common_php_m/inherit +1 -0
- data/bootstrap/etc/sx/models/common_php_m/site/php/pm_max_children +1 -0
- data/bootstrap/etc/sx/models/common_php_s/abstract +1 -0
- data/bootstrap/etc/sx/models/common_php_s/inherit +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/abstract +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/container/mail/daily_limit +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/container/mail/hourly_limit +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/inherit +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/site/php/pm +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/site/php/pm_max_children +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/site/php/pm_max_spare_servers +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/site/php/pm_min_spare_servers +1 -0
- data/bootstrap/etc/sx/models/common_php_xl/site/php/pm_start_servers +1 -0
- data/bootstrap/etc/sx/models/common_php_xs/abstract +1 -0
- data/bootstrap/etc/sx/models/common_php_xs/container/mail/daily_limit +1 -0
- data/bootstrap/etc/sx/models/common_php_xs/container/mail/hourly_limit +1 -0
- data/bootstrap/etc/sx/models/common_php_xs/inherit +1 -0
- data/bootstrap/etc/sx/models/common_php_xs/site/php/pm_max_children +1 -0
- data/bootstrap/etc/sx/models/common_s/abstract +1 -0
- data/bootstrap/etc/sx/models/common_s/container/docker/blkio_weight +1 -0
- data/bootstrap/etc/sx/models/common_s/container/docker/cpu_period +1 -0
- data/bootstrap/etc/sx/models/common_s/container/docker/cpu_quota +1 -0
- data/bootstrap/etc/sx/models/common_s/container/docker/cpu_shares +1 -0
- data/bootstrap/etc/sx/models/common_s/container/docker/memory +1 -0
- data/bootstrap/etc/sx/models/common_s/container/docker/memory_swap +1 -0
- data/bootstrap/etc/sx/models/common_symfony/abstract +1 -0
- data/bootstrap/etc/sx/models/common_symfony/container/mux +1 -0
- data/bootstrap/etc/sx/models/common_symfony/container/system_users +1 -0
- data/bootstrap/etc/sx/models/common_symfony/inherit +1 -0
- data/bootstrap/etc/sx/models/common_symfony/site/php/flag +3 -0
- data/bootstrap/etc/sx/models/common_symfony/site/php/user +1 -0
- data/bootstrap/etc/sx/models/common_symfony/site/use_apache +1 -0
- data/bootstrap/etc/sx/models/common_xl/abstract +1 -0
- data/bootstrap/etc/sx/models/common_xl/container/docker/blkio_weight +1 -0
- data/bootstrap/etc/sx/models/common_xl/container/docker/cpu_shares +1 -0
- data/bootstrap/etc/sx/models/common_xl/container/docker/memory +1 -0
- data/bootstrap/etc/sx/models/common_xl/container/docker/memory_swap +1 -0
- data/bootstrap/etc/sx/models/common_xs/abstract +1 -0
- data/bootstrap/etc/sx/models/common_xs/container/docker/blkio_weight +1 -0
- data/bootstrap/etc/sx/models/common_xs/container/docker/cpu_period +1 -0
- data/bootstrap/etc/sx/models/common_xs/container/docker/cpu_quota +1 -0
- data/bootstrap/etc/sx/models/common_xs/container/docker/cpu_shares +1 -0
- data/bootstrap/etc/sx/models/common_xs/container/docker/memory +1 -0
- data/bootstrap/etc/sx/models/common_xs/container/docker/memory_swap +1 -0
- data/bootstrap/etc/sx/models/fcgi_l/inherit +3 -0
- data/bootstrap/etc/sx/models/fcgi_m/inherit +3 -0
- data/bootstrap/etc/sx/models/fcgi_s/inherit +3 -0
- data/bootstrap/etc/sx/models/fcgi_xl/inherit +3 -0
- data/bootstrap/etc/sx/models/joomla_v2_l/inherit +3 -0
- data/bootstrap/etc/sx/models/joomla_v2_m/inherit +3 -0
- data/bootstrap/etc/sx/models/joomla_v2_s/inherit +3 -0
- data/bootstrap/etc/sx/models/joomla_v2_xs/inherit +3 -0
- data/bootstrap/etc/sx/models/joomla_v3_l/inherit +3 -0
- data/bootstrap/etc/sx/models/joomla_v3_m/inherit +3 -0
- data/bootstrap/etc/sx/models/joomla_v3_s/inherit +3 -0
- data/bootstrap/etc/sx/models/joomla_v3_xs/inherit +3 -0
- data/bootstrap/etc/sx/models/symfony_l/inherit +3 -0
- data/bootstrap/etc/sx/models/symfony_m/inherit +3 -0
- data/bootstrap/etc/sx/models/symfony_xl/inherit +3 -0
- data/bootstrap/etc/sx/models/test/container/config.rb +4 -0
- data/bootstrap/etc/sx/models/test/container/config_templates/supervisord.conf.erb +16 -0
- data/bootstrap/etc/sx/models/test/container/docker/blkio_weight +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/command +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/cpu_period +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/cpu_quota +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/cpu_shares +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/image +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/memory +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/memory_swap +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/user.erb +1 -0
- data/bootstrap/etc/sx/models/test/container/docker/volume.erb +2 -0
- data/bootstrap/etc/sx/models/test/container/system_users +1 -0
- data/bootstrap/etc/sx/models/test/site/config.rb +4 -0
- data/bootstrap/etc/sx/models/test/site/config_templates/nginx_vhost.erb +21 -0
- data/bootstrap/etc/sx/models/test_with_mux/container/mux +1 -0
- data/bootstrap/etc/sx/models/test_with_mux/inherit +1 -0
- data/bootstrap/etc/sx/muxs/base/docker/command +1 -0
- data/bootstrap/etc/sx/muxs/php-5.3/container/docker/image +1 -0
- data/bootstrap/etc/sx/muxs/php-5.3/docker/image +1 -0
- data/bootstrap/etc/sx/muxs/php-5.3/inherit +2 -0
- data/bootstrap/etc/sx/muxs/php-5.5/container/docker/image +1 -0
- data/bootstrap/etc/sx/muxs/php-5.5/docker/image +1 -0
- data/bootstrap/etc/sx/muxs/php-5.5/inherit +2 -0
- data/bootstrap/etc/sx/muxs/php-5.6/container/docker/image +1 -0
- data/bootstrap/etc/sx/muxs/php-5.6/docker/image +1 -0
- data/bootstrap/etc/sx/muxs/php-5.6/inherit +2 -0
- data/bootstrap/etc/sx/muxs/php/abstract +1 -0
- data/bootstrap/etc/sx/muxs/php/docker/pid +1 -0
- data/bootstrap/etc/sx/muxs/php/docker/privileged +1 -0
- data/bootstrap/etc/sx/muxs/php/docker/volume +3 -0
- data/bootstrap/etc/sx/muxs/php/site/config.rb +10 -0
- data/bootstrap/etc/sx/muxs/php/site/config_templates/apache_vhost.erb +26 -0
- data/bootstrap/etc/sx/muxs/php/site/config_templates/nginx_vhost.erb +39 -0
- data/bootstrap/etc/sx/muxs/php/site/config_templates/php_fpm_pool.erb +22 -0
- data/bootstrap/etc/sx/muxs/php/site/php/pm +1 -0
- data/bootstrap/etc/sx/muxs/php/site/php/pm_max_children +1 -0
- data/bootstrap/etc/sx/muxs/php/site/use_apache +1 -0
- data/bootstrap/etc/sx/muxs/test/container/docker/image +1 -0
- data/bootstrap/etc/sx/muxs/test/docker/command +1 -0
- data/bootstrap/etc/sx/muxs/test/docker/image +1 -0
- data/bootstrap/etc/sx/muxs/test/inherit +1 -0
- data/bootstrap/etc/sx/password_strength +1 -0
- data/bootstrap/etc/sx/smtp_hostname +1 -0
- data/dockerfile/almost_base +19 -0
- data/dockerfile/base +18 -0
- data/dockerfile/mux +6 -0
- data/lib/superhosting.rb +39 -5
- data/lib/superhosting/base.rb +15 -21
- data/lib/superhosting/cli/base.rb +56 -40
- data/lib/superhosting/cli/cmd/admin_add.rb +5 -0
- data/lib/superhosting/cli/cmd/admin_container_list.rb +4 -0
- data/lib/superhosting/cli/cmd/admin_list.rb +11 -0
- data/lib/superhosting/cli/cmd/admin_passwd.rb +4 -0
- data/lib/superhosting/cli/cmd/container_admin_list.rb +4 -0
- data/lib/superhosting/cli/cmd/container_inspect.rb +11 -0
- data/lib/superhosting/cli/cmd/container_list.rb +18 -0
- data/lib/superhosting/cli/cmd/container_reconfigure.rb +11 -0
- data/lib/superhosting/cli/cmd/container_rename.rb +16 -0
- data/lib/superhosting/cli/cmd/model_list.rb +11 -0
- data/lib/superhosting/cli/cmd/{container_reconfig.rb → model_reconfigure.rb} +1 -1
- data/lib/superhosting/cli/cmd/model_tree.rb +30 -0
- data/lib/superhosting/cli/cmd/model_update.rb +11 -0
- data/lib/superhosting/cli/cmd/mux_reconfigure.rb +11 -0
- data/lib/superhosting/cli/cmd/repair.rb +8 -0
- data/lib/superhosting/cli/cmd/site_container.rb +15 -0
- data/lib/superhosting/cli/cmd/site_inspect.rb +11 -0
- data/lib/superhosting/cli/cmd/site_list.rb +35 -0
- data/lib/superhosting/cli/cmd/site_name.rb +15 -0
- data/lib/superhosting/cli/cmd/site_reconfigure.rb +11 -0
- data/lib/superhosting/cli/cmd/site_rename.rb +4 -0
- data/lib/superhosting/cli/cmd/user_add.rb +11 -5
- data/lib/superhosting/cli/cmd/user_change.rb +12 -6
- data/lib/superhosting/cli/cmd/user_list.rb +7 -0
- data/lib/superhosting/cli/cmd/user_passwd.rb +9 -0
- data/lib/superhosting/composite_mapper.rb +12 -0
- data/lib/superhosting/composite_mapper/base.rb +17 -0
- data/lib/superhosting/composite_mapper/container.rb +9 -0
- data/lib/superhosting/composite_mapper/site.rb +13 -0
- data/lib/superhosting/config/net_status.yml +122 -0
- data/lib/superhosting/config_executor.rb +12 -0
- data/lib/superhosting/{script_executor → config_executor}/base.rb +6 -5
- data/lib/superhosting/config_executor/container.rb +69 -0
- data/lib/superhosting/config_executor/site.rb +18 -0
- data/lib/superhosting/controller/admin.rb +84 -4
- data/lib/superhosting/controller/admin/container.rb +62 -2
- data/lib/superhosting/controller/base.rb +18 -0
- data/lib/superhosting/controller/container.rb +185 -122
- data/lib/superhosting/controller/container/admin.rb +25 -3
- data/lib/superhosting/controller/container/states.rb +296 -0
- data/lib/superhosting/controller/model.rb +62 -0
- data/lib/superhosting/controller/mux.rb +88 -0
- data/lib/superhosting/controller/mysql.rb +2 -2
- data/lib/superhosting/controller/site.rb +217 -72
- data/lib/superhosting/controller/site/alias.rb +32 -6
- data/lib/superhosting/controller/site/states.rb +41 -0
- data/lib/superhosting/controller/user.rb +233 -4
- data/lib/superhosting/docker_api.rb +170 -6
- data/lib/superhosting/helper/cmd.rb +40 -0
- data/lib/superhosting/helper/config.rb +80 -0
- data/lib/superhosting/helper/file.rb +56 -0
- data/lib/superhosting/helper/i18n.rb +13 -0
- data/lib/superhosting/helper/logger.rb +136 -0
- data/lib/superhosting/helper/states.rb +69 -0
- data/lib/superhosting/helpers.rb +5 -21
- data/lib/superhosting/mapper_inheritance/base.rb +16 -0
- data/lib/superhosting/mapper_inheritance/model.rb +96 -0
- data/lib/superhosting/mapper_inheritance/mux.rb +49 -0
- data/lib/superhosting/patches/path_mapper/dir_node.rb +23 -0
- data/lib/superhosting/patches/path_mapper/file_node.rb +47 -0
- data/lib/superhosting/patches/path_mapper/null_node.rb +35 -0
- data/lib/superhosting/patches/string/punycode.rb +21 -0
- data/lib/superhosting/version.rb +1 -1
- data/provision/bootstrap.sh +11 -0
- data/provision/docker.sh +25 -0
- data/provision/pam_docker.sh +5 -0
- data/{bootstrap.sh → provision/vagrant.sh} +5 -8
- data/superhosting.gemspec +14 -3
- metadata +368 -12
- data/lib/superhosting/script_executor/container.rb +0 -36
- 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
|
data/lib/superhosting/helpers.rb
CHANGED
@@ -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)
|
data/lib/superhosting/version.rb
CHANGED
data/provision/docker.sh
ADDED
@@ -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
|