picobox 0.2.6 → 0.3.0

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +1 -0
  4. data/lib/picobox.rb +6 -1
  5. data/lib/picobox/box.rb +4 -4
  6. data/lib/picobox/boxes/{unpacker.rb → installer.rb} +2 -2
  7. data/lib/picobox/commands/add_box.rb +2 -4
  8. data/lib/picobox/commands/add_service.rb +1 -3
  9. data/lib/picobox/commands/initialize_project.rb +9 -14
  10. data/lib/picobox/commands/install_config.rb +17 -0
  11. data/lib/picobox/commands/list_boxes.rb +1 -1
  12. data/lib/picobox/commands/remove_service.rb +1 -3
  13. data/lib/picobox/commands/remove_setup_shell.rb +2 -13
  14. data/lib/picobox/commands/restart.rb +3 -4
  15. data/lib/picobox/commands/setup_shell.rb +1 -5
  16. data/lib/picobox/commands/ssh_instance.rb +2 -5
  17. data/lib/picobox/commands/start.rb +1 -4
  18. data/lib/picobox/commands/start_uninstall.rb +2 -7
  19. data/lib/picobox/commands/stop.rb +1 -4
  20. data/lib/picobox/commands/update_packages.rb +30 -0
  21. data/lib/picobox/constants.rb +11 -8
  22. data/lib/picobox/handlers/stdout_handler.rb +16 -3
  23. data/lib/picobox/os/abstract.rb +4 -0
  24. data/lib/picobox/os/distro.rb +11 -5
  25. data/lib/picobox/project.rb +3 -0
  26. data/lib/picobox/service.rb +4 -0
  27. data/lib/picobox/shell/ini_file.rb +38 -0
  28. data/lib/picobox/shell/startup_script.rb +4 -2
  29. data/lib/picobox/system.rb +5 -0
  30. data/lib/picobox/utils/output.rb +2 -1
  31. data/lib/picobox/utils/packages.rb +37 -0
  32. data/picobox.gemspec +2 -1
  33. metadata +21 -23
  34. data/lib/picobox/boxes/packages/elixir/Dockerfile +0 -52
  35. data/lib/picobox/boxes/packages/elixir/docker-compose.yml +0 -26
  36. data/lib/picobox/boxes/packages/elixir/info +0 -18
  37. data/lib/picobox/boxes/packages/elixir/start +0 -3
  38. data/lib/picobox/boxes/packages/python/Dockerfile +0 -29
  39. data/lib/picobox/boxes/packages/python/docker-compose.yml +0 -14
  40. data/lib/picobox/boxes/packages/python/start +0 -3
  41. data/lib/picobox/boxes/packages/rails/Dockerfile +0 -74
  42. data/lib/picobox/boxes/packages/rails/docker-compose.yml +0 -47
  43. data/lib/picobox/boxes/packages/rails/start +0 -9
  44. data/lib/picobox/boxes/packages/ruby/Dockerfile +0 -46
  45. data/lib/picobox/boxes/packages/ruby/docker-compose.yml +0 -20
  46. data/lib/picobox/boxes/packages/ruby/start +0 -3
  47. data/lib/picobox/services/packages/elasticsearch/config.yml +0 -14
  48. data/lib/picobox/services/packages/memcached/config.yml +0 -9
  49. data/lib/picobox/services/packages/mongodb/config.yml +0 -13
  50. data/lib/picobox/services/packages/mysql/config.yml +0 -17
  51. data/lib/picobox/services/packages/postgres/config.yml +0 -16
  52. data/lib/picobox/services/packages/redis/config.yml +0 -7
  53. data/lib/picobox/templates/shell_extensions.bash +0 -135
@@ -18,7 +18,7 @@ module Picobox
18
18
  @post_install_messages = (@post_install_messages || Array.new).push message
19
19
  end
20
20
 
21
- def post_install_messages
21
+ def post_install_messages
22
22
  display_line ''
23
23
 
24
24
  @post_install_messages.each do |message|
@@ -54,7 +54,7 @@ module Picobox
54
54
  end
55
55
 
56
56
  def install_docker_start()
57
- Utils::Spinner.new('Installing Docker')
57
+ Utils::Spinner.new('Installing Docker')
58
58
  end
59
59
 
60
60
  def install_docker_complete()
@@ -99,7 +99,7 @@ module Picobox
99
99
  end
100
100
 
101
101
  def build_service_start(service)
102
- Utils::Spinner.new("Building Service #{service} (5-10min)")
102
+ Utils::Spinner.new("Building Service #{service} (5-10min)")
103
103
  end
104
104
 
105
105
  def build_service_stop
@@ -161,6 +161,19 @@ module Picobox
161
161
  display_info("Getting shell", :green)
