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.
- 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,22 @@
|
|
|
1
|
+
[<%= container.name %>_<%= site.name %>]
|
|
2
|
+
|
|
3
|
+
user = <%= [container.name, site.php.user].compact.join '_' %>
|
|
4
|
+
group = <%= container.name %>
|
|
5
|
+
listen = <%= site.web.path %>.sock
|
|
6
|
+
listen.owner = www-data
|
|
7
|
+
listen.group = www-data
|
|
8
|
+
|
|
9
|
+
chdir = <%= site.web.path.join(site.document_root) %>
|
|
10
|
+
|
|
11
|
+
pm = <% site.php.pm %>
|
|
12
|
+
pm.max_children = <%= site.php.pm_max_children %>
|
|
13
|
+
<% if site.php.pm == 'dynamic' %>pm.start_servers = <%= site.php.pm_start_servers %>
|
|
14
|
+
pm.min_spare_servers = <%= site.php.pm_min_spare_servers %>
|
|
15
|
+
pm.max_spare_servers = <%= site.php.pm_max_spare_servers %>
|
|
16
|
+
<% end %>
|
|
17
|
+
|
|
18
|
+
<% %w{admin_value admin_flag value flag}.select{|p| site.php.f(p) }.each do |param_type|
|
|
19
|
+
site.php.f(param_type).lines {|l| l.split /\s*=\s*/, 2 }.each do |param_name, param_value| %>
|
|
20
|
+
php_<%= param_type %>[<%= param_name %>] = <%= param_value %>
|
|
21
|
+
<% end
|
|
22
|
+
end %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ondemand
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
yes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
superhosting/almostbase
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/bin/bash -lec 'while true ; do date ; sleep 1; done'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
superhosting/mux
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
base
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
15
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
host1.example.com
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
FROM ubuntu:14.04
|
|
2
|
+
MAINTAINER flant <256@flant.com>
|
|
3
|
+
|
|
4
|
+
RUN apt-get update -q
|
|
5
|
+
RUN apt-get install -y supervisor
|
|
6
|
+
RUN apt-get install -y tree
|
|
7
|
+
|
|
8
|
+
RUN /bin/bash -lec "\
|
|
9
|
+
mkdir /.config; \
|
|
10
|
+
cp /etc/passwd /.config/etc-passwd; \
|
|
11
|
+
ln -fs /.config/etc-passwd /etc/passwd; \
|
|
12
|
+
cp /etc/group /.config/etc-group; \
|
|
13
|
+
ln -fs /.config/etc-group /etc/group; \
|
|
14
|
+
mkdir /.config/ssmtp; \
|
|
15
|
+
ln -fs /.config/ssmtp /etc/ssmtp; \
|
|
16
|
+
mkdir /web; \
|
|
17
|
+
rm -rf /etc/supervisor/conf.d; \
|
|
18
|
+
mkdir /.config/supervisor; \
|
|
19
|
+
ln -fs /.config/supervisor /etc/supervisor/conf.d"
|
data/dockerfile/base
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
FROM ubuntu:14.04
|
|
2
|
+
MAINTAINER flant <256@flant.com>
|
|
3
|
+
|
|
4
|
+
RUN apt-get update -q
|
|
5
|
+
RUN apt-get install -y supervisor
|
|
6
|
+
|
|
7
|
+
RUN /bin/bash -lec "\
|
|
8
|
+
mkdir /.config; \
|
|
9
|
+
cp /etc/passwd /.config/etc-passwd; \
|
|
10
|
+
ln -fs /.config/etc-passwd /etc/passwd; \
|
|
11
|
+
cp /etc/group /.config/etc-group; \
|
|
12
|
+
ln -fs /.config/etc-group /etc/group; \
|
|
13
|
+
mkdir /.config/ssmtp; \
|
|
14
|
+
ln -fs /.config/ssmtp /etc/ssmtp; \
|
|
15
|
+
mkdir /web; \
|
|
16
|
+
rm -rf /etc/supervisor/conf.d; \
|
|
17
|
+
mkdir /.config/supervisor; \
|
|
18
|
+
ln -fs /.config/supervisor /etc/supervisor/conf.d"
|
data/dockerfile/mux
ADDED
data/lib/superhosting.rb
CHANGED
|
@@ -5,31 +5,65 @@ require 'pathname'
|
|
|
5
5
|
require 'excon'
|
|
6
6
|
require 'json'
|
|
7
7
|
require 'etc'
|
|
8
|
-
require 'erb'
|
|
9
|
-
require 'ostruct'
|
|
10
8
|
require 'pry-byebug'
|
|
9
|
+
require 'securerandom'
|
|
10
|
+
require 'unix_crypt'
|
|
11
|
+
require 'highline/import'
|
|
12
|
+
require 'i18n'
|
|
13
|
+
require 'unicode'
|
|
14
|
+
require 'punycode'
|
|
15
|
+
require 'digest/md5'
|
|
16
|
+
require 'polling'
|
|
17
|
+
require 'strong_password'
|
|
11
18
|
|
|
12
19
|
require 'path_mapper'
|
|
13
20
|
require 'net_status'
|
|
14
21
|
|
|
15
22
|
require 'superhosting/version'
|
|
23
|
+
|
|
24
|
+
require 'superhosting/helper/file'
|
|
25
|
+
require 'superhosting/helper/cmd'
|
|
26
|
+
require 'superhosting/helper/i18n'
|
|
27
|
+
require 'superhosting/helper/logger'
|
|
28
|
+
require 'superhosting/helper/states'
|
|
29
|
+
require 'superhosting/helper/config'
|
|
16
30
|
require 'superhosting/helpers'
|
|
17
31
|
|
|
32
|
+
require 'superhosting/patches/string/punycode'
|
|
33
|
+
require 'superhosting/patches/path_mapper/dir_node'
|
|
34
|
+
require 'superhosting/patches/path_mapper/file_node'
|
|
35
|
+
require 'superhosting/patches/path_mapper/null_node'
|
|
36
|
+
|
|
18
37
|
require 'superhosting/base'
|
|
19
38
|
require 'superhosting/controller/admin'
|
|
20
39
|
require 'superhosting/controller/admin/container'
|
|
21
40
|
require 'superhosting/controller/container'
|
|
22
41
|
require 'superhosting/controller/container/admin'
|
|
42
|
+
require 'superhosting/controller/container/states'
|
|
23
43
|
require 'superhosting/controller/mysql'
|
|
24
44
|
require 'superhosting/controller/mysql/db'
|
|
25
45
|
require 'superhosting/controller/mysql/user'
|
|
26
46
|
require 'superhosting/controller/site'
|
|
27
47
|
require 'superhosting/controller/site/alias'
|
|
48
|
+
require 'superhosting/controller/site/states'
|
|
28
49
|
require 'superhosting/controller/user'
|
|
50
|
+
require 'superhosting/controller/mux'
|
|
51
|
+
require 'superhosting/controller/model'
|
|
52
|
+
require 'superhosting/controller/base'
|
|
53
|
+
|
|
54
|
+
require 'superhosting/composite_mapper'
|
|
55
|
+
require 'superhosting/composite_mapper/base'
|
|
56
|
+
require 'superhosting/composite_mapper/container'
|
|
57
|
+
require 'superhosting/composite_mapper/site'
|
|
58
|
+
|
|
59
|
+
require 'superhosting/config_executor'
|
|
60
|
+
require 'superhosting/config_executor/base'
|
|
61
|
+
require 'superhosting/config_executor/container'
|
|
62
|
+
require 'superhosting/config_executor/site'
|
|
29
63
|
|
|
30
|
-
require 'superhosting/
|
|
31
|
-
require 'superhosting/
|
|
32
|
-
require 'superhosting/
|
|
64
|
+
require 'superhosting/mapper_inheritance/base'
|
|
65
|
+
require 'superhosting/mapper_inheritance/model'
|
|
66
|
+
require 'superhosting/mapper_inheritance/mux'
|
|
33
67
|
|
|
34
68
|
require 'superhosting/docker_api'
|
|
35
69
|
|
data/lib/superhosting/base.rb
CHANGED
|
@@ -2,36 +2,30 @@ module Superhosting
|
|
|
2
2
|
class Base
|
|
3
3
|
include Helpers
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
attr_reader :config, :lib
|
|
6
|
+
|
|
7
|
+
def initialize(config_path: '/etc/sx', lib_path: '/var/sx', logger: nil, docker_api: nil, dry_run: nil, debug: nil, **kwargs)
|
|
6
8
|
@config_path = Pathname.new(config_path)
|
|
7
9
|
@lib_path = Pathname.new(lib_path)
|
|
8
10
|
@config = PathMapper.new(config_path)
|
|
9
11
|
@lib = PathMapper.new(lib_path)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
end
|
|
12
|
+
Thread.current[:logger] ||= logger
|
|
13
|
+
Thread.current[:debug] ||= debug
|
|
14
|
+
Thread.current[:dry_run] ||= dry_run
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
@logger.debug(*a, &b) unless @logger.nil?
|
|
16
|
+
@docker_api = docker_api || DockerApi.new(socket: @config.f('docker_socket', default: nil))
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
def
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
else
|
|
26
|
-
raise NetStatus::Exception.new(error: :error, message: [cmd.stdout, cmd.stderr].join("\n"))
|
|
27
|
-
end
|
|
19
|
+
def get_base_controller_options
|
|
20
|
+
{
|
|
21
|
+
config_path: @config_path.to_s,
|
|
22
|
+
lib_path: @lib_path.to_s,
|
|
23
|
+
docker_api: @docker_api,
|
|
24
|
+
}
|
|
28
25
|
end
|
|
29
26
|
|
|
30
|
-
def
|
|
31
|
-
|
|
32
|
-
cmd.run_command
|
|
33
|
-
debug([cmd.stdout, cmd.stderr].join("\n"))
|
|
34
|
-
cmd
|
|
27
|
+
def get_controller(controller, **kwargs)
|
|
28
|
+
controller.new(**self.get_base_controller_options.merge!(kwargs))
|
|
35
29
|
end
|
|
36
30
|
end
|
|
37
31
|
end
|
|
@@ -3,10 +3,13 @@ module Superhosting
|
|
|
3
3
|
module Cmd; end
|
|
4
4
|
class Base
|
|
5
5
|
include Mixlib::CLI
|
|
6
|
+
extend Helper::I18n
|
|
7
|
+
include Helper::Logger
|
|
8
|
+
extend Helper::Logger
|
|
6
9
|
|
|
7
10
|
COMMANDS_MODULE = Cmd
|
|
8
11
|
CONTROLLERS_MODULE = Superhosting::Controller
|
|
9
|
-
CONTROLLER_BASE_OPTIONS = [:
|
|
12
|
+
CONTROLLER_BASE_OPTIONS = [:dry_run, :debug]
|
|
10
13
|
|
|
11
14
|
banner "#{?= * 50}\n#{?- * 19}SUPERHOSTING#{?- * 19}\n#{?= * 50}\n\n"
|
|
12
15
|
|
|
@@ -20,28 +23,33 @@ module Superhosting
|
|
|
20
23
|
:boolean => true,
|
|
21
24
|
:on => :tail
|
|
22
25
|
|
|
23
|
-
option :
|
|
24
|
-
:long => '--
|
|
25
|
-
:
|
|
26
|
-
|
|
27
|
-
option :lib_path,
|
|
28
|
-
:long => '--lib-path PATH',
|
|
26
|
+
option :verbose,
|
|
27
|
+
:long => '--verbose',
|
|
28
|
+
:boolean => true,
|
|
29
29
|
:on => :tail
|
|
30
30
|
|
|
31
|
-
option :
|
|
32
|
-
:long => '--
|
|
31
|
+
option :dry_run,
|
|
32
|
+
:long => '--dry-run',
|
|
33
|
+
:boolean => true,
|
|
33
34
|
:on => :tail
|
|
34
35
|
|
|
35
36
|
def initialize(argv, node)
|
|
36
37
|
self.class.options.merge!(Base::options)
|
|
37
38
|
super()
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
begin
|
|
41
|
+
@pos_args = parse_options(argv)
|
|
42
|
+
rescue OptionParser::InvalidOption => e
|
|
43
|
+
raise NetStatus::Exception, error: :input_error, code: :invalid_cli_option, data: { message: e.message }
|
|
44
|
+
end
|
|
45
|
+
|
|
40
46
|
@node = node
|
|
47
|
+
@node_class = node.values.first
|
|
41
48
|
|
|
42
49
|
@logger = Logger.new(STDOUT)
|
|
43
|
-
@logger.level = config[:debug] ? Logger::DEBUG : Logger::INFO
|
|
44
|
-
@logger.formatter = proc {|severity, datetime, progname, msg| sprintf("%s\n", msg.to_s
|
|
50
|
+
@logger.level = (config[:debug] or config[:dry_run] or config[:verbose]) ? Logger::DEBUG : Logger::INFO
|
|
51
|
+
@logger.formatter = proc {|severity, datetime, progname, msg| sprintf("%s\n", msg.to_s) }
|
|
52
|
+
self.__logger = @logger
|
|
45
53
|
|
|
46
54
|
self.help if config[:help] or self.class == Base
|
|
47
55
|
end
|
|
@@ -61,7 +69,7 @@ module Superhosting
|
|
|
61
69
|
end
|
|
62
70
|
end
|
|
63
71
|
|
|
64
|
-
|
|
72
|
+
self.info("#{opt_parser.to_s}\n#{get_childs_banners(@node) if self.class == Base}")
|
|
65
73
|
|
|
66
74
|
exit 1
|
|
67
75
|
end
|
|
@@ -72,8 +80,11 @@ module Superhosting
|
|
|
72
80
|
net_status ||= {}
|
|
73
81
|
|
|
74
82
|
raise Error::Controller, net_status unless net_status[:error].nil?
|
|
75
|
-
|
|
76
|
-
|
|
83
|
+
self.debug('Done!')
|
|
84
|
+
|
|
85
|
+
unless (data = net_status[:data]).nil?
|
|
86
|
+
@node_class.after_action(data, config) if @node_class.respond_to? :after_action
|
|
87
|
+
end
|
|
77
88
|
rescue NetStatus::Exception => e
|
|
78
89
|
raise Error::Controller, e.net_status
|
|
79
90
|
end
|
|
@@ -85,7 +96,7 @@ module Superhosting
|
|
|
85
96
|
method.parameters.each do |req, name|
|
|
86
97
|
if req.to_s.start_with? 'key'
|
|
87
98
|
opt = config[name]
|
|
88
|
-
self.help unless opt = @pos_args.shift if name == :name
|
|
99
|
+
self.help unless (opt = @pos_args.shift) if name == :name
|
|
89
100
|
opts.merge!(name => opt)
|
|
90
101
|
end
|
|
91
102
|
end
|
|
@@ -96,12 +107,32 @@ module Superhosting
|
|
|
96
107
|
|
|
97
108
|
def get_controller
|
|
98
109
|
def get_subcontroller_option
|
|
99
|
-
key = :"#{self.class.
|
|
110
|
+
key = :"#{self.class.get_splited_class_name.first}_name"
|
|
100
111
|
config[key] unless config[key].nil?
|
|
101
112
|
end
|
|
102
113
|
|
|
103
|
-
|
|
104
|
-
|
|
114
|
+
def get_method(m_name, node)
|
|
115
|
+
params = node.instance_method(:initialize).parameters
|
|
116
|
+
|
|
117
|
+
opts = {}
|
|
118
|
+
params.each do |req, name|
|
|
119
|
+
if req.to_s.start_with? 'key'
|
|
120
|
+
if name == :name
|
|
121
|
+
opt = get_subcontroller_option
|
|
122
|
+
elsif config.key? name
|
|
123
|
+
opt = config[name]
|
|
124
|
+
end
|
|
125
|
+
opts.merge!(name => opt) unless opt.nil?
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
CONTROLLER_BASE_OPTIONS.each { |opt| opts.merge!(opt => config[opt]) unless config[opt].nil? }
|
|
130
|
+
opts.merge!(logger: self.__logger)
|
|
131
|
+
node.new(**opts).method(m_name)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
names = self.class.get_splited_class_name
|
|
135
|
+
node = names.one? ? CONTROLLERS_MODULE::Base : CONTROLLERS_MODULE
|
|
105
136
|
|
|
106
137
|
names.each do |n|
|
|
107
138
|
c_name = n.capitalize.to_sym
|
|
@@ -110,26 +141,10 @@ module Superhosting
|
|
|
110
141
|
if node.respond_to? :constants and node.constants.include? c_name
|
|
111
142
|
node = node.const_get(c_name)
|
|
112
143
|
elsif node.respond_to? :instance_methods and node.instance_methods(false).include? m_name
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
opts = {}
|
|
116
|
-
params.each do |req, name|
|
|
117
|
-
if req.to_s.start_with? 'key'
|
|
118
|
-
if name == :name
|
|
119
|
-
opt = get_subcontroller_option
|
|
120
|
-
elsif config.key? name
|
|
121
|
-
opt = config[name]
|
|
122
|
-
end
|
|
123
|
-
opts.merge!(name => opt) unless opt.nil?
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
CONTROLLER_BASE_OPTIONS.each {|opt| opts.merge!(opt => config[opt]) unless config[opt].nil? }
|
|
128
|
-
opts.merge!(logger: @logger)
|
|
129
|
-
return node.new(**opts).method(m_name)
|
|
144
|
+
return get_method(m_name, node)
|
|
130
145
|
end
|
|
131
146
|
end
|
|
132
|
-
raise
|
|
147
|
+
raise NetStatus::Exception, { message: 'Method doesn\'t found' }
|
|
133
148
|
end
|
|
134
149
|
|
|
135
150
|
class << self
|
|
@@ -139,7 +154,7 @@ module Superhosting
|
|
|
139
154
|
args
|
|
140
155
|
end
|
|
141
156
|
|
|
142
|
-
prepend
|
|
157
|
+
self.prepend
|
|
143
158
|
cmd, node = get_cmd_and_node(args)
|
|
144
159
|
args = clear_args(args, cmd)
|
|
145
160
|
cmd.new(args, node).run
|
|
@@ -148,6 +163,7 @@ module Superhosting
|
|
|
148
163
|
def prepend
|
|
149
164
|
set_commands_hierarchy
|
|
150
165
|
set_banners
|
|
166
|
+
i18n_initialize
|
|
151
167
|
end
|
|
152
168
|
|
|
153
169
|
def set_banners(node=@@commands_hierarchy, path=[])
|
|
@@ -171,7 +187,7 @@ module Superhosting
|
|
|
171
187
|
COMMANDS_MODULE.constants.select {|c| Class === COMMANDS_MODULE.const_get(c) }.sort
|
|
172
188
|
end
|
|
173
189
|
|
|
174
|
-
@@commands_hierarchy = get_commands.inject({}) do |h,k|
|
|
190
|
+
@@commands_hierarchy = get_commands.sort_by {|k1, k2| split_toggle_case_name(k1).one? ? 0 : 1 }.inject({}) do |h,k|
|
|
175
191
|
node = h
|
|
176
192
|
parts = split_toggle_case_name(k)
|
|
177
193
|
parts.each do |cmd|
|
|
@@ -181,7 +197,7 @@ module Superhosting
|
|
|
181
197
|
end
|
|
182
198
|
end
|
|
183
199
|
|
|
184
|
-
def
|
|
200
|
+
def get_splited_class_name
|
|
185
201
|
self.split_toggle_case_name(self.name.split('::').last)
|
|
186
202
|
end
|
|
187
203
|
|