picobox 0.1.7 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/README.md +1 -1
  4. data/lib/picobox.rb +9 -4
  5. data/lib/picobox/box.rb +2 -2
  6. data/lib/picobox/boxes/manifest.rb +1 -1
  7. data/lib/picobox/cli.rb +62 -10
  8. data/lib/picobox/commands/add_box.rb +6 -2
  9. data/lib/picobox/commands/add_service.rb +6 -2
  10. data/lib/picobox/commands/build_service.rb +8 -1
  11. data/lib/picobox/commands/download_docker.rb +23 -5
  12. data/lib/picobox/commands/finish_install.rb +6 -0
  13. data/lib/picobox/commands/finish_uninstall.rb +5 -0
  14. data/lib/picobox/commands/get_root_permission.rb +14 -0
  15. data/lib/picobox/commands/initialize_project.rb +6 -4
  16. data/lib/picobox/commands/install_docker.rb +31 -5
  17. data/lib/picobox/commands/list_boxes.rb +4 -4
  18. data/lib/picobox/commands/list_services.rb +4 -4
  19. data/lib/picobox/commands/reload_shell.rb +15 -0
  20. data/lib/picobox/commands/remove_service.rb +6 -2
  21. data/lib/picobox/commands/remove_setup_shell.rb +6 -4
  22. data/lib/picobox/commands/restart.rb +8 -7
  23. data/lib/picobox/commands/setup_shell.rb +7 -4
  24. data/lib/picobox/commands/{open_shell.rb → ssh_instance.rb} +8 -4
  25. data/lib/picobox/commands/start.rb +6 -5
  26. data/lib/picobox/commands/start_install.rb +5 -0
  27. data/lib/picobox/commands/start_uninstall.rb +5 -4
  28. data/lib/picobox/commands/stop.rb +6 -5
  29. data/lib/picobox/constants.rb +14 -1
  30. data/lib/picobox/errors/picobox_error.rb +1 -0
  31. data/lib/picobox/handlers/stdout_handler.rb +40 -16
  32. data/lib/picobox/os/abstract.rb +4 -4
  33. data/lib/picobox/os/current_os.rb +1 -0
  34. data/lib/picobox/os/distro.rb +32 -0
  35. data/lib/picobox/os/linux.rb +14 -0
  36. data/lib/picobox/project.rb +2 -2
  37. data/lib/picobox/service.rb +4 -4
  38. data/lib/picobox/services/manifest.rb +1 -1
  39. data/lib/picobox/shell/dot_bashrc.rb +9 -0
  40. data/lib/picobox/shell/dot_profile.rb +1 -34
  41. data/lib/picobox/shell/dot_zshrc.rb +1 -34
  42. data/lib/picobox/shell/startup_script.rb +40 -1
  43. data/lib/picobox/system.rb +13 -8
  44. data/lib/picobox/utils/output.rb +5 -0
  45. data/lib/picobox/utils/spinner.rb +27 -0
  46. data/lib/picobox/utils/visitor_by_os.rb +6 -3
  47. data/picobox.gemspec +4 -2
  48. metadata +42 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a1a3a9947689e3daf1a03f70fd432574bfdca2f5
4
- data.tar.gz: f5be560ca0068a18d499943217c9e5b68fbb6231
3
+ metadata.gz: 649bcb114c8fd7298d2791313377d7700853d080
4
+ data.tar.gz: f897fc645ff84b0377012c11bb86eece25e04d68
5
5
  SHA512:
