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,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
+ 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
+ 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"
@@ -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"
@@ -0,0 +1,6 @@
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 php5-fpm
@@ -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/script_executor/base'
31
- require 'superhosting/script_executor/container'
32
- require 'superhosting/script_executor/site'
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
 
@@ -2,36 +2,30 @@ module Superhosting
2
2
  class Base
3
3
  include Helpers
4
4
 
5
- def initialize(config_path: '/etc/sx', lib_path: '/var/lib/sx', logger: nil, docker_socket: nil)
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
- @logger = logger
11
-
12
- @docker_api = DockerApi.new(socket: docker_socket)
13
- end
12
+ Thread.current[:logger] ||= logger
13
+ Thread.current[:debug] ||= debug
14
+ Thread.current[:dry_run] ||= dry_run
14
15
 
15
- def debug(*a, &b)
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 command!(*command_args)
20
- cmd = Mixlib::ShellOut.new(*command_args)
21
- cmd.run_command
22
- if cmd.status.success?
23
- debug([cmd.stdout, cmd.stderr].join("\n"))
24
- cmd
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 command(*command_args)
31
- cmd = Mixlib::ShellOut.new(*command_args)
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 = [:config_path, :lib_path, :docker_socket]
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 :config_path,
24
- :long => '--config-path PATH',
25
- :on => :tail
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 :docker_socket,
32
- :long => '--docker-socket PATH',
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
- @pos_args = parse_options(argv)
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.strip) }
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
- @logger.info("#{opt_parser.to_s}\n#{get_childs_banners(@node) if self.class == Base}")
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
- @logger.info(net_status[:data]) unless net_status[:data].nil?
76
- @logger.debug('Done!')
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.get_split_class_name.first}_name"
110
+ key = :"#{self.class.get_splited_class_name.first}_name"
100
111
  config[key] unless config[key].nil?
101
112
  end
102
113
 
103
- node = CONTROLLERS_MODULE
104
- names = self.class.get_split_class_name
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
- params = node.instance_method(:initialize).parameters
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 Error::Base.new('Method doesn\'t found')
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 get_split_class_name
200
+ def get_splited_class_name
185
201
  self.split_toggle_case_name(self.name.split('::').last)
186
202
  end
187
203
 
@@ -2,6 +2,11 @@ module Superhosting
2
2
  module Cli
3
3
  module Cmd
4
4
  class AdminAdd < Base
5
+ option :generate,
6
+ :short => '-g',
7
+ :long => '--generate',
8
+ :boolean => true
9
+
5
10
  def self.has_required_param?
6
11
  true
7
12
  end
@@ -6,6 +6,10 @@ module Superhosting
6
6
  :short => '-a NAME',
7
7
  :long => '--admin NAME',
8
8
  :required => true
9
+
10
+ def self.after_action(data, config)
11
+ self.info(data)
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -0,0 +1,11 @@
1
+ module Superhosting
2
+ module Cli
3
+ module Cmd
4
+ class AdminList < Base
5
+ def self.after_action(data, config)
6
+ self.info(data)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -10,6 +10,10 @@ module Superhosting
10
10
  def self.has_required_param?
11
11
  true
12
12
  end
13
+
14
+ def self.after_action(data, config)
15
+ self.info(data)
16
+ end
13
17
  end
14
18
  end
15
19
  end