162
162
  display_status('open', "Running \e[33m#{service}\e[0m shell", :green)
163
163
  end
164
+
165
+ def update_packages_start
166
+ Utils::Spinner.new('Updating packages')
167
+ end
168
+
169
+ def update_packages_stop
170
+ Utils::Spinner.stop
171
+ display_info("Packages updated!", :green)
172
+ end
173
+
174
+ def config_setup_start
175
+ display_info("Setting up Config", :green)
176
+ end
164
177
  end
165
178
  end
166
179
  end
@@ -25,6 +25,10 @@ module Picobox
25
25
 
26
26
  def project_root() Utils::Project.new(self).root end
27
27
  def reload_shell() system("exec #{user_shell} -l") end
28
+
29
+ def picobox_installed?() File.exist? config_dir end
30
+ def project_initialized?() Utils::Project.new(self).project_initialized? end
31
+ def project_running?() Utils::Project.new(self).running? end
28
32
  end
29
33
  end
30
34
  end
@@ -16,18 +16,24 @@ module Picobox
16
16
  end
17
17
 
18
18
  def su(os)
19
- su ||= if os.user == 'root'
20
- 'sh -c'
21
- elsif TTY::Which.exist?('sudo')
19
+ su ||= if TTY::Which.exist?('sudo') && os.user != 'root'
22
20
  'sudo -E sh -c'
21
+ elsif os.user == 'root'
22
+ message = <<-END.gsub(/^\s+\|/, '')
23
+ |Not a great idea to install things as root user.
24
+ |
25
+ | You need to:
26
+ | * Install sudo and add yourself to sudoers
27
+ |
28
+ END
29
+ raise StandardError, message
23
30
  else
24
31
  message = <<-END.gsub(/^\s+\|/, '')
25
32
  |This installer needs the ability to run commands as root.
26
33
  | We are unable to find 'sudo' available to make this happen.
27
34
  |
28
- | Either:
35
+ | You need to:
29
36
  | * Install sudo and add yourself to sudoers
30
- | * Run as root
31
37
  |
32
38
  END
33
39
  raise StandardError, message
@@ -11,6 +11,9 @@ module Picobox
11
11
 
12
12
  def init
13
13
  accept(Commands::InitializeProject.new)
14
+ rescue Errors::PicoboxNotInstalled
15
+ display_picobox_not_installed
16
+ exit 1
14
17
  rescue StandardError => e
15
18
  display_info(e, :red)
16
19
  exit 1
@@ -55,7 +55,11 @@ module Picobox
55
55
 
56
56
 
57
57
  def list()
58
+ accept(Commands::UpdatePackages.new)
58
59
  accept(Commands::ListServices.new)
60
+ rescue Errors::PicoboxNotInstalled
61
+ display_picobox_not_installed
62
+ exit 1
59
63
  rescue StandardError => e
60
64
  display_info(e, :red)
61
65
  exit 1
@@ -0,0 +1,38 @@
1
+ module Picobox
2
+ module Shell
3
+ class IniFile
4
+ class << self
5
+ def get(os)
6
+ self.new(os)
7
+ end
8
+ end
9
+
10
+ def initialize(os)
11
+ @os = os
12
+ end
13
+
14
+ def install
15
+ TTY::File.create_file filename do |content|
16
+ "[packages]\nversion=v0.0\nlast_update=#{Time.now.to_i}\n"
17
+ end unless File.exist? filename
18
+ end
19
+
20
+
21
+ def [](key)
22
+ ini_file[key]
23
+ end
24
+
25
+
26
+ def []=(section, value)
27
+ ini_file[section.to_s] = value
28
+ ini_file.save
29
+ end
30
+
31
+ private
32
+ attr_reader :os
33
+
34
+ def filename() "#{os.config_dir}/#{Picobox::PICOBOX_INI}" end
35
+ def ini_file() @ini_file ||= ::IniFile.load(filename) end
36
+ end
37
+ end
38
+ end
@@ -23,7 +23,7 @@ module Picobox
23
23
  end
24
24
 
25
25
  def install_extensions
26
- source = "#{Picobox.template_dir}/shell_extensions.bash"
26
+ source = "#{Picobox.extensions_dir}/extensions.bash"
27
27
  dest = os.shell_extensions
28
28
 
29
29
  TTY::File.copy_file source, dest
@@ -34,14 +34,16 @@ module Picobox
34
34
  )
35
35
  end
36
36
 
37
+
37
38
  def uninstall_extensions
38
39
  TTY::File.gsub_file filename, /#{Regexp.escape(extension)}/ do
39
40
  "# picobox removed #{Time.now}"
40
41
  end
41
42
  end
42
43
 
44
+
43
45
  def filename