6
- metadata.gz: abab2a2f849dc170d15c9363df8d6eb38438e10b966bccff92eebce6181b0802536c60be7d0b89b0c72bdec2124b8d5e1e4a9c20f3b9e953b0a9996ee2990ec0
7
- data.tar.gz: 469985d45128f82114a3f22c0d5420efb83a4d795ac34832c2cdf51fed1eec0c5f053e59eea6c8f424ea264b125bd7fb7099064fef3dbb6ce60b54766a7d2fdf
6
+ metadata.gz: 4b215666290df4a457c543a9dfc4bc8efa8db2392669ca1953109dbeba0b257a0a36b1124ca13e35e67a210337bbd71ce1805c6412952cf48af41c21eed7cf9a
7
+ data.tar.gz: 87a78effe3224a45a9a4eb968090ae95cfe379dd0a602e16570545ce21b5e9c1d592ae71683a6e7c5889b0d4511e02bf80a5024c98c1b330f270c29f3013d442
data/.gitignore CHANGED
@@ -7,7 +7,7 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
-
10
+ /vendor/bundle
11
11
  .picobox
12
12
  .byebug_history
13
13
  .DS_Store
data/README.md CHANGED
@@ -123,7 +123,7 @@ $ bundle exec byebug -R localhost:8989
123
123
  - [ ] Uninstall should stop and remove all instances that are running
124
124
  - [ ] Block most commands if picobox not installed
125
125
  - [ ] Some services should install thier own volumes
126
- - [ ] Box update funtion
126
+ - [ ] Box update function
127
127
 
128
128
  **http://blog.cloud66.com/using-ssh-private-keys-securely-in-docker-build/
129
129
 
data/lib/picobox.rb CHANGED
@@ -6,12 +6,15 @@ require 'uri'
6
6
  require 'tty-file'
7
7
  require 'tty-command'
8
8
  require 'tty-platform'
9
+ require 'tty-which'
10
+ require 'tty-spinner'
9
11
  require 'ostruct'
10
12
  require 'yaml'
11
13
  require 'inifile'
12
14
  require 'pathname'
13
15
 
14
16
  require 'picobox/utils/progress_bar'
17
+ require 'picobox/utils/spinner'
15
18
  require 'picobox/utils/project'
16
19
  require 'picobox/utils/visitable'
17
20
  require 'picobox/utils/domain_event_publisher'
@@ -43,7 +46,9 @@ require 'picobox/commands/remove_service'
43
46
  require 'picobox/commands/start'
44
47
  require 'picobox/commands/stop'
45
48
  require 'picobox/commands/restart'
46
- require 'picobox/commands/open_shell'
49
+ require 'picobox/commands/ssh_instance'
50
+ require 'picobox/commands/reload_shell'
51
+ require 'picobox/commands/get_root_permission'
47
52
 
48
53
  require 'picobox/boxes/manifest'
49
54
  require 'picobox/boxes/unpacker'
@@ -56,10 +61,12 @@ require 'picobox/os/darwin'
56
61
  require 'picobox/os/linux'
57
62
  require 'picobox/os/unsupported_os'
58
63
  require 'picobox/os/current_os'
64
+ require 'picobox/os/distro'
59
65
 
60
66
  require 'picobox/shell/startup_script'
61
67
  require 'picobox/shell/dot_profile'
62
68
  require 'picobox/shell/dot_zshrc'
69
+ require 'picobox/shell/dot_bashrc'
63
70
 
64
71
  require 'picobox/constants'
65
72
  require 'picobox/cli'
@@ -73,7 +80,5 @@ Wisper.subscribe(
73
80
  scope: Picobox::Utils::DomainEventPublisher
74
81
  )
75
82
 
76
- # silence warnings found in tty-file-0.3.0 for forwarding to private method
77
- $VERBOSE=nil
78
-
83
+ Picobox.set_verbosity(false)
79
84
 
data/lib/picobox/box.rb CHANGED
@@ -22,14 +22,14 @@ module Picobox
22
22
  rescue Errors::ProjectNotInitialized
23
23
  display_project_not_initialized
24
24
  exit 1
25
- rescue Exception => e
25
+ rescue StandardError => e
26
26
  display_info(e, :red)
27
27
  exit 1
28
28
  end
29
29
 
30
30
  def list()
31
31
  accept(Commands::ListBoxes.new)
32
- rescue Exception => e
32
+ rescue StandardError => e
33
33
  display_info(e, :red)
34
34
  exit 1
35
35
  end
@@ -7,7 +7,7 @@ module Picobox
7
7
 
8
8
  def list
9
9
  result = Dir.glob("#{Picobox.box_packages_dir}/*").select {|f| File.directory? f}
10
- result.map {|r| strip_path(r) }
10
+ result.map {|r| strip_path(r) }.sort!
11
11
  end
12
12
 
13
13
 
data/lib/picobox/cli.rb CHANGED
@@ -4,7 +4,11 @@ module Picobox
4
4
  long_desc <<-LONGDESC
5
5
  LONGDESC
6
6
  def build(service = nil)
7
+ Picobox.set_verbosity options[:verbose]
8
+
7
9
  Service.new(Os::CurrentOs.get).build service
10
+ rescue SignalException
11
+ exit 1
8
12
  end
9
13
 
10
14
 
@@ -12,7 +16,11 @@ module Picobox
12
16
  long_desc <<-LONGDESC
13
17
  LONGDESC
14
18
  def add(*services)
19
+ Picobox.set_verbosity options[:verbose]
20
+
15
21
  Service.new(Os::CurrentOs.get).add services
22
+ rescue SignalException
23
+ exit 1
16
24
  end
17
25
 
18
26
 
@@ -20,7 +28,11 @@ module Picobox
20
28
  long_desc <<-LONGDESC
21
29
  LONGDESC
22
30
  def remove(service)
31
+ Picobox.set_verbosity options[:verbose]
32
+
23
33
  Service.new(Os::CurrentOs.get).remove service
34
+ rescue SignalException
35
+ exit 1
24
36
  end
25
37
 
26
38
 
@@ -29,6 +41,8 @@ module Picobox
29
41
  LONGDESC
30
42
  def list()
31
43
  Service.new(Os::CurrentOs.get).list
44
+ rescue SignalException
45
+ exit 1
32
46
  end
33
47
  end
34
48
 
@@ -38,17 +52,19 @@ module Picobox
38
52
  LONGDESC
39
53
  method_option :port, default: 3000
40
54
  def add(entry)
41
- puts "I'm a thor task! #{options}"
55
+ puts "coming soon"
42
56
  end
43
57
  end
44
58
 
45
59
  class CLI < Thor
46
60
  include Utils::Output
47
61
 
48
- desc 'dns SUBCOMMAND', 'do things with the DNS'
49
- long_desc <<-LONGDESC
50
- LONGDESC
51
- subcommand 'dns', Picobox::DnsSubCommands
62
+ class_option :verbose, desc: 'Verbose debugging output', type: :boolean
63
+
64
+ #desc 'dns SUBCOMMAND', 'do things with the DNS'
65
+ #long_desc <<-LONGDESC
66
+ #LONGDESC
67
+ #subcommand 'dns', Picobox::DnsSubCommands
52
68
 
53
69
 
54
70
  desc 'service SUBCOMMAND', 'do things with the SERVICES'
@@ -60,6 +76,8 @@ module Picobox
60
76
  desc 'version', 'displays current version'
61
77
  def version
62
78
  say Picobox::VERSION
79
+ rescue SignalException
80
+ exit 1
63
81
  end
64
82
 
65
83
 
@@ -67,8 +85,11 @@ module Picobox
67
85
  long_desc <<-LONGDESC
68
86
  LONGDESC
69
87
  def install
88
+ Picobox.set_verbosity options[:verbose]
89
+
70
90
  System.new(Os::CurrentOs.get).install
71
- Utils::Shell.new(Os::CurrentOs.get).reload
91
+ rescue SignalException
92
+ exit 1
72
93
  end
73
94
 
74
95
 
@@ -76,8 +97,11 @@ module Picobox
76
97
  long_desc <<-LONGDESC
77
98
  LONGDESC
78
99
  def update
100
+ Picobox.set_verbosity options[:verbose]
101
+
79
102
  System.new(Os::CurrentOs.get).install
80
- Utils::Shell.new(Os::CurrentOs.get).reload
103
+ rescue SignalException
104
+ exit 1
81
105
  end
82
106
 
83
107
 