44
- raise ::NotImplementedError, 'must filename'
46
+ raise ::NotImplementedError, 'must have filename'
45
47
  end
46
48
 
47
49
  private
@@ -14,6 +14,8 @@ module Picobox
14
14
  accept(Commands::GetRootPermission.new)
15
15
  accept(Commands::DownloadDocker.new)
16
16
  accept(Commands::InstallDocker.new)
17
+ accept(Commands::InstallConfig.new)
18
+ accept(Commands::UpdatePackages.new)
17
19
  accept(Commands::SetupShell.new)
18
20
  accept(Commands::FinishInstall.new)
19
21
  accept(Commands::ReloadShell.new)
@@ -66,6 +68,9 @@ module Picobox
66
68
 
67
69
  def restart
68
70
  accept(Commands::Restart.new)
71
+ rescue Errors::ProjectNotInitialized
72
+ display_project_not_initialized
73
+ exit 1
69
74
  rescue StandardError => e
70
75
  display_info(e, :red)
71
76
  exit 1
@@ -19,7 +19,7 @@ module Picobox
19
19
 
20
20
  def display_project_not_initialized
21
21
  display_status('error', 'no project found', :red)
22
- display_info("Run command in a project directory or create new project with 'picobox init [BOX]'", :green)
22
+ display_info("Run 'picobox init [BOX]'", :yellow)
23
23
  end
24
24
 
25
25
 
@@ -58,6 +58,7 @@ module Picobox
58
58
 
59
59
  def display_picobox_not_installed
60
60
  display_info "Picobox not installed!", :red
61
+ display_info "Run: picobox install", :yellow
61
62
  end
62
63
 
63
64
 