@@ -85,7 +109,11 @@ module Picobox
85
109
  long_desc <<-LONGDESC
86
110
  LONGDESC
87
111
  def uninstall
112
+ Picobox.set_verbosity options[:verbose]
113
+
88
114
  System.new(Os::CurrentOs.get).uninstall
115
+ rescue SignalException
116
+ exit 1
89
117
  end
90
118
 
91
119
 
@@ -93,12 +121,16 @@ module Picobox
93
121
  long_desc <<-LONGDESC
94
122
  LONGDESC
95
123
  def init(box)
124
+ Picobox.set_verbosity options[:verbose]
125
+
96
126
  os = Os::CurrentOs.get
97
127
 
98
128
  Project.new(os).init
99
129
  Box.new(os).install box
100
130
  Service.new(os).build
101
131
  System.new(os).start
132
+ rescue SignalException
133
+ exit 1
102
134
  end
103
135
 
104
136
 
@@ -106,7 +138,11 @@ module Picobox
106
138
  long_desc <<-LONGDESC
107
139
  LONGDESC
108
140
  def start()
141
+ Picobox.set_verbosity options[:verbose]
142
+
109
143
  System.new(Os::CurrentOs.get).start
144
+ rescue SignalException
145
+ exit 1
110
146
  end
111
147
 
112
148
 
@@ -114,7 +150,11 @@ module Picobox
114
150
  long_desc <<-LONGDESC
115
151
  LONGDESC
116
152
  def stop()
153
+ Picobox.set_verbosity options[:verbose]
154
+
117
155
  System.new(Os::CurrentOs.get).stop
156
+ rescue SignalException
157
+ exit 1
118
158
  end
119
159
 
120
160
 
@@ -122,7 +162,11 @@ module Picobox
122
162
  long_desc <<-LONGDESC
123
163
  LONGDESC
124
164
  def restart()
165
+ Picobox.set_verbosity options[:verbose]
166
+
125
167
  System.new(Os::CurrentOs.get).restart
168
+ rescue SignalException
169
+ exit 1
126
170
  end
127
171
 
128
172
 
@@ -130,7 +174,9 @@ module Picobox
130
174
  long_desc <<-LONGDESC
131
175
  LONGDESC
132
176
  def ssh(service)
133
- System.new(Os::CurrentOs.get).open_shell service
177
+ System.new(Os::CurrentOs.get).ssh service
178
+ rescue SignalException
179
+ exit 1
134
180
  end
135
181
 
136
182
 
@@ -139,6 +185,8 @@ module Picobox
139
185
  LONGDESC
140
186
  def boxes()
141
187
  Box.new(Os::CurrentOs.get).list
188
+ rescue SignalException
189
+ exit 1
142
190
  end
143
191
 
144
192
 
@@ -147,17 +195,21 @@ module Picobox
147
195
  LONGDESC
148
196
  def status()
149
197
  system "docker-compose ps"
198
+ rescue SignalException
199
+ exit 1
150
200
  end
151
201
 
152
202
 
153
- desc 'clean', 'clean stop containers'
203
+ desc 'reset', 'reset picobox containers'
154
204
  long_desc <<-LONGDESC
155
205
  LONGDESC
156
- def clean()
206
+ def reset()
157
207
  display_info('Cleaning stopped containers', :green)
158
208
  display_status('execute', 'container prune')
159
209
  system "docker container prune"
160
210
  system "docker volume prune"
211
+ rescue SignalException
212
+ exit 1
161
213
  end
162
214
  end
163
215
  end
@@ -6,7 +6,6 @@ module Picobox
6
6
  end
7
7
 
8
8
  def visit_darwin subject
9
- @os = subject.os
10
9
  publish_event :add_box_start, type
11
10
 
12
11
  raise Errors::ProjectNotInitialized unless project_initialized?
@@ -14,8 +13,13 @@ module Picobox
14
13
  Boxes::Unpacker.new(os).unpack(type)
15
14
  end
16
15
 
16
+
17
+ def visit_linux subject
18
+ visit_darwin subject
19
+ end
20
+
17
21
  private
18
- attr_reader :os, :type
22
+ attr_reader :type
19
23
 
20
24
  def project_initialized?() Utils::Project.new(os).project_initialized? end
21
25
  end
@@ -6,7 +6,6 @@ module Picobox
6
6
  end
7
7
 
8
8
  def visit_darwin subject
9
- @os = subject.os
10
9
  publish_event :add_service_start, service
11
10
 
12
11
  raise Errors::ProjectNotInitialized unless project_initialized?
@@ -16,8 +15,13 @@ module Picobox
16
15
  publish_event :add_service_completed, service
17
16
  end
18
17
 
18
+
19
+ def visit_linux subject
20
+ visit_darwin subject
21
+ end
22
+
19
23
  private
20
- attr_reader :os, :service
24
+ attr_reader :service
21
25
 
22
26
  def project_initialized?() Utils::Project.new(os).project_initialized? end
23
27
  end
@@ -6,7 +6,14 @@ module Picobox
6
6
  end
7
7
 
8
8
  def visit_darwin subject
9
- system "docker-compose build #{service}"
9
+ publish_event :build_service_start, service
10
+ system "docker-compose build #{service} #{Picobox.output}"
11
+ publish_event :build_service_stop
12
+ end
13
+
14
+
15
+ def visit_linux subject
16
+ visit_darwin subject
10
17
  end
11
18
 
12
19
  private
@@ -1,17 +1,35 @@
1
1
  module Picobox
2
2
  module Commands
3
3
  class DownloadDocker < Picobox::Utils::VisitorByOs
4
- def visit_darwin subject
5
- unless subject.os.docker_installed?
6
- stream = open(subject.os.docker_url,
4
+ def visit_darwin subject
5
+ unless os.docker_installed?
6
+ stream = open(os.docker_url,
7
7
  content_length_proc: lambda { |total| publish_event :download_docker_start, total },
8
- progress_proc: lambda { |step| publish_event :download_docker_progress, step }
8
+ progress_proc: lambda { |step| publish_event :download_progress, step }
9
9
  )
10
10
 
11
- IO.copy_stream( stream, subject.os.docker_installer )
11
+ IO.copy_stream( stream, os.docker_installer )
12
12
  publish_event :download_docker_complete
13
13
  end
14
14
  end
15
+
16
+
17
+ def visit_linux subject
18
+ unless os.docker_compose_installed?
19
+ stream = open(os.docker_compose_url,
20
+ content_length_proc: lambda { |total| publish_event :download_docker_compose_start, total },
21
+ progress_proc: lambda { |step| publish_event :download_progress, step }
22
+ )
23
+
24
+ IO.copy_stream( stream, "#{os.tmp_dir}/docker_compose" )
25
+ publish_event :download_docker_compose_complete
26
+
27
+ system("#{os.su} 'mv #{os.tmp_dir}/docker_compose #{os.docker_compose}'")
28
+ TTY::File.chmod(os.docker_compose, 'u=x')
29
+ else
30
+ publish_event :docker_present, os.docker_compose_version?
31
+ end
32
+ end
15
33
  end
16
34
  end
17
35
  end
@@ -2,9 +2,15 @@ module Picobox
2
2
  module Commands
3
3
  class FinishInstall < Picobox::Utils::VisitorByOs
4
4
  def visit_darwin subject
5
+ publish_event :add_post_install_message, 'You should reload open shells to pick up shell changes'
5
6
  publish_event :install_complete
6
7
  publish_event :post_install_messages
7
8
  end
9
+
10
+
11
+ def visit_linux subject
12
+ visit_darwin subject
13
+ end
8
14
  end
9
15
  end
10
16
  end
@@ -4,6 +4,11 @@ module Picobox
4
4
  def visit_darwin subject
5
5
  publish_event :uninstall_complete
6
6
  end
7
+
8
+
9
+ def visit_linux subject
10
+ publish_event :uninstall_complete
11
+ end
7
12
  end
8
13
  end
9
14
  end