@@ -0,0 +1,37 @@
1
+ module Picobox
2
+ module Utils
3
+ class Packages
4
+ def version() info['tag_name'] end
5
+ def url() info['tarball_url'] end
6
+
7
+ def initialize(os)
8
+ @os = os
9
+ end
10
+
11
+ def update?
12
+ installed_version = Picobox::Shell::IniFile.get(os)['packages']['version']
13
+ available_version = version
14
+
15
+ available_version > installed_version
16
+ end
17
+
18
+ def download
19
+ IO.copy_stream(
20
+ open(url),
21
+ "#{os.tmp_dir}/packages_#{version}.tar"
22
+ )
23
+
24
+ "#{os.tmp_dir}/packages_#{version}.tar"
25
+ end
26
+
27
+ private
28
+ attr_reader :os
29
+
30
+ def info
31
+ @info ||= JSON.parse(
32
+ open(Picobox::PACKAGES_INFO_URL).read
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
data/picobox.gemspec CHANGED
@@ -31,10 +31,11 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'aruba-turnip', '0.1.1'
32
32
  spec.add_development_dependency 'turnip'
33
33
  spec.add_development_dependency 'aruba-doubles'
34
- spec.add_development_dependency 'aruba', '0.14.2'
34
+ spec.add_development_dependency 'aruba', '0.14.2'
35
35
  spec.add_development_dependency 'rb-readline'
36
36
  spec.add_development_dependency 'guard'
37
37
  spec.add_development_dependency 'guard-rspec'
38
+ spec.add_development_dependency 'webmock'
38
39
 
39
40
 
40
41
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: picobox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Surzycki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-20 00:00:00.000000000 Z
11
+ date: 2017-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: webmock
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: thor
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -315,21 +329,8 @@ files:
315
329
  - bin/setup
316
330
  - lib/picobox.rb
317
331
  - lib/picobox/box.rb
332
+ - lib/picobox/boxes/installer.rb
318
333
  - lib/picobox/boxes/manifest.rb
319
- - lib/picobox/boxes/packages/elixir/Dockerfile
320
- - lib/picobox/boxes/packages/elixir/docker-compose.yml
321
- - lib/picobox/boxes/packages/elixir/info
322
- - lib/picobox/boxes/packages/elixir/start
323
- - lib/picobox/boxes/packages/python/Dockerfile
324
- - lib/picobox/boxes/packages/python/docker-compose.yml
325
- - lib/picobox/boxes/packages/python/start
326
- - lib/picobox/boxes/packages/rails/Dockerfile
327
- - lib/picobox/boxes/packages/rails/docker-compose.yml
328
- - lib/picobox/boxes/packages/rails/start
329
- - lib/picobox/boxes/packages/ruby/Dockerfile
330
- - lib/picobox/boxes/packages/ruby/docker-compose.yml
331
- - lib/picobox/boxes/packages/ruby/start
332
- - lib/picobox/boxes/unpacker.rb
333
334
  - lib/picobox/cli.rb
334
335
  - lib/picobox/commands/add_box.rb
335
336
  - lib/picobox/commands/add_service.rb
@@ -339,6 +340,7 @@ files:
339
340
  - lib/picobox/commands/finish_uninstall.rb
340
341
  - lib/picobox/commands/get_root_permission.rb
341
342
  - lib/picobox/commands/initialize_project.rb
343
+ - lib/picobox/commands/install_config.rb
342
344
  - lib/picobox/commands/install_docker.rb
343
345
  - lib/picobox/commands/list_boxes.rb
344
346
  - lib/picobox/commands/list_services.rb
@@ -352,6 +354,7 @@ files:
352
354
  - lib/picobox/commands/start_install.rb
353
355
  - lib/picobox/commands/start_uninstall.rb
354
356
  - lib/picobox/commands/stop.rb
357
+ - lib/picobox/commands/update_packages.rb
355
358
  - lib/picobox/constants.rb
356
359
  - lib/picobox/dns.rb
357
360
  - lib/picobox/docker_compose/config.rb
@@ -367,20 +370,15 @@ files:
367
370
  - lib/picobox/service.rb
368
371
  - lib/picobox/services/installer.rb
369
372
  - lib/picobox/services/manifest.rb
370
- - lib/picobox/services/packages/elasticsearch/config.yml
371
- - lib/picobox/services/packages/memcached/config.yml
372
- - lib/picobox/services/packages/mongodb/config.yml
373
- - lib/picobox/services/packages/mysql/config.yml
374
- - lib/picobox/services/packages/postgres/config.yml
375
- - lib/picobox/services/packages/redis/config.yml
376
373
  - lib/picobox/shell/dot_bashrc.rb
377
374
  - lib/picobox/shell/dot_profile.rb
378
375
  - lib/picobox/shell/dot_zshrc.rb
376
+ - lib/picobox/shell/ini_file.rb
379
377
  - lib/picobox/shell/startup_script.rb
380
378
  - lib/picobox/system.rb
381
- - lib/picobox/templates/shell_extensions.bash
382
379
  - lib/picobox/utils/domain_event_publisher.rb
383
380
  - lib/picobox/utils/output.rb
381
+ - lib/picobox/utils/packages.rb
384
382
  - lib/picobox/utils/progress_bar.rb
385
383
  - lib/picobox/utils/project.rb
386
384
  - lib/picobox/utils/shell.rb
@@ -1,52 +0,0 @@
1
- # picobox with elixir
2
- #
3
- # VERSION 0.1.0
4
-
5
- # Change this for different versions of ruby (see https://hub.docker.com/_/elixir/)
6
- # FROM elixir:1.4-slim
7
- # FROM elixir:1.3-slim
8
-
9
- FROM elixir:slim
10
- MAINTAINER Stefan Surzycki <stefan.surzycki@gmail.com>
11
-
12
- ENV HOSTNAME picobox
13
- ENV APP_HOME /var/www
14
-
15
- # silence deb warnings
16
- ENV DEBIAN_FRONTEND noninteractive
17
- ENV HOSTNAME picobox
18
-
19
- # do install here
20
- RUN mkdir -p /tmp
21
- WORKDIR /tmp
22
-
23
- # add repository software
24
- RUN apt-get update
25
-
26
- # install nodejs
27
- # nodejs
28
- RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
29
- RUN apt-get install -y nodejs
30
-
31
- # utils
32
- RUN apt-get install -y nano git build-essential
33
-
34
- # make nano work
35
- RUN echo "export TERM=xterm" >> /etc/bash.bashrc
36
-
37
- # get inotify
38
- RUN apt-get install -y inotify-tools
39
-
40
- # update mix
41
- RUN mix local.hex --force
42
- RUN mix local.rebar --force
43
-
44
- # phoenix
45
- RUN mix archive.install --force https://github.com/phoenixframework/archives/raw/master/phx_new.ez
46
-
47
- # working dir
48
- RUN mkdir -p $APP_HOME
49
- WORKDIR $APP_HOME
50
-
51
- # hook up source
52
- ONBUILD ADD . $APP_HOME
@@ -1,26 +0,0 @@
1
- ---
2
- version: '2'
3
- volumes:
4
- db-data:
5
- external: false
6
- services:
7
- dev:
8
- build: "."
9
- entrypoint: ".picobox/start"
10
- volumes:
11
- - ".:/var/www:cached"
12
- hostname: picobox
13
- environment:
14
- MIX_ENV: dev
15
- ports:
16
- - 80:4000
17
- - 4000:4000
18
- test:
19
- build: "."
20
- entrypoint: ".picobox/start"
21
- volumes:
22
- - ".:/var/www:cached"
23
- environment:
24
- MIX_ENV: test
25
- hostname: picobox_test
26
-